示例#1
0
void Http2RequestResponseData::updateContent() {
	if(!isWebSocket) {
		HttpResponse* res = (HttpResponse*)incompleteResponse;
		if(data.length()==0 && res!=NULL && res->isContentRemains()) {
			data = res->getRemainingContent(url, false);
		}
	} else {
		WebSocketData* res = (WebSocketData*)incompleteResponse;
		if(data.length()==0 && res!=NULL && res->isContentRemains()) {
			data = res->getRemainingContent();
		}
	}
}
示例#2
0
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;
}