Fork me on GitHub
sctp.h
Go to the documentation of this file.
1 
19 #ifndef JANUS_SCTP_H
20 #define JANUS_SCTP_H
21 
22 #ifdef HAVE_SCTP
23 
24 #define INET 1
25 #define INET6 1
26 
27 /* Uncomment the line below to enable SCTP debugging to files */
28 //~ #define DEBUG_SCTP
29 
30 #include <sys/types.h>
31 #include <sys/socket.h>
32 #include <sys/select.h>
33 #include <netinet/in.h>
34 #include <arpa/inet.h>
35 #include <pthread.h>
36 #include <unistd.h>
37 #include <stdint.h>
38 #include <stdarg.h>
39 #include <stdio.h>
40 #include <stdlib.h>
41 #include <string.h>
42 #include <errno.h>
43 #include <usrsctp.h>
44 #include <glib.h>
45 
46 #include "mutex.h"
47 #include "refcount.h"
48 
49 
52 int janus_sctp_init(void);
53 
55 void janus_sctp_deinit(void);
56 
57 
58 #define BUFFER_SIZE (1<<16)
59 #define NUMBER_OF_CHANNELS (150)
60 #define NUMBER_OF_STREAMS (300)
61 
62 #define DATA_CHANNEL_PPID_CONTROL 50
63 #define DATA_CHANNEL_PPID_DOMSTRING 51
64 #define DATA_CHANNEL_PPID_BINARY_PARTIAL 52
65 #define DATA_CHANNEL_PPID_BINARY 53
66 #define DATA_CHANNEL_PPID_DOMSTRING_PARTIAL 54
67 
68 #define DATA_CHANNEL_CLOSED 0
69 #define DATA_CHANNEL_CONNECTING 1
70 #define DATA_CHANNEL_OPEN 2
71 #define DATA_CHANNEL_CLOSING 3
72 
73 #define DATA_CHANNEL_FLAGS_SEND_REQ 0x00000001
74 #define DATA_CHANNEL_FLAGS_SEND_RSP 0x00000002
75 #define DATA_CHANNEL_FLAGS_SEND_ACK 0x00000004
76 
77 struct janus_dtls_srtp;
78 struct janus_ice_handle;
79 
80 typedef struct janus_sctp_channel {
82  uint32_t id;
84  char label[64];
86  char protocol[64];
88  uint32_t pr_value;
90  uint16_t pr_policy;
92  uint16_t stream;
94  uint8_t unordered;
96  uint8_t state;
98  uint32_t flags;
99 } janus_sctp_channel;
100 
101 typedef struct janus_sctp_association {
103  uint32_t map_id;
105  struct janus_dtls_srtp *dtls;
107  struct janus_ice_handle *handle;
109  uint64_t handle_id;
111  struct janus_sctp_channel channels[NUMBER_OF_CHANNELS];
113  struct janus_sctp_channel *stream_channel[NUMBER_OF_STREAMS];
115  uint16_t stream_buffer[NUMBER_OF_STREAMS];
117  uint32_t stream_buffer_counter;
119  struct socket *sock;
121  uint16_t local_port;
123  uint16_t remote_port;
125  char *buffer;
127  size_t buflen;
129  size_t offset;
131  GQueue *pending_messages;
132 #ifdef DEBUG_SCTP
133  FILE *debug_dump;
134 #endif
135 
136  janus_mutex mutex;
138  volatile gint destroyed;
140  janus_refcount ref;
141 } janus_sctp_association;
142 
143 
144 #define DATA_CHANNEL_OPEN_REQUEST 3 /* FIXME was 0, but should be 3 as per http://tools.ietf.org/html/draft-ietf-rtcweb-data-protocol-05 */
145 #define DATA_CHANNEL_OPEN_RESPONSE 1
146 #define DATA_CHANNEL_ACK 2
147 
148 #define DATA_CHANNEL_RELIABLE 0x00
149 #define DATA_CHANNEL_RELIABLE_UNORDERED 0x80
150 #define DATA_CHANNEL_PARTIAL_RELIABLE_REXMIT 0x01
151 #define DATA_CHANNEL_PARTIAL_RELIABLE_REXMIT_UNORDERED 0x81
152 #define DATA_CHANNEL_PARTIAL_RELIABLE_TIMED 0x02
153 #define DATA_CHANNEL_PARTIAL_RELIABLE_TIMED_UNORDERED 0x82
154 
155 /* http://tools.ietf.org/html/draft-ietf-rtcweb-data-protocol-05 */
156 typedef struct janus_datachannel_open_request {
158  uint8_t msg_type;
160  uint8_t channel_type;
162  uint16_t priority;
164  uint32_t reliability_params;
166  uint16_t label_length;
168  uint16_t protocol_length;
170  char label[0];
171  /* The Protocol field will come after the label, if available */
172 } janus_datachannel_open_request;
173 
174 typedef struct janus_datachannel_open_response {
176  uint8_t msg_type;
178  uint8_t error;
180  uint16_t flags;
182  uint16_t reverse_stream;
183 } janus_datachannel_open_response;
184 
185 typedef struct janus_datachannel_ack {
187  uint8_t msg_type;
188 } janus_datachannel_ack;
189 
190 
191 
197 janus_sctp_association *janus_sctp_association_create(struct janus_dtls_srtp *dtls, struct janus_ice_handle *handle, uint16_t udp_port);
198 
201 void janus_sctp_association_destroy(janus_sctp_association *sctp);
202 
207 void janus_sctp_data_from_dtls(janus_sctp_association *sctp, char *buf, int len);
208 
216 void janus_sctp_send_data(janus_sctp_association *sctp, char *label, char *protocol, gboolean textdata, char *buf, int len);
217 
218 #endif
219 
220 #endif
stream
ogg_stream_state * stream
Definition: pp-opus.c:32
janus_refcount
Definition: refcount.h:78
janus_ice_handle
Janus ICE handle.
Definition: ice.h:314
janus_ice_handle::handle_id
guint64 handle_id
Handle identifier, guaranteed to be non-zero.
Definition: ice.h:318
janus_dtls_srtp
Janus DTLS-SRTP handle.
Definition: dtls.h:66
mutex.h
Semaphors, Mutexes and Conditions.
refcount.h
Reference counter mechanism.
janus_mutex
GMutex janus_mutex
Janus mutex implementation.
Definition: mutex.h:61