Loading examples/httpform.cpp +8 −5 Original line number Diff line number Diff line Loading @@ -47,11 +47,14 @@ public: void RequestEvent(libhttppp::HttpRequest* curreq ){ libhtmlpp::HtmlString formdat; try { std::cout << curreq->getContentLength() << ": " << curreq->RecvData.size() << std::endl; if(curreq->getContentLength() <= curreq->RecvData.size()){ Multiform(curreq, formdat); URlform(curreq, formdat); std::cout << "Send answer" << std::endl; sendResponse(curreq, formdat); curreq->clear(); } } catch (libhttppp::HTTPException& e) { if (e.getErrorType() != libhttppp::HTTPException::Note) { Loading src/http.cpp +23 −22 Original line number Diff line number Diff line Loading @@ -432,25 +432,30 @@ libhttppp::HttpResponse::~HttpResponse() { libhttppp::HttpRequest::HttpRequest() : HttpHeader(){ _RequestType=0; _MaxUploadSize=DEFAULT_UPLOADSIZE; _Readed=0; _firstHeaderData=nullptr; _lastHeaderData=nullptr; _ContentLength=nullptr; }; libhttppp::HttpRequest::HttpRequest(netplus::eventapi *evapi) : netplus::con(evapi) { _RequestType=0; _MaxUploadSize=DEFAULT_UPLOADSIZE; _Readed=0; _firstHeaderData=nullptr; _lastHeaderData=nullptr; _ContentLength=nullptr; } size_t libhttppp::HttpRequest::parse(){ HTTPException excep; void libhttppp::HttpRequest::clear(){ HttpHeader::clear(); _Request.clear(); _RequestURL.clear(); _RequestVersion.clear(); } size_t libhttppp::HttpRequest::parse(){ HTTPException excep; std::vector<char> header; Loading @@ -472,10 +477,10 @@ size_t libhttppp::HttpRequest::parse(){ }; try{ HttpHeader::HeaderData *contentlen=getData("content-length"); if(contentlen && getDataSizet(contentlen)!=_Readed) if(!_Request.empty()){ return 0; } if(!RecvData.empty()){ Loading Loading @@ -586,6 +591,9 @@ size_t libhttppp::HttpRequest::parse(){ std::move(RecvData.begin()+endpos,RecvData.end(),RecvData.begin()); RecvData.resize(RecvData.size()-endpos); _ContentLength=getData("content-length"); }else{ excep[HTTPException::Note] << "No Incoming data in queue"; throw excep; Loading Loading @@ -642,16 +650,8 @@ const char * libhttppp::HttpRequest::getRequestVersion(){ return _RequestVersion.c_str(); } size_t libhttppp::HttpRequest::getMessageBody(std::vector<char> &mbody){ HttpHeader::HeaderData *contentlen=getData("content-length"); size_t mlen = RecvData.size() < (getDataSizet(contentlen)-_Readed)? RecvData.size() : (getDataSizet(contentlen)-_Readed); std::copy(RecvData.begin(),RecvData.begin()+mlen, std::inserter<std::vector<char>>(mbody,mbody.end())); _Readed+=mlen; return mlen; size_t libhttppp::HttpRequest::getContentLength(){ return getDataInt(_ContentLength); } bool libhttppp::HttpRequest::isMobile(){ Loading Loading @@ -1195,10 +1195,11 @@ void libhttppp::HttpForm::_parseUrlDecode(libhttppp::HttpRequest* request){ HTTPException httpexception; std::string formdat; if(request->getRequestType()==POSTREQUEST){ std::vector<char> mdat; request->getMessageBody(mdat); std::copy(mdat.begin(),mdat.end(),std::inserter<std::string>(formdat,formdat.begin())); size_t clen = request->getDataSizet(request->_ContentLength); if(request->RecvData.size()>= clen){ std::copy(request->RecvData.begin(),request->RecvData.begin()+clen,std::inserter<std::string>(formdat,formdat.begin())); formdat.push_back('\0'); } }else if(request->getRequestType()==GETREQUEST){ const char *rurl=request->getRequest(); size_t rurlsize=strlen(rurl); Loading src/http.h +6 −2 Original line number Diff line number Diff line Loading @@ -131,6 +131,9 @@ namespace libhttppp { HttpRequest(); HttpRequest(netplus::eventapi *evapi); ~HttpRequest(); void clear(); /*server methods*/ size_t parse(); //only use as server Loading @@ -140,7 +143,8 @@ namespace libhttppp { const char *getRequest(); size_t getRequestLength(); const char *getRequestVersion(); size_t getMessageBody(std::vector<char> &mbody); size_t getContentLength(); /*mobilphone switch*/ bool isMobile(); Loading @@ -153,12 +157,12 @@ namespace libhttppp { void setMaxUploadSize(size_t upsize); void send(std::shared_ptr<netplus::socket> src,std::shared_ptr<netplus::socket> dest); private: size_t _Readed; std::string _Request; int _RequestType; std::string _RequestURL; std::string _RequestVersion; size_t _MaxUploadSize; HeaderData *_ContentLength; friend class HttpForm; }; Loading src/httpd.cpp +1 −3 Original line number Diff line number Diff line Loading @@ -65,11 +65,9 @@ void libhttppp::HttpEvent::DisconnectEvent(HttpRequest *curreq){ } void libhttppp::HttpEvent::RequestEvent(netplus::con* curcon){ size_t size; try{ size=((HttpRequest*)curcon)->parse(); ((HttpRequest*)curcon)->parse(); RequestEvent((HttpRequest*)curcon); ((HttpRequest*)curcon)->clear(); }catch(HTTPException &e){ netplus::NetException re; re[netplus::NetException::Error] << "http error:" << e.what(); Loading Loading
examples/httpform.cpp +8 −5 Original line number Diff line number Diff line Loading @@ -47,11 +47,14 @@ public: void RequestEvent(libhttppp::HttpRequest* curreq ){ libhtmlpp::HtmlString formdat; try { std::cout << curreq->getContentLength() << ": " << curreq->RecvData.size() << std::endl; if(curreq->getContentLength() <= curreq->RecvData.size()){ Multiform(curreq, formdat); URlform(curreq, formdat); std::cout << "Send answer" << std::endl; sendResponse(curreq, formdat); curreq->clear(); } } catch (libhttppp::HTTPException& e) { if (e.getErrorType() != libhttppp::HTTPException::Note) { Loading
src/http.cpp +23 −22 Original line number Diff line number Diff line Loading @@ -432,25 +432,30 @@ libhttppp::HttpResponse::~HttpResponse() { libhttppp::HttpRequest::HttpRequest() : HttpHeader(){ _RequestType=0; _MaxUploadSize=DEFAULT_UPLOADSIZE; _Readed=0; _firstHeaderData=nullptr; _lastHeaderData=nullptr; _ContentLength=nullptr; }; libhttppp::HttpRequest::HttpRequest(netplus::eventapi *evapi) : netplus::con(evapi) { _RequestType=0; _MaxUploadSize=DEFAULT_UPLOADSIZE; _Readed=0; _firstHeaderData=nullptr; _lastHeaderData=nullptr; _ContentLength=nullptr; } size_t libhttppp::HttpRequest::parse(){ HTTPException excep; void libhttppp::HttpRequest::clear(){ HttpHeader::clear(); _Request.clear(); _RequestURL.clear(); _RequestVersion.clear(); } size_t libhttppp::HttpRequest::parse(){ HTTPException excep; std::vector<char> header; Loading @@ -472,10 +477,10 @@ size_t libhttppp::HttpRequest::parse(){ }; try{ HttpHeader::HeaderData *contentlen=getData("content-length"); if(contentlen && getDataSizet(contentlen)!=_Readed) if(!_Request.empty()){ return 0; } if(!RecvData.empty()){ Loading Loading @@ -586,6 +591,9 @@ size_t libhttppp::HttpRequest::parse(){ std::move(RecvData.begin()+endpos,RecvData.end(),RecvData.begin()); RecvData.resize(RecvData.size()-endpos); _ContentLength=getData("content-length"); }else{ excep[HTTPException::Note] << "No Incoming data in queue"; throw excep; Loading Loading @@ -642,16 +650,8 @@ const char * libhttppp::HttpRequest::getRequestVersion(){ return _RequestVersion.c_str(); } size_t libhttppp::HttpRequest::getMessageBody(std::vector<char> &mbody){ HttpHeader::HeaderData *contentlen=getData("content-length"); size_t mlen = RecvData.size() < (getDataSizet(contentlen)-_Readed)? RecvData.size() : (getDataSizet(contentlen)-_Readed); std::copy(RecvData.begin(),RecvData.begin()+mlen, std::inserter<std::vector<char>>(mbody,mbody.end())); _Readed+=mlen; return mlen; size_t libhttppp::HttpRequest::getContentLength(){ return getDataInt(_ContentLength); } bool libhttppp::HttpRequest::isMobile(){ Loading Loading @@ -1195,10 +1195,11 @@ void libhttppp::HttpForm::_parseUrlDecode(libhttppp::HttpRequest* request){ HTTPException httpexception; std::string formdat; if(request->getRequestType()==POSTREQUEST){ std::vector<char> mdat; request->getMessageBody(mdat); std::copy(mdat.begin(),mdat.end(),std::inserter<std::string>(formdat,formdat.begin())); size_t clen = request->getDataSizet(request->_ContentLength); if(request->RecvData.size()>= clen){ std::copy(request->RecvData.begin(),request->RecvData.begin()+clen,std::inserter<std::string>(formdat,formdat.begin())); formdat.push_back('\0'); } }else if(request->getRequestType()==GETREQUEST){ const char *rurl=request->getRequest(); size_t rurlsize=strlen(rurl); Loading
src/http.h +6 −2 Original line number Diff line number Diff line Loading @@ -131,6 +131,9 @@ namespace libhttppp { HttpRequest(); HttpRequest(netplus::eventapi *evapi); ~HttpRequest(); void clear(); /*server methods*/ size_t parse(); //only use as server Loading @@ -140,7 +143,8 @@ namespace libhttppp { const char *getRequest(); size_t getRequestLength(); const char *getRequestVersion(); size_t getMessageBody(std::vector<char> &mbody); size_t getContentLength(); /*mobilphone switch*/ bool isMobile(); Loading @@ -153,12 +157,12 @@ namespace libhttppp { void setMaxUploadSize(size_t upsize); void send(std::shared_ptr<netplus::socket> src,std::shared_ptr<netplus::socket> dest); private: size_t _Readed; std::string _Request; int _RequestType; std::string _RequestURL; std::string _RequestVersion; size_t _MaxUploadSize; HeaderData *_ContentLength; friend class HttpForm; }; Loading
src/httpd.cpp +1 −3 Original line number Diff line number Diff line Loading @@ -65,11 +65,9 @@ void libhttppp::HttpEvent::DisconnectEvent(HttpRequest *curreq){ } void libhttppp::HttpEvent::RequestEvent(netplus::con* curcon){ size_t size; try{ size=((HttpRequest*)curcon)->parse(); ((HttpRequest*)curcon)->parse(); RequestEvent((HttpRequest*)curcon); ((HttpRequest*)curcon)->clear(); }catch(HTTPException &e){ netplus::NetException re; re[netplus::NetException::Error] << "http error:" << e.what(); Loading