In this section:
This document describes how to change the DTMF event number in an incoming SDP.
In this particular instance, an incoming SDP used 116 for the DTMF event instead of the standard 101. The SMM configuration below repairs both the media (m line) and the attributes (a line) to modify 116 to 101.
m=audio 28048 RTP/AVP 18 116
c=IN IP4 41.87.234.68
a=rtpmap:18 G729/8000
a=rtpmap:116 telephone-event/8000
The device that originated the above SDP will still expect to receive telephone-events as RTP event 116. Changing the incoming SDP will cause the SBC to send events on 101, but the receiving device's RTP processor will still expect events to arrive at 116; DTMF digits will not function. This document is both an example of how to use the SMM Raw and Regex options, and is also a reminder that one must consider the actual protocols in order to successfully employ the SMM feature.
Create a new Mesasge Rule Table entry and populate the first Message Rule as shown below. This entry will modify the m line from
m=audio 28048 RTP/AVP 18 116 to
m=audio 28048 RTP/AVP 18 101.
Create a second Message Rule entry in the table. This entry will modify the a line from
a=rtpmap:116 telephone-event/8000 to
a=rtpmap:101 telephone-event/8000
Add the SMM Table to the incoming Signaling Group.
2012-01-22 13:31:58,610] 1420 0001 com.net.ux.sip TRACE (Executive.cpp:58) - Run: Protocol Engine::getting ruleid (19) [2012-01-22 13:31:58,610] 1421 0001 com.net.ux.sip TRACE (Executive.cpp:75) - Run: Processing Message Rule (Change dtmf from 116 to 101) [2012-01-22 13:31:58,610] 1422 0001 com.net.ux.sip TRACE (Executive.cpp:127) - processMessageRule: Processing Message Rule (19) [2012-01-22 13:31:58,610] 1423 0001 com.net.ux.sip TRACE (Executive.cpp:1252) - MatchSipMessageRule: StartLine from configuration (*)From Msg (INVITE sip:3539@10.1.1.74 SIP/2.0) [2012-01-22 13:31:58,610] 1424 0001 com.net.ux.sip DEBUG (RegexRule.h:74) - debugInfo: RegexRule:: RuleType(0), Expression((m\=.*)116) [2012-01-22 13:31:58,610] 1425 0001 com.net.ux.sip DEBUG (ProtocolField.h:93) - debugInfo: FieldElement:: FieldType(1) Source(\1101) [2012-01-22 13:31:58,611] 1426 0001 com.net.ux.sip DEBUG (ProtocolField.h:211) - debugInfo: FieldElementLiteral:: stringLiteral(\1101) [2012-01-22 13:31:58,611] 1427 0001 com.net.ux.sip DEBUG (RuleBase.h:123) - debugInfo: RuleBase:: RuleBaseType(0) Result(1) Description(Change m line) valid(true), Condition Expression(No conditions for this header rule) [2012-01-22 13:31:58,611] 1428 0001 com.net.ux.sip TRACE (Executive.cpp:186) - processMessageRule: Processing Regex rule [2012-01-22 13:31:58,611] 1429 0001 com.net.ux.sip TRACE (Executive.cpp:727) - buildField: Building fields with element count=1 [2012-01-22 13:31:58,611] 1430 0001 com.net.ux.sip TRACE (Executive.cpp:755) - buildField: Building field literal [2012-01-22 13:31:58,611] 1431 0001 com.net.ux.sip TRACE (Executive.cpp:295) - processRegexMessage: RuleRegex replacement=\1101, exp=(m\=.*)116 [2012-01-22 13:31:58,611] 1432 0001 com.net.ux.sip TRACE (Executive.cpp:785) - messageRegex: Executing Message Regex [2012-01-22 13:31:58,612] 1433 0001 com.net.ux.sip WARN (GenericUriListHeader.cpp:41) - encode: encode error hdr:Contact uri-count:0 this:0x61fd58 [2012-01-22 13:31:58,612] 1434 0001 com.net.ux.sip WARN (GenericUriHeader.cpp:69) - encode: Error in Encoding uri:0x0 type:0 this:0x309bb0 [2012-01-22 13:31:58,612] 1435 0001 com.net.ux.sip WARN (GenericUriHeader.cpp:69) - encode: Error in Encoding uri:0x0 type:0 this:0x309c48 [2012-01-22 13:31:58,612] 1436 0001 com.net.ux.sip TRACE (SipMessage.cpp:1312) - getObjectValue: name:(0:Message) value: [2012-01-22 13:31:58,613] 1437 0001 com.net.ux.sip TRACE (SipMessage.cpp:1392) - setObjectValue: name:(0:Message) value:INVITE sip:3539@10.1.1.74 SIP/2.0 Cisco-Guid: 4170650438-384321033-2730718288-2880066070 Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, REFER, NOTIFY, REGISTER Call-ID: 4-1f0@10.1.1.91 Contact: sip:anonymous@10.1.1.91 Content-Length: 177 Content-Type: application/sdp CSeq: 552136960 INVITE From: <sip:anonymous@10.1.1.74>;tag=254b0000 P-Asserted-Identity: <sip:anonymous@10.1.1.74> Privacy: Remote-Party-Id: <sip:anonymous@10.1.1.74>; party=calling; privacy=full To: <sip:3539@10.1.1.74> User-Agent: SHOUT 3.5v70 Via: SIP/2.0/UDP 10.1.1.91 v=0 o=- 0 0 IN IP4 10.1.1.91 s=SIP call via SHOUT c=IN IP4 10.1.1.91 b=CT:1000 t=0 0 m=audio 16392 RTP/AVP 0 101 a=rtpmap:0 PCMU/8000 a=rtpmap:116 telephone-event/8000
[2012-01-22 13:31:58,613] 1438 0001 com.net.ux.sip TRACE (SipMessage.cpp:569) - decodeHeaders: SIP message Header type Unknown [2012-01-22 13:31:58,614] 1439 0001 com.net.ux.sip TRACE (SipMessage.cpp:569) - decodeHeaders: SIP message Header type Allow [2012-01-22 13:31:58,614] 1440 0001 com.net.ux.sip TRACE (SipMessage.cpp:569) - decodeHeaders: SIP message Header type Call-ID [2012-01-22 13:31:58,614] 1441 0001 com.net.ux.sip TRACE (SipMessage.cpp:569) - decodeHeaders: SIP message Header type Contact [2012-01-22 13:31:58,614] 1442 0001 com.net.ux.sip TRACE (SipMessage.cpp:569) - decodeHeaders: SIP message Header type Content-Length [2012-01-22 13:31:58,614] 1443 0001 com.net.ux.sip TRACE (SipMessage.cpp:569) - decodeHeaders: SIP message Header type Content-Type [2012-01-22 13:31:58,614] 1444 0001 com.net.ux.sip TRACE (SipMessage.cpp:569) - decodeHeaders: SIP message Header type CSeq [2012-01-22 13:31:58,614] 1445 0001 com.net.ux.sip TRACE (SipMessage.cpp:569) - decodeHeaders: SIP message Header type From [2012-01-22 13:31:58,614] 1446 0001 com.net.ux.sip TRACE (SipMessage.cpp:569) - decodeHeaders: SIP message Header type P-Asserted-Identity [2012-01-22 13:31:58,614] 1447 0001 com.net.ux.sip TRACE (SipMessage.cpp:569) - decodeHeaders: SIP message Header type Privacy [2012-01-22 13:31:58,614] 1448 0001 com.net.ux.sip TRACE (SipMessage.cpp:569) - decodeHeaders: SIP message Header type Remote-Party-Id [2012-01-22 13:31:58,614] 1449 0001 com.net.ux.sip TRACE (SipMessage.cpp:569) - decodeHeaders: SIP message Header type To [2012-01-22 13:31:58,615] 1450 0001 com.net.ux.sip TRACE (SipMessage.cpp:569) - decodeHeaders: SIP message Header type User-Agent [2012-01-22 13:31:58,615] 1451 0001 com.net.ux.sip TRACE (SipMessage.cpp:569) - decodeHeaders: SIP message Header type Via [2012-01-22 13:31:58,616] 1452 0001 com.net.ux.sip TRACE (Executive.cpp:297) - processRegexMessage: RuleRegex return:(1)n [2012-01-22 13:31:58,616] 1453 0001 com.net.ux.sip DEBUG (RegexRule.h:74) - debugInfo: RegexRule:: RuleType(0), Expression((a\=rtpmap:)116(.*)) [2012-01-22 13:31:58,616] 1454 0001 com.net.ux.sip DEBUG (ProtocolField.h:93) - debugInfo: FieldElement:: FieldType(1) Source(\1101\2) [2012-01-22 13:31:58,616] 1455 0001 com.net.ux.sip DEBUG (ProtocolField.h:211) - debugInfo: FieldElementLiteral:: stringLiteral(\1101\2) [2012-01-22 13:31:58,616] 1456 0001 com.net.ux.sip DEBUG (RuleBase.h:123) - debugInfo: RuleBase:: RuleBaseType(0) Result(1) Description(Change rtpmap) valid(true), Condition Expression(No conditions for this header rule) [2012-01-22 13:31:58,616] 1457 0001 com.net.ux.sip TRACE (Executive.cpp:186) - processMessageRule: Processing Regex rule [2012-01-22 13:31:58,616] 1458 0001 com.net.ux.sip TRACE (Executive.cpp:727) - buildField: Building fields with element count=1 [2012-01-22 13:31:58,616] 1459 0001 com.net.ux.sip TRACE (Executive.cpp:755) - buildField: Building field literal [2012-01-22 13:31:58,617] 1460 0001 com.net.ux.sip TRACE (Executive.cpp:295) - processRegexMessage: RuleRegex replacement=\1101\2, exp=(a\=rtpmap:)116(.*) [2012-01-22 13:31:58,617] 1461 0001 com.net.ux.sip TRACE (Executive.cpp:785) - messageRegex: Executing Message Regex [2012-01-22 13:31:58,617] 1462 0001 com.net.ux.sip TRACE (SipMessage.cpp:1312) - getObjectValue: name:(0:Message) value: [2012-01-22 13:31:58,618] 1463 0001 com.net.ux.sip TRACE (SipMessage.cpp:1392) - setObjectValue: name:(0:Message) value:INVITE sip:3539@10.1.1.74 SIP/2.0 Cisco-Guid: 4170650438-384321033-2730718288-2880066070 Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, REFER, NOTIFY, REGISTER Call-ID: 4-1f0@10.1.1.91 Contact: <sip:anonymous@10.1.1.91> Content-Length: 177 Content-Type: application/sdp CSeq: 552136960 INVITE From: <sip:anonymous@10.1.1.74>;tag=254b0000 P-Asserted-Identity: <sip:anonymous@10.1.1.74> Privacy: Remote-Party-Id: <sip:anonymous@10.1.1.74>;party=calling;privacy=full To: <sip:3539@10.1.1.74> User-Agent: SHOUT 3.5v70 Via: SIP/2.0/UDP 10.1.1.91
v=0 o=- 0 0 IN IP4 10.1.1.91 s=SIP call via SHOUT c=IN IP4 10.1.1.91 b=CT:1000 t=0 0 m=audio 16392 RTP/AVP 0 101 a=rtpmap:0 PCMU/8000 a=rtpmap:101 telephone-event/8000
The SIP Header feature cannot generate a new SIP packet. Only arriving or leaving SIP packets changed via the SIP Header function.
Care must be exercised when modifying incoming SIP packets, especially with respects to the TO, FROM and RURI headers. Modifying tags, IDs or any other items that define the dialogue or transactions, will likely cause calls to not complete.
This configuration note does not detailed a supported configuration as changing the rtpmap on an incoming SDP does not change the sending device's internal rtpmaping.