[Pkg-voip-commits] [janus] 56/282: Implemented DTMF via SIP INFO

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 c2208aa17c958a845aa0f8bf9359e3f65397a087
Author: Lorenzo Miniero <lminiero at gmail.com>
Date:   Tue May 30 15:04:51 2017 +0200

    Implemented DTMF via SIP INFO
---
 plugins/janus_sipre.c | 39 +++++++++++++++++++++++++++++++++++++--
 1 file changed, 37 insertions(+), 2 deletions(-)

diff --git a/plugins/janus_sipre.c b/plugins/janus_sipre.c
index 14c6e0a..e773dd7 100644
--- a/plugins/janus_sipre.c
+++ b/plugins/janus_sipre.c
@@ -224,6 +224,7 @@ typedef enum janus_sipre_mqueue_event {
 	janus_sipre_mqueue_event_do_call,
 	janus_sipre_mqueue_event_do_accept,
 	janus_sipre_mqueue_event_do_rcode,
+	janus_sipre_mqueue_event_do_sipinfo,
 	janus_sipre_mqueue_event_do_bye,
 	janus_sipre_mqueue_event_do_destroy,
 	/* TODO Add other events here */
@@ -241,8 +242,12 @@ static const char *janus_sipre_mqueue_event_string(janus_sipre_mqueue_event even
 			return "accept";
 		case janus_sipre_mqueue_event_do_rcode:
 			return "rcode";
+		case janus_sipre_mqueue_event_do_sipinfo:
+			return "sipinfo";
 		case janus_sipre_mqueue_event_do_bye:
 			return "bye";
+		case janus_sipre_mqueue_event_do_destroy:
+			return "destroy";
 		case janus_sipre_mqueue_event_do_exit:
 			return "exit";
 		default:
@@ -2244,10 +2249,14 @@ static void *janus_sipre_handler(void *data) {
 			if(duration_ms <= 0 || duration_ms > 5000) {
 				duration_ms = 160; /* default value */
 			}
-
 			char payload[64];
 			g_snprintf(payload, sizeof(payload), "Signal=%s\r\nDuration=%d", digit_text, duration_ms);
-			/* TODO Send "application/dtmf-relay" SIP INFO */
+			/* Send "application/dtmf-relay" SIP INFO */
+			mqueue_push(mq, janus_sipre_mqueue_event_do_sipinfo,
+				janus_sipre_mqueue_payload_create(session, NULL, 0, g_strdup(payload)));
+			/* Notify the result */
+			result = json_object();
+			json_object_set_new(result, "event", json_string("dtmfsent"));
 		} else {
 			JANUS_LOG(LOG_ERR, "Unknown request (%s)\n", request_text);
 			error_code = JANUS_SIPRE_ERROR_INVALID_REQUEST;
@@ -3561,6 +3570,32 @@ void janus_sipre_mqueue_handler(int id, void *data, void *arg) {
 			g_free(payload);
 			break;
 		}
+		case janus_sipre_mqueue_event_do_sipinfo: {
+			janus_sipre_mqueue_payload *payload = (janus_sipre_mqueue_payload *)data;
+			janus_sipre_session *session = (janus_sipre_session *)payload->session;
+			JANUS_LOG(LOG_WARN, "[SIPre-%s] Sending SIP INFO (DTMF): %s\n", session->account.username, (char *)payload->data);
+			/* Convert the SDP into a struct mbuf */
+			struct mbuf *mb = mbuf_alloc(strlen((char *)payload->data)+1);
+			mbuf_printf(mb, "%s", (char *)payload->data);
+			mbuf_set_pos(mb, 0);
+			g_free(payload->data);
+			/* Send the 200 OK */
+			int err = sipsess_info(session->stack.sess, "application/dtmf-relay", mb, NULL, NULL);
+			if(err != 0) {
+				JANUS_LOG(LOG_ERR, "Error attempting to send the SIP INFO: %d (%s)\n", err, strerror(err));
+				/* Tell the browser... */
+				json_t *event = json_object();
+				json_object_set_new(event, "sip", json_string("event"));
+				json_t *result = json_object();
+				json_object_set_new(result, "event", json_string("dtmferror"));
+				json_object_set_new(result, "code", json_integer(err));
+				json_object_set_new(result, "reason", json_string(strerror(err)));
+				json_object_set_new(event, "result", result);
+			}
+			mem_deref(mb);
+			g_free(payload);
+			break;
+		}
 		case janus_sipre_mqueue_event_do_bye: {
 			janus_sipre_mqueue_payload *payload = (janus_sipre_mqueue_payload *)data;
 			janus_sipre_session *session = (janus_sipre_session *)payload->session;

-- 
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