[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