From MozillaWiki
< Media‎ | WebRTC‎ | WebRTCE10S
Jump to: navigation, search

Network Proxy Interfaces for WebRTC E10S Split

Address Enumeration

This should be an RPC-style call.

   nsresult EnumerateInterfaces(std::vector<Interface>* interfaces);

Returns a sequence of:

    struct Interface {
      string name;
      PRNetAddr address;
      InterfaceType type;
    enum InterfaceType { Local, Wired, WiFi, Mobile, Virtual };

Socket Management

The following interfaces should be synchronous/RPC-style.

To create a socket:

nsresult SocketCreate(PRNetAddr* requested_address, SocketHandle* handle);

You pass in a PRNetAddr with an IP address but an empty (0) port. On success, the port is filled in, and the handle is valid.

To destroy a socket:

 nsresult SocketDestroy(SocketHandle handle);

This effectively closes it.

Packet Transmisson and Reception

From content to chrome, we do:

 SendTo(SocketHandle handle,
             const void *buf, 
             PRInt32 amount,
             PRIntn flags,
             PRNetAddr remoteAddress);

This call causes a packet to be sent to remoteAddress if (if possible);. These values correspond to those in PR_SendTo ( Note that this is asynchronous so there is no error return.

From chrome to content:

 PacketReceived(SocketHandle handle,
                         const void *buf, 
                         PRInt32 amount,
                         PRNetAddr remoteAddress);

This message indicates that a packet has been received from some remote side. Handle is the socket that the packet came in on. buf and amount contain the packet. remoteAddress is the source address.



This message indicates that something went wrong on the socket in question and it is likely that you will no longer be able to send/receive.