X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fmessage.cpp;h=f1e4c286bd13031c1918d21cebacec189200223c;hb=43b734260a10ccc5429d0ead16fac9ad0452a954;hp=93937c90a71dff3ee8fa65a2fdf973f37e515525;hpb=b06cf07513fdd85e249398ebfce500fbf3dfb6a7;p=libs%2Fnet.git diff --git a/source/message.cpp b/source/message.cpp index 93937c9..f1e4c28 100644 --- a/source/message.cpp +++ b/source/message.cpp @@ -1,10 +1,3 @@ -/* $Id$ - -This file is part of libmsphttp -Copyright © 2008 Mikkosoft Productions, Mikko Rasa -Distributed under the LGPL -*/ - #include #include #include @@ -23,12 +16,17 @@ Message::Message(): void Message::set_header(const string &hdr, const string &val) { - headers[normalize_header_name(hdr)]=val; + headers[normalize_header_name(hdr)] = val; +} + +bool Message::has_header(const string &hdr) const +{ + return headers.count(normalize_header_name(hdr)); } const string &Message::get_header(const string &hdr) const { - HeaderMap::const_iterator i=headers.find(normalize_header_name(hdr)); + HeaderMap::const_iterator i = headers.find(normalize_header_name(hdr)); if(i==headers.end()) throw KeyError("Undefined header", hdr); @@ -37,7 +35,7 @@ const string &Message::get_header(const string &hdr) const void Message::add_content(const string &d) { - content+=d; + content += d; if(headers.count("Content-Type")==0) set_header("Content-Type", "text/plain"); set_header("Content-Length", lexical_cast(content.size())); @@ -45,7 +43,7 @@ void Message::add_content(const string &d) void Message::set_user_data(const Variant &d) { - user_data=d; + user_data = d; } unsigned Message::parse_content(const string &d) @@ -53,42 +51,42 @@ unsigned Message::parse_content(const string &d) if(complete) return 0; - HeaderMap::const_iterator i=headers.find("Content-Length"); + HeaderMap::const_iterator i = headers.find("Content-Length"); if(i!=headers.end()) { - unsigned needed=lexical_cast(i->second)-content.size(); - unsigned len=min(needed, d.size()); + unsigned needed = lexical_cast(i->second)-content.size(); + unsigned len = min(needed, d.size()); content.append(d, 0, len); if(len==needed) - complete=true; + complete = true; return len; } - i=headers.find("Transfer-Encoding"); + i = headers.find("Transfer-Encoding"); if(i!=headers.end() && strcasecmp(i->second, "chunked")==0) { - unsigned pos=0; + unsigned pos = 0; while(!complete && pos(strip(d.substr(pos, lf-pos)), "x"); + chunk_length = lexical_cast(strip(d.substr(pos, lf-pos)), "x"); if(chunk_length==0) - complete=true; - pos=lf+1; + complete = true; + pos = lf+1; } else { - unsigned len=min(chunk_length, d.size()-pos); + unsigned len = min(chunk_length, d.size()-pos); content.append(d, pos, len); - chunk_length-=len; - if((pos=d.find('\n', pos+len))!=string::npos) + chunk_length -= len; + if((pos = d.find('\n', pos+len))!=string::npos) ++pos; } } @@ -96,28 +94,28 @@ unsigned Message::parse_content(const string &d) return pos; } - complete=true; + complete = true; return 0; } unsigned Message::parse_headers(const string &d) { - unsigned start=0; + unsigned start = 0; while(1) { - unsigned lf=d.find('\n', start); + unsigned lf = d.find('\n', start); if(lf==string::npos) throw InvalidParameterValue("Incomplete response"); if(lf==start || (d[start]=='\r' && lf==start+1)) return lf+1; - unsigned colon=d.find(':', start); + unsigned colon = d.find(':', start); if(colon>lf) throw InvalidParameterValue("No colon in header"); set_header(d.substr(start, colon-start), strip(d.substr(colon+1, lf-colon-1))); - start=lf+1; + start = lf+1; } } @@ -127,28 +125,28 @@ string Message::str_common() const for(HeaderMap::const_iterator i=headers.begin(); i!=headers.end(); ++i) if(i->first[0]!='-') - result+=format("%s: %s\r\n", i->first, i->second); - result+="\r\n"; - result+=content; + result += format("%s: %s\r\n", i->first, i->second); + result += "\r\n"; + result += content; return result; } string Message::normalize_header_name(const string &hdr) const { - string result=hdr; - bool upper=true; + string result = hdr; + bool upper = true; for(string::iterator i=result.begin(); i!=result.end(); ++i) { if(upper) { - *i=toupper(*i); - upper=false; + *i = toupper(*i); + upper = false; } else if(*i=='-') - upper=true; + upper = true; else - *i=tolower(*i); + *i = tolower(*i); } return result; }