]> git.sesse.net Git - vlc/blobdiff - modules/services_discovery/sap.c
* configure.ac: alsa is now really default enabled
[vlc] / modules / services_discovery / sap.c
index ee8fcbe398a5b7d4dfdaeeb1f3fae52cc28dca20..a923eae355a3ad9832b0b45ae9d9ad0f418a4543 100644 (file)
     static void CloseDemux ( vlc_object_t * );
 
 vlc_module_begin();
-    set_description( _("SAP interface") );
+    set_shortname( _("SAP"));
+    set_description( _("SAP announces") );
     set_category( CAT_PLAYLIST );
     set_subcategory( SUBCAT_PLAYLIST_SD );
 
@@ -364,31 +365,25 @@ static int OpenDemux( vlc_object_t *p_this )
     uint8_t *p_peek;
     int i_max_sdp = 1024;
     int i_sdp = 0;
-    char *psz_sdp = (char *)malloc( i_max_sdp );
+    char *psz_sdp = NULL;
     sdp_t *p_sdp = NULL;
 
-    if( !psz_sdp )
-    {
-        return VLC_EGENERIC;
-    }
-
     /* Probe for SDP */
     if( p_demux->s )
     {
-        if( stream_Peek( p_demux->s, &p_peek, 7 ) < 7 )
-        {
-            msg_Err( p_demux, "cannot peek" );
-            return VLC_EGENERIC;
-        }
+        if( stream_Peek( p_demux->s, &p_peek, 7 ) < 7 ) return VLC_EGENERIC;
+
         if( strncmp( (char*)p_peek, "v=0\r\n", 5 ) &&
             strncmp( (char*)p_peek, "v=0\n", 4 ) &&
             ( p_peek[0] < 'a' || p_peek[0] > 'z' || p_peek[1] != '=' ) )
         {
-            msg_Warn( p_demux, "SDP (UDP) module discarded" );
             return VLC_EGENERIC;
         }
     }
 
+    psz_sdp = (char *)malloc( i_max_sdp );
+    if( !psz_sdp ) return VLC_EGENERIC;
+
     /* Gather the complete sdp file */
     for( ;; )
     {
@@ -430,7 +425,8 @@ static int OpenDemux( vlc_object_t *p_this )
     {
         p_sdp->psz_uri = NULL;
     }
-    if( p_sdp->i_media_type != 33 && p_sdp->i_media_type != 32 && p_sdp->i_media_type != 14 )
+    if( p_sdp->i_media_type != 33 && p_sdp->i_media_type != 32 &&
+        p_sdp->i_media_type != 14 )
         goto error;
 
     if( p_sdp->psz_uri == NULL ) goto error;
@@ -481,7 +477,7 @@ static void Close( vlc_object_t *p_this )
 
     if( p_playlist )
     {
-        playlist_NodeDelete( p_playlist, p_sys->p_node, VLC_TRUE );
+        playlist_NodeDelete( p_playlist, p_sys->p_node, VLC_TRUE , VLC_TRUE );
         vlc_object_release( p_playlist );
     }
 
@@ -607,7 +603,7 @@ static int Demux( demux_t *p_demux )
                  PLAYLIST_APPEND, PLAYLIST_END );
 
    vlc_object_release( p_playlist );
-    if( p_sdp ) FreeSDP( p_sdp );
+   if( p_sdp ) FreeSDP( p_sdp );
 
    return VLC_SUCCESS;
 }
@@ -638,7 +634,6 @@ static int ParseSAP( services_discovery_t *p_sd, uint8_t *p_buffer, int i_read )
 
     /* First, check the sap announce is correct */
     i_version = p_buffer[0] >> 5;
-
     if( i_version != 1 )
     {
        msg_Dbg( p_sd, "strange sap version %d found", i_version );
@@ -836,6 +831,18 @@ sap_announce_t *CreateAnnounce( services_discovery_t *p_sd, uint16_t i_hash,
         return NULL;
     }
 
+    psz_value = GetAttribute( p_sap->p_sdp, "tool" );
+    if( psz_value != NULL )
+    {
+        vlc_input_item_AddInfo( &p_item->input, _("Session"),
+                                _("Tool"), psz_value );
+    }
+    if( strcmp( p_sdp->psz_username, "-" ) )
+    {
+        vlc_input_item_AddInfo( &p_item->input, _("Session"),
+                                _("User"), p_sdp->psz_username );
+    }
+
     psz_value = GetAttribute( p_sap->p_sdp, "x-plgroup" );
 
     if( psz_value == NULL )
@@ -881,6 +888,7 @@ sap_announce_t *CreateAnnounce( services_discovery_t *p_sd, uint16_t i_hash,
     }
 
     p_item->i_flags &= ~PLAYLIST_SKIP_FLAG;
+    p_item->i_flags &= ~PLAYLIST_SAVE_FLAG;
 
     playlist_NodeAddItem( p_playlist, p_item, VIEW_CATEGORY, p_child,
                           PLAYLIST_APPEND, PLAYLIST_END );
@@ -971,7 +979,7 @@ static int ParseConnection( vlc_object_t *p_obj, sdp_t *p_sdp )
         }
         else
         {
-            msg_Dbg( p_obj, "incorrect c field");
+            msg_Dbg( p_obj, "incorrect c field, %s", p_sdp->psz_connection );
         }
         psz_uri = strdup( psz_parse );
 
@@ -1041,7 +1049,7 @@ static int ParseConnection( vlc_object_t *p_obj, sdp_t *p_sdp )
         }
         else
         {
-            msg_Dbg( p_obj, "incorrect m field");
+            msg_Dbg( p_obj, "incorrect m field, %s", p_sdp->psz_media );
             p_sdp->i_media_type = 33;
             psz_proto = strdup( psz_parse );
         }
@@ -1057,7 +1065,6 @@ static int ParseConnection( vlc_object_t *p_obj, sdp_t *p_sdp )
         free( psz_proto );
         psz_proto = strdup( "udp" );
     }
-                    
 
     /* FIXME: HTTP support */
 
@@ -1089,7 +1096,6 @@ static sdp_t *  ParseSDP( vlc_object_t *p_obj, char* psz_sdp )
     sdp_t *p_sdp;
     vlc_bool_t b_invalid = VLC_FALSE;
     vlc_bool_t b_end = VLC_FALSE;
-
     if( psz_sdp == NULL )
     {
         return NULL;