/*
- * "$Id: ipp-var.c 7940 2008-09-16 00:45:16Z mike $"
+ * CGI <-> IPP variable routines for CUPS.
*
- * CGI <-> IPP variable routines for the Common UNIX Printing System (CUPS).
+ * Copyright 2007-2016 by Apple Inc.
+ * Copyright 1997-2007 by Easy Software Products.
*
- * Copyright 2007-2009 by Apple Inc.
- * Copyright 1997-2007 by Easy Software Products.
- *
- * These coded instructions, statements, and computer programs are the
- * property of Apple Inc. and are protected by Federal copyright
- * law. Distribution and use rights are outlined in the file "LICENSE.txt"
- * which should have been included with this file. If this file is
- * file is missing or damaged, see the license at "http://www.cups.org/".
- *
- * Contents:
- *
- * cgiGetAttributes() - Get the list of attributes that are needed by the
- * template file.
- * cgiGetIPPObjects() - Get the objects in an IPP response.
- * cgiMoveJobs() - Move one or more jobs.
- * cgiPrintCommand() - Print a CUPS command job.
- * cgiPrintTestPage() - Print a test page.
- * cgiRewriteURL() - Rewrite a printer URI into a web browser URL...
- * cgiSetIPPObjectVars() - Set CGI variables from an IPP object.
- * cgiSetIPPVars() - Set CGI variables from an IPP response.
- * cgiShowIPPError() - Show the last IPP error message.
- * cgiShowJobs() - Show print jobs.
- * cgiText() - Return localized text.
+ * Licensed under Apache License v2.0. See the file "LICENSE" for more information.
*/
/*
{
for (i = 0; lang[i] && i < 15; i ++)
if (isalnum(lang[i] & 255))
- locale[i] = tolower(lang[i]);
+ locale[i] = (char)tolower(lang[i]);
else
locale[i] = '_';
while ((ch = getc(in)) != EOF)
if (ch == '\\')
getc(in);
- else if (ch == '{' && num_attrs < (sizeof(attrs) / sizeof(attrs[0])))
+ else if (ch == '{' && num_attrs < (int)(sizeof(attrs) / sizeof(attrs[0])))
{
/*
* Grab the name...
if (ch == '_')
*nameptr++ = '-';
else
- *nameptr++ = ch;
+ *nameptr++ = (char)ch;
}
*nameptr = '\0';
if (!strncmp(name, "printer_state_history", 21))
- strcpy(name, "printer_state_history");
+ strlcpy(name, "printer_state_history", sizeof(name));
/*
* Possibly add it to the list of attributes...
break;
case IPP_TAG_INTEGER :
+ if (!strncmp(ippGetName(attr), "time-at-", 8))
+ break; /* Ignore time-at-xxx */
+
for (i = 0; !add && i < attr->num_values; i ++)
{
char buf[255]; /* Number buffer */
* If the name is not the same as the current destination, add it!
*/
- if (strcasecmp(name, dest))
+ if (_cups_strcasecmp(name, dest))
{
cgiSetArray("JOB_PRINTER_URI", i, attr->values[0].string.text);
cgiSetArray("JOB_PRINTER_NAME", i, name);
ipp_t *request, /* Get-Job-Attributes request */
*response; /* Get-Job-Attributes response */
ipp_attribute_t *attr; /* Current job attribute */
- static const char const *job_attrs[] =/* Job attributes we want */
+ static const char * const job_attrs[] =/* Job attributes we want */
{
"job-state",
"job-printer-state-message"
cgiStartHTML(cgiText(_("Print Test Page")));
if (cupsLastError() > IPP_OK_CONFLICT)
- cgiShowIPPError(_("Unable to print test page:"));
+ cgiShowIPPError(_("Unable to print test page"));
else
{
cgiSetVariable("PRINTER_NAME", dest);
* Map local access to a local URI...
*/
- if (!strcasecmp(hostname, "127.0.0.1") ||
- !strcasecmp(hostname, "[::1]") ||
- !strcasecmp(hostname, "localhost") ||
- !strncasecmp(hostname, "localhost.", 10) ||
- !strcasecmp(hostname, server) ||
- !strcasecmp(hostname, servername))
+ if (!_cups_strcasecmp(hostname, "127.0.0.1") ||
+ !_cups_strcasecmp(hostname, "[::1]") ||
+ !_cups_strcasecmp(hostname, "localhost") ||
+ !_cups_strncasecmp(hostname, "localhost.", 10) ||
+ !_cups_strcasecmp(hostname, server) ||
+ !_cups_strcasecmp(hostname, servername))
{
/*
* Make URI relative to the current server...
*/
- strlcpy(url, resource, urlsize);
+ strlcpy(url, resource, (size_t)urlsize);
}
else
{
*/
if (userpass[0])
- snprintf(url, urlsize, "%s://%s@%s:%d%s",
- ishttps ? "https" : "http",
- userpass, hostname, port, resource);
+ snprintf(url, (size_t)urlsize, "%s://%s@%s:%d%s", ishttps ? "https" : "http", userpass, hostname, port, resource);
else
- snprintf(url, urlsize, "%s://%s:%d%s",
- ishttps ? "https" : "http",
- hostname, port, resource);
+ snprintf(url, (size_t)urlsize, "%s://%s:%d%s", ishttps ? "https" : "http", hostname, port, resource);
}
}
else
- strlcpy(url, uri, urlsize);
+ strlcpy(url, uri, (size_t)urlsize);
return (url);
}
*nameptr, /* Pointer into name */
value[16384], /* Value(s) */
*valptr; /* Pointer into value */
- struct tm *date; /* Date information */
fprintf(stderr, "DEBUG2: cgiSetIPPObjectVars(obj=%p, prefix=\"%s\", "
*valptr++ = ' ';
}
- remaining = sizeof(value) - (valptr - value);
+ remaining = sizeof(value) - (size_t)(valptr - value);
if (!strcmp(attr->values[i].string.text, "printer-stopped"))
strlcpy(valptr, _("Printer Paused"), remaining);
for (i = 0; i < attr->num_values; i ++)
{
if (i)
- strlcat(valptr, ", ", sizeof(value) - (valptr - value));
+ strlcat(valptr, ", ", sizeof(value) - (size_t)(valptr - value));
valptr += strlen(valptr);
case IPP_TAG_INTEGER :
case IPP_TAG_ENUM :
if (strncmp(name, "time_at_", 8) == 0)
- {
- time_t t; /* Temporary time value */
-
- t = (time_t)attr->values[i].integer;
- date = localtime(&t);
-
- strftime(valptr, sizeof(value) - (valptr - value), "%c", date);
- }
+ _cupsStrDate(valptr, sizeof(value) - (size_t)(valptr - value), (time_t)ippGetInteger(attr, i));
else
- snprintf(valptr, sizeof(value) - (valptr - value),
- "%d", attr->values[i].integer);
+ snprintf(valptr, sizeof(value) - (size_t)(valptr - value), "%d", ippGetInteger(attr, i));
break;
case IPP_TAG_BOOLEAN :
- snprintf(valptr, sizeof(value) - (valptr - value),
+ snprintf(valptr, sizeof(value) - (size_t)(valptr - value),
"%d", attr->values[i].boolean);
break;
case IPP_TAG_NOVALUE :
- strlcat(valptr, "novalue", sizeof(value) - (valptr - value));
+ strlcat(valptr, "novalue", sizeof(value) - (size_t)(valptr - value));
break;
case IPP_TAG_RANGE :
- snprintf(valptr, sizeof(value) - (valptr - value),
+ snprintf(valptr, sizeof(value) - (size_t)(valptr - value),
"%d-%d", attr->values[i].range.lower,
attr->values[i].range.upper);
break;
case IPP_TAG_RESOLUTION :
- snprintf(valptr, sizeof(value) - (valptr - value),
+ snprintf(valptr, sizeof(value) - (size_t)(valptr - value),
"%dx%d%s", attr->values[i].resolution.xres,
attr->values[i].resolution.yres,
attr->values[i].resolution.units == IPP_RES_PER_INCH ?
- "dpi" : "dpc");
+ "dpi" : "dpcm");
break;
case IPP_TAG_URI :
* Rewrite URIs...
*/
- if (!strcmp(name, "member_uris"))
- {
- char url[1024]; /* URL for class member... */
-
-
- cgiRewriteURL(attr->values[i].string.text, url,
- sizeof(url), NULL);
-
- snprintf(valptr, sizeof(value) - (valptr - value),
- "<A HREF=\"%s\">%s</A>", url,
- strrchr(attr->values[i].string.text, '/') + 1);
- }
- else
- cgiRewriteURL(attr->values[i].string.text, valptr,
- sizeof(value) - (valptr - value), NULL);
+ cgiRewriteURL(attr->values[i].string.text, valptr, (int)(sizeof(value) - (size_t)(valptr - value)), NULL);
break;
}
case IPP_TAG_LANGUAGE :
case IPP_TAG_MIMETYPE :
strlcat(valptr, attr->values[i].string.text,
- sizeof(value) - (valptr - value));
+ sizeof(value) - (size_t)(valptr - value));
break;
case IPP_TAG_BEGIN_COLLECTION :
(filter->value_tag >= IPP_TAG_TEXTLANG &&
filter->value_tag <= IPP_TAG_MIMETYPE)) &&
filter->values[0].string.text != NULL &&
- !strcasecmp(filter->values[0].string.text, filter_value))
+ !_cups_strcasecmp(filter->values[0].string.text, filter_value))
break;
if (!filter)
attr = cgiSetIPPObjectVars(attr, prefix, element);
}
- fprintf(stderr, "DEBUG2: Returing %d from cgiSetIPPVars()...\n", element);
+ fprintf(stderr, "DEBUG2: Returning %d from cgiSetIPPVars()...\n", element);
return (element);
}
*response; /* IPP response */
cups_array_t *jobs; /* Array of job objects */
ipp_attribute_t *job; /* Job object */
- int ascending, /* Order of jobs (0 = descending) */
- first, /* First job to show */
+ int first, /* First job to show */
count; /* Number of jobs */
const char *var, /* Form variable */
*query, /* Query string */
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL,
"ipp://localhost/");
- if ((which_jobs = cgiGetVariable("which_jobs")) != NULL)
+ if ((which_jobs = cgiGetVariable("which_jobs")) != NULL && *which_jobs)
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, "which-jobs",
NULL, which_jobs);
+ if ((var = cgiGetVariable("FIRST")) != NULL)
+ {
+ if ((first = atoi(var)) < 0)
+ first = 0;
+ }
+ else
+ first = 0;
+
+ if (first > 0)
+ ippAddInteger(request, IPP_TAG_OPERATION, IPP_TAG_INTEGER, "first-index", first + 1);
+
cgiGetAttributes(request, "jobs.tmpl");
/*
}
jobs = cgiGetIPPObjects(response, search);
- count = cupsArrayCount(jobs);
+ count = cupsArrayCount(jobs) + first;
if (search)
cgiFreeSearch(search);
* Figure out which jobs to display...
*/
- if ((var = cgiGetVariable("FIRST")) != NULL)
- first = atoi(var);
- else
- first = 0;
-
- if (first >= count)
- first = count - CUPS_PAGE_MAX;
-
- first = (first / CUPS_PAGE_MAX) * CUPS_PAGE_MAX;
-
- if (first < 0)
- first = 0;
-
- if ((var = cgiGetVariable("ORDER")) != NULL)
- ascending = !strcasecmp(var, "asc");
- else
- ascending = !which_jobs || !strcasecmp(which_jobs, "not-completed");
-
section = cgiGetVariable("SECTION");
cgiClearVariables();
if (query)
cgiSetVariable("QUERY", query);
- cgiSetVariable("ORDER", ascending ? "asc" : "dec");
-
cgiSetVariable("SECTION", section);
sprintf(val, "%d", count);
if (which_jobs)
cgiSetVariable("WHICH_JOBS", which_jobs);
- if (ascending)
- {
- for (i = 0, job = (ipp_attribute_t *)cupsArrayIndex(jobs, first);
- i < CUPS_PAGE_MAX && job;
- i ++, job = (ipp_attribute_t *)cupsArrayNext(jobs))
- cgiSetIPPObjectVars(job, NULL, i);
- }
- else
- {
- for (i = 0, job = (ipp_attribute_t *)cupsArrayIndex(jobs, count - first - 1);
- i < CUPS_PAGE_MAX && job;
- i ++, job = (ipp_attribute_t *)cupsArrayPrev(jobs))
- cgiSetIPPObjectVars(job, NULL, i);
- }
+ for (i = 0, job = (ipp_attribute_t *)cupsArrayFirst(jobs);
+ i < CUPS_PAGE_MAX && job;
+ i ++, job = (ipp_attribute_t *)cupsArrayNext(jobs))
+ cgiSetIPPObjectVars(job, NULL, i);
/*
* Save navigation URLs...
cgiSetVariable("NEXT", val);
}
+ if (count > CUPS_PAGE_MAX)
+ {
+ snprintf(val, sizeof(val), "%d", CUPS_PAGE_MAX * (count / CUPS_PAGE_MAX));
+ cgiSetVariable("LAST", val);
+ }
+
/*
* Then show everything...
*/
return (_cupsLangString(language, message));
}
-
-
-/*
- * End of "$Id: ipp-var.c 7940 2008-09-16 00:45:16Z mike $".
- */