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