From 1dc44067cd2111440ef384720b98dba536e0369b Mon Sep 17 00:00:00 2001
From: Brian West <brian@freeswitch.org>
Date: Wed, 27 Aug 2014 13:28:11 -0500
Subject: [PATCH] FS-6770 #resolve

---
 src/mod/endpoints/mod_sofia/sofia.c | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/src/mod/endpoints/mod_sofia/sofia.c b/src/mod/endpoints/mod_sofia/sofia.c
index 79339e9781..edc15cf69b 100644
--- a/src/mod/endpoints/mod_sofia/sofia.c
+++ b/src/mod/endpoints/mod_sofia/sofia.c
@@ -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))) {