fix(client): return error if Request has CONNECT method
				
					
				
			The higher-level `Client` has never supported `CONNECT` requests, but it used to send them, and then handle the responses incorrectly. Now, it will return an error immediately instead of misbehaving.
This commit is contained in:
		| @@ -138,9 +138,15 @@ where C: Connect, | |||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |         if req.method() == &Method::Connect { | ||||||
|  |             debug!("Client does not support CONNECT requests"); | ||||||
|  |             return FutureResponse(Box::new(future::err(::Error::Method))); | ||||||
|  |         } | ||||||
|  |  | ||||||
|         let domain = match uri::scheme_and_authority(req.uri()) { |         let domain = match uri::scheme_and_authority(req.uri()) { | ||||||
|             Some(uri) => uri, |             Some(uri) => uri, | ||||||
|             None => { |             None => { | ||||||
|  |                 debug!("request uri does not include scheme and authority"); | ||||||
|                 return FutureResponse(Box::new(future::err(::Error::Io( |                 return FutureResponse(Box::new(future::err(::Error::Io( | ||||||
|                     io::Error::new( |                     io::Error::new( | ||||||
|                         io::ErrorKind::InvalidInput, |                         io::ErrorKind::InvalidInput, | ||||||
|   | |||||||
| @@ -592,6 +592,32 @@ test! { | |||||||
|  |  | ||||||
| } | } | ||||||
|  |  | ||||||
|  | test! { | ||||||
|  |     name: client_connect_method, | ||||||
|  |  | ||||||
|  |     server: | ||||||
|  |         expected: "\ | ||||||
|  |             CONNECT {addr} HTTP/1.1\r\n\ | ||||||
|  |             Host: {addr}\r\n\ | ||||||
|  |             \r\n\ | ||||||
|  |             ", | ||||||
|  |         // won't ever get to reply | ||||||
|  |         reply: "", | ||||||
|  |  | ||||||
|  |     client: | ||||||
|  |         request: | ||||||
|  |             method: Connect, | ||||||
|  |             url: "http://{addr}/", | ||||||
|  |             headers: [], | ||||||
|  |             body: None, | ||||||
|  |             proxy: false, | ||||||
|  |         error: |err| match err { | ||||||
|  |             &hyper::Error::Method => true, | ||||||
|  |             _ => false, | ||||||
|  |         }, | ||||||
|  |  | ||||||
|  | } | ||||||
|  |  | ||||||
| test! { | test! { | ||||||
|     name: client_set_host_false, |     name: client_set_host_false, | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user