chenBright commented on code in PR #2577: URL: https://github.com/apache/brpc/pull/2577#discussion_r1560761972
########## src/brpc/http_header.cpp: ########## @@ -69,6 +54,70 @@ void HttpHeader::Clear() { _version = std::make_pair(1, 1); } +const std::string* HttpHeader::GetHeader(const char* key) const { + HeaderIterator iter; + if (IsSetCookie(key)) { + iter = _first_set_cookie_iter; + } else { + iter = _headers.find(key); + } + return iter != _headers.end() ? &iter->second : NULL; +} + +const std::string* HttpHeader::GetHeader(const std::string& key) const { + return GetHeader(key.c_str()); +} + +std::vector<const std::string*> +HttpHeader::GetAllSetCookieHeader() const { + return GetMultiLineHeaders(SET_COOKIE); +} + +std::vector<const std::string*> +HttpHeader::GetMultiLineHeaders(const std::string& key) const { + std::vector<const std::string*> headers; + for (const auto& iter : _headers) { Review Comment: 受限于unordered_multimap,unordered_multimap没有接口获取key对应的所有value,只有遍历的方法了。 ########## src/brpc/http_header.h: ########## @@ -80,24 +85,39 @@ class HttpHeader { // Return pointer to the value, NULL on not found. // NOTE: If the key is "Content-Type", `GetHeader("Content-Type")' // (case-insensitive) is equal to `content_type()'. - const std::string* GetHeader(const char* key) const - { return _headers.seek(key); } - const std::string* GetHeader(const std::string& key) const - { return _headers.seek(key); } + const std::string* GetHeader(const char* key) const; + const std::string* GetHeader(const std::string& key) const; + + std::vector<const std::string*> GetAllSetCookieHeader() const; Review Comment: 用GetAllSetCookieHeader获取所有的set-cookie ########## src/brpc/http_header.cpp: ########## @@ -69,6 +54,70 @@ void HttpHeader::Clear() { _version = std::make_pair(1, 1); } +const std::string* HttpHeader::GetHeader(const char* key) const { + HeaderIterator iter; + if (IsSetCookie(key)) { + iter = _first_set_cookie_iter; + } else { + iter = _headers.find(key); + } + return iter != _headers.end() ? &iter->second : NULL; +} + +const std::string* HttpHeader::GetHeader(const std::string& key) const { + return GetHeader(key.c_str()); +} + +std::vector<const std::string*> +HttpHeader::GetAllSetCookieHeader() const { + return GetMultiLineHeaders(SET_COOKIE); +} + +std::vector<const std::string*> +HttpHeader::GetMultiLineHeaders(const std::string& key) const { + std::vector<const std::string*> headers; + for (const auto& iter : _headers) { Review Comment: 受限于unordered_multimap,unordered_multimap没有接口获取key对应的所有value,只有遍历的方法了。 -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: dev-unsubscr...@brpc.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@brpc.apache.org For additional commands, e-mail: dev-h...@brpc.apache.org