2 * "$Id: lprm.c 4906 2006-01-10 20:53:28Z mike $"
4 * "lprm" command for the Common UNIX Printing System (CUPS).
6 * Copyright 1997-2006 by Easy Software Products.
8 * These coded instructions, statements, and computer programs are the
9 * property of Easy Software Products and are protected by Federal
10 * copyright law. Distribution and use rights are outlined in the file
11 * "LICENSE.txt" which should have been included with this file. If this
12 * file is missing or damaged please contact Easy Software Products
15 * Attn: CUPS Licensing Information
16 * Easy Software Products
17 * 44141 Airport View Drive, Suite 204
18 * Hollywood, Maryland 20636 USA
20 * Voice: (301) 373-9600
21 * EMail: cups-info@cups.org
22 * WWW: http://www.cups.org
26 * main() - Parse options and cancel jobs.
30 * Include necessary headers...
36 #include <cups/cups.h>
37 #include <cups/i18n.h>
38 #include <cups/string.h>
42 * 'main()' - Parse options and cancel jobs.
45 int /* O - Exit status */
46 main(int argc
, /* I - Number of command-line arguments */
47 char *argv
[]) /* I - Command-line arguments */
49 http_t
*http
; /* HTTP connection to server */
50 int i
; /* Looping var */
51 int job_id
; /* Job ID */
52 const char *dest
; /* Destination printer */
53 char *instance
; /* Pointer to instance name */
54 char uri
[1024]; /* Printer or job URI */
55 ipp_t
*request
; /* IPP request */
56 ipp_t
*response
; /* IPP response */
57 ipp_op_t op
; /* Operation */
58 cups_lang_t
*language
; /* Language */
59 int num_dests
; /* Number of destinations */
60 cups_dest_t
*dests
; /* Destinations */
61 http_encryption_t encryption
; /* Encryption? */
65 * Setup to cancel individual print jobs...
73 encryption
= cupsEncryption();
74 language
= cupsLangDefault();
75 num_dests
= cupsGetDests(&dests
);
77 for (i
= 0; i
< num_dests
; i
++)
78 if (dests
[i
].is_default
)
82 * Open a connection to the server...
85 if ((http
= httpConnectEncrypt(cupsServer(), ippPort(), encryption
)) == NULL
)
87 _cupsLangPuts(stderr
, language
, _("lprm: Unable to contact server!\n"));
88 cupsFreeDests(num_dests
, dests
);
93 * Process command-line arguments...
96 for (i
= 1; i
< argc
; i
++)
97 if (argv
[i
][0] == '-' && argv
[i
][1] != '\0')
100 case 'E' : /* Encrypt */
102 encryption
= HTTP_ENCRYPT_REQUIRED
;
104 httpEncryption(http
, encryption
);
106 _cupsLangPrintf(stderr
, language
,
107 _("%s: Sorry, no encryption support compiled in!\n"),
109 #endif /* HAVE_SSL */
112 case 'P' : /* Cancel jobs on a printer */
121 if ((instance
= strchr(dest
, '/')) != NULL
)
124 if (cupsGetDest(dest
, NULL
, num_dests
, dests
) == NULL
)
126 _cupsLangPrintf(stderr
, language
,
127 _("lprm: Unknown destination \"%s\"!\n"), dest
);
128 cupsFreeDests(num_dests
, dests
);
135 _cupsLangPrintf(stderr
, language
,
136 _("lprm: Unknown option \'%c\'!\n"), argv
[i
][1]);
137 cupsFreeDests(num_dests
, dests
);
144 * Cancel a job or printer...
147 if (isdigit(argv
[i
][0] & 255) &&
148 cupsGetDest(argv
[i
], NULL
, num_dests
, dests
) == NULL
)
152 job_id
= atoi(argv
[i
]);
154 else if (strcmp(argv
[i
], "-") == 0)
169 * Build an IPP request, which requires the following
173 * attributes-natural-language
174 * printer-uri + job-id *or* job-uri
175 * [requesting-user-name]
180 request
->request
.op
.operation_id
= op
;
181 request
->request
.op
.request_id
= 1;
183 ippAddString(request
, IPP_TAG_OPERATION
, IPP_TAG_CHARSET
,
184 "attributes-charset", NULL
, cupsLangEncoding(language
));
186 ippAddString(request
, IPP_TAG_OPERATION
, IPP_TAG_LANGUAGE
,
187 "attributes-natural-language", NULL
, language
->language
);
191 httpAssembleURIf(uri
, sizeof(uri
), "ipp", NULL
, "localhost", 0,
192 "/printers/%s", dest
);
193 ippAddString(request
, IPP_TAG_OPERATION
, IPP_TAG_URI
,
194 "printer-uri", NULL
, uri
);
195 ippAddInteger(request
, IPP_TAG_OPERATION
, IPP_TAG_INTEGER
, "job-id",
200 sprintf(uri
, "ipp://localhost/jobs/%d", job_id
);
201 ippAddString(request
, IPP_TAG_OPERATION
, IPP_TAG_URI
, "job-uri", NULL
,
205 ippAddString(request
, IPP_TAG_OPERATION
, IPP_TAG_NAME
,
206 "requesting-user-name", NULL
, cupsUser());
209 * Do the request and get back a response...
212 if (op
== IPP_PURGE_JOBS
)
213 response
= cupsDoRequest(http
, request
, "/admin/");
215 response
= cupsDoRequest(http
, request
, "/jobs/");
217 if (response
!= NULL
)
219 switch (response
->request
.status
.status_code
)
222 _cupsLangPuts(stderr
, language
,
223 _("lprm: Job or printer not found!\n"));
225 case IPP_NOT_AUTHORIZED
:
226 _cupsLangPuts(stderr
, language
,
227 _("lprm: Not authorized to lprm job(s)!\n"));
230 _cupsLangPrintf(stderr
, language
,
231 _("lprm: You don't own job ID %d!\n"), job_id
);
234 if (response
->request
.status
.status_code
> IPP_OK_CONFLICT
)
235 _cupsLangPuts(stderr
, language
,
236 _("lprm: Unable to lprm job(s)!\n"));
240 if (response
->request
.status
.status_code
> IPP_OK_CONFLICT
)
243 cupsFreeDests(num_dests
, dests
);
252 _cupsLangPuts(stderr
, language
,
253 _("lprm: Unable to cancel job(s)!\n"));
254 cupsFreeDests(num_dests
, dests
);
261 * If nothing has been cancelled yet, cancel the current job on the specified
262 * (or default) printer...
265 if (response
== NULL
)
266 if (!cupsCancelJob(dest
, 0))
268 _cupsLangPuts(stderr
, language
,
269 _("lprm: Unable to cancel job(s)!\n"));
270 cupsFreeDests(num_dests
, dests
);
275 cupsFreeDests(num_dests
, dests
);
283 * End of "$Id: lprm.c 4906 2006-01-10 20:53:28Z mike $".