]> git.sesse.net Git - vlc/commitdiff
* Added group announcing support
authorYoann Peronneau <yoann@videolan.org>
Sat, 6 Nov 2004 14:04:29 +0000 (14:04 +0000)
committerYoann Peronneau <yoann@videolan.org>
Sat, 6 Nov 2004 14:04:29 +0000 (14:04 +0000)
include/stream_output.h
modules/stream_out/standard.c
src/stream_output/announce.c
src/stream_output/sap.c

index 45f6bc0585652c6249a8b934cf14249194ac78c0..488ce86b459a25400775b2c73fdd31cb76d8f2ac 100644 (file)
@@ -245,6 +245,8 @@ struct session_descriptor_t
     int i_ttl;
     int i_payload;   /* SAP Payload type */
 
+    char *psz_group;
+
     sap_session_t *p_sap; /* If we have a sap session, remember it */
     char *psz_sdp;
 };
index beecb1aee0abb9366c9587c4355e1dccd1e2d0c7..f8a87116415303a9249d865e784670cf093529b2 100644 (file)
 #define NAME_LONGTEXT N_( \
     "Name of the session that will be announced with SAP or SLP" )
 
+#define GROUP_TEXT N_("Session groupname")
+#define GROUP_LONGTEXT N_( \
+    "Name of the group that will be announced for the session" )
+
 #define SAP_TEXT N_("SAP announcing")
 #define SAP_LONGTEXT N_("Announce this session with SAP")
 
@@ -84,8 +88,10 @@ vlc_module_begin();
                 URL_LONGTEXT, VLC_FALSE );
 
     add_bool( SOUT_CFG_PREFIX "sap", 0, NULL, SAP_TEXT, SAP_LONGTEXT, VLC_TRUE );
-    add_string( SOUT_CFG_PREFIX "name", "", NULL, NAME_TEXT,NAME_LONGTEXT
-                                     , VLC_TRUE );
+    add_string( SOUT_CFG_PREFIX "name", "", NULL, NAME_TEXT, NAME_LONGTEXT,
+                                        VLC_TRUE );
+    add_string( SOUT_CFG_PREFIX "group", "", NULL, GROUP_TEXT, GROUP_LONGTEXT,
+                                        VLC_TRUE );
     add_bool( SOUT_CFG_PREFIX "sap-ipv6", 0, NULL, SAPv6_TEXT, SAPv6_LONGTEXT,
                                         VLC_TRUE );
 
@@ -100,8 +106,8 @@ vlc_module_end();
  *****************************************************************************/
 static const char *ppsz_sout_options[] = {
     "access", "mux", "url",
-    "sap", "name", "sap-ipv6",
-    "slp",NULL
+    "sap", "name", "sap-ipv6", "group",
+    "slp", NULL
 };
 
 #define DEFAULT_IPV6_SCOPE '8'
@@ -325,13 +331,21 @@ static int Open( vlc_object_t *p_this )
         var_Get( p_stream, SOUT_CFG_PREFIX "name", &val );
         if( *val.psz_string )
         {
-            p_session->psz_name = val.psz_string;
+            p_session->psz_name = strdup( val.psz_string );
         }
         else
         {
-            free( val.psz_string );
             p_session->psz_name = strdup( psz_url );
         }
+        free( val.psz_string );
+
+        var_Get( p_stream, SOUT_CFG_PREFIX "group", &val );
+        if( *val.psz_string )
+        {
+            p_session->psz_group = strdup( val.psz_string );
+        }
+        free( val.psz_string );
+
         var_Get( p_stream, SOUT_CFG_PREFIX "sap-ipv6", &val );
         p_method->i_ip_version = val.b_bool ? 6 : 4;
 
index df67982a4fb1f34d1eef2bcb2067c385e3589fcf..333d5783b1f3d3438059a2c1d5d3a7ec8974f62c 100644 (file)
@@ -164,6 +164,7 @@ session_descriptor_t * sout_AnnounceSessionCreate()
         p_session->psz_name = NULL;
         p_session->psz_uri = NULL;
         p_session->i_port = 0;
+        p_session->psz_group = NULL;
     }
 
     return p_session;
@@ -180,6 +181,7 @@ void sout_AnnounceSessionDestroy( session_descriptor_t *p_session )
     if( p_session )
     {
         FREE( p_session->psz_name );
+        FREE( p_session->psz_group );
         FREE( p_session->psz_uri );
         FREE( p_session->psz_sdp );
         FREE( p_session );
index 0cb06b281b366984d13281399ee8886a8a07d9fa..1ba969e641008eea9b5a0b578d5746ead646e7d9 100644 (file)
@@ -490,7 +490,10 @@ static int SDPGenerate( sap_handler_t *p_sap, session_descriptor_t *p_session )
                                    "a=tool:"PACKAGE_STRING"\r\n"
                                    "a=type:broadcast\r\n")
                            + strlen( p_session->psz_name )
-                           + strlen( p_session->psz_uri ) + 300 );
+                           + strlen( p_session->psz_uri ) + 300
+                           + ( p_session->psz_group ?
+                                 strlen( p_session->psz_group ) : 0 ) );
+
     if( !p_session->psz_sdp )
     {
         msg_Err( p_sap, "out of memory" );
@@ -509,6 +512,14 @@ static int SDPGenerate( sap_handler_t *p_sap, session_descriptor_t *p_session )
                             p_session->psz_name,
                             p_session->psz_uri, p_session->i_ttl,
                             p_session->i_port, p_session->i_payload );
+
+    if( p_session->psz_group )
+    {
+        sprintf( p_session->psz_sdp, "%sa=x-plgroup:%s\r\n",
+                                     p_session->psz_sdp,
+                                     p_session->psz_group );
+    }
+
     msg_Dbg( p_sap, "Generated SDP (%i bytes):\n%s", strlen(p_session->psz_sdp),
                     p_session->psz_sdp );
     return VLC_SUCCESS;