static int OpenDemux ( vlc_object_t * );
static void CloseDemux ( vlc_object_t * );
-vlc_module_begin();
- set_shortname( N_("SAP"));
- set_description( N_("SAP Announcements") );
- set_category( CAT_PLAYLIST );
- set_subcategory( SUBCAT_PLAYLIST_SD );
+vlc_module_begin ()
+ set_shortname( N_("SAP"))
+ set_description( N_("SAP Announcements") )
+ set_category( CAT_PLAYLIST )
+ set_subcategory( SUBCAT_PLAYLIST_SD )
add_string( "sap-addr", NULL, NULL,
SAP_ADDR_TEXT, SAP_ADDR_LONGTEXT, true );
add_bool( "sap-timeshift", 0 , NULL,
SAP_TIMESHIFT_TEXT,SAP_TIMESHIFT_LONGTEXT, true );
- set_capability( "services_discovery", 0 );
- set_callbacks( Open, Close );
+ set_capability( "services_discovery", 0 )
+ set_callbacks( Open, Close )
- add_submodule();
- set_description( N_("SDP Descriptions parser") );
- add_shortcut( "sdp" );
- set_capability( "demux", 51 );
- set_callbacks( OpenDemux, CloseDemux );
-vlc_module_end();
+ add_submodule ()
+ set_description( N_("SDP Descriptions parser") )
+ add_shortcut( "sdp" )
+ set_capability( "demux", 51 )
+ set_callbacks( OpenDemux, CloseDemux )
+vlc_module_end ()
/*****************************************************************************
struct services_discovery_sys_t
{
+ vlc_thread_t thread;
+
/* Socket descriptors */
int i_fd;
int *pi_fd;
/* Main functions */
static int Demux( demux_t *p_demux );
static int Control( demux_t *, int, va_list );
- static void Run ( services_discovery_t *p_sd );
+ static void *Run ( void *p_sd );
/* Main parsing functions */
static int ParseConnection( vlc_object_t *p_obj, sdp_t *p_sdp );
p_sys->i_timeout = var_CreateGetInteger( p_sd, "sap-timeout" );
- p_sd->pf_run = Run;
p_sd->p_sys = p_sys;
p_sys->pi_fd = NULL;
p_sys->i_announces = 0;
p_sys->pp_announces = NULL;
+ /* TODO: create sockets here, and fix racy sockets table */
+ if (vlc_clone (&p_sys->thread, Run, p_sd, VLC_THREAD_PRIORITY_LOW))
+ {
+ free (p_sys);
+ return VLC_EGENERIC;
+ }
return VLC_SUCCESS;
}
{
services_discovery_t *p_sd = ( services_discovery_t* )p_this;
services_discovery_sys_t *p_sys = p_sd->p_sys;
-
int i;
+ vlc_cancel (p_sys->thread);
+ vlc_join (p_sys->thread, NULL);
+
for( i = p_sys->i_fd-1 ; i >= 0 ; i-- )
{
net_Close( p_sys->pi_fd[i] );
*****************************************************************************/
#define MAX_SAP_BUFFER 5000
-static void Run( services_discovery_t *p_sd )
+static void *Run( void *data )
{
+ services_discovery_t *p_sd = data;
char *psz_addr;
int i;
int timeout = -1;
if( p_sd->p_sys->i_fd == 0 )
{
msg_Err( p_sd, "unable to listen on any address" );
- return;
+ return NULL;
}
/* read SAP packets */
else if( timeout < 200 )
timeout = 200; /* Don't wakeup too fast. */
}
+ assert (0);
}
/**********************************************************************
return VLC_EGENERIC;
}
- /* This item hasn't been yield by input_GetItem
+ /* This item hasn't been held by input_GetItem
* don't release it */
p_parent_input = input_GetItem( p_input );
}
assert (p_sdp->psz_sessionname == NULL); // no memleak here
p_sdp->psz_sessionname = strdup (data);
- EnsureUTF8 (p_sdp->psz_sessionname);
if (p_sdp->psz_sessionname == NULL)
goto error;
+ EnsureUTF8 (p_sdp->psz_sessionname);
break;
}