bool handle_web_request(void * args){ //get arguments void **ar = (void **) args; ServerSocket *serverSocket = (ServerSocket *) ar[0]; int client_file_descriptor = *((int *) ar[1]); char *buffer = (char *) ar[2]; //================================================= cout << "===========================" << endl; cout << "raw data : " << buffer << endl; //TODO:: optimize this (copy the whole buffer into string) string data(buffer); try{ ServerManager server_manager(data); string response; server_manager.handle_request(&response); std::vector<char> writable(response.size()+1); std::copy(response.begin(), response.end(), writable.begin()); writable[response.size()] = '\0'; //@Moustafa: please change to const char * instead of char * serverSocket->writeToSocket(&writable[0], args); HttpGetRequestParser request(data); cout << "Required file : " << request.getRequiredFileName() << endl; map<string,string> *m = request.getParameters(); map<string,string>::iterator it = m->begin(); cout << "parameters : " << endl; for (;it != m->end();it++) cout << it->first << " = " << request.getParameter(it->first) << endl; }catch(int e){ return false; } //================================================= //close the connection after returning the required object if(serverSocket->getConnectionType() == SOCK_STREAM) close(client_file_descriptor); return true; }