{
CUPS_DEVICE_PRINTER = 0, /* lpd://... */
CUPS_DEVICE_IPP, /* ipp://... */
+ CUPS_DEVICE_IPPS, /* ipps://... */
CUPS_DEVICE_FAX_IPP, /* ipp://... */
CUPS_DEVICE_PDL_DATASTREAM, /* socket://... */
CUPS_DEVICE_RIOUSBPRINT /* riousbprint://... */
fax_ipp_ref, /* IPP fax service reference */
ipp_ref, /* IPP service reference */
ipp_tls_ref, /* IPP w/TLS service reference */
+ ipps_ref, /* IPP service reference */
local_fax_ipp_ref, /* Local IPP fax service reference */
local_ipp_ref, /* Local IPP service reference */
local_ipp_tls_ref, /* Local IPP w/TLS service reference */
+ local_ipps_ref, /* Local IPP service reference */
local_printer_ref, /* Local LPD service reference */
pdl_datastream_ref, /* AppSocket service reference */
printer_ref, /* LPD service reference */
DNSServiceBrowse(&ipp_tls_ref, kDNSServiceFlagsShareConnection, 0,
"_ipp-tls._tcp", NULL, browse_callback, devices);
+ ipps_ref = main_ref;
+ DNSServiceBrowse(&ipp_ref, kDNSServiceFlagsShareConnection, 0,
+ "_ipps._tcp", NULL, browse_callback, devices);
+
local_fax_ipp_ref = main_ref;
DNSServiceBrowse(&local_fax_ipp_ref, kDNSServiceFlagsShareConnection,
kDNSServiceInterfaceIndexLocalOnly,
kDNSServiceInterfaceIndexLocalOnly,
"_ipp-tls._tcp", NULL, browse_local_callback, devices);
+ local_ipps_ref = main_ref;
+ DNSServiceBrowse(&local_ipp_ref, kDNSServiceFlagsShareConnection,
+ kDNSServiceInterfaceIndexLocalOnly,
+ "_ipps._tcp", NULL, browse_local_callback, devices);
+
local_printer_ref = main_ref;
DNSServiceBrowse(&local_printer_ref, kDNSServiceFlagsShareConnection,
kDNSServiceInterfaceIndexLocalOnly,
FD_ZERO(&input);
FD_SET(fd, &input);
- timeout.tv_sec = 1;
- timeout.tv_usec = 0;
+ timeout.tv_sec = 0;
+ timeout.tv_usec = 250000;
if (select(fd + 1, &input, NULL, NULL, &timeout) < 0)
continue;
cups_device_t *best; /* Best matching device */
char device_uri[1024]; /* Device URI */
int count; /* Number of queries */
-
+ int sent; /* Number of sent */
for (device = (cups_device_t *)cupsArrayFirst(devices),
- best = NULL, count = 0;
+ best = NULL, count = 0, sent = 0;
device;
device = (cups_device_t *)cupsArrayNext(devices))
+ {
+ if (device->sent)
+ sent ++;
+
+ if (device->ref)
+ count ++;
+
if (!device->ref && !device->sent)
{
/*
* Found the device, now get the TXT record(s) for it...
*/
- if (count < 10)
+ if (count < 20)
{
device->ref = main_ref;
best->name, best->device_id, NULL);
best->sent = 1;
best = device;
+
+ sent ++;
}
else if (best->priority > device->priority ||
(best->priority == device->priority &&
{
best->sent = 1;
best = device;
+
+ sent ++;
}
else
+ {
device->sent = 1;
+
+ sent ++;
+ }
}
+ }
if (best)
{
cupsBackendReport("network", device_uri, best->make_and_model,
best->name, best->device_id, NULL);
best->sent = 1;
+ sent ++;
}
+
+ if (sent == cupsArrayCount(devices))
+ break;
}
}
key.name = (char *)serviceName;
- if (!strcmp(regtype, "_ipp._tcp.") ||
- !strcmp(regtype, "_ipp-tls._tcp."))
+ if (!strcmp(regtype, "_ipp._tcp."))
key.type = CUPS_DEVICE_IPP;
+ else if (!strcmp(regtype, "_ipps._tcp.") ||
+ !strcmp(regtype, "_ipp-tls._tcp."))
+ key.type = CUPS_DEVICE_IPPS;
else if (!strcmp(regtype, "_fax-ipp._tcp."))
key.type = CUPS_DEVICE_FAX_IPP;
else if (!strcmp(regtype, "_printer._tcp."))
if ((ptr = strstr(name, "._")) != NULL)
*ptr = '\0';
- if (strstr(fullName, "_ipp._tcp.") ||
- strstr(fullName, "_ipp-tls._tcp."))
+ if (strstr(fullName, "_ipp._tcp."))
dkey.type = CUPS_DEVICE_IPP;
+ else if (strstr(fullName, "_ipps._tcp.") ||
+ strstr(fullName, "_ipp-tls._tcp."))
+ dkey.type = CUPS_DEVICE_IPPS;
else if (strstr(fullName, "_fax-ipp._tcp."))
dkey.type = CUPS_DEVICE_FAX_IPP;
else if (strstr(fullName, "_printer._tcp."))
if (data < datanext)
memcpy(value, data, datanext - data);
value[datanext - data] = '\0';
+
+ fprintf(stderr, "DEBUG2: query_callback: \"%s=%s\".\n",
+ key, value);
}
else
+ {
+ fprintf(stderr, "DEBUG2: query_callback: \"%s\" with no value.\n",
+ key);
continue;
+ }
if (!_cups_strncasecmp(key, "usb_", 4))
{
else if (!_cups_strcasecmp(key, "priority"))
device->priority = atoi(value);
else if ((device->type == CUPS_DEVICE_IPP ||
+ device->type == CUPS_DEVICE_IPPS ||
device->type == CUPS_DEVICE_PRINTER) &&
!_cups_strcasecmp(key, "printer-type"))
{