Beispiel #1
0
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;
}
Beispiel #2
0
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);
}