#define SAP_IPV4_TEXT N_( "IPv4-SAP listening" )
#define SAP_IPV4_LONGTEXT N_( \
"Set this if you want the SAP module to listen to IPv4 announces " \
- "on the standard address" )
+ "on the standard address." )
#define SAP_IPV6_TEXT N_( "IPv6-SAP listening" )
#define SAP_IPV6_LONGTEXT N_( \
"Set this if you want the SAP module to listen to IPv6 announces " \
- "on the standard address" )
+ "on the standard address." )
#define SAP_SCOPE_TEXT N_( "IPv6 SAP scope" )
#define SAP_SCOPE_LONGTEXT N_( \
- "Sets the scope for IPv6 announces (default is 8)" )
+ "Sets the scope for IPv6 announces (default is 8)." )
#define SAP_TIMEOUT_TEXT N_( "SAP timeout (seconds)" )
#define SAP_TIMEOUT_LONGTEXT N_( \
"Sets the time before SAP items get deleted if no new announce " \
#define SAP_PARSE_TEXT N_( "Try to parse the SAP" )
#define SAP_PARSE_LONGTEXT N_( \
"When SAP can it will try to parse the SAP. If you don't select " \
- "this, all announces will be parsed by the livedotcom module" )
+ "this, all announces will be parsed by the livedotcom module." )
#define SAP_STRICT_TEXT N_( "SAP Strict mode" )
#define SAP_STRICT_LONGTEXT N_( \
"When this is set, the SAP parser will discard some non-compliant " \
- "announces" )
+ "announces." )
#define SAP_CACHE_TEXT N_("Use SAP cache")
#define SAP_CACHE_LONGTEXT N_( \
- "If this option is selected, a SAP caching mechanism will be used." \
+ "If this option is selected, a SAP caching mechanism will be used. " \
"This will result in lower SAP startup time, but you could end up " \
"with items corresponding to legacy streams." )
/* playlist node */
playlist_item_t *p_node;
+ playlist_t *p_playlist;
/* charset conversion */
vlc_iconv_t iconvHandle;
services_discovery_sys_t *p_sys = (services_discovery_sys_t *)
malloc( sizeof( services_discovery_sys_t ) );
- playlist_t *p_playlist;
playlist_view_t *p_view;
char *psz_addr, *psz_charset;
vlc_value_t val;
}
/* Create our playlist node */
- p_playlist = (playlist_t *)vlc_object_find( p_sd, VLC_OBJECT_PLAYLIST,
- FIND_ANYWHERE );
- if( !p_playlist )
+ p_sys->p_playlist = (playlist_t *)vlc_object_find( p_sd,
+ VLC_OBJECT_PLAYLIST,
+ FIND_ANYWHERE );
+ if( !p_sys->p_playlist )
{
msg_Warn( p_sd, "unable to find playlist, cancelling SAP listening");
return VLC_EGENERIC;
}
- p_view = playlist_ViewFind( p_playlist, VIEW_CATEGORY );
- p_sys->p_node = playlist_NodeCreate( p_playlist, VIEW_CATEGORY,
+ p_view = playlist_ViewFind( p_sys->p_playlist, VIEW_CATEGORY );
+ p_sys->p_node = playlist_NodeCreate( p_sys->p_playlist, VIEW_CATEGORY,
_("SAP"), p_view->p_root );
p_sys->p_node->i_flags |= PLAYLIST_RO_FLAG;
p_sys->p_node->i_flags =~ PLAYLIST_SKIP_FLAG;
val.b_bool = VLC_TRUE;
- var_Set( p_playlist, "intf-change", val );
-
- vlc_object_release( p_playlist );
+ var_Set( p_sys->p_playlist, "intf-change", val );
p_sys->i_announces = 0;
p_sys->pp_announces = NULL;
services_discovery_t *p_sd = ( services_discovery_t* )p_this;
services_discovery_sys_t *p_sys = p_sd->p_sys;
- playlist_t *p_playlist;
int i;
for( i = p_sys->i_fd-1 ; i >= 0 ; i-- )
}
FREE( p_sys->pp_announces );
- p_playlist = (playlist_t *) vlc_object_find( p_sd, VLC_OBJECT_PLAYLIST,
- FIND_ANYWHERE );
-
- if( p_playlist )
+ if( p_sys->p_playlist )
{
- playlist_NodeDelete( p_playlist, p_sys->p_node, VLC_TRUE , VLC_TRUE );
- vlc_object_release( p_playlist );
+ playlist_NodeDelete( p_sys->p_playlist, p_sys->p_node, VLC_TRUE,
+ VLC_TRUE );
+ vlc_object_release( p_sys->p_playlist );
}
vlc_iconv_close( p_sys->iconvHandle );
static void Run( services_discovery_t *p_sd )
{
- int i;
- playlist_t *p_playlist;
+ int i;
/* read SAP packets */
while( !p_sd->b_die )
{
int i_read;
- uint8_t p_buffer[MAX_SAP_BUFFER];
+ uint8_t p_buffer[MAX_SAP_BUFFER + 1];
i_read = net_Select( p_sd, p_sd->p_sys->pi_fd, NULL,
p_sd->p_sys->i_fd, p_buffer,
if( mdate() - p_sd->p_sys->pp_announces[i]->i_last > i_timeout )
{
struct sap_announce_t *p_announce;
- playlist_item_t * p_item;
p_announce = p_sd->p_sys->pp_announces[i];
/* Remove the playlist item */
- p_playlist = vlc_object_find( p_sd, VLC_OBJECT_PLAYLIST,
- FIND_ANYWHERE );
- if( p_playlist )
- {
- p_item = playlist_ItemGetById( p_playlist,
- p_announce->i_item_id );
- if( !p_item ) continue;
-
- msg_Dbg( p_sd, "Time out for %s, deleting (%i/%i)",
- p_item->input.psz_name,
- i , p_sd->p_sys->i_announces );
-
- playlist_Delete( p_playlist, p_announce->i_item_id );
- vlc_object_release( p_playlist );
- }
+ playlist_LockDelete( p_sd->p_sys->p_playlist,
+ p_announce->i_item_id );
/* Remove the sap_announce from the array */
REMOVE_ELEM( p_sd->p_sys->pp_announces,
sap_announce_t *CreateAnnounce( services_discovery_t *p_sd, uint16_t i_hash,
sdp_t *p_sdp )
{
- playlist_t *p_playlist;
playlist_item_t *p_item, *p_child;
char *psz_value;
sap_announce_t *p_sap = (sap_announce_t *)malloc(
psz_value = GetAttribute( p_sap->p_sdp, "plgroup" );
}
- p_playlist = (playlist_t *)vlc_object_find( p_sd, VLC_OBJECT_PLAYLIST,
- FIND_ANYWHERE );
- if( !p_playlist )
- {
- msg_Err( p_sd, "playlist not found" );
- free( p_sap );
- return NULL;
- }
-
if( psz_value != NULL )
{
char *psz_grp = convert_from_utf8( p_sd, psz_value );
if( p_child == NULL )
{
- p_child = playlist_NodeCreate( p_playlist, VIEW_CATEGORY,
- psz_grp, p_sd->p_sys->p_node );
+ p_child = playlist_NodeCreate( p_sd->p_sys->p_playlist,
+ VIEW_CATEGORY, psz_grp,
+ p_sd->p_sys->p_node );
p_child->i_flags =~ PLAYLIST_SKIP_FLAG;
}
free( psz_grp );
}
else
{
- vlc_object_release( p_playlist );
msg_Err( p_sd, "out of memory");
free( p_sap );
return NULL;
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 );
-
- vlc_object_release( p_playlist );
+ playlist_NodeAddItem( p_sd->p_sys->p_playlist, p_item, VIEW_CATEGORY,
+ p_child, PLAYLIST_APPEND, PLAYLIST_END );
p_sap->i_item_id = p_item->input.i_id;
}
p_sdp = (sdp_t *)malloc( sizeof( sdp_t ) );
+ if( p_sdp == NULL )
+ return NULL;
p_sdp->psz_sdp = strdup( psz_sdp );
+ if( p_sdp->psz_sdp == NULL )
+ {
+ free( p_sdp );
+ return NULL;
+ }
p_sdp->psz_sessionname = NULL;
p_sdp->psz_media = NULL;
if( psz_sdp[1] != '=' )
{
msg_Warn( p_obj, "invalid packet" ) ;
- /* MEMLEAK ! */
+ FreeSDP( p_sdp );
return NULL;
}
sap_announce_t *p_announce )
{
int i;
- playlist_t *p_playlist = (playlist_t *)vlc_object_find( p_sd,
- VLC_OBJECT_PLAYLIST, FIND_ANYWHERE );
if( p_announce->p_sdp ) FreeSDP( p_announce->p_sdp );
- if( !p_playlist )
- {
- free( p_announce );
- return VLC_EGENERIC;
- }
-
if( p_announce->i_item_id > -1 )
{
- playlist_LockDelete( p_playlist, p_announce->i_item_id );
+ playlist_LockDelete( p_sd->p_sys->p_playlist, p_announce->i_item_id );
}
for( i = 0; i< p_sd->p_sys->i_announces; i++)
}
}
- vlc_object_release( p_playlist );
-
free( p_announce );
return VLC_SUCCESS;