analog_p->polarityonanswerdelay = conf->chan.polarityonanswerdelay;
analog_p->answeronpolarityswitch = conf->chan.answeronpolarityswitch;
analog_p->hanguponpolarityswitch = conf->chan.hanguponpolarityswitch;
- analog_p->permcallwaiting = 1;
+ analog_p->permcallwaiting = conf->chan.callwaiting; /* permcallwaiting possibly modified in analog_config_complete */
analog_p->callreturn = conf->chan.callreturn;
analog_p->cancallforward = conf->chan.cancallforward;
analog_p->canpark = conf->chan.canpark;
analog_p->cid_signalling = conf->chan.cid_signalling;
analog_p->stripmsd = conf->chan.stripmsd;
analog_p->cid_start = ANALOG_CID_START_RING;
- tmp->callwaitingcallerid = analog_p->callwaitingcallerid = 1;
+ analog_p->callwaitingcallerid = conf->chan.callwaitingcallerid;
analog_p->usedistinctiveringdetection = conf->chan.usedistinctiveringdetection;
analog_p->ringt = conf->chan.ringt;
analog_p->ringt_base = ringt_base;
break;
}
}
- if (p->owner) {
- if (alloc_sub(p, SUB_CALLWAIT)) {
- p = NULL;
- break;
- }
- }
p->outgoing = 1;
if (analog_lib_handles(p->sig, p->radio, p->oprmode)) {
tmp = analog_request(p->sig_pvt, &callwait, requestor);
static int analog_alloc_sub(struct analog_pvt *p, enum analog_sub x)
{
- p->subs[x].allocd = 1;
- if (p->calls->allocate_sub)
- return p->calls->allocate_sub(p->chan_pvt, x);
+ if (p->calls->allocate_sub) {
+ int res;
+ res = p->calls->allocate_sub(p->chan_pvt, x);
+ if (!res)
+ p->subs[x].allocd = 1;
+ return res;
+ }
return 0;
}