/* 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 PPAPI_C_PPB_TRANSPORT_DEV_H_ #define PPAPI_C_PPB_TRANSPORT_DEV_H_ #include "ppapi/c/pp_bool.h" #include "ppapi/c/pp_completion_callback.h" #include "ppapi/c/pp_module.h" #include "ppapi/c/pp_instance.h" #include "ppapi/c/pp_resource.h" #include "ppapi/c/pp_stdint.h" #include "ppapi/c/pp_var.h" #define PPB_TRANSPORT_DEV_INTERFACE_0_7 "PPB_Transport;0.7" #define PPB_TRANSPORT_DEV_INTERFACE PPB_TRANSPORT_DEV_INTERFACE_0_7 typedef enum { PP_TRANSPORTTYPE_DATAGRAM = 0, PP_TRANSPORTTYPE_STREAM = 1 } PP_TransportType; typedef enum { // STUN server address and port, e.g "stun.example.com:19302". PP_TRANSPORTPROPERTY_STUN_SERVER = 0, // Relay server address and port, e.g. "relay.example.com:12344". PP_TRANSPORTPROPERTY_RELAY_SERVER = 1, // Username for the relay server. PP_TRANSPORTPROPERTY_RELAY_USERNAME = 2, // Password for the relay server. PP_TRANSPORTPROPERTY_RELAY_PASSWORD = 3, // Type of Relay server. Must be one of the PP_TransportRelayMode // values. By default is set to PP_TRANSPORTRELAYMODE_TURN. PP_TRANSPORTPROPERTY_RELAY_MODE = 4, // TCP receive window in bytes. Takes effect only for PseudoTCP // connections. PP_TRANSPORTPROPERTY_TCP_RECEIVE_WINDOW = 5, // TCP send window in bytes. Takes effect only for PseudoTCP // connections. PP_TRANSPORTPROPERTY_TCP_SEND_WINDOW = 6, // Boolean value that disables Neagle's algorithm when set to // true. When Neagle's algorithm is disabled, all outgoing packets // are sent as soon as possible. When set to false (by default) data // may be buffered until there is a sufficient amount to send. PP_TRANSPORTPROPERTY_TCP_NO_DELAY = 7, // Delay for ACK packets in milliseconds. By default set to 100ms. PP_TRANSPORTPROPERTY_TCP_ACK_DELAY = 8, // Boolean value that disables TCP-based transports when set to // true. By default set to false. PP_TRANSPORTPROPERTY_DISABLE_TCP_TRANSPORT = 9 } PP_TransportProperty; PP_COMPILE_ASSERT_SIZE_IN_BYTES(PP_TransportProperty, 4); typedef enum { // RFC5766 compliant relay server. PP_TRANSPORTRELAYMODE_TURN = 0, // Legacy Google relay server. PP_TRANSPORTRELAYMODE_GOOGLE = 1 } PP_TransportRelayMode; struct PPB_Transport_Dev { // Creates a new transport object with the specified name using the // specified protocol. PP_Resource (*CreateTransport)(PP_Instance instance, const char* name, PP_TransportType type); // Returns PP_TRUE if resource is a Transport, PP_FALSE otherwise. PP_Bool (*IsTransport)(PP_Resource resource); // Returns PP_TRUE if the transport is currently writable (i.e. can // send data to the remote peer), PP_FALSE otherwise. PP_Bool (*IsWritable)(PP_Resource transport); // TODO(juberti): other getters/setters // connect state // connect type, protocol // RTT // Sets various configuration properties of the transport. int32_t (*SetProperty)(PP_Resource transport, PP_TransportProperty property, struct PP_Var value); // Establishes a connection to the remote peer. Returns // PP_OK_COMPLETIONPENDING and notifies on |cb| when connectivity is // established (or timeout occurs). int32_t (*Connect)(PP_Resource transport, struct PP_CompletionCallback cb); // Obtains another ICE candidate address to be provided to the // remote peer. Returns PP_OK_COMPLETIONPENDING if there are no more // addresses to be sent. After the callback is called // GetNextAddress() must be called again to get the address. int32_t (*GetNextAddress)(PP_Resource transport, struct PP_Var* address, struct PP_CompletionCallback cb); // Provides an ICE candidate address that was received // from the remote peer. int32_t (*ReceiveRemoteAddress)(PP_Resource transport, struct PP_Var address); // Like recv(), receives data. Returns PP_OK_COMPLETIONPENDING if there // is currently no data to receive. In that case, the |data| pointer // should remain valid until the callback is called. int32_t (*Recv)(PP_Resource transport, void* data, uint32_t len, struct PP_CompletionCallback cb); // Like send(), sends data. Returns PP_OK_COMPLETIONPENDING if the // socket is currently flow-controlled. In that case, the |data| // pointer should remain valid until the callback is called. int32_t (*Send)(PP_Resource transport, const void* data, uint32_t len, struct PP_CompletionCallback cb); // Disconnects from the remote peer. int32_t (*Close)(PP_Resource transport); }; #endif /* PPAPI_C_PPB_TRANSPORT_DEV_H_ */