|
|
|
|
@ -989,12 +989,28 @@ fail:
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void setup_stream_families(struct callstream *cs, struct stream_input *s, int idx) {
|
|
|
|
|
int i;
|
|
|
|
|
|
|
|
|
|
for (i = 0; i < 2; i++) {
|
|
|
|
|
switch (s->direction[i]) {
|
|
|
|
|
case DIR_INTERNAL:
|
|
|
|
|
cs->peers[i ^ idx].desired_family = AF_INET;
|
|
|
|
|
break;
|
|
|
|
|
case DIR_EXTERNAL:
|
|
|
|
|
cs->peers[i ^ idx].desired_family = AF_INET6;
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* caller is responsible for appropriate locking */
|
|
|
|
|
static int setup_peer(struct peer *p, struct stream_input *s, const str *tag) {
|
|
|
|
|
struct streamrelay *a, *b;
|
|
|
|
|
struct callstream *cs;
|
|
|
|
|
struct call *ca;
|
|
|
|
|
int i;
|
|
|
|
|
|
|
|
|
|
cs = p->up;
|
|
|
|
|
ca = cs->call;
|
|
|
|
|
@ -1020,21 +1036,7 @@ static int setup_peer(struct peer *p, struct stream_input *s, const str *tag) {
|
|
|
|
|
b->rtcp = 1;
|
|
|
|
|
p->protocol = s->protocol;
|
|
|
|
|
|
|
|
|
|
for (i = 0; i < 2; i++) {
|
|
|
|
|
switch (s->direction[i]) {
|
|
|
|
|
case DIR_INTERNAL:
|
|
|
|
|
cs->peers[i ^ p->idx].desired_family = AF_INET;
|
|
|
|
|
mylog(LOG_DEBUG, "dir %d/%d/%d is internal, use AF_INET", i, p->idx, i ^ p->idx);
|
|
|
|
|
break;
|
|
|
|
|
case DIR_EXTERNAL:
|
|
|
|
|
cs->peers[i ^ p->idx].desired_family = AF_INET6;
|
|
|
|
|
mylog(LOG_DEBUG, "dir %d/%d/%d is external, use AF_INET6", i, p->idx, i ^ p->idx);
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
mylog(LOG_DEBUG, "dir %d unknown (%d)", i, s->direction[i]);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
setup_stream_families(cs, s, p->idx);
|
|
|
|
|
|
|
|
|
|
call_str_cpy(ca, &p->tag, tag);
|
|
|
|
|
p->filled = 1;
|
|
|
|
|
@ -1322,6 +1324,7 @@ found:
|
|
|
|
|
steal_peer(&cs->peers[0], &cs_o->peers[1]);
|
|
|
|
|
steal_peer(&cs->peers[1], &cs_o->peers[0]);
|
|
|
|
|
}
|
|
|
|
|
setup_stream_families(cs, t, 0);
|
|
|
|
|
mutex_unlock(&cs_o->lock);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|