]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: http: Add function to detect default port
authorChristopher Faulet <cfaulet@haproxy.com>
Tue, 5 Jul 2022 07:53:37 +0000 (09:53 +0200)
committerChristopher Faulet <cfaulet@haproxy.com>
Wed, 6 Jul 2022 15:54:03 +0000 (17:54 +0200)
http_is_default_port() can be used to test if a port is a default HTTP/HTTPS
port. A scheme may be specified. In this case, it is used to detect defaults
ports, 80 for "http://" and 443 for "https://". Otherwise, with no scheme, both
are considered as default ports.

include/haproxy/http.h
src/http.c

index aba8e65a3bcc61d9ba171c5c5730f3ae0fbfa821..ee2f922081cd4409d322350338339611a67459c1 100644 (file)
@@ -37,6 +37,7 @@ enum http_meth_t find_http_meth(const char *str, const int len);
 int http_get_status_idx(unsigned int status);
 const char *http_get_reason(unsigned int status);
 struct ist http_get_host_port(const struct ist host);
+int http_is_default_port(const struct ist schm, const struct ist port);
 int http_validate_scheme(const struct ist schm);
 struct ist http_parse_scheme(struct http_uri_parser *parser);
 struct ist http_parse_authority(struct http_uri_parser *parser, int no_userinfo);
index 7a7fb0cbb983cc50952e52bd795cf9ba593c010c..fbb995e44bedd06567ad6f2e5452ff8b6b55b572 100644 (file)
@@ -496,6 +496,20 @@ struct ist http_get_host_port(const struct ist host)
        return istnext(ist2(ptr, end - ptr));
 }
 
+
+/* Return non-zero if the port <port> is a default port. If the scheme <schm> is
+ * set, it is used to detect default ports (HTTP => 80 and HTTPS => 443)
+ * port. Otherwise, both are considered as default ports.
+ */
+int http_is_default_port(const struct ist schm, const struct ist port)
+{
+       if (!isttest(schm))
+               return (isteq(port, ist("443")) || isteq(port, ist("80")));
+       else
+               return (isteq(port, ist("443")) && isteqi(schm, ist("https://"))) ||
+                       (isteq(port, ist("80")) && isteqi(schm, ist("http://")));
+}
+
 /* Returns non-zero if the scheme <schm> is syntactically correct according to
  * RFC3986#3.1, otherwise zero. It expects only the scheme and nothing else
  * (particularly not the following "://").