9
void Request::ParseParameter(istream& stream, const string& param, string& value)
11
getline(stream, value, '&');
14
void Request::ParseParameters(istream& stream)
20
while(stream.good()) {
22
getline(stream, param, '=');
23
ParseParameter(stream, param, value);
24
if(stream) parameters[param] = value;
28
istream& operator >> (istream &in, Request &request)
30
string line, cad, uri;
31
request.type = Request::UNKNOWN;
33
if(getline(in, line)) {
34
if(line.size() <= 0) in.setstate(istream::failbit);
36
TRACE("HTTP Request: " << line);
38
istringstream in_str(line);
40
if(!(in_str >> cad >> uri >> request.protocol)) in.setstate(istream::failbit);
42
if(cad == "POST") request.type = Request::POST;
43
else if(cad == "GET") request.type = Request::GET;
44
else in.setstate(istream::failbit);
45
request.ParseURI(uri);
53
ostream& operator << (ostream& out, const Request& request)
55
if(request.type != Request::UNKNOWN) {
56
out << (request.type == Request::GET ? "GET" : "POST") << " " << request.object;
58
if(request.parameters.size() > 0) {
60
map<string, string>::const_iterator i = request.parameters.begin();
62
if(!i->second.empty()) out << i->first << "=" << i->second;
65
while(++i != request.parameters.end()) {
67
if(!i->second.empty()) out << i->first << "=" << i->second;
72
out << " " << request.protocol << Protocol::CRLF;