/*
- * "$Id: lp.c 4906 2006-01-10 20:53:28Z mike $"
+ * "$Id$"
*
- * "lp" command for the Common UNIX Printing System (CUPS).
+ * "lp" command for CUPS.
*
- * Copyright 1997-2006 by Easy Software Products.
+ * Copyright 2007-2014 by Apple Inc.
+ * Copyright 1997-2007 by Easy Software Products.
*
- * These coded instructions, statements, and computer programs are the
- * property of Easy Software Products 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 missing or damaged please contact Easy Software Products
- * at:
- *
- * Attn: CUPS Licensing Information
- * Easy Software Products
- * 44141 Airport View Drive, Suite 204
- * Hollywood, Maryland 20636 USA
- *
- * Voice: (301) 373-9600
- * EMail: cups-info@cups.org
- * WWW: http://www.cups.org
- *
- * Contents:
- *
- * main() - Parse options and send files for printing.
- * restart_job() - Restart a job.
- * set_job_attrs() - Set job attributes.
- * sighandler() - Signal catcher for when we print from stdin...
+ * 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/".
*/
/*
* Include necessary headers...
*/
-#include <stdio.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <cups/string.h>
-#include <cups/cups.h>
-#include <cups/i18n.h>
-
-
-#ifndef WIN32
-# include <unistd.h>
-# include <signal.h>
+#include <cups/cups-private.h>
/*
* Local functions.
*/
-void sighandler(int);
-#endif /* !WIN32 */
-int restart_job(int job_id);
-int set_job_attrs(int job_id, int num_options, cups_option_t *options);
-
-
-/*
- * Globals...
- */
-
-char tempfile[1024]; /* Temporary file for printing from stdin */
+int restart_job(const char *command, int job_id);
+int set_job_attrs(const char *command, int job_id, int num_options,
+ cups_option_t *options);
/*
int i, j; /* Looping vars */
int job_id; /* Job ID */
char *printer, /* Printer name */
- *instance, /* Instance name */
+ *instance, /* Instance name */
*val, /* Option value */
*title; /* Job title */
int priority; /* Job priority (1-100) */
int num_copies; /* Number of copies per file */
int num_files; /* Number of files to print */
const char *files[1000]; /* Files to print */
- int num_dests; /* Number of destinations */
- cups_dest_t *dests, /* Destinations */
- *dest; /* Selected destination */
+ cups_dest_t *dest; /* Selected destination */
int num_options; /* Number of options */
cups_option_t *options; /* Options */
+ int end_options; /* No more options? */
int silent; /* Silent or verbose output? */
char buffer[8192]; /* Copy buffer */
- int temp; /* Temporary file descriptor */
-#if defined(HAVE_SIGACTION) && !defined(HAVE_SIGSET)
- struct sigaction action; /* Signal action */
- struct sigaction oldaction; /* Old signal action */
-#endif /* HAVE_SIGACTION && !HAVE_SIGSET*/
#ifdef __sun
return (0);
#endif /* __sun */
+ _cupsSetLocale(argv);
+
silent = 0;
printer = NULL;
- num_dests = 0;
- dests = NULL;
+ dest = NULL;
num_options = 0;
options = NULL;
num_files = 0;
title = NULL;
job_id = 0;
+ end_options = 0;
for (i = 1; i < argc; i ++)
- if (argv[i][0] == '-' && argv[i][1])
+ if (argv[i][0] == '-' && argv[i][1] && !end_options)
switch (argv[i][1])
{
case 'E' : /* Encrypt */
#ifdef HAVE_SSL
cupsSetEncryption(HTTP_ENCRYPT_REQUIRED);
#else
- _cupsLangPrintf(stderr, NULL,
- _("%s: Sorry, no encryption support compiled in!\n"),
+ _cupsLangPrintf(stderr, _("%s: Sorry, no encryption support."),
argv[0]);
#endif /* HAVE_SSL */
break;
+ case 'U' : /* Username */
+ if (argv[i][2] != '\0')
+ cupsSetUser(argv[i] + 2);
+ else
+ {
+ i ++;
+ if (i >= argc)
+ {
+ _cupsLangPrintf(stderr,
+ _("%s: Error - expected username after \"-U\" "
+ "option."), argv[0]);
+ return (1);
+ }
+
+ cupsSetUser(argv[i]);
+ }
+ break;
+
case 'c' : /* Copy to spool dir (always enabled) */
break;
if (i >= argc)
{
- _cupsLangPuts(stderr, NULL,
- _("lp: Expected destination after -d option!\n"));
+ _cupsLangPrintf(stderr,
+ _("%s: Error - expected destination after "
+ "\"-d\" option."), argv[0]);
return (1);
}
if ((instance = strrchr(printer, '/')) != NULL)
*instance++ = '\0';
- if (num_dests == 0)
- num_dests = cupsGetDests(&dests);
-
- if ((dest = cupsGetDest(printer, instance, num_dests, dests)) != NULL)
+ if ((dest = cupsGetNamedDest(CUPS_HTTP_DEFAULT, printer,
+ instance)) != NULL)
{
for (j = 0; j < dest->num_options; j ++)
- if (cupsGetOption(dest->options[j].name, num_options, options) == NULL)
+ if (cupsGetOption(dest->options[j].name, num_options,
+ options) == NULL)
num_options = cupsAddOption(dest->options[j].name,
dest->options[j].value,
num_options, &options);
}
+ else if (cupsLastError() == IPP_STATUS_ERROR_BAD_REQUEST ||
+ cupsLastError() == IPP_STATUS_ERROR_VERSION_NOT_SUPPORTED)
+ {
+ _cupsLangPrintf(stderr,
+ _("%s: Error - add '/version=1.1' to server "
+ "name."), argv[0]);
+ return (1);
+ }
break;
case 'f' : /* Form */
if (i >= argc)
{
- _cupsLangPuts(stderr, NULL,
- _("lp: Expected form after -f option!\n"));
+ _cupsLangPrintf(stderr,
+ _("%s: Error - expected form after \"-f\" "
+ "option."),
+ argv[0]);
return (1);
}
}
- fputs("lp: Warning - form option ignored!\n", stderr);
+ _cupsLangPrintf(stderr, _("%s: Warning - form option ignored."),
+ argv[0]);
break;
case 'h' : /* Destination host */
if (i >= argc)
{
- _cupsLangPuts(stderr, NULL,
- _("lp: Expected hostname after -h option!\n"));
+ _cupsLangPrintf(stderr,
+ _("%s: Error - expected hostname after "
+ "\"-h\" option."), argv[0]);
return (1);
}
if (i >= argc)
{
- _cupsLangPuts(stderr, NULL,
- _("lp: Expected job ID after -i option!\n"));
+ _cupsLangPrintf(stderr,
+ _("%s: Expected job ID after \"-i\" option."),
+ argv[0]);
return (1);
}
if (num_files > 0)
{
- _cupsLangPuts(stderr, NULL,
- _("lp: Error - cannot print files and alter "
- "jobs simultaneously!\n"));
+ _cupsLangPrintf(stderr,
+ _("%s: Error - cannot print files and alter "
+ "jobs simultaneously."), argv[0]);
return (1);
}
if (job_id < 0)
{
- _cupsLangPuts(stderr, NULL, _("lp: Error - bad job ID!\n"));
+ _cupsLangPrintf(stderr, _("%s: Error - bad job ID."), argv[0]);
break;
}
break;
case 'p' : /* Notify on completion */
#endif /* __sun */
case 'w' : /* Write to console or email */
+ {
+ char email[1024]; /* EMail address */
+
+
+ snprintf(email, sizeof(email), "mailto:%s@%s", cupsUser(),
+ httpGetHostname(NULL, buffer, sizeof(buffer)));
+ num_options = cupsAddOption("notify-recipient-uri", email,
+ num_options, &options);
+ }
+
+ silent = 1;
break;
case 'n' : /* Number of copies */
if (i >= argc)
{
- _cupsLangPuts(stderr, NULL,
- _("lp: Expected copies after -n option!\n"));
+ _cupsLangPrintf(stderr,
+ _("%s: Error - expected copies after "
+ "\"-n\" option."), argv[0]);
return (1);
}
}
sprintf(buffer, "%d", num_copies);
- num_options = cupsAddOption("copies", buffer, num_options, &options);
+ num_options = cupsAddOption("copies", buffer, num_options,
+ &options);
break;
case 'o' : /* Option */
if (argv[i][2] != '\0')
- num_options = cupsParseOptions(argv[i] + 2, num_options, &options);
+ num_options = cupsParseOptions(argv[i] + 2, num_options,
+ &options);
else
{
i ++;
if (i >= argc)
{
- _cupsLangPuts(stderr, NULL,
- _("lp: Expected option string after -o option!\n"));
+ _cupsLangPrintf(stderr,
+ _("%s: Error - expected option=value after "
+ "\"-o\" option."), argv[0]);
return (1);
}
{
if ((i + 1) >= argc)
{
- _cupsLangPrintf(stderr, NULL,
- _("lp: Expected priority after -%c option!\n"),
- argv[i][1]);
+ _cupsLangPrintf(stderr,
+ _("%s: Error - expected priority after "
+ "\"-%c\" option."), argv[0], argv[i][1]);
return (1);
}
if (priority < 1 || priority > 100)
{
- _cupsLangPuts(stderr, NULL,
- _("lp: Priority must be between 1 and 100.\n"));
+ _cupsLangPrintf(stderr,
+ _("%s: Error - priority must be between 1 and "
+ "100."), argv[0]);
return (1);
}
sprintf(buffer, "%d", priority);
- num_options = cupsAddOption("job-priority", buffer, num_options, &options);
+ num_options = cupsAddOption("job-priority", buffer, num_options,
+ &options);
break;
case 's' : /* Silent */
if (i >= argc)
{
- _cupsLangPuts(stderr, NULL,
- _("lp: Expected title after -t option!\n"));
+ _cupsLangPrintf(stderr,
+ _("%s: Error - expected title after "
+ "\"-t\" option."), argv[0]);
return (1);
}
if (i >= argc)
{
- _cupsLangPuts(stderr, NULL,
- _("lp: Expected mode list after -y option!\n"));
+ _cupsLangPrintf(stderr,
+ _("%s: Error - expected mode list after "
+ "\"-y\" option."), argv[0]);
return (1);
}
}
- _cupsLangPuts(stderr, NULL,
- _("lp: Warning - mode option ignored!\n"));
+ _cupsLangPrintf(stderr,
+ _("%s: Warning - mode option ignored."), argv[0]);
break;
case 'H' : /* Hold job */
if (i >= argc)
{
- _cupsLangPuts(stderr, NULL,
- _("lp: Expected hold name after -H option!\n"));
+ _cupsLangPrintf(stderr,
+ _("%s: Error - expected hold name after "
+ "\"-H\" option."), argv[0]);
return (1);
}
num_options = cupsAddOption("job-hold-until", "no-hold",
num_options, &options);
else if (!strcmp(val, "immediate"))
+ {
+ num_options = cupsAddOption("job-hold-until", "no-hold",
+ num_options, &options);
num_options = cupsAddOption("job-priority", "100",
num_options, &options);
+ }
else if (!strcmp(val, "restart"))
{
if (job_id < 1)
{
- _cupsLangPuts(stderr, NULL,
- _("lp: Need job ID (-i) before \"-H restart\"!\n"));
+ _cupsLangPrintf(stderr,
+ _("%s: Need job ID (\"-i jobid\") before "
+ "\"-H restart\"."), argv[0]);
return (1);
}
- if (restart_job(job_id))
+ if (restart_job(argv[0], job_id))
return (1);
}
else
if (i >= argc)
{
- _cupsLangPuts(stderr, NULL,
- _("lp: Expected page list after -P option!\n"));
+ _cupsLangPrintf(stderr,
+ _("%s: Error - expected page list after "
+ "\"-P\" option."), argv[0]);
return (1);
}
if (i >= argc)
{
- _cupsLangPuts(stderr, NULL,
- _("lp: Expected character set after -S option!\n"));
+ _cupsLangPrintf(stderr,
+ _("%s: Error - expected character set after "
+ "\"-S\" option."), argv[0]);
return (1);
}
}
- _cupsLangPuts(stderr, NULL,
- _("lp: Warning - character set option ignored!\n"));
+ _cupsLangPrintf(stderr,
+ _("%s: Warning - character set option ignored."),
+ argv[0]);
break;
case 'T' : /* Content-Type */
if (i >= argc)
{
- _cupsLangPuts(stderr, NULL,
- _("lp: Expected content type after -T option!\n"));
+ _cupsLangPrintf(stderr,
+ _("%s: Error - expected content type after "
+ "\"-T\" option."), argv[0]);
return (1);
}
}
- _cupsLangPuts(stderr, NULL,
- _("lp: Warning - content type option ignored!\n"));
+ _cupsLangPrintf(stderr,
+ _("%s: Warning - content type option ignored."),
+ argv[0]);
+ break;
+
+ case '-' : /* Stop processing options */
+ if (argv[i][2])
+ {
+ _cupsLangPrintf(stderr, _("%s: Error - unknown option \"%s\"."),
+ argv[0], argv[i]);
+ return (1);
+ }
+
+ end_options = 1;
break;
default :
- _cupsLangPrintf(stderr, NULL, _("lp: Unknown option \'%c\'!\n"),
- argv[i][1]);
+ _cupsLangPrintf(stderr, _("%s: Error - unknown option \"%c\"."),
+ argv[0], argv[i][1]);
return (1);
}
else if (!strcmp(argv[i], "-"))
{
if (num_files || job_id)
{
- _cupsLangPuts(stderr, NULL,
- _("lp: Error - cannot print from stdin if files or a "
- "job ID are provided!\n"));
+ _cupsLangPrintf(stderr,
+ _("%s: Error - cannot print from stdin if files or a "
+ "job ID are provided."), argv[0]);
return (1);
}
if (access(argv[i], R_OK) != 0)
{
- _cupsLangPrintf(stderr, NULL, _("lp: Unable to access \"%s\" - %s\n"),
- argv[i], strerror(errno));
+ _cupsLangPrintf(stderr, _("%s: Error - unable to access \"%s\" - %s"),
+ argv[0], argv[i], strerror(errno));
return (1);
}
}
}
else
- _cupsLangPrintf(stderr, NULL, _("lp: Too many files - \"%s\"\n"),
- argv[i]);
+ _cupsLangPrintf(stderr, _("%s: Error - too many files - \"%s\"."),
+ argv[0], argv[i]);
/*
* See if we are altering an existing job...
*/
if (job_id)
- return (set_job_attrs(job_id, num_options, options));
+ return (set_job_attrs(argv[0], job_id, num_options, options));
/*
* See if we have any files to print; if not, print from stdin...
if (printer == NULL)
{
- if (num_dests == 0)
- num_dests = cupsGetDests(&dests);
-
- if ((dest = cupsGetDest(NULL, NULL, num_dests, dests)) != NULL)
+ if ((dest = cupsGetNamedDest(NULL, NULL, NULL)) != NULL)
{
printer = dest->name;
dest->options[j].value,
num_options, &options);
}
+ else if (cupsLastError() == IPP_STATUS_ERROR_BAD_REQUEST ||
+ cupsLastError() == IPP_STATUS_ERROR_VERSION_NOT_SUPPORTED)
+ {
+ _cupsLangPrintf(stderr,
+ _("%s: Error - add '/version=1.1' to server "
+ "name."), argv[0]);
+ return (1);
+ }
}
if (printer == NULL)
else
val = "LPDEST";
- if (printer && !cupsGetDest(printer, NULL, num_dests, dests))
- _cupsLangPrintf(stderr, NULL,
- _("lp: error - %s environment variable names "
- "non-existent destination \"%s\"!\n"),
- val, printer);
+ if (printer && !cupsGetNamedDest(NULL, printer, NULL))
+ _cupsLangPrintf(stderr,
+ _("%s: Error - %s environment variable names "
+ "non-existent destination \"%s\"."), argv[0], val,
+ printer);
else if (cupsLastError() == IPP_NOT_FOUND)
- _cupsLangPuts(stderr, NULL,
- _("lp: error - no default destination available.\n"));
+ _cupsLangPrintf(stderr,
+ _("%s: Error - no default destination available."),
+ argv[0]);
else
- _cupsLangPuts(stderr, NULL,
- _("lp: error - scheduler not responding!\n"));
+ _cupsLangPrintf(stderr, _("%s: Error - scheduler not responding."),
+ argv[0]);
return (1);
}
if (num_files > 0)
job_id = cupsPrintFiles(printer, num_files, files, title, num_options, options);
- else
+ else if ((job_id = cupsCreateJob(CUPS_HTTP_DEFAULT, printer,
+ title ? title : "(stdin)",
+ num_options, options)) > 0)
{
- num_files = 1;
-
-#ifndef WIN32
-# if defined(HAVE_SIGSET)
- sigset(SIGHUP, sighandler);
- if (sigset(SIGINT, sighandler) == SIG_IGN)
- sigset(SIGINT, SIG_IGN);
- sigset(SIGTERM, sighandler);
-# elif defined(HAVE_SIGACTION)
- memset(&action, 0, sizeof(action));
- action.sa_handler = sighandler;
-
- sigaction(SIGHUP, &action, NULL);
- sigaction(SIGINT, NULL, &oldaction);
- if (oldaction.sa_handler != SIG_IGN)
- sigaction(SIGINT, &action, NULL);
- sigaction(SIGTERM, &action, NULL);
-# else
- signal(SIGHUP, sighandler);
- if (signal(SIGINT, sighandler) == SIG_IGN)
- signal(SIGINT, SIG_IGN);
- signal(SIGTERM, sighandler);
-# endif
-#endif /* !WIN32 */
-
- temp = cupsTempFd(tempfile, sizeof(tempfile));
-
- if (temp < 0)
- {
- _cupsLangPrintf(stderr, NULL,
- _("lp: unable to create temporary file \"%s\" - %s\n"),
- tempfile, strerror(errno));
- return (1);
- }
+ http_status_t status; /* Write status */
+ const char *format; /* Document format */
+ ssize_t bytes; /* Bytes read */
- while ((i = read(0, buffer, sizeof(buffer))) > 0)
- if (write(temp, buffer, i) < 0)
- {
- _cupsLangPrintf(stderr, NULL,
- _("lp: error - unable to write to temporary file "
- "\"%s\" - %s\n"),
- tempfile, strerror(errno));
- close(temp);
- unlink(tempfile);
- return (1);
- }
+ if (cupsGetOption("raw", num_options, options))
+ format = CUPS_FORMAT_RAW;
+ else if ((format = cupsGetOption("document-format", num_options,
+ options)) == NULL)
+ format = CUPS_FORMAT_AUTO;
+
+ status = cupsStartDocument(CUPS_HTTP_DEFAULT, printer, job_id, NULL,
+ format, 1);
- i = lseek(temp, 0, SEEK_CUR);
- close(temp);
+ while (status == HTTP_CONTINUE &&
+ (bytes = read(0, buffer, sizeof(buffer))) > 0)
+ status = cupsWriteRequestData(CUPS_HTTP_DEFAULT, buffer, (size_t)bytes);
- if (i == 0)
+ if (status != HTTP_CONTINUE)
{
- _cupsLangPuts(stderr, NULL,
- _("lp: stdin is empty, so no job has been sent.\n"));
- unlink(tempfile);
+ _cupsLangPrintf(stderr, _("%s: Error - unable to queue from stdin - %s."),
+ argv[0], httpStatus(status));
+ cupsFinishDocument(CUPS_HTTP_DEFAULT, printer);
+ cupsCancelJob2(CUPS_HTTP_DEFAULT, printer, job_id, 0);
return (1);
}
- if (title)
- job_id = cupsPrintFile(printer, tempfile, title, num_options, options);
- else
- job_id = cupsPrintFile(printer, tempfile, "(stdin)", num_options, options);
-
- unlink(tempfile);
+ if (cupsFinishDocument(CUPS_HTTP_DEFAULT, printer) != IPP_OK)
+ {
+ _cupsLangPrintf(stderr, "%s: %s", argv[0], cupsLastErrorString());
+ cupsCancelJob2(CUPS_HTTP_DEFAULT, printer, job_id, 0);
+ return (1);
+ }
}
if (job_id < 1)
{
- _cupsLangPrintf(stderr, NULL,
- _("lp: unable to print file: %s\n"),
- ippErrorString(cupsLastError()));
+ _cupsLangPrintf(stderr, "%s: %s", argv[0], cupsLastErrorString());
return (1);
}
else if (!silent)
- _cupsLangPrintf(stdout, NULL,
- _("request id is %s-%d (%d file(s))\n"),
+ _cupsLangPrintf(stdout, _("request id is %s-%d (%d file(s))"),
printer, job_id, num_files);
return (0);
*/
int /* O - Exit status */
-restart_job(int job_id) /* I - Job ID */
+restart_job(const char *command, /* I - Command name */
+ int job_id) /* I - Job ID */
{
- http_t *http; /* HTTP connection to server */
- ipp_t *request, /* IPP request */
- *response; /* IPP response */
- cups_lang_t *language; /* Language for request */
+ ipp_t *request; /* IPP request */
char uri[HTTP_MAX_URI]; /* URI for job */
- http = httpConnectEncrypt(cupsServer(), ippPort(), cupsEncryption());
-
- language = cupsLangDefault();
-
- request = ippNew();
- request->request.op.operation_id = IPP_RESTART_JOB;
- request->request.op.request_id = 1;
-
- ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
- "attributes-charset", NULL, cupsLangEncoding(language));
-
- ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
- "attributes-natural-language", NULL, language->language);
+ request = ippNewRequest(IPP_RESTART_JOB);
sprintf(uri, "ipp://localhost/jobs/%d", job_id);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME,
"requesting-user-name", NULL, cupsUser());
- if ((response = cupsDoRequest(http, request, "/jobs")) != NULL)
- {
- if (response->request.status.status_code > IPP_OK_CONFLICT)
- {
- _cupsLangPrintf(stderr, NULL, _("lp: restart-job failed: %s\n"),
- ippErrorString(response->request.status.status_code));
- ippDelete(response);
- return (1);
- }
+ ippDelete(cupsDoRequest(CUPS_HTTP_DEFAULT, request, "/jobs"));
- ippDelete(response);
+ if (cupsLastError() == IPP_STATUS_ERROR_BAD_REQUEST ||
+ cupsLastError() == IPP_STATUS_ERROR_VERSION_NOT_SUPPORTED)
+ {
+ _cupsLangPrintf(stderr,
+ _("%s: Error - add '/version=1.1' to server "
+ "name."), command);
+ return (1);
}
- else
+ else if (cupsLastError() > IPP_OK_CONFLICT)
{
- _cupsLangPrintf(stderr, NULL, _("lp: restart-job failed: %s\n"),
- ippErrorString(cupsLastError()));
+ _cupsLangPrintf(stderr, "%s: %s", command, cupsLastErrorString());
return (1);
}
*/
int /* O - Exit status */
-set_job_attrs(int job_id, /* I - Job ID */
+set_job_attrs(const char *command, /* I - Command name */
+ int job_id, /* I - Job ID */
int num_options,/* I - Number of options */
cups_option_t *options) /* I - Options */
{
- http_t *http; /* HTTP connection to server */
- ipp_t *request, /* IPP request */
- *response; /* IPP response */
- cups_lang_t *language; /* Language for request */
+ ipp_t *request; /* IPP request */
char uri[HTTP_MAX_URI]; /* URI for job */
if (num_options == 0)
return (0);
- http = httpConnectEncrypt(cupsServer(), ippPort(), cupsEncryption());
-
- language = cupsLangDefault();
-
- request = ippNew();
- request->request.op.operation_id = IPP_SET_JOB_ATTRIBUTES;
- request->request.op.request_id = 1;
-
- ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET,
- "attributes-charset", NULL, cupsLangEncoding(language));
-
- ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_LANGUAGE,
- "attributes-natural-language", NULL, language->language);
+ request = ippNewRequest(IPP_SET_JOB_ATTRIBUTES);
sprintf(uri, "ipp://localhost/jobs/%d", job_id);
cupsEncodeOptions(request, num_options, options);
- if ((response = cupsDoRequest(http, request, "/jobs")) != NULL)
- {
- if (response->request.status.status_code > IPP_OK_CONFLICT)
- {
- _cupsLangPrintf(stderr, NULL, _("lp: set-job-attributes failed: %s\n"),
- ippErrorString(response->request.status.status_code));
- ippDelete(response);
- return (1);
- }
+ ippDelete(cupsDoRequest(CUPS_HTTP_DEFAULT, request, "/jobs"));
- ippDelete(response);
+ if (cupsLastError() == IPP_STATUS_ERROR_BAD_REQUEST ||
+ cupsLastError() == IPP_STATUS_ERROR_VERSION_NOT_SUPPORTED)
+ {
+ _cupsLangPrintf(stderr,
+ _("%s: Error - add '/version=1.1' to server "
+ "name."), command);
+ return (1);
}
- else
+ else if (cupsLastError() > IPP_OK_CONFLICT)
{
- _cupsLangPrintf(stderr, NULL, _("lp: set-job-attributes failed: %s\n"),
- ippErrorString(cupsLastError()));
+ _cupsLangPrintf(stderr, "%s: %s", command, cupsLastErrorString());
return (1);
}
}
-#ifndef WIN32
-/*
- * 'sighandler()' - Signal catcher for when we print from stdin...
- */
-
-void
-sighandler(int s) /* I - Signal number */
-{
- /*
- * Remove the temporary file we're using to print from stdin...
- */
-
- unlink(tempfile);
-
- /*
- * Exit...
- */
-
- exit(s);
-}
-#endif /* !WIN32 */
-
-
/*
- * End of "$Id: lp.c 4906 2006-01-10 20:53:28Z mike $".
+ * End of "$Id$".
*/