Commit 78864177 authored by jan.koester's avatar jan.koester
Browse files

some fixes

parent 2ee02102
Loading
Loading
Loading
Loading
+42 −35
Original line number Diff line number Diff line
@@ -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;
@@ -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();
@@ -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,
@@ -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()){
@@ -619,6 +621,7 @@ size_t libhttppp::HttpRequest::parse(){
    excep[HTTPException::Error] << "netplus error: " << e.what();
    throw excep;
  }

  return header.size();
}

@@ -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));
@@ -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(){
+6 −4
Original line number Diff line number Diff line
@@ -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:{
+3 −2
Original line number Diff line number Diff line
@@ -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