From: Christopher Faulet Date: Tue, 5 Jul 2022 07:53:37 +0000 (+0200) Subject: MINOR: http: Add function to detect default port X-Git-Tag: v2.7-dev2~88 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ca7218aaf073627b665459bd881b2b35a481602a;p=thirdparty%2Fhaproxy.git MINOR: http: Add function to detect default port 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. --- diff --git a/include/haproxy/http.h b/include/haproxy/http.h index aba8e65a3b..ee2f922081 100644 --- a/include/haproxy/http.h +++ b/include/haproxy/http.h @@ -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); diff --git a/src/http.c b/src/http.c index 7a7fb0cbb9..fbb995e44b 100644 --- a/src/http.c +++ b/src/http.c @@ -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 is a default port. If the scheme 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 is syntactically correct according to * RFC3986#3.1, otherwise zero. It expects only the scheme and nothing else * (particularly not the following "://").