X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fservices_discovery%2Fbonjour.c;h=b4dfac3b3265ea0473677c67b84f59732e5fed24;hb=cafbe3a363e5e843fbacad5af0ebbb48254f5a3f;hp=d5826834655983ee9226de5890a0ee6a8c0c20c6;hpb=1421fa57d972c05149470d7f56e4334629c2c8d4;p=vlc diff --git a/modules/services_discovery/bonjour.c b/modules/services_discovery/bonjour.c index d582683465..b4dfac3b32 100644 --- a/modules/services_discovery/bonjour.c +++ b/modules/services_discovery/bonjour.c @@ -1,7 +1,7 @@ /***************************************************************************** * bonjour.c: Bonjour services discovery module ***************************************************************************** - * Copyright (C) 2005 the VideoLAN team + * Copyright (C) 2005-2009 the VideoLAN team * $Id$ * * Authors: Jon Lech Johansen @@ -25,16 +25,18 @@ * Includes *****************************************************************************/ -#include -#include -#include +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include +#include #include -#ifdef HAVE_AVAHI_06 -# include -# include -#endif -#include +#include +#include +#include #include #include @@ -46,14 +48,14 @@ static int Open ( vlc_object_t * ); static void Close( vlc_object_t * ); -vlc_module_begin(); - set_shortname( "Bonjour" ); - set_description( _("Bonjour services") ); - set_category( CAT_PLAYLIST ); - set_subcategory( SUBCAT_PLAYLIST_SD ); - set_capability( "services_discovery", 0 ); - set_callbacks( Open, Close ); -vlc_module_end(); +vlc_module_begin () + set_shortname( "Bonjour" ) + set_description( N_("Bonjour services") ) + set_category( CAT_PLAYLIST ) + set_subcategory( SUBCAT_PLAYLIST_SD ) + set_capability( "services_discovery", 0 ) + set_callbacks( Open, Close ) +vlc_module_end () /***************************************************************************** * Local structures @@ -61,7 +63,7 @@ vlc_module_end(); struct services_discovery_sys_t { - AvahiSimplePoll *simple_poll; + AvahiThreadedPoll *poll; AvahiClient *client; AvahiServiceBrowser *sb; vlc_dictionary_t services_name_to_input_item; @@ -71,9 +73,6 @@ struct services_discovery_sys_t * Local prototypes *****************************************************************************/ -/* Main functions */ - static void Run ( services_discovery_t *p_intf ); - /***************************************************************************** * client_callback *****************************************************************************/ @@ -83,15 +82,11 @@ static void client_callback( AvahiClient *c, AvahiClientState state, services_discovery_t *p_sd = ( services_discovery_t* )userdata; services_discovery_sys_t *p_sys = p_sd->p_sys; -#ifdef HAVE_AVAHI_06 if( state == AVAHI_CLIENT_FAILURE && (avahi_client_errno(c) == AVAHI_ERR_DISCONNECTED) ) -#else - if( state == AVAHI_CLIENT_DISCONNECTED ) -#endif { msg_Err( p_sd, "avahi client disconnected" ); - avahi_simple_poll_quit( p_sys->simple_poll ); + avahi_threaded_poll_quit( p_sys->poll ); } } @@ -110,19 +105,16 @@ static void resolve_callback( const AvahiAddress *address, uint16_t port, AvahiStringList *txt, -#ifdef HAVE_AVAHI_06 AvahiLookupResultFlags flags, -#endif void* userdata ) { services_discovery_t *p_sd = ( services_discovery_t* )userdata; services_discovery_sys_t *p_sys = p_sd->p_sys; + + VLC_UNUSED(interface); VLC_UNUSED(host_name); + VLC_UNUSED(flags); -#ifdef HAVE_AVAHI_06 if( event == AVAHI_RESOLVER_FAILURE ) -#else - if( event == AVAHI_RESOLVER_TIMEOUT ) -#endif { msg_Err( p_sd, "failed to resolve service '%s' of type '%s' in domain '%s'", @@ -176,13 +168,12 @@ static void resolve_callback( } } - if( psz_addr != NULL ) - free( (void *)psz_addr ); + free( psz_addr ); if( psz_uri != NULL ) { - p_input = input_ItemNewExt( p_sd, psz_uri, name, 0, NULL, -1 ); - free( (void *)psz_uri ); + p_input = input_item_New( p_sd, psz_uri, name ); + free( psz_uri ); } if( p_input != NULL ) { @@ -207,20 +198,18 @@ static void browse_callback( const char *name, const char *type, const char *domain, -#ifdef HAVE_AVAHI_06 AvahiLookupResultFlags flags, -#endif void* userdata ) { + VLC_UNUSED(b); + VLC_UNUSED(flags); services_discovery_t *p_sd = ( services_discovery_t* )userdata; services_discovery_sys_t *p_sys = p_sd->p_sys; if( event == AVAHI_BROWSER_NEW ) { if( avahi_service_resolver_new( p_sys->client, interface, protocol, name, type, domain, AVAHI_PROTO_UNSPEC, -#ifdef HAVE_AVAHI_06 0, -#endif resolve_callback, userdata ) == NULL ) { msg_Err( p_sd, "failed to resolve service '%s': %s", name, @@ -241,7 +230,7 @@ static void browse_callback( services_discovery_RemoveItem( p_sd, p_item ); vlc_dictionary_remove_value_for_key( &p_sys->services_name_to_input_item, - name ); + name, NULL, NULL ); } } } @@ -255,30 +244,21 @@ static int Open( vlc_object_t *p_this ) services_discovery_sys_t *p_sys; int err; - p_sd->p_sys = p_sys = (services_discovery_sys_t *)malloc( - sizeof( services_discovery_sys_t ) ); - if( p_sd->p_sys == NULL ) - { - msg_Err( p_sd, "out of memory" ); - return VLC_EGENERIC; - } - - memset( p_sys, 0, sizeof(*p_sys) ); + p_sd->p_sys = p_sys = calloc( 1, sizeof( services_discovery_sys_t ) ); + if( !p_sys ) + return VLC_ENOMEM; vlc_dictionary_init( &p_sys->services_name_to_input_item, 1 ); - p_sys->simple_poll = avahi_simple_poll_new(); - if( p_sys->simple_poll == NULL ) + p_sys->poll = avahi_threaded_poll_new(); + if( p_sys->poll == NULL ) { - msg_Err( p_sd, "failed to create avahi simple poll" ); + msg_Err( p_sd, "failed to create Avahi threaded poll" ); goto error; } - p_sys->client = avahi_client_new( avahi_simple_poll_get(p_sys->simple_poll), -#ifdef HAVE_AVAHI_06 - 0, -#endif - client_callback, p_sd, &err ); + p_sys->client = avahi_client_new( avahi_threaded_poll_get(p_sys->poll), + 0, client_callback, p_sd, &err ); if( p_sys->client == NULL ) { msg_Err( p_sd, "failed to create avahi client: %s", @@ -289,20 +269,13 @@ static int Open( vlc_object_t *p_this ) p_sys->sb = avahi_service_browser_new( p_sys->client, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, "_vlc-http._tcp", NULL, -#ifdef HAVE_AVAHI_06 - 0, -#endif - browse_callback, p_sd ); + 0, browse_callback, p_sd ); if( p_sys->sb == NULL ) { msg_Err( p_sd, "failed to create avahi service browser" ); goto error; } - services_discovery_SetLocalizedName( p_sd, _("Bonjour") ); - - p_sd->pf_run = Run; - return VLC_SUCCESS; error: @@ -310,10 +283,10 @@ error: avahi_service_browser_free( p_sys->sb ); if( p_sys->client != NULL ) avahi_client_free( p_sys->client ); - if( p_sys->simple_poll != NULL ) - avahi_simple_poll_free( p_sys->simple_poll ); + if( p_sys->poll != NULL ) + avahi_threaded_poll_free( p_sys->poll ); - vlc_dictionary_clear( &p_sys->services_name_to_input_item ); + vlc_dictionary_clear( &p_sys->services_name_to_input_item, NULL, NULL ); free( p_sys ); return VLC_EGENERIC; @@ -329,25 +302,8 @@ static void Close( vlc_object_t *p_this ) avahi_service_browser_free( p_sys->sb ); avahi_client_free( p_sys->client ); - avahi_simple_poll_free( p_sys->simple_poll ); + avahi_threaded_poll_free( p_sys->poll ); - vlc_dictionary_clear( &p_sys->services_name_to_input_item ); + vlc_dictionary_clear( &p_sys->services_name_to_input_item, NULL, NULL ); free( p_sys ); } - -/***************************************************************************** - * Run: main thread - *****************************************************************************/ -static void Run( services_discovery_t *p_sd ) -{ - services_discovery_sys_t *p_sys = p_sd->p_sys; - - while( !p_sd->b_die ) - { - if( avahi_simple_poll_iterate( p_sys->simple_poll, 100 ) != 0 ) - { - msg_Err( p_sd, "poll iterate failed" ); - break; - } - } -}