Commit e8367901 authored by Clément Stenac's avatar Clément Stenac

Backport of [13520]

parent 923c835c
...@@ -4299,8 +4299,10 @@ AC_ARG_ENABLE(bonjour, ...@@ -4299,8 +4299,10 @@ AC_ARG_ENABLE(bonjour,
[ --enable-bonjour Bonjour services discovery (default enabled)]) [ --enable-bonjour Bonjour services discovery (default enabled)])
if test "${enable_bonjour}" != "no" if test "${enable_bonjour}" != "no"
then then
PKG_CHECK_MODULES(BONJOUR, avahi-client >= 0.3 avahi-client < 0.6, PKG_CHECK_MODULES(BONJOUR, avahi-client >= 0.3,
[AC_DEFINE(HAVE_AVAHI_CLIENT, [], [Define if you have the avahi-client library]) [PKG_CHECK_MODULES(BONJOUR, avahi-client >= 0.6,
[AC_DEFINE(HAVE_AVAHI_06, [], [Define if you have avahi-client 0.6 or greater])],)
AC_DEFINE(HAVE_AVAHI_CLIENT, [], [Define if you have the avahi-client library])
VLC_ADD_LDFLAGS([bonjour access_output_http],[$BONJOUR_LIBS]) VLC_ADD_LDFLAGS([bonjour access_output_http],[$BONJOUR_LIBS])
VLC_ADD_CFLAGS([bonjour access_output_http],[$BONJOUR_CFLAGS]) VLC_ADD_CFLAGS([bonjour access_output_http],[$BONJOUR_CFLAGS])
VLC_ADD_PLUGINS([bonjour]) ], VLC_ADD_PLUGINS([bonjour]) ],
......
...@@ -33,6 +33,10 @@ ...@@ -33,6 +33,10 @@
#include <vlc/sout.h> #include <vlc/sout.h>
#include <avahi-client/client.h> #include <avahi-client/client.h>
#ifdef HAVE_AVAHI_06
# include <avahi-client/publish.h>
# include <avahi-client/lookup.h>
#endif
#include <avahi-common/alternative.h> #include <avahi-common/alternative.h>
#include <avahi-common/simple-watch.h> #include <avahi-common/simple-watch.h>
#include <avahi-common/malloc.h> #include <avahi-common/malloc.h>
...@@ -114,7 +118,11 @@ static int create_service( bonjour_t *p_sys ) ...@@ -114,7 +118,11 @@ static int create_service( bonjour_t *p_sys )
} }
error = avahi_entry_group_add_service( p_sys->group, AVAHI_IF_UNSPEC, error = avahi_entry_group_add_service( p_sys->group, AVAHI_IF_UNSPEC,
#ifdef HAVE_AVAHI_06
AVAHI_PROTO_UNSPEC, 0, p_sys->psz_name,
#else
AVAHI_PROTO_UNSPEC, p_sys->psz_name, AVAHI_PROTO_UNSPEC, p_sys->psz_name,
#endif
p_sys->psz_stype, NULL, NULL, p_sys->psz_stype, NULL, NULL,
p_sys->i_port, p_sys->i_port,
p_sys->psz_txt, NULL ); p_sys->psz_txt, NULL );
...@@ -155,7 +163,12 @@ static void client_callback( AvahiClient *c, ...@@ -155,7 +163,12 @@ static void client_callback( AvahiClient *c,
if( p_sys->group != NULL ) if( p_sys->group != NULL )
avahi_entry_group_reset( p_sys->group ); avahi_entry_group_reset( p_sys->group );
} }
#ifdef HAVE_AVAHI_06
else if( state == AVAHI_CLIENT_FAILURE &&
(avahi_client_errno(c) == AVAHI_ERR_DISCONNECTED) )
#else
else if( state == AVAHI_CLIENT_DISCONNECTED ) else if( state == AVAHI_CLIENT_DISCONNECTED )
#endif
{ {
msg_Err( p_sys->p_log, "avahi client disconnected" ); msg_Err( p_sys->p_log, "avahi client disconnected" );
avahi_simple_poll_quit( p_sys->simple_poll ); avahi_simple_poll_quit( p_sys->simple_poll );
...@@ -221,6 +234,9 @@ void *bonjour_start_service( vlc_object_t *p_log, char *psz_stype, ...@@ -221,6 +234,9 @@ void *bonjour_start_service( vlc_object_t *p_log, char *psz_stype,
} }
p_sys->client = avahi_client_new( avahi_simple_poll_get(p_sys->simple_poll), p_sys->client = avahi_client_new( avahi_simple_poll_get(p_sys->simple_poll),
#ifdef HAVE_AVAHI_06
0,
#endif
client_callback, p_sys, &err ); client_callback, p_sys, &err );
if( p_sys->client == NULL ) if( p_sys->client == NULL )
{ {
......
...@@ -30,6 +30,10 @@ ...@@ -30,6 +30,10 @@
#include <vlc/intf.h> #include <vlc/intf.h>
#include <avahi-client/client.h> #include <avahi-client/client.h>
#ifdef HAVE_AVAHI_06
# include <avahi-client/publish.h>
# include <avahi-client/lookup.h>
#endif
#include <avahi-common/simple-watch.h> #include <avahi-common/simple-watch.h>
#include <avahi-common/malloc.h> #include <avahi-common/malloc.h>
#include <avahi-common/error.h> #include <avahi-common/error.h>
...@@ -82,7 +86,12 @@ static void client_callback( AvahiClient *c, AvahiClientState state, ...@@ -82,7 +86,12 @@ static void client_callback( AvahiClient *c, AvahiClientState state,
services_discovery_t *p_sd = ( services_discovery_t* )userdata; services_discovery_t *p_sd = ( services_discovery_t* )userdata;
services_discovery_sys_t *p_sys = p_sd->p_sys; 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 ) if( state == AVAHI_CLIENT_DISCONNECTED )
#endif
{ {
msg_Err( p_sd, "avahi client disconnected" ); msg_Err( p_sd, "avahi client disconnected" );
avahi_simple_poll_quit( p_sys->simple_poll ); avahi_simple_poll_quit( p_sys->simple_poll );
...@@ -104,12 +113,19 @@ static void resolve_callback( ...@@ -104,12 +113,19 @@ static void resolve_callback(
const AvahiAddress *address, const AvahiAddress *address,
uint16_t port, uint16_t port,
AvahiStringList *txt, AvahiStringList *txt,
#ifdef HAVE_AVAHI_06
AvahiLookupResultFlags flags,
#endif
void* userdata ) void* userdata )
{ {
services_discovery_t *p_sd = ( services_discovery_t* )userdata; services_discovery_t *p_sd = ( services_discovery_t* )userdata;
services_discovery_sys_t *p_sys = p_sd->p_sys; services_discovery_sys_t *p_sys = p_sd->p_sys;
#ifdef HAVE_AVAHI_06
if( event == AVAHI_RESOLVER_FAILURE )
#else
if( event == AVAHI_RESOLVER_TIMEOUT ) if( event == AVAHI_RESOLVER_TIMEOUT )
#endif
{ {
msg_Err( p_sd, msg_Err( p_sd,
"failed to resolve service '%s' of type '%s' in domain '%s'", "failed to resolve service '%s' of type '%s' in domain '%s'",
...@@ -186,6 +202,9 @@ static void browse_callback( ...@@ -186,6 +202,9 @@ static void browse_callback(
const char *name, const char *name,
const char *type, const char *type,
const char *domain, const char *domain,
#ifdef HAVE_AVAHI_06
AvahiLookupResultFlags flags,
#endif
void* userdata ) void* userdata )
{ {
services_discovery_t *p_sd = ( services_discovery_t* )userdata; services_discovery_t *p_sd = ( services_discovery_t* )userdata;
...@@ -195,6 +214,9 @@ static void browse_callback( ...@@ -195,6 +214,9 @@ static void browse_callback(
{ {
if( avahi_service_resolver_new( p_sys->client, interface, protocol, if( avahi_service_resolver_new( p_sys->client, interface, protocol,
name, type, domain, AVAHI_PROTO_UNSPEC, name, type, domain, AVAHI_PROTO_UNSPEC,
#ifdef HAVE_AVAHI_06
0,
#endif
resolve_callback, userdata ) == NULL ) resolve_callback, userdata ) == NULL )
{ {
msg_Err( p_sd, "failed to resolve service '%s': %s", name, msg_Err( p_sd, "failed to resolve service '%s': %s", name,
...@@ -246,6 +268,9 @@ static int Open( vlc_object_t *p_this ) ...@@ -246,6 +268,9 @@ static int Open( vlc_object_t *p_this )
} }
p_sys->client = avahi_client_new( avahi_simple_poll_get(p_sys->simple_poll), 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 ); client_callback, p_sd, &err );
if( p_sys->client == NULL ) if( p_sys->client == NULL )
{ {
...@@ -257,6 +282,9 @@ static int Open( vlc_object_t *p_this ) ...@@ -257,6 +282,9 @@ static int Open( vlc_object_t *p_this )
p_sys->sb = avahi_service_browser_new( p_sys->client, AVAHI_IF_UNSPEC, p_sys->sb = avahi_service_browser_new( p_sys->client, AVAHI_IF_UNSPEC,
AVAHI_PROTO_UNSPEC, AVAHI_PROTO_UNSPEC,
"_vlc-http._tcp", NULL, "_vlc-http._tcp", NULL,
#ifdef HAVE_AVAHI_06
0,
#endif
browse_callback, p_sd ); browse_callback, p_sd );
if( p_sys->sb == NULL ) if( p_sys->sb == NULL )
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment