Setting printer status from STOPPED to IDLE
Michael Sweet
mike at easysw.com
Mon Dec 18 06:21:20 PST 2006
Bawenang wrote:
> Hi, I've read in the development forum:
>
> QUOTE from
> http://www.cups.org/newsgroups.php?s933+gcups.development+v941+T1:
> "The standard CUPS backends only use this exit code for absolutely
> fatal conditions such as bad URIs and other errors that require the
> administrator/user to manually fix the problem."
>
> So if my application runs into this error and the admin has fixed the
> problem manually, how do I set the status to IDLE again from STOPPED
> in my application? My plan is I'll just make a button that can be
> clicked by the admin to clear the jobs queue and set the status to
> IDLE. I know that to clear the queue I'll just call cupsCancelJob().
> But how to set the printer status? I believe there's a function
> called SetPrinterState() in printers.h. Do I have to call that
> function? If I do, what are the parameters? I can't find the
> explanation anywhere.
You need to use the CUPS-Add-Modify-Printer IPP operation, passing
the printer-uri and printer-state values in addition to the
attributes-natural-language and attributes-charset values.
The CUPS web interface includes help on the CUPS API:
http://localhost:631/help
The following code snippet (not tested) will start the named printer:
#include <cups/cups.h>
void
start_printer(const char *name)
{
http_t *http = httpConnectEncrypt(cupsServer(), ippPort(),
cupsEncryption());
ipp_t *request;
char uri[1024];
httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp",
NULL, "localhost", ippPort(), "/printers/%s",
name);
request = ippNewRequest(CUPS_ADD_MODIFY_PRINTER);
ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI,
"printer-uri", NULL, uri);
ippAddInteger(request, IPP_TAG_OPERATION, IPP_TAG_ENUM,
"printer-state", IPP_PRINTER_IDLE);
ippDelete(cupsDoRequest(http, "/admin/", request));
httpClose(http);
if (cupsLastError() != IPP_OK)
{
// Display error
puts(cupsLastErrorString());
}
}
If you are developing a GUI application, make sure you register a
password callback function that will ask for a username and
password (the standard callback asks on the current console/terminal
window...)
--
______________________________________________________________________
Michael Sweet, Easy Software Products mike at easysw dot com
Internet Printing and Publishing Software http://www.easysw.com
More information about the cups
mailing list