[asterisk-users] ((uint64_t)1 << 35) is zero! was: Prevent Dial if any extension is busy
Leif Neland
leifn at neland.dk
Mon Nov 30 07:58:18 CST 2009
Leif Neland wrote:
>>
> I think a modification should be done around here to return busy if
> just one channel was busy (only enabled if an option on dial is set)
> in asterisk-1.6.0.15/apps/app_dial.c, line 610
>
> Is somebody willing to try?
>
> while (*to && !peer) {
> struct chanlist *o;
> int pos = 0; /* how many channels do we handle */
> int numlines = prestart;
> struct ast_channel *winner;
> struct ast_channel *watchers[AST_MAX_WATCHERS];
>
> watchers[pos++] = in;
> for (o = outgoing; o; o = o->next) {
> /* Keep track of important channels */
> if (ast_test_flag64(o, DIAL_STILLGOING) && o->chan)
> watchers[pos++] = o->chan;
> numlines++;
> }
Adding this here
if (num.busy) {
strcpy(pa->status, "BUSY");
*to = 0;
return NULL;
}
Seems to work
> if (pos == 1) { /* only the input channel is available */
> if (numlines == (num.busy + num.congestion + num.nochan)) {
> ast_verb(2, "Everyone is busy/congested at this time
> (%d:%d/%d/%d)\n", numlines, num.busy, num.congestion, num.nochan);
> if (num.busy)
> strcpy(pa->status, "BUSY");
However, I tried adding an option OPT_SINGLE_BUSY after these:
#define DIAL_STILLGOING (1 << 31)
#define DIAL_NOFORWARDHTML ((uint64_t)1 << 32) /* flags are now 64
bits, so keep it up! */
#define OPT_CANCEL_ELSEWHERE ((uint64_t)1 << 33)
#define OPT_PEER_H ((uint64_t)1 << 34)
#define OPT_SINGLE_BUSY ((uint64_t)1 << 35)
but all these constants have the value zero!
I'm compiling on FreeBSD, asterisk seems to work anyway...
Whats going on?
Leif
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.digium.com/pipermail/asterisk-users/attachments/20091130/ae5cf170/attachment.htm
More information about the asterisk-users
mailing list