mirror of
https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs.git
synced 2024-09-29 15:22:07 +00:00
net/quinn: Allow dropping buffers when buffer size exceeds maximum datagram size
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1613>
This commit is contained in:
parent
e00ebca63f
commit
0bd98e2c34
3 changed files with 35 additions and 5 deletions
|
@ -4099,6 +4099,18 @@
|
|||
"type": "guint64",
|
||||
"writable": true
|
||||
},
|
||||
"drop-buffer-for-datagram": {
|
||||
"blurb": "Drop buffers when using datagram if buffer size > max datagram size",
|
||||
"conditionally-available": false,
|
||||
"construct": false,
|
||||
"construct-only": false,
|
||||
"controllable": false,
|
||||
"default": "false",
|
||||
"mutable": "null",
|
||||
"readable": true,
|
||||
"type": "gboolean",
|
||||
"writable": true
|
||||
},
|
||||
"initial-mtu": {
|
||||
"blurb": "Initial value to be used as the maximum UDP payload size",
|
||||
"conditionally-available": false,
|
||||
|
|
|
@ -20,6 +20,7 @@ pub(crate) static DEFAULT_MAX_UPPER_BOUND_MTU: u16 = 65527;
|
|||
pub(crate) static DEFAULT_UDP_PAYLOAD_SIZE: u16 = 1452;
|
||||
pub(crate) static DEFAULT_MIN_UDP_PAYLOAD_SIZE: u16 = 1200;
|
||||
pub(crate) static DEFAULT_MAX_UDP_PAYLOAD_SIZE: u16 = 65527;
|
||||
pub(crate) static DEFAULT_DROP_BUFFER_FOR_DATAGRAM: bool = false;
|
||||
|
||||
/*
|
||||
* For QUIC transport parameters
|
||||
|
|
|
@ -59,6 +59,7 @@ struct Settings {
|
|||
certificate_file: Option<PathBuf>,
|
||||
private_key_file: Option<PathBuf>,
|
||||
transport_config: QuinnQuicTransportConfig,
|
||||
drop_buffer_for_datagram: bool,
|
||||
}
|
||||
|
||||
impl Default for Settings {
|
||||
|
@ -78,6 +79,7 @@ impl Default for Settings {
|
|||
certificate_file: None,
|
||||
private_key_file: None,
|
||||
transport_config: QuinnQuicTransportConfig::default(),
|
||||
drop_buffer_for_datagram: DEFAULT_DROP_BUFFER_FOR_DATAGRAM,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -268,7 +270,12 @@ impl ObjectImpl for QuinnQuicSink {
|
|||
.nick("Connection statistics")
|
||||
.blurb("Connection statistics")
|
||||
.read_only()
|
||||
.build()
|
||||
.build(),
|
||||
glib::ParamSpecBoolean::builder("drop-buffer-for-datagram")
|
||||
.nick("Drop buffer for datagram")
|
||||
.blurb("Drop buffers when using datagram if buffer size > max datagram size")
|
||||
.default_value(DEFAULT_DROP_BUFFER_FOR_DATAGRAM)
|
||||
.build(),
|
||||
]
|
||||
});
|
||||
|
||||
|
@ -356,6 +363,9 @@ impl ObjectImpl for QuinnQuicSink {
|
|||
let value = value.get::<u64>().expect("type checked upstream");
|
||||
settings.transport_config.datagram_send_buffer_size = value as usize;
|
||||
}
|
||||
"drop-buffer-for-datagram" => {
|
||||
settings.drop_buffer_for_datagram = value.get().expect("type checked upstream");
|
||||
}
|
||||
_ => unimplemented!(),
|
||||
}
|
||||
}
|
||||
|
@ -414,6 +424,7 @@ impl ObjectImpl for QuinnQuicSink {
|
|||
State::Stopped => get_stats(None).to_value(),
|
||||
}
|
||||
}
|
||||
"drop-buffer-for-datagram" => settings.drop_buffer_for_datagram.to_value(),
|
||||
_ => unimplemented!(),
|
||||
}
|
||||
}
|
||||
|
@ -569,6 +580,7 @@ impl QuinnQuicSink {
|
|||
let settings = self.settings.lock().unwrap();
|
||||
let timeout = settings.timeout;
|
||||
let use_datagram = settings.use_datagram;
|
||||
let drop_buffer_for_datagram = settings.drop_buffer_for_datagram;
|
||||
drop(settings);
|
||||
|
||||
let mut state = self.state.lock().unwrap();
|
||||
|
@ -590,11 +602,16 @@ impl QuinnQuicSink {
|
|||
match conn.max_datagram_size() {
|
||||
Some(size) => {
|
||||
if src.len() > size {
|
||||
if drop_buffer_for_datagram {
|
||||
gst::warning!(CAT, imp: self, "Buffer dropped, current max datagram size: {size} > buffer size: {}", src.len());
|
||||
return Ok(());
|
||||
} else {
|
||||
return Err(Some(gst::error_msg!(
|
||||
gst::ResourceError::Failed,
|
||||
["Sending data failed, current max datagram size: {size}, buffer size: {}", src.len()]
|
||||
)));
|
||||
}
|
||||
}
|
||||
|
||||
match conn.send_datagram(Bytes::copy_from_slice(src)) {
|
||||
Ok(_) => Ok(()),
|
||||
|
|
Loading…
Reference in a new issue