Merge pull request #1035 in FS/freeswitch from ~CRIENZO/freeswitch:fs-9696 to master
* commit '11452979f6da94b515ee9b712a33d9957925a7d8': FS-9696 keep pickup endpoint up if another endpoint in dialstring hangs up and leg_timeout is set on the pickup endpoint
This commit is contained in:
commit
50465dae85
|
@ -432,7 +432,7 @@ static uint8_t check_channel_status(originate_global_t *oglobals, originate_stat
|
||||||
char bug_key[256] = "";
|
char bug_key[256] = "";
|
||||||
int send_ringback = 0;
|
int send_ringback = 0;
|
||||||
uint8_t ring_ready_val = 0;
|
uint8_t ring_ready_val = 0;
|
||||||
int pickups = 0;
|
int pickups_without_timelimit = 0;
|
||||||
|
|
||||||
oglobals->hups = 0;
|
oglobals->hups = 0;
|
||||||
oglobals->idx = IDX_NADA;
|
oglobals->idx = IDX_NADA;
|
||||||
|
@ -499,7 +499,9 @@ static uint8_t check_channel_status(originate_global_t *oglobals, originate_stat
|
||||||
|
|
||||||
|
|
||||||
if (originate_status[i].peer_channel && switch_channel_test_flag(originate_status[i].peer_channel, CF_PICKUP)) {
|
if (originate_status[i].peer_channel && switch_channel_test_flag(originate_status[i].peer_channel, CF_PICKUP)) {
|
||||||
pickups++;
|
if (originate_status[i].per_channel_timelimit_sec == 0) {
|
||||||
|
pickups_without_timelimit++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(originate_status[i].peer_channel && originate_status[i].peer_session)) {
|
if (!(originate_status[i].peer_channel && originate_status[i].peer_session)) {
|
||||||
|
@ -722,7 +724,9 @@ static uint8_t check_channel_status(originate_global_t *oglobals, originate_stat
|
||||||
) {
|
) {
|
||||||
(oglobals->hups)++;
|
(oglobals->hups)++;
|
||||||
if (switch_channel_test_flag(originate_status[i].peer_channel, CF_PICKUP)) {
|
if (switch_channel_test_flag(originate_status[i].peer_channel, CF_PICKUP)) {
|
||||||
pickups--;
|
if (originate_status[i].per_channel_timelimit_sec == 0) {
|
||||||
|
pickups_without_timelimit--;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if ((switch_channel_test_flag(originate_status[i].peer_channel, CF_ANSWERED) ||
|
} else if ((switch_channel_test_flag(originate_status[i].peer_channel, CF_ANSWERED) ||
|
||||||
(oglobals->early_ok && switch_channel_test_flag(originate_status[i].peer_channel, CF_EARLY_MEDIA)) ||
|
(oglobals->early_ok && switch_channel_test_flag(originate_status[i].peer_channel, CF_EARLY_MEDIA)) ||
|
||||||
|
@ -778,7 +782,8 @@ static uint8_t check_channel_status(originate_global_t *oglobals, originate_stat
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (oglobals->hups > 0 && oglobals->hups + pickups == len) {
|
if (oglobals->hups > 0 && oglobals->hups + pickups_without_timelimit == len) {
|
||||||
|
/* only pickup channels with no timelimit remain */
|
||||||
rval = 0;
|
rval = 0;
|
||||||
} else {
|
} else {
|
||||||
rval = 1;
|
rval = 1;
|
||||||
|
@ -786,7 +791,7 @@ static uint8_t check_channel_status(originate_global_t *oglobals, originate_stat
|
||||||
|
|
||||||
end:
|
end:
|
||||||
|
|
||||||
if (rval == 0 && pickups) {
|
if (rval == 0 && pickups_without_timelimit) {
|
||||||
for (i = 0; i < len; i++) {
|
for (i = 0; i < len; i++) {
|
||||||
if (originate_status[i].peer_channel && switch_channel_test_flag(originate_status[i].peer_channel, CF_PICKUP) &&
|
if (originate_status[i].peer_channel && switch_channel_test_flag(originate_status[i].peer_channel, CF_PICKUP) &&
|
||||||
switch_channel_up(originate_status[i].peer_channel)) {
|
switch_channel_up(originate_status[i].peer_channel)) {
|
||||||
|
|
Loading…
Reference in New Issue