TT#14008 Squashed commit of the following:

closes #1183

commit a74cf4a7f9
Author: Damir Nedžibović <damir.nedzibovic@enreach.com>
Date:   Tue Feb 2 11:06:50 2021 +0100

    Add --dtmf-log-ng-tcp CLI option.

commit a428764d9b
Merge: 2bbfcb27 8abc6b1c
Author: Damir Nedžibović <damir.nedzibovic@enreach.com>
Date:   Tue Feb 2 09:16:26 2021 +0100

    Merge branch 'master' into dtmf_events_over_ng_tcp

commit 2bbfcb2750
Author: Damir Nedžibović <damir.nedzibovic@enreach.com>
Date:   Mon Feb 1 14:28:07 2021 +0100

    Replace hex values with chars.

commit dc1084d122
Merge: 2bce444b 2c7163ea
Author: Damir Nedžibović <damir.nedzibovic@enreach.com>
Date:   Mon Feb 1 13:53:27 2021 +0100

    Merge branch 'dtmf_events_over_ng_tcp' of github.com:enreached/rtpengine into dtmf_events_over_ng_tcp

commit 2bce444b26
Author: Damir Nedžibović <damir.nedzibovic@enreach.com>
Date:   Mon Feb 1 13:28:06 2021 +0100

    Prevent use after free.

commit 5a256fd3ae
Author: Damir Nedžibović <damir.nedzibovic@enreach.com>
Date:   Fri Jan 29 13:30:31 2021 +0100

    Add missing includes.

commit a14f4034b9
Author: Damir Nedžibović <damir.nedzibovic@enreach.com>
Date:   Fri Jan 29 13:27:27 2021 +0100

    Add support for sending DTMF events via protocol NG TCP.

commit b861fe3087
Author: Damir Nedžibović <damir.nedzibovic@enreach.com>
Date:   Thu Jan 28 18:09:10 2021 +0100

    Add missing include.

commit 7bfe08fb08
Author: Damir Nedžibović <damir.nedzibovic@enreach.com>
Date:   Thu Jan 28 18:05:44 2021 +0100

    Implementation of control-ng via TCP.

commit 2c7163eaf3
Merge: fd286813 9165bf1f
Author: Damir Nedžibović <damir.nedzibovic@enreach.com>
Date:   Mon Feb 1 13:49:00 2021 +0100

    Merge branch 'dtmf_events_over_ng_tcp' of github.com:enreached/rtpengine into dtmf_events_over_ng_tcp

commit fd28681350
Author: Richard Fuchs <rfuchs@sipwise.com>
Date:   Fri Jan 29 10:20:02 2021 -0500

    TT#14008 fix AEAD kernel API for < 4.2

    Untested whether it actually works

    closes #1176

    Change-Id: If6398632ac62525a673b844cfb4ce842a8aa0346

commit 0626dcdd96
Author: Richard Fuchs <rfuchs@sipwise.com>
Date:   Fri Jan 29 13:07:25 2021 -0500

    TT#14008 improve log output for stray packets

    Change-Id: Ic4b03928b279aade761de3ba1646b5c27318e6a3

commit 8fcccb77cc
Author: Damir Nedžibović <damir.nedzibovic@enreach.com>
Date:   Mon Feb 1 13:28:06 2021 +0100

    Prevent use after free.

commit f0d90d1831
Author: Damir Nedžibović <damir.nedzibovic@enreach.com>
Date:   Fri Jan 29 13:30:31 2021 +0100

    Add missing includes.

commit 37462b8e4d
Author: Damir Nedžibović <damir.nedzibovic@enreach.com>
Date:   Fri Jan 29 13:27:27 2021 +0100

    Add support for sending DTMF events via protocol NG TCP.

commit 9165bf1f75
Author: Damir Nedžibović <damir.nedzibovic@enreach.com>
Date:   Mon Feb 1 13:28:06 2021 +0100

    Prevent use after free.

commit d616f2941f
Author: Damir Nedžibović <damir.nedzibovic@enreach.com>
Date:   Fri Jan 29 13:30:31 2021 +0100

    Add missing includes.

commit bb063386c6
Author: Damir Nedžibović <damir.nedzibovic@enreach.com>
Date:   Fri Jan 29 13:27:27 2021 +0100

    Add support for sending DTMF events via protocol NG TCP.

commit b28ab07532
Merge: 813a4f1c 6e4373af
Author: Damir Nedžibović <damir.nedzibovic@enreach.com>
Date:   Fri Jan 29 09:21:31 2021 +0100

    Merge branch 'control_ng_tcp' of github.com:enreached/rtpengine into control_ng_tcp

