diff --git a/daemon/sdp.c b/daemon/sdp.c index a8efa1bc1..f1357eca5 100644 --- a/daemon/sdp.c +++ b/daemon/sdp.c @@ -2755,18 +2755,24 @@ error: } int sdp_create(str *out, struct call_monologue *monologue, struct sdp_ng_flags *flags) { + const char *err = NULL; + GString *s = NULL; + + err = "Need at least one media"; if (!monologue->medias.length) - return -1; // need at least one media + goto err; // grab first components struct call_media *media = monologue->medias.head->data; + err = "No media stream"; if (!media->streams.length) - return -1; + goto err; struct packet_stream *first_ps = media->streams.head->data; + err = "No packet stream"; if (!first_ps->selected_sfd) - return -1; + goto err; - GString *s = g_string_new("v=0\r\no=- "); + s = g_string_new("v=0\r\no=- "); // init session params if (!monologue->sdp_session_id) @@ -2783,12 +2789,15 @@ int sdp_create(str *out, struct call_monologue *monologue, struct sdp_ng_flags * for (GList *l = monologue->medias.head; l; l = l->next) { media = l->data; + err = "Zero length media stream"; if (!media->streams.length) goto err; GList *rtp_ps_link = media->streams.head; struct packet_stream *rtp_ps = rtp_ps_link->data; + err = "No selected FD"; if (!rtp_ps->selected_sfd) goto err; + err = "Unknown media protocol"; if (media->protocol) g_string_append_printf(s, "m=" STR_FORMAT " %i %s", STR_FMT(&media->type), @@ -2813,7 +2822,9 @@ int sdp_create(str *out, struct call_monologue *monologue, struct sdp_ng_flags * g_string_free(s, FALSE); return 0; err: - g_string_free(s, TRUE); + if (s) + g_string_free(s, TRUE); + ilog(LOG_ERR, "Failed to create SDP: %s", err); return -1; }