Loading examples/httpclient.cpp +0 −4 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading examples/httpcon.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -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()){ Loading examples/httpproxy.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -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()){ Loading src/http.cpp +63 −54 Original line number Diff line number Diff line Loading @@ -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){ Loading @@ -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; } Loading Loading @@ -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(){ } Loading Loading @@ -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()){ Loading Loading @@ -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]); } Loading @@ -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]); } Loading @@ -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; }; Loading @@ -581,9 +586,7 @@ HEADERENDFOUND: } ++iv; } ncontent->push_back(value.substr(oldiv,value.length()-oldiv)); } } } Loading @@ -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; } Loading Loading @@ -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; Loading @@ -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; }; Loading @@ -757,7 +762,6 @@ size_t libhttppp::HttpRequest::parse(){ } ++iv; } ncontent->push_back(value.substr(oldiv,value.length()-oldiv)); } } Loading Loading @@ -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()){ Loading Loading @@ -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; } } Loading Loading @@ -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); Loading @@ -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(), Loading Loading @@ -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!"; Loading @@ -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="; Loading @@ -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){ Loading src/http.h +3 −2 Original line number Diff line number Diff line Loading @@ -63,6 +63,7 @@ namespace libhttppp { Values *nextvalue(); Values(const char *value); Values(const std::string& val); ~Values(); private: std::string _value; Loading @@ -87,6 +88,7 @@ namespace libhttppp { const char *getkey(); HeaderData *nextHeaderData(); private: HeaderData(const char *key); ~HeaderData(); Loading @@ -98,7 +100,6 @@ namespace libhttppp { }; HeaderData *getfirstHeaderData(); HeaderData *nextHeaderData(HeaderData *pos); HeaderData *getHeaderData(const char *key); HeaderData *setHeaderData(const char *key); Loading Loading @@ -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(); Loading Loading
examples/httpclient.cpp +0 −4 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading
examples/httpcon.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -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()){ Loading
examples/httpproxy.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -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()){ Loading
src/http.cpp +63 −54 Original line number Diff line number Diff line Loading @@ -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){ Loading @@ -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; } Loading Loading @@ -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(){ } Loading Loading @@ -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()){ Loading Loading @@ -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]); } Loading @@ -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]); } Loading @@ -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; }; Loading @@ -581,9 +586,7 @@ HEADERENDFOUND: } ++iv; } ncontent->push_back(value.substr(oldiv,value.length()-oldiv)); } } } Loading @@ -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; } Loading Loading @@ -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; Loading @@ -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; }; Loading @@ -757,7 +762,6 @@ size_t libhttppp::HttpRequest::parse(){ } ++iv; } ncontent->push_back(value.substr(oldiv,value.length()-oldiv)); } } Loading Loading @@ -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()){ Loading Loading @@ -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; } } Loading Loading @@ -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); Loading @@ -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(), Loading Loading @@ -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!"; Loading @@ -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="; Loading @@ -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){ Loading
src/http.h +3 −2 Original line number Diff line number Diff line Loading @@ -63,6 +63,7 @@ namespace libhttppp { Values *nextvalue(); Values(const char *value); Values(const std::string& val); ~Values(); private: std::string _value; Loading @@ -87,6 +88,7 @@ namespace libhttppp { const char *getkey(); HeaderData *nextHeaderData(); private: HeaderData(const char *key); ~HeaderData(); Loading @@ -98,7 +100,6 @@ namespace libhttppp { }; HeaderData *getfirstHeaderData(); HeaderData *nextHeaderData(HeaderData *pos); HeaderData *getHeaderData(const char *key); HeaderData *setHeaderData(const char *key); Loading Loading @@ -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(); Loading