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/tools/quic/quic_dispatcher.h" | 5 #include "net/tools/quic/quic_dispatcher.h" |
6 | 6 |
7 #include <errno.h> | 7 #include <errno.h> |
8 | 8 |
9 #include "base/debug/stack_trace.h" | 9 #include "base/debug/stack_trace.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 14 matching lines...) Expand all Loading... |
25 | 25 |
26 using base::StringPiece; | 26 using base::StringPiece; |
27 using std::make_pair; | 27 using std::make_pair; |
28 | 28 |
29 class DeleteSessionsAlarm : public EpollAlarm { | 29 class DeleteSessionsAlarm : public EpollAlarm { |
30 public: | 30 public: |
31 explicit DeleteSessionsAlarm(QuicDispatcher* dispatcher) | 31 explicit DeleteSessionsAlarm(QuicDispatcher* dispatcher) |
32 : dispatcher_(dispatcher) { | 32 : dispatcher_(dispatcher) { |
33 } | 33 } |
34 | 34 |
35 virtual int64 OnAlarm() override { | 35 int64 OnAlarm() override { |
36 EpollAlarm::OnAlarm(); | 36 EpollAlarm::OnAlarm(); |
37 dispatcher_->DeleteSessions(); | 37 dispatcher_->DeleteSessions(); |
38 return 0; | 38 return 0; |
39 } | 39 } |
40 | 40 |
41 private: | 41 private: |
42 QuicDispatcher* dispatcher_; | 42 QuicDispatcher* dispatcher_; |
43 }; | 43 }; |
44 | 44 |
45 class QuicDispatcher::QuicFramerVisitor : public QuicFramerVisitorInterface { | 45 class QuicDispatcher::QuicFramerVisitor : public QuicFramerVisitorInterface { |
46 public: | 46 public: |
47 explicit QuicFramerVisitor(QuicDispatcher* dispatcher) | 47 explicit QuicFramerVisitor(QuicDispatcher* dispatcher) |
48 : dispatcher_(dispatcher), | 48 : dispatcher_(dispatcher), |
49 connection_id_(0) {} | 49 connection_id_(0) {} |
50 | 50 |
51 // QuicFramerVisitorInterface implementation | 51 // QuicFramerVisitorInterface implementation |
52 virtual void OnPacket() override {} | 52 void OnPacket() override {} |
53 virtual bool OnUnauthenticatedPublicHeader( | 53 bool OnUnauthenticatedPublicHeader( |
54 const QuicPacketPublicHeader& header) override { | 54 const QuicPacketPublicHeader& header) override { |
55 connection_id_ = header.connection_id; | 55 connection_id_ = header.connection_id; |
56 return dispatcher_->OnUnauthenticatedPublicHeader(header); | 56 return dispatcher_->OnUnauthenticatedPublicHeader(header); |
57 } | 57 } |
58 virtual bool OnUnauthenticatedHeader( | 58 bool OnUnauthenticatedHeader(const QuicPacketHeader& header) override { |
59 const QuicPacketHeader& header) override { | |
60 dispatcher_->OnUnauthenticatedHeader(header); | 59 dispatcher_->OnUnauthenticatedHeader(header); |
61 return false; | 60 return false; |
62 } | 61 } |
63 virtual void OnError(QuicFramer* framer) override { | 62 void OnError(QuicFramer* framer) override { |
64 DVLOG(1) << QuicUtils::ErrorToString(framer->error()); | 63 DVLOG(1) << QuicUtils::ErrorToString(framer->error()); |
65 } | 64 } |
66 | 65 |
67 virtual bool OnProtocolVersionMismatch( | 66 bool OnProtocolVersionMismatch(QuicVersion /*received_version*/) override { |
68 QuicVersion /*received_version*/) override { | |
69 if (dispatcher_->time_wait_list_manager()->IsConnectionIdInTimeWait( | 67 if (dispatcher_->time_wait_list_manager()->IsConnectionIdInTimeWait( |
70 connection_id_)) { | 68 connection_id_)) { |
71 // Keep processing after protocol mismatch - this will be dealt with by | 69 // Keep processing after protocol mismatch - this will be dealt with by |
72 // the TimeWaitListManager. | 70 // the TimeWaitListManager. |
73 return true; | 71 return true; |
74 } else { | 72 } else { |
75 DLOG(DFATAL) << "Version mismatch, connection ID (" << connection_id_ | 73 DLOG(DFATAL) << "Version mismatch, connection ID (" << connection_id_ |
76 << ") not in time wait list."; | 74 << ") not in time wait list."; |
77 return false; | 75 return false; |
78 } | 76 } |
79 } | 77 } |
80 | 78 |
81 // The following methods should never get called because we always return | 79 // The following methods should never get called because we always return |
82 // false from OnUnauthenticatedHeader(). As a result, we never process the | 80 // false from OnUnauthenticatedHeader(). As a result, we never process the |
83 // payload of the packet. | 81 // payload of the packet. |
84 virtual void OnPublicResetPacket( | 82 void OnPublicResetPacket(const QuicPublicResetPacket& /*packet*/) override { |
85 const QuicPublicResetPacket& /*packet*/) override { | |
86 DCHECK(false); | 83 DCHECK(false); |
87 } | 84 } |
88 virtual void OnVersionNegotiationPacket( | 85 void OnVersionNegotiationPacket( |
89 const QuicVersionNegotiationPacket& /*packet*/) override { | 86 const QuicVersionNegotiationPacket& /*packet*/) override { |
90 DCHECK(false); | 87 DCHECK(false); |
91 } | 88 } |
92 virtual void OnDecryptedPacket(EncryptionLevel level) override { | 89 void OnDecryptedPacket(EncryptionLevel level) override { DCHECK(false); } |
93 DCHECK(false); | 90 bool OnPacketHeader(const QuicPacketHeader& /*header*/) override { |
94 } | |
95 virtual bool OnPacketHeader(const QuicPacketHeader& /*header*/) override { | |
96 DCHECK(false); | 91 DCHECK(false); |
97 return false; | 92 return false; |
98 } | 93 } |
99 virtual void OnRevivedPacket() override { | 94 void OnRevivedPacket() override { DCHECK(false); } |
| 95 void OnFecProtectedPayload(StringPiece /*payload*/) override { |
100 DCHECK(false); | 96 DCHECK(false); |
101 } | 97 } |
102 virtual void OnFecProtectedPayload(StringPiece /*payload*/) override { | 98 bool OnStreamFrame(const QuicStreamFrame& /*frame*/) override { |
103 DCHECK(false); | |
104 } | |
105 virtual bool OnStreamFrame(const QuicStreamFrame& /*frame*/) override { | |
106 DCHECK(false); | 99 DCHECK(false); |
107 return false; | 100 return false; |
108 } | 101 } |
109 virtual bool OnAckFrame(const QuicAckFrame& /*frame*/) override { | 102 bool OnAckFrame(const QuicAckFrame& /*frame*/) override { |
110 DCHECK(false); | 103 DCHECK(false); |
111 return false; | 104 return false; |
112 } | 105 } |
113 virtual bool OnCongestionFeedbackFrame( | 106 bool OnCongestionFeedbackFrame( |
114 const QuicCongestionFeedbackFrame& /*frame*/) override { | 107 const QuicCongestionFeedbackFrame& /*frame*/) override { |
115 DCHECK(false); | 108 DCHECK(false); |
116 return false; | 109 return false; |
117 } | 110 } |
118 virtual bool OnStopWaitingFrame( | 111 bool OnStopWaitingFrame(const QuicStopWaitingFrame& /*frame*/) override { |
119 const QuicStopWaitingFrame& /*frame*/) override { | |
120 DCHECK(false); | 112 DCHECK(false); |
121 return false; | 113 return false; |
122 } | 114 } |
123 virtual bool OnPingFrame(const QuicPingFrame& /*frame*/) override { | 115 bool OnPingFrame(const QuicPingFrame& /*frame*/) override { |
124 DCHECK(false); | 116 DCHECK(false); |
125 return false; | 117 return false; |
126 } | 118 } |
127 virtual bool OnRstStreamFrame(const QuicRstStreamFrame& /*frame*/) override { | 119 bool OnRstStreamFrame(const QuicRstStreamFrame& /*frame*/) override { |
128 DCHECK(false); | 120 DCHECK(false); |
129 return false; | 121 return false; |
130 } | 122 } |
131 virtual bool OnConnectionCloseFrame( | 123 bool OnConnectionCloseFrame( |
132 const QuicConnectionCloseFrame & /*frame*/) override { | 124 const QuicConnectionCloseFrame& /*frame*/) override { |
133 DCHECK(false); | 125 DCHECK(false); |
134 return false; | 126 return false; |
135 } | 127 } |
136 virtual bool OnGoAwayFrame(const QuicGoAwayFrame& /*frame*/) override { | 128 bool OnGoAwayFrame(const QuicGoAwayFrame& /*frame*/) override { |
137 DCHECK(false); | 129 DCHECK(false); |
138 return false; | 130 return false; |
139 } | 131 } |
140 virtual bool OnWindowUpdateFrame(const QuicWindowUpdateFrame& /*frame*/) | 132 bool OnWindowUpdateFrame(const QuicWindowUpdateFrame& /*frame*/) override { |
141 override { | |
142 DCHECK(false); | 133 DCHECK(false); |
143 return false; | 134 return false; |
144 } | 135 } |
145 virtual bool OnBlockedFrame(const QuicBlockedFrame& frame) override { | 136 bool OnBlockedFrame(const QuicBlockedFrame& frame) override { |
146 DCHECK(false); | 137 DCHECK(false); |
147 return false; | 138 return false; |
148 } | 139 } |
149 virtual void OnFecData(const QuicFecData& /*fec*/) override { | 140 void OnFecData(const QuicFecData& /*fec*/) override { DCHECK(false); } |
150 DCHECK(false); | 141 void OnPacketComplete() override { DCHECK(false); } |
151 } | |
152 virtual void OnPacketComplete() override { | |
153 DCHECK(false); | |
154 } | |
155 | 142 |
156 private: | 143 private: |
157 QuicDispatcher* dispatcher_; | 144 QuicDispatcher* dispatcher_; |
158 | 145 |
159 // Latched in OnUnauthenticatedPublicHeader for use later. | 146 // Latched in OnUnauthenticatedPublicHeader for use later. |
160 QuicConnectionId connection_id_; | 147 QuicConnectionId connection_id_; |
161 }; | 148 }; |
162 | 149 |
163 QuicPacketWriter* QuicDispatcher::DefaultPacketWriterFactory::Create( | 150 QuicPacketWriter* QuicDispatcher::DefaultPacketWriterFactory::Create( |
164 QuicPacketWriter* writer, | 151 QuicPacketWriter* writer, |
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
412 framer_.set_version(time_wait_list_manager_->GetQuicVersionFromConnectionId( | 399 framer_.set_version(time_wait_list_manager_->GetQuicVersionFromConnectionId( |
413 header.connection_id)); | 400 header.connection_id)); |
414 | 401 |
415 // Continue parsing the packet to extract the sequence number. Then | 402 // Continue parsing the packet to extract the sequence number. Then |
416 // send it to the time wait manager in OnUnathenticatedHeader. | 403 // send it to the time wait manager in OnUnathenticatedHeader. |
417 return true; | 404 return true; |
418 } | 405 } |
419 | 406 |
420 } // namespace tools | 407 } // namespace tools |
421 } // namespace net | 408 } // namespace net |
OLD | NEW |