[asterisk-bugs] [JIRA] Closed: (ASTERISK-17750) DTMF transmission does not meet the recommendations of the rfc2833(4733).
Matt Jordan (JIRA)
noreply at issues.asterisk.org
Thu Sep 27 12:00:27 CDT 2012
[ https://issues.asterisk.org/jira/browse/ASTERISK-17750?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Matt Jordan closed ASTERISK-17750.
----------------------------------
Resolution: Duplicate
> DTMF transmission does not meet the recommendations of the rfc2833(4733).
> -------------------------------------------------------------------------
>
> Key: ASTERISK-17750
> URL: https://issues.asterisk.org/jira/browse/ASTERISK-17750
> Project: Asterisk
> Issue Type: Bug
> Components: Core/RTP
> Affects Versions: 1.8.3
> Reporter: Mike Danilenko
> Severity: Minor
> Attachments: issue17750-rtp-seqnum-trunk361279.diff, RTP_RCF2833_end_seqno.patch
>
>
> According to rfc4733:
> {code}
> Network Working Group H. Schulzrinne
> Request for Comments: 4733 Columbia U.
> Obsoletes: 2833 T. Taylor
> Category: Standards Track Nortel
> December 2006
> 2.5.1.6. RTP Sequence Number
> The RTP sequence number MUST be incremented by one in each successive
> RTP packet sent. Incrementing applies to retransmitted as well as
> initial instances of event reports, to permit the receiver to detect
> lost packets for RTP Control Protocol (RTCP) receiver reports.
> {code}
> We can see in res_rtp_asterisk.c
> {code}
> 644: static int ast_rtp_dtmf_end_with_duration(struct ast_rtp_instance *instance, char digit, unsigned int duration)
> ...
> 692: for (i = 0; i < 3; i++) {
> 693: res = rtp_sendto(instance, (void *) rtpheader, hdrlen + 4, 0, &remote_address);
> 694: if (res < 0) {
> 695: ast_log(LOG_ERROR, "RTP Transmission error to %s: %s\n",
> 696: ast_sockaddr_stringify(&remote_address),
> strerror(errno));
> 698: }
> 699: if (rtp_debug_test_addr(&remote_address)) {
> 700: ast_verbose("Sent RTP DTMF packet to %s (type %-2.2d, seq %-6.6u, ts %-6.6u, len %-6.6u)\n",
> 701: ast_sockaddr_stringify(&remote_address),
> 702: rtp->send_payload, rtp->seqno, rtp->lastdigitts, res - hdrlen);
> 703: }
> 704: }
> {code}
> in this function rtp->seqno++ is absent
> In 1.6.2.17.3 version * in file rtp.c:
> {code}
> 3295: int ast_rtp_senddigit_end_with_duration(struct ast_rtp *rtp, char digit, unsigned int duration)
> ...
> 3336: for (i = 0; i < 3; i++) {
> 3337: rtpheader[0] = htonl((2 << 30) | (rtp->send_payload << 16) | (rtp->seqno));
> 3338: res = sendto(rtp->s, (void *) rtpheader, hdrlen + 4, 0, (struct sockaddr *) &rtp->them, sizeof(rtp->them));
> 3339: rtp->seqno++;
> 3340: if (res < 0)
> 3341: ast_log(LOG_ERROR, "RTP Transmission error to %s:%d: %s\n",
> 3342: ast_inet_ntoa(rtp->them.sin_addr),
> 3343: ntohs(rtp->them.sin_port), strerror(errno));
> 3344: if (rtp_debug_test_addr(&rtp->them))
> 3345: ast_verbose("Sent RTP DTMF packet to %s:%u (type %-2.2d, seq %-6.6u, ts %-6.6u, len %-6.6u)\n",
> 3346: ast_inet_ntoa(rtp->them.sin_addr),
> 3347: ntohs(rtp->them.sin_port), rtp->send_payload, rtp->seqno, rtp->lastdigitts, res - hdrlen);
> 3348: }
> {code}
> Some SIP-gateway work incorrectly in this situation. If you are using Dial() with option D(some_number), SIP-gateway taking only the first tone.
> ****** ADDITIONAL INFORMATION ******
> This problem is similar to:
> ASTERISK-12308 (https://issues.asterisk.org/view.php?id=12983)
> and apply to 1.8.3.2, 1.8.4 and may be to all 1.8.x versions
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the asterisk-bugs
mailing list