|
|
|
@ -2003,13 +2003,17 @@ static void __rtcp_mux_logic(const struct sdp_ng_flags *flags, struct call_media |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
static void __unverify_fingerprint(struct call_media *m) { |
|
|
|
static void __fingerprint_changed(struct call_media *m) { |
|
|
|
GList *l; |
|
|
|
struct packet_stream *ps; |
|
|
|
|
|
|
|
if (m->fingerprint.hash_func) |
|
|
|
ilog(LOG_INFO, "DTLS fingerprint changed, restarting DTLS"); |
|
|
|
|
|
|
|
for (l = m->streams.head; l; l = l->next) { |
|
|
|
ps = l->data; |
|
|
|
PS_CLEAR(ps, FINGERPRINT_VERIFIED); |
|
|
|
dtls_shutdown(ps); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@ -2164,7 +2168,7 @@ int monologue_offer_answer(struct call_monologue *other_ml, GQueue *streams, |
|
|
|
== MEDIA_FLAG_SETUP_PASSIVE) |
|
|
|
MEDIA_CLEAR(other_media, SETUP_ACTIVE); |
|
|
|
if (memcmp(&other_media->fingerprint, &sp->fingerprint, sizeof(sp->fingerprint))) { |
|
|
|
__unverify_fingerprint(other_media); |
|
|
|
__fingerprint_changed(other_media); |
|
|
|
other_media->fingerprint = sp->fingerprint; |
|
|
|
} |
|
|
|
MEDIA_CLEAR(other_media, DTLS); |
|
|
|
@ -2332,6 +2336,7 @@ void call_destroy(struct call *c) { |
|
|
|
ps = l->data; |
|
|
|
|
|
|
|
unkernelize(ps); |
|
|
|
dtls_shutdown(ps); |
|
|
|
ps->sfd = NULL; |
|
|
|
crypto_cleanup(&ps->crypto); |
|
|
|
|
|
|
|
@ -2465,8 +2470,6 @@ static void __call_free(void *p) { |
|
|
|
|
|
|
|
while (c->streams) { |
|
|
|
ps = c->streams->data; |
|
|
|
if (ps->dtls_cert) |
|
|
|
X509_free(ps->dtls_cert); |
|
|
|
c->streams = g_slist_delete_link(c->streams, c->streams); |
|
|
|
g_slice_free1(sizeof(*ps), ps); |
|
|
|
} |
|
|
|
|