Commit 8ce53670 authored by jan.koester's avatar jan.koester
Browse files

fixed delete

parent 81487612
Loading
Loading
Loading
Loading
+20 −11
Original line number Diff line number Diff line
@@ -174,6 +174,16 @@ size_t libhttppp::HttpHeader::getHeaderSize(){
  return hsize;
}

void libhttppp::HttpHeader::clear(){
  while(_firstHeaderData){
    HeaderData *tmpdat=_firstHeaderData->_nextHeaderData;
    _firstHeaderData->_nextHeaderData=nullptr;
    delete _firstHeaderData;
    _firstHeaderData=tmpdat;
  }
  _lastHeaderData=nullptr;
}


libhttppp::HttpHeader::HeaderData::HeaderData(const char *key){
    HTTPException excep;
@@ -477,6 +487,7 @@ size_t libhttppp::HttpRequest::parse(){
            for(size_t cpos=pos; cpos<_Header.size(); ++cpos){
                if(_Header[cpos]==' ' && (cpos-pos)<255){
                    std::copy(_Header.begin()+pos,_Header.begin()+cpos,std::inserter<std::string>(_Request,_Request.begin()));
                    _Request.push_back('\0');
                    ++pos;
                    break;
                }
@@ -492,6 +503,7 @@ size_t libhttppp::HttpRequest::parse(){
            for(size_t cpos=pos; cpos<_Header.size(); ++cpos){
                if(_Header[cpos]==' ' && (cpos-pos)<255){
                    std::copy(_Header.begin()+pos,_Header.begin()+cpos,std::inserter<std::string>(_RequestVersion,_RequestVersion.begin()));
                    _RequestVersion.push_back('\0');
                    ++pos;
                    found=true;
                    break;
@@ -514,20 +526,19 @@ size_t libhttppp::HttpRequest::parse(){
                    if(delimeter>lrow && delimeter!=0){
                        size_t keylen=delimeter-startkeypos;
                        if(keylen>0 && keylen <= _Header.size()){
                            std::string key;
                            std::copy(_Header.begin()+startkeypos,_Header.begin()+(delimeter+1),std::inserter<std::string>(key,key.begin()));
                            std::string key(_Header.begin()+startkeypos,_Header.begin()+delimeter);
                            for (size_t it = 0; it < keylen; ++it) {
                                key[it] = (char)tolower(key[it]);
                            }
                            key.push_back('\0');
                            size_t valuelen=(pos-delimeter)-2;
                            if(pos > 0 && valuelen <= _Header.size()){
                                std::string value;
                                size_t vstart=delimeter+2;
                                std::copy(_Header.begin()+vstart,_Header.begin()+(delimeter-1),std::inserter<std::string>(value,value.begin()));
                                std::string value(_Header.begin()+vstart,_Header.begin()+pos);
                                for (size_t it = 0; it < valuelen; ++it) {
                                    value[it] = (char)tolower(value[it]);
                                }

                                value.push_back('\0');
                                *setData(key.c_str())<<value.c_str();
                            }
                        }
@@ -538,8 +549,6 @@ size_t libhttppp::HttpRequest::parse(){
                }
            }

            HttpHeader::HeaderData *contentlen=getData("content-length");

            if(_RequestType==POSTREQUEST){
                if(getRecvLength() > _MaxUploadSize){
                    cleanRecvData();
@@ -554,11 +563,12 @@ size_t libhttppp::HttpRequest::parse(){
            throw excep;
        }

    }catch(HTTPException &e){
        if (e.getErrorType() != libhttppp::HTTPException::Note) {
    }catch(netplus::NetException &e){
        if (e.getErrorType() != netplus::NetException::Note) {
            cleanRecvData();
        }
        throw e;
        excep[HTTPException::Error] << "netplus error: " << e.what();
        throw excep;
    }
    return _Header.size();
}
@@ -1171,7 +1181,6 @@ void libhttppp::HttpForm::_parseUrlDecode(libhttppp::HttpRequest* request){
  HTTPException httpexception;
  std::string formdat;
  if(request->getRequestType()==POSTREQUEST){
      size_t rsize=request->getRequestLength();
      std::vector<char> mdat=request->getMessageBody();
      std::copy(mdat.begin(),mdat.end(),std::inserter<std::string>(formdat,formdat.end()));
  }else if(request->getRequestType()==GETREQUEST){
+2 −0
Original line number Diff line number Diff line
@@ -78,6 +78,8 @@ namespace libhttppp {
    
    size_t      getElements();
    size_t      getHeaderSize();

    void        clear();
  protected:
    HttpHeader();
    virtual ~HttpHeader();
+3 −3
Original line number Diff line number Diff line
@@ -49,8 +49,7 @@ void libhttppp::HttpEvent::CreateConnetion(netplus::con ** curon){
}

void libhttppp::HttpEvent::deleteConnetion(netplus::con* curon){
    delete curon;
    curon=nullptr;
    delete (HttpRequest*)curon;
}

void libhttppp::HttpEvent::RequestEvent(HttpRequest *curreq){
@@ -69,13 +68,14 @@ void libhttppp::HttpEvent::RequestEvent(netplus::con* curcon){
    size_t size;
    try{
        size=((HttpRequest*)curcon)->parse();
        RequestEvent((HttpRequest*)curcon);
        ((HttpRequest*)curcon)->clear();
    }catch(HTTPException &e){
        netplus::NetException re;
        re[netplus::NetException::Error] << "http error:" << e.what();
        throw re;
    }
    curcon->resizeRecvQueue(size);
    RequestEvent((HttpRequest*)curcon);
}

void libhttppp::HttpEvent::ResponseEvent(netplus::con* curcon){
+1 −1

File changed.

Contains only whitespace changes.

+1 −1

File changed.

Contains only whitespace changes.