Example #1
0
SeqFileInput HttpClient::send() {
	if (request == null) {
		try {
			sendRequest(naturalNull, psoAvoid100);
			request->closeOutput();
			loadResponse();
		} catch (NetworkException &) {
			if (connectionReused) {
				closeConnection();
				return send();
			}
			throw;
		} catch (LightSpeed::IOException &) {
			if (connectionReused) {
				closeConnection();
				return send();
			}
			throw;
		}
	} else {
		request->closeOutput();
		loadResponse();
	}
	return SeqFileInput(response.get());
}
Example #2
0
void TestEmailService::loadResponseScene()
{
    // 'scene' is an autorelease object
    auto scene = Scene::create();
    
    // 'layer' is an autorelease object
    auto layer = ResponseScene::create();
    layer->serviceId = GO_HOME;
    // add layer as a child to scene
    vector<string>::iterator it;
    
    for (it= responseArray.begin(); it!= responseArray.end(); it++)
    {
        layer->loadResponse(*it);
    }
    scene->addChild(layer);
    // run
    Director::getInstance()->replaceScene(scene);
}
Example #3
0
SeqFileInput HttpClient::send(ConstStrA body) {
	if (request == null) {
		try {
			sendRequest(body.length(), psoAvoid100);
			request->writeAll(body.data(), body.length());
			request->closeOutput();
			loadResponse();
			return SeqFileInput(response.get());
		} catch (NetworkException &) {
			if (connectionReused) {
				closeConnection();
				return send(body);
			}
			throw;
		}
	} else {
		return send();
	}
}
Example #4
0
void HttpClient::sendRequest(natural contentLength, PostStreamOption pso) {
	try {
		createRequest(urlToOpen,methodToOpen);
		request->setContentLength(contentLength);
		bool use100 = false;
		if (!useHTTP10) {


			switch(pso) {
			case psoDefault:
			case psoAllow100: use100 = connectionReused; break;
			case psoFavour100:
			case psoForce100: use100 = true;break;
			case psoBuffer: request->setContentLength(HttpRequest::calculateLength);break;
			case psoAvoid100NoReuseConn: if (connectionReused) {
											closeConnection();
											createRequest(urlToOpen,methodToOpen);
										};break;
			case psoAvoid100: break;
			}

			if (use100) {
				setHeader(fldExpect,continue100);
			}
		}

		for (HdrMap::Iterator iter = reqHdrMap.getFwIter(); iter.hasItems();) {
			const HdrMap::KeyValue &kv = iter.getNext();
			request->setHeader(kv.key, kv.value);
		}


		request->beginBody();
		createResponse(false);

		if (use100) {
			//flush buffers now
			nstream->flush();
			if (nstream->wait(INetworkResource::waitForInput,10000) != INetworkResource::waitTimeout) {
				response->readHeaders();
				//there can other response, so if we cannot continue, return response to the caller
				if (!response->canContinue()) {
					//check status
					if (status == 417) {//we got precondition failed - no worries, we can repeat the request

						response->skipRemainBody(false);

						return sendRequest(contentLength, psoAvoid100);

					} else {

						loadResponse();
						throw HttpStatusException(THISLOCATION,urlToOpen,status, statusMessage);

					}
				}
			}
		}


	}catch (NetworkException &) {
		if (connectionReused) {
			closeConnection();
			sendRequest(contentLength,pso);
		} else {
			throw;
		}
	}catch (IOException &) {
		if (connectionReused) {
			closeConnection();
			sendRequest(contentLength,pso);
		} else {
			throw;
		}
	}
}
Example #5
0
SeqFileInput HttpClient::receiveResponse() {
	loadResponse();
	return SeqFileInput(response.get());
}