From: Wim Taymans Date: Mon, 26 Nov 2012 11:34:05 +0000 (+0100) Subject: MediaMapping -> MountPoints X-Git-Tag: 1.19.3~495^2~1250 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1d53c46d23a251cd43495b04ab016a2ca6a4a93a;p=platform%2Fupstream%2Fgstreamer.git MediaMapping -> MountPoints Describes better what the object manages. --- diff --git a/docs/README b/docs/README index bbf1343..943382e 100644 --- a/docs/README +++ b/docs/README @@ -94,7 +94,7 @@ can build simple server applications with it. } The server manages two other objects: GstRTSPSessionPool and - GstRTSPMediaMapping. + GstRTSPMountPoints. The GstRTSPSessionPool is an object that keeps track of all the active sessions in the server. A session will usually be kept for each client that performed a @@ -104,13 +104,13 @@ can build simple server applications with it. The default implementation of the session pool is usually sufficient but alternative implementation can be used by the server. - The GstRTSPMediaMapping object is more interesting and needs more configuration + The GstRTSPMountPoints object is more interesting and needs more configuration before the server object is useful. This object manages the mapping from a request URL to a specific stream and its configuration. We explain in the next topic how to configure this object. -* Making url mappings +* Making url mount points Next we need to define what media is attached to a particular URL. What we want to achieve is that when the user asks our server for a specific URL, say /test, @@ -141,19 +141,19 @@ can build simple server applications with it. "( videotestsrc ! x264enc ! rtph264pay pt=96 name=pay0 )"); Now that we have the media factory, we can attach it to a specific url. To do - this we get the default GstRTSPMediaMapping from our server and add the url to - factory mapping to it like this: + this we get the default GstRTSPMountPoints from our server and add the url to + factory mount points to it like this: - GstRTSPMediaMapping *mapping; + GstRTSPMountPoints *mounts; ...create server..create factory.. - /* get the default mapping from the server */ - mapping = gst_rtsp_server_get_media_mapping (server); + /* get the default mount points from the server */ + mounts = gst_rtsp_server_get_mount_points (server); /* attach the video test signal to the "/test" URL */ - gst_rtsp_media_mapping_add_factory (mapping, "/test", factory); - g_object_unref (mapping); + gst_rtsp_mount_points_add_factory (mounts, "/test", factory); + g_object_unref (mounts); When starting the server now and directing an RTP client to the URL (like with vlc, mplayer or gstreamer): @@ -387,7 +387,7 @@ GstRTSPAuth basic authentication. -GstRTSPMediaMapping +GstRTSPMountPoints - Maps a url to a GstRTSPMediaFactory implementation. The default implementation uses a simple hashtable to map a url to a factory. diff --git a/docs/libs/gst-rtsp-server-docs.sgml b/docs/libs/gst-rtsp-server-docs.sgml index 2311bd3..5e02299 100644 --- a/docs/libs/gst-rtsp-server-docs.sgml +++ b/docs/libs/gst-rtsp-server-docs.sgml @@ -17,7 +17,7 @@ - + diff --git a/docs/libs/gst-rtsp-server-sections.txt b/docs/libs/gst-rtsp-server-sections.txt index fa46f30..86dce46 100644 --- a/docs/libs/gst-rtsp-server-sections.txt +++ b/docs/libs/gst-rtsp-server-sections.txt @@ -1,22 +1,22 @@
-rtsp-media-mapping -GstRTSPMediaMapping -GstRTSPMediaMapping -GstRTSPMediaMappingClass -gst_rtsp_media_mapping_new -gst_rtsp_media_mapping_find_factory -gst_rtsp_media_mapping_add_factory -gst_rtsp_media_mapping_remove_factory +rtsp-mount-points +GstRTSPMountPoints +GstRTSPMountPoints +GstRTSPMountPointsClass +gst_rtsp_mount_points_new +gst_rtsp_mount_points_find_factory +gst_rtsp_mount_points_add_factory +gst_rtsp_mount_points_remove_factory -GST_RTSP_MEDIA_MAPPING_CLASS -GST_RTSP_MEDIA_MAPPING_CAST -GST_RTSP_MEDIA_MAPPING_CLASS_CAST -GST_RTSP_MEDIA_MAPPING -GST_IS_RTSP_MEDIA_MAPPING -GST_TYPE_RTSP_MEDIA_MAPPING -gst_rtsp_media_mapping_get_type -GST_IS_RTSP_MEDIA_MAPPING_CLASS -GST_RTSP_MEDIA_MAPPING_GET_CLASS +GST_RTSP_MOUNT_POINTS_CLASS +GST_RTSP_MOUNT_POINTS_CAST +GST_RTSP_MOUNT_POINTS_CLASS_CAST +GST_RTSP_MOUNT_POINTS +GST_IS_RTSP_MOUNT_POINTS +GST_TYPE_RTSP_MOUNT_POINTS +gst_rtsp_mount_points_get_type +GST_IS_RTSP_MOUNT_POINTS_CLASS +GST_RTSP_MOUNT_POINTS_GET_CLASS
@@ -135,8 +135,8 @@ gst_rtsp_server_set_backlog gst_rtsp_server_get_backlog gst_rtsp_server_set_session_pool gst_rtsp_server_get_session_pool -gst_rtsp_server_set_media_mapping -gst_rtsp_server_get_media_mapping +gst_rtsp_server_set_mount_points +gst_rtsp_server_get_mount_points gst_rtsp_server_get_auth gst_rtsp_server_set_auth gst_rtsp_server_transfer_connection @@ -272,8 +272,8 @@ gst_rtsp_client_set_server gst_rtsp_client_get_server gst_rtsp_client_set_session_pool gst_rtsp_client_get_session_pool -gst_rtsp_client_set_media_mapping -gst_rtsp_client_get_media_mapping +gst_rtsp_client_set_mount_points +gst_rtsp_client_get_mount_points gst_rtsp_client_set_use_client_settings gst_rtsp_client_get_use_client_settings gst_rtsp_client_set_auth diff --git a/docs/libs/gst-rtsp-server.types b/docs/libs/gst-rtsp-server.types index 3189f2a..f4476f2e 100644 --- a/docs/libs/gst-rtsp-server.types +++ b/docs/libs/gst-rtsp-server.types @@ -3,8 +3,8 @@ #include gst_rtsp_auth_get_type -#include -gst_rtsp_media_mapping_get_type +#include +gst_rtsp_mount_points_get_type #include gst_rtsp_media_factory_get_type diff --git a/examples/test-auth.c b/examples/test-auth.c index 2375bc0..a505743 100644 --- a/examples/test-auth.c +++ b/examples/test-auth.c @@ -59,7 +59,7 @@ main (int argc, char *argv[]) { GMainLoop *loop; GstRTSPServer *server; - GstRTSPMediaMapping *mapping; + GstRTSPMountPoints *mounts; GstRTSPMediaFactory *factory; GstRTSPAuth *auth; gchar *basic; @@ -71,9 +71,9 @@ main (int argc, char *argv[]) /* create a server instance */ server = gst_rtsp_server_new (); - /* get the mapping for this server, every server has a default mapper object + /* get the mounts for this server, every server has a default mapper object * that be used to map uri mount points to media factories */ - mapping = gst_rtsp_server_get_media_mapping (server); + mounts = gst_rtsp_server_get_mount_points (server); /* make a media factory for a test stream. The default media factory can use @@ -95,7 +95,7 @@ main (int argc, char *argv[]) gst_rtsp_media_factory_set_auth (factory, auth); g_object_unref (auth); /* attach the test factory to the /test url */ - gst_rtsp_media_mapping_add_factory (mapping, "/test", factory); + gst_rtsp_mount_points_add_factory (mounts, "/test", factory); /* make another factory */ factory = gst_rtsp_media_factory_new (); @@ -110,10 +110,10 @@ main (int argc, char *argv[]) gst_rtsp_media_factory_set_auth (factory, auth); g_object_unref (auth); /* attach the test factory to the /test url */ - gst_rtsp_media_mapping_add_factory (mapping, "/test2", factory); + gst_rtsp_mount_points_add_factory (mounts, "/test2", factory); /* don't need the ref to the mapper anymore */ - g_object_unref (mapping); + g_object_unref (mounts); /* attach the server to the default maincontext */ if (gst_rtsp_server_attach (server, NULL) == 0) diff --git a/examples/test-launch.c b/examples/test-launch.c index 539b9c5..0466224 100644 --- a/examples/test-launch.c +++ b/examples/test-launch.c @@ -26,7 +26,7 @@ main (int argc, char *argv[]) { GMainLoop *loop; GstRTSPServer *server; - GstRTSPMediaMapping *mapping; + GstRTSPMountPoints *mounts; GstRTSPMediaFactory *factory; gst_init (&argc, &argv); @@ -43,9 +43,9 @@ main (int argc, char *argv[]) /* create a server instance */ server = gst_rtsp_server_new (); - /* get the mapping for this server, every server has a default mapper object + /* get the mount points for this server, every server has a default object * that be used to map uri mount points to media factories */ - mapping = gst_rtsp_server_get_media_mapping (server); + mounts = gst_rtsp_server_get_mount_points (server); /* make a media factory for a test stream. The default media factory can use * gst-launch syntax to create pipelines. @@ -55,10 +55,10 @@ main (int argc, char *argv[]) gst_rtsp_media_factory_set_launch (factory, argv[1]); /* attach the test factory to the /test url */ - gst_rtsp_media_mapping_add_factory (mapping, "/test", factory); + gst_rtsp_mount_points_add_factory (mounts, "/test", factory); /* don't need the ref to the mapper anymore */ - g_object_unref (mapping); + g_object_unref (mounts); /* attach the server to the default maincontext */ gst_rtsp_server_attach (server, NULL); diff --git a/examples/test-mp4.c b/examples/test-mp4.c index b2e9660..b69c7cd 100644 --- a/examples/test-mp4.c +++ b/examples/test-mp4.c @@ -26,7 +26,7 @@ main (int argc, char *argv[]) { GMainLoop *loop; GstRTSPServer *server; - GstRTSPMediaMapping *mapping; + GstRTSPMountPoints *mounts; GstRTSPMediaFactory *factory; gchar *str; @@ -42,9 +42,9 @@ main (int argc, char *argv[]) /* create a server instance */ server = gst_rtsp_server_new (); - /* get the mapping for this server, every server has a default mapper object + /* get the mount points for this server, every server has a default object * that be used to map uri mount points to media factories */ - mapping = gst_rtsp_server_get_media_mapping (server); + mounts = gst_rtsp_server_get_mount_points (server); str = g_strdup_printf ("( " "filesrc location=%s ! qtdemux name=d " @@ -60,10 +60,10 @@ main (int argc, char *argv[]) g_free (str); /* attach the test factory to the /test url */ - gst_rtsp_media_mapping_add_factory (mapping, "/test", factory); + gst_rtsp_mount_points_add_factory (mounts, "/test", factory); /* don't need the ref to the mapper anymore */ - g_object_unref (mapping); + g_object_unref (mounts); /* attach the server to the default maincontext */ gst_rtsp_server_attach (server, NULL); diff --git a/examples/test-multicast.c b/examples/test-multicast.c index 4cd064e..6d4234e 100644 --- a/examples/test-multicast.c +++ b/examples/test-multicast.c @@ -39,7 +39,7 @@ main (int argc, char *argv[]) { GMainLoop *loop; GstRTSPServer *server; - GstRTSPMediaMapping *mapping; + GstRTSPMountPoints *mounts; GstRTSPMediaFactory *factory; GstRTSPAddressPool *pool; @@ -50,9 +50,9 @@ main (int argc, char *argv[]) /* create a server instance */ server = gst_rtsp_server_new (); - /* get the mapping for this server, every server has a default mapper object + /* get the mount points for this server, every server has a default object * that be used to map uri mount points to media factories */ - mapping = gst_rtsp_server_get_media_mapping (server); + mounts = gst_rtsp_server_get_mount_points (server); /* make a media factory for a test stream. The default media factory can use * gst-launch syntax to create pipelines. @@ -75,10 +75,10 @@ main (int argc, char *argv[]) g_object_unref (pool); /* attach the test factory to the /test url */ - gst_rtsp_media_mapping_add_factory (mapping, "/test", factory); + gst_rtsp_mount_points_add_factory (mounts, "/test", factory); /* don't need the ref to the mapper anymore */ - g_object_unref (mapping); + g_object_unref (mounts); /* attach the server to the default maincontext */ if (gst_rtsp_server_attach (server, NULL) == 0) diff --git a/examples/test-multicast2.c b/examples/test-multicast2.c index 7a95374..1d8e6f2 100644 --- a/examples/test-multicast2.c +++ b/examples/test-multicast2.c @@ -68,7 +68,7 @@ main (int argc, char *argv[]) { GMainLoop *loop; GstRTSPServer *server; - GstRTSPMediaMapping *mapping; + GstRTSPMountPoints *mounts; GstRTSPMediaFactory *factory; gst_init (&argc, &argv); @@ -78,9 +78,9 @@ main (int argc, char *argv[]) /* create a server instance */ server = gst_rtsp_server_new (); - /* get the mapping for this server, every server has a default mapper object + /* get the mount points for this server, every server has a default object * that be used to map uri mount points to media factories */ - mapping = gst_rtsp_server_get_media_mapping (server); + mounts = gst_rtsp_server_get_mount_points (server); /* make a media factory for a test stream. The default media factory can use * gst-launch syntax to create pipelines. @@ -99,10 +99,10 @@ main (int argc, char *argv[]) media_constructed, NULL); /* attach the test factory to the /test url */ - gst_rtsp_media_mapping_add_factory (mapping, "/test", factory); + gst_rtsp_mount_points_add_factory (mounts, "/test", factory); /* don't need the ref to the mapper anymore */ - g_object_unref (mapping); + g_object_unref (mounts); /* attach the server to the default maincontext */ if (gst_rtsp_server_attach (server, NULL) == 0) diff --git a/examples/test-ogg.c b/examples/test-ogg.c index d7f2d2d..5e844ad 100644 --- a/examples/test-ogg.c +++ b/examples/test-ogg.c @@ -26,7 +26,7 @@ main (int argc, char *argv[]) { GMainLoop *loop; GstRTSPServer *server; - GstRTSPMediaMapping *mapping; + GstRTSPMountPoints *mounts; GstRTSPMediaFactory *factory; gchar *str; @@ -42,9 +42,9 @@ main (int argc, char *argv[]) /* create a server instance */ server = gst_rtsp_server_new (); - /* get the mapping for this server, every server has a default mapper object + /* get the mount points for this server, every server has a default object * that be used to map uri mount points to media factories */ - mapping = gst_rtsp_server_get_media_mapping (server); + mounts = gst_rtsp_server_get_mount_points (server); str = g_strdup_printf ("( " "filesrc location=%s ! oggdemux name=d " @@ -60,10 +60,10 @@ main (int argc, char *argv[]) g_free (str); /* attach the test factory to the /test url */ - gst_rtsp_media_mapping_add_factory (mapping, "/test", factory); + gst_rtsp_mount_points_add_factory (mounts, "/test", factory); /* don't need the ref to the mapper anymore */ - g_object_unref (mapping); + g_object_unref (mounts); /* attach the server to the default maincontext */ gst_rtsp_server_attach (server, NULL); diff --git a/examples/test-readme.c b/examples/test-readme.c index 0d2bcd7..2e2caa6 100644 --- a/examples/test-readme.c +++ b/examples/test-readme.c @@ -26,7 +26,7 @@ main (int argc, char *argv[]) { GMainLoop *loop; GstRTSPServer *server; - GstRTSPMediaMapping *mapping; + GstRTSPMountPoints *mounts; GstRTSPMediaFactory *factory; gst_init (&argc, &argv); @@ -36,9 +36,9 @@ main (int argc, char *argv[]) /* create a server instance */ server = gst_rtsp_server_new (); - /* get the mapping for this server, every server has a default mapper object + /* get the mount points for this server, every server has a default object * that be used to map uri mount points to media factories */ - mapping = gst_rtsp_server_get_media_mapping (server); + mounts = gst_rtsp_server_get_mount_points (server); /* make a media factory for a test stream. The default media factory can use * gst-launch syntax to create pipelines. @@ -51,10 +51,10 @@ main (int argc, char *argv[]) gst_rtsp_media_factory_set_shared (factory, TRUE); /* attach the test factory to the /test url */ - gst_rtsp_media_mapping_add_factory (mapping, "/test", factory); + gst_rtsp_mount_points_add_factory (mounts, "/test", factory); /* don't need the ref to the mapper anymore */ - g_object_unref (mapping); + g_object_unref (mounts); /* attach the server to the default maincontext */ gst_rtsp_server_attach (server, NULL); diff --git a/examples/test-sdp.c b/examples/test-sdp.c index b5508e4..f3d9e57 100644 --- a/examples/test-sdp.c +++ b/examples/test-sdp.c @@ -39,7 +39,7 @@ main (int argc, char *argv[]) { GMainLoop *loop; GstRTSPServer *server; - GstRTSPMediaMapping *mapping; + GstRTSPMountPoints *mounts; GstRTSPMediaFactory *factory; gchar *str; @@ -55,9 +55,9 @@ main (int argc, char *argv[]) /* create a server instance */ server = gst_rtsp_server_new (); - /* get the mapping for this server, every server has a default mapper object + /* get the mount points for this server, every server has a default object * that be used to map uri mount points to media factories */ - mapping = gst_rtsp_server_get_media_mapping (server); + mounts = gst_rtsp_server_get_mount_points (server); /* make a media factory for a test stream. The default media factory can use * gst-launch syntax to create pipelines. @@ -73,10 +73,10 @@ main (int argc, char *argv[]) g_free (str); /* attach the test factory to the /test url */ - gst_rtsp_media_mapping_add_factory (mapping, "/test", factory); + gst_rtsp_mount_points_add_factory (mounts, "/test", factory); /* don't need the ref to the mapper anymore */ - g_object_unref (mapping); + g_object_unref (mounts); /* attach the server to the default maincontext */ gst_rtsp_server_attach (server, NULL); diff --git a/examples/test-uri.c b/examples/test-uri.c index 5d134a0..62f1caa 100644 --- a/examples/test-uri.c +++ b/examples/test-uri.c @@ -37,12 +37,12 @@ timeout (GstRTSPServer * server) static gboolean remove_map (GstRTSPServer * server) { - GstRTSPMediaMapping *mapping; + GstRTSPMountPoints *mounts; - g_print ("removing /test mapping\n"); - mapping = gst_rtsp_server_get_media_mapping (server); - gst_rtsp_media_mapping_remove_factory (mapping, "/test"); - g_object_unref (mapping); + g_print ("removing /test mount point\n"); + mounts = gst_rtsp_server_get_mount_points (server); + gst_rtsp_mount_points_remove_factory (mounts, "/test"); + g_object_unref (mounts); return FALSE; } @@ -52,7 +52,7 @@ main (int argc, char *argv[]) { GMainLoop *loop; GstRTSPServer *server; - GstRTSPMediaMapping *mapping; + GstRTSPMountPoints *mounts; GstRTSPMediaFactoryURI *factory; gst_init (&argc, &argv); @@ -67,9 +67,9 @@ main (int argc, char *argv[]) /* create a server instance */ server = gst_rtsp_server_new (); - /* get the mapping for this server, every server has a default mapper object + /* get the mount points for this server, every server has a default object * that be used to map uri mount points to media factories */ - mapping = gst_rtsp_server_get_media_mapping (server); + mounts = gst_rtsp_server_get_mount_points (server); /* make a URI media factory for a test stream. */ factory = gst_rtsp_media_factory_uri_new (); @@ -82,11 +82,11 @@ main (int argc, char *argv[]) /* gst_rtsp_media_factory_set_shared ( GST_RTSP_MEDIA_FACTORY (factory), TRUE); */ /* attach the test factory to the /test url */ - gst_rtsp_media_mapping_add_factory (mapping, "/test", + gst_rtsp_mount_points_add_factory (mounts, "/test", GST_RTSP_MEDIA_FACTORY (factory)); /* don't need the ref to the mapper anymore */ - g_object_unref (mapping); + g_object_unref (mounts); /* attach the server to the default maincontext */ if (gst_rtsp_server_attach (server, NULL) == 0) @@ -94,7 +94,7 @@ main (int argc, char *argv[]) /* do session cleanup every 2 seconds */ g_timeout_add_seconds (2, (GSourceFunc) timeout, server); - /* remove the mapping after 10 seconds, new clients won't be able to use the + /* remove the mount point after 10 seconds, new clients won't be able to use the * /test url anymore */ g_timeout_add_seconds (10, (GSourceFunc) remove_map, server); diff --git a/examples/test-video.c b/examples/test-video.c index ab5ce9d..2cfe483 100644 --- a/examples/test-video.c +++ b/examples/test-video.c @@ -45,7 +45,7 @@ main (int argc, char *argv[]) { GMainLoop *loop; GstRTSPServer *server; - GstRTSPMediaMapping *mapping; + GstRTSPMountPoints *mounts; GstRTSPMediaFactory *factory; #ifdef WITH_AUTH GstRTSPAuth *auth; @@ -59,9 +59,9 @@ main (int argc, char *argv[]) /* create a server instance */ server = gst_rtsp_server_new (); - /* get the mapping for this server, every server has a default mapper object + /* get the mount points for this server, every server has a default object * that be used to map uri mount points to media factories */ - mapping = gst_rtsp_server_get_media_mapping (server); + mounts = gst_rtsp_server_get_mount_points (server); #ifdef WITH_AUTH /* make a new authentication manager. it can be added to control access to all @@ -86,10 +86,10 @@ main (int argc, char *argv[]) "alawenc ! rtppcmapay name=pay1 pt=97 " ")"); /* attach the test factory to the /test url */ - gst_rtsp_media_mapping_add_factory (mapping, "/test", factory); + gst_rtsp_mount_points_add_factory (mounts, "/test", factory); /* don't need the ref to the mapper anymore */ - g_object_unref (mapping); + g_object_unref (mounts); /* attach the server to the default maincontext */ if (gst_rtsp_server_attach (server, NULL) == 0) diff --git a/gst/rtsp-server/Makefile.am b/gst/rtsp-server/Makefile.am index f8da744..008e418 100644 --- a/gst/rtsp-server/Makefile.am +++ b/gst/rtsp-server/Makefile.am @@ -6,7 +6,7 @@ public_headers = \ rtsp-media.h \ rtsp-media-factory.h \ rtsp-media-factory-uri.h \ - rtsp-media-mapping.h \ + rtsp-mount-points.h \ rtsp-stream.h \ rtsp-stream-transport.h \ rtsp-session.h \ @@ -23,7 +23,7 @@ c_sources = \ rtsp-media.c \ rtsp-media-factory.c \ rtsp-media-factory-uri.c \ - rtsp-media-mapping.c \ + rtsp-mount-points.c \ rtsp-stream.c \ rtsp-stream-transport.c \ rtsp-session.c \ diff --git a/gst/rtsp-server/rtsp-auth.h b/gst/rtsp-server/rtsp-auth.h index 250c05c..a71388c 100644 --- a/gst/rtsp-server/rtsp-auth.h +++ b/gst/rtsp-server/rtsp-auth.h @@ -26,8 +26,6 @@ typedef struct _GstRTSPAuth GstRTSPAuth; typedef struct _GstRTSPAuthClass GstRTSPAuthClass; #include "rtsp-client.h" -#include "rtsp-media-mapping.h" -#include "rtsp-session-pool.h" G_BEGIN_DECLS diff --git a/gst/rtsp-server/rtsp-client.c b/gst/rtsp-server/rtsp-client.c index a0ba3c5..0620233 100644 --- a/gst/rtsp-server/rtsp-client.c +++ b/gst/rtsp-server/rtsp-client.c @@ -28,14 +28,14 @@ static GMutex tunnels_lock; static GHashTable *tunnels; #define DEFAULT_SESSION_POOL NULL -#define DEFAULT_MEDIA_MAPPING NULL +#define DEFAULT_MOUNT_POINTS NULL #define DEFAULT_USE_CLIENT_SETTINGS FALSE enum { PROP_0, PROP_SESSION_POOL, - PROP_MEDIA_MAPPING, + PROP_MOUNT_POINTS, PROP_USE_CLIENT_SETTINGS, PROP_LAST }; @@ -93,10 +93,10 @@ gst_rtsp_client_class_init (GstRTSPClientClass * klass) GST_TYPE_RTSP_SESSION_POOL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); - g_object_class_install_property (gobject_class, PROP_MEDIA_MAPPING, - g_param_spec_object ("media-mapping", "Media Mapping", - "The media mapping to use for client session", - GST_TYPE_RTSP_MEDIA_MAPPING, + g_object_class_install_property (gobject_class, PROP_MOUNT_POINTS, + g_param_spec_object ("mount-points", "Mount Points", + "The mount points to use for client session", + GST_TYPE_RTSP_MOUNT_POINTS, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (gobject_class, PROP_USE_CLIENT_SETTINGS, @@ -223,8 +223,8 @@ gst_rtsp_client_finalize (GObject * obj) gst_rtsp_connection_free (client->connection); if (client->session_pool) g_object_unref (client->session_pool); - if (client->media_mapping) - g_object_unref (client->media_mapping); + if (client->mount_points) + g_object_unref (client->mount_points); if (client->auth) g_object_unref (client->auth); @@ -250,8 +250,8 @@ gst_rtsp_client_get_property (GObject * object, guint propid, case PROP_SESSION_POOL: g_value_take_object (value, gst_rtsp_client_get_session_pool (client)); break; - case PROP_MEDIA_MAPPING: - g_value_take_object (value, gst_rtsp_client_get_media_mapping (client)); + case PROP_MOUNT_POINTS: + g_value_take_object (value, gst_rtsp_client_get_mount_points (client)); break; case PROP_USE_CLIENT_SETTINGS: g_value_set_boolean (value, @@ -272,8 +272,8 @@ gst_rtsp_client_set_property (GObject * object, guint propid, case PROP_SESSION_POOL: gst_rtsp_client_set_session_pool (client, g_value_get_object (value)); break; - case PROP_MEDIA_MAPPING: - gst_rtsp_client_set_media_mapping (client, g_value_get_object (value)); + case PROP_MOUNT_POINTS: + gst_rtsp_client_set_mount_points (client, g_value_get_object (value)); break; case PROP_USE_CLIENT_SETTINGS: gst_rtsp_client_set_use_client_settings (client, @@ -385,12 +385,12 @@ find_media (GstRTSPClient * client, GstRTSPClientState * state) } client->media = NULL; - if (!client->media_mapping) - goto no_mapping; + if (!client->mount_points) + goto no_mount_points; /* find the factory for the uri first */ if (!(factory = - gst_rtsp_media_mapping_find_factory (client->media_mapping, + gst_rtsp_mount_points_find_factory (client->mount_points, state->uri))) goto no_factory; @@ -436,7 +436,7 @@ find_media (GstRTSPClient * client, GstRTSPClientState * state) return media; /* ERRORS */ -no_mapping: +no_mount_points: { send_generic_response (client, GST_RTSP_STS_NOT_FOUND, state); return NULL; @@ -1752,45 +1752,45 @@ gst_rtsp_client_get_server (GstRTSPClient * client) } /** - * gst_rtsp_client_set_media_mapping: + * gst_rtsp_client_set_mount_points: * @client: a #GstRTSPClient - * @mapping: a #GstRTSPMediaMapping + * @mounts: a #GstRTSPMountPoints * - * Set @mapping as the media mapping for @client which it will use to map urls - * to media streams. These mapping is usually inherited from the server that + * Set @mounts as the mount points for @client which it will use to map urls + * to media streams. These mount points are usually inherited from the server that * created the client but can be overriden later. */ void -gst_rtsp_client_set_media_mapping (GstRTSPClient * client, - GstRTSPMediaMapping * mapping) +gst_rtsp_client_set_mount_points (GstRTSPClient * client, + GstRTSPMountPoints * mounts) { - GstRTSPMediaMapping *old; + GstRTSPMountPoints *old; - old = client->media_mapping; + old = client->mount_points; - if (old != mapping) { - if (mapping) - g_object_ref (mapping); - client->media_mapping = mapping; + if (old != mounts) { + if (mounts) + g_object_ref (mounts); + client->mount_points = mounts; if (old) g_object_unref (old); } } /** - * gst_rtsp_client_get_media_mapping: + * gst_rtsp_client_get_mount_points: * @client: a #GstRTSPClient * - * Get the #GstRTSPMediaMapping object that @client uses to manage its sessions. + * Get the #GstRTSPMountPoints object that @client uses to manage its sessions. * - * Returns: (transfer full): a #GstRTSPMediaMapping, unref after usage. + * Returns: (transfer full): a #GstRTSPMountPoints, unref after usage. */ -GstRTSPMediaMapping * -gst_rtsp_client_get_media_mapping (GstRTSPClient * client) +GstRTSPMountPoints * +gst_rtsp_client_get_mount_points (GstRTSPClient * client) { - GstRTSPMediaMapping *result; + GstRTSPMountPoints *result; - if ((result = client->media_mapping)) + if ((result = client->mount_points)) g_object_ref (result); return result; diff --git a/gst/rtsp-server/rtsp-client.h b/gst/rtsp-server/rtsp-client.h index dd4e712..2b84319 100644 --- a/gst/rtsp-server/rtsp-client.h +++ b/gst/rtsp-server/rtsp-client.h @@ -31,7 +31,7 @@ typedef struct _GstRTSPClientState GstRTSPClientState; #include "rtsp-server.h" #include "rtsp-media.h" -#include "rtsp-media-mapping.h" +#include "rtsp-mount-points.h" #include "rtsp-session-pool.h" #include "rtsp-session-media.h" #include "rtsp-auth.h" @@ -80,7 +80,7 @@ struct _GstRTSPClientState { * @ip: ip address used by the client to connect to us * @use_client_settings: whether to allow client transport settings for multicast * @session_pool: handle to the session pool used by the client. - * @media_mapping: handle to the media mapping used by the client. + * @mount_points: handle to the mount points used by the client. * @uri: cached uri * @media: cached media * @transports: a list of #GstRTSPStreamTransport using @connection. @@ -99,7 +99,7 @@ struct _GstRTSPClient { GstRTSPServer *server; GstRTSPSessionPool *session_pool; - GstRTSPMediaMapping *media_mapping; + GstRTSPMountPoints *mount_points; GstRTSPAuth *auth; GstRTSPUrl *uri; @@ -140,9 +140,9 @@ void gst_rtsp_client_set_session_pool (GstRTSPClient *client, GstRTSPSessionPool *pool); GstRTSPSessionPool * gst_rtsp_client_get_session_pool (GstRTSPClient *client); -void gst_rtsp_client_set_media_mapping (GstRTSPClient *client, - GstRTSPMediaMapping *mapping); -GstRTSPMediaMapping * gst_rtsp_client_get_media_mapping (GstRTSPClient *client); +void gst_rtsp_client_set_mount_points (GstRTSPClient *client, + GstRTSPMountPoints *mounts); +GstRTSPMountPoints * gst_rtsp_client_get_mount_points (GstRTSPClient *client); void gst_rtsp_client_set_use_client_settings (GstRTSPClient * client, gboolean use_client_settings); diff --git a/gst/rtsp-server/rtsp-media-mapping.c b/gst/rtsp-server/rtsp-media-mapping.c deleted file mode 100644 index db2a38d..0000000 --- a/gst/rtsp-server/rtsp-media-mapping.c +++ /dev/null @@ -1,176 +0,0 @@ -/* GStreamer - * Copyright (C) 2008 Wim Taymans - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ - -#include "rtsp-media-mapping.h" - -G_DEFINE_TYPE (GstRTSPMediaMapping, gst_rtsp_media_mapping, G_TYPE_OBJECT); - -GST_DEBUG_CATEGORY_STATIC (rtsp_media_debug); -#define GST_CAT_DEFAULT rtsp_media_debug - -static void gst_rtsp_media_mapping_finalize (GObject * obj); - -static GstRTSPMediaFactory *find_factory (GstRTSPMediaMapping * mapping, - const GstRTSPUrl * url); - -static void -gst_rtsp_media_mapping_class_init (GstRTSPMediaMappingClass * klass) -{ - GObjectClass *gobject_class; - - gobject_class = G_OBJECT_CLASS (klass); - - gobject_class->finalize = gst_rtsp_media_mapping_finalize; - - klass->find_factory = find_factory; - - GST_DEBUG_CATEGORY_INIT (rtsp_media_debug, "rtspmediamapping", 0, - "GstRTSPMediaMapping"); -} - -static void -gst_rtsp_media_mapping_init (GstRTSPMediaMapping * mapping) -{ - GST_DEBUG_OBJECT (mapping, "created"); - - g_mutex_init (&mapping->lock); - mapping->mappings = g_hash_table_new_full (g_str_hash, g_str_equal, - g_free, g_object_unref); -} - -static void -gst_rtsp_media_mapping_finalize (GObject * obj) -{ - GstRTSPMediaMapping *mapping = GST_RTSP_MEDIA_MAPPING (obj); - - GST_DEBUG_OBJECT (mapping, "finalized"); - - g_hash_table_unref (mapping->mappings); - g_mutex_clear (&mapping->lock); - - G_OBJECT_CLASS (gst_rtsp_media_mapping_parent_class)->finalize (obj); -} - -/** - * gst_rtsp_media_mapping_new: - * - * Make a new media mapping object. - * - * Returns: a new #GstRTSPMediaMapping - */ -GstRTSPMediaMapping * -gst_rtsp_media_mapping_new (void) -{ - GstRTSPMediaMapping *result; - - result = g_object_new (GST_TYPE_RTSP_MEDIA_MAPPING, NULL); - - return result; -} - -static GstRTSPMediaFactory * -find_factory (GstRTSPMediaMapping * mapping, const GstRTSPUrl * url) -{ - GstRTSPMediaFactory *result; - - g_mutex_lock (&mapping->lock); - /* find the location of the media in the hashtable we only use the absolute - * path of the uri to find a mapping. If the mapping depends on other - * properties found in the url, this method should be overridden. */ - result = g_hash_table_lookup (mapping->mappings, url->abspath); - if (result) - g_object_ref (result); - g_mutex_unlock (&mapping->lock); - - GST_INFO ("found media %p for url abspath %s", result, url->abspath); - - return result; -} - -/** - * gst_rtsp_media_mapping_find_factory: - * @mapping: a #GstRTSPMediaMapping - * @url: a url - * - * Find the #GstRTSPMediaFactory for @url. The default implementation of this object - * will use the mappings added with gst_rtsp_media_mapping_add_factory (). - * - * Returns: (transfer full): the #GstRTSPMediaFactory for @url. g_object_unref() after usage. - */ -GstRTSPMediaFactory * -gst_rtsp_media_mapping_find_factory (GstRTSPMediaMapping * mapping, - const GstRTSPUrl * url) -{ - GstRTSPMediaFactory *result; - GstRTSPMediaMappingClass *klass; - - klass = GST_RTSP_MEDIA_MAPPING_GET_CLASS (mapping); - - if (klass->find_factory) - result = klass->find_factory (mapping, url); - else - result = NULL; - - return result; -} - -/** - * gst_rtsp_media_mapping_add_factory: - * @mapping: a #GstRTSPMediaMapping - * @path: a mount point - * @factory: (transfer full): a #GstRTSPMediaFactory - * - * Attach @factory to the mount point @path in @mapping. - * - * @path is of the form (/node)+. Any previous mapping will be freed. - * - * Ownership is taken of the reference on @factory so that @factory should not be - * used after calling this function. - */ -void -gst_rtsp_media_mapping_add_factory (GstRTSPMediaMapping * mapping, - const gchar * path, GstRTSPMediaFactory * factory) -{ - g_return_if_fail (GST_IS_RTSP_MEDIA_MAPPING (mapping)); - g_return_if_fail (GST_IS_RTSP_MEDIA_FACTORY (factory)); - g_return_if_fail (path != NULL); - - g_mutex_lock (&mapping->lock); - g_hash_table_insert (mapping->mappings, g_strdup (path), factory); - g_mutex_unlock (&mapping->lock); -} - -/** - * gst_rtsp_media_mapping_remove_factory: - * @mapping: a #GstRTSPMediaMapping - * @path: a mount point - * - * Remove the #GstRTSPMediaFactory associated with @path in @mapping. - */ -void -gst_rtsp_media_mapping_remove_factory (GstRTSPMediaMapping * mapping, - const gchar * path) -{ - g_return_if_fail (GST_IS_RTSP_MEDIA_MAPPING (mapping)); - g_return_if_fail (path != NULL); - - g_mutex_lock (&mapping->lock); - g_hash_table_remove (mapping->mappings, path); - g_mutex_unlock (&mapping->lock); -} diff --git a/gst/rtsp-server/rtsp-media-mapping.h b/gst/rtsp-server/rtsp-media-mapping.h deleted file mode 100644 index 4025ceb..0000000 --- a/gst/rtsp-server/rtsp-media-mapping.h +++ /dev/null @@ -1,87 +0,0 @@ -/* GStreamer - * Copyright (C) 2008 Wim Taymans - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, - * Boston, MA 02110-1301, USA. - */ - -#include - -#include - -#include "rtsp-media-factory.h" - -#ifndef __GST_RTSP_MEDIA_MAPPING_H__ -#define __GST_RTSP_MEDIA_MAPPING_H__ - -G_BEGIN_DECLS - -#define GST_TYPE_RTSP_MEDIA_MAPPING (gst_rtsp_media_mapping_get_type ()) -#define GST_IS_RTSP_MEDIA_MAPPING(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_RTSP_MEDIA_MAPPING)) -#define GST_IS_RTSP_MEDIA_MAPPING_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_RTSP_MEDIA_MAPPING)) -#define GST_RTSP_MEDIA_MAPPING_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_RTSP_MEDIA_MAPPING, GstRTSPMediaMappingClass)) -#define GST_RTSP_MEDIA_MAPPING(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_RTSP_MEDIA_MAPPING, GstRTSPMediaMapping)) -#define GST_RTSP_MEDIA_MAPPING_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_RTSP_MEDIA_MAPPING, GstRTSPMediaMappingClass)) -#define GST_RTSP_MEDIA_MAPPING_CAST(obj) ((GstRTSPMediaMapping*)(obj)) -#define GST_RTSP_MEDIA_MAPPING_CLASS_CAST(klass) ((GstRTSPMediaMappingClass*)(klass)) - -typedef struct _GstRTSPMediaMapping GstRTSPMediaMapping; -typedef struct _GstRTSPMediaMappingClass GstRTSPMediaMappingClass; - -/** - * GstRTSPMediaMapping: - * @parent: parent GObject - * @mappings: the mountpoint to media mappings - * - * Creates a #GstRTSPMediaFactory object for a given url. - */ -struct _GstRTSPMediaMapping { - GObject parent; - - GMutex lock; - GHashTable *mappings; -}; - -/** - * GstRTSPMediaMappingClass: - * @parent_class: parent GObject class - * @find_factory: Create or return a previously cached #GstRTSPMediaFactory object - * for the given url. the default implementation will use the mappings - * added with gst_rtsp_media_mapping_add_factory(). - * - * The class for the media mapping object. - */ -struct _GstRTSPMediaMappingClass { - GObjectClass parent_class; - - GstRTSPMediaFactory * (*find_factory) (GstRTSPMediaMapping *mapping, const GstRTSPUrl *url); -}; - -GType gst_rtsp_media_mapping_get_type (void); - -/* creating a mapping */ -GstRTSPMediaMapping * gst_rtsp_media_mapping_new (void); - -/* finding a media factory */ -GstRTSPMediaFactory * gst_rtsp_media_mapping_find_factory (GstRTSPMediaMapping *mapping, const GstRTSPUrl *url); - -/* managing media to a path */ -void gst_rtsp_media_mapping_add_factory (GstRTSPMediaMapping *mapping, const gchar *path, - GstRTSPMediaFactory *factory); -void gst_rtsp_media_mapping_remove_factory (GstRTSPMediaMapping *mapping, const gchar *path); - -G_END_DECLS - -#endif /* __GST_RTSP_MEDIA_MAPPING_H__ */ diff --git a/gst/rtsp-server/rtsp-mount-points.c b/gst/rtsp-server/rtsp-mount-points.c new file mode 100644 index 0000000..d633fe3 --- /dev/null +++ b/gst/rtsp-server/rtsp-mount-points.c @@ -0,0 +1,176 @@ +/* GStreamer + * Copyright (C) 2008 Wim Taymans + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#include "rtsp-mount-points.h" + +G_DEFINE_TYPE (GstRTSPMountPoints, gst_rtsp_mount_points, G_TYPE_OBJECT); + +GST_DEBUG_CATEGORY_STATIC (rtsp_media_debug); +#define GST_CAT_DEFAULT rtsp_media_debug + +static void gst_rtsp_mount_points_finalize (GObject * obj); + +static GstRTSPMediaFactory *find_factory (GstRTSPMountPoints * mounts, + const GstRTSPUrl * url); + +static void +gst_rtsp_mount_points_class_init (GstRTSPMountPointsClass * klass) +{ + GObjectClass *gobject_class; + + gobject_class = G_OBJECT_CLASS (klass); + + gobject_class->finalize = gst_rtsp_mount_points_finalize; + + klass->find_factory = find_factory; + + GST_DEBUG_CATEGORY_INIT (rtsp_media_debug, "rtspmountpoints", 0, + "GstRTSPMountPoints"); +} + +static void +gst_rtsp_mount_points_init (GstRTSPMountPoints * mounts) +{ + GST_DEBUG_OBJECT (mounts, "created"); + + g_mutex_init (&mounts->lock); + mounts->mounts = g_hash_table_new_full (g_str_hash, g_str_equal, + g_free, g_object_unref); +} + +static void +gst_rtsp_mount_points_finalize (GObject * obj) +{ + GstRTSPMountPoints *mounts = GST_RTSP_MOUNT_POINTS (obj); + + GST_DEBUG_OBJECT (mounts, "finalized"); + + g_hash_table_unref (mounts->mounts); + g_mutex_clear (&mounts->lock); + + G_OBJECT_CLASS (gst_rtsp_mount_points_parent_class)->finalize (obj); +} + +/** + * gst_rtsp_mount_points_new: + * + * Make a new mount points object. + * + * Returns: a new #GstRTSPMountPoints + */ +GstRTSPMountPoints * +gst_rtsp_mount_points_new (void) +{ + GstRTSPMountPoints *result; + + result = g_object_new (GST_TYPE_RTSP_MOUNT_POINTS, NULL); + + return result; +} + +static GstRTSPMediaFactory * +find_factory (GstRTSPMountPoints * mounts, const GstRTSPUrl * url) +{ + GstRTSPMediaFactory *result; + + g_mutex_lock (&mounts->lock); + /* find the location of the media in the hashtable we only use the absolute + * path of the uri to find a media factory. If the factory depends on other + * properties found in the url, this method should be overridden. */ + result = g_hash_table_lookup (mounts->mounts, url->abspath); + if (result) + g_object_ref (result); + g_mutex_unlock (&mounts->lock); + + GST_INFO ("found media factory %p for url abspath %s", result, url->abspath); + + return result; +} + +/** + * gst_rtsp_mount_points_find_factory: + * @mounts: a #GstRTSPMountPoints + * @url: a url + * + * Find the #GstRTSPMediaFactory for @url. The default implementation of this object + * will use the media factory added with gst_rtsp_mount_points_add_factory (). + * + * Returns: (transfer full): the #GstRTSPMediaFactory for @url. g_object_unref() after usage. + */ +GstRTSPMediaFactory * +gst_rtsp_mount_points_find_factory (GstRTSPMountPoints * mounts, + const GstRTSPUrl * url) +{ + GstRTSPMediaFactory *result; + GstRTSPMountPointsClass *klass; + + klass = GST_RTSP_MOUNT_POINTS_GET_CLASS (mounts); + + if (klass->find_factory) + result = klass->find_factory (mounts, url); + else + result = NULL; + + return result; +} + +/** + * gst_rtsp_mount_points_add_factory: + * @mounts: a #GstRTSPMountPoints + * @path: a mount point + * @factory: (transfer full): a #GstRTSPMediaFactory + * + * Attach @factory to the mount point @path in @mounts. + * + * @path is of the form (/node)+. Any previous mount point will be freed. + * + * Ownership is taken of the reference on @factory so that @factory should not be + * used after calling this function. + */ +void +gst_rtsp_mount_points_add_factory (GstRTSPMountPoints * mounts, + const gchar * path, GstRTSPMediaFactory * factory) +{ + g_return_if_fail (GST_IS_RTSP_MOUNT_POINTS (mounts)); + g_return_if_fail (GST_IS_RTSP_MEDIA_FACTORY (factory)); + g_return_if_fail (path != NULL); + + g_mutex_lock (&mounts->lock); + g_hash_table_insert (mounts->mounts, g_strdup (path), factory); + g_mutex_unlock (&mounts->lock); +} + +/** + * gst_rtsp_mount_points_remove_factory: + * @mounts: a #GstRTSPMountPoints + * @path: a mount point + * + * Remove the #GstRTSPMediaFactory associated with @path in @mounts. + */ +void +gst_rtsp_mount_points_remove_factory (GstRTSPMountPoints * mounts, + const gchar * path) +{ + g_return_if_fail (GST_IS_RTSP_MOUNT_POINTS (mounts)); + g_return_if_fail (path != NULL); + + g_mutex_lock (&mounts->lock); + g_hash_table_remove (mounts->mounts, path); + g_mutex_unlock (&mounts->lock); +} diff --git a/gst/rtsp-server/rtsp-mount-points.h b/gst/rtsp-server/rtsp-mount-points.h new file mode 100644 index 0000000..3ab6016 --- /dev/null +++ b/gst/rtsp-server/rtsp-mount-points.h @@ -0,0 +1,87 @@ +/* GStreamer + * Copyright (C) 2008 Wim Taymans + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#include + +#include + +#include "rtsp-media-factory.h" + +#ifndef __GST_RTSP_MOUNT_POINTS_H__ +#define __GST_RTSP_MOUNT_POINTS_H__ + +G_BEGIN_DECLS + +#define GST_TYPE_RTSP_MOUNT_POINTS (gst_rtsp_mount_points_get_type ()) +#define GST_IS_RTSP_MOUNT_POINTS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_RTSP_MOUNT_POINTS)) +#define GST_IS_RTSP_MOUNT_POINTS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_RTSP_MOUNT_POINTS)) +#define GST_RTSP_MOUNT_POINTS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_RTSP_MOUNT_POINTS, GstRTSPMountPointsClass)) +#define GST_RTSP_MOUNT_POINTS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_RTSP_MOUNT_POINTS, GstRTSPMountPoints)) +#define GST_RTSP_MOUNT_POINTS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_RTSP_MOUNT_POINTS, GstRTSPMountPointsClass)) +#define GST_RTSP_MOUNT_POINTS_CAST(obj) ((GstRTSPMountPoints*)(obj)) +#define GST_RTSP_MOUNT_POINTS_CLASS_CAST(klass) ((GstRTSPMountPointsClass*)(klass)) + +typedef struct _GstRTSPMountPoints GstRTSPMountPoints; +typedef struct _GstRTSPMountPointsClass GstRTSPMountPointsClass; + +/** + * GstRTSPMountPoints: + * @parent: parent GObject + * @mounts: the mountpoints to mediafactory mapping + * + * Creates a #GstRTSPMediaFactory object for a given url. + */ +struct _GstRTSPMountPoints { + GObject parent; + + GMutex lock; + GHashTable *mounts; +}; + +/** + * GstRTSPMountPointsClass: + * @parent_class: parent GObject class + * @find_factory: Create or return a previously cached #GstRTSPMediaFactory object + * for the given url. the default implementation will use the factory + * added with gst_rtsp_mount_points_add_factory(). + * + * The class for the media mounts object. + */ +struct _GstRTSPMountPointsClass { + GObjectClass parent_class; + + GstRTSPMediaFactory * (*find_factory) (GstRTSPMountPoints *mounts, const GstRTSPUrl *url); +}; + +GType gst_rtsp_mount_points_get_type (void); + +/* creating a mount points */ +GstRTSPMountPoints * gst_rtsp_mount_points_new (void); + +/* finding a media factory */ +GstRTSPMediaFactory * gst_rtsp_mount_points_find_factory (GstRTSPMountPoints *mounts, const GstRTSPUrl *url); + +/* managing media to a mount point */ +void gst_rtsp_mount_points_add_factory (GstRTSPMountPoints *mounts, const gchar *path, + GstRTSPMediaFactory *factory); +void gst_rtsp_mount_points_remove_factory (GstRTSPMountPoints *mounts, const gchar *path); + +G_END_DECLS + +#endif /* __GST_RTSP_MOUNT_POINTS_H__ */ diff --git a/gst/rtsp-server/rtsp-server.c b/gst/rtsp-server/rtsp-server.c index 9f557ba..4809cb8 100644 --- a/gst/rtsp-server/rtsp-server.c +++ b/gst/rtsp-server/rtsp-server.c @@ -44,7 +44,7 @@ enum PROP_BACKLOG, PROP_SESSION_POOL, - PROP_MEDIA_MAPPING, + PROP_MOUNT_POINTS, PROP_MAX_THREADS, PROP_LAST }; @@ -145,15 +145,15 @@ gst_rtsp_server_class_init (GstRTSPServerClass * klass) GST_TYPE_RTSP_SESSION_POOL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); /** - * GstRTSPServer::media-mapping: + * GstRTSPServer::mount-points: * - * The media mapping to use for this server. By default the server has no - * media mapping and thus cannot map urls to media streams. + * The mount points to use for this server. By default the server has no + * mount points and thus cannot map urls to media streams. */ - g_object_class_install_property (gobject_class, PROP_MEDIA_MAPPING, - g_param_spec_object ("media-mapping", "Media Mapping", - "The media mapping to use for client session", - GST_TYPE_RTSP_MEDIA_MAPPING, + g_object_class_install_property (gobject_class, PROP_MOUNT_POINTS, + g_param_spec_object ("mount-points", "Mount Points", + "The mount points to use for client session", + GST_TYPE_RTSP_MOUNT_POINTS, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); /** * GstRTSPServer::max-threads: @@ -191,7 +191,7 @@ gst_rtsp_server_init (GstRTSPServer * server) server->socket = NULL; server->backlog = DEFAULT_BACKLOG; server->session_pool = gst_rtsp_session_pool_new (); - server->media_mapping = gst_rtsp_media_mapping_new (); + server->mount_points = gst_rtsp_mount_points_new (); server->max_threads = DEFAULT_MAX_THREADS; } @@ -209,7 +209,7 @@ gst_rtsp_server_finalize (GObject * object) g_object_unref (server->socket); g_object_unref (server->session_pool); - g_object_unref (server->media_mapping); + g_object_unref (server->mount_points); if (server->auth) g_object_unref (server->auth); @@ -445,26 +445,26 @@ gst_rtsp_server_get_session_pool (GstRTSPServer * server) } /** - * gst_rtsp_server_set_media_mapping: + * gst_rtsp_server_set_mount_points: * @server: a #GstRTSPServer - * @mapping: a #GstRTSPMediaMapping + * @mounts: a #GstRTSPMountPoints * - * configure @mapping to be used as the media mapping of @server. + * configure @mounts to be used as the mount points of @server. */ void -gst_rtsp_server_set_media_mapping (GstRTSPServer * server, - GstRTSPMediaMapping * mapping) +gst_rtsp_server_set_mount_points (GstRTSPServer * server, + GstRTSPMountPoints * mounts) { - GstRTSPMediaMapping *old; + GstRTSPMountPoints *old; g_return_if_fail (GST_IS_RTSP_SERVER (server)); - if (mapping) - g_object_ref (mapping); + if (mounts) + g_object_ref (mounts); GST_RTSP_SERVER_LOCK (server); - old = server->media_mapping; - server->media_mapping = mapping; + old = server->mount_points; + server->mount_points = mounts; GST_RTSP_SERVER_UNLOCK (server); if (old) @@ -473,23 +473,23 @@ gst_rtsp_server_set_media_mapping (GstRTSPServer * server, /** - * gst_rtsp_server_get_media_mapping: + * gst_rtsp_server_get_mount_points: * @server: a #GstRTSPServer * - * Get the #GstRTSPMediaMapping used as the media mapping of @server. + * Get the #GstRTSPMountPoints used as the mount points of @server. * - * Returns: (transfer full): the #GstRTSPMediaMapping of @server. g_object_unref() after + * Returns: (transfer full): the #GstRTSPMountPoints of @server. g_object_unref() after * usage. */ -GstRTSPMediaMapping * -gst_rtsp_server_get_media_mapping (GstRTSPServer * server) +GstRTSPMountPoints * +gst_rtsp_server_get_mount_points (GstRTSPServer * server) { - GstRTSPMediaMapping *result; + GstRTSPMountPoints *result; g_return_val_if_fail (GST_IS_RTSP_SERVER (server), NULL); GST_RTSP_SERVER_LOCK (server); - if ((result = server->media_mapping)) + if ((result = server->mount_points)) g_object_ref (result); GST_RTSP_SERVER_UNLOCK (server); @@ -612,8 +612,8 @@ gst_rtsp_server_get_property (GObject * object, guint propid, case PROP_SESSION_POOL: g_value_take_object (value, gst_rtsp_server_get_session_pool (server)); break; - case PROP_MEDIA_MAPPING: - g_value_take_object (value, gst_rtsp_server_get_media_mapping (server)); + case PROP_MOUNT_POINTS: + g_value_take_object (value, gst_rtsp_server_get_mount_points (server)); break; case PROP_MAX_THREADS: g_value_set_int (value, gst_rtsp_server_get_max_threads (server)); @@ -642,8 +642,8 @@ gst_rtsp_server_set_property (GObject * object, guint propid, case PROP_SESSION_POOL: gst_rtsp_server_set_session_pool (server, g_value_get_object (value)); break; - case PROP_MEDIA_MAPPING: - gst_rtsp_server_set_media_mapping (server, g_value_get_object (value)); + case PROP_MOUNT_POINTS: + gst_rtsp_server_set_mount_points (server, g_value_get_object (value)); break; case PROP_MAX_THREADS: gst_rtsp_server_set_max_threads (server, g_value_get_int (value)); @@ -922,8 +922,8 @@ default_create_client (GstRTSPServer * server) /* set the session pool that this client should use */ GST_RTSP_SERVER_LOCK (server); gst_rtsp_client_set_session_pool (client, server->session_pool); - /* set the media mapping that this client should use */ - gst_rtsp_client_set_media_mapping (client, server->media_mapping); + /* set the mount points that this client should use */ + gst_rtsp_client_set_mount_points (client, server->mount_points); /* set authentication manager */ gst_rtsp_client_set_auth (client, server->auth); GST_RTSP_SERVER_UNLOCK (server); diff --git a/gst/rtsp-server/rtsp-server.h b/gst/rtsp-server/rtsp-server.h index 42a37b1..e851ed4 100644 --- a/gst/rtsp-server/rtsp-server.h +++ b/gst/rtsp-server/rtsp-server.h @@ -28,7 +28,7 @@ typedef struct _GstRTSPServer GstRTSPServer; typedef struct _GstRTSPServerClass GstRTSPServerClass; #include "rtsp-session-pool.h" -#include "rtsp-media-mapping.h" +#include "rtsp-mount-points.h" #include "rtsp-media-factory-uri.h" #include "rtsp-client.h" #include "rtsp-auth.h" @@ -68,8 +68,8 @@ struct _GstRTSPServer { /* sessions on this server */ GstRTSPSessionPool *session_pool; - /* media mapper for this server */ - GstRTSPMediaMapping *media_mapping; + /* mount points for this server */ + GstRTSPMountPoints *mount_points; /* authentication manager */ GstRTSPAuth *auth; @@ -117,8 +117,8 @@ gint gst_rtsp_server_get_backlog (GstRTSPServer *serve void gst_rtsp_server_set_session_pool (GstRTSPServer *server, GstRTSPSessionPool *pool); GstRTSPSessionPool * gst_rtsp_server_get_session_pool (GstRTSPServer *server); -void gst_rtsp_server_set_media_mapping (GstRTSPServer *server, GstRTSPMediaMapping *mapping); -GstRTSPMediaMapping * gst_rtsp_server_get_media_mapping (GstRTSPServer *server); +void gst_rtsp_server_set_mount_points (GstRTSPServer *server, GstRTSPMountPoints *mounts); +GstRTSPMountPoints * gst_rtsp_server_get_mount_points (GstRTSPServer *server); void gst_rtsp_server_set_auth (GstRTSPServer *server, GstRTSPAuth *auth); GstRTSPAuth * gst_rtsp_server_get_auth (GstRTSPServer *server); diff --git a/gst/rtsp-server/rtsp-session-media.c b/gst/rtsp-server/rtsp-session-media.c index e8eda2b..31caca7 100644 --- a/gst/rtsp-server/rtsp-session-media.c +++ b/gst/rtsp-server/rtsp-session-media.c @@ -20,10 +20,6 @@ #include "rtsp-session.h" -#undef DEBUG - -#define DEFAULT_TIMEOUT 60 - enum { PROP_0, diff --git a/gst/rtsp-server/rtsp-session-pool.c b/gst/rtsp-server/rtsp-session-pool.c index 38f1519..7a3231d 100644 --- a/gst/rtsp-server/rtsp-session-pool.c +++ b/gst/rtsp-server/rtsp-session-pool.c @@ -19,8 +19,6 @@ #include "rtsp-session-pool.h" -#undef DEBUG - #define DEFAULT_MAX_SESSIONS 0 enum diff --git a/gst/rtsp-server/rtsp-session-pool.h b/gst/rtsp-server/rtsp-session-pool.h index d60167e..ede06ce 100644 --- a/gst/rtsp-server/rtsp-session-pool.h +++ b/gst/rtsp-server/rtsp-session-pool.h @@ -117,7 +117,7 @@ typedef enum * * Returns: a #GstRTSPFilterResult. */ -typedef GstRTSPFilterResult (*GstRTSPSessionFilterFunc) (GstRTSPSessionPool *pool, +typedef GstRTSPFilterResult (*GstRTSPSessionFilterFunc) (GstRTSPSessionPool *pool, GstRTSPSession *session, gpointer user_data); diff --git a/tests/check/gst/rtspserver.c b/tests/check/gst/rtspserver.c index 805f3c9..835ae65 100644 --- a/tests/check/gst/rtspserver.c +++ b/tests/check/gst/rtspserver.c @@ -136,19 +136,19 @@ get_client_ports (GstRTSPRange * range) static void start_server () { - GstRTSPMediaMapping *mapping; + GstRTSPMountPoints *mounts; gchar *service; GstRTSPMediaFactory *factory; - mapping = gst_rtsp_server_get_media_mapping (server); + mounts = gst_rtsp_server_get_mount_points (server); factory = gst_rtsp_media_factory_new (); gst_rtsp_media_factory_set_launch (factory, "( " VIDEO_PIPELINE " " AUDIO_PIPELINE " )"); - gst_rtsp_media_mapping_add_factory (mapping, TEST_MOUNT_POINT, factory); - g_object_unref (mapping); + gst_rtsp_mount_points_add_factory (mounts, TEST_MOUNT_POINT, factory); + g_object_unref (mounts); /* set port */ test_port = get_unused_port (SOCK_STREAM); @@ -700,7 +700,9 @@ GST_START_TEST (test_bind_already_in_use) service = g_socket_service_new (); /* bind service to port */ - port = g_socket_listener_add_any_inet_port (G_SOCKET_LISTENER (service), NULL, &error); + port = + g_socket_listener_add_any_inet_port (G_SOCKET_LISTENER (service), NULL, + &error); g_assert_no_error (error); port_str = g_strdup_printf ("%d\n", port);