spRequest RequestBuffer::buildAndRemoveRequest() { spRequest request = spRequest(new Request); if (size == 0 || bytes.size() < sizeof(size)) { log(LOG_ERROR, "buildAndRemoveRequest called with invalid request size."); return request; } std::string reqStr(bytes.begin() + sizeof(size), bytes.begin() + sizeof(size) + size); bytes.erase(bytes.begin(), bytes.begin() + sizeof(size) + size); request->ParseFromString(reqStr); calculateSize(); return request; }
void * CTServ::ServiceConnection(void *ptr) { std::unique_ptr<CRequest> spRequest(reinterpret_cast<CRequest*>(ptr)); try{ spRequest->_spRequest.reset(spRequest->_spConSock->ReadRequest()); spRequest->ParseRequest(); spRequest->BuildResponse(); spRequest->_spConSock->Writeline(spRequest->_reply.c_str(), spRequest->_reply.size()); //std::cout << spRequest->_reply << std::endl; spRequest->_spConSock->Writeline(spRequest->_spContent->GetData() , spRequest->_spContent->GetSize()); //std::cout << spRequest->_reply << std::endl; }catch (const char * e){ //catch the exception and rock on! std::cout << e << std::endl; } spRequest = nullptr; pthread_exit(nullptr); }