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