[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