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

some fixes

parent 1a4192ca
Loading
Loading
Loading
Loading
+0 −4
Original line number Diff line number Diff line
@@ -102,8 +102,6 @@ int main(int argc, char** argv){

    size_t recv= srvsock.recvData(data.get(), 16384,0);

    std::cout << recv << std::endl;

    std::vector<char> html;
    libhttppp::HttpResponse res;
    size_t len=recv,chunklen=0,hsize=0;
@@ -178,8 +176,6 @@ int main(int argc, char** argv){
        };

    }

    std::cout.write(html.data(), html.size())<< std::endl;
    return 0;
  }catch(netplus::NetException &exp){
    std::cerr << exp.what() <<std::endl;
+1 −1
Original line number Diff line number Diff line
@@ -52,7 +52,7 @@ void sendResponse(libhttppp::HttpRequest *curreq) {
             << "<body>";
     if(curreq->isMobile())
         condat << "<span>You are using a mobile Browser!</span><br>";
     for(libhttppp::HttpHeader::HeaderData *preq = curreq->getfirstHeaderData(); preq; preq=curreq->nextHeaderData(preq)){
     for(libhttppp::HttpHeader::HeaderData *preq = curreq->getfirstHeaderData(); preq; preq=preq->nextHeaderData()){
       condat  << preq->getkey()
               << ": ";
       for(libhttppp::HttpHeader::HeaderData::Values *cval=preq->getfirstValue(); cval; cval=cval->nextvalue()){
+1 −1
Original line number Diff line number Diff line
@@ -51,7 +51,7 @@ void sendResponse(libhttppp::HttpRequest *curreq) {
             << "  </head>"
             << "<body>";

     for(libhttppp::HttpHeader::HeaderData *preq = curreq->getfirstHeaderData(); preq; preq=curreq->nextHeaderData(preq)){
     for(libhttppp::HttpHeader::HeaderData *preq = curreq->getfirstHeaderData(); preq; preq=preq->nextHeaderData()){
       condat  << preq->getkey()
               << ": ";
       for(libhttppp::HttpHeader::HeaderData::Values *cval=preq->getfirstValue(); cval; cval=cval->nextvalue()){
+63 −54
Original line number Diff line number Diff line
@@ -66,10 +66,9 @@ libhttppp::HttpHeader::HeaderData* libhttppp::HttpHeader::getfirstHeaderData(){
  return _firstHeaderData;
}

libhttppp::HttpHeader::HeaderData* libhttppp::HttpHeader::nextHeaderData(HttpHeader::HeaderData* pos){
  return pos->_nextHeaderData;
libhttppp::HttpHeader::HeaderData * libhttppp::HttpHeader::HeaderData::nextHeaderData(){
  return _nextHeaderData;
}

libhttppp::HttpHeader::HeaderData *libhttppp::HttpHeader::getHeaderData(const char* key){
  HeaderData *curdat =_firstHeaderData;
  while(curdat){
@@ -83,22 +82,26 @@ libhttppp::HttpHeader::HeaderData *libhttppp::HttpHeader::getHeaderData(const ch

libhttppp::HttpHeader::HeaderData * libhttppp::HttpHeader::setHeaderData(const char* key){
  HeaderData *curdat =_firstHeaderData;
  if(!curdat){
    _firstHeaderData=new HeaderData(key);
    _lastHeaderData=_firstHeaderData;
    curdat=_lastHeaderData;
  }else{
    while(curdat){
      if(curdat->_Key==key){
        curdat->clear();
        curdat->_Key=key;
        break;
      }
      curdat=curdat->_nextHeaderData;
    }
  if(curdat==nullptr){
      if(!_firstHeaderData){
          _firstHeaderData=new HeaderData(key);
          _lastHeaderData=_firstHeaderData;
      }else{
    if(!curdat){
      _lastHeaderData->_nextHeaderData=new HeaderData(key);
      _lastHeaderData=_lastHeaderData->_nextHeaderData;
      }
      curdat=_lastHeaderData;
    }
  }

  return curdat;
}

@@ -315,6 +318,11 @@ libhttppp::HttpHeader::HeaderData::Values::Values(const char *val) {
  _value=val;
}

libhttppp::HttpHeader::HeaderData::Values::Values(const std::string& val) {
  _nextvalue=nullptr;
  _value=val;
}

libhttppp::HttpHeader::HeaderData::Values::~Values(){
}

@@ -443,7 +451,7 @@ size_t libhttppp::HttpResponse::printHeader(std::vector<char> &buffer){
    append(" ");
    sappend(_State);
    append("\r\n");
    for(HeaderData *curdat=getfirstHeaderData(); curdat; curdat=nextHeaderData(curdat)){
    for(HeaderData *curdat=getfirstHeaderData(); curdat; curdat=curdat->nextHeaderData()){
        appendKey(curdat->getkey());
        append(": ");
        for(HeaderData::Values *cval=curdat->getfirstValue(); cval; cval=cval->nextvalue()){
@@ -543,12 +551,10 @@ HEADERENDFOUND:
    }
    if( data[pos]=='\r' || (data[pos-1]!='\r' && data[pos]=='\n') ){
      if(delimeter>lrow && delimeter!=0){
        size_t keylen=delimeter-startkeypos;
        if(keylen>0 && keylen <= helen){
        if(pos>=0 && pos <= helen){
          std::string key;
          key.resize(keylen);
          std::copy(data+startkeypos,data+delimeter,std::begin(key));
          for (size_t it = 0; it < keylen; ++it) {
          std::copy(data+startkeypos,data+delimeter,back_inserter(key));
          for (size_t it = 0; it < key.length(); ++it) {
            if(isalpha(key[it]))
              key[it] = (char)tolower(key[it]);
          }
@@ -556,12 +562,11 @@ HEADERENDFOUND:
          while(data[delimeter]==' '){
            ++delimeter;
          };
          size_t valuelen=pos-delimeter;
          if(pos > 0 && valuelen <=helen){

          if(pos > 0 && pos <=helen){
            std::string value;
            value.resize(valuelen);
            std::copy(data+delimeter,data+pos,std::begin(value));
            for (size_t it = 0; it < valuelen; ++it) {
            std::copy(data+delimeter,data+pos,std::back_inserter(value));
            for (size_t it = 0; it < value.length(); ++it) {
              if(isalpha(value[it]))
                value[it] = (char)tolower(value[it]);
            }
@@ -573,7 +578,7 @@ HEADERENDFOUND:
            while(iv<value.length()){
                if(value[iv]==';'){
                  ncontent->push_back(value.substr(oldiv,iv-oldiv));
                  while(++iv==' '){
                  while(value[++iv]==' '){
                      if(iv==value.length())
                        break;
                  };
@@ -581,9 +586,7 @@ HEADERENDFOUND:
                }
                ++iv;
            }

            ncontent->push_back(value.substr(oldiv,value.length()-oldiv));

          }
        }
      }
@@ -605,15 +608,13 @@ HEADERENDFOUND:

void libhttppp::HttpResponse::setTransferEncoding(const char* enc){
  _TransferEncoding=setHeaderData("transfer-encoding");
  try{
     _TransferEncoding->at(0)=enc;
  }catch(...){
  _TransferEncoding->push_back(enc);
}
}

const char * libhttppp::HttpResponse::getTransferEncoding(){
  if(_TransferEncoding)
    return _TransferEncoding->at(0).getvalue().c_str();
  return nullptr;
}


@@ -734,14 +735,18 @@ size_t libhttppp::HttpRequest::parse(){
              key[it] = (char)tolower(key[it]);
            }
            key.push_back('\0');
            size_t valuelen=(pos-delimeter)-2;
            if(pos > 0 && valuelen <= header.size()){
              size_t vstart=delimeter+2;
            if(pos > 0 &&  pos < header.size()){
              size_t vstart=delimeter;
              while(header[++vstart]==' '){
                  if(vstart==header.size())
                    break;
              }
              std::string value(header.begin()+vstart,header.begin()+pos);
              for (size_t it = 0; it < valuelen; ++it) {
              for (size_t it = 0; it < value.length(); ++it) {
                value[it] = (char)tolower(value[it]);
              }
              value.push_back('\0');

              HeaderData *ncontent=setHeaderData(key.c_str());

              size_t oldiv=0,iv=0;
@@ -749,7 +754,7 @@ size_t libhttppp::HttpRequest::parse(){
              while(iv<value.length()){
                  if(value[iv]==';'){
                    ncontent->push_back(value.substr(oldiv,iv-oldiv));
                    while(++iv==' '){
                    while(value[++iv]==' '){
                      if(iv==value.length())
                        break;
                    };
@@ -757,7 +762,6 @@ size_t libhttppp::HttpRequest::parse(){
                  }
                 ++iv;
              }

              ncontent->push_back(value.substr(oldiv,value.length()-oldiv));
            }
          }
@@ -788,7 +792,7 @@ void libhttppp::HttpRequest::printHeader(std::string &buffer){
  buffer.append(" ");
  buffer.append(_RequestVersion);
  buffer.append("\r\n");
  for(HeaderData *curdat=getfirstHeaderData(); curdat; curdat=nextHeaderData(curdat)){
  for(HeaderData *curdat=getfirstHeaderData(); curdat; curdat=curdat->nextHeaderData()){
        buffer.append(curdat->getkey());
        buffer.append(": ");
        for(HeaderData::Values *cval=curdat->getfirstValue(); cval; cval=cval->nextvalue()){
@@ -833,12 +837,14 @@ size_t libhttppp::HttpRequest::getMaxUploadSize(){
  return _MaxUploadSize;
}


bool libhttppp::HttpRequest::isMobile(){
  for(HttpHeader::HeaderData *curdat=getfirstHeaderData(); curdat; curdat=nextHeaderData(curdat)){
  for(HeaderData *curdat=getfirstHeaderData(); curdat; curdat=curdat->nextHeaderData()){
      if(strcmp(curdat->getkey(),"user-agent")==0){
          if(!curdat->empty() && curdat->at(0).getvalue().find("mobi"))
          for(HeaderData::Values *cval=curdat->getfirstValue(); cval; cval=cval->nextvalue()){
            if(cval->getvalue().find("mobi") != std::string::npos){
               return true;
            }
          }
          break;
      }
  }
@@ -999,7 +1005,6 @@ size_t libhttppp::HttpForm::getBoundarySize(){
  return _Boundary.size();
}

#include <iostream>
void libhttppp::HttpForm::_parseMulitpart(const netplus::condata<char> &data){
    std::vector<char> realboundary;
    realboundary.resize(_Boundary.size()+2);
@@ -1007,8 +1012,6 @@ void libhttppp::HttpForm::_parseMulitpart(const netplus::condata<char> &data){
    realboundary[0]='-';
    realboundary[1]='-';

    std::cout.write(realboundary.data(),realboundary.size()) << std::endl;

    netplus::condata<char> req;

    std::copy(data.begin(),data.end(),
@@ -1480,7 +1483,7 @@ void libhttppp::HttpCookie::setcookie(HttpResponse *curresp,
                                      const char* key, const char* value,
                                      const char *comment,const char *domain,  
                                      int maxage, const char* path,
                                      bool secure,const char *version,const char *samesite){
                                      bool secure,const char *version,const char *samesite,bool httponly){
    HTTPException httpexception;
    if(!key || !value){
        httpexception[HTTPException::Note] << "no key or value set in cookie!";
@@ -1504,9 +1507,10 @@ void libhttppp::HttpCookie::setcookie(HttpResponse *curresp,
        dat->push_back(buf);
    }
    if(maxage>=0){
        buf="max-age=";
        buf+=maxage;
        dat->push_back(buf);
        std::stringstream ss;
        ss << "max-age=";
        ss << maxage;
        dat->push_back(ss.str());
    }
    if(path){
        buf="path=";
@@ -1531,6 +1535,11 @@ void libhttppp::HttpCookie::setcookie(HttpResponse *curresp,
        buf+=version;
        dat->push_back(buf);
    }

    if(httponly){
       dat->push_back("httponly");
    }

}

void libhttppp::HttpCookie::parse(libhttppp::HttpRequest* curreq){
+3 −2
Original line number Diff line number Diff line
@@ -63,6 +63,7 @@ namespace libhttppp {

        Values      *nextvalue();
        Values(const char *value);
        Values(const std::string& val);
        ~Values();
      private:
        std::string  _value;
@@ -87,6 +88,7 @@ namespace libhttppp {

      const char *getkey();

      HeaderData *nextHeaderData();
    private:
      HeaderData(const char *key);
      ~HeaderData();
@@ -98,7 +100,6 @@ namespace libhttppp {
    };
    
    HeaderData         *getfirstHeaderData();
    HeaderData         *nextHeaderData(HeaderData *pos);
    HeaderData         *getHeaderData(const char *key);
    HeaderData         *setHeaderData(const char *key);

@@ -359,7 +360,7 @@ namespace libhttppp {
                   const char *key,const char *value,
                   const char *comment=nullptr,const char *domain=nullptr, 
                   int maxage=-1,const char *path=nullptr,
                   bool secure=false,const char *version="1",const char *samesite=nullptr);
                   bool secure=false,const char *version="1",const char *samesite=nullptr,bool httponly=false);
    CookieData    *getfirstCookieData();
    CookieData    *getlastCookieData();
    CookieData    *addCookieData();