Home | History | Annotate | Download | only in quic
      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
      3 // found in the LICENSE file.
      4 //
      5 // The Chrome-specific helper for QuicConnection which uses
      6 // a TaskRunner for alarms, and uses a DatagramClientSocket for writing data.
      7 
      8 #ifndef NET_QUIC_QUIC_CONNECTION_HELPER_H_
      9 #define NET_QUIC_QUIC_CONNECTION_HELPER_H_
     10 
     11 #include "net/quic/quic_connection.h"
     12 
     13 #include <set>
     14 
     15 #include "base/memory/weak_ptr.h"
     16 #include "net/base/ip_endpoint.h"
     17 #include "net/quic/quic_protocol.h"
     18 #include "net/quic/quic_time.h"
     19 #include "net/udp/datagram_client_socket.h"
     20 
     21 namespace base {
     22 class TaskRunner;
     23 }  // namespace base
     24 
     25 namespace net {
     26 
     27 class QuicClock;
     28 class QuicRandom;
     29 
     30 namespace test {
     31 class QuicConnectionHelperPeer;
     32 }  // namespace test
     33 
     34 class NET_EXPORT_PRIVATE QuicConnectionHelper
     35     : public QuicConnectionHelperInterface {
     36  public:
     37   QuicConnectionHelper(base::TaskRunner* task_runner,
     38                        const QuicClock* clock,
     39                        QuicRandom* random_generator,
     40                        DatagramClientSocket* socket);
     41 
     42   virtual ~QuicConnectionHelper();
     43 
     44   // QuicConnectionHelperInterface
     45   virtual void SetConnection(QuicConnection* connection) OVERRIDE;
     46   virtual const QuicClock* GetClock() const OVERRIDE;
     47   virtual QuicRandom* GetRandomGenerator() OVERRIDE;
     48   virtual int WritePacketToWire(const QuicEncryptedPacket& packet,
     49                                 int* error) OVERRIDE;
     50   virtual bool IsWriteBlockedDataBuffered() OVERRIDE;
     51   virtual bool IsWriteBlocked(int error) OVERRIDE;
     52   virtual QuicAlarm* CreateAlarm(QuicAlarm::Delegate* delegate) OVERRIDE;
     53 
     54  private:
     55   friend class test::QuicConnectionHelperPeer;
     56 
     57   // A completion callback invoked when a write completes.
     58   void OnWriteComplete(int result);
     59 
     60   base::WeakPtrFactory<QuicConnectionHelper> weak_factory_;
     61   base::TaskRunner* task_runner_;
     62   DatagramClientSocket* socket_;
     63   QuicConnection* connection_;
     64   const QuicClock* clock_;
     65   QuicRandom* random_generator_;
     66 
     67   DISALLOW_COPY_AND_ASSIGN(QuicConnectionHelper);
     68 };
     69 
     70 }  // namespace net
     71 
     72 #endif  // NET_QUIC_QUIC_CONNECTION_HELPER_H_
     73