Refactor send_request for appservices
This commit is contained in:
		
							parent
							
								
									7067d7acae
								
							
						
					
					
						commit
						e72fd44bb5
					
				
					 1 changed files with 37 additions and 42 deletions
				
			
		|  | @ -49,51 +49,46 @@ where | |||
|     *reqwest_request.timeout_mut() = Some(Duration::from_secs(30)); | ||||
| 
 | ||||
|     let url = reqwest_request.url().clone(); | ||||
|     let reqwest_response = globals.reqwest_client().execute(reqwest_request).await; | ||||
|     let mut reqwest_response = globals.reqwest_client().execute(reqwest_request).await?; | ||||
| 
 | ||||
|     // Because reqwest::Response -> http::Response is complicated:
 | ||||
|     match reqwest_response { | ||||
|         Ok(mut reqwest_response) => { | ||||
|             let status = reqwest_response.status(); | ||||
|             let mut http_response = http::Response::builder().status(status); | ||||
|             let headers = http_response.headers_mut().unwrap(); | ||||
|     let status = reqwest_response.status(); | ||||
|     let mut http_response = http::Response::builder().status(status); | ||||
|     let headers = http_response.headers_mut().unwrap(); | ||||
| 
 | ||||
|             for (k, v) in reqwest_response.headers_mut().drain() { | ||||
|                 if let Some(key) = k { | ||||
|                     headers.insert(key, v); | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|             let status = reqwest_response.status(); | ||||
| 
 | ||||
|             let body = reqwest_response.bytes().await.unwrap_or_else(|e| { | ||||
|                 warn!("server error: {}", e); | ||||
|                 Vec::new().into() | ||||
|             }); // TODO: handle timeout
 | ||||
| 
 | ||||
|             if status != 200 { | ||||
|                 warn!( | ||||
|                     "Appservice returned bad response {} {}\n{}\n{:?}", | ||||
|                     destination, | ||||
|                     status, | ||||
|                     url, | ||||
|                     utils::string_from_bytes(&body) | ||||
|                 ); | ||||
|             } | ||||
| 
 | ||||
|             let response = T::IncomingResponse::try_from_http_response( | ||||
|                 http_response | ||||
|                     .body(body) | ||||
|                     .expect("reqwest body is valid http body"), | ||||
|             ); | ||||
|             response.map_err(|_| { | ||||
|                 warn!( | ||||
|                     "Appservice returned invalid response bytes {}\n{}", | ||||
|                     destination, url | ||||
|                 ); | ||||
|                 Error::BadServerResponse("Server returned bad response.") | ||||
|             }) | ||||
|     for (k, v) in reqwest_response.headers_mut().drain() { | ||||
|         if let Some(key) = k { | ||||
|             headers.insert(key, v); | ||||
|         } | ||||
|         Err(e) => Err(e.into()), | ||||
|     } | ||||
| 
 | ||||
|     let status = reqwest_response.status(); | ||||
| 
 | ||||
|     let body = reqwest_response.bytes().await.unwrap_or_else(|e| { | ||||
|         warn!("server error: {}", e); | ||||
|         Vec::new().into() | ||||
|     }); // TODO: handle timeout
 | ||||
| 
 | ||||
|     if status != 200 { | ||||
|         warn!( | ||||
|             "Appservice returned bad response {} {}\n{}\n{:?}", | ||||
|             destination, | ||||
|             status, | ||||
|             url, | ||||
|             utils::string_from_bytes(&body) | ||||
|         ); | ||||
|     } | ||||
| 
 | ||||
|     let response = T::IncomingResponse::try_from_http_response( | ||||
|         http_response | ||||
|             .body(body) | ||||
|             .expect("reqwest body is valid http body"), | ||||
|     ); | ||||
|     response.map_err(|_| { | ||||
|         warn!( | ||||
|             "Appservice returned invalid response bytes {}\n{}", | ||||
|             destination, url | ||||
|         ); | ||||
|         Error::BadServerResponse("Server returned bad response.") | ||||
|     }) | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue