]> git.sesse.net Git - vlc/blobdiff - modules/access/slp.c
* modules/access/dvdread.c: fixed bug that made some DVDs unplayable.
[vlc] / modules / access / slp.c
index a3891656d80cd083ea7531ccd2e1326ce59341d0..7d064877e843bcbdfb1e29c166a181b84aef27bd 100644 (file)
@@ -1,8 +1,8 @@
 /*****************************************************************************
  * slp.c: SLP access plugin
  *****************************************************************************
- * Copyright (C) 2001, 2002 VideoLAN
- * $Id: slp.c,v 1.18 2004/01/05 13:07:02 zorglub Exp $
+ * Copyright (C) 2002-2004 VideoLAN
+ * $Id$
  *
  * Authors: Loïc Minier <lool@videolan.org>
  *
@@ -38,7 +38,7 @@
  *****************************************************************************/
 static int  Open  ( vlc_object_t * );
 static void Close ( vlc_object_t * );
-static ssize_t Read  ( input_thread_t *, byte_t *, size_t );
+static ssize_t Read( input_thread_t *, byte_t *, size_t );
 
 static int  Init  ( vlc_object_t * );
 static void End   ( vlc_object_t * );
@@ -50,42 +50,51 @@ int i_group;
  * Module descriptor
  *****************************************************************************/
 
-#define SRVTYPE_TEXT     "SLP service type"
-#define SRVTYPE_LONGTEXT "The service type string for SLP queries, " \
-                         "including the authority string (if any) for the " \
-                         "request. May not be empty"
-#define ATTRIDS_TEXT     "SLP attribute identifiers"
-#define ATTRIDS_LONGTEXT "This string is a comma separated list of " \
-                         "attribute identifiers to search for a playlist "\
-                         "title or empty to use all attributes"
-#define SCOPELIST_TEXT     "SLP scopes list"
-#define SCOPELIST_LONGTEXT "This string is a comma separated list of scope " \
-                           "names or empty if you want to use the default "  \
-                           "scopes; it is used in all SLP queries"
-#define NAMINGAUTHORITY_TEXT     "SLP naming authority"
-#define NAMINGAUTHORITY_LONGTEXT "This string is a list of naming " \
-                                 "authorities to search. Use \"*\" for all " \
-                                 "and the empty string for the default of " \
-                                 "IANA"
-#define FILTER_TEXT     "SLP LDAP filter"
-#define FILTER_LONGTEXT "This is a query formulated of attribute pattern " \
-                        "matching expressions in the form of an LDAPv3 "   \
-                        "search filter or empty for all answers"
-#define LANG_TEXT     "Language requested in SLP requests"
-#define LANG_LONGTEXT "RFC 1766 Language Tag for the natural language " \
-                      "locale of requests, leave empty to use the "     \
-                      "default locale; it is used in all SLP queries"
+#if 0
+#define SRVTYPE_TEXT /*N_*/("SLP service type")
+#define SRVTYPE_LONGTEXT /*N_*/( \
+    "The service type string for SLP queries, including the authority " \
+    "string (if any) for the request. May not be empty." )
+#endif
+
+#define ATTRIDS_TEXT N_("SLP attribute identifiers")
+#define ATTRIDS_LONGTEXT N_( \
+    "This string is a comma separated list of attribute identifiers to " \
+    "search for a playlist title or empty to use all attributes." )
+
+#define SCOPELIST_TEXT N_("SLP scopes list")
+#define SCOPELIST_LONGTEXT N_( \
+    "This string is a comma separated list of scope names or empty if you " \
+    "want to use the default scopes. It is used in all SLP queries." )
+
+#define NAMINGAUTHORITY_TEXT N_("SLP naming authority")
+#define NAMINGAUTHORITY_LONGTEXT N_( \
+    "This string is a list of naming authorities to search. " \
+    "Use \"*\" for all and the empty string for the default of IANA." )
+
+#define FILTER_TEXT N_("SLP LDAP filter")
+#define FILTER_LONGTEXT N_( \
+    "This is a query formulated of attribute pattern matching expressions " \
+    "in the form of an LDAPv3 search filter or empty for all answers." )
+
+#define LANG_TEXT N_("Language requested in SLP requests")
+#define LANG_LONGTEXT N_( \
+    "RFC 1766 Language tag for the natural language locale of requests, " \
+    "leave empty to use the default locale. It is used in all SLP queries." )
 
 vlc_module_begin();
     set_description( _("SLP input") );
-    add_category_hint( N_("slp"), NULL, VLC_TRUE );
-    add_string( "slp-attrids", "", NULL, ATTRIDS_TEXT, ATTRIDS_LONGTEXT, VLC_TRUE );
+
+    add_string( "slp-attrids", "", NULL, ATTRIDS_TEXT, ATTRIDS_LONGTEXT,
+                VLC_TRUE );
     add_string( "slp-scopelist", "", NULL, SCOPELIST_TEXT,
                 SCOPELIST_LONGTEXT, VLC_TRUE );
     add_string( "slp-namingauthority", "*", NULL, NAMINGAUTHORITY_TEXT,
                 NAMINGAUTHORITY_LONGTEXT, VLC_TRUE );
-    add_string( "slp-filter", "", NULL, FILTER_TEXT, FILTER_LONGTEXT, VLC_TRUE );
+    add_string( "slp-filter", "", NULL, FILTER_TEXT, FILTER_LONGTEXT,
+                VLC_TRUE );
     add_string( "slp-lang", "", NULL, LANG_TEXT, LANG_LONGTEXT, VLC_TRUE );
+
     set_capability( "access", 0 );
     set_callbacks( Open, Close );
 
@@ -123,7 +132,10 @@ static SLPBoolean AttrCallback( SLPHandle slph_slp,
         return SLP_TRUE;
     }
 
-    p_playlist_item->psz_name = strdup(psz_attrlist);     /* NULL is checked */
+    if( p_playlist_item->input.psz_name )
+        free( p_playlist_item->input.psz_name );
+
+    p_playlist_item->input.psz_name = strdup(psz_attrlist); /* NULL is checked */
     return SLP_TRUE;
 }
 
