# include "config.h"
#endif
-#include <vlc/vlc.h>
+#include <vlc_common.h>
#include <stdlib.h> /* free() */
#include <stdio.h> /* sprintf() */
/*****************************************************************************
* Local prototypes
*****************************************************************************/
-static void RunThread( vlc_object_t *p_this);
+static void * RunThread( vlc_object_t *p_this);
static int ComputeRate( sap_address_t *p_address );
static int announce_SendSAPAnnounce( sap_handler_t *p_sap,
p_sap = vlc_custom_create( VLC_OBJECT(p_announce), sizeof( sap_handler_t ),
VLC_OBJECT_ANNOUNCE, "announce" );
if( !p_sap )
- {
- msg_Err( p_announce, "out of memory" );
return NULL;
- }
- p_sap->psz_object_name = "sap announcer";
-
- vlc_mutex_init( p_sap, &p_sap->object_lock );
+ p_sap->psz_object_name = strdup( "sap announcer" );
p_sap->pf_add = announce_SAPAnnounceAdd;
p_sap->pf_del = announce_SAPAnnounceDel;
* \param p_this the SAP Handler object
* \return nothing
*/
-static void RunThread( vlc_object_t *p_this)
+static void * RunThread( vlc_object_t *p_this)
{
sap_handler_t *p_sap = (sap_handler_t*)p_this;
sap_session_t *p_session;
{
int i;
+ msleep( SAP_IDLE );
+
/* If needed, get the rate info */
if( p_sap->b_control == true )
{
}
/* Find the session to announce */
- vlc_mutex_lock( &p_sap->object_lock );
+ vlc_object_lock( p_sap );
if( p_sap->i_sessions > p_sap->i_current_session + 1)
{
p_sap->i_current_session++;
}
else
{
- vlc_mutex_unlock( &p_sap->object_lock );
- msleep( SAP_IDLE );
+ vlc_object_unlock( p_sap );
continue;
}
p_session = p_sap->pp_sessions[p_sap->i_current_session];
- vlc_mutex_unlock( &p_sap->object_lock );
/* And announce it */
if( p_session->p_address->b_enabled == true &&
{
announce_SendSAPAnnounce( p_sap, p_session );
}
-
- msleep( SAP_IDLE );
+ vlc_object_unlock( p_sap );
}
+ return NULL;
}
/* Add a SAP announce */
struct sockaddr_storage addr;
socklen_t addrlen;
- vlc_mutex_lock( &p_sap->object_lock );
+ vlc_object_lock( p_sap );
addrlen = p_session->addrlen;
if ((addrlen == 0) || (addrlen > sizeof (addr)))
{
- vlc_mutex_unlock( &p_sap->object_lock );
+ vlc_object_unlock( p_sap );
msg_Err( p_sap, "No/invalid address specified for SAP announce" );
return VLC_EGENERIC;
}
{
msg_Err( p_sap, "Out-of-scope multicast address "
"not supported by SAP" );
- vlc_mutex_unlock( &p_sap->object_lock );
+ vlc_object_unlock( p_sap );
return VLC_EGENERIC;
}
}
default:
- vlc_mutex_unlock( &p_sap->object_lock );
+ vlc_object_unlock( p_sap );
msg_Err( p_sap, "Address family %d not supported by SAP",
addr.ss_family );
return VLC_EGENERIC;
if( i )
{
- vlc_mutex_unlock( &p_sap->object_lock );
+ vlc_object_unlock( p_sap );
msg_Err( p_sap, "%s", vlc_gai_strerror( i ) );
return VLC_EGENERIC;
}
malloc( sizeof(sap_address_t) );
if( !p_address )
{
- vlc_mutex_unlock( &p_sap->object_lock );
+ vlc_object_unlock( p_sap );
return VLC_ENOMEM;
}
p_address->psz_address = strdup( psz_addr );
default:
msg_Err( p_sap, "Address family %d not supported by SAP",
addr.ss_family );
- vlc_mutex_unlock( &p_sap->object_lock );
+ vlc_object_unlock( p_sap );
return VLC_EGENERIC;
}
if (p_sap_session->psz_data == NULL)
{
free (p_session->psz_sdp);
- vlc_mutex_unlock( &p_sap->object_lock );
+ vlc_object_unlock( p_sap );
return VLC_ENOMEM;
}
msg_Dbg( p_sap,"%i addresses, %i sessions",
p_sap->i_addresses,p_sap->i_sessions);
- vlc_mutex_unlock( &p_sap->object_lock );
+ vlc_object_unlock( p_sap );
return VLC_SUCCESS;
}
session_descriptor_t *p_session )
{
int i;
- vlc_mutex_lock( &p_sap->object_lock );
+ vlc_object_lock( p_sap );
msg_Dbg( p_sap, "removing session %p from SAP", p_session);
{
if( p_session == p_sap->pp_sessions[i]->p_sd )
{
+ free( p_session->psz_sdp );
sap_session_t *p_mysession = p_sap->pp_sessions[i];
REMOVE_ELEM( p_sap->pp_sessions,
p_sap->i_sessions,
msg_Dbg( p_sap,"%i announcements remaining", p_sap->i_sessions );
- vlc_mutex_unlock( &p_sap->object_lock );
+ vlc_object_unlock( p_sap );
return VLC_SUCCESS;
}