From aebc6d3086e1bc0858f95f42dcceb3701d925a5d Mon Sep 17 00:00:00 2001 From: Michael R Sweet Date: Fri, 9 Apr 2021 10:20:54 -0400 Subject: [PATCH] Retry Validate-Job operation as needed (OpenPrinting #132) --- CHANGES.md | 1 + backend/ipp.c | 14 +++++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 142a60162..29992b2f4 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -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) diff --git a/backend/ipp.c b/backend/ipp.c index 63353a66d..020ab7fd4 100644 --- a/backend/ipp.c +++ b/backend/ipp.c @@ -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; + } } /*