- add sources.
[platform/framework/web/crosswalk.git] / src / remoting / protocol / channel_factory.h
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_