]> git.ipfire.org Git - thirdparty/cups.git/commitdiff
Add mopria-certified and URF/urf-supported keys/attributes.
authorMichael R Sweet <msweet@msweet.org>
Mon, 8 Mar 2021 00:39:30 +0000 (19:39 -0500)
committerMichael R Sweet <msweet@msweet.org>
Mon, 8 Mar 2021 00:39:30 +0000 (19:39 -0500)
scheduler/dirsvc.c
scheduler/printers.c

index 5fd776c24919ee6ec1a18994ef45d4304c37f84f..93524c914eb8fcc288ead8ac19b6723bd38e5e40 100644 (file)
@@ -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;
 
index 7638a7cf785ef4c42022a53773c732c900664f0c..306ebfb363cc56bde5c640be324fb1e1e751234f 100644 (file)
@@ -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 */