|
|
|
|
@ -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:
|
|
|
|
|
if (s)
|
|
|
|
|
g_string_free(s, TRUE);
|
|
|
|
|
ilog(LOG_ERR, "Failed to create SDP: %s", err);
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|