Hi
My hardware PBX run asterisk on vxworks,Because the vxworks not support
perl.
Now I want to add a callback function to my pbx.



now it can store Caller and Called party numbers in queue when Called party
is busy



Then I malloc a new ast_channel to call.It is should use

ast_get_channel_by_exten_locked() or ast_channel_alloc() ,

my program as follow,But it isn't work, anyone know how to do this.

{

          struct ast_channel *callbk;

           char *callbk_real_context;

           char xferto[256],dialstr[265];

           char *cid_num;

           char *cid_name;

           int outstate=0;

           char *exten = NULL ,*context = NULL;



            pu = head;               //pu is a queue hav dst and src number





                       printfl("\n\n\n\n  %s time is over",pu->dst);

                       show_queue(head);





                       memset(xferto, 0, sizeof(xferto));



                       //callbk = ast_channel_alloc(0);





                       callbk = ast_get_channel_by_exten_locked(pu->dst,
context);



                       if (!ast_strlen_zero(callbk->macrocontext))

                                   callbk_real_context =
callbk->macrocontext;

                       else

                                   callbk_real_context = callbk->context;





                       ast_copy_string(xferto,pu->dst,sizeof(xferto));

                       cid_num = callbk->cid.cid_num;

                       cid_name = callbk->cid.cid_name;



                       if (ast_exists_extension(callbk,
callbk_real_context,xferto, 1, cid_num)) {

                                   snprintf(dialstr, sizeof(dialstr),
"[EMAIL PROTECTED]/n", xferto, callbk_real_context);

                                   }



                       callback_request_and_dial(callbk, "Local",
ast_best_codec(callbk->nativeformats), dialstr, 15000, &outstate, cid_num,
cid_name);

  }

  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)
{
int cause = 0;
struct ast_channel *chan;
if ((chan = ast_request(type, format, data, &cause))) {

 ast_set_callerid(chan, cid_num, cid_name, cid_num);
 ast_channel_inherit_variables(caller, chan);
 printfl("\n\n In if ((chan = ast_request(type, format, data, &cause)))");
 if (!ast_call(chan, data, timeout)) {
  dosomething;
  }

   dosomething;
 }
}





thinks!
_______________________________________________
--Bandwidth and Colocation provided by Easynews.com --

asterisk-users mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/asterisk-users

Reply via email to