void DeleteDictionary(treeNode* root) { if(root != NULL) { DeleteDictionary(root->getLeft()); DeleteDictionary(root->getRight()); delete root; } }
int HandleClientHTTPRequest(char* szHttpRequest, int nRequestSize, SOCKET scClientSocket) { int nReturnValue = 0; Dictionary *dictHttpReq = 0; LogMessage(LOG_DEBUG, "Started handling client http request"); if (nRequestSize <= 0 || szHttpRequest == 0) { LogMessage(LOG_ERROR, "Invalid http request"); return ERR_INVALID_PARAMETERS; } LogMessage(LOG_DEBUG, "Creating the dictionary for http request"); dictHttpReq = CreateDictionary(10); if (dictHttpReq == 0) { LogMessage(LOG_ERROR, "Failed to create dictionary, returning"); return ERR_INVALID_MEMORY_OPERATION; } LogMessage(LOG_DEBUG, "Populate the dictionary from http request"); nReturnValue = GenerateHttpRequestDictionary(szHttpRequest, nRequestSize, dictHttpReq); if (nReturnValue != 0) { //Error has occured while adding elements to dictHttpReq LogMessage(LOG_ERROR, "Failed to add elements to the http request dictionary"); return nReturnValue; } //Handle Method LogMessage(LOG_DEBUG, "Get the type of http request method"); nReturnValue = GetTypeOfMethod(GetValueFromDictionary(dictHttpReq, "METHOD")); switch (nReturnValue) { case METHOD_OPTIONS: { //Handle Options nReturnValue = Handle_Options(szHttpRequest, nRequestSize, scClientSocket); break; } case METHOD_GET: { //Handle Get //printf_s("BHS:INFO:Got GET method\n"); nReturnValue = Handle_Get(dictHttpReq, scClientSocket); break; } case METHOD_HEAD: { //Handle Head nReturnValue = Handle_Head(dictHttpReq, scClientSocket); break; } case METHOD_POST: { //Handle Post nReturnValue = Handle_Post(szHttpRequest, nRequestSize, scClientSocket); break; } case METHOD_PUT: { //Handle Put nReturnValue = Handle_Put(szHttpRequest, nRequestSize, scClientSocket); break; } case METHOD_DELETE: { //Handle Delete nReturnValue = Handle_Delete(dictHttpReq, scClientSocket); break; } case METHOD_TRACE: { //Handle Trace nReturnValue = Handle_Trace(szHttpRequest, nRequestSize, scClientSocket); break; } case METHOD_CONNECT: { //Handle Connect nReturnValue = Handle_Connect(szHttpRequest, nRequestSize, scClientSocket); break; } case METHOD_EXTEND_METHODS: { //Handle extended-methods nReturnValue = Handle_ExtMethods(szHttpRequest, nRequestSize, scClientSocket); break; } default: { LogMessage(LOG_ERROR, "Invalid type of method"); //Handle the error break; } } /*nReturnValue = send(scClientSocket, sTestMessage, 35, 0); if (nReturnValue == SOCKET_ERROR) { printf_s("BHS:ERROR:send to client failed %d\n", WSAGetLastError()); nReturnValue = ERR_SENDTOCLIENTFAILED; closesocket(scClientSocket); scClientSocket = INVALID_SOCKET; WSACleanup(); return nReturnValue; }*/ //closesocket(scClientSocket); //WSACleanup(); LogMessage(LOG_DEBUG, "Delete the created http request dictionary"); DeleteDictionary(dictHttpReq); dictHttpReq = 0; LogMessage(LOG_DEBUG, "Returning after handling client http request"); return nReturnValue; }