https://github.com/benzea/gnome-network-displays/issues/20i9cf
parent
2ea26f3ce9
commit
67460f4054
@ -0,0 +1,57 @@
|
|||||||
|
From 6afa893c7f58ad3a511791ae1f55bca5584c3196 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Benjamin Berg <bberg@redhat.com>
|
||||||
|
Date: Fri, 20 Dec 2019 15:00:05 +0100
|
||||||
|
Subject: [PATCH] wfd: Always touch session for incoming packets
|
||||||
|
|
||||||
|
It turns out that some adapters (specifically MS v2 adapters) do not
|
||||||
|
reply with the session ID for the keep-alive packet. In this case the
|
||||||
|
gstreamer RTSP server will not automatically touch the GstRTSPSession
|
||||||
|
and we will run into the session timeout.
|
||||||
|
|
||||||
|
Fix this by simply touching all session for the client, for any received
|
||||||
|
response.
|
||||||
|
|
||||||
|
See: #20
|
||||||
|
---
|
||||||
|
src/wfd/wfd-client.c | 20 ++++++++++++++++++++
|
||||||
|
1 file changed, 20 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/src/wfd/wfd-client.c b/src/wfd/wfd-client.c
|
||||||
|
index 38b385e..258d1d0 100644
|
||||||
|
--- a/src/wfd/wfd-client.c
|
||||||
|
+++ b/src/wfd/wfd-client.c
|
||||||
|
@@ -275,11 +275,31 @@ wfd_client_idle_set_params (gpointer user_data)
|
||||||
|
return G_SOURCE_REMOVE;
|
||||||
|
}
|
||||||
|
|
||||||
|
+GstRTSPFilterResult
|
||||||
|
+wfd_client_touch_session_filter_func (GstRTSPClient *client,
|
||||||
|
+ GstRTSPSession *sess,
|
||||||
|
+ gpointer user_data)
|
||||||
|
+{
|
||||||
|
+ gst_rtsp_session_touch (sess);
|
||||||
|
+
|
||||||
|
+ return GST_RTSP_FILTER_KEEP;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
void
|
||||||
|
wfd_client_handle_response (GstRTSPClient * client, GstRTSPContext *ctx)
|
||||||
|
{
|
||||||
|
WfdClient *self = WFD_CLIENT (client);
|
||||||
|
|
||||||
|
+ /* Some sinks do not reply with the correct session-id. Which causes
|
||||||
|
+ * gst-rtsp-server to not touch the session, triggering a timeout
|
||||||
|
+ * even though the sink actually replied.
|
||||||
|
+ *
|
||||||
|
+ * Work around this by explicitly touching the session (again). And
|
||||||
|
+ * to do that, just touch all of them, which is acceptable as we will
|
||||||
|
+ * only have one.
|
||||||
|
+ */
|
||||||
|
+ gst_rtsp_client_session_filter (client, wfd_client_touch_session_filter_func, NULL);
|
||||||
|
+
|
||||||
|
/* Track the initialization process and possibly trigger the
|
||||||
|
* next state of the connection establishment. */
|
||||||
|
switch (self->init_state)
|
||||||
|
--
|
||||||
|
2.24.1
|
||||||
|
|
Loading…
Reference in new issue