commit 813a4f1caa
Author: Damir Nedžibović <damir.nedzibovic@enreach.com>
Date:   Thu Jan 28 18:09:10 2021 +0100

    Add missing include.

commit 0c87a19c55
Author: Damir Nedžibović <damir.nedzibovic@enreach.com>
Date:   Thu Jan 28 18:05:44 2021 +0100

    Implementation of control-ng via TCP.

commit 6e4373affb
Merge: fbf74bfe 7799f23a
Author: Damir Nedžibović <damir.nedzibovic@enreach.com>
Date:   Fri Jan 29 09:19:46 2021 +0100

    Merge branch 'control_ng_tcp' of github.com:enreached/rtpengine into control_ng_tcp

commit fbf74bfe2d
Author: Richard Fuchs <rfuchs@sipwise.com>
Date:   Wed Jan 27 10:18:14 2021 -0500

    TT#14008 fix possible segfault

    closes #1172

    Change-Id: I94bb52c290c2032073e54528283660f03e694033

commit 1a5bcc0905
Author: Richard Fuchs <rfuchs@sipwise.com>
Date:   Thu Jan 28 14:49:43 2021 -0500

    TT#109251 fix redis restore segfault

    Change-Id: I501a47b065e7b8ff28a3ac157c0ce567f228557f

commit b38b49fd60
Author: Richard Fuchs <rfuchs@sipwise.com>
Date:   Thu Jan 28 13:44:44 2021 -0500

    TT#102450 added tests for Ia9fa96cf

    Change-Id: Ic9728e12a012335c30c5640ac0b5c88e39ad24ed

commit f33877bfe3
Author: Richard Fuchs <rfuchs@sipwise.com>
Date:   Thu Jan 28 13:43:46 2021 -0500

    TT#102450 fix some timestamping issues

    Make sure G.722 rate multiplies is applied in the right places

    Don't trust encoders to return proper timestamps, but instead track them
    explicitly based on frame duration

    Change-Id: Ia9fa96cf662da97159fa170c3a3f37516889e1bd

commit 39a25b954d
Author: Richard Fuchs <rfuchs@sipwise.com>
Date:   Thu Jan 28 14:07:53 2021 -0500

    TT#106101 mem leak fix for 554034eb7e

    Change-Id: I9c410211580d8513a203a29f898970a78175d08b

commit 11d11aed90
Author: Richard Fuchs <rfuchs@sipwise.com>
Date:   Thu Jan 28 13:41:28 2021 -0500

    TT#14008 clean up some tests

    Looks like packet order can be an issue in some cases

    Change-Id: Ib8fb8c553c9d0f2919b24dda1e15e5a23832c619

commit 7799f23aa5
Merge: ba7ee9d6 e191e16c
Author: Damir Nedžibović <damir.nedzibovic@enreach.com>
Date:   Fri Jan 29 09:18:24 2021 +0100

    Merge branch 'master' of https://github.com/sipwise/rtpengine into control_ng_tcp

commit ba7ee9d6b1
Merge: f805d881 ffe187f1
Author: Damir Nedžibović <damir.nedzibovic@enreach.com>
Date:   Thu Jan 28 18:15:58 2021 +0100

    Merge branch 'control_ng_tcp' of github.com:enreached/rtpengine into control_ng_tcp

commit f805d881fa
Author: Damir Nedžibović <damir.nedzibovic@enreach.com>
Date:   Thu Jan 28 18:09:10 2021 +0100

    Add missing include.

commit c548a3ca4b
Author: Damir Nedžibović <damir.nedzibovic@enreach.com>
Date:   Thu Jan 28 18:05:44 2021 +0100

    Implementation of control-ng via TCP.

commit ffe187f116
Author: Damir Nedžibović <damir.nedzibovic@bad-team.net>
Date:   Thu Jan 28 18:05:44 2021 +0100

    Implementation of control-ng via TCP.

Change-Id: I8383fa80bce59aa865009e34caff5263b97ab588
pull/1194/head
Damir Nedžibović 5 years ago committed by Richard Fuchs
parent 8abc6b1ca4
commit 0ae0681b28

