[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