From: Michael R Sweet Date: Mon, 8 Mar 2021 00:39:30 +0000 (-0500) Subject: Add mopria-certified and URF/urf-supported keys/attributes. X-Git-Tag: v2.4b1~188^2~23 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=64fe4bf2dd8a7cadd0252209e41abd9cdab8805f;p=thirdparty%2Fcups.git Add mopria-certified and URF/urf-supported keys/attributes. --- diff --git a/scheduler/dirsvc.c b/scheduler/dirsvc.c index 5fd776c249..93524c914e 100644 --- a/scheduler/dirsvc.c +++ b/scheduler/dirsvc.c @@ -316,14 +316,15 @@ dnssdBuildTxtRecord( adminurl_str[256], /* URL for the admin page */ type_str[32], /* Type to string buffer */ state_str[32], /* State to string buffer */ - rp_str[1024], /* Queue name string buffer */ - air_str[1024], /* auth-info-required string buffer */ + rp_str[256], /* Queue name string buffer */ + air_str[256], /* auth-info-required string buffer */ + urf_str[256], /* URF string buffer */ *keyvalue[32][2], /* Table of key/value pairs */ *ptr; /* Pointer in string */ cupsd_txt_t txt; /* TXT record */ cupsd_listener_t *lis; /* Current listener */ const char *admin_scheme = "http"; /* Admin page URL scheme */ - + ipp_attribute_t *urf_supported; /* urf-supported attribute */ /* * Load up the key value pairs... @@ -416,6 +417,30 @@ dnssdBuildTxtRecord( keyvalue[count++][1] = "1.2"; #endif /* HAVE_TLS */ + if ((urf_supported = ippFindAttribute(p->ppd_attrs, "urf-supported", IPP_TAG_KEYWORD)) != NULL) + { + urf_str[0] = '\0'; + for (i = 0, count = ippGetCount(urf_supported), ptr = urf_str; i < count; i ++) + { + const char *value = ippGetString(urf_supported, i, NULL); + + if (ptr > urf_str && ptr < (urf_str + sizeof(urf_str) - 1)) + *ptr++ = ','; + + strlcpy(ptr, value, sizeof(urf_str) - (size_t)(ptr - urf_str)); + ptr += strlen(ptr); + + if (ptr >= (urf_str + sizeof(urf_str) - 1)) + break; + } + + keyvalue[count ][0] = "URF"; + keyvalue[count++][1] = urf_str; + } + + keyvalue[count ][0] = "morpria-certified"; + keyvalue[count++][1] = "1.3"; + if (p->type & CUPS_PRINTER_FAX) { keyvalue[count ][0] = "Fax"; @@ -481,9 +506,6 @@ dnssdBuildTxtRecord( snprintf(type_str, sizeof(type_str), "0x%X", p->type | CUPS_PRINTER_REMOTE); snprintf(state_str, sizeof(state_str), "%d", p->state); - keyvalue[count ][0] = "printer-state"; - keyvalue[count++][1] = state_str; - keyvalue[count ][0] = "printer-type"; keyvalue[count++][1] = type_str; diff --git a/scheduler/printers.c b/scheduler/printers.c index 7638a7cf78..306ebfb363 100644 --- a/scheduler/printers.c +++ b/scheduler/printers.c @@ -3873,6 +3873,9 @@ load_ppd(cupsd_printer_t *p) /* I - Printer */ margins[16]; /* media-*-margin-supported values */ const char *filter, /* Current filter */ *mandatory; /* Current mandatory attribute */ + int num_urf; /* Number of urf-supported values */ + const char *urf[16]; /* urf-supported values */ + char urf_rs[32]; /* RS (resolution) value */ static const char * const pwg_raster_document_types[] = { "black_1", @@ -4087,6 +4090,11 @@ load_ppd(cupsd_printer_t *p) /* I - Printer */ else cupsdClearString(&p->strings); + num_urf = 0; + urf[num_urf ++] = "V1.4"; + urf[num_urf ++] = "PQ3-4-5"; + urf[num_urf ++] = "W8"; + /* * Add media options from the PPD file... */ @@ -4337,6 +4345,8 @@ load_ppd(cupsd_printer_t *p) /* I - Printer */ } } + ippAddString(p->ppd_attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_TEXT), "mopria-certified", NULL, "1.3"); + /* * Output bin... */ @@ -4387,6 +4397,8 @@ load_ppd(cupsd_printer_t *p) /* I - Printer */ "output-bin-supported", NULL, "face-up"); ippAddString(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "output-bin-default", NULL, "face-up"); + + urf[num_urf ++] = "OFU0"; } else { @@ -4413,6 +4425,8 @@ load_ppd(cupsd_printer_t *p) /* I - Printer */ ippAddString(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "print-color-mode-default", NULL, "color"); ippAddStrings(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "pwg-raster-document-type-supported", 3, NULL, pwg_raster_document_types); + + urf[num_urf ++] = "SRGB24"; } else { @@ -4484,7 +4498,11 @@ load_ppd(cupsd_printer_t *p) /* I - Printer */ ippAddResolution(p->ppd_attrs, IPP_TAG_PRINTER, "printer-resolution-default", IPP_RES_PER_INCH, xdpi, ydpi); if (i == 0) + { ippAddResolution(p->ppd_attrs, IPP_TAG_PRINTER, "pwg-raster-document-resolution-supported", IPP_RES_PER_INCH, xdpi, ydpi); + snprintf(urf_rs, sizeof(urf_rs), "RS%d", xdpi); + urf[num_urf ++] = urf_rs; + } } } else if ((ppd_attr = ppdFindAttr(ppd, "DefaultResolution", NULL)) != NULL && @@ -4518,6 +4536,8 @@ load_ppd(cupsd_printer_t *p) /* I - Printer */ "printer-resolution-supported", IPP_RES_PER_INCH, xdpi, ydpi); ippAddResolution(p->ppd_attrs, IPP_TAG_PRINTER, "pwg-raster-document-resolution-supported", IPP_RES_PER_INCH, xdpi, ydpi); + snprintf(urf_rs, sizeof(urf_rs), "RS%d", xdpi); + urf[num_urf ++] = urf_rs; } else { @@ -4532,6 +4552,8 @@ load_ppd(cupsd_printer_t *p) /* I - Printer */ "printer-resolution-supported", IPP_RES_PER_INCH, 300, 300); ippAddResolution(p->ppd_attrs, IPP_TAG_PRINTER, "pwg-raster-document-resolution-supported", IPP_RES_PER_INCH, 300, 300); + strlcpy(urf_rs, "RS300", sizeof(urf_rs)); + urf[num_urf ++] = urf_rs; } /* @@ -4553,6 +4575,8 @@ load_ppd(cupsd_printer_t *p) /* I - Printer */ ippAddString(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "pwg-raster-document-sheet-back", NULL, "normal"); + urf[num_urf ++] = "DM1"; + ippAddStrings(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "sides-supported", 3, NULL, sides); @@ -4647,6 +4671,9 @@ load_ppd(cupsd_printer_t *p) /* I - Printer */ } } + /* urf-supported */ + ippAddStrings(p->ppd_attrs, IPP_TAG_PRINTER, IPP_TAG_KEYWORD, "urf-supported", num_urf, NULL, urf); + if (p->pc && p->pc->templates) { const char *template; /* Finishing template */