|
|
|
@ -4863,7 +4863,7 @@ static int skinny_dialer_cb(const void *data)
|
|
|
|
|
{
|
|
|
|
|
struct skinny_subchannel *sub = (struct skinny_subchannel *)data;
|
|
|
|
|
SKINNY_DEBUG(DEBUG_SUB, 3, "Sub %u - Dialer called from SCHED %d\n", sub->callid, sub->dialer_sched);
|
|
|
|
|
sub->dialer_sched = 0;
|
|
|
|
|
sub->dialer_sched = -1;
|
|
|
|
|
skinny_dialer(sub, 1);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
@ -4872,7 +4872,7 @@ static int skinny_autoanswer_cb(const void *data)
|
|
|
|
|
{
|
|
|
|
|
struct skinny_subchannel *sub = (struct skinny_subchannel *)data;
|
|
|
|
|
skinny_locksub(sub);
|
|
|
|
|
sub->aa_sched = 0;
|
|
|
|
|
sub->aa_sched = -1;
|
|
|
|
|
setsubstate(sub, SKINNY_CONNECTED);
|
|
|
|
|
skinny_unlocksub(sub);
|
|
|
|
|
return 0;
|
|
|
|
@ -4882,7 +4882,7 @@ static int skinny_cfwd_cb(const void *data)
|
|
|
|
|
{
|
|
|
|
|
struct skinny_subchannel *sub = (struct skinny_subchannel *)data;
|
|
|
|
|
struct skinny_line *l = sub->line;
|
|
|
|
|
sub->cfwd_sched = 0;
|
|
|
|
|
sub->cfwd_sched = -1;
|
|
|
|
|
SKINNY_DEBUG(DEBUG_SUB, 3, "Sub %u - CFWDNOANS to %s.\n", sub->callid, l->call_forward_noanswer);
|
|
|
|
|
ast_channel_call_forward_set(sub->owner, l->call_forward_noanswer);
|
|
|
|
|
ast_queue_control(sub->owner, AST_CONTROL_REDIRECTING);
|
|
|
|
@ -4924,7 +4924,7 @@ static int skinny_call(struct ast_channel *ast, const char *dest, int timeout)
|
|
|
|
|
skinny_locksub(sub);
|
|
|
|
|
AST_LIST_TRAVERSE(ast_channel_varshead(ast), current, entries) {
|
|
|
|
|
if (!(strcmp(ast_var_name(current), "SKINNY_AUTOANSWER"))) {
|
|
|
|
|
if (d->hookstate == SKINNY_ONHOOK && !sub->aa_sched) {
|
|
|
|
|
if (d->hookstate == SKINNY_ONHOOK && sub->aa_sched < 0) {
|
|
|
|
|
char buf[24];
|
|
|
|
|
int aatime;
|
|
|
|
|
char *stringp = buf, *curstr;
|
|
|
|
@ -5389,9 +5389,9 @@ static struct ast_channel *skinny_new(struct skinny_line *l, struct skinny_subli
|
|
|
|
|
sub->xferor = 0;
|
|
|
|
|
sub->related = NULL;
|
|
|
|
|
sub->calldirection = direction;
|
|
|
|
|
sub->aa_sched = 0;
|
|
|
|
|
sub->dialer_sched = 0;
|
|
|
|
|
sub->cfwd_sched = 0;
|
|
|
|
|
sub->aa_sched = -1;
|
|
|
|
|
sub->dialer_sched = -1;
|
|
|
|
|
sub->cfwd_sched = -1;
|
|
|
|
|
sub->dialType = DIALTYPE_NORMAL;
|
|
|
|
|
sub->getforward = 0;
|
|
|
|
|
|
|
|
|
@ -5550,17 +5550,17 @@ static void setsubstate(struct skinny_subchannel *sub, int state)
|
|
|
|
|
|
|
|
|
|
if (sub->dialer_sched) {
|
|
|
|
|
skinny_sched_del(sub->dialer_sched, sub);
|
|
|
|
|
sub->dialer_sched = 0;
|
|
|
|
|
sub->dialer_sched = -1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (state != SUBSTATE_RINGIN && sub->aa_sched) {
|
|
|
|
|
skinny_sched_del(sub->aa_sched, sub);
|
|
|
|
|
sub->aa_sched = 0;
|
|
|
|
|
sub->aa_sched = -1;
|
|
|
|
|
sub->aa_beep = 0;
|
|
|
|
|
sub->aa_mute = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (sub->cfwd_sched) {
|
|
|
|
|
if (sub->cfwd_sched > -1) {
|
|
|
|
|
if (state == SUBSTATE_CONNECTED) {
|
|
|
|
|
if (skinny_sched_del(sub->cfwd_sched, sub)) {
|
|
|
|
|
SKINNY_DEBUG(DEBUG_SUB, 3, "Sub %u - trying to change state from %s to %s, but already forwarded because no answer.\n",
|
|
|
|
@ -5568,7 +5568,7 @@ static void setsubstate(struct skinny_subchannel *sub, int state)
|
|
|
|
|
skinny_unlocksub(sub);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
sub->cfwd_sched = 0;
|
|
|
|
|
sub->cfwd_sched = -1;
|
|
|
|
|
} else if (state == SUBSTATE_ONHOOK) {
|
|
|
|
|
skinny_sched_del(sub->cfwd_sched, sub);
|
|
|
|
|
}
|
|
|
|
@ -6240,7 +6240,7 @@ static int handle_keypad_button_message(struct skinny_req *req, struct skinnyses
|
|
|
|
|
if ((sub->owner && ast_channel_state(sub->owner) < AST_STATE_UP)) {
|
|
|
|
|
if (sub->dialer_sched && !skinny_sched_del(sub->dialer_sched, sub)) {
|
|
|
|
|
SKINNY_DEBUG(DEBUG_SUB, 3, "Sub %u - Got a digit and not timed out, so try dialing\n", sub->callid);
|
|
|
|
|
sub->dialer_sched = 0;
|
|
|
|
|
sub->dialer_sched = -1;
|
|
|
|
|
len = strlen(sub->exten);
|
|
|
|
|
if (len == 0) {
|
|
|
|
|
transmit_stop_tone(d, l->instance, sub->callid);
|
|
|
|
@ -7077,7 +7077,7 @@ static int handle_soft_key_event_message(struct skinny_req *req, struct skinnyse
|
|
|
|
|
d->name, instance, callreference);
|
|
|
|
|
if (sub->dialer_sched && !skinny_sched_del(sub->dialer_sched, sub)) {
|
|
|
|
|
size_t len;
|
|
|
|
|
sub->dialer_sched = 0;
|
|
|
|
|
sub->dialer_sched = -1;
|
|
|
|
|
len = strlen(sub->exten);
|
|
|
|
|
if (len > 0) {
|
|
|
|
|
sub->exten[len-1] = '\0';
|
|
|
|
|