/* Copyright (c) 2013 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. */ /* From extensions/dev/ppb_ext_socket_dev.idl, * modified Tue May 21 16:00:11 2013. */ #ifndef PPAPI_C_EXTENSIONS_DEV_PPB_EXT_SOCKET_DEV_H_ #define PPAPI_C_EXTENSIONS_DEV_PPB_EXT_SOCKET_DEV_H_ #include "ppapi/c/pp_bool.h" #include "ppapi/c/pp_completion_callback.h" #include "ppapi/c/pp_instance.h" #include "ppapi/c/pp_macros.h" #include "ppapi/c/pp_stdint.h" #include "ppapi/c/pp_var.h" #define PPB_EXT_SOCKET_DEV_INTERFACE_0_1 "PPB_Ext_Socket(Dev);0.1" #define PPB_EXT_SOCKET_DEV_INTERFACE_0_2 "PPB_Ext_Socket(Dev);0.2" #define PPB_EXT_SOCKET_DEV_INTERFACE PPB_EXT_SOCKET_DEV_INTERFACE_0_2 /** * @file * This file defines the Pepper equivalent of the chrome.socket * extension API. */ /** * @addtogroup Typedefs * @{ */ /** * A string PP_Var which has one of the following values: * - "tcp" * - "udp" */ typedef struct PP_Var PP_Ext_Socket_SocketType_Dev; /** * A dictionary PP_Var. */ typedef struct PP_Var PP_Ext_Socket_CreateOptions_Dev; /** * A dictionary PP_Var which contains * - "socketId" : integer PP_Var * The id of the newly created socket. */ typedef struct PP_Var PP_Ext_Socket_CreateInfo_Dev; /** * A dictionary PP_Var which contains * - "resultCode" : integer PP_Var * - "socketId" : integer or undefined PP_Var * The id of the accepted socket. */ typedef struct PP_Var PP_Ext_Socket_AcceptInfo_Dev; /** * A dictionary PP_Var which contains * - "resultCode" : integer PP_Var * The resultCode returned from the underlying read() call. * - "data" : array buffer PP_Var */ typedef struct PP_Var PP_Ext_Socket_ReadInfo_Dev; /** * A dictionary PP_Var which contains * - "bytesWritten" : integer PP_Var * The number of bytes sent, or a negative error code. */ typedef struct PP_Var PP_Ext_Socket_WriteInfo_Dev; /** * A dictionary PP_Var which contains * - "resultCode" : integer PP_Var * The resultCode returned from the underlying recvfrom() call. * - "data": array buffer PP_Var * - "address": string PP_Var * The address of the remote machine. * - "port": integer PP_Var */ typedef struct PP_Var PP_Ext_Socket_RecvFromInfo_Dev; /** * A dictionary PP_Var which contains * - "socketType" : string PP_Var which matches the description of * PP_Ext_Socket_SocketType_Dev * The type of the passed socket. This will be tcp or * udp. * - "connected" : boolean PP_Var * Whether or not the underlying socket is connected. * * For tcp sockets, this will remain true even if the remote peer * has disconnected. Reading or writing to the socket may then result in an * error, hinting that this socket should be disconnected via * Disconnect(). * * For udp sockets, this just represents whether a default remote * address has been specified for reading and writing packets. * - "peerAddress" : string or undefined PP_Var * If the underlying socket is connected, contains the IPv4/6 address of the * peer. * - "peerPort" : integer or undefined PP_Var * If the underlying socket is connected, contains the port of the connected * peer. * - "localAddress" : string or undefined PP_Var * If the underlying socket is bound or connected, contains its local IPv4/6 * address. * - "localPort" : integer or undefined PP_Var * If the underlying socket is bound or connected, contains its local port. */ typedef struct PP_Var PP_Ext_Socket_SocketInfo_Dev; /** * A dictionary PP_Var which contains * - "name" : string PP_Var * The underlying name of the adapter. On *nix, this will typically be "eth0", * "lo", etc. * - "address": string PP_Var * The available IPv4/6 address. */ typedef struct PP_Var PP_Ext_Socket_NetworkInterface_Dev; /** * An array PP_Var which contains elements of * PP_Ext_Socket_NetworkInterface_Dev. */ typedef struct PP_Var PP_Ext_Socket_NetworkInterface_Dev_Array; /** * @} */ /** * @addtogroup Interfaces * @{ */ struct PPB_Ext_Socket_Dev_0_2 { /** * Creates a socket of the specified type that will connect to the specified * remote machine. * * @param[in] instance A PP_Instance. * @param[in] type A PP_Ext_Socket_SocketType_Dev. The type of * socket to create. Must be tcp or udp. * @param[in] options An undefined PP_Var or * PP_Ext_Socket_CreateOptions_Dev. The socket options. * @param[out] create_info A PP_Ext_Socket_CreateInfo_Dev. * @param[in] callback A PP_CompletionCallback to be called * upon completion. * * @return An error code from pp_errors.h. */ int32_t (*Create)(PP_Instance instance, PP_Ext_Socket_SocketType_Dev type, PP_Ext_Socket_CreateOptions_Dev options, PP_Ext_Socket_CreateInfo_Dev* create_info, struct PP_CompletionCallback callback); /** * Destroys the socket. Each socket created should be destroyed after use. * * @param[in] instance A PP_Instance. * @param[in] socket_id An integer PP_Var. The socket ID. */ void (*Destroy)(PP_Instance instance, struct PP_Var socket_id); /** * Connects the socket to the remote machine (for a tcp socket). * For a udp socket, this sets the default address which packets * are sent to and read from for Read() and Write() * calls. * * @param[in] instance A PP_Instance. * @param[in] socket_id An integer PP_Var. The socket ID. * @param[in] hostname A string PP_Var. The hostname or IP * address of the remote machine. * @param[in] port An integer PP_Var. The port of the remote * machine. * @param[out] result An integer PP_Var. * @param[in] callback A PP_CompletionCallback to be called * upon completion. * * @return An error code from pp_errors.h. */ int32_t (*Connect)(PP_Instance instance, struct PP_Var socket_id, struct PP_Var hostname, struct PP_Var port, struct PP_Var* result, struct PP_CompletionCallback callback); /** * Binds the local address for socket. Currently, it does not support TCP * socket. * * @param[in] instance A PP_Instance. * @param[in] socket_id An integer PP_Var. The socket ID. * @param[in] address A string PP_Var. The address of the local * machine. * @param[in] port An integer PP_Var. The port of the local * machine. * @param[out] result An integer PP_Var. * @param[in] callback A PP_CompletionCallback to be called * upon completion. * * @return An error code from pp_errors.h. */ int32_t (*Bind)(PP_Instance instance, struct PP_Var socket_id, struct PP_Var address, struct PP_Var port, struct PP_Var* result, struct PP_CompletionCallback callback); /** * Disconnects the socket. For UDP sockets, Disconnect is a * non-operation but is safe to call. * * @param[in] instance A PP_Instance. * @param[in] socket_id An integer PP_Var. The socket ID. */ void (*Disconnect)(PP_Instance instance, struct PP_Var socket_id); /** * Reads data from the given connected socket. * * @param[in] instance A PP_Instance. * @param[in] socket_id An integer PP_Var. The socket ID. * @param[in] buffer_size An undefined or integer PP_Var. The * read buffer size. * @param[out] read_info A PP_Ext_Socket_ReadInfo_Dev. * @param[in] callback A PP_CompletionCallback to be called * upon completion. * * @return An error code from pp_errors.h. */ int32_t (*Read)(PP_Instance instance, struct PP_Var socket_id, struct PP_Var buffer_size, PP_Ext_Socket_ReadInfo_Dev* read_info, struct PP_CompletionCallback callback); /** * Writes data on the given connected socket. * * @param[in] instance A PP_Instance. * @param[in] socket_id An integer PP_Var. The socket ID. * @param[in] data An array buffer PP_Var. The data to write. * @param[out] write_info A PP_Ext_Socket_WriteInfo_Dev. * @param[in] callback A PP_CompletionCallback to be called * upon completion. * * @return An error code from pp_errors.h. */ int32_t (*Write)(PP_Instance instance, struct PP_Var socket_id, struct PP_Var data, PP_Ext_Socket_WriteInfo_Dev* write_info, struct PP_CompletionCallback callback); /** * Receives data from the given UDP socket. * * @param[in] instance A PP_Instance. * @param[in] socket_id An integer PP_Var. The socket ID. * @param[in] buffer_size An undefined or integer PP_Var. The * receive buffer size. * @param[out] recv_from_info A PP_Ext_Socket_RecvFromInfo_Dev. * @param[in] callback A PP_CompletionCallback to be called * upon completion. * * @return An error code from pp_errors.h. */ int32_t (*RecvFrom)(PP_Instance instance, struct PP_Var socket_id, struct PP_Var buffer_size, PP_Ext_Socket_RecvFromInfo_Dev* recv_from_info, struct PP_CompletionCallback callback); /** * Sends data on the given UDP socket to the given address and port. * * @param[in] instance A PP_Instance. * @param[in] socket_id An integer PP_Var. The socket ID. * @param[in] data An array buffer PP_Var. * @param[in] address A string PP_Var. The address of the remote * machine. * @param[in] port An integer PP_Var. The port of the remote * machine. * @param[out] write_info A PP_Ext_Socket_WriteInfo_Dev. * @param[in] callback A PP_CompletionCallback to be called * upon completion. * * @return An error code from pp_errors.h. */ int32_t (*SendTo)(PP_Instance instance, struct PP_Var socket_id, struct PP_Var data, struct PP_Var address, struct PP_Var port, PP_Ext_Socket_WriteInfo_Dev* write_info, struct PP_CompletionCallback callback); /** * This method applies to TCP sockets only. * Listens for connections on the specified port and address. This effectively * makes this a server socket, and client socket functions (Connect, Read, * Write) can no longer be used on this socket. * * @param[in] instance A PP_Instance. * @param[in] socket_id An integer PP_Var. The socket ID. * @param[in] address A string PP_Var. The address of the local * machine. * @param[in] port An integer PP_Var. The port of the local * machine. * @param[in] backlog An undefined or integer PP_Var. Length of * the socket's listen queue. * @param[out] result An integer PP_Var. * @param[in] callback A PP_CompletionCallback to be called * upon completion. * * @return An error code from pp_errors.h. */ int32_t (*Listen)(PP_Instance instance, struct PP_Var socket_id, struct PP_Var address, struct PP_Var port, struct PP_Var backlog, struct PP_Var* result, struct PP_CompletionCallback callback); /** * This method applies to TCP sockets only. * Registers a callback function to be called when a connection is accepted on * this listening server socket. Listen must be called first. * If there is already an active accept callback, this callback will be * invoked immediately with an error as the resultCode. * * @param[in] instance A PP_Instance. * @param[in] socket_id An integer PP_Var. The socket ID. * @param[out] accept_info A PP_Ext_Socket_AcceptInfo_Dev. * @param[in] callback A PP_CompletionCallback to be called * upon completion. * * @return An error code from pp_errors.h. */ int32_t (*Accept)(PP_Instance instance, struct PP_Var socket_id, PP_Ext_Socket_AcceptInfo_Dev* accept_info, struct PP_CompletionCallback callback); /** * Enables or disables the keep-alive functionality for a TCP connection. * * @param[in] instance A PP_Instance. * @param[in] socket_id An integer PP_Var. The socket ID. * @param[in] enable A boolean PP_Var. If true, enable keep-alive * functionality. * @param[in] delay An undefined or integer PP_Var. Set the delay * seconds between the last data packet received and the first keepalive * probe. Default is 0. * @param[out] result A boolean PP_Var. * @param[in] callback A PP_CompletionCallback to be called * upon completion. * * @return An error code from pp_errors.h. */ int32_t (*SetKeepAlive)(PP_Instance instance, struct PP_Var socket_id, struct PP_Var enable, struct PP_Var delay, struct PP_Var* result, struct PP_CompletionCallback callback); /** * Sets or clears TCP_NODELAY for a TCP connection. Nagle's * algorithm will be disabled when TCP_NODELAY is set. * * @param[in] instance A PP_Instance. * @param[in] socket_id An integer PP_Var. The socket ID. * @param[in] no_delay A boolean PP_Var. * @param[out] result A boolean PP_Var. * @param[in] callback A PP_CompletionCallback to be called * upon completion. * * @return An error code from pp_errors.h. */ int32_t (*SetNoDelay)(PP_Instance instance, struct PP_Var socket_id, struct PP_Var no_delay, struct PP_Var* result, struct PP_CompletionCallback callback); /** * Retrieves the state of the given socket. * * @param[in] instance A PP_Instance. * @param[in] socket_id An integer PP_Var. The socket ID. * @param[out] result A PP_Ext_Socket_SocketInfo_Dev. * @param[in] callback A PP_CompletionCallback to be called * upon completion. * * @return An error code from pp_errors.h. */ int32_t (*GetInfo)(PP_Instance instance, struct PP_Var socket_id, PP_Ext_Socket_SocketInfo_Dev* result, struct PP_CompletionCallback callback); /** * Retrieves information about local adapters on this system. * * @param[in] instance A PP_Instance. * @param[out] result A PP_Ext_Socket_NetworkInterface_Dev_Array. * @param[in] callback A PP_CompletionCallback to be called * upon completion. * * @return An error code from pp_errors.h. */ int32_t (*GetNetworkList)(PP_Instance instance, PP_Ext_Socket_NetworkInterface_Dev_Array* result, struct PP_CompletionCallback callback); /** * Joins the multicast group and starts to receive packets from that group. * The socket must be of UDP type and must be bound to a local port before * calling this method. * * @param[in] instance A PP_Instance. * @param[in] socket_id An integer PP_Var. The socket ID. * @param[in] address A string PP_Var. The group address to join. * Domain names are not supported. * @param[out] result An integer PP_Var. * @param[in] callback A PP_CompletionCallback to be called * upon completion. * * @return An error code from pp_errors.h. */ int32_t (*JoinGroup)(PP_Instance instance, struct PP_Var socket_id, struct PP_Var address, struct PP_Var* result, struct PP_CompletionCallback callback); /** * Leaves the multicast group previously joined using JoinGroup. * It's not necessary to leave the multicast group before destroying the * socket or exiting. This is automatically called by the OS. * * Leaving the group will prevent the router from sending multicast datagrams * to the local host, presuming no other process on the host is still joined * to the group. * * @param[in] instance A PP_Instance. * @param[in] socket_id An integer PP_Var. The socket ID. * @param[in] address A string PP_Var. The group address to * leave. Domain names are not supported. * @param[out] result An integer PP_Var. * @param[in] callback A PP_CompletionCallback to be called * upon completion. * * @return An error code from pp_errors.h. */ int32_t (*LeaveGroup)(PP_Instance instance, struct PP_Var socket_id, struct PP_Var address, struct PP_Var* result, struct PP_CompletionCallback callback); /** * Sets the time-to-live of multicast packets sent to the multicast group. * * Calling this method does not require multicast permissions. * * @param[in] instance A PP_Instance. * @param[in] socket_id An integer PP_Var. The socket ID. * @param[in] ttl An integer PP_Var. The time-to-live value. * @param[out] result An integer PP_Var. * @param[in] callback A PP_CompletionCallback to be called * upon completion. * * @return An error code from pp_errors.h. */ int32_t (*SetMulticastTimeToLive)(PP_Instance instance, struct PP_Var socket_id, struct PP_Var ttl, struct PP_Var* result, struct PP_CompletionCallback callback); /** * Sets whether multicast packets sent from the host to the multicast group * will be looped back to the host. * * Note: the behavior of SetMulticastLoopbackMode is slightly * different between Windows and Unix-like systems. The inconsistency * happens only when there is more than one application on the same host * joined to the same multicast group while having different settings on * multicast loopback mode. On Windows, the applications with loopback off * will not RECEIVE the loopback packets; while on Unix-like systems, the * applications with loopback off will not SEND the loopback packets to * other applications on the same host. See MSDN: http://goo.gl/6vqbj * * Calling this method does not require multicast permissions. * * @param[in] instance A PP_Instance. * @param[in] socket_id An integer PP_Var. The socket ID. * @param[in] enabled A boolean PP_Var. Indicates whether to * enable loopback mode. * @param[out] result An integer PP_Var. * @param[in] callback A PP_CompletionCallback to be called * upon completion. * * @return An error code from pp_errors.h. */ int32_t (*SetMulticastLoopbackMode)(PP_Instance instance, struct PP_Var socket_id, struct PP_Var enabled, struct PP_Var* result, struct PP_CompletionCallback callback); /** * Gets the multicast group addresses the socket is currently joined to. * * @param[in] instance A PP_Instance. * @param[in] socket_id An integer PP_Var. The socket ID. * @param[out] groups An array PP_Var of string * PP_Vars. * @param[in] callback A PP_CompletionCallback to be called * upon completion. * * @return An error code from pp_errors.h. */ int32_t (*GetJoinedGroups)(PP_Instance instance, struct PP_Var socket_id, struct PP_Var* groups, struct PP_CompletionCallback callback); }; typedef struct PPB_Ext_Socket_Dev_0_2 PPB_Ext_Socket_Dev; struct PPB_Ext_Socket_Dev_0_1 { int32_t (*Create)(PP_Instance instance, PP_Ext_Socket_SocketType_Dev type, PP_Ext_Socket_CreateOptions_Dev options, PP_Ext_Socket_CreateInfo_Dev* create_info, struct PP_CompletionCallback callback); void (*Destroy)(PP_Instance instance, struct PP_Var socket_id); int32_t (*Connect)(PP_Instance instance, struct PP_Var socket_id, struct PP_Var hostname, struct PP_Var port, struct PP_Var* result, struct PP_CompletionCallback callback); int32_t (*Bind)(PP_Instance instance, struct PP_Var socket_id, struct PP_Var address, struct PP_Var port, struct PP_Var* result, struct PP_CompletionCallback callback); void (*Disconnect)(PP_Instance instance, struct PP_Var socket_id); int32_t (*Read)(PP_Instance instance, struct PP_Var socket_id, struct PP_Var buffer_size, PP_Ext_Socket_ReadInfo_Dev* read_info, struct PP_CompletionCallback callback); int32_t (*Write)(PP_Instance instance, struct PP_Var socket_id, struct PP_Var data, PP_Ext_Socket_WriteInfo_Dev* write_info, struct PP_CompletionCallback callback); int32_t (*RecvFrom)(PP_Instance instance, struct PP_Var socket_id, struct PP_Var buffer_size, PP_Ext_Socket_RecvFromInfo_Dev* recv_from_info, struct PP_CompletionCallback callback); int32_t (*SendTo)(PP_Instance instance, struct PP_Var socket_id, struct PP_Var data, struct PP_Var address, struct PP_Var port, PP_Ext_Socket_WriteInfo_Dev* write_info, struct PP_CompletionCallback callback); int32_t (*Listen)(PP_Instance instance, struct PP_Var socket_id, struct PP_Var address, struct PP_Var port, struct PP_Var backlog, struct PP_Var* result, struct PP_CompletionCallback callback); int32_t (*Accept)(PP_Instance instance, struct PP_Var socket_id, PP_Ext_Socket_AcceptInfo_Dev* accept_info, struct PP_CompletionCallback callback); int32_t (*SetKeepAlive)(PP_Instance instance, struct PP_Var socket_id, struct PP_Var enable, struct PP_Var delay, struct PP_Var* result, struct PP_CompletionCallback callback); int32_t (*SetNoDelay)(PP_Instance instance, struct PP_Var socket_id, struct PP_Var no_delay, struct PP_Var* result, struct PP_CompletionCallback callback); int32_t (*GetInfo)(PP_Instance instance, struct PP_Var socket_id, PP_Ext_Socket_SocketInfo_Dev* result, struct PP_CompletionCallback callback); int32_t (*GetNetworkList)(PP_Instance instance, PP_Ext_Socket_NetworkInterface_Dev_Array* result, struct PP_CompletionCallback callback); }; /** * @} */ #endif /* PPAPI_C_EXTENSIONS_DEV_PPB_EXT_SOCKET_DEV_H_ */