Loading src/http.cpp +42 −35 Original line number Diff line number Diff line Loading @@ -485,14 +485,14 @@ libhttppp::HttpResponse::~HttpResponse() { } libhttppp::HttpRequest::HttpRequest() : HttpHeader(){ _RequestType=0; _RequestType=PARSEREQUEST;; _MaxUploadSize=DEFAULT_UPLOADSIZE; _firstHeaderData=nullptr; _lastHeaderData=nullptr; }; libhttppp::HttpRequest::HttpRequest(netplus::eventapi *evapi) : netplus::con(evapi) { _RequestType=0; _RequestType=PARSEREQUEST; _MaxUploadSize=DEFAULT_UPLOADSIZE; _firstHeaderData=nullptr; _lastHeaderData=nullptr; Loading @@ -500,7 +500,7 @@ libhttppp::HttpRequest::HttpRequest(netplus::eventapi *evapi) : netplus::con(eva void libhttppp::HttpRequest::clear(){ HttpHeader::clear(); _RequestType=0; _RequestType=PARSEREQUEST; _Request.clear(); _RequestURL.clear(); _RequestVersion.clear(); Loading @@ -527,8 +527,8 @@ size_t libhttppp::HttpRequest::parse(){ size_t endpos=RecvData.search("\r\n\r\n"),delimetersize=4; if(endpos==std::string::npos){ delimetersize=0; endpos=RecvData.size(); _RequestType=PARSEREQUEST; return 0; } std::copy(RecvData.begin(),RecvData.begin()+endpos, Loading Loading @@ -582,11 +582,13 @@ size_t libhttppp::HttpRequest::parse(){ /*parse the http header fields*/ size_t lrow=0,delimeter=0,startkeypos=0; for(size_t pos=0; pos< header.size(); pos++){ if(delimeter==0 && header[pos]==':'){ for(size_t pos=0; pos<=header.size(); pos++){ if(delimeter==0 && pos < header.size() && header[pos]==':'){ delimeter=pos; } if(header[pos]=='\r'){ if(header[pos]=='\r' || pos==header.size()){ if(delimeter>lrow && delimeter!=0){ size_t keylen=delimeter-startkeypos; if(keylen>0 && keylen <= header.size()){ Loading Loading @@ -619,6 +621,7 @@ size_t libhttppp::HttpRequest::parse(){ excep[HTTPException::Error] << "netplus error: " << e.what(); throw excep; } return header.size(); } Loading Loading @@ -753,10 +756,15 @@ libhttppp::HttpForm::~HttpForm(){ } void libhttppp::HttpForm::parse(libhttppp::HttpRequest* request){ try{ if(request->getRequestType()==POSTREQUEST){ HttpHeader::HeaderData *ctype=request->getData("content-type"); if(!ctype){ HTTPException excep; excep[HTTPException::Error] << "Http Form Parse Error: content type"; throw excep; } if(request->getContentLength() <= request->RecvData.size()){ if(ctype && strncmp(request->getData(ctype),"multipart/form-data",17)==0){ _parseBoundary(request->getData(ctype)); Loading @@ -782,7 +790,6 @@ void libhttppp::HttpForm::parse(libhttppp::HttpRequest* request){ std::copy(rurl+rdelimter,rurl+rurlsize,std::inserter<netplus::condata<char>>(urldat,urldat.begin())); _parseUrlDecode(urldat,urldat.size()); } }catch(...){} } const char *libhttppp::HttpForm::getContentType(){ Loading src/httpd.cpp +6 −4 Original line number Diff line number Diff line Loading @@ -71,17 +71,19 @@ void libhttppp::HttpEvent::RequestEvent(netplus::con* curcon,const int tid,void try{ REQUESTHANDLING: switch(cureq->getRequestType()){ case 0: cureq->parse(); case PARSEREQUEST: if(cureq->parse()!=0) goto REQUESTHANDLING; break; case GETREQUEST: RequestEvent(cureq,tid,args); cureq->_RequestType=PARSEREQUEST; break; case POSTREQUEST: if(cureq->getContentLength()<=cureq->RecvData.size()){ if(cureq->RecvData.size()>=cureq->getContentLength()){ RequestEvent(cureq,tid,args); cureq->RecvData.resize(cureq->getContentLength()); cureq->_RequestType=PARSEREQUEST; } break; default:{ Loading src/httpdefinitions.h +3 −2 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #pragma once //define REQUEST TYPE #define PARSEREQUEST 0 #define GETREQUEST 1 #define POSTREQUEST 2 Loading Loading
src/http.cpp +42 −35 Original line number Diff line number Diff line Loading @@ -485,14 +485,14 @@ libhttppp::HttpResponse::~HttpResponse() { } libhttppp::HttpRequest::HttpRequest() : HttpHeader(){ _RequestType=0; _RequestType=PARSEREQUEST;; _MaxUploadSize=DEFAULT_UPLOADSIZE; _firstHeaderData=nullptr; _lastHeaderData=nullptr; }; libhttppp::HttpRequest::HttpRequest(netplus::eventapi *evapi) : netplus::con(evapi) { _RequestType=0; _RequestType=PARSEREQUEST; _MaxUploadSize=DEFAULT_UPLOADSIZE; _firstHeaderData=nullptr; _lastHeaderData=nullptr; Loading @@ -500,7 +500,7 @@ libhttppp::HttpRequest::HttpRequest(netplus::eventapi *evapi) : netplus::con(eva void libhttppp::HttpRequest::clear(){ HttpHeader::clear(); _RequestType=0; _RequestType=PARSEREQUEST; _Request.clear(); _RequestURL.clear(); _RequestVersion.clear(); Loading @@ -527,8 +527,8 @@ size_t libhttppp::HttpRequest::parse(){ size_t endpos=RecvData.search("\r\n\r\n"),delimetersize=4; if(endpos==std::string::npos){ delimetersize=0; endpos=RecvData.size(); _RequestType=PARSEREQUEST; return 0; } std::copy(RecvData.begin(),RecvData.begin()+endpos, Loading Loading @@ -582,11 +582,13 @@ size_t libhttppp::HttpRequest::parse(){ /*parse the http header fields*/ size_t lrow=0,delimeter=0,startkeypos=0; for(size_t pos=0; pos< header.size(); pos++){ if(delimeter==0 && header[pos]==':'){ for(size_t pos=0; pos<=header.size(); pos++){ if(delimeter==0 && pos < header.size() && header[pos]==':'){ delimeter=pos; } if(header[pos]=='\r'){ if(header[pos]=='\r' || pos==header.size()){ if(delimeter>lrow && delimeter!=0){ size_t keylen=delimeter-startkeypos; if(keylen>0 && keylen <= header.size()){ Loading Loading @@ -619,6 +621,7 @@ size_t libhttppp::HttpRequest::parse(){ excep[HTTPException::Error] << "netplus error: " << e.what(); throw excep; } return header.size(); } Loading Loading @@ -753,10 +756,15 @@ libhttppp::HttpForm::~HttpForm(){ } void libhttppp::HttpForm::parse(libhttppp::HttpRequest* request){ try{ if(request->getRequestType()==POSTREQUEST){ HttpHeader::HeaderData *ctype=request->getData("content-type"); if(!ctype){ HTTPException excep; excep[HTTPException::Error] << "Http Form Parse Error: content type"; throw excep; } if(request->getContentLength() <= request->RecvData.size()){ if(ctype && strncmp(request->getData(ctype),"multipart/form-data",17)==0){ _parseBoundary(request->getData(ctype)); Loading @@ -782,7 +790,6 @@ void libhttppp::HttpForm::parse(libhttppp::HttpRequest* request){ std::copy(rurl+rdelimter,rurl+rurlsize,std::inserter<netplus::condata<char>>(urldat,urldat.begin())); _parseUrlDecode(urldat,urldat.size()); } }catch(...){} } const char *libhttppp::HttpForm::getContentType(){ Loading
src/httpd.cpp +6 −4 Original line number Diff line number Diff line Loading @@ -71,17 +71,19 @@ void libhttppp::HttpEvent::RequestEvent(netplus::con* curcon,const int tid,void try{ REQUESTHANDLING: switch(cureq->getRequestType()){ case 0: cureq->parse(); case PARSEREQUEST: if(cureq->parse()!=0) goto REQUESTHANDLING; break; case GETREQUEST: RequestEvent(cureq,tid,args); cureq->_RequestType=PARSEREQUEST; break; case POSTREQUEST: if(cureq->getContentLength()<=cureq->RecvData.size()){ if(cureq->RecvData.size()>=cureq->getContentLength()){ RequestEvent(cureq,tid,args); cureq->RecvData.resize(cureq->getContentLength()); cureq->_RequestType=PARSEREQUEST; } break; default:{ Loading
src/httpdefinitions.h +3 −2 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #pragma once //define REQUEST TYPE #define PARSEREQUEST 0 #define GETREQUEST 1 #define POSTREQUEST 2 Loading