|
|
|
@ -506,33 +506,35 @@ int restore_calls (){
|
|
|
|
|
// se não existir, cria uma call
|
|
|
|
|
if (!get_call_uniqueid_from_a_call_member_uniqueid(channel->uniqueid)){ |
|
|
|
|
bridge = get_bridge(channel->bridgeid); |
|
|
|
|
// se ambos os canais da bridge forem não locais, criar a ligação diretamente
|
|
|
|
|
if (!strstr_n (bridge->bridge_member->name, "Local/") && !strstr_n(bridge->bridge_member->next->name, "Local/")){ |
|
|
|
|
bridge_channel_1 = get_channel(bridge->bridge_member->uniqueid); |
|
|
|
|
bridge_channel_2 = get_channel(bridge->bridge_member->next->uniqueid); |
|
|
|
|
if (bridge_channel_1 && bridge_channel_2) { |
|
|
|
|
// marca os canais conectados
|
|
|
|
|
newstrncpy(&bridge_channel_1->connected_channel_identification_number, bridge_channel_2->identification_number); |
|
|
|
|
newstrncpy(&bridge_channel_2->connected_channel_identification_number, bridge_channel_1->identification_number); |
|
|
|
|
newstrncpy(&bridge_channel_1->connected_channel_uniqueid, bridge_channel_2->uniqueid); |
|
|
|
|
newstrncpy(&bridge_channel_2->connected_channel_uniqueid, bridge_channel_1->uniqueid); |
|
|
|
|
|
|
|
|
|
// o canal com o maior 'priority' é o caller
|
|
|
|
|
if (bridge_channel_1->priority > bridge_channel_2->priority){ |
|
|
|
|
call_uniqueid = new_call_uniqueid(bridge_channel_1); |
|
|
|
|
parse_create_call(call_uniqueid, bridge_channel_1->uniqueid, "Regular"); |
|
|
|
|
parse_update_call(call_uniqueid, NULL, bridge_channel_2->uniqueid); |
|
|
|
|
} else { |
|
|
|
|
call_uniqueid = new_call_uniqueid(bridge_channel_2); |
|
|
|
|
parse_create_call(call_uniqueid, bridge_channel_2->uniqueid, "Regular"); |
|
|
|
|
parse_update_call(call_uniqueid, NULL, bridge_channel_1->uniqueid);
|
|
|
|
|
} |
|
|
|
|
if (bridge){ |
|
|
|
|
// se ambos os canais da bridge forem não locais, criar a ligação diretamente
|
|
|
|
|
if (!strstr_n (bridge->bridge_member->name, "Local/") && !strstr_n(bridge->bridge_member->next->name, "Local/")){ |
|
|
|
|
bridge_channel_1 = get_channel(bridge->bridge_member->uniqueid); |
|
|
|
|
bridge_channel_2 = get_channel(bridge->bridge_member->next->uniqueid); |
|
|
|
|
if (bridge_channel_1 && bridge_channel_2) { |
|
|
|
|
// marca os canais conectados
|
|
|
|
|
newstrncpy(&bridge_channel_1->connected_channel_identification_number, bridge_channel_2->identification_number); |
|
|
|
|
newstrncpy(&bridge_channel_2->connected_channel_identification_number, bridge_channel_1->identification_number); |
|
|
|
|
newstrncpy(&bridge_channel_1->connected_channel_uniqueid, bridge_channel_2->uniqueid); |
|
|
|
|
newstrncpy(&bridge_channel_2->connected_channel_uniqueid, bridge_channel_1->uniqueid); |
|
|
|
|
|
|
|
|
|
// o canal com o maior 'priority' é o caller
|
|
|
|
|
if (bridge_channel_1->priority > bridge_channel_2->priority){ |
|
|
|
|
call_uniqueid = new_call_uniqueid(bridge_channel_1); |
|
|
|
|
parse_create_call(call_uniqueid, bridge_channel_1->uniqueid, "Regular"); |
|
|
|
|
parse_update_call(call_uniqueid, NULL, bridge_channel_2->uniqueid); |
|
|
|
|
} else { |
|
|
|
|
call_uniqueid = new_call_uniqueid(bridge_channel_2); |
|
|
|
|
parse_create_call(call_uniqueid, bridge_channel_2->uniqueid, "Regular"); |
|
|
|
|
parse_update_call(call_uniqueid, NULL, bridge_channel_1->uniqueid);
|
|
|
|
|
} |
|
|
|
|
parse_create_call_member(call_uniqueid, bridge_channel_1->uniqueid, bridge_channel_1->node_up->callerid_number, NULL); |
|
|
|
|
parse_create_call_member(call_uniqueid, bridge_channel_2->uniqueid, bridge_channel_2->node_up->callerid_number, NULL); |
|
|
|
|
} |
|
|
|
|
} else { // senão, iniciar rastreio a partir da ponte
|
|
|
|
|
} |
|
|
|
|
} else { // senão, iniciar rastreio a partir da ponte
|
|
|
|
|
find_call_end_nodes(channel->bridgeid); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
channel = channel->next; |
|
|
|
|