[asterisk-dev] Re: file: trunk r42569 - /trunk/main/rtp.c
Tony Mountifield
tony at softins.clara.co.uk
Sat Sep 9 15:27:06 MST 2006
I don't know if it's an intentional change, but starting with the message
to svn.commits shown below, they have been coming through in quoted-
printable encoding rather than normal.
Can it be changed back to what it was previously?
Cheers
Tony
In article <20060909180801.13E5CA9C68D at abita.digium.internal>,
<svn-commits at lists.digium.com> wrote:
> Author: file
> Date: Sat Sep 9 13:07:59 2006
> New Revision: 42569
>
> URL: http://svn.digium.com/view/asterisk?rev=3D42569&view=3Drev
> Log:
> It's another round of RTP updates!
>
> Modified:
> trunk/main/rtp.c
>
> Modified: trunk/main/rtp.c
> URL: http://svn.digium.com/view/asterisk/trunk/main/rtp.c?rev=3D42569&r1=3D=
> 42568&r2=3D42569&view=3Ddiff
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
> =3D=3D=3D
> --- trunk/main/rtp.c (original)
> +++ trunk/main/rtp.c Sat Sep 9 13:07:59 2006
> @@ -137,6 +137,7 @@
> unsigned int lastdigitts;
> char send_digit;
> int send_payload;
> + int send_duration;
> int nat;
> unsigned int flags;
> struct sockaddr_in us; /*!< Socket representation of the local endpoint.=
> */
> @@ -1961,26 +1962,6 @@
> return (unsigned int) ms;
> }
> =
>
> -/* Convert DTMF digit into something usable */
> -static int digit_convert(char digit)
> -{
> - if ((digit <=3D '9') && (digit >=3D '0'))
> - digit -=3D '0';
> - else if (digit =3D=3D '*')
> - digit =3D 10;
> - else if (digit =3D=3D '#')
> - digit =3D 11;
> - else if ((digit >=3D 'A') && (digit <=3D 'D'))
> - digit =3D digit - 'A' + 12;
> - else if ((digit >=3D 'a') && (digit <=3D 'd'))
> - digit =3D digit - 'a' + 12;
> - else {
> - ast_log(LOG_WARNING, "Don't know how to represent '%c'\n",=
> digit);
> - return -1;
> - }
> - return 0;
> -}
> -
> /*! \brief Send begin frames for DTMF */
> int ast_rtp_senddigit_begin(struct ast_rtp *rtp, char digit)
> {
> @@ -1988,8 +1969,20 @@
> int hdrlen =3D 12, res =3D 0, i =3D 0, payload =3D 0;
> char data[256];
> =
>
> - if (digit_convert(digit))
> - return -1;
> + if ((digit <=3D '9') && (digit >=3D '0'))
> + digit -=3D '0';
> + else if (digit =3D=3D '*')
> + digit =3D 10;
> + else if (digit =3D=3D '#')
> + digit =3D 11;
> + else if ((digit >=3D 'A') && (digit <=3D 'D'))
> + digit =3D digit - 'A' + 12;
> + else if ((digit >=3D 'a') && (digit <=3D 'd'))
> + digit =3D digit - 'a' + 12;
> + else {
> + ast_log(LOG_WARNING, "Don't know how to represent '%c'\n", digit);
> + return 0;
> + }
> =
>
> /* If we have no peer, return immediately */ =
>
> if (!rtp->them.sin_addr.s_addr || !rtp->them.sin_port)
> @@ -1998,15 +1991,17 @@
> payload =3D ast_rtp_lookup_code(rtp, 0, AST_RTP_DTMF);
> =
>
> rtp->dtmfmute =3D ast_tvadd(ast_tvnow(), ast_tv(0, 500000));
> + rtp->send_duration =3D 160;
> =
>
> /* Get a pointer to the header */
> rtpheader =3D (unsigned int *)data;
> rtpheader[0] =3D htonl((2 << 30) | (1 << 23) | (payload << 16) | (rtp->se=
> qno));
> rtpheader[1] =3D htonl(rtp->lastdigitts);
> rtpheader[2] =3D htonl(rtp->ssrc); =
>
> - rtpheader[3] =3D htonl((digit << 24) | (0xa << 16) | (0));
> =
>
> for (i =3D 0; i < 2; i++) {
> + rtpheader[3] =3D htonl((digit << 24) | (0xa << 16) | (0));
> + rtpheader[3] |=3D htonl((rtp->send_duration));
> res =3D sendto(rtp->s, (void *) rtpheader, hdrlen + 4, 0, (struct sockad=
> dr *) &rtp->them, sizeof(rtp->them));
> if (res < 0) =
>
> ast_log(LOG_ERROR, "RTP Transmission error to %s:%d: %s\n",
> @@ -2018,6 +2013,8 @@
> ntohs(rtp->them.sin_port), payload, rtp->seqno, rtp->lastdigitts, =
> res - hdrlen);
> /* Increment sequence number */
> rtp->seqno++;
> + /* Increment duration */
> + rtp->send_duration +=3D 160;
> /* Clear marker bit and set seqno */
> rtpheader[0] =3D htonl((2 << 30) | (payload << 16) | (rtp->seqno));
> }
> @@ -2045,6 +2042,7 @@
> rtpheader[1] =3D htonl(rtp->lastdigitts);
> rtpheader[2] =3D htonl(rtp->ssrc);
> rtpheader[3] =3D htonl((rtp->send_digit << 24) | (0xa << 16) | (0)=
> );
> + rtpheader[3] |=3D htonl((rtp->send_duration));
> rtpheader[0] =3D htonl((2 << 30) | (rtp->send_payload << 16) | (rtp->seqn=
> o));
> =
>
> /* Transmit */
> @@ -2060,6 +2058,8 @@
> =
>
> /* Increment sequence number */
> rtp->seqno++;
> + /* Increment duration */
> + rtp->send_duration +=3D 160;
> =
>
> return 0;
> }
> @@ -2075,9 +2075,20 @@
> if (!rtp->them.sin_addr.s_addr || !rtp->them.sin_port)
> return 0;
> =
>
> - /* Convert our digit to the crazy RTP way */
> - if (digit_convert(digit))
> - return -1;
> + if ((digit <=3D '9') && (digit >=3D '0'))
> + digit -=3D '0';
> + else if (digit =3D=3D '*')
> + digit =3D 10;
> + else if (digit =3D=3D '#')
> + digit =3D 11;
> + else if ((digit >=3D 'A') && (digit <=3D 'D'))
> + digit =3D digit - 'A' + 12;
> + else if ((digit >=3D 'a') && (digit <=3D 'd'))
> + digit =3D digit - 'a' + 12;
> + else {
> + ast_log(LOG_WARNING, "Don't know how to represent '%c'\n", digit);
> + return 0;
> + }
> =
>
> rtp->dtmfmute =3D ast_tvadd(ast_tvnow(), ast_tv(0, 500000));
> =
>
> @@ -2087,7 +2098,7 @@
> rtpheader[2] =3D htonl(rtp->ssrc);
> rtpheader[3] =3D htonl((digit << 24) | (0xa << 16) | (0));
> /* Send duration to 100ms */
> - rtpheader[3] |=3D htonl((800));
> + rtpheader[3] |=3D htonl((rtp->send_duration));
> /* Set end bit */
> rtpheader[3] |=3D htonl((1 << 23));
> rtpheader[0] =3D htonl((2 << 30) | (rtp->send_payload << 16) | (rtp->seqn=
> o));
>
> _______________________________________________
> --Bandwidth and Colocation provided by Easynews.com --
>
> svn-commits mailing list
> To UNSUBSCRIBE or update options visit:
> http://lists.digium.com/mailman/listinfo/svn-commits
>
--
Tony Mountifield
Work: tony at softins.co.uk - http://www.softins.co.uk
Play: tony at mountifield.org - http://tony.mountifield.org
More information about the asterisk-dev
mailing list