@ -1,5 +1,7 @@
#include <errno.h>
#include "dtmf.h"
#include "bencode.h"
#include "control_ng.h"
#include "media_socket.h"
#include "log.h"
#include "call.h"
@ -9,17 +11,57 @@
#include "codec.h"
#include "ssrc.h"
static socket_t dtmf_log_sock;
void dtmf_init(void) {
ilog(LOG_DEBUG, "log dtmf over ng %d", rtpe_config.dtmf_via_ng);
if (rtpe_config.dtmf_udp_ep.port) {
if (connect_socket(&dtmf_log_sock, SOCK_DGRAM, &rtpe_config.dtmf_udp_ep))
ilog(LOG_ERR, "Failed to open/connect DTMF logging socket: %s", strerror(errno));
}
}
static void dtmf_bencode_and_notify(struct media_packet *mp,
struct telephone_event_payload *dtmf, int clockrate)
{
bencode_buffer_t bencbuf;
bencode_item_t *notify, *data, *tags;
str encoded_data;
int ret = bencode_buffer_init(&bencbuf);
assert(ret == 0);
if (!dtmf->end)
return;
if (!clockrate)
clockrate = 8000;
notify = bencode_dictionary(&bencbuf);
bencode_dictionary_add_string(notify, "notify", "onDTMF");
data = bencode_dictionary_add_dictionary(notify, "data");
tags = bencode_dictionary_add_list(data, "tags");
bencode_dictionary_add_string_len(data, "callid", mp->call->callid.s, mp->call->callid.len);
bencode_dictionary_add_string_len(data, "source_tag", mp->media->monologue->tag.s, mp->media->monologue->tag.len);
GList *tag_values = g_hash_table_get_values(mp->call->tags);
for (GList *tag_it = tag_values; tag_it; tag_it = tag_it->next) {
struct call_monologue *ml = tag_it->data;
bencode_list_add_str(tags, &ml->tag);
}
g_list_free(tag_values);
bencode_dictionary_add_string(data, "type", "DTMF");
bencode_dictionary_add_string(data, "source_ip", sockaddr_print_buf(&mp->fsin.address));
bencode_dictionary_add_integer(data, "timestamp", rtpe_now.tv_sec);
bencode_dictionary_add_integer(data, "event", dtmf->event);
bencode_dictionary_add_integer(data, "duration", (ntohs(dtmf->duration) * (1000000 / clockrate)) / 1000);
bencode_dictionary_add_integer(data, "volume", dtmf->volume);
bencode_collapse_str(notify, &encoded_data);
notify_ng_tcp_clients(&encoded_data);
bencode_buffer_free(&bencbuf);
}
static GString *dtmf_json_print(struct media_packet *mp,
struct telephone_event_payload *dtmf, int clockrate)
@ -64,7 +106,7 @@ static GString *dtmf_json_print(struct media_packet *mp,
}
int dtmf_do_logging(void) {
if (_log_facility_dtmf || dtmf_log_sock.family)
if (_log_facility_dtmf || dtmf_log_sock.family || rtpe_config.dtmf_via_ng)
return 1;
return 0;
}
@ -92,6 +134,8 @@ int dtmf_event(struct media_packet *mp, str *payload, int clockrate) {
dtmflog(buf);
if (dtmf_log_sock.family)
send(dtmf_log_sock.fd, buf->str, buf->len, 0);
if (rtpe_config.dtmf_via_ng)
dtmf_bencode_and_notify(mp, dtmf, clockrate);
g_string_free(buf, TRUE);
ret = 1; // END event

@ -431,6 +431,7 @@ static void options(int *argc, char ***argv) {
#ifdef WITH_TRANSCODING
{ "log-facility-dtmf",0, 0, G_OPTION_ARG_STRING, &log_facility_dtmf_s, "Syslog facility to use for logging DTMF", "daemon|local0|...|local7"},
{ "dtmf-log-dest", 0,0, G_OPTION_ARG_STRING, &dtmf_udp_ep, "Destination address for DTMF logging via UDP", "IP46|HOSTNAME:PORT" },
{ "dtmf-log-ng-tcp", 0,0, G_OPTION_ARG_NONE, &rtpe_config.dtmf_via_ng, "DTMF logging via TCP NG protocol", NULL },
#endif
{ "log-format", 0, 0, G_OPTION_ARG_STRING, &log_format, "Log prefix format", "default|parsable"},
{ "xmlrpc-format",'x', 0, G_OPTION_ARG_INT, &rtpe_config.fmt, "XMLRPC timeout request format to use. 0: SEMS DI, 1: call-id only, 2: Kamailio", "INT" },

@ -274,6 +274,11 @@ to the feature enabled by B<--log-facilty-dtmf>, but instead of writing
detected DTMF events to syslog, this sends the JSON payload to the
given address as UDP packets.
=item B<--dtmf-log-ng-tcp>
If B<--listen-tcp-ng> is enabled, this will send DTMF events to all
connected cliens encoded in bencode format.
=item B<--log-srtp-keys>
Write SRTP keys to error log instead of debug log.

@ -96,6 +96,7 @@ struct rtpengine_config {
char *mysql_pass;
char *mysql_query;
endpoint_t dtmf_udp_ep;
int dtmf_via_ng;
enum endpoint_learning endpoint_learning;
int jb_length;
int jb_clock_drift;

Loading…
Cancel
Save