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/chromium/spdy_session.h" | 5 #include "net/spdy/chromium/spdy_session.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <limits> | 8 #include <limits> |
9 #include <map> | 9 #include <map> |
10 #include <utility> | 10 #include <utility> |
(...skipping 3006 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3017 DCHECK(!quic_supported_versions_.empty()); | 3017 DCHECK(!quic_supported_versions_.empty()); |
3018 for (const SpdyAltSvcWireFormat::AlternativeService& altsvc : altsvc_vector) { | 3018 for (const SpdyAltSvcWireFormat::AlternativeService& altsvc : altsvc_vector) { |
3019 const NextProto protocol = NextProtoFromString(altsvc.protocol_id); | 3019 const NextProto protocol = NextProtoFromString(altsvc.protocol_id); |
3020 if (protocol == kProtoUnknown) | 3020 if (protocol == kProtoUnknown) |
3021 continue; | 3021 continue; |
3022 | 3022 |
3023 // TODO(zhongyi): refactor the QUIC version filtering to a single function | 3023 // TODO(zhongyi): refactor the QUIC version filtering to a single function |
3024 // so that SpdySession::OnAltSvc and | 3024 // so that SpdySession::OnAltSvc and |
3025 // HttpStreamFactory::ProcessAlternativeServices | 3025 // HttpStreamFactory::ProcessAlternativeServices |
3026 // could use the the same function. | 3026 // could use the the same function. |
3027 // Check if QUIC version is supported. | 3027 // Check if QUIC version is supported. Filter supported QUIC versions. |
| 3028 QuicVersionVector advertised_versions; |
3028 if (protocol == kProtoQUIC && !altsvc.version.empty()) { | 3029 if (protocol == kProtoQUIC && !altsvc.version.empty()) { |
3029 bool match_found = false; | 3030 bool match_found = false; |
3030 for (const QuicVersion& supported : quic_supported_versions_) { | 3031 for (const QuicVersion& supported : quic_supported_versions_) { |
3031 for (const uint16_t& advertised : altsvc.version) { | 3032 for (const uint16_t& advertised : altsvc.version) { |
3032 if (supported == advertised) { | 3033 if (supported == advertised) { |
3033 match_found = true; | 3034 match_found = true; |
3034 break; | 3035 advertised_versions.push_back(supported); |
3035 } | 3036 } |
3036 } | 3037 } |
3037 if (match_found) { | |
3038 break; | |
3039 } | |
3040 } | 3038 } |
3041 if (!match_found) { | 3039 if (!match_found) { |
3042 continue; | 3040 continue; |
3043 } | 3041 } |
3044 } | 3042 } |
3045 | 3043 |
3046 const AlternativeService alternative_service(protocol, altsvc.host, | 3044 const AlternativeService alternative_service(protocol, altsvc.host, |
3047 altsvc.port); | 3045 altsvc.port); |
3048 const base::Time expiration = | 3046 const base::Time expiration = |
3049 now + base::TimeDelta::FromSeconds(altsvc.max_age); | 3047 now + base::TimeDelta::FromSeconds(altsvc.max_age); |
3050 alternative_service_info_vector.push_back( | 3048 AlternativeServiceInfo alternative_service_info; |
3051 AlternativeServiceInfo(alternative_service, expiration)); | 3049 if (protocol == kProtoQUIC) { |
| 3050 alternative_service_info = |
| 3051 AlternativeServiceInfo::CreateQuicAlternativeServiceInfo( |
| 3052 alternative_service, expiration, advertised_versions); |
| 3053 } else { |
| 3054 alternative_service_info = |
| 3055 AlternativeServiceInfo::CreateHttp2AlternativeServiceInfo( |
| 3056 alternative_service, expiration); |
| 3057 } |
| 3058 alternative_service_info_vector.push_back(alternative_service_info); |
3052 } | 3059 } |
| 3060 |
3053 http_server_properties_->SetAlternativeServices( | 3061 http_server_properties_->SetAlternativeServices( |
3054 scheme_host_port, alternative_service_info_vector); | 3062 scheme_host_port, alternative_service_info_vector); |
3055 } | 3063 } |
3056 | 3064 |
3057 bool SpdySession::OnUnknownFrame(SpdyStreamId stream_id, uint8_t frame_type) { | 3065 bool SpdySession::OnUnknownFrame(SpdyStreamId stream_id, uint8_t frame_type) { |
3058 // Validate stream id. | 3066 // Validate stream id. |
3059 // Was the frame sent on a stream id that has not been used in this session? | 3067 // Was the frame sent on a stream id that has not been used in this session? |
3060 if (stream_id % 2 == 1 && stream_id > stream_hi_water_mark_) | 3068 if (stream_id % 2 == 1 && stream_id > stream_hi_water_mark_) |
3061 return false; | 3069 return false; |
3062 | 3070 |
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3257 if (!queue->empty()) { | 3265 if (!queue->empty()) { |
3258 SpdyStreamId stream_id = queue->front(); | 3266 SpdyStreamId stream_id = queue->front(); |
3259 queue->pop_front(); | 3267 queue->pop_front(); |
3260 return stream_id; | 3268 return stream_id; |
3261 } | 3269 } |
3262 } | 3270 } |
3263 return 0; | 3271 return 0; |
3264 } | 3272 } |
3265 | 3273 |
3266 } // namespace net | 3274 } // namespace net |
OLD | NEW |