MCPcopy Create free account
hub / github.com/Roy3838/Observer / proxy_handler

Function proxy_handler

app/mobile/src/server.rs:277–335  ·  view source on GitHub ↗

Proxy handler for inference requests (same as desktop)

(
    State(state): State<AppState>,
    method: Method,
    headers: HeaderMap,
    uri: Uri,
    body: Body,
)

Source from the content-addressed store, hash-verified

275
276/// Proxy handler for inference requests (same as desktop)
277async fn proxy_handler(
278 State(state): State<AppState>,
279 method: Method,
280 headers: HeaderMap,
281 uri: Uri,
282 body: Body,
283) -> Result<Response<Body>, StatusCode> {
284 let path = uri.path();
285 let query = uri.query().unwrap_or("");
286
287 let target_url = {
288 let settings = state.app_handle.state::<AppSettings>();
289 let ollama_url_guard = settings.ollama_url.lock().unwrap();
290
291 let base_url = ollama_url_guard
292 .as_deref()
293 .unwrap_or("http://127.0.0.1:11434");
294
295 format!("{}{}?{}", base_url, path, query)
296 };
297
298 eprintln!("Proxying {} request to: {}", method, target_url);
299
300 let body_bytes = match body.collect().await {
301 Ok(collected) => collected.to_bytes(),
302 Err(e) => {
303 eprintln!("Failed to collect request body: {}", e);
304 return Err(StatusCode::INTERNAL_SERVER_ERROR);
305 }
306 };
307
308 let reqwest_request = state
309 .http_client
310 .request(method, &target_url)
311 .headers(headers)
312 .body(body_bytes);
313
314 match reqwest_request.send().await {
315 Ok(upstream_response) => {
316 eprintln!("Proxy response status: {}", upstream_response.status());
317 let mut response_builder = Response::builder()
318 .status(upstream_response.status())
319 .version(upstream_response.version());
320
321 if let Some(headers) = response_builder.headers_mut() {
322 headers.extend(upstream_response.headers().clone());
323 }
324
325 let response_stream = upstream_response.bytes_stream();
326 let response_body = Body::from_stream(response_stream);
327
328 Ok(response_builder.body(response_body).unwrap())
329 }
330 Err(e) => {
331 eprintln!("Proxy request to inference server failed: {}", e);
332 Err(StatusCode::BAD_GATEWAY)
333 }
334 }

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected