summaryrefslogtreecommitdiff
path: root/channels/chan_pjsip.c
diff options
context:
space:
mode:
authorTorrey Searle <torrey@voxbone.com>2017-06-26 14:52:52 +0200
committerGeorge Joseph <gjoseph@digium.com>2017-08-01 15:41:53 -0600
commit65c560894d0d53167af9c6013c7f93703ebb6722 (patch)
tree9338ffeb939a3b0b3866241d8005dd2d2bd50e45 /channels/chan_pjsip.c
parentb3914df10bbb61494f3023a8a22894e4aeeadf05 (diff)
chan_pjsip: add a new function PJSIP_DTMF_MODE
This function is a replica of SIPDtmfMode, allowing the DTMF mode of a PJSIP call to be modified on a per-call basis ASTERISK-27085 #close Change-Id: I20eef5da3e5d1d3e58b304416bc79683f87e7612
Diffstat (limited to 'channels/chan_pjsip.c')
-rw-r--r--channels/chan_pjsip.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/channels/chan_pjsip.c b/channels/chan_pjsip.c
index 51b5dab5c..ebda6c7ee 100644
--- a/channels/chan_pjsip.c
+++ b/channels/chan_pjsip.c
@@ -1947,7 +1947,7 @@ static int chan_pjsip_digit_begin(struct ast_channel *chan, char digit)
media = channel->session->active_media_state->default_session[AST_MEDIA_TYPE_AUDIO];
- switch (channel->session->endpoint->dtmf) {
+ switch (channel->session->dtmf) {
case AST_SIP_DTMF_RFC_4733:
if (!media || !media->rtp) {
return -1;
@@ -2068,7 +2068,7 @@ static int chan_pjsip_digit_end(struct ast_channel *ast, char digit, unsigned in
media = channel->session->active_media_state->default_session[AST_MEDIA_TYPE_AUDIO];
- switch (channel->session->endpoint->dtmf) {
+ switch (channel->session->dtmf) {
case AST_SIP_DTMF_AUTO_INFO:
{
if (!media || !media->rtp) {
@@ -2893,6 +2893,12 @@ static struct ast_custom_function media_offer_function = {
.write = pjsip_acf_media_offer_write
};
+static struct ast_custom_function dtmf_mode_function = {
+ .name = "PJSIP_DTMF_MODE",
+ .read = pjsip_acf_dtmf_mode_read,
+ .write = pjsip_acf_dtmf_mode_write
+};
+
static struct ast_custom_function session_refresh_function = {
.name = "PJSIP_SEND_SESSION_REFRESH",
.write = pjsip_acf_session_refresh_write,
@@ -2937,6 +2943,11 @@ static int load_module(void)
goto end;
}
+ if (ast_custom_function_register(&dtmf_mode_function)) {
+ ast_log(LOG_WARNING, "Unable to register PJSIP_DTMF_MODE dialplan function\n");
+ goto end;
+ }
+
if (ast_custom_function_register(&session_refresh_function)) {
ast_log(LOG_WARNING, "Unable to register PJSIP_SEND_SESSION_REFRESH dialplan function\n");
goto end;
@@ -2996,6 +3007,7 @@ static int load_module(void)
end:
ao2_cleanup(pjsip_uids_onhold);
pjsip_uids_onhold = NULL;
+ ast_custom_function_unregister(&dtmf_mode_function);
ast_custom_function_unregister(&media_offer_function);
ast_custom_function_unregister(&chan_pjsip_dial_contacts_function);
ast_custom_function_unregister(&session_refresh_function);
@@ -3018,6 +3030,7 @@ static int unload_module(void)
ast_sip_session_unregister_supplement(&chan_pjsip_ack_supplement);
ast_sip_session_unregister_supplement(&call_pickup_supplement);
+ ast_custom_function_unregister(&dtmf_mode_function);
ast_custom_function_unregister(&media_offer_function);
ast_custom_function_unregister(&chan_pjsip_dial_contacts_function);
ast_custom_function_unregister(&session_refresh_function);