/*
* DNS-SD discovery backend for CUPS.
*
+ * Copyright © 2021 by OpenPrinting.
* Copyright © 2008-2018 by Apple Inc.
*
* Licensed under Apache License v2.0. See the file "LICENSE" for more
#include "backend-private.h"
#include <cups/array.h>
-#ifdef HAVE_DNSSD
+#ifdef HAVE_MDNSRESPONDER
# include <dns_sd.h>
-#endif /* HAVE_DNSSD */
+#endif /* HAVE_MDNSRESPONDER */
#ifdef HAVE_AVAHI
# include <avahi-client/client.h>
# include <avahi-client/lookup.h>
typedef struct
{
-#ifdef HAVE_DNSSD
+#ifdef HAVE_MDNSRESPONDER
DNSServiceRef ref; /* Service reference for query */
-#endif /* HAVE_DNSSD */
+#endif /* HAVE_MDNSRESPONDER */
#ifdef HAVE_AVAHI
AvahiRecordBrowser *ref; /* Browser for query */
#endif /* HAVE_AVAHI */
* Local functions...
*/
-#ifdef HAVE_DNSSD
+#ifdef HAVE_MDNSRESPONDER
static void browse_callback(DNSServiceRef sdRef, DNSServiceFlags flags, uint32_t interfaceIndex, DNSServiceErrorType errorCode, const char *serviceName, const char *regtype, const char *replyDomain, void *context) _CUPS_NONNULL(1,5,6,7,8);
static void browse_local_callback(DNSServiceRef sdRef, DNSServiceFlags flags, uint32_t interfaceIndex, DNSServiceErrorType errorCode, const char *serviceName, const char *regtype, const char *replyDomain, void *context) _CUPS_NONNULL(1,5,6,7,8);
-#endif /* HAVE_DNSSD */
+#endif /* HAVE_MDNSRESPONDER */
#ifdef HAVE_AVAHI
static void browse_callback(AvahiServiceBrowser *browser,
AvahiIfIndex interface,
static int compare_devices(cups_device_t *a, cups_device_t *b);
static void exec_backend(char **argv) _CUPS_NORETURN;
static cups_device_t *get_device(cups_array_t *devices, const char *serviceName, const char *regtype, const char *replyDomain) _CUPS_NONNULL(1,2,3,4);
-#ifdef HAVE_DNSSD
+#ifdef HAVE_MDNSRESPONDER
static void query_callback(DNSServiceRef sdRef, DNSServiceFlags flags, uint32_t interfaceIndex, DNSServiceErrorType errorCode, const char *fullName, uint16_t rrtype, uint16_t rrclass, uint16_t rdlen, const void *rdata, uint32_t ttl, void *context) _CUPS_NONNULL(1,5,9,11);
#elif defined(HAVE_AVAHI)
static int poll_callback(struct pollfd *pollfds,
size_t rdlen,
AvahiLookupResultFlags flags,
void *context);
-#endif /* HAVE_DNSSD */
+#endif /* HAVE_MDNSRESPONDER */
static void sigterm_handler(int sig);
static void unquote(char *dst, const char *src, size_t dstsize) _CUPS_NONNULL(1,2);
cups_array_t *devices; /* Device array */
cups_device_t *device; /* Current device */
char uriName[1024]; /* Unquoted fullName for URI */
-#ifdef HAVE_DNSSD
+#ifdef HAVE_MDNSRESPONDER
int fd; /* Main file descriptor */
fd_set input; /* Input set for select() */
struct timeval timeout; /* Timeout for select() */
pdl_datastream_ref, /* AppSocket service reference */
printer_ref, /* LPD service reference */
riousbprint_ref; /* Remote IO service reference */
-#endif /* HAVE_DNSSD */
+#endif /* HAVE_MDNSRESPONDER */
#ifdef HAVE_AVAHI
AvahiClient *client; /* Client information */
int error; /* Error code, if any */
* Browse for different kinds of printers...
*/
-#ifdef HAVE_DNSSD
+#ifdef HAVE_MDNSRESPONDER
if (DNSServiceCreateConnection(&main_ref) != kDNSServiceErr_NoError)
{
perror("ERROR: Unable to create service connection");
riousbprint_ref = main_ref;
DNSServiceBrowse(&riousbprint_ref, kDNSServiceFlagsShareConnection, 0,
"_riousbprint._tcp", NULL, browse_callback, devices);
-#endif /* HAVE_DNSSD */
+#endif /* HAVE_MDNSRESPONDER */
#ifdef HAVE_AVAHI
if ((simple_poll = avahi_simple_poll_new()) == NULL)
{
int announce = 0; /* Announce printers? */
-#ifdef HAVE_DNSSD
+#ifdef HAVE_MDNSRESPONDER
FD_ZERO(&input);
FD_SET(fd, &input);
if (!got_data)
announce = 1;
-#endif /* HAVE_DNSSD */
+#endif /* HAVE_MDNSRESPONDER */
/* fprintf(stderr, "DEBUG: announce=%d\n", announce);*/
* Announce any devices we've found...
*/
-#ifdef HAVE_DNSSD
+#ifdef HAVE_MDNSRESPONDER
DNSServiceErrorType status; /* DNS query status */
-#endif /* HAVE_DNSSD */
+#endif /* HAVE_MDNSRESPONDER */
cups_device_t *best; /* Best matching device */
char device_uri[1024]; /* Device URI */
int count; /* Number of queries */
{
fprintf(stderr, "DEBUG: Querying \"%s\"...\n", device->fullName);
-#ifdef HAVE_DNSSD
+#ifdef HAVE_MDNSRESPONDER
device->ref = main_ref;
status = DNSServiceQueryRecord(&(device->ref),
}
else if (!device->sent)
{
-#ifdef HAVE_DNSSD
+#ifdef HAVE_MDNSRESPONDER
/*
* Got the TXT records, now report the device...
*/
DNSServiceRefDeallocate(device->ref);
#else
avahi_record_browser_free(device->ref);
-#endif /* HAVE_DNSSD */
+#endif /* HAVE_MDNSRESPONDER */
device->ref = NULL;
}
-#ifdef HAVE_DNSSD
+#ifdef HAVE_MDNSRESPONDER
/*
* 'browse_callback()' - Browse devices.
*/
device->fullName);
device->sent = 1;
}
-#endif /* HAVE_DNSSD */
+#endif /* HAVE_MDNSRESPONDER */
#ifdef HAVE_AVAHI
free(device->domain);
device->domain = strdup(replyDomain);
-#ifdef HAVE_DNSSD
+#ifdef HAVE_MDNSRESPONDER
DNSServiceConstructFullName(fullName, device->name, regtype,
replyDomain);
#else /* HAVE_AVAHI */
avahi_service_name_join(fullName, kDNSServiceMaxDomainName,
serviceName, regtype, replyDomain);
-#endif /* HAVE_DNSSD */
+#endif /* HAVE_MDNSRESPONDER */
free(device->fullName);
device->fullName = strdup(fullName);
* Set the "full name" of this service, which is used for queries...
*/
-#ifdef HAVE_DNSSD
+#ifdef HAVE_MDNSRESPONDER
DNSServiceConstructFullName(fullName, serviceName, regtype, replyDomain);
#else /* HAVE_AVAHI */
avahi_service_name_join(fullName, kDNSServiceMaxDomainName, serviceName, regtype, replyDomain);
-#endif /* HAVE_DNSSD */
+#endif /* HAVE_MDNSRESPONDER */
device->fullName = strdup(fullName);
#endif /* HAVE_AVAHI */
-#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
-# ifdef HAVE_DNSSD
+#ifdef HAVE_DNSSD
+# ifdef HAVE_MDNSRESPONDER
/*
* 'query_callback()' - Process query data.
*/
{
AvahiClient *client = avahi_record_browser_get_client(browser);
/* Client information */
-# endif /* HAVE_DNSSD */
+# endif /* HAVE_MDNSRESPONDER */
char *ptr; /* Pointer into string */
cups_device_t *device = (cups_device_t *)context;
/* Device */
device_id[2048]; /* 1284 device ID */
-# ifdef HAVE_DNSSD
+# ifdef HAVE_MDNSRESPONDER
fprintf(stderr, "DEBUG2: query_callback(sdRef=%p, flags=%x, "
"interfaceIndex=%d, errorCode=%d, fullName=\"%s\", "
"rrtype=%u, rrclass=%u, rdlen=%u, rdata=%p, ttl=%u, "
return;
}
-# endif /* HAVE_DNSSD */
+# endif /* HAVE_MDNSRESPONDER */
/*
* Pull out the priority and make and model from the TXT
else
device->make_and_model = strdup(model);
}
-#endif /* HAVE_DNSSD || HAVE_AVAHI */
+#endif /* HAVE_DNSSD */
/*
dnl
dnl DNS Service Discovery (aka Bonjour) stuff for CUPS.
dnl
+dnl Copyright © 2021 by OpenPrinting.
dnl Copyright © 2007-2019 by Apple Inc.
dnl
dnl Licensed under Apache License v2.0. See the file "LICENSE" for more
dnl information.
dnl
-AC_ARG_ENABLE(avahi, [ --disable-avahi disable DNS Service Discovery support using Avahi])
-AC_ARG_ENABLE(dnssd, [ --disable-dnssd disable DNS Service Discovery support using mDNSResponder])
-AC_ARG_WITH(dnssd-libs, [ --with-dnssd-libs set directory for DNS Service Discovery library],
- LDFLAGS="-L$withval $LDFLAGS"
- DSOFLAGS="-L$withval $DSOFLAGS",)
-AC_ARG_WITH(dnssd-includes, [ --with-dnssd-includes set directory for DNS Service Discovery includes],
- CFLAGS="-I$withval $CFLAGS"
- CPPFLAGS="-I$withval $CPPFLAGS",)
+AC_ARG_WITH([dnssd], AS_HELP_STRING([--with-dnssd=...], [enable DNS Service Discovery support (avahi, mdnsresponder, no, yes)]))
+AS_IF([test x$with_dnssd = x], [
+ with_dnssd="yes"
+], [test "$with_dnssd" != avahi -a "$with_dnssd" != mdnsresponder -a "$with_dnssd" != no -a "$with_dnssd" != yes], [
+ AC_MSG_ERROR([Unsupported --with-dnssd value "$with_dnssd".])
+])
+AC_ARG_WITH([dnssd_libs], AS_HELP_STRING([--with-dnssd-libs], [set directory for DNS Service Discovery library]), [
+ LDFLAGS="-L$withval $LDFLAGS"
+ DSOFLAGS="-L$withval $DSOFLAGS"
+])
+AC_ARG_WITH([dnssd_includes], AS_HELP_STRING([--with-dnssd-includes], [set directory for DNS Service Discovery header files]), [
+ CFLAGS="-I$withval $CFLAGS"
+ CPPFLAGS="-I$withval $CPPFLAGS"
+])
DNSSDLIBS=""
DNSSD_BACKEND=""
IPPFIND_BIN=""
IPPFIND_MAN=""
-if test "x$PKGCONFIG" != x -a x$enable_avahi != xno -a x$host_os_name != xdarwin; then
- AC_MSG_CHECKING(for Avahi)
- if $PKGCONFIG --exists avahi-client; then
- AC_MSG_RESULT(yes)
+dnl First try using mDNSResponder...
+AS_IF([test $with_dnssd = yes -o $with_dnssd = mdnsresponder], [
+ AC_CHECK_HEADER([dns_sd.h], [
+ AS_CASE(["$host_os_name"], [darwin*], [
+ # Darwin and macOS...
+ AC_DEFINE([HAVE_DNSSD], [1], [Have DNS-SD support?])
+ AC_DEFINE([HAVE_MDNSRESPONDER], [1], [Have mDNSResponder library?])
+ DNSSD_BACKEND="dnssd"
+ IPPFIND_BIN="ippfind"
+ IPPFIND_MAN="ippfind.1"
+ ], [*], [
+ # All others...
+ AC_MSG_CHECKING([for current version of dns_sd library])
+ SAVELIBS="$LIBS"
+ LIBS="$LIBS -ldns_sd"
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[#include <dns_sd.h>]], [[
+ int constant = kDNSServiceFlagsShareConnection;
+ unsigned char txtRecord[100];
+ uint8_t valueLen;
+ TXTRecordGetValuePtr(sizeof(txtRecord), txtRecord, "value", &valueLen);
+ ]])
+ ], [
+ AC_MSG_RESULT([yes])
+ AC_DEFINE([HAVE_DNSSD], [1], [Have DNS-SD support?])
+ AC_DEFINE([HAVE_MDNSRESPONDER], [1], [Have mDNSResponder library?])
+ DNSSDLIBS="-ldns_sd"
+ DNSSD_BACKEND="dnssd"
+ IPPFIND_BIN="ippfind"
+ IPPFIND_MAN="ippfind.1"
+ ], [
+ AC_MSG_RESULT([no])
+ AS_IF([test $with_dnssd = mdnsresponder], [
+ AC_MSG_ERROR([--with-dnssd=mdnsresponder specified but dns_sd library not present.])
+ ])
+ ])
+ LIBS="$SAVELIBS"
+ ])
+ ])
+])
+
+dnl Then try Avahi...
+AS_IF([test "x$DNSSD_BACKEND" = x], [
+ AS_IF([test $with_dnssd = avahi -o $with_dnssd = yes], [
+ AS_IF([test "x$PKGCONFIG" = x], [
+ AS_IF([test $with_dnssd = avahi], [
+ AC_MSG_ERROR([Avahi requires pkg-config.])
+ ])
+ ], [
+ AC_MSG_CHECKING([for Avahi client])
+ AS_IF([$PKGCONFIG --exists avahi-client], [
+ AC_MSG_RESULT([yes])
CFLAGS="$CFLAGS `$PKGCONFIG --cflags avahi-client`"
DNSSDLIBS="`$PKGCONFIG --libs avahi-client`"
DNSSD_BACKEND="dnssd"
IPPFIND_BIN="ippfind"
IPPFIND_MAN="ippfind.1"
- AC_DEFINE(HAVE_AVAHI)
- else
- AC_MSG_RESULT(no)
- fi
-fi
-
-if test "x$DNSSD_BACKEND" = x -a x$enable_dnssd != xno; then
- AC_CHECK_HEADER(dns_sd.h, [
- case "$host_os_name" in
- darwin*)
- # Darwin and macOS...
- AC_DEFINE(HAVE_DNSSD)
- DNSSD_BACKEND="dnssd"
- IPPFIND_BIN="ippfind"
- IPPFIND_MAN="ippfind.1"
- ;;
- *)
- # All others...
- AC_MSG_CHECKING(for current version of dns_sd library)
- SAVELIBS="$LIBS"
- LIBS="$LIBS -ldns_sd"
- AC_TRY_COMPILE([#include <dns_sd.h>],
- [int constant = kDNSServiceFlagsShareConnection;
- unsigned char txtRecord[100];
- uint8_t valueLen;
- TXTRecordGetValuePtr(sizeof(txtRecord),
- txtRecord, "value", &valueLen);],
- AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_DNSSD)
- DNSSDLIBS="-ldns_sd"
- DNSSD_BACKEND="dnssd"
- IPPFIND_BIN="ippfind"
- IPPFIND_MAN="ippfind.1",
- AC_MSG_RESULT(no))
- LIBS="$SAVELIBS"
- ;;
- esac
+ AC_DEFINE([HAVE_AVAHI], [1], [Have Avahi client library?])
+ AC_DEFINE([HAVE_DNSSD], [1], [Have DNS-SD support?])
+ ], [
+ AC_MSG_RESULT([no])
+ AS_IF([test $with_dnssd = avahi], [
+ AC_MSG_ERROR([--with-dnssd=avahi specified but Avahi client not present.])
+ ])
+ ])
])
-fi
+ ])
+])
-AC_SUBST(DNSSDLIBS)
-AC_SUBST(DNSSD_BACKEND)
-AC_SUBST(IPPFIND_BIN)
-AC_SUBST(IPPFIND_MAN)
+AC_SUBST([DNSSDLIBS])
+AC_SUBST([DNSSD_BACKEND])
+AC_SUBST([IPPFIND_BIN])
+AC_SUBST([IPPFIND_MAN])
/*
- * Do we have mDNSResponder for DNS Service Discovery (aka Bonjour)?
+ * Do we have DNS Service Discovery (aka Bonjour) support?
*/
#undef HAVE_DNSSD
/*
- * Do we have Avahi for DNS Service Discovery (aka Bonjour)?
+ * Do we have mDNSResponder for DNS-SD?
+ */
+
+#undef HAVE_MDNSRESPONDER
+
+
+/*
+ * Do we have Avahi for DNS-SD?
*/
#undef HAVE_AVAHI
enable_pam
with_pam_module
enable_largefile
-enable_avahi
-enable_dnssd
+with_dnssd
with_dnssd_libs
with_dnssd_includes
enable_snapped_cupsd
--enable-gnutls use GNU TLS for SSL/TLS support, default=second
--disable-pam disable PAM support
--disable-largefile omit support for large files
- --disable-avahi disable DNS Service Discovery support using Avahi
- --disable-dnssd disable DNS Service Discovery support using mDNSResponder
--enable-snapped-cupsd enable support for packaging CUPS in a Snap
--enable-snapped-clients enable support for CUPS controlling admin access from snapped clients
--disable-launchd disable launchd support
--with-domainsocket set unix domain socket name
--with-gssservicename set default gss service name
--with-pam-module set the PAM module to use
+ --with-dnssd=... enable DNS Service Discovery support (avahi,
+ mdnsresponder, no, yes)
--with-dnssd-libs set directory for DNS Service Discovery library
- --with-dnssd-includes set directory for DNS Service Discovery includes
+ --with-dnssd-includes set directory for DNS Service Discovery header files
--with-snapctl Set path for snapctl, only needed with --enable-snapped-cupsd, default=/usr/bin/snapctl
--with-cups-control-slot Name for cups-control slot as defined in snapcraft.yaml, only needed with --enable-snapped-cupsd, default=admin
--with-systemd set directory for systemd service files
-# Check whether --enable-avahi was given.
-if test ${enable_avahi+y}
+
+# Check whether --with-dnssd was given.
+if test ${with_dnssd+y}
then :
- enableval=$enable_avahi;
+ withval=$with_dnssd;
fi
-# Check whether --enable-dnssd was given.
-if test ${enable_dnssd+y}
+if test x$with_dnssd = x
then :
- enableval=$enable_dnssd;
-fi
+ with_dnssd="yes"
+
+elif test "$with_dnssd" != avahi -a "$with_dnssd" != mdnsresponder -a "$with_dnssd" != no -a "$with_dnssd" != yes
+then :
+
+ as_fn_error $? "Unsupported --with-dnssd value \"$with_dnssd\"." "$LINENO" 5
+
+fi
-# Check whether --with-dnssd-libs was given.
+# Check whether --with-dnssd_libs was given.
if test ${with_dnssd_libs+y}
then :
- withval=$with_dnssd_libs; LDFLAGS="-L$withval $LDFLAGS"
- DSOFLAGS="-L$withval $DSOFLAGS"
+ withval=$with_dnssd_libs;
+ LDFLAGS="-L$withval $LDFLAGS"
+ DSOFLAGS="-L$withval $DSOFLAGS"
+
fi
-# Check whether --with-dnssd-includes was given.
+# Check whether --with-dnssd_includes was given.
if test ${with_dnssd_includes+y}
then :
- withval=$with_dnssd_includes; CFLAGS="-I$withval $CFLAGS"
- CPPFLAGS="-I$withval $CPPFLAGS"
+ withval=$with_dnssd_includes;
+ CFLAGS="-I$withval $CFLAGS"
+ CPPFLAGS="-I$withval $CPPFLAGS"
+
fi
IPPFIND_BIN=""
IPPFIND_MAN=""
-if test "x$PKGCONFIG" != x -a x$enable_avahi != xno -a x$host_os_name != xdarwin; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Avahi" >&5
-printf %s "checking for Avahi... " >&6; }
- if $PKGCONFIG --exists avahi-client; then
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-printf "%s\n" "yes" >&6; }
- CFLAGS="$CFLAGS `$PKGCONFIG --cflags avahi-client`"
- DNSSDLIBS="`$PKGCONFIG --libs avahi-client`"
- DNSSD_BACKEND="dnssd"
- IPPFIND_BIN="ippfind"
- IPPFIND_MAN="ippfind.1"
- printf "%s\n" "#define HAVE_AVAHI 1" >>confdefs.h
-
- else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
- fi
-fi
+if test $with_dnssd = yes -o $with_dnssd = mdnsresponder
+then :
-if test "x$DNSSD_BACKEND" = x -a x$enable_dnssd != xno; then
- ac_fn_c_check_header_compile "$LINENO" "dns_sd.h" "ac_cv_header_dns_sd_h" "$ac_includes_default"
+ ac_fn_c_check_header_compile "$LINENO" "dns_sd.h" "ac_cv_header_dns_sd_h" "$ac_includes_default"
if test "x$ac_cv_header_dns_sd_h" = xyes
then :
- case "$host_os_name" in
- darwin*)
- # Darwin and macOS...
- printf "%s\n" "#define HAVE_DNSSD 1" >>confdefs.h
+ case "$host_os_name" in #(
+ darwin*) :
- DNSSD_BACKEND="dnssd"
- IPPFIND_BIN="ippfind"
- IPPFIND_MAN="ippfind.1"
- ;;
- *)
- # All others...
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for current version of dns_sd library" >&5
+ # Darwin and macOS...
+
+printf "%s\n" "#define HAVE_DNSSD 1" >>confdefs.h
+
+
+printf "%s\n" "#define HAVE_MDNSRESPONDER 1" >>confdefs.h
+
+ DNSSD_BACKEND="dnssd"
+ IPPFIND_BIN="ippfind"
+ IPPFIND_MAN="ippfind.1"
+ ;; #(
+ *) :
+
+ # All others...
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for current version of dns_sd library" >&5
printf %s "checking for current version of dns_sd library... " >&6; }
- SAVELIBS="$LIBS"
- LIBS="$LIBS -ldns_sd"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ SAVELIBS="$LIBS"
+ LIBS="$LIBS -ldns_sd"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-#include <dns_sd.h>
+
+ #include <dns_sd.h>
int
main (void)
{
-int constant = kDNSServiceFlagsShareConnection;
- unsigned char txtRecord[100];
- uint8_t valueLen;
- TXTRecordGetValuePtr(sizeof(txtRecord),
- txtRecord, "value", &valueLen);
+
+ int constant = kDNSServiceFlagsShareConnection;
+ unsigned char txtRecord[100];
+ uint8_t valueLen;
+ TXTRecordGetValuePtr(sizeof(txtRecord), txtRecord, "value", &valueLen);
+
;
return 0;
}
+
_ACEOF
if ac_fn_c_try_compile "$LINENO"
then :
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
printf "%s\n" "yes" >&6; }
- printf "%s\n" "#define HAVE_DNSSD 1" >>confdefs.h
- DNSSDLIBS="-ldns_sd"
- DNSSD_BACKEND="dnssd"
- IPPFIND_BIN="ippfind"
- IPPFIND_MAN="ippfind.1"
+printf "%s\n" "#define HAVE_DNSSD 1" >>confdefs.h
+
+
+printf "%s\n" "#define HAVE_MDNSRESPONDER 1" >>confdefs.h
+
+ DNSSDLIBS="-ldns_sd"
+ DNSSD_BACKEND="dnssd"
+ IPPFIND_BIN="ippfind"
+ IPPFIND_MAN="ippfind.1"
+
else $as_nop
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
printf "%s\n" "no" >&6; }
+ if test $with_dnssd = mdnsresponder
+then :
+
+ as_fn_error $? "--with-dnssd=mdnsresponder specified but dns_sd library not present." "$LINENO" 5
+
+fi
+
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
- LIBS="$SAVELIBS"
- ;;
- esac
+ LIBS="$SAVELIBS"
+ ;; #(
+ *) :
+ ;;
+esac
+
+fi
+
+
+fi
+
+if test "x$DNSSD_BACKEND" = x
+then :
+
+ if test $with_dnssd = avahi -o $with_dnssd = yes
+then :
+
+ if test "x$PKGCONFIG" = x
+then :
+
+ if test $with_dnssd = avahi
+then :
+
+ as_fn_error $? "Avahi requires pkg-config." "$LINENO" 5
+
+fi
+
+else $as_nop
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Avahi client" >&5
+printf %s "checking for Avahi client... " >&6; }
+ if $PKGCONFIG --exists avahi-client
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+ CFLAGS="$CFLAGS `$PKGCONFIG --cflags avahi-client`"
+ DNSSDLIBS="`$PKGCONFIG --libs avahi-client`"
+ DNSSD_BACKEND="dnssd"
+ IPPFIND_BIN="ippfind"
+ IPPFIND_MAN="ippfind.1"
+
+printf "%s\n" "#define HAVE_AVAHI 1" >>confdefs.h
+
+
+printf "%s\n" "#define HAVE_DNSSD 1" >>confdefs.h
+
+
+else $as_nop
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+ if test $with_dnssd = avahi
+then :
+
+ as_fn_error $? "--with-dnssd=avahi specified but Avahi client not present." "$LINENO" 5
+
+fi
+
+fi
+
+fi
fi
/*
* User-defined destination (and option) support for CUPS.
*
+ * Copyright © 2021 by OpenPrinting.
* Copyright © 2007-2019 by Apple Inc.
* Copyright © 1997-2007 by Easy Software Products.
*
# include <poll.h>
#endif /* HAVE_POLL */
-#ifdef HAVE_DNSSD
+#ifdef HAVE_MDNSRESPONDER
# include <dns_sd.h>
-#endif /* HAVE_DNSSD */
+#endif /* HAVE_MDNSRESPONDER */
#ifdef HAVE_AVAHI
# include <avahi-client/client.h>
# define kUseLastPrinter CFSTR("UseLastPrinter")
#endif /* __APPLE__ */
-#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
+#ifdef HAVE_DNSSD
# define _CUPS_DNSSD_GET_DESTS 250 /* Milliseconds for cupsGetDests */
# define _CUPS_DNSSD_MAXTIME 50 /* Milliseconds for maximum quantum of time */
#else
# define _CUPS_DNSSD_GET_DESTS 0 /* Milliseconds for cupsGetDests */
-#endif /* HAVE_DNSSD || HAVE_AVAHI */
+#endif /* HAVE_DNSSD */
/*
* Types...
*/
-#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
+#ifdef HAVE_DNSSD
typedef enum _cups_dnssd_state_e /* Enumerated device state */
{
_CUPS_DNSSD_NEW,
typedef struct _cups_dnssd_data_s /* Enumeration data */
{
-# ifdef HAVE_DNSSD
+# ifdef HAVE_MDNSRESPONDER
DNSServiceRef main_ref; /* Main service reference */
# else /* HAVE_AVAHI */
AvahiSimplePoll *simple_poll; /* Polling interface */
AvahiClient *client; /* Client information */
int got_data; /* Did we get data? */
int browsers; /* How many browsers are running? */
-# endif /* HAVE_DNSSD */
+# endif /* HAVE_MDNSRESPONDER */
cups_dest_cb_t cb; /* Callback */
void *user_data; /* User data pointer */
cups_ptype_t type, /* Printer type filter */
typedef struct _cups_dnssd_device_s /* Enumerated device */
{
_cups_dnssd_state_t state; /* State of device listing */
-# ifdef HAVE_DNSSD
+# ifdef HAVE_MDNSRESPONDER
DNSServiceRef ref; /* Service reference for query */
# else /* HAVE_AVAHI */
AvahiRecordBrowser *ref; /* Browser for query */
-# endif /* HAVE_DNSSD */
+# endif /* HAVE_MDNSRESPONDER */
char *fullName, /* Full name */
*regtype, /* Registration type */
*domain; /* Domain name */
cups_dest_t *dest);
#endif /* __BLOCKS__ */
static int cups_compare_dests(cups_dest_t *a, cups_dest_t *b);
-#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
-# ifdef HAVE_DNSSD
+#ifdef HAVE_DNSSD
+# ifdef HAVE_MDNSRESPONDER
static void cups_dnssd_browse_cb(DNSServiceRef sdRef,
DNSServiceFlags flags,
uint32_t interfaceIndex,
static void cups_dnssd_client_cb(AvahiClient *client,
AvahiClientState state,
void *context);
-# endif /* HAVE_DNSSD */
+# endif /* HAVE_MDNSRESPONDER */
static int cups_dnssd_compare_devices(_cups_dnssd_device_t *a,
_cups_dnssd_device_t *b);
static void cups_dnssd_free_device(_cups_dnssd_device_t *device,
const char *serviceName,
const char *regtype,
const char *replyDomain);
-# ifdef HAVE_DNSSD
+# ifdef HAVE_MDNSRESPONDER
static void cups_dnssd_query_cb(DNSServiceRef sdRef,
DNSServiceFlags flags,
uint32_t interfaceIndex,
size_t rdlen,
AvahiLookupResultFlags flags,
void *context);
-# endif /* HAVE_DNSSD */
+# endif /* HAVE_MDNSRESPONDER */
static const char *cups_dnssd_resolve(cups_dest_t *dest, const char *uri,
int msec, int *cancel,
cups_dest_cb_t cb, void *user_data);
static void cups_dnssd_unquote(char *dst, const char *src,
size_t dstsize);
static int cups_elapsed(struct timeval *t);
-#endif /* HAVE_DNSSD || HAVE_AVAHI */
+#endif /* HAVE_DNSSD */
static int cups_enum_dests(http_t *http, unsigned flags, int msec, int *cancel, cups_ptype_t type, cups_ptype_t mask, cups_dest_cb_t cb, void *user_data);
static int cups_find_dest(const char *name, const char *instance,
int num_dests, cups_dest_t *dests, int prev,
{
if ((uri = cupsGetOption("device-uri", dest->num_options, dest->options)) != NULL)
{
-#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
+#ifdef HAVE_DNSSD
if (strstr(uri, "._tcp"))
uri = cups_dnssd_resolve(dest, uri, msec, cancel, cb, user_data);
-#endif /* HAVE_DNSSD || HAVE_AVAHI */
+#endif /* HAVE_DNSSD */
}
}
else if ((uri = cupsGetOption("printer-uri-supported", dest->num_options, dest->options)) == NULL)
{
if ((uri = cupsGetOption("device-uri", dest->num_options, dest->options)) != NULL)
{
-#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
+#ifdef HAVE_DNSSD
if (strstr(uri, "._tcp"))
uri = cups_dnssd_resolve(dest, uri, msec, cancel, cb, user_data);
-#endif /* HAVE_DNSSD || HAVE_AVAHI */
+#endif /* HAVE_DNSSD */
}
if (uri)
DEBUG_printf(("1_cupsGetDestResource: device-uri=\"%s\", printer-uri-supported=\"%s\".", device_uri, printer_uri));
-#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
+#ifdef HAVE_DNSSD
if (((flags & CUPS_DEST_FLAGS_DEVICE) || !printer_uri) && strstr(device_uri, "._tcp"))
{
if ((device_uri = cups_dnssd_resolve(dest, device_uri, 5000, NULL, NULL, NULL)) != NULL)
return (NULL);
}
}
-#endif /* HAVE_DNSSD || HAVE_AVAHI */
+#endif /* HAVE_DNSSD */
if (flags & CUPS_DEST_FLAGS_DEVICE)
{
}
-#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
-# ifdef HAVE_DNSSD
+#ifdef HAVE_DNSSD
+# ifdef HAVE_MDNSRESPONDER
/*
* 'cups_dnssd_browse_cb()' - Browse for printers.
*/
avahi_simple_poll_quit(data->simple_poll);
}
}
-# endif /* HAVE_DNSSD */
+# endif /* HAVE_MDNSRESPONDER */
/*
{
DEBUG_printf(("5cups_dnssd_free_device(device=%p(%s), data=%p)", (void *)device, device->dest.name, (void *)data));
-# ifdef HAVE_DNSSD
+# ifdef HAVE_MDNSRESPONDER
if (device->ref)
DNSServiceRefDeallocate(device->ref);
# else /* HAVE_AVAHI */
if (device->ref)
avahi_record_browser_free(device->ref);
-# endif /* HAVE_DNSSD */
+# endif /* HAVE_MDNSRESPONDER */
_cupsStrFree(device->domain);
_cupsStrFree(device->fullName);
* Set the "full name" of this service, which is used for queries...
*/
-# ifdef HAVE_DNSSD
+# ifdef HAVE_MDNSRESPONDER
DNSServiceConstructFullName(fullName, serviceName, regtype, replyDomain);
# else /* HAVE_AVAHI */
avahi_service_name_join(fullName, kDNSServiceMaxDomainName, serviceName, regtype, replyDomain);
-# endif /* HAVE_DNSSD */
+# endif /* HAVE_MDNSRESPONDER */
_cupsStrFree(device->fullName);
device->fullName = _cupsStrAlloc(fullName);
if (device->ref)
{
-# ifdef HAVE_DNSSD
+# ifdef HAVE_MDNSRESPONDER
DNSServiceRefDeallocate(device->ref);
# else /* HAVE_AVAHI */
avahi_record_browser_free(device->ref);
-# endif /* HAVE_DNSSD */
+# endif /* HAVE_MDNSRESPONDER */
device->ref = 0;
}
static void
cups_dnssd_query_cb(
-# ifdef HAVE_DNSSD
+# ifdef HAVE_MDNSRESPONDER
DNSServiceRef sdRef, /* I - Service reference */
DNSServiceFlags flags, /* I - Data flags */
uint32_t interfaceIndex, /* I - Interface */
const void *rdata, /* I - TXT record */
size_t rdlen, /* I - Length of TXT record */
AvahiLookupResultFlags flags, /* I - Flags */
-# endif /* HAVE_DNSSD */
+# endif /* HAVE_MDNSRESPONDER */
void *context) /* I - Enumeration data */
{
# if defined(DEBUG) && defined(HAVE_AVAHI)
*device; /* Device */
-# ifdef HAVE_DNSSD
+# ifdef HAVE_MDNSRESPONDER
DEBUG_printf(("5cups_dnssd_query_cb(sdRef=%p, flags=%x, interfaceIndex=%d, errorCode=%d, fullName=\"%s\", rrtype=%u, rrclass=%u, rdlen=%u, rdata=%p, ttl=%u, context=%p)", (void *)sdRef, flags, interfaceIndex, errorCode, fullName, rrtype, rrclass, rdlen, rdata, ttl, context));
/*
return;
}
-# endif /* HAVE_DNSSD */
+# endif /* HAVE_MDNSRESPONDER */
/*
* Lookup the service in the devices array.
*dst = '\0';
}
-#endif /* HAVE_DNSSD */
-#if defined(HAVE_AVAHI) || defined(HAVE_DNSSD)
/*
* 'cups_elapsed()' - Return the elapsed time in milliseconds.
*/
return (msecs);
}
-#endif /* HAVE_AVAHI || HAVE_DNSSD */
+#endif /* HAVE_DNSSD */
/*
*dest; /* Current destination */
cups_option_t *option; /* Current option */
const char *user_default; /* Default printer from environment */
-#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
+#ifdef HAVE_DNSSD
int count, /* Number of queries started */
completed, /* Number of completed queries */
remaining; /* Remainder of timeout */
struct timeval curtime; /* Current time */
_cups_dnssd_data_t data; /* Data for callback */
_cups_dnssd_device_t *device; /* Current device */
-# ifdef HAVE_DNSSD
+# ifdef HAVE_MDNSRESPONDER
int nfds, /* Number of files responded */
main_fd; /* File descriptor for lookups */
DNSServiceRef ipp_ref = NULL; /* IPP browser */
# ifdef HAVE_SSL
AvahiServiceBrowser *ipps_ref = NULL; /* IPPS browser */
# endif /* HAVE_SSL */
-# endif /* HAVE_DNSSD */
+# endif /* HAVE_MDNSRESPONDER */
#else
_cups_getdata_t data; /* Data for callback */
-#endif /* HAVE_DNSSD || HAVE_AVAHI */
+#endif /* HAVE_DNSSD */
char filename[1024]; /* Local lpoptions file */
_cups_globals_t *cg = _cupsGlobals(); /* Pointer to library globals */
* Get ready to enumerate...
*/
-#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
+#ifdef HAVE_DNSSD
data.type = type;
data.mask = mask;
data.cb = cb;
data.user_data = user_data;
data.devices = cupsArrayNew3((cups_array_func_t)cups_dnssd_compare_devices, NULL, NULL, 0, NULL, (cups_afree_func_t)cups_dnssd_free_device);
-#endif /* HAVE_DNSSD || HAVE_AVAHI */
+#endif /* HAVE_DNSSD */
if (!(mask & CUPS_PRINTER_DISCOVERED) || !(type & CUPS_PRINTER_DISCOVERED))
{
i --, dest ++)
{
cups_dest_t *user_dest; /* Destination from lpoptions */
-#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
+#ifdef HAVE_DNSSD
const char *device_uri; /* Device URI */
-#endif /* HAVE_DNSSD || HAVE_AVAHI */
+#endif /* HAVE_DNSSD */
if ((user_dest = cupsGetDest(dest->name, dest->instance, data.num_dests, data.dests)) != NULL)
{
if (!(*cb)(user_data, i > 1 ? CUPS_DEST_FLAGS_MORE : CUPS_DEST_FLAGS_NONE, dest))
break;
-#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
+#ifdef HAVE_DNSSD
if (!dest->instance && (device_uri = cupsGetOption("device-uri", dest->num_options, dest->options)) != NULL && !strncmp(device_uri, "dnssd://", 8))
{
/*
}
}
}
-#endif /* HAVE_DNSSD || HAVE_AVAHI */
+#endif /* HAVE_DNSSD */
}
cupsFreeDests(num_dests, dests);
if ((mask & CUPS_PRINTER_DISCOVERED) && !(type & CUPS_PRINTER_DISCOVERED))
goto enum_finished;
-#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
+#ifdef HAVE_DNSSD
/*
* Get Bonjour-shared printers...
*/
gettimeofday(&curtime, NULL);
-# ifdef HAVE_DNSSD
+# ifdef HAVE_MDNSRESPONDER
if (DNSServiceCreateConnection(&data.main_ref) != kDNSServiceErr_NoError)
{
DEBUG_puts("1cups_enum_dests: Unable to create service browser, returning 0.");
return (0);
}
# endif /* HAVE_SSL */
-# endif /* HAVE_DNSSD */
+# endif /* HAVE_MDNSRESPONDER */
if (msec < 0)
remaining = INT_MAX;
cups_elapsed(&curtime);
-# ifdef HAVE_DNSSD
+# ifdef HAVE_MDNSRESPONDER
# ifdef HAVE_POLL
pfd.fd = main_fd;
pfd.events = POLLIN;
}
DEBUG_printf(("1cups_enum_dests: got_data=%d", data.got_data));
-# endif /* HAVE_DNSSD */
+# endif /* HAVE_MDNSRESPONDER */
remaining -= cups_elapsed(&curtime);
{
DEBUG_printf(("1cups_enum_dests: Querying '%s'.", device->fullName));
-# ifdef HAVE_DNSSD
+# ifdef HAVE_MDNSRESPONDER
device->ref = data.main_ref;
if (DNSServiceQueryRecord(&(device->ref), kDNSServiceFlagsShareConnection, 0, device->fullName, kDNSServiceType_TXT, kDNSServiceClass_IN, (DNSServiceQueryRecordReply)cups_dnssd_query_cb, &data) == kDNSServiceErr_NoError)
DEBUG_printf(("1cups_enum_dests: Query failed: %s", avahi_strerror(avahi_client_errno(data.client))));
}
-# endif /* HAVE_DNSSD */
+# endif /* HAVE_MDNSRESPONDER */
}
else if (device->ref && device->state == _CUPS_DNSSD_PENDING)
{
break;
# endif /* HAVE_AVAHI */
}
-#endif /* HAVE_DNSSD || HAVE_AVAHI */
+#endif /* HAVE_DNSSD */
/*
* Return...
cupsFreeDests(data.num_dests, data.dests);
-#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
+#ifdef HAVE_DNSSD
cupsArrayDelete(data.devices);
-# ifdef HAVE_DNSSD
+# ifdef HAVE_MDNSRESPONDER
if (ipp_ref)
DNSServiceRefDeallocate(ipp_ref);
avahi_client_free(data.client);
if (data.simple_poll)
avahi_simple_poll_free(data.simple_poll);
-# endif /* HAVE_DNSSD */
-#endif /* HAVE_DNSSD || HAVE_AVAHI */
+# endif /* HAVE_MDNSRESPONDER */
+#endif /* HAVE_DNSSD */
DEBUG_puts("1cups_enum_dests: Returning 1.");
/*
* HTTP support routines for CUPS.
*
- * Copyright © 2020 by OpenPrinting
+ * Copyright © 2020-2021 by OpenPrinting
* Copyright © 2007-2019 by Apple Inc.
* Copyright © 1997-2007 by Easy Software Products, all rights reserved.
*
#include "cups-private.h"
#include "debug-internal.h"
-#ifdef HAVE_DNSSD
+#ifdef HAVE_MDNSRESPONDER
# include <dns_sd.h>
# ifdef _WIN32
# include <io.h>
# include <avahi-client/lookup.h>
# include <avahi-common/malloc.h>
# include <avahi-common/simple-watch.h>
-#endif /* HAVE_DNSSD */
+#endif /* HAVE_MDNSRESPONDER */
/*
static char *http_copy_encode(char *dst, const char *src,
char *dstend, const char *reserved,
const char *term, int encode);
-#ifdef HAVE_DNSSD
+#ifdef HAVE_MDNSRESPONDER
static void DNSSD_API http_resolve_cb(DNSServiceRef sdRef,
DNSServiceFlags flags,
uint32_t interfaceIndex,
uint16_t port, uint16_t txtLen,
const unsigned char *txtRecord,
void *context);
-#endif /* HAVE_DNSSD */
+#endif /* HAVE_MDNSRESPONDER */
#ifdef HAVE_AVAHI
static void http_client_cb(AvahiClient *client,
if (strstr(hostname, "._tcp"))
{
-#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
+#ifdef HAVE_DNSSD
char *regtype, /* Pointer to type in hostname */
*domain, /* Pointer to domain in hostname */
*uuid, /* Pointer to UUID in URI */
*uuidend; /* Pointer to end of UUID in URI */
_http_uribuf_t uribuf; /* URI buffer */
int offline = 0; /* offline-report state set? */
-# ifdef HAVE_DNSSD
+# ifdef HAVE_MDNSRESPONDER
DNSServiceRef ref, /* DNS-SD master service reference */
domainref = NULL,/* DNS-SD service reference for domain */
ippref = NULL, /* DNS-SD service reference for network IPP */
# elif defined(HAVE_AVAHI)
AvahiClient *client; /* Client information */
int error; /* Status */
-# endif /* HAVE_DNSSD */
+# endif /* HAVE_MDNSRESPONDER */
if (options & _HTTP_RESOLVE_STDERR)
fprintf(stderr, "DEBUG: Resolving \"%s\"...\n", hostname);
uri = NULL;
-# ifdef HAVE_DNSSD
+# ifdef HAVE_MDNSRESPONDER
if (DNSServiceCreateConnection(&ref) == kDNSServiceErr_NoError)
{
uint32_t myinterface = kDNSServiceInterfaceIndexAny;
avahi_simple_poll_free(uribuf.poll);
}
-# endif /* HAVE_DNSSD */
+# endif /* HAVE_MDNSRESPONDER */
if (options & _HTTP_RESOLVE_STDERR)
{
}
}
-#else /* HAVE_DNSSD || HAVE_AVAHI */
+#else /* !HAVE_DNSSD */
/*
* No DNS-SD support...
*/
uri = NULL;
-#endif /* HAVE_DNSSD || HAVE_AVAHI */
+#endif /* HAVE_DNSSD */
if ((options & _HTTP_RESOLVE_STDERR) && !uri)
_cupsLangPrintFilter(stderr, "INFO", _("Unable to find printer."));
}
-#ifdef HAVE_DNSSD
+#ifdef HAVE_MDNSRESPONDER
/*
* 'http_resolve_cb()' - Build a device URI for the given service name.
*/
avahi_simple_poll_quit(uribuf->poll);
}
-#endif /* HAVE_DNSSD */
+#endif /* HAVE_MDNSRESPONDER */
/*
* Client routines for the CUPS scheduler.
*
+ * Copyright © 2021 by OpenPrinting.
* Copyright © 2007-2019 by Apple Inc.
* Copyright © 1997-2007 by Easy Software Products, all rights reserved.
*
!strcmp(con->clientname, "[::1]"));
}
-#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
+#ifdef HAVE_DNSSD
/*
* Check if the hostname is something.local (Bonjour); if so, allow it.
*/
if (end && (!_cups_strcasecmp(end, ".local") ||
!_cups_strcasecmp(end, ".local.")))
return (1);
-#endif /* HAVE_DNSSD || HAVE_AVAHI */
+#endif /* HAVE_DNSSD */
/*
* Check if the hostname is an IP address...
}
}
-#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
+#ifdef HAVE_DNSSD
for (a = (cupsd_alias_t *)cupsArrayFirst(DNSSDAlias);
a;
a = (cupsd_alias_t *)cupsArrayNext(DNSSDAlias))
return (1);
}
}
-#endif /* HAVE_DNSSD || HAVE_AVAHI */
+#endif /* HAVE_DNSSD */
/*
* Check for interface hostname matches...
static const cupsd_var_t cupsd_vars[] =
{
{ "AutoPurgeJobs", &JobAutoPurge, CUPSD_VARTYPE_BOOLEAN },
-#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
+#ifdef HAVE_DNSSD
{ "BrowseDNSSDSubTypes", &DNSSDSubTypes, CUPSD_VARTYPE_STRING },
-#endif /* HAVE_DNSSD || HAVE_AVAHI */
+#endif /* HAVE_DNSSD */
{ "BrowseWebIF", &BrowseWebIF, CUPSD_VARTYPE_BOOLEAN },
{ "Browsing", &Browsing, CUPSD_VARTYPE_BOOLEAN },
{ "Classification", &Classification, CUPSD_VARTYPE_STRING },
{ "DefaultPolicy", &DefaultPolicy, CUPSD_VARTYPE_STRING },
{ "DefaultShared", &DefaultShared, CUPSD_VARTYPE_BOOLEAN },
{ "DirtyCleanInterval", &DirtyCleanInterval, CUPSD_VARTYPE_TIME },
-#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
+#ifdef HAVE_DNSSD
{ "DNSSDHostName", &DNSSDHostName, CUPSD_VARTYPE_STRING },
-#endif /* HAVE_DNSSD || HAVE_AVAHI */
+#endif /* HAVE_DNSSD */
{ "ErrorPolicy", &ErrorPolicy, CUPSD_VARTYPE_STRING },
{ "FilterLimit", &FilterLimit, CUPSD_VARTYPE_INTEGER },
{ "FilterNice", &FilterNice, CUPSD_VARTYPE_INTEGER },
Browsing = CUPS_DEFAULT_BROWSING;
DefaultShared = CUPS_DEFAULT_DEFAULT_SHARED;
-#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
+#ifdef HAVE_DNSSD
cupsdSetString(&DNSSDSubTypes, "_cups,_print");
cupsdClearString(&DNSSDHostName);
-#endif /* HAVE_DNSSD || HAVE_AVAHI */
+#endif /* HAVE_DNSSD */
cupsdSetString(&ErrorPolicy, CUPS_DEFAULT_ERROR_POLICY);
#include "cupsd.h"
#include <grp.h>
-#if defined(HAVE_DNSSD) && defined(__APPLE__)
+#if defined(HAVE_MDNSRESPONDER) && defined(__APPLE__)
# include <nameser.h>
# include <CoreFoundation/CoreFoundation.h>
# include <SystemConfiguration/SystemConfiguration.h>
-#endif /* HAVE_DNSSD && __APPLE__ */
+#endif /* HAVE_MDNSRESPONDER && __APPLE__ */
/*
* Local functions...
*/
-#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
+#ifdef HAVE_DNSSD
static char *get_auth_info_required(cupsd_printer_t *p,
char *buffer, size_t bufsize);
# ifdef __APPLE__
static const char *dnssdErrorString(int error);
static void dnssdFreeTxtRecord(cupsd_txt_t *txt);
static void dnssdRegisterAllPrinters(int from_callback);
-# ifdef HAVE_DNSSD
+# ifdef HAVE_MDNSRESPONDER
static void dnssdRegisterCallback(DNSServiceRef sdRef,
DNSServiceFlags flags,
DNSServiceErrorType errorCode,
static void dnssdRegisterCallback(AvahiEntryGroup *p,
AvahiEntryGroupState state,
void *context);
-# endif /* HAVE_DNSSD */
+# endif /* HAVE_MDNSRESPONDER */
static int dnssdRegisterInstance(cupsd_srv_t *srv, cupsd_printer_t *p, char *name, const char *type, const char *subtypes, int port, cupsd_txt_t *txt, int commit, int from_callback);
static void dnssdRegisterPrinter(cupsd_printer_t *p, int from_callback);
static void dnssdStop(void);
-# ifdef HAVE_DNSSD
+# ifdef HAVE_MDNSRESPONDER
static void dnssdUpdate(void);
-# endif /* HAVE_DNSSD */
+# endif /* HAVE_MDNSRESPONDER */
static void dnssdUpdateDNSSDName(int from_callback);
-#endif /* HAVE_DNSSD || HAVE_AVAHI */
+#endif /* HAVE_DNSSD */
/*
* Announce the deletion...
*/
-#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
+#ifdef HAVE_DNSSD
if (removeit && (BrowseLocalProtocols & BROWSE_DNSSD) && DNSSDMaster)
dnssdDeregisterPrinter(p, 1, 0);
-#endif /* HAVE_DNSSD || HAVE_AVAHI */
+#endif /* HAVE_DNSSD */
}
(p->type & (CUPS_PRINTER_REMOTE | CUPS_PRINTER_SCANNER)))
return;
-#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
+#ifdef HAVE_DNSSD
if ((BrowseLocalProtocols & BROWSE_DNSSD) && DNSSDMaster)
dnssdRegisterPrinter(p, 0);
-#endif /* HAVE_DNSSD || HAVE_AVAHI */
+#endif /* HAVE_DNSSD */
}
if (!Browsing || !BrowseLocalProtocols)
return;
-#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
+#ifdef HAVE_DNSSD
if (BrowseLocalProtocols & BROWSE_DNSSD)
{
-# ifdef HAVE_DNSSD
+# ifdef HAVE_MDNSRESPONDER
DNSServiceErrorType error; /* Error from service creation */
/*
else
avahi_threaded_poll_start(DNSSDMaster);
}
-# endif /* HAVE_DNSSD */
+# endif /* HAVE_MDNSRESPONDER */
}
-#endif /* HAVE_DNSSD || HAVE_AVAHI */
-#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
/*
* Register the individual printers
*/
dnssdRegisterAllPrinters(0);
-#endif /* HAVE_DNSSD || HAVE_AVAHI */
+#endif /* HAVE_DNSSD */
}
if (!Browsing || !BrowseLocalProtocols)
return;
-#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
+#ifdef HAVE_DNSSD
/*
* De-register the individual printers
*/
if ((BrowseLocalProtocols & BROWSE_DNSSD) && DNSSDMaster)
dnssdStop();
-#endif /* HAVE_DNSSD || HAVE_AVAHI */
+#endif /* HAVE_DNSSD */
}
-#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
+#ifdef HAVE_DNSSD
/*
* 'cupsdUpdateDNSSDName()' - Update the computer name we use for browsing...
*/
* Then pack them into a proper txt record...
*/
-# ifdef HAVE_DNSSD
+# ifdef HAVE_MDNSRESPONDER
TXTRecordCreate(&txt, 0, NULL);
for (i = 0; i < count; i ++)
for (i = 0, txt = NULL; i < count; i ++)
txt = avahi_string_list_add_printf(txt, "%s=%s", keyvalue[i][0],
keyvalue[i][1]);
-# endif /* HAVE_DNSSD */
+# endif /* HAVE_MDNSRESPONDER */
return (txt);
}
if (!srv || !*srv)
return;
-# ifdef HAVE_DNSSD
+# ifdef HAVE_MDNSRESPONDER
(void)from_callback;
DNSServiceRefDeallocate(*srv);
if (!from_callback)
avahi_threaded_poll_unlock(DNSSDMaster);
-# endif /* HAVE_DNSSD */
+# endif /* HAVE_MDNSRESPONDER */
}
{
dnssdDeregisterInstance(&p->ipp_srv, from_callback);
-# ifdef HAVE_DNSSD
+# ifdef HAVE_MDNSRESPONDER
# ifdef HAVE_SSL
dnssdDeregisterInstance(&p->ipps_srv, from_callback);
# endif /* HAVE_SSL */
dnssdDeregisterInstance(&p->printer_srv, from_callback);
-# endif /* HAVE_DNSSD */
+# endif /* HAVE_MDNSRESPONDER */
}
/*
static const char * /* O - Error message */
dnssdErrorString(int error) /* I - Error number */
{
-# ifdef HAVE_DNSSD
+# ifdef HAVE_MDNSRESPONDER
switch (error)
{
case kDNSServiceErr_NoError :
# else /* HAVE_AVAHI */
return (avahi_strerror(error));
-# endif /* HAVE_DNSSD */
+# endif /* HAVE_MDNSRESPONDER */
}
static void
dnssdFreeTxtRecord(cupsd_txt_t *txt) /* I - TXT record */
{
-# ifdef HAVE_DNSSD
+# ifdef HAVE_MDNSRESPONDER
TXTRecordDeallocate(txt);
# else /* HAVE_AVAHI */
avahi_string_list_free(*txt);
*txt = NULL;
-# endif /* HAVE_DNSSD */
+# endif /* HAVE_MDNSRESPONDER */
}
* 'dnssdRegisterCallback()' - DNSServiceRegister callback.
*/
-# ifdef HAVE_DNSSD
+# ifdef HAVE_MDNSRESPONDER
static void
dnssdRegisterCallback(
DNSServiceRef sdRef, /* I - DNS Service reference */
/* TODO: Handle collisions with avahi_alternate_service_name(p->reg_name)? */
}
-# endif /* HAVE_DNSSD */
+# endif /* HAVE_MDNSRESPONDER */
/*
int error; /* Any error */
-# ifdef HAVE_DNSSD
+# ifdef HAVE_MDNSRESPONDER
(void)from_callback;
-# endif /* HAVE_DNSSD */
+# endif /* HAVE_MDNSRESPONDER */
cupsdLogMessage(CUPSD_LOG_DEBUG, "Registering \"%s\" with DNS-SD type \"%s\".", name, type);
* Assign the correct pointer for "srv"...
*/
-# ifdef HAVE_DNSSD
+# ifdef HAVE_MDNSRESPONDER
if (!strcmp(type, "_printer._tcp"))
srv = &p->printer_srv; /* Target LPD service */
# ifdef HAVE_SSL
# else /* HAVE_AVAHI */
srv = &p->ipp_srv; /* Target service group */
-# endif /* HAVE_DNSSD */
+# endif /* HAVE_MDNSRESPONDER */
}
-# ifdef HAVE_DNSSD
+# ifdef HAVE_MDNSRESPONDER
(void)commit;
# else /* HAVE_AVAHI */
name, dnssdErrorString(avahi_client_errno(DNSSDClient)));
return (0);
}
-# endif /* HAVE_DNSSD */
+# endif /* HAVE_MDNSRESPONDER */
/*
* Make sure the name is <= 63 octets, and when we truncate be sure to
* Register the service...
*/
-# ifdef HAVE_DNSSD
+# ifdef HAVE_MDNSRESPONDER
if (subtypes)
snprintf(temp, sizeof(temp), "%s,%s", type, subtypes);
else
if (!from_callback)
avahi_threaded_poll_unlock(DNSSDMaster);
-# endif /* HAVE_DNSSD */
+# endif /* HAVE_MDNSRESPONDER */
if (error)
{
dnssdDeregisterInstance(&p->ipp_srv, from_callback);
-# ifdef HAVE_DNSSD
+# ifdef HAVE_MDNSRESPONDER
# ifdef HAVE_SSL
dnssdDeregisterInstance(&p->ipps_srv, from_callback);
# endif /* HAVE_SSL */
dnssdDeregisterInstance(&p->printer_srv, from_callback);
-# endif /* HAVE_DNSSD */
+# endif /* HAVE_MDNSRESPONDER */
}
}
dnssdDeregisterInstance(&WebIFSrv, 0);
-# ifdef HAVE_DNSSD
+# ifdef HAVE_MDNSRESPONDER
cupsdRemoveSelect(DNSServiceRefSockFD(DNSSDMaster));
DNSServiceRefDeallocate(DNSSDMaster);
avahi_threaded_poll_free(DNSSDMaster);
DNSSDMaster = NULL;
}
-# endif /* HAVE_DNSSD */
+# endif /* HAVE_MDNSRESPONDER */
cupsArrayDelete(DNSSDPrinters);
DNSSDPrinters = NULL;
}
-# ifdef HAVE_DNSSD
+# ifdef HAVE_MDNSRESPONDER
/*
* 'dnssdUpdate()' - Handle DNS-SD queries.
*/
dnssdStop();
}
}
-# endif /* HAVE_DNSSD */
+# endif /* HAVE_MDNSRESPONDER */
/*
return ("none");
}
-#endif /* HAVE_DNSSD || HAVE_AVAHI */
+#endif /* HAVE_DNSSD */
BrowseLocalProtocols
VALUE(BROWSE_ALL);
/* Protocols to support for local printers */
-#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
+#ifdef HAVE_DNSSD
VAR char *DNSSDComputerName VALUE(NULL),
/* Computer/server name */
*DNSSDHostName VALUE(NULL),
/* Port number to register */
VAR cups_array_t *DNSSDPrinters VALUE(NULL);
/* Printers we have registered */
-# ifdef HAVE_DNSSD
+# ifdef HAVE_MDNSRESPONDER
VAR DNSServiceRef DNSSDMaster VALUE(NULL);
/* Master DNS-SD service reference */
# else /* HAVE_AVAHI */
/* Master polling interface for Avahi */
VAR AvahiClient *DNSSDClient VALUE(NULL);
/* Client information */
-# endif /* HAVE_DNSSD */
+# endif /* HAVE_MDNSRESPONDER */
VAR cupsd_srv_t WebIFSrv VALUE(NULL);
/* Service reference for the web interface */
-#endif /* HAVE_DNSSD || HAVE_AVAHI */
+#endif /* HAVE_DNSSD */
/*
extern void cupsdRegisterPrinter(cupsd_printer_t *p);
extern void cupsdStartBrowsing(void);
extern void cupsdStopBrowsing(void);
-#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
+#ifdef HAVE_DNSSD
extern void cupsdUpdateDNSSDName(void);
-#endif /* HAVE_DNSSD || HAVE_AVAHI */
+#endif /* HAVE_DNSSD */
/*
* IPP routines for the CUPS scheduler.
*
- * Copyright © 2020 by OpenPrinting
+ * Copyright © 2020-2021 by OpenPrinting
* Copyright © 2007-2019 by Apple Inc.
* Copyright © 1997-2007 by Easy Software Products, all rights reserved.
*
if (!ra || cupsArrayFind(ra, "printer-current-time"))
ippAddDate(con->response, IPP_TAG_PRINTER, "printer-current-time", ippTimeToDate(curtime));
-#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
+#ifdef HAVE_DNSSD
if (!ra || cupsArrayFind(ra, "printer-dns-sd-name"))
{
if (printer->reg_name)
else
ippAddInteger(con->response, IPP_TAG_PRINTER, IPP_TAG_NOVALUE, "printer-dns-sd-name", 0);
}
-#endif /* HAVE_DNSSD || HAVE_AVAHI */
+#endif /* HAVE_DNSSD */
if (!ra || cupsArrayFind(ra, "printer-error-policy"))
ippAddString(con->response, IPP_TAG_PRINTER, IPP_TAG_NAME, "printer-error-policy", NULL, printer->error_policy);
/*
* Main loop for the CUPS scheduler.
*
+ * Copyright © 2021 by OpenPrinting.
* Copyright © 2007-2019 by Apple Inc.
* Copyright © 1997-2007 by Easy Software Products, all rights reserved.
*
* Got an error from select!
*/
-#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
+#ifdef HAVE_DNSSD
cupsd_printer_t *p; /* Current printer */
-#endif /* HAVE_DNSSD || HAVE_AVAHI */
+#endif /* HAVE_DNSSD */
if (errno == EINTR) /* Just interrupted by a signal */
continue;
job->print_pipes[0], job->print_pipes[1],
job->back_pipes[0], job->back_pipes[1]);
-#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
+#ifdef HAVE_DNSSD
for (p = (cupsd_printer_t *)cupsArrayFirst(Printers);
p;
p = (cupsd_printer_t *)cupsArrayNext(Printers))
cupsdLogMessage(CUPSD_LOG_EMERG, "printer[%s] reg_name=\"%s\"", p->name,
p->reg_name ? p->reg_name : "(null)");
-#endif /* HAVE_DNSSD || HAVE_AVAHI */
+#endif /* HAVE_DNSSD */
break;
}
/*
* Printer routines for the CUPS scheduler.
*
- * Copyright © 2020 by OpenPrinting
+ * Copyright © 2020-2021 by OpenPrinting
* Copyright © 2007-2019 by Apple Inc.
* Copyright © 1997-2007 by Easy Software Products, all rights reserved.
*
cupsdClearString(&p->alert);
cupsdClearString(&p->alert_description);
-#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
+#ifdef HAVE_DNSSD
cupsdClearString(&p->pdl);
cupsdClearString(&p->reg_name);
-#endif /* HAVE_DNSSD || HAVE_AVAHI */
+#endif /* HAVE_DNSSD */
cupsArrayDelete(p->filetypes);
attr->values[i].string.text = _cupsStrAlloc(mimetype);
}
-#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
+#ifdef HAVE_DNSSD
{
char pdl[1024]; /* Buffer to build pdl list */
mime_filter_t *filter; /* MIME filter looping var */
cupsdSetString(&p->pdl, pdl);
}
-#endif /* HAVE_DNSSD || HAVE_AVAHI */
+#endif /* HAVE_DNSSD */
}
/*
* Printer definitions for the CUPS scheduler.
*
- * Copyright 2007-2017 by Apple Inc.
- * Copyright 1997-2007 by Easy Software Products, all rights reserved.
+ * Copyright © 2021 by OpenPrinting.
+ * Copyright @ 2007-2017 by Apple Inc.
+ * Copyright @ 1997-2007 by Easy Software Products, all rights reserved.
*
* Licensed under Apache License v2.0. See the file "LICENSE" for more information.
*/
-#ifdef HAVE_DNSSD
+#ifdef HAVE_MDNSRESPONDER
# include <dns_sd.h>
#elif defined(HAVE_AVAHI)
# include <avahi-client/client.h>
# include <avahi-client/publish.h>
# include <avahi-common/error.h>
# include <avahi-common/thread-watch.h>
-#endif /* HAVE_DNSSD */
+#endif /* HAVE_MDNSRESPONDER */
#include <cups/pwg-private.h>
* DNS-SD types to make the code cleaner/clearer...
*/
-#ifdef HAVE_DNSSD
+#ifdef HAVE_MDNSRESPONDER
typedef DNSServiceRef cupsd_srv_t; /* Service reference */
typedef TXTRecordRef cupsd_txt_t; /* TXT record */
#elif defined(HAVE_AVAHI)
typedef AvahiEntryGroup *cupsd_srv_t; /* Service reference */
typedef AvahiStringList *cupsd_txt_t; /* TXT record */
-#endif /* HAVE_DNSSD */
+#endif /* HAVE_MDNSRESPONDER */
/*
time_t marker_time; /* Last time marker attributes were updated */
_ppd_cache_t *pc; /* PPD cache and mapping data */
-#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
+#ifdef HAVE_DNSSD
char *reg_name, /* Name used for service registration */
*pdl; /* pdl value for TXT record */
cupsd_srv_t ipp_srv; /* IPP service(s) */
-# ifdef HAVE_DNSSD
+# ifdef HAVE_MDNSRESPONDER
# ifdef HAVE_SSL
cupsd_srv_t ipps_srv; /* IPPS service(s) */
# endif /* HAVE_SSL */
cupsd_srv_t printer_srv; /* LPD service */
-# endif /* HAVE_DNSSD */
-#endif /* HAVE_DNSSD || HAVE_AVAHI */
+# endif /* HAVE_MDNSRESPONDER */
+#endif /* HAVE_DNSSD */
};
/*
* System management functions for the CUPS scheduler.
*
- * Copyright 2007-2018 by Apple Inc.
- * Copyright 2006 by Easy Software Products.
+ * Copyright © 2021 by OpenPrinting.
+ * Copyright @ 2007-2018 by Apple Inc.
+ * Copyright @ 2006 by Easy Software Products.
*
- * Licensed under Apache License v2.0. See the file "LICENSE" for more information.
+ * Licensed under Apache License v2.0. See the file "LICENSE" for more
+ * information.
*/
p = (cupsd_printer_t *)cupsArrayNext(Printers))
cupsdDeregisterPrinter(p, 1);
-# if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
+# ifdef HAVE_DNSSD
/*
* Update the computer name and BTMM domain list...
*/
cupsdUpdateDNSSDName();
-# endif /* HAVE_DNSSD || HAVE_AVAHI */
+# endif /* HAVE_DNSSD */
/*
* Now re-register them...
/*
* IPP Everywhere printer application for CUPS.
*
+ * Copyright © 2021 by OpenPrinting.
* Copyright © 2020 by the IEEE-ISTO Printer Working Group.
* Copyright © 2010-2019 by Apple Inc.
*
# include <poll.h>
#endif /* _WIN32 */
-#ifdef HAVE_DNSSD
+#ifdef HAVE_MDNSRESPONDER
# include <dns_sd.h>
#elif defined(HAVE_AVAHI)
# include <avahi-client/client.h>
# include <avahi-common/error.h>
# include <avahi-common/malloc.h>
# include <avahi-common/thread-watch.h>
-#endif /* HAVE_DNSSD */
+#endif /* HAVE_MDNSRESPONDER */
#ifdef HAVE_SYS_MOUNT_H
# include <sys/mount.h>
* Structures...
*/
-#ifdef HAVE_DNSSD
+#ifdef HAVE_MDNSRESPONDER
typedef DNSServiceRef ippeve_srv_t; /* Service reference */
typedef TXTRecordRef ippeve_txt_t; /* TXT record */
#else
typedef void *ippeve_srv_t; /* Service reference */
typedef void *ippeve_txt_t; /* TXT record */
-#endif /* HAVE_DNSSD */
+#endif /* HAVE_MDNSRESPONDER */
#if HAVE_LIBPAM
typedef struct ippeve_authdata_s /* Authentication data */
/* TODO: One IPv4 and one IPv6 listener are really not sufficient */
int ipv4, /* IPv4 listener */
ipv6; /* IPv6 listener */
-#ifdef HAVE_DNSSD
+#ifdef HAVE_MDNSRESPONDER
ippeve_srv_t ipp_ref, /* DNS-SD IPP service */
ipps_ref, /* DNS-SD IPPS service */
http_ref, /* DNS-SD HTTP service */
printer_ref; /* DNS-SD LPD service */
#elif defined(HAVE_AVAHI)
ippeve_srv_t dnssd_ref; /* DNS-SD services */
-#endif /* HAVE_DNSSD */
+#endif /* HAVE_MDNSRESPONDER */
char *dnssd_subtypes;/* DNS-SD subtypes */
int dnssd_collision;/* Name collision? */
char *dnssd_name, /* printer-dns-sd-name */
static void delete_client(ippeve_client_t *client);
static void delete_job(ippeve_job_t *job);
static void delete_printer(ippeve_printer_t *printer);
-#ifdef HAVE_DNSSD
+#ifdef HAVE_MDNSRESPONDER
static void DNSSD_API dnssd_callback(DNSServiceRef sdRef, DNSServiceFlags flags, DNSServiceErrorType errorCode, const char *name, const char *regtype, const char *domain, ippeve_printer_t *printer);
#elif defined(HAVE_AVAHI)
static void dnssd_callback(AvahiEntryGroup *p, AvahiEntryGroupState state, void *context);
static void dnssd_client_cb(AvahiClient *c, AvahiClientState state, void *userdata);
-#endif /* HAVE_DNSSD */
+#endif /* HAVE_MDNSRESPONDER */
static void dnssd_init(void);
static int filter_cb(ippeve_filter_t *filter, ipp_t *dst, ipp_attribute_t *attr);
static ippeve_job_t *find_job(ippeve_client_t *client);
* Globals...
*/
-#ifdef HAVE_DNSSD
+#ifdef HAVE_MDNSRESPONDER
static DNSServiceRef DNSSDMaster = NULL;
#elif defined(HAVE_AVAHI)
static AvahiThreadedPoll *DNSSDMaster = NULL;
static AvahiClient *DNSSDClient = NULL;
-#endif /* HAVE_DNSSD */
+#endif /* HAVE_MDNSRESPONDER */
static int KeepFiles = 0, /* Keep spooled job files? */
MaxVersion = 20,/* Maximum IPP version (20 = 2.0, 11 = 1.1, etc.) */
if (printer->ipv6 >= 0)
close(printer->ipv6);
-#if HAVE_DNSSD
+#if HAVE_MDNSRESPONDER
if (printer->printer_ref)
DNSServiceRefDeallocate(printer->printer_ref);
if (printer->ipp_ref)
avahi_entry_group_free(printer->dnssd_ref);
avahi_threaded_poll_unlock(DNSSDMaster);
-#endif /* HAVE_DNSSD */
+#endif /* HAVE_MDNSRESPONDER */
if (printer->dnssd_name)
free(printer->dnssd_name);
}
-#ifdef HAVE_DNSSD
+#ifdef HAVE_MDNSRESPONDER
/*
* 'dnssd_callback()' - Handle DNS-SD registration events.
*/
break;
}
}
-#endif /* HAVE_DNSSD */
+#endif /* HAVE_MDNSRESPONDER */
/*
static void
dnssd_init(void)
{
-#ifdef HAVE_DNSSD
+#ifdef HAVE_MDNSRESPONDER
if (DNSServiceCreateConnection(&DNSSDMaster) != kDNSServiceErr_NoError)
{
fputs("Error: Unable to initialize DNS-SD.\n", stderr);
}
avahi_threaded_poll_start(DNSSDMaster);
-#endif /* HAVE_DNSSD */
+#endif /* HAVE_MDNSRESPONDER */
}
register_printer(
ippeve_printer_t *printer) /* I - Printer */
{
-#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
+#ifdef HAVE_DNSSD
ippeve_txt_t ipp_txt; /* DNS-SD IPP TXT record */
int i, /* Looping var */
count; /* Number of values */
printer->dnssd_collision = 0;
}
-#endif /* HAVE_DNSSD || HAVE_AVAHI */
+#endif /* HAVE_DNSSD */
-#ifdef HAVE_DNSSD
+#ifdef HAVE_MDNSRESPONDER
DNSServiceErrorType error; /* Error from DNS-SD */
char regtype[256]; /* DNS-SD service type */
uint32_t ifindex; /* Interface index */
avahi_threaded_poll_unlock(DNSSDMaster);
avahi_string_list_free(ipp_txt);
-#endif /* HAVE_DNSSD */
+#endif /* HAVE_MDNSRESPONDER */
return (1);
}
num_fds = 2;
-#ifdef HAVE_DNSSD
+#ifdef HAVE_MDNSRESPONDER
polldata[num_fds ].fd = DNSServiceRefSockFD(DNSSDMaster);
polldata[num_fds ++].events = POLLIN;
-#endif /* HAVE_DNSSD */
+#endif /* HAVE_MDNSRESPONDER */
/*
* Loop until we are killed or have a hard error...
* Process DNS-SD messages...
*/
-#ifdef HAVE_DNSSD
+#ifdef HAVE_MDNSRESPONDER
if (polldata[2].revents & POLLIN)
DNSServiceProcessResult(DNSSDMaster);
-#endif /* HAVE_DNSSD */
+#endif /* HAVE_MDNSRESPONDER */
-#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
+#ifdef HAVE_DNSSD
if (printer->dnssd_collision)
register_printer(printer);
-#endif /* HAVE_DNSSD || HAVE_AVAHI */
+#endif /* HAVE_DNSSD */
/*
* Clean out old jobs...
* commands such as IPP and Bonjour conformance tests. This tool is
* inspired by the UNIX "find" command, thus its name.
*
+ * Copyright © 2021 by OpenPrinting.
* Copyright © 2020 by the IEEE-ISTO Printer Working Group
* Copyright © 2008-2018 by Apple Inc.
*
# include <sys/wait.h>
#endif /* _WIN32 */
#include <regex.h>
-#ifdef HAVE_DNSSD
+#ifdef HAVE_MDNSRESPONDER
# include <dns_sd.h>
#elif defined(HAVE_AVAHI)
# include <avahi-client/client.h>
# include <avahi-common/error.h>
# include <avahi-common/malloc.h>
# define kDNSServiceMaxDomainName AVAHI_DOMAIN_NAME_MAX
-#endif /* HAVE_DNSSD */
+#endif /* HAVE_MDNSRESPONDER */
#ifndef _WIN32
extern char **environ; /* Process environment variables */
typedef struct ippfind_srv_s /* Service information */
{
-#ifdef HAVE_DNSSD
+#ifdef HAVE_MDNSRESPONDER
DNSServiceRef ref; /* Service reference for query */
#elif defined(HAVE_AVAHI)
AvahiServiceResolver *ref; /* Resolver */
-#endif /* HAVE_DNSSD */
+#endif /* HAVE_MDNSRESPONDER */
char *name, /* Service name */
*domain, /* Domain name */
*regtype, /* Registration type */
* Local globals...
*/
-#ifdef HAVE_DNSSD
+#ifdef HAVE_MDNSRESPONDER
static DNSServiceRef dnssd_ref; /* Master service reference */
#elif defined(HAVE_AVAHI)
static AvahiClient *avahi_client = NULL;/* Client information */
static int avahi_got_data = 0; /* Got data from poll? */
static AvahiSimplePoll *avahi_poll = NULL;
/* Poll information */
-#endif /* HAVE_DNSSD */
+#endif /* HAVE_MDNSRESPONDER */
static int address_family = AF_UNSPEC;
/* Address family for LIST */
* Local functions...
*/
-#ifdef HAVE_DNSSD
+#ifdef HAVE_MDNSRESPONDER
static void DNSSD_API browse_callback(DNSServiceRef sdRef, DNSServiceFlags flags, uint32_t interfaceIndex, DNSServiceErrorType errorCode, const char *serviceName, const char *regtype, const char *replyDomain, void *context) _CUPS_NONNULL(1,5,6,7,8);
static void DNSSD_API browse_local_callback(DNSServiceRef sdRef, DNSServiceFlags flags, uint32_t interfaceIndex, DNSServiceErrorType errorCode, const char *serviceName, const char *regtype, const char *replyDomain, void *context) _CUPS_NONNULL(1,5,6,7,8);
#elif defined(HAVE_AVAHI)
static void client_callback(AvahiClient *client,
AvahiClientState state,
void *context);
-#endif /* HAVE_AVAHI */
+#endif /* HAVE_MDNSRESPONDER */
static int compare_services(ippfind_srv_t *a, ippfind_srv_t *b);
static const char *dnssd_error_string(int error);
static ippfind_expr_t *new_expr(ippfind_op_t op, int invert,
const char *value, const char *regex,
char **args);
-#ifdef HAVE_DNSSD
+#ifdef HAVE_MDNSRESPONDER
static void DNSSD_API resolve_callback(DNSServiceRef sdRef, DNSServiceFlags flags, uint32_t interfaceIndex, DNSServiceErrorType errorCode, const char *fullName, const char *hostTarget, uint16_t port, uint16_t txtLen, const unsigned char *txtRecord, void *context) _CUPS_NONNULL(1,5,6,9, 10);
#elif defined(HAVE_AVAHI)
static int poll_callback(struct pollfd *pollfds,
AvahiStringList *txt,
AvahiLookupResultFlags flags,
void *context);
-#endif /* HAVE_DNSSD */
+#endif /* HAVE_MDNSRESPONDER */
static void set_service_uri(ippfind_srv_t *service);
static void show_usage(void) _CUPS_NORETURN;
static void show_version(void) _CUPS_NORETURN;
/* Logic for next expression */
int invert = 0; /* Invert expression? */
int err; /* DNS-SD error */
-#ifdef HAVE_DNSSD
+#ifdef HAVE_MDNSRESPONDER
fd_set sinput; /* Input set for select() */
struct timeval stimeout; /* Timeout for select() */
-#endif /* HAVE_DNSSD */
+#endif /* HAVE_MDNSRESPONDER */
double endtime; /* End time */
static const char * const ops[] = /* Node operation names */
{
* Start up browsing/resolving...
*/
-#ifdef HAVE_DNSSD
+#ifdef HAVE_MDNSRESPONDER
if ((err = DNSServiceCreateConnection(&dnssd_ref)) != kDNSServiceErr_NoError)
{
_cupsLangPrintf(stderr, _("ippfind: Unable to use Bonjour: %s"),
dnssd_error_string(err));
return (IPPFIND_EXIT_BONJOUR);
}
-#endif /* HAVE_DNSSD */
+#endif /* HAVE_MDNSRESPONDER */
for (search = (const char *)cupsArrayFirst(searches);
search;
if (getenv("IPPFIND_DEBUG"))
fprintf(stderr, "Resolving name=\"%s\", regtype=\"%s\", domain=\"%s\"\n", name, regtype, domain);
-#ifdef HAVE_DNSSD
+#ifdef HAVE_MDNSRESPONDER
service->ref = dnssd_ref;
err = DNSServiceResolve(&(service->ref),
kDNSServiceFlagsShareConnection, 0, name,
err = 0;
else
err = avahi_client_errno(avahi_client);
-#endif /* HAVE_DNSSD */
+#endif /* HAVE_MDNSRESPONDER */
}
else
{
if (getenv("IPPFIND_DEBUG"))
fprintf(stderr, "Browsing for regtype=\"%s\", domain=\"%s\"\n", regtype, domain);
-#ifdef HAVE_DNSSD
+#ifdef HAVE_MDNSRESPONDER
DNSServiceRef ref; /* Browse reference */
ref = dnssd_ref;
err = 0;
else
err = avahi_client_errno(avahi_client);
-#endif /* HAVE_DNSSD */
+#endif /* HAVE_MDNSRESPONDER */
}
if (err)
{
int process = 0; /* Process services? */
-#ifdef HAVE_DNSSD
+#ifdef HAVE_MDNSRESPONDER
int fd = DNSServiceRefSockFD(dnssd_ref);
/* File descriptor for DNS-SD */
process = 1;
}
-#endif /* HAVE_DNSSD */
+#endif /* HAVE_MDNSRESPONDER */
if (process)
{
if (active < 50)
{
-#ifdef HAVE_DNSSD
+#ifdef HAVE_MDNSRESPONDER
service->ref = dnssd_ref;
err = DNSServiceResolve(&(service->ref),
kDNSServiceFlagsShareConnection, 0,
err = 0;
else
err = avahi_client_errno(avahi_client);
-#endif /* HAVE_DNSSD */
+#endif /* HAVE_MDNSRESPONDER */
if (err)
{
if (service->ref)
{
-#ifdef HAVE_DNSSD
+#ifdef HAVE_MDNSRESPONDER
DNSServiceRefDeallocate(service->ref);
#else
avahi_service_resolver_free(service->ref);
-#endif /* HAVE_DNSSD */
+#endif /* HAVE_MDNSRESPONDER */
service->ref = NULL;
}
}
-#ifdef HAVE_DNSSD
+#ifdef HAVE_MDNSRESPONDER
/*
* 'browse_callback()' - Browse devices.
*/
replyDomain);
service->is_local = 1;
}
-#endif /* HAVE_DNSSD */
+#endif /* HAVE_MDNSRESPONDER */
#ifdef HAVE_AVAHI
static const char * /* O - Error message */
dnssd_error_string(int error) /* I - Error number */
{
-# ifdef HAVE_DNSSD
+# ifdef HAVE_MDNSRESPONDER
switch (error)
{
case kDNSServiceErr_NoError :
# elif defined(HAVE_AVAHI)
return (avahi_strerror(error));
-# endif /* HAVE_DNSSD */
+# endif /* HAVE_MDNSRESPONDER */
}
* resolves...
*/
-#ifdef HAVE_DNSSD
+#ifdef HAVE_MDNSRESPONDER
DNSServiceConstructFullName(fullName, serviceName, regtype, replyDomain);
#else /* HAVE_AVAHI */
avahi_service_name_join(fullName, kDNSServiceMaxDomainName, serviceName,
regtype, replyDomain);
-#endif /* HAVE_DNSSD */
+#endif /* HAVE_MDNSRESPONDER */
service->fullName = strdup(fullName);
* 'resolve_callback()' - Process resolve data.
*/
-#ifdef HAVE_DNSSD
+#ifdef HAVE_MDNSRESPONDER
static void DNSSD_API
resolve_callback(
DNSServiceRef sdRef, /* I - Service reference */
set_service_uri(service);
}
-#endif /* HAVE_DNSSD */
+#endif /* HAVE_MDNSRESPONDER */
/*
/*
- * Do we have mDNSResponder for DNS Service Discovery (aka Bonjour)?
+ * Do we have DNS Service Discovery (aka Bonjour) support?
*/
#define HAVE_DNSSD 1
/*
- * Do we have Avahi for DNS Service Discovery (aka Bonjour)?
+ * Do we have mDNSResponder for DNS-SD?
*/
-#undef HAVE_AVAHI
+#define HAVE_MDNSRESPONDER 1
+
+
+/*
+ * Do we have Avahi for DNS-SD?
+ */
+
+/* #undef HAVE_AVAHI */
/*
* Do we have <sys/ioctl.h>?
*/
-#undef HAVE_SYS_IOCTL_H
+/* #undef HAVE_SYS_IOCTL_H */
/*
/*
- * Do we have mDNSResponder for DNS Service Discovery (aka Bonjour)?
+ * Do we have DNS Service Discovery (aka Bonjour) support?
*/
#define HAVE_DNSSD 1
/*
- * Do we have Avahi for DNS Service Discovery (aka Bonjour)?
+ * Do we have mDNSResponder for DNS-SD?
+ */
+
+#define HAVE_MDNSRESPONDER 1
+
+
+/*
+ * Do we have Avahi for DNS-SD?
*/
/* #undef HAVE_AVAHI */