MCPcopy Create free account
hub / github.com/defold/defold / HandleRequest

Function HandleRequest

engine/script/src/http_service.cpp:278–392  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

276 }
277
278 void HandleRequest(Worker* worker, const dmMessage::URL* requester, uintptr_t userdata1, uintptr_t userdata2, dmHttpDDF::HttpRequest* request)
279 {
280 dmURI::Parts url;
281 request->m_Method = (const char*) ((uintptr_t) request + (uintptr_t) request->m_Method);
282 request->m_Url = (const char*) ((uintptr_t) request + (uintptr_t) request->m_Url);
283
284 dmURI::Result ur = dmURI::Parse(request->m_Url, &url);
285 if (ur != dmURI::RESULT_OK)
286 {
287 SendResponse(requester, 0, 0, 0, 0, 0, 0, 0, worker->m_Request->m_Url, 0, 0, 0, 0);
288 return;
289 }
290 if (url.m_Path[0] == '\0') {
291 // NOTE: Default to / for empty path
292 url.m_Path[0] = '/';
293 url.m_Path[1] = '\0';
294 }
295
296 dmURI::Parts proxy_url;
297 if (request->m_Proxy)
298 {
299 dmURI::Result pr = dmURI::Parse(request->m_Proxy, &proxy_url);
300 if (pr != dmURI::RESULT_OK)
301 {
302 SendResponse(requester, 0, 0, 0, 0, 0, 0, 0, worker->m_Request->m_Url, 0, 0, 0, 0);
303 return;
304 }
305 }
306 else
307 {
308 memset(&proxy_url, 0, sizeof(proxy_url));
309 }
310
311 if (worker->m_Client == 0 ||
312 !dmURI::Compare(&url, &worker->m_CurrentURL) ||
313 !dmURI::Compare(&proxy_url, &worker->m_CurrentProxyURL)) {
314
315 if (worker->m_Client) {
316 dmHttpClient::Delete(worker->m_Client);
317 }
318 // New connection
319 dmHttpClient::NewParams params;
320 params.m_HttpContent = &HttpContent;
321 params.m_HttpHeader = &HttpHeader;
322 params.m_HttpSendContentLength = &HttpSendContentLength;
323 params.m_HttpWrite = &HttpWrite;
324 params.m_HttpWriteHeaders = &HttpWriteHeaders;
325 params.m_Userdata = worker;
326 params.m_HttpCache = worker->m_Service->m_HttpCache;
327 params.m_RequestTimeout = request->m_Timeout;
328
329 worker->m_Client = dmHttpClient::New(&params, &url, &worker->m_Canceled, &proxy_url);
330
331 memcpy(&worker->m_CurrentURL, &url, sizeof(url));
332 memcpy(&worker->m_CurrentProxyURL, &proxy_url, sizeof(proxy_url));
333 }
334
335 worker->m_Response.SetSize(0);

Callers 1

DispatchFunction · 0.70

Calls 15

CompareFunction · 0.85
SetOptionIntFunction · 0.85
GetURIFunction · 0.85
FindHeaderFunction · 0.85
dmStrlCatFunction · 0.85
SetCacheKeyFunction · 0.85
GetLastSocketResultFunction · 0.85
SendResponseFunction · 0.70
DeleteFunction · 0.70
NewFunction · 0.70
ParseFunction · 0.50
RequestClass · 0.50

Tested by

no test coverage detected