On 2016-12-13 03:58 PM, Till Kamppeter wrote:
Hi,
I am leading the OpenPrinting project and currently I am working on
driverless (IPP Everywhere, AirPrint) printing.
Driverless means that not driver is needed on the client. As driver we
consider any kind of printer-model-specific software or data.
Driverless printers advertise themselves by Bonjour and are accessible
via IPP. IPP is used as the client can poll capability information
from the printer, so that no printer-model-specific data (the
printer's capabilities) is needed. The printer also works with at
least one known Page Description Language (PDL) so that no
printer-model-specific software (filter for proprietary PDL) is needed.
This works fine in a network. I have made cups-browsed (part of
cups-filters which I am maintaining) listening to Bonjour broadcasts
of driverless printers to automatically set up print queues for them.
Now there are also IPP-over-USB printers. These printers have IPP
implemented via USB, so that they can get queried for driverless
printing like IPP network printers, and one can use the printer's web
administration interface. I am maintaining ippusbxd which is a simple
daemon mapping the the input and output to and from the printer to
localhost:60000 (or other ports). With this one can set up the
IPP-over-USB printer like an IPP network printer and also driverless
printing works.
What is missing is that the IPP-over-USB printer gets advertised to
the local cups-browsed for automatic print queue setup, as the printer
is not Bonjour-broadcasting. So I tried to fire up an appropriate
Avahi service from ippusbxd. What I need is that the service's address
is "localhost:6000" and/or "127.0.0.1:60000" and that service is only
advertised on the local machine, not on other machines on the local
network, because the printer is only accessible from the local machine.
I have tried to add the service via
avahi_entry_group_add_service_strlst(bonjour_data->ipp_ref,
AVAHI_IF_UNSPEC,
AVAHI_PROTO_UNSPEC, 0,
dnssd_name,
"_ipp._tcp", NULL,
NULL, port,
ipp_txt);
and then the service gets advertised in the whole local network with
the network IP and host name of my computer. The remote machines are
not able to access the printer.
I suspect you need to pass the ID of the local loopback network
interface instead of AVAHI_IF_UNSPEC. From the avahi api
doc..."interface: The interface this service shall be announced on. We
recommend to pass AVAHI_IF_UNSPEC here, to announce on all interfaces."
--
Jonathan Bagg
Embedded Systems Developer
NAD Electronics | Lenbrook Industries Limited
633 Granite Court, Pickering, Ontario, Canada L1W 3K1 | 905-831-0799 ext 4478 |
http://www.nadelectronics.com
_______________________________________________
avahi mailing list
avahi@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/avahi