[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