Index: net/quic/quic_framer.h |
=================================================================== |
--- net/quic/quic_framer.h (revision 162262) |
+++ net/quic/quic_framer.h (working copy) |
@@ -1,214 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#ifndef NET_QUIC_QUIC_FRAMER_H_ |
-#define NET_QUIC_QUIC_FRAMER_H_ |
- |
-#include <vector> |
- |
-#include "base/basictypes.h" |
-#include "base/logging.h" |
-#include "base/memory/scoped_ptr.h" |
-#include "base/string_piece.h" |
-#include "net/base/ip_endpoint.h" |
-#include "net/base/net_export.h" |
-#include "net/quic/crypto/quic_decrypter.h" |
-#include "net/quic/crypto/quic_encrypter.h" |
- |
-namespace net { |
- |
-class QuicEncrypter; |
-class QuicDecrypter; |
-class QuicFramer; |
-class QuicDataReader; |
-class QuicDataWriter; |
- |
-// Class that receives callbacks from the framer when packets |
-// are processed. |
-class NET_EXPORT_PRIVATE QuicFramerVisitorInterface { |
- public: |
- virtual ~QuicFramerVisitorInterface() {} |
- |
- // Called if an error is detected in the QUIC protocol. |
- virtual void OnError(QuicFramer* framer) = 0; |
- |
- // Called when a new packet has been recieved, before it |
- // has been validated or processed. |
- virtual void OnPacket(const IPEndPoint& peer_address) = 0; |
- |
- // Called when the header of a packet had been parsed. |
- // If OnPacketHeader returns false, framing for this packet will cease. |
- virtual bool OnPacketHeader(const QuicPacketHeader& header) = 0; |
- |
- // Called when a data packet is parsed that is part of an FEC group. |
- // |payload| is the non-encrypted FEC protected payload of the packet. |
- virtual void OnFecProtectedPayload(base::StringPiece payload) = 0; |
- |
- // Called when a StreamFragment has been parsed. |
- virtual void OnStreamFragment(const QuicStreamFragment& fragment) = 0; |
- |
- // Called when a AckFragment has been parsed. |
- virtual void OnAckFragment(const QuicAckFragment& fragment) = 0; |
- |
- // Called when a RstStreamFragment has been parsed. |
- virtual void OnRstStreamFragment( |
- const QuicRstStreamFragment& fragment) = 0; |
- |
- // Called when a ConnectionCloseFragment has been parsed. |
- virtual void OnConnectionCloseFragment( |
- const QuicConnectionCloseFragment& fragment) = 0; |
- |
- // Called when FEC data has been parsed. |
- virtual void OnFecData(const QuicFecData& fec) = 0; |
- |
- // Called when a packet has been completely processed. |
- virtual void OnPacketComplete() = 0; |
-}; |
- |
-class NET_EXPORT_PRIVATE QuicFecBuilderInterface { |
- public: |
- virtual ~QuicFecBuilderInterface() {} |
- |
- // Called when a data packet is constructed that is part of an FEC group. |
- // |payload| is the non-encrypted FEC protected payload of the packet. |
- virtual void OnBuiltFecProtectedPayload(const QuicPacketHeader& header, |
- base::StringPiece payload) = 0; |
-}; |
- |
-// Class for parsing and constructing QUIC packets. Has a |
-// QuicFramerVisitorInterface that is called when packets are parsed. |
-// Also has a QuicFecBuilder that is called when packets are constructed |
-// in order to generate FEC data for subsequently building FEC packets. |
-class NET_EXPORT_PRIVATE QuicFramer { |
- public: |
- // Constructs a new framer that will own |decrypter| and |encrypter|. |
- QuicFramer(QuicDecrypter* decrypter, QuicEncrypter* encrypter); |
- |
- virtual ~QuicFramer(); |
- |
- // Set callbacks to be called from the framer. A visitor must be set, or |
- // else the framer will likely crash. It is acceptable for the visitor |
- // to do nothing. If this is called multiple times, only the last visitor |
- // will be used. |
- void set_visitor(QuicFramerVisitorInterface* visitor) { |
- visitor_ = visitor; |
- } |
- |
- // Set a builder to be called from the framer when building FEC protected |
- // packets. If this is called multiple times, only the last builder |
- // will be used. The builder need not be set. |
- void set_fec_builder(QuicFecBuilderInterface* builder) { |
- fec_builder_ = builder; |
- } |
- |
- QuicErrorCode error() const { |
- return error_; |
- } |
- |
- // Pass a UDP packet into the framer for parsing. |
- // Return true if the packet was processed succesfully. |packet| must be a |
- // single, complete UDP packet (not a fragment of a packet). This packet |
- // might be null padded past the end of the payload, which will be correctly |
- // ignored. |
- bool ProcessPacket(const IPEndPoint& client_address, |
- const QuicEncryptedPacket& packet); |
- |
- // Pass a data packet that was revived from FEC data into the framer |
- // for parsing. |
- // Return true if the packet was processed succesfully. |payload| must be |
- // the complete DECRYPTED payload of the revived packet. |
- bool ProcessRevivedPacket(const IPEndPoint& client_address, |
- const QuicPacketHeader& header, |
- base::StringPiece payload); |
- |
- // Creates a new QuicPacket populated with the fields in |header| and |
- // |fragments|. Assigns |*packet| to the address of the new object. |
- // Returns true upon success. |
- bool ConstructFragementDataPacket(const QuicPacketHeader& header, |
- const QuicFragments& fragments, |
- QuicPacket** packet); |
- |
- // Creates a new QuicPacket populated with the fields in |header| and |
- // |fec|. Assigns |*packet| to the address of the new object. |
- // Returns true upon success. |
- bool ConstructFecPacket(const QuicPacketHeader& header, |
- const QuicFecData& fec, |
- QuicPacket** packet); |
- |
- // Increments the retransmission count by one, and updates the authentication |
- // hash accordingly. |
- void IncrementRetransmitCount(QuicPacket* packet); |
- |
- uint8 GetRetransmitCount(QuicPacket* packet); |
- |
- void WriteTransmissionTime(QuicTransmissionTime time, QuicPacket* packet); |
- |
- // Returns a new encrypted packet, owned by the caller. |
- QuicEncryptedPacket* EncryptPacket(const QuicPacket& packet); |
- |
- // Returns the maximum length of plaintext that can be encrypted |
- // to ciphertext no larger than |ciphertext_size|. |
- size_t GetMaxPlaintextSize(size_t ciphertext_size); |
- |
- const std::string& detailed_error() { return detailed_error_; } |
- |
- private: |
- bool WritePacketHeader(const QuicPacketHeader& header, |
- QuicDataWriter* builder); |
- |
- bool ProcessPacketHeader(QuicPacketHeader* header, |
- const QuicEncryptedPacket& packet); |
- |
- bool ProcessFragmentData(); |
- bool ProcessStreamFragment(); |
- bool ProcessPDUFragment(); |
- bool ProcessAckFragment(QuicAckFragment* fragment); |
- bool ProcessRstStreamFragment(); |
- bool ProcessConnectionCloseFragment(); |
- |
- bool DecryptPayload(const QuicEncryptedPacket& packet); |
- |
- // Computes the wire size in bytes of the payload of |fragment|. |
- size_t ComputeFragmentPayloadLength(const QuicFragment& fragment); |
- |
- bool AppendStreamFragmentPayload( |
- const QuicStreamFragment& fragment, |
- QuicDataWriter* builder); |
- bool AppendAckFragmentPayload( |
- const QuicAckFragment& fragment, |
- QuicDataWriter* builder); |
- bool AppendRstStreamFragmentPayload( |
- const QuicRstStreamFragment& fragment, |
- QuicDataWriter* builder); |
- bool AppendConnectionCloseFragmentPayload( |
- const QuicConnectionCloseFragment& fragment, |
- QuicDataWriter* builder); |
- bool RaiseError(QuicErrorCode error); |
- |
- void set_error(QuicErrorCode error) { |
- error_ = error; |
- } |
- |
- void set_detailed_error(const char* error) { |
- detailed_error_ = error; |
- } |
- |
- std::string detailed_error_; |
- scoped_ptr<QuicDataReader> reader_; |
- QuicFramerVisitorInterface* visitor_; |
- QuicFecBuilderInterface* fec_builder_; |
- QuicErrorCode error_; |
- // Buffer containing decrypted payload data during parsing. |
- scoped_ptr<QuicData> decrypted_; |
- // Decrypter used to decrypt packets during parsing. |
- scoped_ptr<QuicDecrypter> decrypter_; |
- // Encrypter used to encrypt packets via EncryptPacket(). |
- scoped_ptr<QuicEncrypter> encrypter_; |
- |
- DISALLOW_COPY_AND_ASSIGN(QuicFramer); |
-}; |
- |
-} // namespace net |
- |
-#endif // NET_QUIC_QUIC_FRAMER_H_ |