]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-6770 #resolve
authorBrian West <brian@freeswitch.org>
Wed, 27 Aug 2014 18:28:11 +0000 (13:28 -0500)
committerBrian West <brian@freeswitch.org>
Wed, 27 Aug 2014 18:28:15 +0000 (13:28 -0500)
src/mod/endpoints/mod_sofia/sofia.c

index 79339e97812ff2f4528815480d7c5b099438d376..edc15cf69bef0f4b4affc49478bf9122433634b5 100644 (file)
@@ -8265,6 +8265,29 @@ void sofia_handle_sip_i_info(nua_t *nua, sofia_profile_t *profile, nua_handle_t
                                        }
                                }
 
+                       } else if (!strncasecmp(sip->sip_content_type->c_type, "application", 11) &&
+                                          !strcasecmp(sip->sip_content_type->c_subtype, "vnd.nortelnetworks.digits")) {
+                               int tmp;
+                               if ((signal_ptr = switch_stristr("d=", sip->sip_payload->pl_data))) {
+                                       signal_ptr = signal_ptr + 2;
+
+                                       while (*signal_ptr && *signal_ptr == ' ') {
+                                               signal_ptr++;
+                                       }
+
+                                       if (*signal_ptr && (*signal_ptr == '*' || *signal_ptr == '#' || *signal_ptr == 'A' || *signal_ptr == 'B'
+                                                                               || *signal_ptr == 'C' || *signal_ptr == 'D')) {
+                                               dtmf.digit = *signal_ptr;
+                                       } else {
+                                               tmp = atoi(signal_ptr);
+                                               dtmf.digit = switch_rfc2833_to_char(tmp);
+                                       }
+
+                                       dtmf.duration = 100;
+                               } else {
+                                       switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "Bad signal\n");
+                                       goto end;
+                               }
                        } else if (!strncasecmp(sip->sip_content_type->c_type, "application", 11) && !strcasecmp(sip->sip_content_type->c_subtype, "dtmf-relay")) {
                                /* Try and find signal information in the payload */
                                if ((signal_ptr = switch_stristr("Signal=", sip->sip_payload->pl_data))) {