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