+/*
+ * 'print_command()' - Send a print command to the printer.
+ */
+
+void
+print_command(http_t *http, /* I - Connection to server */
+ const char *printer, /* I - Printer */
+ const char *command) /* I - Command to send */
+{
+ cups_file_t *fp; /* File pointer */
+ char filename[1024]; /* Temporary file */
+ ipp_t *request, /* IPP request */
+ *response; /* IPP response */
+ char uri[HTTP_MAX_URI], /* Printer URI */
+ resource[1024], /* POST resource path */
+ refresh[1024]; /* Refresh URL */
+ const char *user; /* Username */
+
+
+ /*
+ * See who is logged in...
+ */
+
+ if ((user = getenv("REMOTE_USER")) == NULL)
+ user = "guest";
+
+ /*
+ * Create the CUPS command file to print...
+ */
+
+ if ((fp = cupsTempFile2(filename, sizeof(filename))) == NULL)
+ {
+ cgiStartHTML(cgiText(_("Printer Maintenance")));
+ cgiSetVariable("MESSAGE", _("Unable to create temporary file:"));
+ cgiSetVariable("ERROR", strerror(errno));
+ cgiCopyTemplateLang("error.tmpl");
+ cgiEndHTML();
+ return;
+ }
+
+ cupsFilePuts(fp, "#CUPS-COMMAND\n");
+ cupsFilePrintf(fp, "%s\n", command);
+ cupsFileClose(fp);
+
+ /*
+ * Point to the printer...
+ */
+
+ snprintf(resource, sizeof(resource), "/printers/%s", printer);
+
+ httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL,
+ "localhost", ippPort(), "/printers/%s", printer);
+
+ /*
+ * Build an IPP_PRINT_JOB request, which requires the following
+ * attributes:
+ *
+ * attributes-charset
+ * attributes-natural-language
+ * printer-uri
+ * requesting-user-name
+ * document-format
+ */
+
+ request = ippNewRequest(IPP_PRINT_JOB);
+
+ ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri",
+ NULL, uri);
+
+ ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME,
+ "requesting-user-name", NULL, user);
+
+ ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "job-name",
+ NULL, "Printer Maintenance");
+
+ ippAddString(request, IPP_TAG_JOB, IPP_TAG_MIMETYPE, "document-format",
+ NULL, "application/postscript");
+
+ /*
+ * Do the request and get back a response...
+ */
+
+ if ((response = cupsDoFileRequest(http, request, resource,
+ filename)) != NULL)
+ {
+ cgiSetIPPVars(response, NULL, NULL, NULL, 0);
+
+ ippDelete(response);
+ }
+
+ unlink(filename);
+
+ if (cupsLastError() <= IPP_OK_CONFLICT)
+ {
+ /*
+ * Automatically reload the printer status page...
+ */
+
+ cgiFormEncode(uri, resource, sizeof(uri));
+ snprintf(refresh, sizeof(refresh), "2;%s", uri);
+ cgiSetVariable("refresh_page", refresh);
+ }
+
+ cgiStartHTML(cgiText(_("Printer Maintenance")));
+
+ if (cupsLastError() > IPP_OK_CONFLICT)
+ cgiShowIPPError(_("Unable to send maintenance job:"));
+ else
+ {
+ cgiSetVariable("PRINTER_NAME", printer);
+
+ cgiCopyTemplateLang("maintenance.tmpl");
+ }
+
+ cgiEndHTML();
+}
+
+