]> git.ipfire.org Git - thirdparty/squid.git/blobdiff - src/http/StatusCode.cc
Mimic GET reforwarding decisions when our CONNECT fails (#1168)
[thirdparty/squid.git] / src / http / StatusCode.cc
index 854492ba4bed5c8967b7168b39111ad0de0b80e2..24fb2942340262a6bb287ae8a87f104eb28b0c42 100644 (file)
@@ -1,18 +1,27 @@
+/*
+ * Copyright (C) 1996-2022 The Squid Software Foundation and contributors
+ *
+ * Squid software is distributed under GPLv2+ license and includes
+ * contributions from numerous individuals and organizations.
+ * Please see the COPYING and CONTRIBUTORS files for details.
+ */
+
 #include "squid.h"
-#include "Debug.h"
+#include "debug/Stream.h"
 #include "http/StatusCode.h"
+#include "SquidConfig.h"
 
 const char *
 Http::StatusCodeString(const Http::StatusCode status)
 {
     switch (status) {
 
-        // 000
+    // 000
     case Http::scNone:
-        return "Init";         /* we init .status with code 0 */
+        return "Init";      /* we init .status with code 0 */
         break;
 
-        // 100-199
+    // 100-199
     case Http::scContinue:
         return "Continue";
         break;
@@ -25,7 +34,11 @@ Http::StatusCodeString(const Http::StatusCode status)
         return "Processing";
         break;
 
-        // 200-299
+    case Http::scEarlyHints: // 103
+        return "Early Hints";
+        break;
+
+    // 200-299
     case Http::scOkay:
         return "OK";
         break;
@@ -66,7 +79,7 @@ Http::StatusCodeString(const Http::StatusCode status)
         return "IM Used";
         break;
 
-        // 300-399
+    // 300-399
     case Http::scMultipleChoices:
         return "Multiple Choices";
         break;
@@ -99,7 +112,7 @@ Http::StatusCodeString(const Http::StatusCode status)
         return "Permanent Redirect";
         break;
 
-        // 400-499
+    // 400-499
     case Http::scBadRequest:
         return "Bad Request";
         break;
@@ -152,8 +165,8 @@ Http::StatusCodeString(const Http::StatusCode status)
         return "Precondition Failed";
         break;
 
-    case Http::scPayloadTooLarge:
-        return "Payload Too Large";
+    case Http::scContentTooLarge:
+        return "Content Too Large";
         break;
 
     case Http::scUriTooLong:
@@ -172,6 +185,10 @@ Http::StatusCodeString(const Http::StatusCode status)
         return "Expectation Failed";
         break;
 
+    case Http::scMisdirectedRequest:
+        return "Misdirected Request";
+        break;
+
     case Http::scUnprocessableEntity:
         return "Unprocessable Entity";
         break;
@@ -200,7 +217,11 @@ Http::StatusCodeString(const Http::StatusCode status)
         return "Request Header Fields Too Large";
         break;
 
-        // 500-599
+    case scUnavailableForLegalReasons:
+        return "Unavailable For Legal Reasons";
+        break;
+
+    // 500-599
     case Http::scInternalServerError:
         return "Internal Server Error";
         break;
@@ -245,13 +266,36 @@ Http::StatusCodeString(const Http::StatusCode status)
         return "Network Authentication Required";
         break;
 
-        // 600+
+    // 600+
     case Http::scInvalidHeader:
     case Http::scHeaderTooLarge:
-        // fall through to default.
+    // fall through to default.
 
     default:
         debugs(57, 3, "Unassigned HTTP status code: " << status);
     }
     return "Unassigned";
 }
+
+bool
+Http::IsReforwardableStatus(const StatusCode s)
+{
+    switch (s) {
+
+    case scBadGateway:
+    case scGatewayTimeout:
+        return true;
+
+    case scForbidden:
+    case scInternalServerError:
+    case scNotImplemented:
+    case scServiceUnavailable:
+        return Config.retry.onerror;
+
+    default:
+        return false;
+    }
+
+    /* NOTREACHED */
+}
+