diff options
author | thierry1970 <thierry@ordissimo.com> | 2020-02-18 09:21:32 +0100 |
---|---|---|
committer | thierry1970 <thierry@ordissimo.com> | 2020-02-18 09:21:32 +0100 |
commit | c92405af00ea557c25f3e81da4217d44e77a4012 (patch) | |
tree | dac63449e95bd06aac69baea05ec6def84710551 /src | |
parent | dae0ee318003aa9ebb776743aec9404e53db52b6 (diff) |
Dynamic addition of the ipp Duplex property.
Diffstat (limited to 'src')
-rw-r--r-- | src/capabilities.c | 12 | ||||
-rw-r--r-- | src/capabilities.h | 1 | ||||
-rw-r--r-- | src/dnssd.c | 11 |
3 files changed, 15 insertions, 9 deletions
diff --git a/src/capabilities.c b/src/capabilities.c index 1b95c3e..311d240 100644 --- a/src/capabilities.c +++ b/src/capabilities.c @@ -1,6 +1,9 @@ #ifndef _DEFAULT_SOURCE # define _DEFAULT_SOURCE #endif + +#define _GNU_SOURCE + #include <stdio.h> #include <stdlib.h> #include <string.h> @@ -274,6 +277,14 @@ ipp_request(ippPrinter *printer, int port) else printer->color = strdup("F"); } + else if(!strcasecmp(attr_name, "sides-supported")) { + if(!strcasestr(buffer, "two-")) + printer->side = strdup("T"); + else if(!strcasestr(buffer, "one-")) + printer->side = strdup("F"); + else + printer->side = strdup("U"); + } else if(!strcasecmp(attr_name, "printer-location")) printer->note = strdup(buffer); else if(!strcasecmp(attr_name, "printer-make-and-model")) @@ -306,6 +317,7 @@ free_printer(ippPrinter *printer) free(printer->note); free(printer->pdl); free(printer->ty); + free(printer->side); free(printer); return NULL; } diff --git a/src/capabilities.h b/src/capabilities.h index a1f7534..b84874a 100644 --- a/src/capabilities.h +++ b/src/capabilities.h @@ -25,6 +25,7 @@ typedef struct { char *pdl; char *note; char *ty; + char *side; } ippPrinter; int is_scanner_present(ippScanner *scanner, int port); diff --git a/src/dnssd.c b/src/dnssd.c index c2dfb8f..7cb6e4a 100644 --- a/src/dnssd.c +++ b/src/dnssd.c @@ -250,6 +250,8 @@ void * dnssd_escl_register(void *data) ipp_txt = avahi_string_list_add_printf(ipp_txt, "URF=%s", printer->urf); if (printer->papermax) ipp_txt = avahi_string_list_add_printf(ipp_txt, "PaperMax=%s", printer->papermax); + if (printer->side) + ipp_txt = avahi_string_list_add_printf(ipp_txt, "Duplex=%s", printer->side); NOTE("Printer TXT[\n\tadminurl=%s\n\tUUID=%s\t\n]\n", printer->adminurl, printer->uuid); @@ -361,7 +363,6 @@ int dnssd_register(AvahiClient *c) const char *serial = NULL; const char *cmd; const char *urf = NULL; - char has_duplex = 'U'; int pwgraster = 0, appleraster = 0, pclm = 0, @@ -451,13 +452,6 @@ int dnssd_register(AvahiClient *c) (pclm ? "application/PCLm," : ""), (jpeg ? "image/jpeg," : "")); formats[strlen(formats) - 1] = '\0'; - if (urf) { - if ((ptr = strcasestr(urf, "DM")) != NULL && - *(ptr + 2) >= '1' && *(ptr + 2) <= '4') - has_duplex = 'T'; - else - has_duplex = 'F'; - } /* * Additional printer properties @@ -477,7 +471,6 @@ int dnssd_register(AvahiClient *c) ipp_txt = NULL; ipp_txt = avahi_string_list_add_printf(ipp_txt, "rp=ipp/print"); - ipp_txt = avahi_string_list_add_printf(ipp_txt, "Duplex=%c", has_duplex); ipp_txt = avahi_string_list_add_printf(ipp_txt, "usb_MFG=%s", make); ipp_txt = avahi_string_list_add_printf(ipp_txt, "usb_MDL=%s", model); ipp_txt = avahi_string_list_add_printf(ipp_txt, "priority=60"); |