Fork me on GitHub
Loading...
Searching...
No Matches
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
52int janus_sctp_init(void);
53
55void 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
77struct janus_dtls_srtp;
78struct janus_ice_handle;
79
80typedef struct janus_sctp_channel {
82 uint32_t id;
84 char label[128];
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
101typedef 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
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 */
156typedef 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
174typedef 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
185typedef struct janus_datachannel_ack {
187 uint8_t msg_type;
188} janus_datachannel_ack;
189
190
191
197janus_sctp_association *janus_sctp_association_create(struct janus_dtls_srtp *dtls, struct janus_ice_handle *handle, uint16_t udp_port);
198
201void janus_sctp_association_destroy(janus_sctp_association *sctp);
202
207void janus_sctp_data_from_dtls(janus_sctp_association *sctp, char *buf, int len);
208
216void janus_sctp_send_data(janus_sctp_association *sctp, char *label, char *protocol, gboolean textdata, char *buf, int len);
217
218#endif
219
220#endif
Semaphores, Mutexes and Conditions.
GMutex janus_mutex
Janus mutex implementation.
Definition mutex.h:73
Reference counter mechanism.
Janus DTLS-SRTP handle.
Definition dtls.h:66
Janus ICE handle.
Definition ice.h:354
Definition refcount.h:78