Home | History | Annotate | Download | only in protocol
      1 // Copyright 2014 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_PSEUDOTCP_CHANNEL_FACTORY_H_
      6 #define REMOTING_PROTOCOL_PSEUDOTCP_CHANNEL_FACTORY_H_
      7 
      8 #include <map>
      9 
     10 #include "base/basictypes.h"
     11 #include "remoting/protocol/stream_channel_factory.h"
     12 
     13 namespace remoting {
     14 namespace protocol {
     15 
     16 class DatagramChannelFactory;
     17 
     18 // StreamChannelFactory that creates PseudoTCP-based stream channels that run on
     19 // top of datagram channels created using specified |datagram_channel_factory|.
     20 class PseudoTcpChannelFactory : public StreamChannelFactory {
     21  public:
     22   // |datagram_channel_factory| must outlive this object.
     23   explicit PseudoTcpChannelFactory(
     24       DatagramChannelFactory* datagram_channel_factory);
     25   virtual ~PseudoTcpChannelFactory();
     26 
     27   // StreamChannelFactory interface.
     28   virtual void CreateChannel(const std::string& name,
     29                              const ChannelCreatedCallback& callback) OVERRIDE;
     30   virtual void CancelChannelCreation(const std::string& name) OVERRIDE;
     31 
     32  private:
     33   typedef std::map<std::string, net::StreamSocket*> PendingSocketsMap;
     34 
     35   void OnDatagramChannelCreated(const std::string& name,
     36                                 const ChannelCreatedCallback& callback,
     37                                 scoped_ptr<net::Socket> socket);
     38   void OnPseudoTcpConnected(const std::string& name,
     39                             const ChannelCreatedCallback& callback,
     40                             int result);
     41 
     42   DatagramChannelFactory* datagram_channel_factory_;
     43 
     44   PendingSocketsMap pending_sockets_;
     45 
     46   DISALLOW_COPY_AND_ASSIGN(PseudoTcpChannelFactory);
     47 };
     48 
     49 }  // namespace protocol
     50 }  // namespace remoting
     51 
     52 #endif  // REMOTING_PROTOCOL_PSEUDOTCP_CHANNEL_FACTORY_H_
     53