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