[Pkg-voip-commits] [janus] 54/282: Moved stack to per-user property (but still a single thread and queue)
Jonas Smedegaard
dr at jones.dk
Wed Dec 20 21:53:27 UTC 2017
This is an automated email from the git hooks/post-receive script.
js pushed a commit to annotated tag debian/0.2.6-1
in repository janus.
commit 0de7d73b0231ecd05315a91f25000abe5269823c
Author: Lorenzo Miniero <lminiero at gmail.com>
Date: Tue May 30 13:20:07 2017 +0200
Moved stack to per-user property (but still a single thread and queue)
---
plugins/janus_sipre.c | 70 +++++++++++++++++++++++----------------------------
1 file changed, 32 insertions(+), 38 deletions(-)
diff --git a/plugins/janus_sipre.c b/plugins/janus_sipre.c
index 6353d50..ac6f1e6 100644
--- a/plugins/janus_sipre.c
+++ b/plugins/janus_sipre.c
@@ -213,8 +213,6 @@ static void janus_sipre_message_free(janus_sipre_message *msg) {
/* libre SIP stack */
static volatile int libre_inited = 0;
-static struct sip *sipstack;
-static struct tls *tls = NULL;
GThread *sipstack_thread = NULL;
/* Message queue */
@@ -222,7 +220,6 @@ static struct mqueue *mq = NULL;
void janus_sipre_mqueue_handler(int id, void *data, void *arg);
typedef enum janus_sipre_mqueue_event {
janus_sipre_mqueue_event_do_init,
- janus_sipre_mqueue_event_do_listen,
janus_sipre_mqueue_event_do_register,
janus_sipre_mqueue_event_do_call,
janus_sipre_mqueue_event_do_accept,
@@ -236,8 +233,6 @@ static const char *janus_sipre_mqueue_event_string(janus_sipre_mqueue_event even
switch(event) {
case janus_sipre_mqueue_event_do_init:
return "init";
- case janus_sipre_mqueue_event_do_listen:
- return "listen";
case janus_sipre_mqueue_event_do_register:
return "register";
case janus_sipre_mqueue_event_do_call:
@@ -424,6 +419,8 @@ typedef struct janus_sipre_account {
} janus_sipre_account;
typedef struct janus_sipre_stack {
+ struct sip *sipstack; /* SIP stack */
+ struct tls *tls; /* TLS transport, if needed */
struct sipsess *sess; /* SIP session */
struct sipsess_sock *sess_sock; /* SIP session socket */
struct sipreg *reg; /* SIP registration */
@@ -1063,7 +1060,7 @@ void janus_sipre_create_session(janus_plugin_session *handle, int *error) {
janus_mutex_init(&session->mutex);
handle->plugin_handle = session;
- mqueue_push(mq, janus_sipre_mqueue_event_do_listen, janus_sipre_mqueue_payload_create(session, NULL, 0, NULL));
+ mqueue_push(mq, janus_sipre_mqueue_event_do_init, janus_sipre_mqueue_payload_create(session, NULL, 0, NULL));
janus_mutex_lock(&sessions_mutex);
g_hash_table_insert(sessions, handle, session);
@@ -2910,19 +2907,11 @@ gpointer janus_sipre_stack_thread(gpointer user_data) {
printf("re_thread_init failed: %d (%s)\n", err, strerror(err));
goto done;
}
- err = sip_alloc(&sipstack, NULL, 32, 32, 32, JANUS_SIPRE_NAME, janus_sipre_cb_exit, NULL);
- if(err) {
- JANUS_LOG(LOG_ERR, "Failed to initialize libre SIP stack: %d (%s)\n", err, strerror(err));
- goto done;
- }
err = mqueue_alloc(&mq, janus_sipre_mqueue_handler, NULL);
if(err) {
- mem_deref(sipstack);
JANUS_LOG(LOG_ERR, "Failed to initialize message queue: %d (%s)\n", err, strerror(err));
goto done;
}
- /* We initialize in the loop */
- mqueue_push(mq, janus_sipre_mqueue_event_do_init, NULL);
g_atomic_int_set(&libre_inited, 1);
/* Enter loop */
@@ -3345,9 +3334,13 @@ void janus_sipre_cb_closed(int err, const struct sip_msg *msg, void *arg) {
/* Called when all SIP transactions are completed */
void janus_sipre_cb_exit(void *arg) {
- JANUS_LOG(LOG_INFO, "janus_sipre_cb_exit\n");
- /* Stop libre main loop */
- re_cancel();
+ janus_sipre_session *session = (janus_sipre_session *)arg;
+ if(session == NULL) {
+ JANUS_LOG(LOG_WARN, "[SIPre-??] janus_sipre_cb_exit\n");
+ return;
+ }
+ JANUS_LOG(LOG_WARN, "[SIPre-%s] janus_sipre_cb_exit\n", session->account.username);
+ mem_deref(&session->stack.sipstack);
}
/* Callback to implement SIP requests in the re_main loop thread */
@@ -3355,37 +3348,38 @@ void janus_sipre_mqueue_handler(int id, void *data, void *arg) {
JANUS_LOG(LOG_WARN, "janus_sipre_mqueue_handler: %d (%s)\n", id, janus_sipre_mqueue_event_string((janus_sipre_mqueue_event)id));
switch((janus_sipre_mqueue_event)id) {
case janus_sipre_mqueue_event_do_init: {
+ janus_sipre_mqueue_payload *payload = (janus_sipre_mqueue_payload *)data;
+ janus_sipre_session *session = (janus_sipre_session *)payload->session;
+ /* Let's allocate the stack first */
+ int err = sip_alloc(&session->stack.sipstack, NULL, 32, 32, 32, JANUS_SIPRE_NAME, janus_sipre_cb_exit, session);
+ if(err) {
+ JANUS_LOG(LOG_ERR, "Failed to initialize libre SIP stack: %d (%s)\n", err, strerror(err));
+ g_free(payload);
+ return;
+ }
JANUS_LOG(LOG_INFO, "Initializing SIP transports\n");
struct sa laddr, laddrs;
sa_set_str(&laddr, local_ip, 0);
sa_set_str(&laddrs, local_ip, 0);
- int err = 0;
- err |= sip_transp_add(sipstack, SIP_TRANSP_UDP, &laddr);
- err |= sip_transp_add(sipstack, SIP_TRANSP_TCP, &laddr);
+ err = 0;
+ err |= sip_transp_add(session->stack.sipstack, SIP_TRANSP_UDP, &laddr);
+ err |= sip_transp_add(session->stack.sipstack, SIP_TRANSP_TCP, &laddr);
if(err) {
JANUS_LOG(LOG_ERR, "Failed to initialize libre SIP transports: %d (%s)\n", err, strerror(err));
+ g_free(payload);
return;
}
- err = tls_alloc(&tls, TLS_METHOD_SSLV23, NULL, NULL);
- err |= sip_transp_add(sipstack, SIP_TRANSP_TLS, &laddrs, tls);
+ err = tls_alloc(&session->stack.tls, TLS_METHOD_SSLV23, NULL, NULL);
+ err |= sip_transp_add(session->stack.sipstack, SIP_TRANSP_TLS, &laddrs, session->stack.tls);
+ err |= sipsess_listen(&session->stack.sess_sock, session->stack.sipstack, 32, janus_sipre_cb_incoming, session);
if(err) {
- mem_deref(sipstack);
- mem_deref(tls);
+ mem_deref(session->stack.sipstack);
+ mem_deref(session->stack.tls);
JANUS_LOG(LOG_ERR, "Failed to initialize libre SIPS transports: %d (%s)\n", err, strerror(err));
+ g_free(payload);
return;
}
- mem_deref(tls);
- break;
- }
- case janus_sipre_mqueue_event_do_listen: {
- janus_sipre_mqueue_payload *payload = (janus_sipre_mqueue_payload *)data;
- janus_sipre_session *session = (janus_sipre_session *)payload->session;
- JANUS_LOG(LOG_VERB, "[SIPre-%s] Listening\n", session->account.username);
- int err = sipsess_listen(&session->stack.sess_sock, sipstack, 32, janus_sipre_cb_incoming, session);
- if(err != 0) {
- /* FIXME Anything we should do? */
- JANUS_LOG(LOG_ERR, "Error listening: %d (%s)\n", err, strerror(err));
- }
+ mem_deref(session->stack.tls);
g_free(payload);
break;
}
@@ -3396,7 +3390,7 @@ void janus_sipre_mqueue_handler(int id, void *data, void *arg) {
/* Check if there are custom headers to add */
char *headers = (char *)payload->data;
/* Send the REGISTER */
- int err = sipreg_register(&session->stack.reg, sipstack,
+ int err = sipreg_register(&session->stack.reg, session->stack.sipstack,
session->account.proxy,
session->account.identity, session->account.identity, 3600,
session->account.display_name ? session->account.display_name : session->account.username, NULL, 0, 0,
@@ -3551,7 +3545,7 @@ void janus_sipre_mqueue_handler(int id, void *data, void *arg) {
err = sipsess_reject(session->stack.sess, payload->rcode, janus_sipre_error_reason(payload->rcode), NULL);
session->status = janus_sipre_call_status_idle;
}
- //~ err = sip_treply(NULL, sipstack, payload->msg, payload->rcode, janus_sipre_error_reason(payload->rcode));
+ //~ err = sip_treply(NULL, session->stack.sipstack, payload->msg, payload->rcode, janus_sipre_error_reason(payload->rcode));
}
if(err != 0) {
JANUS_LOG(LOG_ERR, "Error attempting to send the %d error code: %d (%s)\n", payload->rcode, err, strerror(err));
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-voip/janus.git
More information about the Pkg-voip-commits
mailing list