1// Copyright (c) 2011 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 WEBKIT_GLUE_P2P_TRANSPORT_H_
6#define WEBKIT_GLUE_P2P_TRANSPORT_H_
7
8#include <string>
9
10namespace net {
11class Socket;
12}  // namespace net
13
14namespace webkit_glue {
15
16// Interface for P2P transport.
17class P2PTransport {
18 public:
19  enum State {
20    STATE_NONE = 0,
21    STATE_WRITABLE = 1,
22    STATE_READABLE = 2,
23  };
24
25  class EventHandler {
26   public:
27    virtual ~EventHandler() {}
28
29    // Called for each local candidate.
30    virtual void OnCandidateReady(const std::string& address) = 0;
31
32    // Called when readable of writable state of the stream changes.
33    virtual void OnStateChange(State state) = 0;
34  };
35
36  virtual ~P2PTransport() {}
37
38  // Initialize transport using specified configuration. Returns true
39  // if initialization succeeded.
40  virtual bool Init(const std::string& name,
41                    const std::string& config,
42                    EventHandler* event_handler) = 0;
43
44  // Add candidate received from the remote peer. Returns false if the
45  // provided address is not in a valid format.
46  virtual bool AddRemoteCandidate(const std::string& address) = 0;
47
48  // Returns socket interface that can be used to send/receive
49  // data. Returned object is owned by the transport. Pending calls on
50  // the socket are canceled when the transport is destroyed.
51  virtual net::Socket* GetChannel() = 0;
52};
53
54}  // namespace webkit_glue
55
56#endif  // WEBKIT_GLUE_P2P_TRANSPORT_H_
57