@@ -136,7 +148,7 @@ static SLPBoolean SrvUrlCallback( SLPHandle slph_slp,
                            SLPError slpe_errcode,
                            void * p_cookie )
 {
-    input_thread_t * p_input = (input_thread_t  *)p_cookie;
+    input_thread_t *p_input = (input_thread_t  *)p_cookie;
     playlist_t * p_playlist;
     char psz_item[42] = ""; //"udp:@";
     char * psz_s;                           /* to hold the uri of the stream */
@@ -150,15 +162,13 @@ static SLPBoolean SrvUrlCallback( SLPHandle slph_slp,
         return SLP_TRUE;
     }
 
-    msg_Dbg(p_input,"URL: %s",psz_srvurl);
+    msg_Dbg( p_input,"URL: %s", psz_srvurl );
 
     /* or there was a problem with getting the data we requested */
     if( (slpe_errcode != SLP_OK) )
     {
-        msg_Err( p_input,
-                 "SrvUrlCallback got an error %i with URL %s",
-                 slpe_errcode,
-                 psz_srvurl );
+        msg_Err( p_input, "SrvUrlCallback got an error %i with URL %s",
+                 slpe_errcode, psz_srvurl );
         return SLP_TRUE;
     }
 
@@ -166,7 +176,7 @@ static SLPBoolean SrvUrlCallback( SLPHandle slph_slp,
     psz_s = strstr( psz_srvurl, "//" );
     if( psz_s == NULL )
     {
-        msg_Err( (input_thread_t *)p_input,
+        msg_Err( p_input,
                  "SrvUrlCallback got a strange string of your libslp" );
         return SLP_TRUE;
     }
@@ -178,22 +188,15 @@ static SLPBoolean SrvUrlCallback( SLPHandle slph_slp,
                      sizeof(psz_item) - strlen(psz_item) - 1 );
 
     /* create a playlist  item */
-    p_playlist_item = malloc( sizeof( playlist_item_t ) );
+    p_playlist_item = playlist_ItemNew( p_input, psz_s, NULL );
     if( p_playlist_item == NULL )
     {
         msg_Err( p_input, "out of memory" );
         return SLP_TRUE;
     }
 
-    p_playlist_item->psz_name = NULL;
-    p_playlist_item->psz_uri  = strdup( psz_s );
-    p_playlist_item->i_status = 0;
-    p_playlist_item->b_autodeletion = VLC_FALSE;
-    p_playlist_item->i_duration = -1;
     p_playlist_item->i_group = i_group;
     p_playlist_item->b_enabled = VLC_TRUE;
-    p_playlist_item->pp_categories = NULL;
-    p_playlist_item->i_categories = NULL;
 
     /* search the description of the stream */
     if( SLPOpen( config_GetPsz( p_input, "slp-lang" ),
@@ -213,33 +216,21 @@ static SLPBoolean SrvUrlCallback( SLPHandle slph_slp,
         SLPClose( slph_slp3 );
     }
 
-    /* add a default name if we found no attribute */
-    if( p_playlist_item->psz_name == NULL )
-    {
-        p_playlist_item->psz_name = strdup( psz_s );
-    }
-
     /* search the main playlist object */
-    p_playlist = vlc_object_find( (input_thread_t *)p_input,
-                                  VLC_OBJECT_PLAYLIST,
+    p_playlist = vlc_object_find( p_input, VLC_OBJECT_PLAYLIST,
                                   FIND_ANYWHERE );
     if( p_playlist == NULL )
     {
-        msg_Warn( (input_thread_t *)p_input,
-                  "could not find playlist, not adding entries" );
+        msg_Warn( p_input, "could not find playlist, not adding entries" );
         return SLP_TRUE;
     }
 
-    playlist_AddItem( p_playlist,
-                      p_playlist_item,
-                      PLAYLIST_APPEND,
-                      PLAYLIST_END );
-    vlc_object_release( (vlc_object_t *)p_playlist );
+    playlist_AddItem( p_playlist, p_playlist_item,
+                      PLAYLIST_APPEND, PLAYLIST_END );
+    vlc_object_release( p_playlist );
 
-    msg_Info( (input_thread_t *)p_input,
-             "added « %s » (lifetime %i) to playlist",
-             psz_srvurl,
-             i_lifetime );
+    msg_Info( p_input, "added « %s » (lifetime %i) to playlist",
+              psz_srvurl, i_lifetime );
 
     return SLP_TRUE;
 }
@@ -258,22 +249,20 @@ static SLPBoolean SrvTypeCallback( SLPHandle slph_slp,
     char *psz_eos;
     char *psz_service;
 
-    msg_Dbg(p_input,"Services: %s",psz_srvurl);
+    msg_Dbg( p_input, "services: %s", psz_srvurl );
     /* our callback was only called to tell us there's nothing more to read */
     if( slpe_errcode == SLP_LAST_CALL )
     {
         return SLP_TRUE;
     }
 
-    msg_Dbg(p_input,"Services: %s",psz_srvurl);
+    msg_Dbg( p_input, "services: %s", psz_srvurl );
 
     /* or there was a problem with getting the data we requested */
     if( slpe_errcode != SLP_OK )
     {
-        msg_Err( p_input,
-                 "SrvTypeCallback got an error %i with URL %s",
-                 slpe_errcode,
-                 psz_srvurl );
+        msg_Err( p_input, "SrvTypeCallback got an error %i with URL %s",
+                 slpe_errcode, psz_srvurl );
         return SLP_TRUE;
     }
 
@@ -301,7 +290,7 @@ static SLPBoolean SrvTypeCallback( SLPHandle slph_slp,
 
                 psz_service = strdup( psz_srvurl);
 
-                msg_Dbg(p_input,"Getting details for %s",psz_service);
+                msg_Dbg( p_input, "getting details for %s", psz_service );
 
                 slpe_result = SLPFindSrvs( slph_slp2,
                                    psz_service,
@@ -320,8 +309,7 @@ static SLPBoolean SrvTypeCallback( SLPHandle slph_slp,
                 {
                    msg_Err( p_input,
                            "SLPFindSrvs error %i finding servers of type %s",
-                           slpe_result,
-                           psz_service );
+                           slpe_result, psz_service );
                 }
             }
             psz_srvurl++;
@@ -446,4 +434,3 @@ static void End ( vlc_object_t *p_this )
 {
     return;
 }
-