[asterisk-dev] jpeeler: trunk r131868 - /trunk/channels/chan_dahdi.c

Russell Bryant russell at digium.com
Thu Jul 17 21:37:34 CDT 2008


On Jul 17, 2008, at 5:40 PM, SVN commits to the Digium repositories  
wrote:

> Author: jpeeler
> Date: Thu Jul 17 17:40:00 2008
> New Revision: 131868
>
> URL: http://svn.digium.com/view/asterisk?view=rev&rev=131868
> Log:
> Add configuration option to chan_dahdi.conf to allow buffering  
> policy and number of buffers to be configured per channel. Syntax:
>
> buffers=<num of buffers>,<policy>
>
> Where the number of buffers is some non-negative integer and the  
> policy is either "full", "half", or "immediate".
>
> Modified:
>    trunk/channels/chan_dahdi.c

<snip>

> @@ -13784,6 +13789,19 @@
>  			iscrv = !strcasecmp(v->name, "crv");
>  			if (build_channels(confp, iscrv, v->value, reload, v->lineno,  
> &found_pseudo))
>  					return -1;
> +		} else if (!strcasecmp(v->name, "buffers")) {
> +			char policy[8];
> +			tempstr = v->value;
> +			sscanf(tempstr, "%d,%s", &confp->chan.buf_no, policy);
> +			if (confp->chan.buf_no < 0)
> +				confp->chan.buf_no = numbufs;
> +			if (!strcasecmp(policy, "full")) {
> +				confp->chan.buf_policy = DAHDI_POLICY_WHEN_FULL;
> +			} else if (!strcasecmp(policy, "half")) {
> +				confp->chan.buf_policy = DAHDI_POLICY_IMMEDIATE /*HALF_FULL*/;
> +			} else {
> +				confp->chan.buf_policy = DAHDI_POLICY_IMMEDIATE;
> +			}
>  		} else if (!strcasecmp(v->name, "dahdichan")) {
>  			ast_copy_string(dahdichan, v->value, sizeof(dahdichan));
> 		} else if (!strcasecmp(v->name, "usedistinctiveringdetection")) {

I have a few suggestions for this option parsing:

1) I would initialize the policy buffer to "".  If sscanf doesn't  
actually write anything into it, then you're accessing an  
uninitialized buffer with strcasecmp below.

2) You should check the return value from sscanf for bogus input.   
That way, if someone typos the option value, you can write a message  
to the Asterisk logger about it, and also leave the options at their  
default value.

3) When checking the policy string, I would check for "immediate"  
explicitly.  Again, this will allow you to alert the user if they  
typoed the option as "hlaf", instead of "half", for example.

4) Also, why is tempstr needed?  I know it was used in a couple of  
other places, but it seems like a NoOp ...

Thanks,

--
Russell Bryant
Senior Software Engineer
Open Source Team Lead
Digium, Inc.







More information about the asterisk-dev mailing list