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