open_toontown_panda3d/direct/src/http/parsedhttprequest.h

145 lines
3.8 KiB
C++

#ifndef __PARSEDHTTPREQUEST_GM_H__
#define __PARSEDHTTPREQUEST_GM_H__
#include "string"
#include "map"
#include "stdlib.h"
class ParsedHttpRequest
{
protected:
std::string _Raw_Text;
std::string _RequestType;
std::string _RequestText;
std::string _Requestoptions;
std::string _BodyText;
std::map<std::string,std::string> _parameters;
std::map<std::string,std::string> _header_Lines;
std::string deCanonicalize(std::string &inval);
size_t PullCR(std::string &src, std::string &dst);
public:
void clear(void);
const std::string GetRequestOptionString() { return _Requestoptions; };
const std::string * GetOption(const std::string & query);
bool GetOption(const std::string & query, std::string & out_value);
bool ParseThis(char * request);
std::string & GetRequestURL(void);
const std::string & GetRawRequest(void) const { return _Raw_Text; };
const std::string & GetRequestType(void) const { return _RequestType; };
bool ProcessOptionString(std::string str);
bool ProcessParamSet(std::string &str);
void SetBodyText(const std::string & text)
{
_BodyText = text;
}
const std::string & getBodyText() { return _BodyText; };
int getContentLength()
{
int answer = 0;
std::map<std::string,std::string>::iterator ii = _header_Lines.find("Content-Length");
if(ii != _header_Lines.end())
answer = atol(ii->second.c_str());
return answer;
};
};
/*
class ParsedHttpResponse
{
std::string _Raw_Text;
std::string _response_header;
std::map<std::string,std::string> _header_Lines;
public:
std::string GetresponseCode()
{
std::string answer;
size_t pos = _response_header.find_first_of(" ");
if(pos != std::string::npos)
answer = support::trim_tonew(_response_header.substr(pos,100));
pos = answer.find_first_of(" \t\n\r\0");
if(pos != std::string::npos)
answer = support::trim_tonew(answer.substr(0,pos));
return answer;
}
bool ParseThis(const std::string &response)
{
_Raw_Text = response;
int line_number = 0;
std::string work1(_Raw_Text);
for(size_t pos = work1.find_first_of("\n\r\0") ; pos != std::string::npos ; pos = work1.find_first_of("\n\r\0") )
{
std::string line1 = work1.substr(0,pos);
work1 = work1.substr(pos+1);
if(line1.size() > 2)
{
if(line_number == 0 && line1.substr(0,4) == "HTTP")
{
// the first line...
_response_header = line1;
// printf("[%s]\n",line1.c_str());
}
size_t i_pos = line1.find(':');
if(i_pos != std::string::npos && i_pos > 1)
{
std::string noune = support::trim_tonew(line1.substr(0,i_pos));
std::string verb = support::trim_tonew(line1.substr(i_pos+1));
_header_Lines[noune] = verb;
}
line_number++;
}
}
return !_response_header.empty();
}
size_t PullCR(std::string &src, std::string &dst)
{
size_t offset = src.find(' ');
if(offset >= 0 )
{
dst = src.substr(0,offset);
src = src.substr(offset+1);
}
return offset;
}
int getContentLength()
{
int answer = 0;
std::map<std::string,std::string>::iterator ii = _header_Lines.find("Content-Length");
if(ii != _header_Lines.end())
answer = atol(ii->second.c_str());
return answer;
};
};
*/
#endif //__PARSEDHTTPREQUEST_GM_H__