Fork me on GitHub
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
janus.h
Go to the documentation of this file.
1 
16 #ifndef _JANUS_GATEWAY_H
17 #define _JANUS_GATEWAY_H
18 
19 #include <inttypes.h>
20 #include <stdlib.h>
21 #include <stdint.h>
22 #include <stdio.h>
23 #include <string.h>
24 #include <ctype.h>
25 #include <unistd.h>
26 
27 #include <jansson.h>
28 #include <microhttpd.h>
29 #ifdef HAVE_WEBSOCKETS
30 #include <libwebsockets.h>
31 #endif
32 #ifdef HAVE_RABBITMQ
33 #include <amqp.h>
34 #include <amqp_framing.h>
35 #include <amqp_tcp_socket.h>
36 #endif
37 
38 #include "mutex.h"
39 #include "dtls.h"
40 #include "ice.h"
41 #include "sctp.h"
42 #include "plugins/plugin.h"
43 
44 
45 #define BUFSIZE 4096
46 
47 
49 typedef struct janus_http_msg {
51  gchar *acrh;
53  gchar *acrm;
55  gchar *contenttype;
57  gchar *payload;
59  size_t len;
61  gint64 session_id;
63 
65 typedef struct janus_http_event {
67  gint code;
69  gchar *payload;
71  gint allocated:1;
74 
75 
77 typedef struct janus_session {
79  guint64 session_id;
81  GHashTable *ice_handles;
83  GAsyncQueue *messages;
85  gint64 last_activity;
87  void *source;
89  gint destroy:1;
91  gint timeout:1;
95 
96 #ifdef HAVE_WEBSOCKETS
97 
98 typedef struct janus_websocket_client {
100  struct libwebsocket_context *context;
102  struct libwebsocket *wsi;
104  GHashTable *sessions;
106  GAsyncQueue *responses;
108  GThreadPool *thread_pool;
110  janus_mutex mutex;
112  gint destroy:1;
113 } janus_websocket_client;
114 
116 typedef struct janus_websocket_request {
118  void *source;
120  void *request;
121 } janus_websocket_request;
122 #endif
123 
124 #ifdef HAVE_RABBITMQ
125 
126 typedef struct janus_rabbitmq_client {
128  GHashTable *sessions;
130  GAsyncQueue *responses;
132  GThread *in_thread, *out_thread;
134  GThreadPool *thread_pool;
136  janus_mutex mutex;
138  gint destroy:1;
139 } janus_rabbitmq_client;
140 
142 typedef struct janus_rabbitmq_request {
144  void *source;
146  void *request;
147 } janus_rabbitmq_request;
148 
150 typedef struct janus_rabbitmq_response {
152  gchar *correlation_id;
154  gchar *payload;
155 } janus_rabbitmq_response;
156 #endif
157 
158 
161 
162 
165 janus_session *janus_session_create(guint64 session_id);
169 janus_session *janus_session_find(guint64 session_id);
173 void janus_session_notify_event(guint64 session_id, janus_http_event *event);
177 janus_session *janus_session_find_destroyed(guint64 session_id);
181 gint janus_session_destroy(guint64 session_id);
184 void janus_session_free(janus_session *session);
186 
187 
194 
195 
196 #define JANUS_SOURCE_PLAIN_HTTP 1
197 
198 #define JANUS_SOURCE_WEBSOCKETS 2
199 
200 #define JANUS_SOURCE_RABBITMQ 3
201 
202 typedef struct janus_request_source {
204  int type;
206  void *source;
208  void *msg;
215 janus_request_source *janus_request_source_new(int type, void *source, void *msg);
225 int janus_process_incoming_request(janus_request_source *source, json_t *request);
231 int janus_process_incoming_admin_request(janus_request_source *source, json_t *request);
236 int janus_process_success(janus_request_source *source, char *payload);
246 int janus_process_error(janus_request_source *source, uint64_t session_id, const char *transaction, gint error, const char *format, ...) G_GNUC_PRINTF(5, 6);
248 
249 
263 
264 
265 int janus_ws_client_connect(void *cls, const struct sockaddr *addr, socklen_t addrlen);
267 int janus_admin_ws_client_connect(void *cls, const struct sockaddr *addr, socklen_t addrlen);
269 int janus_ws_handler(void *cls, struct MHD_Connection *connection, const char *url, const char *method, const char *version, const char *upload_data, size_t *upload_data_size, void **ptr);
271 int janus_admin_ws_handler(void *cls, struct MHD_Connection *connection, const char *url, const char *method, const char *version, const char *upload_data, size_t *upload_data_size, void **ptr);
273 int janus_ws_headers(void *cls, enum MHD_ValueKind kind, const char *key, const char *value);
275 void janus_ws_request_completed (void *cls, struct MHD_Connection *connection, void **con_cls, enum MHD_RequestTerminationCode toe);
284 int janus_ws_notifier(janus_request_source *source, int max_events);
286 
287 #ifdef HAVE_WEBSOCKETS
288 
307 
308 
315 void *janus_wss_thread(void *data);
320 void janus_wss_task(gpointer data, gpointer user_data);
322 #endif
323 
324 
325 #ifdef HAVE_RABBITMQ
326 
350 
351 
355 void *janus_rmq_in_thread(void *data);
366 void *janus_rmq_out_thread(void *data);
371 void janus_rmq_task(gpointer data, gpointer user_data);
373 #endif
374 
375 
384 
385 
389 void janus_plugin_close(void *key, void *value, void *user_data);
394 void janus_pluginso_close(void *key, void *value, void *user_data);
398 janus_plugin *janus_plugin_find(const gchar *package);
400 
402 gchar *janus_get_server_pem(void);
404 gchar *janus_get_server_key(void);
405 
406 
408 gchar *janus_get_local_ip(void);
410 gchar *janus_get_public_ip(void);
412 void janus_set_public_ip(const char *ip);
414 gint janus_is_stopping(void);
415 
416 
417 #endif