bool Http11Handler::writeResponse(void* req, void* res, void* context) { HttpRequest* request = (HttpRequest*)req; HttpResponse* response = (HttpResponse*)res; if(isClosed()) { if(request!=NULL) { delete request; } delete response; return true; } if(!response->isDone()) { response->updateContent(request, chunkSize); } if(response->getHeader(HttpRequest::Connection)=="") { if(StringUtil::toLowerCopy(request->getHeader(HttpRequest::Connection))!="keep-alive" || CastUtil::lexical_cast<int>(response->getStatusCode())>307 || request->getHttpVers()<1.1) { response->addHeaderValue(HttpResponse::Connection, "close"); } else { response->addHeaderValue(HttpResponse::Connection, "keep-alive"); } } std::string data = response->generateOnlyHeaderResponse(request); if(!write(data)) { bool isFirst = true; while(response->hasContent && (data = response->getRemainingContent(request->getUrl(), isFirst)) != "") { isFirst = false; if(write(data)) { break; } } } if(request!=NULL) { delete request; } delete response; return true; }