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_session.h" | 5 #include "net/spdy/spdy_session.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <map> | 8 #include <map> |
9 | 9 |
10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
(...skipping 963 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
974 frame_type == DATA || | 974 frame_type == DATA || |
975 frame_type == CREDENTIAL || | 975 frame_type == CREDENTIAL || |
976 frame_type == SYN_STREAM); | 976 frame_type == SYN_STREAM); |
977 EnqueueWrite(stream->priority(), frame_type, producer.Pass(), stream); | 977 EnqueueWrite(stream->priority(), frame_type, producer.Pass(), stream); |
978 } | 978 } |
979 | 979 |
980 scoped_ptr<SpdyFrame> SpdySession::CreateSynStream( | 980 scoped_ptr<SpdyFrame> SpdySession::CreateSynStream( |
981 SpdyStreamId stream_id, | 981 SpdyStreamId stream_id, |
982 RequestPriority priority, | 982 RequestPriority priority, |
983 SpdyControlFlags flags, | 983 SpdyControlFlags flags, |
984 const SpdyHeaderBlock& headers) { | 984 const SpdyHeaderBlock& block) { |
985 ActiveStreamMap::const_iterator it = active_streams_.find(stream_id); | 985 ActiveStreamMap::const_iterator it = active_streams_.find(stream_id); |
986 CHECK(it != active_streams_.end()); | 986 CHECK(it != active_streams_.end()); |
987 CHECK_EQ(it->second.stream->stream_id(), stream_id); | 987 CHECK_EQ(it->second.stream->stream_id(), stream_id); |
988 | 988 |
989 SendPrefacePingIfNoneInFlight(); | 989 SendPrefacePingIfNoneInFlight(); |
990 | 990 |
991 DCHECK(buffered_spdy_framer_.get()); | 991 DCHECK(buffered_spdy_framer_.get()); |
992 SpdyPriority spdy_priority = | 992 SpdyPriority spdy_priority = |
993 ConvertRequestPriorityToSpdyPriority(priority, GetProtocolVersion()); | 993 ConvertRequestPriorityToSpdyPriority(priority, GetProtocolVersion()); |
994 scoped_ptr<SpdyFrame> syn_frame( | 994 |
995 buffered_spdy_framer_->CreateSynStream(stream_id, 0, spdy_priority, flags, | 995 scoped_ptr<SpdyFrame> syn_frame; |
996 &headers)); | 996 // TODO(hkhalil): Avoid copy of |block|. |
| 997 if (GetProtocolVersion() <= SPDY3) { |
| 998 SpdySynStreamIR syn_stream(stream_id); |
| 999 syn_stream.set_associated_to_stream_id(0); |
| 1000 syn_stream.set_priority(spdy_priority); |
| 1001 syn_stream.set_fin((flags & CONTROL_FLAG_FIN) != 0); |
| 1002 syn_stream.set_unidirectional((flags & CONTROL_FLAG_UNIDIRECTIONAL) != 0); |
| 1003 syn_stream.set_name_value_block(block); |
| 1004 syn_frame.reset(buffered_spdy_framer_->SerializeFrame(syn_stream)); |
| 1005 } else { |
| 1006 SpdyHeadersIR headers(stream_id); |
| 1007 headers.set_priority(spdy_priority); |
| 1008 headers.set_has_priority(true); |
| 1009 headers.set_fin((flags & CONTROL_FLAG_FIN) != 0); |
| 1010 headers.set_name_value_block(block); |
| 1011 syn_frame.reset(buffered_spdy_framer_->SerializeFrame(headers)); |
| 1012 } |
997 | 1013 |
998 base::StatsCounter spdy_requests("spdy.requests"); | 1014 base::StatsCounter spdy_requests("spdy.requests"); |
999 spdy_requests.Increment(); | 1015 spdy_requests.Increment(); |
1000 streams_initiated_count_++; | 1016 streams_initiated_count_++; |
1001 | 1017 |
1002 if (net_log().IsLogging()) { | 1018 if (net_log().IsLogging()) { |
1003 net_log().AddEvent( | 1019 net_log().AddEvent(NetLog::TYPE_SPDY_SESSION_SYN_STREAM, |
1004 NetLog::TYPE_SPDY_SESSION_SYN_STREAM, | 1020 base::Bind(&NetLogSpdySynStreamSentCallback, |
1005 base::Bind(&NetLogSpdySynStreamSentCallback, &headers, | 1021 &block, |
1006 (flags & CONTROL_FLAG_FIN) != 0, | 1022 (flags & CONTROL_FLAG_FIN) != 0, |
1007 (flags & CONTROL_FLAG_UNIDIRECTIONAL) != 0, | 1023 (flags & CONTROL_FLAG_UNIDIRECTIONAL) != 0, |
1008 spdy_priority, | 1024 spdy_priority, |
1009 stream_id)); | 1025 stream_id)); |
1010 } | 1026 } |
1011 | 1027 |
1012 return syn_frame.Pass(); | 1028 return syn_frame.Pass(); |
1013 } | 1029 } |
1014 | 1030 |
1015 scoped_ptr<SpdyBuffer> SpdySession::CreateDataBuffer(SpdyStreamId stream_id, | 1031 scoped_ptr<SpdyBuffer> SpdySession::CreateDataBuffer(SpdyStreamId stream_id, |
1016 IOBuffer* data, | 1032 IOBuffer* data, |
1017 int len, | 1033 int len, |
1018 SpdyDataFlags flags) { | 1034 SpdyDataFlags flags) { |
1019 if (availability_state_ == STATE_DRAINING) { | 1035 if (availability_state_ == STATE_DRAINING) { |
(...skipping 2097 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3117 if (!queue->empty()) { | 3133 if (!queue->empty()) { |
3118 SpdyStreamId stream_id = queue->front(); | 3134 SpdyStreamId stream_id = queue->front(); |
3119 queue->pop_front(); | 3135 queue->pop_front(); |
3120 return stream_id; | 3136 return stream_id; |
3121 } | 3137 } |
3122 } | 3138 } |
3123 return 0; | 3139 return 0; |
3124 } | 3140 } |
3125 | 3141 |
3126 } // namespace net | 3142 } // namespace net |
OLD | NEW |