Loading examples/httpcookie.cpp +11 −14 Original line number Diff line number Diff line Loading @@ -72,29 +72,26 @@ public: const char *getData(const char *key){ libhttppp::HttpForm curform; curform.parse(_Curreq); if(curform.getUrlcodedFormData()){ for(libhttppp::HttpForm::UrlcodedFormData *cururlform=curform.getUrlcodedFormData(); cururlform; cururlform=cururlform->nextUrlcodedFormData()){ for(libhttppp::HttpForm::UrlcodedForm::Data *cururlform=curform.UrlFormData.getFormData() ; cururlform; cururlform=cururlform->nextData()){ if(strcmp(key,cururlform->getKey())==0) return cururlform->getValue(); } } return nullptr; } int getDataInt(const char *key){ libhttppp::HttpForm curform; curform.parse(_Curreq); if(curform.getUrlcodedFormData()){ for(libhttppp::HttpForm::UrlcodedFormData *cururlform=curform.getUrlcodedFormData(); cururlform; cururlform=cururlform->nextUrlcodedFormData()){ for(libhttppp::HttpForm::UrlcodedForm::Data *cururlform=curform.UrlFormData.getFormData(); cururlform; cururlform=cururlform->nextData()){ if(strcmp(key,cururlform->getKey())==0){ char ktmp[255]; memcpy(ktmp,cururlform->getValue(),strlen(cururlform->getValue())+1); return atoi(ktmp); } } } return 0; } Loading examples/httpform.cpp +16 −17 Original line number Diff line number Diff line Loading @@ -28,7 +28,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include <string.h> #include <iostream> #include <netplus/eventapi.h> #include <netplus/exception.h> #include <htmlpp/html.h> Loading Loading @@ -69,7 +69,7 @@ private: if (curform.getBoundary()) { condat << "Boundary: " << curform.getBoundary() << "<br>"; for (libhttppp::HttpForm::MultipartFormData* curformdat = curform.getMultipartFormData(); curformdat; curformdat = curformdat->nextMultipartFormData()) { for (libhttppp::HttpForm::MultipartForm::Data* curformdat = curform.getMultipartFormData(); curformdat; curformdat = curformdat->nextMultipartFormData()) { condat << "Content-Disposition: <br>"; libhttppp::HttpForm::MultipartFormData::ContentDisposition* curctdisp = curformdat->getContentDisposition(); if (curctdisp->getDisposition()) Loading @@ -82,12 +82,12 @@ private: << "<div style=\"border: thin solid black\">"; if (curformdat->getContentType()) condat << "ContentType: " << curformdat->getContentType() << "<br>\r\n"; condat << "Datasize: " << curformdat->getDataSize() << "<br> Data:<br>\n"; for (size_t datapos = 0; datapos < curformdat->getDataSize(); datapos++) { condat.push_back(curformdat->getData()[datapos]); if (curformdat->getData()[datapos] == '\n') condat << "<br>"; } // condat << "Datasize: " << curformdat->getDataSize() << "<br> Data:<br>\n"; // for (size_t datapos = 0; datapos < curformdat->getDataSize(); datapos++) { // condat.push_back(curformdat->getData()[datapos]); // if (curformdat->getData()[datapos] == '\n') // condat << "<br>"; // } condat << "\r\n<br></div>"; } } Loading @@ -96,15 +96,14 @@ private: void URlform(libhttppp::HttpRequest* curreq, libhtmlpp::HtmlString& condat) { libhttppp::HttpForm curform; curform.parse(curreq); if (curform.getUrlcodedFormData()) { for (libhttppp::HttpForm::UrlcodedFormData* cururlform = curform.getUrlcodedFormData(); cururlform; cururlform = cururlform->nextUrlcodedFormData()) { for (libhttppp::HttpForm::UrlcodedForm::Data* cururlform = curform.UrlFormData.getFormData(); cururlform; cururlform = cururlform->nextData()) { condat << "<span>" << "Key: " << cururlform->getKey() << " Value: " << cururlform->getValue() << "</span><br/>"; } } }; void sendResponse(libhttppp::HttpRequest* curreq, libhtmlpp::HtmlString formdat) { Loading Loading @@ -191,7 +190,7 @@ public: try { Controller controller(getServerSocket()); controller.runEventloop(); }catch(libhttppp::HTTPException &e){ }catch(netplus::NetException &e){ std::cerr << e.what() << std::endl; } }; Loading examples/httphello.cpp +15 −9 Original line number Diff line number Diff line Loading @@ -25,10 +25,9 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *******************************************************************************/ #include <string.h> #include <iostream> #include <netplus/eventapi.h> #include <netplus/exception.h> #include "http.h" #include "httpd.h" Loading @@ -43,7 +42,7 @@ public: libhttppp::HttpResponse curres; const char *hello="<!DOCTYPE html><html><head><title>hello</title></head><body>Hello World</body></html>"; curres.setContentType("text/html"); curres.send(curreq,hello,strlen(hello)); curres.send(curreq,hello,85); }catch(libhttppp::HTTPException &e){ std::cerr << e.what() << std::endl; } Loading @@ -58,13 +57,20 @@ public: try { Controller controller(getServerSocket()); controller.runEventloop(); }catch(libhttppp::HTTPException &e){ std::cout << e.what() << std::endl; }catch(netplus::NetException &e){ httpexception[libhttppp::HTTPException::Critical] << e.what(); throw httpexception; } }; private: }; int main(int argc, char** argv){ try { HttpConD(argc,argv); return 0; }catch(libhttppp::HTTPException &e){ std::cout << e.what() << std::endl; return -1; } } src/http.cpp +224 −320 File changed.Preview size limit exceeded, changes collapsed. Show changes src/http.h +67 −65 Original line number Diff line number Diff line Loading @@ -168,78 +168,87 @@ namespace libhttppp { class HttpForm { public: class MultipartFormData{ class MultipartForm{ public: class Content{ class Data{ class ContentDisposition{ public: const char *getKey(); const char *getValue(); Content *nextContent(); void setKey(const char *key); void setValue(const char *value); ContentDisposition(); ~ContentDisposition(); ContentDisposition *nextContentDisposition(); private: Content(const char *key,const char *value); ~Content(); char *_Key; char *_Value; Content *_nextContent; ContentDisposition *_nextContentDisposition; std::vector<char> _Key; std::vector<char> _Value; friend class HttpForm; friend class MultipartFormData; }; class ContentDisposition{ public: char *getDisposition(); char *getName(); char *getFilename(); void setDisposition(const char *disposition); void setName(const char *name); void setFilename(const char *filename); ContentDisposition *getDisposition(); void addDisposition(ContentDisposition disposition); private: ContentDisposition(); ~ContentDisposition(); char *_Disposition; char *_Name; char *_Filename; Data(); ~Data(); ContentDisposition *_firstDisposition; ContentDisposition *_lastDisposition; std::vector<char> _Value; Data *_nextData; friend class HttpForm; friend class MultipartFormData; }; ContentDisposition *getContentDisposition(); const char *getData(); size_t getDataSize(); void addContent(const char *key,const char *value); const char *getContent(const char *key); const char *getContentType(); MultipartFormData *nextMultipartFormData(); private: MultipartFormData(); ~MultipartFormData(); Data *nextData(); Content *_firstContent; Content *_lastContent; MultipartForm(); ~MultipartForm(); private: Data *_firstData; Data *_lastData; void _parseContentDisposition(const char *disposition); ContentDisposition *_ContentDisposition; const char *_Data; size_t _Datasize; MultipartFormData *_nextMultipartFormData; friend class HttpForm; }; class UrlcodedFormData{ class UrlcodedForm{ public: class Data { public: Data(Data &fdat); Data(const char *key,const char *value); ~Data(); const char *getKey(); const char *getValue(); void setKey(const char *key); void setValue(const char *value); UrlcodedFormData *nextUrlcodedFormData(); Data *nextData(); private: UrlcodedFormData(); ~UrlcodedFormData(); std::string _Key; std::string _Value; UrlcodedFormData *_nextUrlcodedFormData; Data *_next; friend class HttpForm; }; UrlcodedForm(); ~UrlcodedForm(); void addFormData(Data &formdat); Data *getFormData(); private: Data *_firstData; Data *_lastData; friend class HttpForm; }; Loading @@ -249,28 +258,21 @@ namespace libhttppp { const char *getContentType(); /*urldecoded form*/ ssize_t urlDecode(const char *urlin,size_t urlinsize,char **urlout); UrlcodedFormData *addUrlcodedFormData(); UrlcodedFormData *getUrlcodedFormData(); UrlcodedForm UrlFormData; /*multiform*/ const char *getBoundary(); size_t getBoundarySize(); MultipartFormData *getMultipartFormData(); MultipartFormData *addMultipartFormData(); MultipartForm MultipartFormData; private: /*urldecoded*/ void _parseUrlDecode(HttpRequest *request); UrlcodedFormData *_firstUrlcodedFormData; UrlcodedFormData *_lastUrlcodedFormData; /*multiform*/ void _parseMulitpart(HttpRequest *request); void _parseMultiSection(const char *section,size_t sectionsize); void _parseMultiSection(std::vector<char> &data,size_t start, size_t end); void _parseBoundary(const char *contenttype); char *_Boundary; size_t _BoundarySize; MultipartFormData *_firstMultipartFormData; MultipartFormData *_lastMultipartFormData; /*both methods*/ inline int _ishex(int x); Loading Loading
examples/httpcookie.cpp +11 −14 Original line number Diff line number Diff line Loading @@ -72,29 +72,26 @@ public: const char *getData(const char *key){ libhttppp::HttpForm curform; curform.parse(_Curreq); if(curform.getUrlcodedFormData()){ for(libhttppp::HttpForm::UrlcodedFormData *cururlform=curform.getUrlcodedFormData(); cururlform; cururlform=cururlform->nextUrlcodedFormData()){ for(libhttppp::HttpForm::UrlcodedForm::Data *cururlform=curform.UrlFormData.getFormData() ; cururlform; cururlform=cururlform->nextData()){ if(strcmp(key,cururlform->getKey())==0) return cururlform->getValue(); } } return nullptr; } int getDataInt(const char *key){ libhttppp::HttpForm curform; curform.parse(_Curreq); if(curform.getUrlcodedFormData()){ for(libhttppp::HttpForm::UrlcodedFormData *cururlform=curform.getUrlcodedFormData(); cururlform; cururlform=cururlform->nextUrlcodedFormData()){ for(libhttppp::HttpForm::UrlcodedForm::Data *cururlform=curform.UrlFormData.getFormData(); cururlform; cururlform=cururlform->nextData()){ if(strcmp(key,cururlform->getKey())==0){ char ktmp[255]; memcpy(ktmp,cururlform->getValue(),strlen(cururlform->getValue())+1); return atoi(ktmp); } } } return 0; } Loading
examples/httpform.cpp +16 −17 Original line number Diff line number Diff line Loading @@ -28,7 +28,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include <string.h> #include <iostream> #include <netplus/eventapi.h> #include <netplus/exception.h> #include <htmlpp/html.h> Loading Loading @@ -69,7 +69,7 @@ private: if (curform.getBoundary()) { condat << "Boundary: " << curform.getBoundary() << "<br>"; for (libhttppp::HttpForm::MultipartFormData* curformdat = curform.getMultipartFormData(); curformdat; curformdat = curformdat->nextMultipartFormData()) { for (libhttppp::HttpForm::MultipartForm::Data* curformdat = curform.getMultipartFormData(); curformdat; curformdat = curformdat->nextMultipartFormData()) { condat << "Content-Disposition: <br>"; libhttppp::HttpForm::MultipartFormData::ContentDisposition* curctdisp = curformdat->getContentDisposition(); if (curctdisp->getDisposition()) Loading @@ -82,12 +82,12 @@ private: << "<div style=\"border: thin solid black\">"; if (curformdat->getContentType()) condat << "ContentType: " << curformdat->getContentType() << "<br>\r\n"; condat << "Datasize: " << curformdat->getDataSize() << "<br> Data:<br>\n"; for (size_t datapos = 0; datapos < curformdat->getDataSize(); datapos++) { condat.push_back(curformdat->getData()[datapos]); if (curformdat->getData()[datapos] == '\n') condat << "<br>"; } // condat << "Datasize: " << curformdat->getDataSize() << "<br> Data:<br>\n"; // for (size_t datapos = 0; datapos < curformdat->getDataSize(); datapos++) { // condat.push_back(curformdat->getData()[datapos]); // if (curformdat->getData()[datapos] == '\n') // condat << "<br>"; // } condat << "\r\n<br></div>"; } } Loading @@ -96,15 +96,14 @@ private: void URlform(libhttppp::HttpRequest* curreq, libhtmlpp::HtmlString& condat) { libhttppp::HttpForm curform; curform.parse(curreq); if (curform.getUrlcodedFormData()) { for (libhttppp::HttpForm::UrlcodedFormData* cururlform = curform.getUrlcodedFormData(); cururlform; cururlform = cururlform->nextUrlcodedFormData()) { for (libhttppp::HttpForm::UrlcodedForm::Data* cururlform = curform.UrlFormData.getFormData(); cururlform; cururlform = cururlform->nextData()) { condat << "<span>" << "Key: " << cururlform->getKey() << " Value: " << cururlform->getValue() << "</span><br/>"; } } }; void sendResponse(libhttppp::HttpRequest* curreq, libhtmlpp::HtmlString formdat) { Loading Loading @@ -191,7 +190,7 @@ public: try { Controller controller(getServerSocket()); controller.runEventloop(); }catch(libhttppp::HTTPException &e){ }catch(netplus::NetException &e){ std::cerr << e.what() << std::endl; } }; Loading
examples/httphello.cpp +15 −9 Original line number Diff line number Diff line Loading @@ -25,10 +25,9 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *******************************************************************************/ #include <string.h> #include <iostream> #include <netplus/eventapi.h> #include <netplus/exception.h> #include "http.h" #include "httpd.h" Loading @@ -43,7 +42,7 @@ public: libhttppp::HttpResponse curres; const char *hello="<!DOCTYPE html><html><head><title>hello</title></head><body>Hello World</body></html>"; curres.setContentType("text/html"); curres.send(curreq,hello,strlen(hello)); curres.send(curreq,hello,85); }catch(libhttppp::HTTPException &e){ std::cerr << e.what() << std::endl; } Loading @@ -58,13 +57,20 @@ public: try { Controller controller(getServerSocket()); controller.runEventloop(); }catch(libhttppp::HTTPException &e){ std::cout << e.what() << std::endl; }catch(netplus::NetException &e){ httpexception[libhttppp::HTTPException::Critical] << e.what(); throw httpexception; } }; private: }; int main(int argc, char** argv){ try { HttpConD(argc,argv); return 0; }catch(libhttppp::HTTPException &e){ std::cout << e.what() << std::endl; return -1; } }
src/http.h +67 −65 Original line number Diff line number Diff line Loading @@ -168,78 +168,87 @@ namespace libhttppp { class HttpForm { public: class MultipartFormData{ class MultipartForm{ public: class Content{ class Data{ class ContentDisposition{ public: const char *getKey(); const char *getValue(); Content *nextContent(); void setKey(const char *key); void setValue(const char *value); ContentDisposition(); ~ContentDisposition(); ContentDisposition *nextContentDisposition(); private: Content(const char *key,const char *value); ~Content(); char *_Key; char *_Value; Content *_nextContent; ContentDisposition *_nextContentDisposition; std::vector<char> _Key; std::vector<char> _Value; friend class HttpForm; friend class MultipartFormData; }; class ContentDisposition{ public: char *getDisposition(); char *getName(); char *getFilename(); void setDisposition(const char *disposition); void setName(const char *name); void setFilename(const char *filename); ContentDisposition *getDisposition(); void addDisposition(ContentDisposition disposition); private: ContentDisposition(); ~ContentDisposition(); char *_Disposition; char *_Name; char *_Filename; Data(); ~Data(); ContentDisposition *_firstDisposition; ContentDisposition *_lastDisposition; std::vector<char> _Value; Data *_nextData; friend class HttpForm; friend class MultipartFormData; }; ContentDisposition *getContentDisposition(); const char *getData(); size_t getDataSize(); void addContent(const char *key,const char *value); const char *getContent(const char *key); const char *getContentType(); MultipartFormData *nextMultipartFormData(); private: MultipartFormData(); ~MultipartFormData(); Data *nextData(); Content *_firstContent; Content *_lastContent; MultipartForm(); ~MultipartForm(); private: Data *_firstData; Data *_lastData; void _parseContentDisposition(const char *disposition); ContentDisposition *_ContentDisposition; const char *_Data; size_t _Datasize; MultipartFormData *_nextMultipartFormData; friend class HttpForm; }; class UrlcodedFormData{ class UrlcodedForm{ public: class Data { public: Data(Data &fdat); Data(const char *key,const char *value); ~Data(); const char *getKey(); const char *getValue(); void setKey(const char *key); void setValue(const char *value); UrlcodedFormData *nextUrlcodedFormData(); Data *nextData(); private: UrlcodedFormData(); ~UrlcodedFormData(); std::string _Key; std::string _Value; UrlcodedFormData *_nextUrlcodedFormData; Data *_next; friend class HttpForm; }; UrlcodedForm(); ~UrlcodedForm(); void addFormData(Data &formdat); Data *getFormData(); private: Data *_firstData; Data *_lastData; friend class HttpForm; }; Loading @@ -249,28 +258,21 @@ namespace libhttppp { const char *getContentType(); /*urldecoded form*/ ssize_t urlDecode(const char *urlin,size_t urlinsize,char **urlout); UrlcodedFormData *addUrlcodedFormData(); UrlcodedFormData *getUrlcodedFormData(); UrlcodedForm UrlFormData; /*multiform*/ const char *getBoundary(); size_t getBoundarySize(); MultipartFormData *getMultipartFormData(); MultipartFormData *addMultipartFormData(); MultipartForm MultipartFormData; private: /*urldecoded*/ void _parseUrlDecode(HttpRequest *request); UrlcodedFormData *_firstUrlcodedFormData; UrlcodedFormData *_lastUrlcodedFormData; /*multiform*/ void _parseMulitpart(HttpRequest *request); void _parseMultiSection(const char *section,size_t sectionsize); void _parseMultiSection(std::vector<char> &data,size_t start, size_t end); void _parseBoundary(const char *contenttype); char *_Boundary; size_t _BoundarySize; MultipartFormData *_firstMultipartFormData; MultipartFormData *_lastMultipartFormData; /*both methods*/ inline int _ishex(int x); Loading