diff options
author | Benoit Foucher <benoit@zeroc.com> | 2015-02-16 12:44:31 +0100 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2015-02-16 12:44:31 +0100 |
commit | c4b35b30b99898e9ef1ae44655011b3575d634a3 (patch) | |
tree | 87879b8d66e9a85bb0c9022731cff7fe72756183 /cpp/src/Ice/HttpParser.cpp | |
parent | ICE-6307 - Fixed ruby makefile to add ruby static lib path to linker for cust... (diff) | |
download | ice-c4b35b30b99898e9ef1ae44655011b3575d634a3.tar.bz2 ice-c4b35b30b99898e9ef1ae44655011b3575d634a3.tar.xz ice-c4b35b30b99898e9ef1ae44655011b3575d634a3.zip |
Fixed ICE-6225 - Added headers attribute to WSConnectionInfo
Diffstat (limited to 'cpp/src/Ice/HttpParser.cpp')
-rw-r--r-- | cpp/src/Ice/HttpParser.cpp | 40 |
1 files changed, 26 insertions, 14 deletions
diff --git a/cpp/src/Ice/HttpParser.cpp b/cpp/src/Ice/HttpParser.cpp index 4c18f5ecf82..7030d187f0a 100644 --- a/cpp/src/Ice/HttpParser.cpp +++ b/cpp/src/Ice/HttpParser.cpp @@ -258,10 +258,9 @@ IceInternal::HttpParser::parse(const Ice::Byte* begin, const Ice::Byte* end) { throw WebSocketException("malformed header"); } - HeaderMap::iterator q = _headers.find(_headerName); + HeaderFields::iterator q = _headers.find(_headerName); assert(q != _headers.end()); - string newValue = q->second + " " + string(start, p); - _headers[_headerName] = newValue; + q->second.second = q->second.second + " " + string(start, p); _state = c == CR ? StateHeaderFieldLF : StateHeaderFieldStart; } else @@ -301,13 +300,13 @@ IceInternal::HttpParser::parse(const Ice::Byte* begin, const Ice::Byte* end) if(_headerName.empty()) { _headerName = IceUtilInternal::toLower(string(start, p)); - HeaderMap::iterator q = _headers.find(_headerName); + HeaderFields::iterator q = _headers.find(_headerName); // // Add a placeholder entry if necessary. // if(q == _headers.end()) { - _headers[_headerName] = ""; + _headers[_headerName] = make_pair(string(start, p), ""); } } @@ -362,14 +361,18 @@ IceInternal::HttpParser::parse(const Ice::Byte* begin, const Ice::Byte* end) assert(c == CR || c == LF); if(p > start) { - HeaderMap::iterator q = _headers.find(_headerName); - if(q == _headers.end() || q->second.empty()) + HeaderFields::iterator q = _headers.find(_headerName); + if(q == _headers.end()) + { + throw WebSocketException("malformed header"); + } + else if(q->second.second.empty()) { - _headers[_headerName] = string(start, p); + q->second.second = string(start, p); } else { - _headers[_headerName] = q->second + ", " + string(start, p); + q->second.second = q->second.second + ", " + string(start, p); } } @@ -663,18 +666,27 @@ IceInternal::HttpParser::reason() const bool IceInternal::HttpParser::getHeader(const string& name, string& value, bool toLower) const { - HeaderMap::const_iterator q = _headers.find(IceUtilInternal::toLower(name)); + HeaderFields::const_iterator q = _headers.find(IceUtilInternal::toLower(name)); if(q != _headers.end()) { - value = toLower ? IceUtilInternal::toLower(IceUtilInternal::trim(q->second)) : IceUtilInternal::trim(q->second); + value = IceUtilInternal::trim(q->second.second); + if(toLower) + { + value = IceUtilInternal::toLower(value); + } return true; } return false; } -const HttpParser::HeaderMap& -IceInternal::HttpParser::headers() const +map<string, string> +IceInternal::HttpParser::getHeaders() const { - return _headers; + map<string, string> headers; + for(HeaderFields::const_iterator q = _headers.begin(); q != _headers.end(); ++q) + { + headers.insert(make_pair(q->second.first, IceUtilInternal::trim(q->second.second))); + } + return headers; } |