gchar *service;
gint backlog;
gint max_threads;
+ gboolean use_client_settings;
GSocket *socket;
#define DEFAULT_SERVICE "8554"
#define DEFAULT_BACKLOG 5
#define DEFAULT_MAX_THREADS 0
+#define DEFAULT_USE_CLIENT_SETTINGS FALSE
/* Define to use the SO_LINGER option so that the server sockets can be resused
* sooner. Disabled for now because it is not very well implemented by various
PROP_SESSION_POOL,
PROP_MOUNT_POINTS,
PROP_MAX_THREADS,
+ PROP_USE_CLIENT_SETTINGS,
PROP_LAST
};
"The maximum amount of threads to use for client connections "
"(0 = only mainloop, -1 = unlimited)", -1, G_MAXINT,
DEFAULT_MAX_THREADS, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ /**
+ * GstRTSPServer::use-client-settings:
+ *
+ * Use client transport settings (destination, port pair and ttl for
+ * multicast. FALSE means that the server settings will be used.
+ */
+ g_object_class_install_property (gobject_class, PROP_USE_CLIENT_SETTINGS,
+ g_param_spec_boolean ("use-client-settings", "Use Client Settings",
+ "Use client settings for ttl, destination and port pair in multicast",
+ DEFAULT_USE_CLIENT_SETTINGS,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
gst_rtsp_server_signals[SIGNAL_CLIENT_CONNECTED] =
g_signal_new ("client-connected", G_TYPE_FROM_CLASS (gobject_class),
priv->session_pool = gst_rtsp_session_pool_new ();
priv->mount_points = gst_rtsp_mount_points_new ();
priv->max_threads = DEFAULT_MAX_THREADS;
+ priv->use_client_settings = DEFAULT_USE_CLIENT_SETTINGS;
g_queue_init (&priv->loops);
}
}
/**
+ * gst_rtsp_server_set_use_client_settings:
+ * @server: a #GstRTSPServer
+ * @use_client_settings: whether to use client settings for multicast
+ *
+ * Use client transport settings (destination, port pair and ttl) for
+ * multicast.
+ * When @use_client_settings is %FALSE, the server settings will be
+ * used.
+ */
+void
+gst_rtsp_server_set_use_client_settings (GstRTSPServer * server,
+ gboolean use_client_settings)
+{
+ GstRTSPServerPrivate *priv;
+
+ g_return_if_fail (GST_IS_RTSP_SERVER (server));
+
+ priv = server->priv;
+
+ GST_RTSP_SERVER_LOCK (server);
+ priv->use_client_settings = use_client_settings;
+ GST_RTSP_SERVER_UNLOCK (server);
+}
+
+/**
+ * gst_rtsp_server_get_use_client_settings:
+ * @server: a #GstRTSPServer
+ *
+ * Check if client transport settings (destination, port pair and ttl) for
+ * multicast will be used.
+ */
+gboolean
+gst_rtsp_server_get_use_client_settings (GstRTSPServer * server)
+{
+ GstRTSPServerPrivate *priv;
+ gboolean res;
+
+ g_return_val_if_fail (GST_IS_RTSP_SERVER (server), FALSE);
+
+ priv = server->priv;
+
+ GST_RTSP_SERVER_LOCK (server);
+ res = priv->use_client_settings;
+ GST_RTSP_SERVER_UNLOCK (server);
+
+ return res;
+}
+
+/**
* gst_rtsp_server_set_tls_certificate:
* @server: a #GstRTSPServer
* @cert: (allow none): a #GTlsCertificate
case PROP_MAX_THREADS:
g_value_set_int (value, gst_rtsp_server_get_max_threads (server));
break;
+ case PROP_USE_CLIENT_SETTINGS:
+ g_value_set_boolean (value,
+ gst_rtsp_server_get_use_client_settings (server));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, propid, pspec);
}
case PROP_MAX_THREADS:
gst_rtsp_server_set_max_threads (server, g_value_get_int (value));
break;
+ case PROP_USE_CLIENT_SETTINGS:
+ gst_rtsp_server_set_use_client_settings (server,
+ g_value_get_boolean (value));
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, propid, pspec);
}
gst_rtsp_client_set_mount_points (client, priv->mount_points);
/* set authentication manager */
gst_rtsp_client_set_auth (client, priv->auth);
+ /* check if client transport settings for multicast are allowed */
+ gst_rtsp_client_set_use_client_settings (client, priv->use_client_settings);
GST_RTSP_SERVER_UNLOCK (server);
return client;