| 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/quic/quic_framer.h" | 5 #include "net/quic/quic_framer.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <map> | 8 #include <map> |
| 9 #include <string> | 9 #include <string> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 96 kPrivateFlagsSize; | 96 kPrivateFlagsSize; |
| 97 } | 97 } |
| 98 | 98 |
| 99 // Index into the message tag of the public reset packet. | 99 // Index into the message tag of the public reset packet. |
| 100 // Public resets always have full connection_ids. | 100 // Public resets always have full connection_ids. |
| 101 const size_t kPublicResetPacketMessageTagOffset = | 101 const size_t kPublicResetPacketMessageTagOffset = |
| 102 kConnectionIdOffset + PACKET_8BYTE_CONNECTION_ID; | 102 kConnectionIdOffset + PACKET_8BYTE_CONNECTION_ID; |
| 103 | 103 |
| 104 class TestEncrypter : public QuicEncrypter { | 104 class TestEncrypter : public QuicEncrypter { |
| 105 public: | 105 public: |
| 106 virtual ~TestEncrypter() {} | 106 ~TestEncrypter() override {} |
| 107 virtual bool SetKey(StringPiece key) override { | 107 bool SetKey(StringPiece key) override { return true; } |
| 108 return true; | 108 bool SetNoncePrefix(StringPiece nonce_prefix) override { return true; } |
| 109 } | 109 bool Encrypt(StringPiece nonce, |
| 110 virtual bool SetNoncePrefix(StringPiece nonce_prefix) override { | 110 StringPiece associated_data, |
| 111 return true; | 111 StringPiece plaintext, |
| 112 } | 112 unsigned char* output) override { |
| 113 virtual bool Encrypt(StringPiece nonce, | |
| 114 StringPiece associated_data, | |
| 115 StringPiece plaintext, | |
| 116 unsigned char* output) override { | |
| 117 CHECK(false) << "Not implemented"; | 113 CHECK(false) << "Not implemented"; |
| 118 return false; | 114 return false; |
| 119 } | 115 } |
| 120 virtual QuicData* EncryptPacket(QuicPacketSequenceNumber sequence_number, | 116 QuicData* EncryptPacket(QuicPacketSequenceNumber sequence_number, |
| 121 StringPiece associated_data, | 117 StringPiece associated_data, |
| 122 StringPiece plaintext) override { | 118 StringPiece plaintext) override { |
| 123 sequence_number_ = sequence_number; | 119 sequence_number_ = sequence_number; |
| 124 associated_data_ = associated_data.as_string(); | 120 associated_data_ = associated_data.as_string(); |
| 125 plaintext_ = plaintext.as_string(); | 121 plaintext_ = plaintext.as_string(); |
| 126 return new QuicData(plaintext.data(), plaintext.length()); | 122 return new QuicData(plaintext.data(), plaintext.length()); |
| 127 } | 123 } |
| 128 virtual size_t GetKeySize() const override { | 124 size_t GetKeySize() const override { return 0; } |
| 129 return 0; | 125 size_t GetNoncePrefixSize() const override { return 0; } |
| 130 } | 126 size_t GetMaxPlaintextSize(size_t ciphertext_size) const override { |
| 131 virtual size_t GetNoncePrefixSize() const override { | |
| 132 return 0; | |
| 133 } | |
| 134 virtual size_t GetMaxPlaintextSize(size_t ciphertext_size) const override { | |
| 135 return ciphertext_size; | 127 return ciphertext_size; |
| 136 } | 128 } |
| 137 virtual size_t GetCiphertextSize(size_t plaintext_size) const override { | 129 size_t GetCiphertextSize(size_t plaintext_size) const override { |
| 138 return plaintext_size; | 130 return plaintext_size; |
| 139 } | 131 } |
| 140 virtual StringPiece GetKey() const override { | 132 StringPiece GetKey() const override { return StringPiece(); } |
| 141 return StringPiece(); | 133 StringPiece GetNoncePrefix() const override { return StringPiece(); } |
| 142 } | |
| 143 virtual StringPiece GetNoncePrefix() const override { | |
| 144 return StringPiece(); | |
| 145 } | |
| 146 QuicPacketSequenceNumber sequence_number_; | 134 QuicPacketSequenceNumber sequence_number_; |
| 147 string associated_data_; | 135 string associated_data_; |
| 148 string plaintext_; | 136 string plaintext_; |
| 149 }; | 137 }; |
| 150 | 138 |
| 151 class TestDecrypter : public QuicDecrypter { | 139 class TestDecrypter : public QuicDecrypter { |
| 152 public: | 140 public: |
| 153 virtual ~TestDecrypter() {} | 141 ~TestDecrypter() override {} |
| 154 virtual bool SetKey(StringPiece key) override { | 142 bool SetKey(StringPiece key) override { return true; } |
| 155 return true; | 143 bool SetNoncePrefix(StringPiece nonce_prefix) override { return true; } |
| 156 } | 144 bool Decrypt(StringPiece nonce, |
| 157 virtual bool SetNoncePrefix(StringPiece nonce_prefix) override { | 145 StringPiece associated_data, |
| 158 return true; | 146 StringPiece ciphertext, |
| 159 } | 147 unsigned char* output, |
| 160 virtual bool Decrypt(StringPiece nonce, | 148 size_t* output_length) override { |
| 161 StringPiece associated_data, | |
| 162 StringPiece ciphertext, | |
| 163 unsigned char* output, | |
| 164 size_t* output_length) override { | |
| 165 CHECK(false) << "Not implemented"; | 149 CHECK(false) << "Not implemented"; |
| 166 return false; | 150 return false; |
| 167 } | 151 } |
| 168 virtual QuicData* DecryptPacket(QuicPacketSequenceNumber sequence_number, | 152 QuicData* DecryptPacket(QuicPacketSequenceNumber sequence_number, |
| 169 StringPiece associated_data, | 153 StringPiece associated_data, |
| 170 StringPiece ciphertext) override { | 154 StringPiece ciphertext) override { |
| 171 sequence_number_ = sequence_number; | 155 sequence_number_ = sequence_number; |
| 172 associated_data_ = associated_data.as_string(); | 156 associated_data_ = associated_data.as_string(); |
| 173 ciphertext_ = ciphertext.as_string(); | 157 ciphertext_ = ciphertext.as_string(); |
| 174 return new QuicData(ciphertext.data(), ciphertext.length()); | 158 return new QuicData(ciphertext.data(), ciphertext.length()); |
| 175 } | 159 } |
| 176 virtual StringPiece GetKey() const override { | 160 StringPiece GetKey() const override { return StringPiece(); } |
| 177 return StringPiece(); | 161 StringPiece GetNoncePrefix() const override { return StringPiece(); } |
| 178 } | |
| 179 virtual StringPiece GetNoncePrefix() const override { | |
| 180 return StringPiece(); | |
| 181 } | |
| 182 QuicPacketSequenceNumber sequence_number_; | 162 QuicPacketSequenceNumber sequence_number_; |
| 183 string associated_data_; | 163 string associated_data_; |
| 184 string ciphertext_; | 164 string ciphertext_; |
| 185 }; | 165 }; |
| 186 | 166 |
| 187 class TestQuicVisitor : public ::net::QuicFramerVisitorInterface { | 167 class TestQuicVisitor : public ::net::QuicFramerVisitorInterface { |
| 188 public: | 168 public: |
| 189 TestQuicVisitor() | 169 TestQuicVisitor() |
| 190 : error_count_(0), | 170 : error_count_(0), |
| 191 version_mismatch_(0), | 171 version_mismatch_(0), |
| 192 packet_count_(0), | 172 packet_count_(0), |
| 193 frame_count_(0), | 173 frame_count_(0), |
| 194 fec_count_(0), | 174 fec_count_(0), |
| 195 complete_packets_(0), | 175 complete_packets_(0), |
| 196 revived_packets_(0), | 176 revived_packets_(0), |
| 197 accept_packet_(true), | 177 accept_packet_(true), |
| 198 accept_public_header_(true) { | 178 accept_public_header_(true) { |
| 199 } | 179 } |
| 200 | 180 |
| 201 virtual ~TestQuicVisitor() { | 181 ~TestQuicVisitor() override { |
| 202 STLDeleteElements(&stream_frames_); | 182 STLDeleteElements(&stream_frames_); |
| 203 STLDeleteElements(&ack_frames_); | 183 STLDeleteElements(&ack_frames_); |
| 204 STLDeleteElements(&congestion_feedback_frames_); | 184 STLDeleteElements(&congestion_feedback_frames_); |
| 205 STLDeleteElements(&stop_waiting_frames_); | 185 STLDeleteElements(&stop_waiting_frames_); |
| 206 STLDeleteElements(&ping_frames_); | 186 STLDeleteElements(&ping_frames_); |
| 207 STLDeleteElements(&fec_data_); | 187 STLDeleteElements(&fec_data_); |
| 208 } | 188 } |
| 209 | 189 |
| 210 virtual void OnError(QuicFramer* f) override { | 190 void OnError(QuicFramer* f) override { |
| 211 DVLOG(1) << "QuicFramer Error: " << QuicUtils::ErrorToString(f->error()) | 191 DVLOG(1) << "QuicFramer Error: " << QuicUtils::ErrorToString(f->error()) |
| 212 << " (" << f->error() << ")"; | 192 << " (" << f->error() << ")"; |
| 213 ++error_count_; | 193 ++error_count_; |
| 214 } | 194 } |
| 215 | 195 |
| 216 virtual void OnPacket() override {} | 196 void OnPacket() override {} |
| 217 | 197 |
| 218 virtual void OnPublicResetPacket( | 198 void OnPublicResetPacket(const QuicPublicResetPacket& packet) override { |
| 219 const QuicPublicResetPacket& packet) override { | |
| 220 public_reset_packet_.reset(new QuicPublicResetPacket(packet)); | 199 public_reset_packet_.reset(new QuicPublicResetPacket(packet)); |
| 221 } | 200 } |
| 222 | 201 |
| 223 virtual void OnVersionNegotiationPacket( | 202 void OnVersionNegotiationPacket( |
| 224 const QuicVersionNegotiationPacket& packet) override { | 203 const QuicVersionNegotiationPacket& packet) override { |
| 225 version_negotiation_packet_.reset(new QuicVersionNegotiationPacket(packet)); | 204 version_negotiation_packet_.reset(new QuicVersionNegotiationPacket(packet)); |
| 226 } | 205 } |
| 227 | 206 |
| 228 virtual void OnRevivedPacket() override { | 207 void OnRevivedPacket() override { ++revived_packets_; } |
| 229 ++revived_packets_; | |
| 230 } | |
| 231 | 208 |
| 232 virtual bool OnProtocolVersionMismatch(QuicVersion version) override { | 209 bool OnProtocolVersionMismatch(QuicVersion version) override { |
| 233 DVLOG(1) << "QuicFramer Version Mismatch, version: " << version; | 210 DVLOG(1) << "QuicFramer Version Mismatch, version: " << version; |
| 234 ++version_mismatch_; | 211 ++version_mismatch_; |
| 235 return true; | 212 return true; |
| 236 } | 213 } |
| 237 | 214 |
| 238 virtual bool OnUnauthenticatedPublicHeader( | 215 bool OnUnauthenticatedPublicHeader( |
| 239 const QuicPacketPublicHeader& header) override { | 216 const QuicPacketPublicHeader& header) override { |
| 240 public_header_.reset(new QuicPacketPublicHeader(header)); | 217 public_header_.reset(new QuicPacketPublicHeader(header)); |
| 241 return accept_public_header_; | 218 return accept_public_header_; |
| 242 } | 219 } |
| 243 | 220 |
| 244 virtual bool OnUnauthenticatedHeader( | 221 bool OnUnauthenticatedHeader(const QuicPacketHeader& header) override { |
| 245 const QuicPacketHeader& header) override { | |
| 246 return true; | 222 return true; |
| 247 } | 223 } |
| 248 | 224 |
| 249 virtual void OnDecryptedPacket(EncryptionLevel level) override {} | 225 void OnDecryptedPacket(EncryptionLevel level) override {} |
| 250 | 226 |
| 251 virtual bool OnPacketHeader(const QuicPacketHeader& header) override { | 227 bool OnPacketHeader(const QuicPacketHeader& header) override { |
| 252 ++packet_count_; | 228 ++packet_count_; |
| 253 header_.reset(new QuicPacketHeader(header)); | 229 header_.reset(new QuicPacketHeader(header)); |
| 254 return accept_packet_; | 230 return accept_packet_; |
| 255 } | 231 } |
| 256 | 232 |
| 257 virtual bool OnStreamFrame(const QuicStreamFrame& frame) override { | 233 bool OnStreamFrame(const QuicStreamFrame& frame) override { |
| 258 ++frame_count_; | 234 ++frame_count_; |
| 259 stream_frames_.push_back(new QuicStreamFrame(frame)); | 235 stream_frames_.push_back(new QuicStreamFrame(frame)); |
| 260 return true; | 236 return true; |
| 261 } | 237 } |
| 262 | 238 |
| 263 virtual void OnFecProtectedPayload(StringPiece payload) override { | 239 void OnFecProtectedPayload(StringPiece payload) override { |
| 264 fec_protected_payload_ = payload.as_string(); | 240 fec_protected_payload_ = payload.as_string(); |
| 265 } | 241 } |
| 266 | 242 |
| 267 virtual bool OnAckFrame(const QuicAckFrame& frame) override { | 243 bool OnAckFrame(const QuicAckFrame& frame) override { |
| 268 ++frame_count_; | 244 ++frame_count_; |
| 269 ack_frames_.push_back(new QuicAckFrame(frame)); | 245 ack_frames_.push_back(new QuicAckFrame(frame)); |
| 270 return true; | 246 return true; |
| 271 } | 247 } |
| 272 | 248 |
| 273 virtual bool OnCongestionFeedbackFrame( | 249 bool OnCongestionFeedbackFrame( |
| 274 const QuicCongestionFeedbackFrame& frame) override { | 250 const QuicCongestionFeedbackFrame& frame) override { |
| 275 ++frame_count_; | 251 ++frame_count_; |
| 276 congestion_feedback_frames_.push_back( | 252 congestion_feedback_frames_.push_back( |
| 277 new QuicCongestionFeedbackFrame(frame)); | 253 new QuicCongestionFeedbackFrame(frame)); |
| 278 return true; | 254 return true; |
| 279 } | 255 } |
| 280 | 256 |
| 281 virtual bool OnStopWaitingFrame(const QuicStopWaitingFrame& frame) override { | 257 bool OnStopWaitingFrame(const QuicStopWaitingFrame& frame) override { |
| 282 ++frame_count_; | 258 ++frame_count_; |
| 283 stop_waiting_frames_.push_back(new QuicStopWaitingFrame(frame)); | 259 stop_waiting_frames_.push_back(new QuicStopWaitingFrame(frame)); |
| 284 return true; | 260 return true; |
| 285 } | 261 } |
| 286 | 262 |
| 287 virtual bool OnPingFrame(const QuicPingFrame& frame) override { | 263 bool OnPingFrame(const QuicPingFrame& frame) override { |
| 288 ++frame_count_; | 264 ++frame_count_; |
| 289 ping_frames_.push_back(new QuicPingFrame(frame)); | 265 ping_frames_.push_back(new QuicPingFrame(frame)); |
| 290 return true; | 266 return true; |
| 291 } | 267 } |
| 292 | 268 |
| 293 virtual void OnFecData(const QuicFecData& fec) override { | 269 void OnFecData(const QuicFecData& fec) override { |
| 294 ++fec_count_; | 270 ++fec_count_; |
| 295 fec_data_.push_back(new QuicFecData(fec)); | 271 fec_data_.push_back(new QuicFecData(fec)); |
| 296 } | 272 } |
| 297 | 273 |
| 298 virtual void OnPacketComplete() override { | 274 void OnPacketComplete() override { ++complete_packets_; } |
| 299 ++complete_packets_; | |
| 300 } | |
| 301 | 275 |
| 302 virtual bool OnRstStreamFrame(const QuicRstStreamFrame& frame) override { | 276 bool OnRstStreamFrame(const QuicRstStreamFrame& frame) override { |
| 303 rst_stream_frame_ = frame; | 277 rst_stream_frame_ = frame; |
| 304 return true; | 278 return true; |
| 305 } | 279 } |
| 306 | 280 |
| 307 virtual bool OnConnectionCloseFrame( | 281 bool OnConnectionCloseFrame(const QuicConnectionCloseFrame& frame) override { |
| 308 const QuicConnectionCloseFrame& frame) override { | |
| 309 connection_close_frame_ = frame; | 282 connection_close_frame_ = frame; |
| 310 return true; | 283 return true; |
| 311 } | 284 } |
| 312 | 285 |
| 313 virtual bool OnGoAwayFrame(const QuicGoAwayFrame& frame) override { | 286 bool OnGoAwayFrame(const QuicGoAwayFrame& frame) override { |
| 314 goaway_frame_ = frame; | 287 goaway_frame_ = frame; |
| 315 return true; | 288 return true; |
| 316 } | 289 } |
| 317 | 290 |
| 318 virtual bool OnWindowUpdateFrame(const QuicWindowUpdateFrame& frame) | 291 bool OnWindowUpdateFrame(const QuicWindowUpdateFrame& frame) override { |
| 319 override { | |
| 320 window_update_frame_ = frame; | 292 window_update_frame_ = frame; |
| 321 return true; | 293 return true; |
| 322 } | 294 } |
| 323 | 295 |
| 324 virtual bool OnBlockedFrame(const QuicBlockedFrame& frame) override { | 296 bool OnBlockedFrame(const QuicBlockedFrame& frame) override { |
| 325 blocked_frame_ = frame; | 297 blocked_frame_ = frame; |
| 326 return true; | 298 return true; |
| 327 } | 299 } |
| 328 | 300 |
| 329 // Counters from the visitor_ callbacks. | 301 // Counters from the visitor_ callbacks. |
| 330 int error_count_; | 302 int error_count_; |
| 331 int version_mismatch_; | 303 int version_mismatch_; |
| 332 int packet_count_; | 304 int packet_count_; |
| 333 int frame_count_; | 305 int frame_count_; |
| 334 int fec_count_; | 306 int fec_count_; |
| (...skipping 4722 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5057 EXPECT_CALL(visitor, OnPacketComplete()); | 5029 EXPECT_CALL(visitor, OnPacketComplete()); |
| 5058 EXPECT_CALL(visitor, OnUnauthenticatedPublicHeader(_)).WillOnce(Return(true)); | 5030 EXPECT_CALL(visitor, OnUnauthenticatedPublicHeader(_)).WillOnce(Return(true)); |
| 5059 | 5031 |
| 5060 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 5032 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 5061 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 5033 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 5062 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 5034 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 5063 } | 5035 } |
| 5064 | 5036 |
| 5065 } // namespace test | 5037 } // namespace test |
| 5066 } // namespace net | 5038 } // namespace net |
| OLD | NEW |