void cg_upnp_ssdprequest_delete(CgUpnpSSDPRequest *ssdpReq) { cg_log_debug_l4("Entering...\n"); cg_http_request_delete(ssdpReq); cg_log_debug_l4("Leaving...\n"); }
void cg_soap_request_clear(CgSoapRequest *soapReq) { cg_log_debug_l4("Entering...\n"); cg_xml_nodelist_clear(soapReq->rootNodeList); if (soapReq->isHttpReqCreated == TRUE) cg_http_request_delete(soapReq->httpReq); soapReq->httpReq = cg_http_request_new(); soapReq->isHttpReqCreated = TRUE; cg_http_request_setcontenttype(soapReq->httpReq, CG_SOAP_CONTENT_TYPE); cg_http_request_setmethod(soapReq->httpReq, CG_HTTP_POST); cg_log_debug_l4("Leaving...\n"); }
void cg_soap_request_delete(CgSoapRequest *soapReq) { cg_log_debug_l4("Entering...\n"); cg_soap_request_clear(soapReq); cg_xml_nodelist_delete(soapReq->rootNodeList); if (soapReq->isHttpReqCreated == TRUE) cg_http_request_delete(soapReq->httpReq); cg_soap_response_delete(soapReq->soapRes); free(soapReq); cg_log_debug_l4("Leaving...\n"); }
BOOL cg_soap_request_sethttprequest(CgSoapRequest *soapReq, CgHttpRequest *httpReq) { char *content; size_t contentLen; cg_log_debug_l4("Entering...\n"); if (soapReq->isHttpReqCreated == TRUE) cg_http_request_delete(soapReq->httpReq); soapReq->httpReq = httpReq; soapReq->isHttpReqCreated = FALSE; content = cg_http_request_getcontent(httpReq); contentLen = cg_http_request_getcontentlength(httpReq); if (content == NULL || contentLen <=0) return FALSE; cg_log_debug_l4("Leaving...\n"); return cg_soap_request_parsemessage(soapReq, content, contentLen); }
static void cg_http_server_clientthread(CgThread *thread) { CgHttpServerClientData *clientData; CgHttpServer *httpServer; CgSocket *clientSock; void *httpServerUserData; CgHttpRequest *httpReq; char *version = NULL; cg_log_debug_l4("Entering...\n"); clientData = (CgHttpServerClientData *)cg_thread_getuserdata(thread); httpServer = clientData->httpServer; clientSock = clientData->clientSock; httpServerUserData = cg_http_server_getuserdata(httpServer); httpReq = cg_http_request_new(); cg_http_request_setsocket(httpReq, clientSock); /**** Thanks for Makela Aapo (10/31/05) ****/ while (cg_http_request_read(httpReq, clientSock) == TRUE && cg_thread_isrunnable(thread) == TRUE) { /* Check some validity of the request */ version = cg_http_request_getversion(httpReq); if (cg_strcmp(version, CG_HTTP_VER11) == 0) { /* According to HTTP/1.1 spec, we must not tolerate HTTP/1.1 request without HOST-header */ if (cg_http_request_gethost(httpReq) == NULL) { cg_http_request_postbadrequest(httpReq); continue; } } if (httpServer->listener != NULL) { cg_http_request_setuserdata(httpReq, httpServerUserData); httpServer->listener(httpReq); } /* Close connection according to HTTP version and headers */ if (cg_strcmp(version, CG_HTTP_VER10) == 0) { /* Terminate connection after HTTP/1.0 request */ break; } /* We are having HTTP/1.1 or better => terminate, if requested */ if (cg_http_request_iskeepaliveconnection(httpReq) == FALSE) { break; } } cg_log_debug_s("Dropping HTTP client\n"); cg_http_request_delete(httpReq); cg_socket_close(clientSock); cg_socket_delete(clientSock); cg_http_server_clientdata_delete(clientData); cg_thread_setuserdata(thread, NULL); // This code frequently crashes. mutex lock referencing free'd memory. cg_http_server_lock(httpServer); cg_thread_remove(thread); cg_http_server_unlock(httpServer); cg_log_debug_l4("Leaving...\n"); cg_thread_delete(thread); }