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()); }
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); }
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(); } }
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; } } }
SeqFileInput HttpClient::receiveResponse() { loadResponse(); return SeqFileInput(response.get()); }