// Copyright 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.
// Use the chrome.sockets.udp
API to send and receive data over the
// network using UDP connections. This API supersedes the UDP functionality
// previously found in the "socket" API. Note that the socket ids created from
// this namespace are not compatible with ids created in other namespaces.
namespace sockets.udp {
// The socket properties specified in the create
or
// update
function. Each property is optional. If a property
// value is not specified, a default value is used when calling
// create
, or the existing value if preserved when calling
// update
.
dictionary SocketProperties {
// Flag indicating if the socket is left open when the event page of the
// application is unloaded (see
// Manage App
// Lifecycle). The default value is "false." When the application is
// loaded, any sockets previously opened with persistent=true can be fetched
// with getSockets
.
boolean? persistent;
// An application-defined string associated with the socket.
DOMString? name;
// The size of the buffer used to receive data. If the buffer is too small
// to receive the UDP packet, data is lost. The default value is 4096.
long? bufferSize;
};
// Result of create
call.
dictionary CreateInfo {
// The ID of the newly created socket.
long socketId;
};
// Callback from the create
method.
// |createInfo| : The result of the socket creation.
callback CreateCallback = void (CreateInfo createInfo);
// Callback from the bind
method.
// |result| : The result code returned from the underlying network call.
// A negative value indicates an error.
callback BindCallback = void (long result);
// Result of the send
method.
dictionary SendInfo {
// The result code returned from the underlying network call.
// A negative value indicates an error.
long resultCode;
// The number of bytes sent (if result == 0)
long? bytesSent;
};
// Callback from the send
method.
// |sendInfo| : Result of the send
method.
callback SendCallback = void (SendInfo sendInfo);
// Callback from the close method.
callback CloseCallback = void ();
// Callback from the update
method.
callback UpdateCallback = void ();
// Callback from the setPaused method.
callback SetPausedCallback = void ();
// Result of the getInfo
method.
dictionary SocketInfo {
// The socket identifier.
long socketId;
// Flag indicating whether the socket is left open when the application is
// suspended (see SocketProperties.persistent
).
boolean persistent;
// Application-defined string associated with the socket.
DOMString? name;
// The size of the buffer used to receive data. If no buffer size has been
// specified explictly, the value is not provided.
long? bufferSize;
// Flag indicating whether the socket is blocked from firing onReceive
// events.
boolean paused;
// If the underlying socket is bound, contains its local
// IPv4/6 address.
DOMString? localAddress;
// If the underlying socket is bound, contains its local port.
long? localPort;
};
// Callback from the getInfo
method.
// |socketInfo| : Object containing the socket information.
callback GetInfoCallback = void (SocketInfo socketInfo);
// Callback from the getSockets
method.
// |socketInfos| : Array of object containing socket information.
callback GetSocketsCallback = void (SocketInfo[] socketInfos);
// Callback from the joinGroup
method.
// |result| : The result code returned from the underlying network call.
// A negative value indicates an error.
callback JoinGroupCallback = void (long result);
// Callback from the leaveGroup
method.
// |result| : The result code returned from the underlying network call.
// A negative value indicates an error.
callback LeaveGroupCallback = void (long result);
// Callback from the setMulticastTimeToLive
method.
// |result| : The result code returned from the underlying network call.
// A negative value indicates an error.
callback SetMulticastTimeToLiveCallback = void (long result);
// Callback from the setMulticastLoopbackMode
method.
// |result| : The result code returned from the underlying network call.
// A negative value indicates an error.
callback SetMulticastLoopbackModeCallback = void (long result);
// Callback from the getJoinedGroupsCallback
method.
// |groups| : Array of groups the socket joined.
callback GetJoinedGroupsCallback = void (DOMString[] groups);
// Data from an onReceive
event.
dictionary ReceiveInfo {
// The socket ID.
long socketId;
// The UDP packet content (truncated to the current buffer size).
ArrayBuffer data;
// The address of the host the packet comes from.
DOMString remoteAddress;
// The port of the host the packet comes from.
long remotePort;
};
// Data from an onReceiveError
event.
dictionary ReceiveErrorInfo {
// The socket ID.
long socketId;
// The result code returned from the underlying recvfrom() call.
long resultCode;
};
interface Functions {
// Creates a UDP socket with the given properties.
// |properties| : The socket properties (optional).
// |callback| : Called when the socket has been created.
static void create(optional SocketProperties properties,
CreateCallback callback);
// Updates the socket properties.
// |socketId| : The socket ID.
// |properties| : The properties to update.
// |callback| : Called when the properties are updated.
static void update(long socketId,
SocketProperties properties,
optional UpdateCallback callback);
// Pauses or unpauses a socket. A paused socket is blocked from firing
// onReceive
events.
// |connectionId| : The socket ID.
// |paused| : Flag to indicate whether to pause or unpause.
// |callback| : Called when the socket has been successfully paused or
// unpaused.
static void setPaused(long socketId,
boolean paused,
optional SetPausedCallback callback);
// Binds the local address and port for the socket. For a client socket, it
// is recommended to use port 0 to let the platform pick a free port.
//
// Once the bind
operation completes successfully,
// onReceive
events are raised when UDP packets arrive on the
// address/port specified -- unless the socket is paused.
//
// |socketId| : The socket ID.
// |address| : The address of the local machine. DNS name, IPv4 and IPv6
// formats are supported. Use "0.0.0.0" to accept packets from all local
// available network interfaces.
// |port| : The port of the local machine. Use "0" to bind to a free port.
// |callback| : Called when the bind
operation completes.
static void bind(long socketId,
DOMString address,
long port,
BindCallback callback);
// Sends data on the given socket to the given address and port. The socket
// must be bound to a local port before calling this method.
// |socketId| : The socket ID.
// |data| : The data to send.
// |address| : The address of the remote machine.
// |port| : The port of the remote machine.
// |callback| : Called when the send
operation completes.
static void send(long socketId,
ArrayBuffer data,
DOMString address,
long port,
SendCallback callback);
// Closes the socket and releases the address/port the socket is bound to.
// Each socket created should be closed after use. The socket id is no
// longer valid as soon at the function is called. However, the socket is
// guaranteed to be closed only when the callback is invoked.
// |socketId| : The socket ID.
// |callback| : Called when the close
operation completes.
static void close(long socketId,
optional CloseCallback callback);
// Retrieves the state of the given socket.
// |socketId| : The socket ID.
// |callback| : Called when the socket state is available.
static void getInfo(long socketId,
GetInfoCallback callback);
// Retrieves the list of currently opened sockets owned by the application.
// |callback| : Called when the list of sockets is available.
static void getSockets(GetSocketsCallback callback);
// Joins the multicast group and starts to receive packets from that group.
// The socket must be bound to a local port before calling this method.
// |socketId| : The socket ID.
// |address| : The group address to join. Domain names are not supported.
// |callback| : Called when the joinGroup
operation completes.
static void joinGroup(long socketId,
DOMString address,
JoinGroupCallback callback);
// Leaves the multicast group previously joined using
// joinGroup
. This is only necessary to call if you plan to
// keep using the socketafterwards, since it will be done automatically by
// the OS when the socket is closed.
//
// 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.
//
// |socketId| : The socket ID.
// |address| : The group address to leave. Domain names are not supported.
// |callback| : Called when the leaveGroup
operation completes.
static void leaveGroup(long socketId,
DOMString address,
LeaveGroupCallback callback);
// Sets the time-to-live of multicast packets sent to the multicast group.
//
// Calling this method does not require multicast permissions.
//
// |socketId| : The socket ID.
// |ttl| : The time-to-live value.
// |callback| : Called when the configuration operation completes.
static void setMulticastTimeToLive(
long socketId,
long ttl,
SetMulticastTimeToLiveCallback 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.
//
// |socketId| : The socket ID.
// |enabled| : Indicate whether to enable loopback mode.
// |callback| : Called when the configuration operation completes.
static void setMulticastLoopbackMode(
long socketId,
boolean enabled,
SetMulticastLoopbackModeCallback callback);
// Gets the multicast group addresses the socket is currently joined to.
// |socketId| : The socket ID.
// |callback| : Called with an array of strings of the result.
static void getJoinedGroups(long socketId,
GetJoinedGroupsCallback callback);
};
interface Events {
// Event raised when a UDP packet has been received for the given socket.
// |info| : The event data.
static void onReceive(ReceiveInfo info);
// Event raised when a network error occured while the runtime was waiting
// for data on the socket address and port. Once this event is raised, the
// socket is paused and no more onReceive
events will be raised
// for this socket until the socket is resumed.
// |info| : The event data.
static void onReceiveError(ReceiveErrorInfo info);
};
};