webrtc: explicitly error out in a couple of renegotiation cases
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1664>
This commit is contained in:
parent
318a639e43
commit
e28c45fd05
@ -3047,10 +3047,15 @@ sdp_media_from_transceiver (GstWebRTCBin * webrtc, GstSDPMedia * media,
|
|||||||
|
|
||||||
if (last_media) {
|
if (last_media) {
|
||||||
const char *setup = gst_sdp_media_get_attribute_val (last_media, "setup");
|
const char *setup = gst_sdp_media_get_attribute_val (last_media, "setup");
|
||||||
if (setup)
|
if (setup) {
|
||||||
gst_sdp_media_add_attribute (media, "setup", setup);
|
gst_sdp_media_add_attribute (media, "setup", setup);
|
||||||
else
|
} else {
|
||||||
|
g_set_error (error, GST_WEBRTC_ERROR,
|
||||||
|
GST_WEBRTC_ERROR_INVALID_MODIFICATION,
|
||||||
|
"media %u cannot renegotiate without an existing a=setup line",
|
||||||
|
media_idx);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
/* mandated by JSEP */
|
/* mandated by JSEP */
|
||||||
gst_sdp_media_add_attribute (media, "setup", "actpass");
|
gst_sdp_media_add_attribute (media, "setup", "actpass");
|
||||||
@ -3179,7 +3184,16 @@ sdp_media_from_transceiver (GstWebRTCBin * webrtc, GstSDPMedia * media,
|
|||||||
|
|
||||||
/* Some identifier; we also add the media name to it so it's identifiable */
|
/* Some identifier; we also add the media name to it so it's identifiable */
|
||||||
if (trans->mid) {
|
if (trans->mid) {
|
||||||
|
const char *media_mid = gst_sdp_media_get_attribute_val (media, "mid");
|
||||||
|
if (!media_mid) {
|
||||||
gst_sdp_media_add_attribute (media, "mid", trans->mid);
|
gst_sdp_media_add_attribute (media, "mid", trans->mid);
|
||||||
|
} else if (g_strcmp0 (media_mid, trans->mid) != 0) {
|
||||||
|
g_set_error (error, GST_WEBRTC_ERROR,
|
||||||
|
GST_WEBRTC_ERROR_INVALID_MODIFICATION,
|
||||||
|
"Cannot change media %u mid value from \'%s\' to \'%s\'",
|
||||||
|
media_idx, media_mid, trans->mid);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
mid = g_strdup (trans->mid);
|
mid = g_strdup (trans->mid);
|
||||||
} else {
|
} else {
|
||||||
const GstStructure *s = gst_caps_get_structure (caps, 0);
|
const GstStructure *s = gst_caps_get_structure (caps, 0);
|
||||||
@ -4168,7 +4182,7 @@ _create_answer_task (GstWebRTCBin * webrtc, const GstStructure * options,
|
|||||||
* that we cannot actually support */
|
* that we cannot actually support */
|
||||||
if (trans_caps) {
|
if (trans_caps) {
|
||||||
answer_caps = gst_caps_intersect (offer_caps, trans_caps);
|
answer_caps = gst_caps_intersect (offer_caps, trans_caps);
|
||||||
gst_caps_unref (trans_caps);
|
gst_clear_caps (&trans_caps);
|
||||||
} else {
|
} else {
|
||||||
answer_caps = gst_caps_ref (offer_caps);
|
answer_caps = gst_caps_ref (offer_caps);
|
||||||
}
|
}
|
||||||
@ -4180,8 +4194,8 @@ _create_answer_task (GstWebRTCBin * webrtc, const GstStructure * options,
|
|||||||
|
|
||||||
if (gst_caps_is_empty (answer_caps)) {
|
if (gst_caps_is_empty (answer_caps)) {
|
||||||
GST_WARNING_OBJECT (webrtc, "Could not create caps for media");
|
GST_WARNING_OBJECT (webrtc, "Could not create caps for media");
|
||||||
gst_caps_unref (answer_caps);
|
gst_clear_caps (&answer_caps);
|
||||||
gst_caps_unref (offer_caps);
|
gst_clear_caps (&offer_caps);
|
||||||
goto rejected;
|
goto rejected;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -450,6 +450,13 @@ GQuark gst_webrtc_error_quark (void);
|
|||||||
*
|
*
|
||||||
* Since: 1.20
|
* Since: 1.20
|
||||||
*/
|
*/
|
||||||
|
/**
|
||||||
|
* GST_WEBRTC_ERROR_INVALID_MODIFICATION:
|
||||||
|
*
|
||||||
|
* invalid-modification (part of WebIDL specification)
|
||||||
|
*
|
||||||
|
* Since: 1.22
|
||||||
|
*/
|
||||||
typedef enum /*<underscore_name=gst_webrtc_error>*/
|
typedef enum /*<underscore_name=gst_webrtc_error>*/
|
||||||
{
|
{
|
||||||
GST_WEBRTC_ERROR_DATA_CHANNEL_FAILURE,
|
GST_WEBRTC_ERROR_DATA_CHANNEL_FAILURE,
|
||||||
@ -460,8 +467,8 @@ typedef enum /*<underscore_name=gst_webrtc_error>*/
|
|||||||
GST_WEBRTC_ERROR_HARDWARE_ENCODER_NOT_AVAILABLE,
|
GST_WEBRTC_ERROR_HARDWARE_ENCODER_NOT_AVAILABLE,
|
||||||
GST_WEBRTC_ERROR_ENCODER_ERROR,
|
GST_WEBRTC_ERROR_ENCODER_ERROR,
|
||||||
GST_WEBRTC_ERROR_INVALID_STATE,
|
GST_WEBRTC_ERROR_INVALID_STATE,
|
||||||
GST_WEBRTC_ERROR_INTERNAL_FAILURE
|
GST_WEBRTC_ERROR_INTERNAL_FAILURE,
|
||||||
|
GST_WEBRTC_ERROR_INVALID_MODIFICATION,
|
||||||
} GstWebRTCError;
|
} GstWebRTCError;
|
||||||
|
|
||||||
|
|
||||||
#endif /* __GST_WEBRTC_FWD_H__ */
|
#endif /* __GST_WEBRTC_FWD_H__ */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user