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