summaryrefslogtreecommitdiffstats
path: root/ppapi/c/dev/ppb_transport_dev.h
blob: 963bd17e2289dde30e5e5f5cd88073ccb3a2faed (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/* 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_ */