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...
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";
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;
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",
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...
*/
}
}
+ ippAddString(p->ppd_attrs, IPP_TAG_PRINTER, IPP_CONST_TAG(IPP_TAG_TEXT), "mopria-certified", NULL, "1.3");
+
/*
* Output bin...
*/
"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
{
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
{
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 &&
"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
{
"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;
}
/*
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);
}
}
+ /* 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 */