diff options
author | Michael R Sweet <michaelrsweet@gmail.com> | 2017-12-19 14:53:00 -0500 |
---|---|---|
committer | Michael R Sweet <michaelrsweet@gmail.com> | 2017-12-19 14:53:00 -0500 |
commit | 2fa1ba3cc0e02799b739ef0e06efc940a8c5a33e (patch) | |
tree | 3d9da027144be82db3acea277a4c7dcd58d0f40f /scheduler/ipp.c | |
parent | 3d90ace3170087acd66d189fcf2362242815f88d (diff) | |
download | cups-2fa1ba3cc0e02799b739ef0e06efc940a8c5a33e.tar.gz |
Generate strings files for localizing PPD options (Issue #5194)
cups/language-private.h:
- New _cupsMessageAdd and _cupsMessageSave private APIs.
cups/language.c:
- Implement new _cupsMessageAdd and _cupsMessageSave private APIs.
cups/ppd-cache.c:
- Generate strings array when loading cache from PPD.
- Remove strings_uri (just pulling strings from PPD now).
cups/ppd-private.h:
- Remove strings_uri and add strings array to cache.
scheduler/client.c:
- Add support for /strings/NAME.strings
- Cleanup implementation of GET/HEAD/POST to files.
scheduler/ipp.c:
- Return local strings file URI.
- Clean up copy_printer_attrs implementation.
scheduler/printers.c:
- Save strings array to cache file, drop support for strings_uri.
scheduler/printers.h:
- Add strings filename to cupsd_printer_t structure.
Diffstat (limited to 'scheduler/ipp.c')
-rw-r--r-- | scheduler/ipp.c | 132 |
1 files changed, 50 insertions, 82 deletions
diff --git a/scheduler/ipp.c b/scheduler/ipp.c index 38afa5f45..92353a84d 100644 --- a/scheduler/ipp.c +++ b/scheduler/ipp.c @@ -4912,12 +4912,11 @@ copy_printer_attrs( cupsd_printer_t *printer, /* I - Printer */ cups_array_t *ra) /* I - Requested attributes array */ { - char printer_uri[HTTP_MAX_URI]; - /* Printer URI */ - char printer_icons[HTTP_MAX_URI]; - /* Printer icons */ - time_t curtime; /* Current time */ - int i; /* Looping var */ + char uri[HTTP_MAX_URI]; /* URI value */ + time_t curtime; /* Current time */ + int i; /* Looping var */ + int is_encrypted = httpIsEncrypted(con->http); + /* Is the connection encrypted? */ /* @@ -4928,107 +4927,83 @@ copy_printer_attrs( curtime = time(NULL); if (!ra || cupsArrayFind(ra, "marker-change-time")) - ippAddInteger(con->response, IPP_TAG_PRINTER, IPP_TAG_INTEGER, - "marker-change-time", printer->marker_time); + ippAddInteger(con->response, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "marker-change-time", printer->marker_time); - if (printer->num_printers > 0 && - (!ra || cupsArrayFind(ra, "member-uris"))) + if (printer->num_printers > 0 && (!ra || cupsArrayFind(ra, "member-uris"))) { ipp_attribute_t *member_uris; /* member-uris attribute */ cupsd_printer_t *p2; /* Printer in class */ ipp_attribute_t *p2_uri; /* printer-uri-supported for class printer */ - if ((member_uris = ippAddStrings(con->response, IPP_TAG_PRINTER, - IPP_TAG_URI, "member-uris", - printer->num_printers, NULL, - NULL)) != NULL) + if ((member_uris = ippAddStrings(con->response, IPP_TAG_PRINTER, IPP_TAG_URI, "member-uris", printer->num_printers, NULL, NULL)) != NULL) { for (i = 0; i < printer->num_printers; i ++) { p2 = printer->printers[i]; - if ((p2_uri = ippFindAttribute(p2->attrs, "printer-uri-supported", - IPP_TAG_URI)) != NULL) - member_uris->values[i].string.text = - _cupsStrRetain(p2_uri->values[0].string.text); + if ((p2_uri = ippFindAttribute(p2->attrs, "printer-uri-supported", IPP_TAG_URI)) != NULL) + { + member_uris->values[i].string.text = _cupsStrRetain(p2_uri->values[0].string.text); + } else { - httpAssembleURIf(HTTP_URI_CODING_ALL, printer_uri, - sizeof(printer_uri), "ipp", NULL, con->clientname, - con->clientport, - (p2->type & CUPS_PRINTER_CLASS) ? - "/classes/%s" : "/printers/%s", p2->name); - member_uris->values[i].string.text = _cupsStrAlloc(printer_uri); + httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), is_encrypted ? "ipps" : "ipp", NULL, con->clientname, con->clientport, (p2->type & CUPS_PRINTER_CLASS) ? "/classes/%s" : "/printers/%s", p2->name); + member_uris->values[i].string.text = _cupsStrAlloc(uri); } } } } if (printer->alert && (!ra || cupsArrayFind(ra, "printer-alert"))) - ippAddString(con->response, IPP_TAG_PRINTER, IPP_TAG_STRING, - "printer-alert", NULL, printer->alert); + ippAddString(con->response, IPP_TAG_PRINTER, IPP_TAG_STRING, "printer-alert", NULL, printer->alert); - if (printer->alert_description && - (!ra || cupsArrayFind(ra, "printer-alert-description"))) - ippAddString(con->response, IPP_TAG_PRINTER, IPP_TAG_TEXT, - "printer-alert-description", NULL, - printer->alert_description); + if (printer->alert_description && (!ra || cupsArrayFind(ra, "printer-alert-description"))) + ippAddString(con->response, IPP_TAG_PRINTER, IPP_TAG_TEXT, "printer-alert-description", NULL, printer->alert_description); if (!ra || cupsArrayFind(ra, "printer-config-change-date-time")) ippAddDate(con->response, IPP_TAG_PRINTER, "printer-config-change-date-time", ippTimeToDate(printer->config_time)); if (!ra || cupsArrayFind(ra, "printer-config-change-time")) - ippAddInteger(con->response, IPP_TAG_PRINTER, IPP_TAG_INTEGER, - "printer-config-change-time", printer->config_time); + ippAddInteger(con->response, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "printer-config-change-time", printer->config_time); if (!ra || cupsArrayFind(ra, "printer-current-time")) - ippAddDate(con->response, IPP_TAG_PRINTER, "printer-current-time", - ippTimeToDate(curtime)); + ippAddDate(con->response, IPP_TAG_PRINTER, "printer-current-time", ippTimeToDate(curtime)); #if defined(HAVE_DNSSD) || defined(HAVE_AVAHI) if (!ra || cupsArrayFind(ra, "printer-dns-sd-name")) { if (printer->reg_name) - ippAddString(con->response, IPP_TAG_PRINTER, IPP_TAG_NAME, - "printer-dns-sd-name", NULL, printer->reg_name); + ippAddString(con->response, IPP_TAG_PRINTER, IPP_TAG_NAME, "printer-dns-sd-name", NULL, printer->reg_name); else - ippAddInteger(con->response, IPP_TAG_PRINTER, IPP_TAG_NOVALUE, - "printer-dns-sd-name", 0); + ippAddInteger(con->response, IPP_TAG_PRINTER, IPP_TAG_NOVALUE, "printer-dns-sd-name", 0); } #endif /* HAVE_DNSSD || HAVE_AVAHI */ if (!ra || cupsArrayFind(ra, "printer-error-policy")) - ippAddString(con->response, IPP_TAG_PRINTER, IPP_TAG_NAME, - "printer-error-policy", NULL, printer->error_policy); + ippAddString(con->response, IPP_TAG_PRINTER, IPP_TAG_NAME, "printer-error-policy", NULL, printer->error_policy); if (!ra || cupsArrayFind(ra, "printer-error-policy-supported")) { static const char * const errors[] =/* printer-error-policy-supported values */ - { - "abort-job", - "retry-current-job", - "retry-job", - "stop-printer" - }; + { + "abort-job", + "retry-current-job", + "retry-job", + "stop-printer" + }; if (printer->type & CUPS_PRINTER_CLASS) - ippAddString(con->response, IPP_TAG_PRINTER, IPP_TAG_NAME | IPP_TAG_COPY, - "printer-error-policy-supported", NULL, "retry-current-job"); + ippAddString(con->response, IPP_TAG_PRINTER, IPP_TAG_NAME | IPP_TAG_COPY, "printer-error-policy-supported", NULL, "retry-current-job"); else - ippAddStrings(con->response, IPP_TAG_PRINTER, IPP_TAG_NAME | IPP_TAG_COPY, - "printer-error-policy-supported", - sizeof(errors) / sizeof(errors[0]), NULL, errors); + ippAddStrings(con->response, IPP_TAG_PRINTER, IPP_TAG_NAME | IPP_TAG_COPY, "printer-error-policy-supported", sizeof(errors) / sizeof(errors[0]), NULL, errors); } if (!ra || cupsArrayFind(ra, "printer-icons")) { - httpAssembleURIf(HTTP_URI_CODING_ALL, printer_icons, sizeof(printer_icons), - "http", NULL, con->clientname, con->clientport, - "/icons/%s.png", printer->name); - ippAddString(con->response, IPP_TAG_PRINTER, IPP_TAG_URI, "printer-icons", - NULL, printer_icons); - cupsdLogMessage(CUPSD_LOG_DEBUG2, "printer-icons=\"%s\"", printer_icons); + httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), is_encrypted ? "https" : "http", NULL, con->clientname, con->clientport, "/icons/%s.png", printer->name); + ippAddString(con->response, IPP_TAG_PRINTER, IPP_TAG_URI, "printer-icons", NULL, uri); + cupsdLogMessage(CUPSD_LOG_DEBUG2, "printer-icons=\"%s\"", uri); } if (!ra || cupsArrayFind(ra, "printer-is-accepting-jobs")) @@ -5042,36 +5017,35 @@ copy_printer_attrs( if (!ra || cupsArrayFind(ra, "printer-more-info")) { - httpAssembleURIf(HTTP_URI_CODING_ALL, printer_uri, sizeof(printer_uri), - "http", NULL, con->clientname, con->clientport, - (printer->type & CUPS_PRINTER_CLASS) ? - "/classes/%s" : "/printers/%s", printer->name); - ippAddString(con->response, IPP_TAG_PRINTER, IPP_TAG_URI, - "printer-more-info", NULL, printer_uri); + httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), is_encrypted ? "https" : "http", NULL, con->clientname, con->clientport, (printer->type & CUPS_PRINTER_CLASS) ? "/classes/%s" : "/printers/%s", printer->name); + ippAddString(con->response, IPP_TAG_PRINTER, IPP_TAG_URI, "printer-more-info", NULL, uri); } if (!ra || cupsArrayFind(ra, "printer-op-policy")) - ippAddString(con->response, IPP_TAG_PRINTER, IPP_TAG_NAME, - "printer-op-policy", NULL, printer->op_policy); + ippAddString(con->response, IPP_TAG_PRINTER, IPP_TAG_NAME, "printer-op-policy", NULL, printer->op_policy); if (!ra || cupsArrayFind(ra, "printer-state")) - ippAddInteger(con->response, IPP_TAG_PRINTER, IPP_TAG_ENUM, "printer-state", - printer->state); + ippAddInteger(con->response, IPP_TAG_PRINTER, IPP_TAG_ENUM, "printer-state", printer->state); if (!ra || cupsArrayFind(ra, "printer-state-change-date-time")) ippAddDate(con->response, IPP_TAG_PRINTER, "printer-state-change-date-time", ippTimeToDate(printer->state_time)); if (!ra || cupsArrayFind(ra, "printer-state-change-time")) - ippAddInteger(con->response, IPP_TAG_PRINTER, IPP_TAG_INTEGER, - "printer-state-change-time", printer->state_time); + ippAddInteger(con->response, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "printer-state-change-time", printer->state_time); if (!ra || cupsArrayFind(ra, "printer-state-message")) - ippAddString(con->response, IPP_TAG_PRINTER, IPP_TAG_TEXT, - "printer-state-message", NULL, printer->state_message); + ippAddString(con->response, IPP_TAG_PRINTER, IPP_TAG_TEXT, "printer-state-message", NULL, printer->state_message); if (!ra || cupsArrayFind(ra, "printer-state-reasons")) add_printer_state_reasons(con, printer); + if (!ra || cupsArrayFind(ra, "printer-strings-uri")) + { + httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), is_encrypted ? "https" : "http", NULL, con->clientname, con->clientport, "/strings/%s.strings", printer->name); + ippAddString(con->response, IPP_TAG_PRINTER, IPP_TAG_URI, "printer-strings-uri", NULL, uri); + cupsdLogMessage(CUPSD_LOG_DEBUG2, "printer-strings-uri=\"%s\"", uri); + } + if (!ra || cupsArrayFind(ra, "printer-type")) { cups_ptype_t type; /* printer-type value */ @@ -5095,19 +5069,13 @@ copy_printer_attrs( } if (!ra || cupsArrayFind(ra, "printer-up-time")) - ippAddInteger(con->response, IPP_TAG_PRINTER, IPP_TAG_INTEGER, - "printer-up-time", curtime); + ippAddInteger(con->response, IPP_TAG_PRINTER, IPP_TAG_INTEGER, "printer-up-time", curtime); if (!ra || cupsArrayFind(ra, "printer-uri-supported")) { - httpAssembleURIf(HTTP_URI_CODING_ALL, printer_uri, sizeof(printer_uri), - "ipp", NULL, con->clientname, con->clientport, - (printer->type & CUPS_PRINTER_CLASS) ? - "/classes/%s" : "/printers/%s", printer->name); - ippAddString(con->response, IPP_TAG_PRINTER, IPP_TAG_URI, - "printer-uri-supported", NULL, printer_uri); - cupsdLogMessage(CUPSD_LOG_DEBUG2, "printer-uri-supported=\"%s\"", - printer_uri); + httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), is_encrypted ? "ipps" : "ipp", NULL, con->clientname, con->clientport, (printer->type & CUPS_PRINTER_CLASS) ? "/classes/%s" : "/printers/%s", printer->name); + ippAddString(con->response, IPP_TAG_PRINTER, IPP_TAG_URI, "printer-uri-supported", NULL, uri); + cupsdLogMessage(CUPSD_LOG_DEBUG2, "printer-uri-supported=\"%s\"", uri); } if (!ra || cupsArrayFind(ra, "queued-job-count")) |