Поскольку вы пока даже не показываете начальную точку или заглушку своего кода, вот еще одна подсказка: вы можете имитировать действительное, работающее объявление службы AirPrint в вашей локальной/беспроводной локальной сети, что позволит вашим клиентам iOS успешно печатать на существующий принтер (AirPrint или нет).
Требования: Mac с OS X.
После того, как вы заработали, теперь вы можете использовать что-то вроде Wireshark или tcpdump
для захвата пакетов по сети или из эфира, а также для их сохранения и анализа.
Затем начните кодировать собственное приложение и сделайте так, чтобы оно выдавало те же пакеты, что и симуляция.
Известно, что следующее работает на OS X Yosemite (10.10.x).
Предполагая,...
- у вас есть Mac(Book) под управлением OS X,
- имя хоста этого Mac —
mymac
,
- его IP-адрес
192.168.111.111
,
- на нем установлен общий принтер с именем
abcd
(НЕ должен быть с поддержкой AirPrint!), и
- общий принтер не требует аутентификации (поместите
DefaultAuthType none
в /etc/cups/cupsd.conf
),
... затем вы можете сделать очередь abcd
доступной для клиентов iOS.
Чтобы проверить это, просто выполните следующую команду в окне Terminal.app (внимание, команда не вернется — если вы закроете окно Terminal.app, действие команды пропадет!):
dns-sd \
-P AirPrint-abcd \
_ipp._tcp,_universal \
local. \
631 \
mymac.local. \
192.168.111.111 \
pdl="application/pdf,image/urf" \
kind="document" \
priority="1" \
product="Model Name of my Printer" \
rp="printers/abcd" \
URF="DM3" \
Duplex="T" \
Color="T" \
note="Testing AirPrint via MacBook"\
txtvers="1" \
qtotal="1" \
printer-type="0x0480FFFC" \
printer-state="3" \
air="none" \
UUID="54321abc-1234-1234-abcd-1238e4babcd8"
Если это работает (как и должно быть), вы можете легко придумать сценарий или задание cron, которое выполняет эту команду (и позволяет ей работать в фоновом режиме) каждый раз при загрузке Mac. Это оставлено читателю в качестве упражнения.
(Вы можете запустить ту же самую команду без изменений даже на втором, совершенно другом Mac, если первый Mac предоставляет общую очередь печати и все приведенные выше данные соответствуют настройкам первого Mac...)
Справочная информация:
Утилита командной строки dns-sd
предназначена для тестирования и разработки для всех, кто использует Bonjour, mDNS (многоадресный DNS) и DNS-SD (обнаружение служб на основе DNS). Это часть каждой системы OS X с момента появления Bonjour.
Параметр -P
для dns-sd
сделает "прокси-уведомление" Bonjour для вашей локальной сети LAN/WLAN. Объявление сообщит потенциальным клиентам AirPrint следующую информацию:
- В вашем домене
.local.
доступно устройство AirPrint.
- Его зовут
Airprint-abcd
.
- Доступ к нему возможен через IP-адрес
192.168.111.111
и порт 631
.
- Используйте имя очереди печати
printers/abcd
для печати в нее.
- Он может использовать растровые документы PDF и URF.
- Он не требует аутентификации.
- Он может выводить двусторонние и цветные документы.
Подробнее об этой утилите см. man dns-sd
. Дополнительные сведения см. на страницах dns-sd.org и эти другие ответы.
person
Kurt Pfeifle
schedule
04.07.2016