summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorthierry1970 <thierry@ordissimo.com>2020-02-18 09:21:32 +0100
committerthierry1970 <thierry@ordissimo.com>2020-02-18 09:21:32 +0100
commitc92405af00ea557c25f3e81da4217d44e77a4012 (patch)
treedac63449e95bd06aac69baea05ec6def84710551 /src
parentdae0ee318003aa9ebb776743aec9404e53db52b6 (diff)
Dynamic addition of the ipp Duplex property.
Diffstat (limited to 'src')
-rw-r--r--src/capabilities.c12
-rw-r--r--src/capabilities.h1
-rw-r--r--src/dnssd.c11
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");