<div><font size="4">Hi </font></div>
<div><font size="4">My hardware PBX run asterisk on vxworks,Because the vxworks not support perl.</font></div>
<div><font size="4">Now I want to add a callback function to my pbx.</font></div>
<div>
<p style="MARGIN: 0in 0in 0pt"><span style="FONT-SIZE: 16pt"><font face="Times New Roman" size="4"></font></span> </p>
<p style="MARGIN: 0in 0in 0pt"><span style="FONT-SIZE: 16pt"><font face="Times New Roman" size="4">now it can store Caller and Called party numbers in queue when Called party is busy </font></span></p>
<p style="MARGIN: 0in 0in 0pt"><span style="FONT-SIZE: 16pt"><font face="Times New Roman" size="4"> </font></span></p>
<p style="MARGIN: 0in 0in 0pt"><span style="FONT-SIZE: 16pt"><font face="Times New Roman" size="4">Then I malloc a new ast_channel to call.It is should use </font></span></p>
<p style="MARGIN: 0in 0in 0pt"><span style="FONT-SIZE: 16pt"><font size="4">ast_get_channel_by_exten_locked() or ast_channel_alloc() ,</font></span></p>
<p style="MARGIN: 0in 0in 0pt"><span style="FONT-SIZE: 16pt"><font size="4">my program as follow,But it isn't work, anyone know how to do this.</font></span></p>
<p style="MARGIN: 0in 0in 0pt"><span style="FONT-SIZE: 16pt">{</span></p><span style="FONT-SIZE: 16pt">
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><font face="Times New Roman"><font size="2"><span style="mso-spacerun: yes"> </span>struct ast_channel *callbk;</font></font></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><font face="Times New Roman"><font size="2"><span style="mso-tab-count: 1"> </span>char *callbk_real_context;</font></font></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><font face="Times New Roman"><font size="2"><span style="mso-tab-count: 1"> </span>char xferto[256],dialstr[265];</font></font></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><font face="Times New Roman"><font size="2"><span style="mso-tab-count: 1"> </span>char *cid_num;</font></font></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><font face="Times New Roman"><font size="2"><span style="mso-tab-count: 1"> </span>char *cid_name;</font></font></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><font face="Times New Roman"><font size="2"><span style="mso-tab-count: 1"> </span>int outstate=0;</font></font></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><font face="Times New Roman"><font size="2"><span style="mso-tab-count: 1"> </span>char *exten = NULL ,*context = NULL;</font></font></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><font face="Times New Roman"><font size="2"><span style="mso-tab-count: 1"> </span></font></font><font face="Times New Roman"><font size="2"> </font></font></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><font face="Times New Roman"><font size="2"><span style="mso-tab-count: 1"> </span><span style="mso-spacerun: yes"> </span>pu = head; //pu is a queue hav dst and src number
</font></font></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><font face="Times New Roman"><font size="2"><span style="mso-tab-count: 2"> </span></font></font></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><font face="Times New Roman"><font size="2"><span style="mso-tab-count: 2"> </span></font></font></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><font face="Times New Roman"><font size="2"><span style="mso-tab-count: 1"> </span><span style="mso-tab-count: 1"> </span>printfl("\n\n\n\n<span style="mso-spacerun: yes">
</span>%s time is over",pu->dst);</font></font></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><font face="Times New Roman"><font size="2"><span style="mso-tab-count: 1"> </span><span style="mso-tab-count: 1"> </span>show_queue(head);</font></font>
</p>
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><font face="Times New Roman"><font size="2"> </font></font></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><font face="Times New Roman"><font size="2"> </font></font></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><font face="Times New Roman"><font size="2"><span style="mso-tab-count: 1"> </span><span style="mso-tab-count: 1"> </span>memset(xferto, 0, sizeof(xferto));
</font></font></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><font face="Times New Roman"><font size="2"><span style="mso-tab-count: 2"> </span></font></font></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><font face="Times New Roman"><font size="2"><span style="mso-tab-count: 1"> </span><span style="mso-tab-count: 1"> </span>//callbk = ast_channel_alloc(0);
</font></font></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><font face="Times New Roman"><font size="2"><span style="mso-tab-count: 1"> </span></font></font></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><font face="Times New Roman"><font size="2"><span style="mso-tab-count: 1"> </span></font></font></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><font face="Times New Roman"><font size="2"><span style="mso-tab-count: 1"> </span><span style="mso-tab-count: 1"> </span>callbk = ast_get_channel_by_exten_locked(pu->dst, context);
</font></font></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><font face="Times New Roman"><font size="2"><span style="mso-tab-count: 2"> </span></font></font></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><font face="Times New Roman"><font size="2"><span style="mso-tab-count: 1"> </span><span style="mso-tab-count: 1"> </span>if (!ast_strlen_zero(callbk->macrocontext))
</font></font></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><font face="Times New Roman"><font size="2"><span style="mso-tab-count: 2"> </span><span style="mso-tab-count: 1"> </span>callbk_real_context = callbk->macrocontext;
</font></font></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><font face="Times New Roman"><font size="2"><span style="mso-tab-count: 1"> </span><span style="mso-tab-count: 1"> </span>else</font></font></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><font face="Times New Roman"><font size="2"><span style="mso-tab-count: 2"> </span><span style="mso-tab-count: 1"> </span>callbk_real_context = callbk->context;
</font></font></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><font face="Times New Roman"><font size="2"><span style="mso-tab-count: 1"> </span></font></font></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><font face="Times New Roman"><font size="2"><span style="mso-tab-count: 2"> </span></font></font></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><font face="Times New Roman"><font size="2"><span style="mso-tab-count: 1"> </span><span style="mso-tab-count: 1"> </span>ast_copy_string(xferto,pu->dst,sizeof(xferto));
</font></font></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><font face="Times New Roman"><font size="2"><span style="mso-tab-count: 1"> </span><span style="mso-tab-count: 1"> </span>cid_num = callbk->cid.cid_num
;</font></font></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><font face="Times New Roman"><font size="2"><span style="mso-tab-count: 1"> </span><span style="mso-tab-count: 1"> </span>cid_name = callbk->cid.cid_name
;</font></font></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><font face="Times New Roman"><font size="2"><span style="mso-tab-count: 1"> </span></font></font></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><font face="Times New Roman"><font size="2"><span style="mso-tab-count: 1"> </span><span style="mso-tab-count: 1"> </span>if (ast_exists_extension(callbk, callbk_real_context,xferto, 1, cid_num)) {
</font></font></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><font face="Times New Roman"><font size="2"><span style="mso-tab-count: 2"> </span><span style="mso-tab-count: 1"> </span>snprintf(dialstr, sizeof(dialstr), "%s@%s/n", xferto, callbk_real_context);
</font></font></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><font face="Times New Roman"><font size="2"><span style="mso-tab-count: 2"> </span><span style="mso-tab-count: 1"> </span>}</font></font>
</p>
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><font face="Times New Roman"><font size="2"><span style="mso-tab-count: 2"> </span><span style="mso-tab-count: 1"> </span></font></font></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><font face="Times New Roman"><font size="2"><span style="mso-tab-count: 1"> </span><span style="mso-tab-count: 1"> </span>callback_request_and_dial(callbk, "Local", ast_best_codec(callbk->nativeformats), dialstr, 15000, &outstate, cid_num, cid_name);
</font></font></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><font face="Times New Roman"><span style="mso-tab-count: 2"> }</span></font></p>
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><font face="Times New Roman"><span style="mso-tab-count: 2"> <font size="2"> static struct ast_channel *callback_request_and_dial(struct ast_channel *caller, const char *type, int format, void *data, int timeout, int *outstate, const char *cid_num, const char *cid_name)
<br>{<br> int cause = 0;<br> struct ast_channel *chan;<br> if ((chan = ast_request(type, format, data, &cause))) {<br> <br> ast_set_callerid(chan, cid_num, cid_name, cid_num);<br> ast_channel_inherit_variables(caller, chan);
<br> printfl("\n\n In if ((chan = ast_request(type, format, data, &cause)))");<br> if (!ast_call(chan, data, timeout)) {<br> dosomething;<br> }</font></span></font></p></span><span style="FONT-SIZE: 16pt">
<font face="Times New Roman"><span style="mso-tab-count: 2"><font size="2"></font></span></font></span></div>
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt"> dosomething;<br> }<br>} </p>
<p class="MsoNormal" style="MARGIN: 0in 0in 0pt"><font face="Times New Roman"> </font></p>
<p style="MARGIN: 0in 0in 0pt"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'; mso-fareast-font-family: ËÎÌå; mso-fareast-language: ZH-CN; mso-ansi-language: EN-US; mso-bidi-language: AR-SA"><span style="mso-tab-count: 1">
</span><span style="mso-tab-count: 1"> </span></span></p>
<p style="MARGIN: 0in 0in 0pt"><span style="FONT-SIZE: 16pt"><font size="4">thinks!</font></span></p>