OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "net/spdy/spdy_stream.h" | 5 #include "net/spdy/spdy_stream.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/compiler_specific.h" | 8 #include "base/compiler_specific.h" |
9 #include "base/location.h" | 9 #include "base/location.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 864 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
875 if (new_response_headers.find("transfer-encoding") != | 875 if (new_response_headers.find("transfer-encoding") != |
876 new_response_headers.end()) { | 876 new_response_headers.end()) { |
877 session_->ResetStream(stream_id_, RST_STREAM_PROTOCOL_ERROR, | 877 session_->ResetStream(stream_id_, RST_STREAM_PROTOCOL_ERROR, |
878 "Received transfer-encoding header"); | 878 "Received transfer-encoding header"); |
879 return ERR_SPDY_PROTOCOL_ERROR; | 879 return ERR_SPDY_PROTOCOL_ERROR; |
880 } | 880 } |
881 | 881 |
882 for (SpdyHeaderBlock::const_iterator it = new_response_headers.begin(); | 882 for (SpdyHeaderBlock::const_iterator it = new_response_headers.begin(); |
883 it != new_response_headers.end(); ++it) { | 883 it != new_response_headers.end(); ++it) { |
884 // Disallow uppercase headers. | 884 // Disallow uppercase headers. |
885 if (ContainsUppercaseAscii(it->first)) { | 885 if (ContainsUppercaseAscii(it->first.as_string())) { |
886 session_->ResetStream(stream_id_, RST_STREAM_PROTOCOL_ERROR, | 886 session_->ResetStream( |
887 "Upper case characters in header: " + it->first); | 887 stream_id_, RST_STREAM_PROTOCOL_ERROR, |
| 888 "Upper case characters in header: " + it->first.as_string()); |
888 return ERR_SPDY_PROTOCOL_ERROR; | 889 return ERR_SPDY_PROTOCOL_ERROR; |
889 } | 890 } |
890 | 891 |
891 SpdyHeaderBlock::iterator it2 = response_headers_.lower_bound(it->first); | 892 SpdyHeaderBlock::iterator it2 = |
| 893 response_headers_.find(it->first.as_string()); |
892 // Disallow duplicate headers. This is just to be conservative. | 894 // Disallow duplicate headers. This is just to be conservative. |
893 if (it2 != response_headers_.end() && it2->first == it->first) { | 895 if (it2 != response_headers_.end()) { |
894 session_->ResetStream(stream_id_, RST_STREAM_PROTOCOL_ERROR, | 896 session_->ResetStream(stream_id_, RST_STREAM_PROTOCOL_ERROR, |
895 "Duplicate header: " + it->first); | 897 "Duplicate header: " + it->first.as_string()); |
896 return ERR_SPDY_PROTOCOL_ERROR; | 898 return ERR_SPDY_PROTOCOL_ERROR; |
897 } | 899 } |
898 | 900 |
899 response_headers_.insert(it2, *it); | 901 response_headers_.insert(*it); |
900 } | 902 } |
901 | 903 |
902 // If delegate_ is not yet attached, we'll call | 904 // If delegate_ is not yet attached, we'll call |
903 // OnResponseHeadersUpdated() after the delegate gets attached to | 905 // OnResponseHeadersUpdated() after the delegate gets attached to |
904 // the stream. | 906 // the stream. |
905 if (delegate_) { | 907 if (delegate_) { |
906 // The call to OnResponseHeadersUpdated() below may delete |this|, | 908 // The call to OnResponseHeadersUpdated() below may delete |this|, |
907 // so use |weak_this| to detect that. | 909 // so use |weak_this| to detect that. |
908 base::WeakPtr<SpdyStream> weak_this = GetWeakPtr(); | 910 base::WeakPtr<SpdyStream> weak_this = GetWeakPtr(); |
909 | 911 |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
944 description = base::StringPrintf("Unknown state 0x%08X (%u)", state, | 946 description = base::StringPrintf("Unknown state 0x%08X (%u)", state, |
945 state); | 947 state); |
946 break; | 948 break; |
947 } | 949 } |
948 return description; | 950 return description; |
949 } | 951 } |
950 | 952 |
951 #undef STATE_CASE | 953 #undef STATE_CASE |
952 | 954 |
953 } // namespace net | 955 } // namespace net |
OLD | NEW |