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

post api changed

parent 570a1b87
Loading
Loading
Loading
Loading
+8 −5
Original line number Diff line number Diff line
@@ -47,11 +47,14 @@ public:
    void RequestEvent(libhttppp::HttpRequest* curreq ){
            libhtmlpp::HtmlString formdat;
            try {
                std::cout << curreq->getContentLength() << ": " << curreq->RecvData.size() << std::endl;
                if(curreq->getContentLength() <= curreq->RecvData.size()){
                    Multiform(curreq, formdat);
                    URlform(curreq, formdat);
                    std::cout << "Send answer" << std::endl;
                    sendResponse(curreq, formdat);
                
                    curreq->clear();
                }
            }
            catch (libhttppp::HTTPException& e) {
                if (e.getErrorType() != libhttppp::HTTPException::Note) {
+23 −22
Original line number Diff line number Diff line
@@ -432,25 +432,30 @@ libhttppp::HttpResponse::~HttpResponse() {
libhttppp::HttpRequest::HttpRequest() : HttpHeader(){
  _RequestType=0;
  _MaxUploadSize=DEFAULT_UPLOADSIZE;
  _Readed=0;
  _firstHeaderData=nullptr;
  _lastHeaderData=nullptr;
  _ContentLength=nullptr;
};

libhttppp::HttpRequest::HttpRequest(netplus::eventapi *evapi) : netplus::con(evapi) {
  _RequestType=0;
  _MaxUploadSize=DEFAULT_UPLOADSIZE;
  _Readed=0;
  _firstHeaderData=nullptr;
  _lastHeaderData=nullptr;
  _ContentLength=nullptr;
}

size_t libhttppp::HttpRequest::parse(){
    HTTPException excep;

void libhttppp::HttpRequest::clear(){
  HttpHeader::clear();
  _Request.clear();
  _RequestURL.clear();
  _RequestVersion.clear();
}



size_t libhttppp::HttpRequest::parse(){
    HTTPException excep;

    std::vector<char> header;

@@ -472,10 +477,10 @@ size_t libhttppp::HttpRequest::parse(){
    };

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

        if(contentlen && getDataSizet(contentlen)!=_Readed)
        if(!_Request.empty()){
          return 0;
        }

        if(!RecvData.empty()){

@@ -586,6 +591,9 @@ size_t libhttppp::HttpRequest::parse(){

            std::move(RecvData.begin()+endpos,RecvData.end(),RecvData.begin());
            RecvData.resize(RecvData.size()-endpos);

            _ContentLength=getData("content-length");

        }else{
            excep[HTTPException::Note] << "No Incoming data in queue";
            throw excep;
@@ -642,16 +650,8 @@ const char * libhttppp::HttpRequest::getRequestVersion(){
  return _RequestVersion.c_str();
}

size_t libhttppp::HttpRequest::getMessageBody(std::vector<char> &mbody){
  HttpHeader::HeaderData *contentlen=getData("content-length");

  size_t mlen = RecvData.size() < (getDataSizet(contentlen)-_Readed)?
                RecvData.size() : (getDataSizet(contentlen)-_Readed);

  std::copy(RecvData.begin(),RecvData.begin()+mlen,
            std::inserter<std::vector<char>>(mbody,mbody.end()));
  _Readed+=mlen;
  return mlen;
size_t libhttppp::HttpRequest::getContentLength(){
  return getDataInt(_ContentLength);
}

bool libhttppp::HttpRequest::isMobile(){
@@ -1195,10 +1195,11 @@ void libhttppp::HttpForm::_parseUrlDecode(libhttppp::HttpRequest* request){
  HTTPException httpexception;
  std::string formdat;
  if(request->getRequestType()==POSTREQUEST){
      std::vector<char> mdat;
      request->getMessageBody(mdat);
      std::copy(mdat.begin(),mdat.end(),std::inserter<std::string>(formdat,formdat.begin()));
      size_t clen = request->getDataSizet(request->_ContentLength);
      if(request->RecvData.size()>= clen){
        std::copy(request->RecvData.begin(),request->RecvData.begin()+clen,std::inserter<std::string>(formdat,formdat.begin()));
        formdat.push_back('\0');
      }
  }else if(request->getRequestType()==GETREQUEST){
      const char *rurl=request->getRequest();
      size_t rurlsize=strlen(rurl);
+6 −2
Original line number Diff line number Diff line
@@ -131,6 +131,9 @@ namespace libhttppp {
    HttpRequest();
    HttpRequest(netplus::eventapi *evapi);
    ~HttpRequest();

    void clear();

    /*server methods*/

    size_t            parse(); //only use as server
@@ -140,7 +143,8 @@ namespace libhttppp {
    const char       *getRequest();
    size_t            getRequestLength();
    const char       *getRequestVersion();
    size_t            getMessageBody(std::vector<char> &mbody);
    size_t            getContentLength();

    /*mobilphone switch*/
    bool isMobile();

@@ -153,12 +157,12 @@ namespace libhttppp {
    void              setMaxUploadSize(size_t upsize);
    void              send(std::shared_ptr<netplus::socket> src,std::shared_ptr<netplus::socket> dest);
  private:
    size_t            _Readed;
    std::string       _Request;
    int               _RequestType;
    std::string       _RequestURL;
    std::string       _RequestVersion;
    size_t            _MaxUploadSize;
    HeaderData       *_ContentLength;
    friend class HttpForm;
  };
  
+1 −3
Original line number Diff line number Diff line
@@ -65,11 +65,9 @@ void libhttppp::HttpEvent::DisconnectEvent(HttpRequest *curreq){
}

void libhttppp::HttpEvent::RequestEvent(netplus::con* curcon){
    size_t size;
    try{
        size=((HttpRequest*)curcon)->parse();
        ((HttpRequest*)curcon)->parse();
        RequestEvent((HttpRequest*)curcon);
        ((HttpRequest*)curcon)->clear();
    }catch(HTTPException &e){
        netplus::NetException re;
        re[netplus::NetException::Error] << "http error:" << e.what();