-
Notifications
You must be signed in to change notification settings - Fork 463
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add avahi support #3066
Comments
CUPS.org User: mike The changes still need to conform to the CUPS coding standards (mainly comments are missing), and I'd rather make the code HAVE_AVAHI or HAVE_DNSSD (but only one gets defined). We can worry about adding configure options to choose which implementation to use at the end - some Linux distros come with mDNSResponder instead of Avahi. I think you are going to have serious problems implementing Avahi in the scheduler since it is so tightly coupled to glib (or that's how it looked when I investigated adding "native" Avahi support last year), and the lack of documentation on the low-level interfaces that don't depend on glib (which is probably what you'll need to use) won't help either. Finally, the source changes will be large enough we'll probably need a copyright assignment or at least a licensing to Apple to keep the CUPS sources (legally) clean. Moving to -feature for now; if we end up with a complete implementation before 1.4.0 is released and have any legal issues resolved, it can go in 1.4.x, otherwise probably 1.5.x. |
CUPS.org User: martin.pitt.canonical Please note that this
causes the test suite to fail when being run without a running system D-BUS instance: FAIL: 20 error messages, expected 18. This is usually the case when calling "make check" during package build on build servers. It's usually a great idea to enable the tests during package build to catch regressions on particular architectures or from underlying libraries, so I wouldn't like to lose this feature. Perhaps this can be toned down to a mere printf() to stdout (for debugging), and exit cleanly? |
CUPS.org User: martin.pitt.canonical Just for the records, this is what connect(5, {sa_family=AF_FILE, path="/var/run/dbus/system_bus_socket"}, 33) = -1 ENOENT (No such file or directory) Slightly altering the code snippet to
keeps the test suite happy. Would this be acceptable? |
CUPS.org User: twaugh.redhat It's the avahi equivalent of this: if (DNSServiceCreateConnection(&main_ref) != kDNSServiceErr_NoError) So if one has to change, the other also has to change. |
CUPS.org User: Spudd86 might I suggest using pkg-config to detect avahi rather than so you do like this instead: PKG_CHECK_MODULES([AVAHI], [avahi-client]) (with changes to make stuff work... but that's the idea) |
CUPS.org User: twaugh.redhat Note that the current version of the patch is here: http://cvs.fedoraproject.org/viewvc/devel/cups/cups-avahi.patch?view=markup and that further work is required for Avahi support in the scheduler. |
CUPS.org User: twaugh.redhat Having implemented native Avahi support for branch-1.4, I've now split it up into separate functional pieces and have begun re-basing them to trunk. There are 5 in total but I have not yet re-based the last of them. I'll attach the first 4 here. |
CUPS.org User: twaugh.redhat I've updated patch number 4 in the sequence (Avahi poll API implementation) to fix a resource leak during an error condition. Problem spotted using static code analysis. |
CUPS.org User: mike Pushing out pending licensing... |
CUPS.org User: anybody Has this been included in CUPS 1.5 ? A presentation from April 2010 mentioned "Bonjour support: Full support for Avahi" as one of the changes for CUPS v1.5 (Source: https://www.linuxfoundation.org/sites/main/files/cups-openprinting-april-10.pdf), however upon release of the new version I couldn't really identify something in the changelog that made it clear to me whether this has been included or not. Basically what I want to do is use AirPrint in Gentoo, and since Gentoo doesn't ship an Avahi-patched-CUPS-1.4 (like Ubuntu does) i'm stuck on the very old 1.3.x release... I was hoping that a "reintegration" of AVAHI would be part of CUPS 1.5 and would allow me to upgrade. Was I wrong about this? |
CUPS.org User: mike No, current CUPS 1.5 does NOT have Avahi support. We are waiting on legal issues to incorporate the code changes. |
CUPS.org User: twaugh.redhat Current patch set, with license updated, attached. |
CUPS.org User: twaugh.redhat Current patch set attached. |
CUPS.org User: stoatwblr FWIW these patches don't get used when compiling cups 1.5 on rhel6 I assumed it's the avahi-client reference in dnssd.m4 that's causing it but converting that to avahi-libs doesn't work either. |
CUPS.org User: twaugh.redhat Note that you need to run these commands after applying the patches: aclocal -I config-scripts |
CUPS.org User: stoatwblr Slightly further now - it's checking for avahi and then decides "no" |
CUPS.org User: twaugh.redhat Did you supply '--enable-avahi' to configure? For a working Avahi-patched CUPS build, take a look at how it is done in e.g. Fedora. |
CUPS.org User: andyrtr Can you please rebase the patch set for 1.5.1 release? thanks. |
CUPS.org User: stoatwblr Yes I did use the --enable-avahi flags. Will look more closely at the Fedora builds. Thanks. |
CUPS.org User: stoatwblr Tim: More RHELisms, I'm afraid: aclocal -I config-scripts/usr/share/aclocal/aalib.m4:12: warning: underquoted definition of AM_PATH_AALIB Also, would you mind looking at what's needed to rebase to 1.5.2? |
CUPS.org User: twaugh.redhat stoatwblr: I'm not sure what you mean. The warnings you are seeing are from a mistake in the aalib m4 macros -- they have no bearing on CUPS or Avahi, and are not responsible for any issues you may be seeing. I've merged upstream cups changes into my patch set, for which a git repository can be obtained as follows: The separate parts of the Avahi support are available as patches here: Michael, is there any possibility that these patches will be merged into the CUPS source soon? I also have patches for trunk (although they are missing the needed libcups changes).. but I think Avahi support was targeted for 1.5 in any case. |
CUPS.org User: mike OK, so I've started integrating this but the changes do not conform to the CUPS coding standards and break the existing mDNSResponder code... |
CUPS.org User: mike OK, I'm just getting back to this to finish up the work. I think there is a serious issue with the dnssd implementation as it is doing a RESOLVE to get the TXT record. That is really not a good idea as it forces most devices to their full power state. What we want to use here is a QUERY to get the TXT record, which means using avahi_record_browser_new to get the TXT record type. Geez the Avahi documentation is awful... |
CUPS.org User: mike Oh, and another side-effect of how this is currently implemented is that we will flood the network with resolves, which is also not good (will fail in many cases and is not nice since it can cause a DoS of the network...) |
CUPS.org User: mike The _httpResolveURI changes also needed to be re-worked. There was no timeout after 90 seconds, no initial lookup for the service in the .local domain, and no reporting of offline/online status. I am also concerned about the use of the IP address in the resolved URI since that is often a VPN address for wide-area Bonjour. Will do some more testing to see if the glibc NSS stuff is working in recent Linux distros, since that is what we really want (so the hostname information is preserved in HTTP requests...) |
CUPS.org User: mike OK, the resolve issue was caused by Fedora's default firewall settings (disables mDNS completely... sigh...) |
CUPS.org User: mike OK, resolution and discovery are now working properly. Working on the registration code now... FWIW, Avahi has a bad bug in avahi_simple_poll_iterate where the timeout value is not used: http://avahi.org/ticket/364 I've worked around the bug in question by implementing a custom poll function that uses the desired timeout... |
CUPS.org User: mike OK, I've re-worked all of the DNS-SD functionality in cupsd; I have a few more things to change to properly support Avahi, but we are really close now... |
CUPS.org User: mike OK, trunk now has mostly complete Avahi support in r10417. The one remaining task is to add browsing to the new cupsEnumDests() API. The implementation in the scheduler is significantly different than provided, using the avahi_threaded_poll() path to avoid introducing the whole timeout interface and more complications. |
CUPS.org User: twaugh.redhat Thanks! |
CUPS.org User: mike This is complete as of r10470. |
"cups-avahi-backend.patch": diff --git a/backend/dnssd.c b/backend/dnssd.c
@@ -30,7 +31,18 @@ #include "backend-private.h" /* typedef struct
+#ifdef HAVE_AVAHI
/*
+#ifdef HAVE_AVAHI
+#ifdef HAVE_AVAHI
@@ -238,11 +351,19 @@ main(int argc, /* I - Number of command-line args */
+#ifndef HAVE_AVAHI
+#ifdef HAVE_AVAHI
+static void
+static void
+#else /* !HAVE_AVAHI /
/* key.name = (char *)serviceName; key.domain = (char *)replyDomain;
for (device = cupsArrayFind(devices, &key);
+#ifdef HAVE_AVAHI
return (device); +#ifndef HAVE_AVAHI
unquote(name, fullName, sizeof(name));
+static cups_device_t *
- priority[256]; /* Priority */
- &valueLen);
- value = TXTRecordGetValuePtr(rdlen, rdata, "usb_MODEL", &valueLen);
@@ -797,6 +1125,35 @@ unquote(char dst, / I - Destination buffer */ +static int
/*
AC_SUBST(DNSSDLIBS) /*
|
"0001-New-enable-avahi-configure-option.patch": From d948ecde8d30db6fbf5688d9caf2592c7c09577d Mon Sep 17 00:00:00 2001 Currently has no effect.config-scripts/cups-dnssd.m4 | 15 +++++++++++++++ diff --git a/config-scripts/cups-dnssd.m4 b/config-scripts/cups-dnssd.m4 +AC_ARG_ENABLE(avahi, [ --enable-avahi turn on DNS Service Discovery support, default=no],
1.7.3.4 |
"0002-Avahi-support-in-the-dnssd-backend.patch": From 5e72ac0b42633facc875ab46d1601b59aed60d13 Mon Sep 17 00:00:00 2001 backend/dnssd.c | 580 +++++++++++++++++++++++++++++++++++++++++++------- diff --git a/backend/dnssd.c b/backend/dnssd.c
#include "backend-private.h" /* typedef struct
+typedef struct
+#ifdef HAVE_DNSSD
/*
+#ifdef HAVE_DNSSD
+#ifdef HAVE_AVAHI
+/*
/*
+#ifdef HAVE_AVAHI
+#ifdef HAVE_DNSSD @@ -272,11 +466,35 @@ main(int argc, /* I - Number of command-line args */
+#ifdef HAVE_DNSSD
+#ifdef HAVE_DNSSD
@@ -551,18 +812,7 @@ get_device(cups_array_t devices, / I - Device array */ key.name = (char *)serviceName;
for (device = cupsArrayFind(devices, &key); +#ifdef HAVE_DNSSD
cupsArrayAdd(devices, device); @@ -610,13 +869,20 @@ get_device(cups_array_t devices, / I - Device array */
+#ifdef HAVE_DNSSD
+#ifdef HAVE_DNSSD
+#ifdef HAVE_AVAHI
+/*
+/*
+/_
- device_id[2048];/* 1284 device ID */
- */- datalen = *data++;
- datanext = data + datalen;
- *ptr = '\0';
- data ++;
/*
/* include <sys/select.h>endif /* WIN32 */#endif /* HAVE_DNSSD / /* +#ifdef HAVE_AVAHI
if (logit) +#ifdef HAVE_DNSSD
resolved_uri[0] = '\0'; @@ -1447,6 +1493,7 @@ _httpResolveURI(
+#ifdef HAVE_DNSSD
+#else /* HAVE_AVAHI */
if (logit) -#else
-#endif /* HAVE_DNSSD /
@@ -1768,6 +1845,116 @@ resolve_callback( +#ifdef HAVE_AVAHI
+/*
/_
|
"0003-Timed-callback-support-needed-for-Avahi.patch": From cf80621258dfff7dad567ddb34ac042e9c59ade6 Mon Sep 17 00:00:00 2001 scheduler/Makefile | 3 +- diff --git a/scheduler/Makefile b/scheduler/Makefile
+#ifdef HAVE_AVAHI
+#ifdef HAVE_AVAHI /*
+#ifdef HAVE_AVAHI
diff --git a/scheduler/main.c b/scheduler/main.c
#ifdef HAVE_GETEUID httpInitialize(); +#ifdef HAVE_AVAHI
cupsdStartServer(); /* +#ifdef HAVE_AVAHI
/* +#ifdef HAVE_AVAHI
/_
+/_
+/*
+/*
+/*
+/*
+/*
+/*
+#endif /* HAVE_AVAHI ... from top of file /
+ */1.7.3.4 |
"0004-Avahi-poll-API-implementation.patch": From 6e0fe12e81d7f88b2d07924d6d1aed42d62bb89d Mon Sep 17 00:00:00 2001 scheduler/Makefile | 1 + diff --git a/scheduler/Makefile b/scheduler/Makefile CUPSDOBJS =
+struct AvahiWatch
+struct AvahiTimeout
+/_
+/*
+/*
+/*
+/*
+/*
+/*
+/*
+/*
+/*
+/*
+/*
+/*
+/*
+/*
+/*
+/*
+#endif /* HAVE_AVAHI ... from top of file /
+/_
+ */1.7.3.4 |
"0004-Avahi-poll-API-implementation_v2.patch": From 3aeafd44e8e0d5208e2ebdc65a2051942d766674 Mon Sep 17 00:00:00 2001 scheduler/Makefile | 1 + diff --git a/scheduler/Makefile b/scheduler/Makefile CUPSDOBJS =
+struct AvahiWatch
+struct AvahiTimeout
+/_
+/*
+/*
+/*
+/*
+/*
+/*
+/*
+/*
+/*
+/*
+/*
+/*
+/*
+/*
+/*
+/*
+#endif /* HAVE_AVAHI ... from top of file /
+/_
+ */1.7.4 |
"cups-1-avahi-config.patch": diff --git a/config-scripts/cups-dnssd.m4 b/config-scripts/cups-dnssd.m4 +AC_ARG_ENABLE(avahi, [ --enable-avahi turn on DNS Service Discovery support, default=no],
|
"cups-2-avahi-backend.patch": diff --git a/backend/dnssd.c b/backend/dnssd.c
#include "backend-private.h" /* typedef struct
+typedef struct
+#ifdef HAVE_DNSSD
/*
+#ifdef HAVE_DNSSD
+#ifdef HAVE_AVAHI
+/*
/*
+#ifdef HAVE_AVAHI
+#ifdef HAVE_DNSSD @@ -284,11 +478,35 @@ main(int argc, /* I - Number of command-line args */
+#ifdef HAVE_DNSSD +#ifdef HAVE_DNSSD @@ -333,14 +552,23 @@ main(int argc, /* I - Number of command-line args */
+#ifdef HAVE_DNSSD
@@ -589,20 +854,7 @@ get_device(cups_array_t devices, / I - Device array */ key.name = (char *)serviceName;
for (device = cupsArrayFind(devices, &key); +#ifdef HAVE_DNSSD
cupsArrayAdd(devices, device); @@ -650,13 +911,20 @@ get_device(cups_array_t devices, / I - Device array */
+#ifdef HAVE_DNSSD
+#ifdef HAVE_DNSSD
+#ifdef HAVE_AVAHI
+/*
+/*
+/_
- device_id[2048];/* 1284 device ID */
- break;- datanext = data + datalen;
- *ptr = '\0';
- data ++;
- value[datanext - data] = '\0';
- }
/*
/* include <sys/select.h>endif /* WIN32 */#endif /* HAVE_DNSSD / /* +#ifdef HAVE_AVAHI
if (options & _HTTP_RESOLVE_STDERR) +#ifdef HAVE_DNSSD
resolved_uri[0] = '\0'; DEBUG_printf(("6_httpResolveURI: Resolving hostname="%s", regtype="%s", " uri = NULL; +#ifdef HAVE_DNSSD
+#else /* HAVE_AVAHI */
if (options & _HTTP_RESOLVE_STDERR) -#else
-#endif /* HAVE_DNSSD /
@@ -1895,6 +1974,116 @@ http_resolve_cb( +#ifdef HAVE_AVAHI
+/*
/_
|
"cups-3-timeouts.patch": diff --git a/scheduler/Makefile b/scheduler/Makefile
+#ifdef HAVE_AVAHI
+#ifdef HAVE_AVAHI /*
+#ifdef HAVE_AVAHI
#ifdef HAVE_GETEUID httpInitialize(); +#ifdef HAVE_AVAHI
cupsdStartServer(); /* +#ifdef HAVE_AVAHI
/* +#ifdef HAVE_AVAHI
/_
+/_
+/*
+/*
+/*
+/*
+/*
+/*
+#endif /* HAVE_AVAHI ... from top of file /
|
"cups-4-avahi-poll.patch": diff --git a/scheduler/Makefile b/scheduler/Makefile CUPSDOBJS =
+struct AvahiWatch
+struct AvahiTimeout
+/_
+/*
+/*
+/*
+/*
+/*
+/*
+/*
+/*
+/*
+/*
+/*
+/*
+/*
+/*
+/*
+/*
+#endif /* HAVE_AVAHI ... from top of file /
+/_
|
"cups-5-avahi-services.patch": diff --git a/cgi-bin/admin.c b/cgi-bin/admin.c -#ifdef HAVE_DNSSD #ifdef HAVE_LDAP -#ifdef HAVE_DNSSD #ifdef HAVE_LDAP -#ifdef HAVE_DNSSD
-#ifdef HAVE_DNSSD diff --git a/scheduler/dirsvc.c b/scheduler/dirsvc.c
+#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
+#ifdef HAVE_AVAHI
-#ifdef HAVE_DNSSD
@@ -702,10 +729,10 @@ cupsdRegisterPrinter(cupsd_printer_t p)/ I - Printer / -#ifdef HAVE_DNSSD
@@ -1419,6 +1446,27 @@ ldap_disconnect(LDAP ld) / I - LDAP handle / +#ifdef HAVE_AVAHI
-#ifdef HAVE_DNSSD +#ifdef HAVE_DNSSD
+#endif /* HAVE_DNSSD */
@@ -1606,9 +1658,16 @@ cupsdStartBrowsing(void)
+#ifdef HAVE_AVAHI
#ifdef HAVE_LIBSLP -#ifdef HAVE_DNSSD
#ifdef HAVE_LIBSLP -#ifdef HAVE_DNSSD
+#ifdef HAVE_DNSSD @@ -2054,9 +2120,45 @@ cupsdUpdateDNSSDName(void)
#ifdef HAVE_LDAP endif /* HAVE_COREFOUNDATION */+#endif /* HAVE_DNSSD */ +#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
-static char * /* O - TXT record /
+#ifdef HAVE_DNSSD
@@ -2474,7 +2588,16 @@ static int /* O - Result of comparison /
@@ -2489,6 +2612,10 @@ dnssdDeregisterPrinter( +#ifdef HAVE_DNSSD
/*
/*
+#ifdef HAVE_DNSSD
+#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
+#ifdef HAVE_DNSSD
cupsdLogMessage(CUPSD_LOG_DEBUG2, "dnssdRegisterPrinter(%s) %s", p->name,
|
"cups-avahi-1-config.patch": diff -up cups-1.5.0/config.h.in.avahi-1-config cups-1.5.0/config.h.in /*
diff -up cups-1.5.0/config-scripts/cups-dnssd.m4.avahi-1-config cups-1.5.0/config-scripts/cups-dnssd.m4 +AC_ARG_ENABLE(avahi, [ --enable-avahi turn on DNS Service Discovery support, default=no],
|
"cups-avahi-2-backend.patch": diff -up cups-1.5.0/backend/dnssd.c.avahi-2-backend cups-1.5.0/backend/dnssd.c
#include "backend-private.h" /* typedef struct
+typedef struct
+#ifdef HAVE_DNSSD
/*
+#ifdef HAVE_DNSSD
+#ifdef HAVE_AVAHI
+/*
/*
+#ifdef HAVE_AVAHI
+#ifdef HAVE_DNSSD @@ -284,11 +478,35 @@ main(int argc, /* I - Number of comm
+#ifdef HAVE_DNSSD +#ifdef HAVE_DNSSD @@ -333,14 +552,23 @@ main(int argc, /* I - Number of comm
+#ifdef HAVE_DNSSD
@@ -589,20 +854,7 @@ get_device(cups_array_t devices, / I - key.name = (char *)serviceName;
for (device = cupsArrayFind(devices, &key); +#ifdef HAVE_DNSSD
cupsArrayAdd(devices, device); @@ -650,13 +911,20 @@ get_device(cups_array_t devices, / I -
+#ifdef HAVE_DNSSD
+#ifdef HAVE_DNSSD
+#ifdef HAVE_AVAHI
+/*
+/*
- device_id[2048];/* 1284 device ID */
- */- datalen = *data++;
- break;- datanext = data + datalen;
- data ++;
- }
/*
/* include <sys/select.h>endif /* WIN32 */#endif /* HAVE_DNSSD / /* +#ifdef HAVE_AVAHI
if (options & _HTTP_RESOLVE_STDERR) +#ifdef HAVE_DNSSD
resolved_uri[0] = '\0'; DEBUG_printf(("6_httpResolveURI: Resolving hostname="%s", regtype="%s", " uri = NULL; +#ifdef HAVE_DNSSD
+#else /* HAVE_AVAHI */
if (options & _HTTP_RESOLVE_STDERR) -#else
-#endif /* HAVE_DNSSD /
@@ -1895,6 +1974,116 @@ http_resolve_cb( +#ifdef HAVE_AVAHI
+/*
/_
|
"cups-avahi-3-timeouts.patch": diff -up cups-1.5.0/scheduler/cupsd.h.avahi-3-timeouts cups-1.5.0/scheduler/cupsd.h typedef void (*cupsd_selfunc_t)(void *data); +#ifdef HAVE_AVAHI
+#ifdef HAVE_AVAHI /*
+#ifdef HAVE_AVAHI
#ifdef HAVE_GETEUID httpInitialize(); +#ifdef HAVE_AVAHI
cupsdStartServer(); /* +#ifdef HAVE_AVAHI
/* +#ifdef HAVE_AVAHI
/_
+/_
+static int
+/*
+/*
+/*
+/*
+/*
+/*
+#endif /* HAVE_AVAHI ... from top of file /
|
"cups-avahi-4-poll.patch": diff -up cups-1.5.0/scheduler/avahi.c.avahi-4-poll cups-1.5.0/scheduler/avahi.c
+struct AvahiWatch
+struct AvahiTimeout
+/_
+/*
+/*
+/*
+/*
+/*
+/*
+/*
+/*
+/*
+/*
+/*
+/*
+/*
+/*
+#endif /* HAVE_AVAHI ... from top of file /
+/_
|
"cups-avahi-5-services.patch": diff -up cups-1.5.0/cgi-bin/admin.c.avahi-5-services cups-1.5.0/cgi-bin/admin.c -#ifdef HAVE_DNSSD #ifdef HAVE_LDAP -#ifdef HAVE_DNSSD #ifdef HAVE_LDAP -#ifdef HAVE_DNSSD
-#ifdef HAVE_DNSSD diff -up cups-1.5.0/scheduler/dirsvc.c.avahi-5-services cups-1.5.0/scheduler/dirsvc.c
+#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
+#ifdef HAVE_AVAHI
-#ifdef HAVE_DNSSD
@@ -702,10 +727,10 @@ cupsdRegisterPrinter(cupsd_printer_t p) -#ifdef HAVE_DNSSD
@@ -1419,6 +1444,36 @@ ldap_disconnect(LDAP ld) / I - LDAP h +#ifdef HAVE_AVAHI
-#ifdef HAVE_DNSSD +#ifdef HAVE_DNSSD
+#endif /* HAVE_DNSSD */
@@ -1598,17 +1657,23 @@ cupsdStartBrowsing(void)
#ifdef HAVE_LIBSLP -#ifdef HAVE_DNSSD
#ifdef HAVE_LIBSLP -#ifdef HAVE_DNSSD
+#ifdef HAVE_DNSSD @@ -2054,9 +2126,45 @@ cupsdUpdateDNSSDName(void)
#ifdef HAVE_LDAP endif /* HAVE_COREFOUNDATION */+#endif /* HAVE_DNSSD */ +#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
-static char * /* O - TXT record /
+#ifdef HAVE_DNSSD -}-/*
- */-static int /* O - Result of comparison /
@@ -2489,6 +2597,10 @@ dnssdDeregisterPrinter( +#ifdef HAVE_DNSSD
/*
/*
+#ifdef HAVE_DNSSD
+#if defined(HAVE_DNSSD) || defined(HAVE_AVAHI)
+#ifdef HAVE_DNSSD
cupsdLogMessage(CUPSD_LOG_DEBUG2, "dnssdRegisterPrinter(%s) %s", p->name,
|
Version: 1.6-feature
CUPS.org User: twaugh.redhat
I'm in the process of adding support for Avahi, an implementation of mDNS/DNS-SD.
It is not yet complete, but seems to be working for at least the dnssd backend.
I'm attaching a patch for review, to see if I'm heading in the right direction before continuing on with the scheduler.
The text was updated successfully, but these errors were encountered: