<div>which version of Asterisk do you have ?, Becouse when i change the function to your code, every time that one phone with call-limit the Asterisk crash.</div>
<div>&nbsp;</div>
<div>I have 1.2.0<br><br>&nbsp;</div>
<div><span class="gmail_quote">On 12/3/05, <b class="gmail_sendername">Paradise Dove</b> &lt;<a href="mailto:pardove@gmail.com">pardove@gmail.com</a>&gt; wrote:</span>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">hi,<br>This is the new update_call_counter() which works fine for me:<br><br>/*! \brief&nbsp;&nbsp;update_call_counter: Handle call_limit for SIP users
<br>* Note: This is going to be replaced by app_groupcount<br>* Thought: For realtime, we should propably update storage with inuse<br>counter... */<br>static int update_call_counter(struct sip_pvt *fup, int event)<br>{<br>
&nbsp;&nbsp; char name[256];<br>&nbsp;&nbsp; int *inuse, *call_limit;<br>&nbsp;&nbsp; int outgoing = ast_test_flag(fup, SIP_OUTGOING);<br>&nbsp;&nbsp; struct sip_user *u = NULL;<br>&nbsp;&nbsp; struct sip_peer *p = NULL;<br><br>&nbsp;&nbsp; if (option_debug &gt; 2)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ast_log(LOG_DEBUG, &quot;Updating call counter for %s call\n&quot;,
<br>outgoing ? &quot;outgoing&quot; : &quot;incoming&quot;);<br>&nbsp;&nbsp; /* Test if we need to check call limits, in order to avoid<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;realtime lookups if we do not need it */<br>&nbsp;&nbsp; if (!ast_test_flag(fup, SIP_CALL_LIMIT))
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 0;<br><br>&nbsp;&nbsp; ast_copy_string(name, fup-&gt;username, sizeof(name));<br><br>&nbsp;&nbsp; /* Check the list of users */<br>&nbsp;&nbsp; // paradise dove<br>&nbsp;&nbsp; p = find_peer(name, NULL, 1);<br>&nbsp;&nbsp; if (p) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inuse = &amp;p-&gt;inUse;
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; call_limit = &amp;p-&gt;call_limit;<br>&nbsp;&nbsp; } else if (!u) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* Try to find user */<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; u = find_user(name, 1);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (u) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inuse = &amp;u-&gt;inUse;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; call_limit = &amp;u-&gt;call_limit;
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (option_debug &gt; 1)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ast_log(LOG_DEBUG, &quot;%s is not a local user, no call<br>limit\n&quot;, name);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp; }<br>&nbsp;&nbsp; switch(event) {
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* incoming and outgoing affects the inUse counter */<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case DEC_CALL_LIMIT:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ( *inuse &gt; 0 ) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (*inuse)--;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *inuse = 0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (option_debug &gt; 1 || sipdebug) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ast_log(LOG_DEBUG, &quot;Call %s %s '%s' removed from call<br>limit %d\n&quot;, outgoing ? &quot;to&quot; : &quot;from&quot;, u ? &quot;user&quot;:&quot;peer&quot;
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case INC_CALL_LIMIT:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (*call_limit &gt; 0 ) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (*inuse &gt;= *call_limit) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ast_log(LOG_ERROR, &quot;Call %s %s '%s' rejected due
<br>to usage limit of %d\n&quot;, outgoing ? &quot;to&quot; : &quot;from&quot;, u ? &quot;u<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // paradise dove<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (p)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ASTOBJ_UNREF(p,sip_destroy_peer);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if (u)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ASTOBJ_UNREF(u,sip_destroy_user);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return -1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (*inuse)++;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (option_debug &gt; 1 || sipdebug) {
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ast_log(LOG_DEBUG, &quot;Call %s %s '%s' is %d out of<br>%d\n&quot;, outgoing ? &quot;to&quot; : &quot;from&quot;, u ? &quot;user&quot;:&quot;peer&quot;, name, *in<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; default:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ast_log(LOG_ERROR, &quot;update_call_counter(%s, %d) called<br>with no event!\n&quot;, name, event);<br>&nbsp;&nbsp; }<br>&nbsp;&nbsp; // paradise dove<br>&nbsp;&nbsp; if (p)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ASTOBJ_UNREF(p,sip_destroy_peer);<br>
&nbsp;&nbsp; else if (u)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ASTOBJ_UNREF(u,sip_destroy_user);<br>&nbsp;&nbsp; return 0;<br>}<br><br>Paradise Dove<br><br><br>On 12/2/05, Alvaro Parres &lt;<a href="mailto:aparres@gmail.com">aparres@gmail.com</a>&gt; wrote:<br>&gt; Could you send it patch please.
<br>&gt;<br>&gt;<br>&gt;<br>&gt;<br>&gt; On 11/30/05, Paradise Dove &lt;<a href="mailto:pardove@gmail.com">pardove@gmail.com</a>&gt; wrote:<br>&gt; &gt;<br>&gt; &gt; btw, i've patched this part of code and now its working fine for me.
<br>&gt; &gt; i'm going to upload it.<br>&gt; &gt;<br>&gt; &gt; Paradise Dove<br>&gt; &gt;<br>&gt; &gt; On 11/30/05, Kevin Hanson &lt;<a href="mailto:tuxpert@comcast.net">tuxpert@comcast.net</a>&gt; wrote:<br>&gt; &gt; &gt; Paradise Dove wrote:
<br>&gt; &gt; &gt;<br>&gt; &gt; &gt; &gt;&gt;Yes with version 1.2. I have tried already with call-limit and the<br>&gt; same.<br>&gt; &gt; &gt; &gt;&gt;<br>&gt; &gt; &gt; &gt;&gt;<br>&gt; &gt; &gt; &gt;i agree with you, it seems to be a bug which i've submited before (bug
<br>&gt; &gt; &gt; &gt;#5281) but it's now closed by bug marshals!!!!!<br>&gt; &gt; &gt; &gt;<br>&gt; &gt; &gt; &gt;<br>&gt; &gt; &gt; &gt;<br>&gt; &gt; &gt; It's not closed.&nbsp;&nbsp;It's suspended waiting input from you:<br>&gt; &gt; &gt;
<br>&gt; &gt; &gt; &quot;Closing until the appropriate debug/trace output can be provided.&quot;<br>&gt; &gt; &gt;<br>&gt; &gt; &gt; On 10/30 you said you were still trying to get the debug output.<br>&gt; &gt; &gt;<br>&gt; &gt; &gt; Cheers,
<br>&gt; &gt; &gt; Kevin<br>&gt; &gt; &gt; _______________________________________________<br>&gt; &gt; &gt; --Bandwidth and Colocation provided by <a href="http://Easynews.com">Easynews.com</a> --<br>&gt; &gt; &gt;<br>&gt; &gt; &gt; Asterisk-Users mailing list
<br>&gt; &gt; &gt; To UNSUBSCRIBE or update options visit:<br>&gt; &gt; &gt;<br>&gt; <a href="http://lists.digium.com/mailman/listinfo/asterisk-users">http://lists.digium.com/mailman/listinfo/asterisk-users</a><br>&gt; &gt; &gt;
<br>&gt; &gt; _______________________________________________<br>&gt; &gt; --Bandwidth and Colocation provided by <a href="http://Easynews.com">Easynews.com</a> --<br>&gt; &gt;<br>&gt; &gt; Asterisk-Users mailing list<br>
&gt; &gt; To UNSUBSCRIBE or update options visit:<br>&gt; &gt;<br>&gt; <a href="http://lists.digium.com/mailman/listinfo/asterisk-users">http://lists.digium.com/mailman/listinfo/asterisk-users</a><br>&gt; &gt;<br>&gt;<br>
&gt;<br>&gt; _______________________________________________<br>&gt; --Bandwidth and Colocation provided by <a href="http://Easynews.com">Easynews.com</a> --<br>&gt;<br>&gt; Asterisk-Users mailing list<br>&gt; To UNSUBSCRIBE or update options visit:
<br>&gt;<br>&gt; <a href="http://lists.digium.com/mailman/listinfo/asterisk-users">http://lists.digium.com/mailman/listinfo/asterisk-users</a><br>&gt;<br>&gt;<br>&gt;<br>_______________________________________________<br>
--Bandwidth and Colocation provided by <a href="http://Easynews.com">Easynews.com</a> --<br><br>Asterisk-Users mailing list<br>To UNSUBSCRIBE or update options visit:<br>&nbsp;&nbsp;<a href="http://lists.digium.com/mailman/listinfo/asterisk-users">
http://lists.digium.com/mailman/listinfo/asterisk-users</a><br></blockquote></div><br>