X-Git-Url: https://git.pterodactylus.net/?p=fms.git;a=blobdiff_plain;f=src%2Fhttp%2Fipagehandler.cpp;h=fc778158b7d4aebd9f2530587a793c626dc3e889;hp=230da65e55e04491936e56f65a5726d5aba2f579;hb=f208e33c29132aacaec448e74341edea1b925a2a;hpb=d8ccfe2b3944adf07d35534459cdda19d15217c8 diff --git a/src/http/ipagehandler.cpp b/src/http/ipagehandler.cpp index 230da65..fc77815 100644 --- a/src/http/ipagehandler.cpp +++ b/src/http/ipagehandler.cpp @@ -6,6 +6,31 @@ #include #endif +void IPageHandler::CreateArgArray(const std::map &vars, const std::string &basename, std::vector &args) +{ + for(std::map::const_iterator i=vars.begin(); i!=vars.end(); i++) + { + if((*i).first.find(basename)==0 && (*i).first.find("[")!=std::string::npos && (*i).first.find("]")!=std::string::npos) + { + int index; + std::string indexstr; + std::string::size_type startpos; + std::string::size_type endpos; + startpos=(*i).first.find("["); + endpos=(*i).first.find("]"); + + indexstr=(*i).first.substr(startpos+1,(endpos-startpos)-1); + StringFunctions::Convert(indexstr,index); + + while(args.size()m_indata=new char[len]; + mystate->m_indata=new char[len+1]; + mystate->m_indata[len]=NULL; mystate->m_indatalen=len; mystate->m_indatapos=0; } @@ -45,7 +71,7 @@ const bool IPageHandler::Handle(shttpd_arg *arg) if(arg->in.len>0) { int pos=0; - while(arg->in.num_bytesin.len) + while(posin.len) { mystate->m_indata[mystate->m_indatapos++]=arg->in.buf[pos++]; } @@ -56,7 +82,32 @@ const bool IPageHandler::Handle(shttpd_arg *arg) if(mystate->m_indatalen==mystate->m_indatapos && mystate->m_outdata==NULL) { //TODO parse POST data and any QUERY_STRING before generating page - std::string page=GeneratePage(methodstr,std::map()); + std::map args; + std::vector argparts; + + if(mystate->m_indata) + { + StringFunctions::Split(mystate->m_indata,"&",argparts); + } + if(shttpd_get_env(arg,"QUERY_STRING")) + { + StringFunctions::Split(shttpd_get_env(arg,"QUERY_STRING"),"&",argparts); + } + for(std::vector::iterator argi=argparts.begin(); argi!=argparts.end(); argi++) + { + std::vector parts; + StringFunctions::Split((*argi),"=",parts); + if(parts.size()>0) + { + args[StringFunctions::UriDecode(parts[0])]; + if(parts.size()>1) + { + args[StringFunctions::UriDecode(parts[0])]=StringFunctions::UriDecode(parts[1]); + } + } + } + + std::string page=GeneratePage(methodstr,args); mystate->m_outdata=new char[page.size()]; memcpy(mystate->m_outdata,page.c_str(),page.size()); mystate->m_outdatalen=page.size(); @@ -79,11 +130,11 @@ const bool IPageHandler::Handle(shttpd_arg *arg) { if(mystate->m_indata) { - delete mystate->m_indata; + delete [] mystate->m_indata; } if(mystate->m_outdata) { - delete mystate->m_outdata; + delete [] mystate->m_outdata; } delete mystate; arg->state=NULL;