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 #ifndef REMOTING_PROTOCOL_CHANNEL_FACTORY_H_ 6 #define REMOTING_PROTOCOL_CHANNEL_FACTORY_H_ 7 8 #include "base/callback.h" 9 #include "base/memory/scoped_ptr.h" 10 #include "base/threading/non_thread_safe.h" 11 12 namespace net { 13 class Socket; 14 class StreamSocket; 15 } // namespace net 16 17 namespace remoting { 18 namespace protocol { 19 20 class ChannelFactory : public base::NonThreadSafe { 21 public: 22 // TODO(sergeyu): Specify connection error code when channel 23 // connection fails. 24 typedef base::Callback<void(scoped_ptr<net::StreamSocket>)> 25 StreamChannelCallback; 26 typedef base::Callback<void(scoped_ptr<net::Socket>)> 27 DatagramChannelCallback; 28 29 ChannelFactory() {} 30 31 // Creates new channels for this connection. The specified callback is called 32 // when then new channel is created and connected. The callback is called with 33 // NULL if connection failed for any reason. Callback may be called 34 // synchronously, before the call returns. All channels must be destroyed 35 // before the factory is destroyed and CancelChannelCreation() must be called 36 // to cancel creation of channels for which the |callback| hasn't been called 37 // yet. 38 virtual void CreateStreamChannel( 39 const std::string& name, const StreamChannelCallback& callback) = 0; 40 virtual void CreateDatagramChannel( 41 const std::string& name, const DatagramChannelCallback& callback) = 0; 42 43 // Cancels a pending CreateStreamChannel() or CreateDatagramChannel() 44 // operation for the named channel. If the channel creation already 45 // completed then canceling it has no effect. When shutting down 46 // this method must be called for each channel pending creation. 47 virtual void CancelChannelCreation(const std::string& name) = 0; 48 49 protected: 50 virtual ~ChannelFactory() {} 51 52 private: 53 DISALLOW_COPY_AND_ASSIGN(ChannelFactory); 54 }; 55 56 } // namespace protocol 57 } // namespace remoting 58 59 #endif // REMOTING_PROTOCOL_CHANNEL_FACTORY_H_ 60