// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef WEBKIT_GLUE_P2P_TRANSPORT_H_
#define WEBKIT_GLUE_P2P_TRANSPORT_H_
#include <string>
namespace net {
class Socket;
} // namespace net
namespace webkit_glue {
// Interface for P2P transport.
class P2PTransport {
public:
enum State {
STATE_NONE = 0,
STATE_WRITABLE = 1,
STATE_READABLE = 2,
};
class EventHandler {
public:
virtual ~EventHandler() {}
// Called for each local candidate.
virtual void OnCandidateReady(const std::string& address) = 0;
// Called when readable of writable state of the stream changes.
virtual void OnStateChange(State state) = 0;
};
virtual ~P2PTransport() {}
// Initialize transport using specified configuration. Returns true
// if initialization succeeded.
virtual bool Init(const std::string& name,
const std::string& config,
EventHandler* event_handler) = 0;
// Add candidate received from the remote peer. Returns false if the
// provided address is not in a valid format.
virtual bool AddRemoteCandidate(const std::string& address) = 0;
// Returns socket interface that can be used to send/receive
// data. Returned object is owned by the transport. Pending calls on
// the socket are canceled when the transport is destroyed.
virtual net::Socket* GetChannel() = 0;
};
} // namespace webkit_glue
#endif // WEBKIT_GLUE_P2P_TRANSPORT_H_