|
|
|
@ -2115,6 +2115,19 @@ int monologue_offer_answer(struct call_monologue *other_ml, GQueue *streams,
|
|
|
|
|
|
|
|
|
|
|
|
ml_media = other_ml_media = NULL;
|
|
|
|
ml_media = other_ml_media = NULL;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// reset offer ipv4/ipv6/mixed media stats
|
|
|
|
|
|
|
|
if (flags && flags->opmode == OP_OFFER) {
|
|
|
|
|
|
|
|
statistics_update_ip46_inc_dec(call, CMC_DECREMENT);
|
|
|
|
|
|
|
|
call->is_ipv4_media_offer = 0;
|
|
|
|
|
|
|
|
call->is_ipv6_media_offer = 0;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// reset answer ipv4/ipv6/mixed media stats
|
|
|
|
|
|
|
|
} else if (flags && flags->opmode == OP_ANSWER) {
|
|
|
|
|
|
|
|
statistics_update_ip46_inc_dec(call, CMC_DECREMENT);
|
|
|
|
|
|
|
|
call->is_ipv4_media_answer = 0;
|
|
|
|
|
|
|
|
call->is_ipv6_media_answer = 0;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
for (media_iter = streams->head; media_iter; media_iter = media_iter->next) {
|
|
|
|
for (media_iter = streams->head; media_iter; media_iter = media_iter->next) {
|
|
|
|
sp = media_iter->data;
|
|
|
|
sp = media_iter->data;
|
|
|
|
__C_DBG("processing media stream #%u", sp->index);
|
|
|
|
__C_DBG("processing media stream #%u", sp->index);
|
|
|
|
@ -2237,6 +2250,20 @@ int monologue_offer_answer(struct call_monologue *other_ml, GQueue *streams,
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (media->desired_family->af == AF_INET) {
|
|
|
|
|
|
|
|
if (flags && flags->opmode == OP_OFFER) {
|
|
|
|
|
|
|
|
media->call->is_ipv4_media_offer = 1;
|
|
|
|
|
|
|
|
} else if (flags && flags->opmode == OP_ANSWER) {
|
|
|
|
|
|
|
|
media->call->is_ipv4_media_answer = 1;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
} else if (media->desired_family->af == AF_INET6) {
|
|
|
|
|
|
|
|
if (flags && flags->opmode == OP_OFFER) {
|
|
|
|
|
|
|
|
media->call->is_ipv6_media_offer = 1;
|
|
|
|
|
|
|
|
} else if (flags && flags->opmode == OP_ANSWER) {
|
|
|
|
|
|
|
|
media->call->is_ipv6_media_answer = 1;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/* determine number of consecutive ports needed locally.
|
|
|
|
/* determine number of consecutive ports needed locally.
|
|
|
|
* XXX only do *=2 for RTP streams? */
|
|
|
|
* XXX only do *=2 for RTP streams? */
|
|
|
|
num_ports = sp->consecutive_ports;
|
|
|
|
num_ports = sp->consecutive_ports;
|
|
|
|
@ -2314,6 +2341,11 @@ init:
|
|
|
|
t38_gateway_start(media->t38_gateway);
|
|
|
|
t38_gateway_start(media->t38_gateway);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// set ipv4/ipv6/mixed media stats
|
|
|
|
|
|
|
|
if (flags && (flags->opmode == OP_OFFER || flags->opmode == OP_ANSWER)) {
|
|
|
|
|
|
|
|
statistics_update_ip46_inc_dec(call, CMC_INCREMENT);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
|
|
|
|
error_ports:
|
|
|
|
error_ports:
|
|
|
|
@ -2471,6 +2503,7 @@ void call_destroy(struct call *c) {
|
|
|
|
obj_put(c);
|
|
|
|
obj_put(c);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
statistics_update_ip46_inc_dec(c, CMC_DECREMENT);
|
|
|
|
statistics_update_foreignown_dec(c);
|
|
|
|
statistics_update_foreignown_dec(c);
|
|
|
|
|
|
|
|
|
|
|
|
if (IS_OWN_CALL(c)) {
|
|
|
|
if (IS_OWN_CALL(c)) {
|
|
|
|
|