@@ -245,28 +245,10 @@ where C: Connect + Sync + 'static,
245
245
}
246
246
} ;
247
247
248
- let uri = req. uri ( ) . clone ( ) ;
249
- let domain = match ( uri. scheme_part ( ) , uri. authority_part ( ) ) {
250
- ( Some ( scheme) , Some ( auth) ) => {
251
- format ! ( "{}://{}" , scheme, auth)
252
- }
253
- ( None , Some ( auth) ) if is_http_connect => {
254
- let port = auth. port_part ( ) . unwrap ( ) ;
255
- let scheme = match port. as_str ( ) {
256
- "443" => {
257
- set_scheme ( req. uri_mut ( ) , Scheme :: HTTPS ) ;
258
- "https"
259
- } ,
260
- _ => {
261
- set_scheme ( req. uri_mut ( ) , Scheme :: HTTP ) ;
262
- "http"
263
- } ,
264
- } ;
265
- format ! ( "{}://{}" , scheme, auth)
266
- } ,
267
- _ => {
268
- debug ! ( "Client requires absolute-form URIs, received: {:?}" , uri) ;
269
- return ResponseFuture :: new ( Box :: new ( future:: err ( :: Error :: new_user_absolute_uri_required ( ) ) ) )
248
+ let domain = match extract_domain ( req. uri_mut ( ) , is_http_connect) {
249
+ Ok ( s) => s,
250
+ Err ( err) => {
251
+ return ResponseFuture :: new ( Box :: new ( future:: err ( err) ) ) ;
270
252
}
271
253
} ;
272
254
@@ -808,6 +790,33 @@ fn authority_form(uri: &mut Uri) {
808
790
} ;
809
791
}
810
792
793
+ fn extract_domain ( uri : & mut Uri , is_http_connect : bool ) -> :: Result < String > {
794
+ let uri_clone = uri. clone ( ) ;
795
+ match ( uri_clone. scheme_part ( ) , uri_clone. authority_part ( ) ) {
796
+ ( Some ( scheme) , Some ( auth) ) => {
797
+ Ok ( format ! ( "{}://{}" , scheme, auth) )
798
+ }
799
+ ( None , Some ( auth) ) if is_http_connect => {
800
+ let port = auth. port_part ( ) ;
801
+ let scheme = match port. as_ref ( ) . map ( |p| p. as_str ( ) ) {
802
+ Some ( "443" ) => {
803
+ set_scheme ( uri, Scheme :: HTTPS ) ;
804
+ "https"
805
+ }
806
+ _ => {
807
+ set_scheme ( uri, Scheme :: HTTP ) ;
808
+ "http"
809
+ } ,
810
+ } ;
811
+ Ok ( format ! ( "{}://{}" , scheme, auth) )
812
+ } ,
813
+ _ => {
814
+ debug ! ( "Client requires absolute-form URIs, received: {:?}" , uri) ;
815
+ Err ( :: Error :: new_user_absolute_uri_required ( ) )
816
+ }
817
+ }
818
+ }
819
+
811
820
fn set_scheme ( uri : & mut Uri , scheme : Scheme ) {
812
821
debug_assert ! ( uri. scheme_part( ) . is_none( ) , "set_scheme expects no existing scheme" ) ;
813
822
let old = mem:: replace ( uri, Uri :: default ( ) ) ;
@@ -1089,4 +1098,11 @@ mod unit_tests {
1089
1098
authority_form ( & mut uri) ;
1090
1099
assert_eq ! ( uri. to_string( ) , "hyper.rs" ) ;
1091
1100
}
1101
+
1102
+ #[ test]
1103
+ fn test_extract_domain_connect_no_port ( ) {
1104
+ let mut uri = "hyper.rs" . parse ( ) . unwrap ( ) ;
1105
+ let domain = extract_domain ( & mut uri, true ) . expect ( "extract domain" ) ;
1106
+ assert_eq ! ( domain, "http://hyper.rs" ) ;
1107
+ }
1092
1108
}
0 commit comments