]> git.ipfire.org Git - thirdparty/cups.git/commitdiff
Retry Validate-Job operation as needed (OpenPrinting #132)
authorMichael R Sweet <michael.r.sweet@gmail.com>
Fri, 9 Apr 2021 14:20:54 +0000 (10:20 -0400)
committerMichael R Sweet <michael.r.sweet@gmail.com>
Fri, 9 Apr 2021 14:20:54 +0000 (10:20 -0400)
CHANGES.md
backend/ipp.c

index 142a601625c21293480f677137619c23626617da..29992b2f4917aae61539643a439f33e7aa87a367 100644 (file)
@@ -75,6 +75,7 @@ Changes in CUPS v2.3.5
 - `httpUpdate` did not reset the socket file descriptor when the TLS
   negotiation failed (Apple #5915)
 - The `ippeveprinter` tool now automatically uses an available port.
+- The IPP backend now retries Validate-Job requests (OpenPrinting #132)
 - Removed support for the (long deprecated and unused) `KeepAliveTimeout`
   directive in `cupsd.conf` (Issue #5733)
 
index 63353a66df48f6ae6075a0617286222134079204..020ab7fd4ae8eaf862b5c229e1822227d6e59cf9 100644 (file)
@@ -1,7 +1,8 @@
 /*
  * IPP backend for CUPS.
  *
- * Copyright © 2007-2019 by Apple Inc.
+ * Copyright © 2021 by OpenPrinting
+ * Copyright © 2007-2021 by Apple Inc.
  * Copyright © 1997-2007 by Easy Software Products, all rights reserved.
  *
  * Licensed under Apache License v2.0.  See the file "LICENSE" for more
@@ -256,6 +257,7 @@ main(int  argc,                             /* I - Number of command-line args */
                get_job_attrs = 0,      /* Does printer support Get-Job-Attributes? */
                send_document = 0,      /* Does printer support Send-Document? */
                validate_job = 0,       /* Does printer support Validate-Job? */
+               validate_retried = 0,   /* Was Validate-Job request retried? */
                copies,                 /* Number of copies for job */
                copies_remaining;       /* Number of copies remaining */
   const char   *content_type,          /* CONTENT_TYPE environment variable */
@@ -1559,7 +1561,17 @@ main(int  argc,                          /* I - Number of command-line args */
              ipp_status == IPP_STATUS_ERROR_BAD_REQUEST)
       break;
     else if (job_auth == NULL && ipp_status > IPP_STATUS_ERROR_BAD_REQUEST)
+    {
+      if (!validate_retried)
+      {
+        // Retry Validate-Job operation once, to work around known printer bug...
+        validate_retried = 1;
+        sleep(10);
+        continue;
+      }
+
       goto cleanup;
+    }
   }
 
  /*