]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Bug 1961 partial: cleanup urlParseFinish()
authorAmos Jeffries <squid3@treenet.co.nz>
Sun, 25 Jun 2017 23:31:15 +0000 (11:31 +1200)
committerAmos Jeffries <squid3@treenet.co.nz>
Sun, 25 Jun 2017 23:31:15 +0000 (11:31 +1200)
Move the urlParseFinish() logic into a class URL method and remove its
dependency on HttpRequest objects.

Remove unnecessary urnParse() function.

src/URL.h
src/url.cc

index 6d2eeaba4ac384509f10d41c4dacaf054e6bb99e..a45189ea91a9a83fdd4d406b60f1d0c9ef8830c2 100644 (file)
--- a/src/URL.h
+++ b/src/URL.h
@@ -53,6 +53,9 @@ public:
     }
     void touch(); ///< clear the cached URI display forms
 
+    /// Update the URL object with parsed URI data.
+    void parseFinish(const AnyP::ProtocolType, const char *const protoStr, const char *const path, const char *const host, const SBuf &login, const int port);
+
     AnyP::UriScheme const & getScheme() const {return scheme_;}
 
     /// convert the URL scheme to that given
index 0a5e3053578e88b2e489c84a3c3064ed6f4ed439..dd724dbb1a3550ca8a593223517b0efb90718876 100644 (file)
 #include "SquidString.h"
 #include "URL.h"
 
-static bool urlParseFinish(const HttpRequestMethod& method,
-                           const AnyP::ProtocolType protocol,
-                           const char *const protoStr,
-                           const char *const urlpath,
-                           const char *const host,
-                           const SBuf &login,
-                           const int port,
-                           HttpRequest &request);
-static bool urnParse(const HttpRequestMethod& method, char *urn, HttpRequest &request);
 static const char valid_hostname_chars_u[] =
     "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
     "abcdefghijklmnopqrstuvwxyz"
@@ -228,11 +219,16 @@ urlParse(const HttpRequestMethod& method, char *url, HttpRequest &request)
 
     } else if ((method == Http::METHOD_OPTIONS || method == Http::METHOD_TRACE) &&
                URL::Asterisk().cmp(url) == 0) {
-        protocol = AnyP::PROTO_HTTP;
-        port = 80; // or the slow way ...  AnyP::UriScheme(protocol,"http").defaultPort();
-        return urlParseFinish(method, protocol, "http", url, host, SBuf(), port, request);
-    } else if (!strncmp(url, "urn:", 4)) {
-        return urnParse(method, url, request);
+        request.method = method;
+        request.url.parseFinish(AnyP::PROTO_HTTP, nullptr, url, host, SBuf(), 80);
+        return true;
+    } else if (strncmp(url, "urn:", 4) == 0) {
+        debugs(23, 3, "Split URI '" << url << "' into proto='urn', path='" << (url+4) << "'");
+        debugs(50, 5, "urn=" << (url+4));
+        request.method = method;
+        request.url.setScheme(AnyP::PROTO_URN, nullptr);
+        request.url.path(url + 4);
+        return true;
     } else {
         /* Parse the URL: */
         src = url;
@@ -437,37 +433,25 @@ urlParse(const HttpRequestMethod& method, char *url, HttpRequest &request)
         }
     }
 
-    return urlParseFinish(method, protocol, proto, urlpath, host, SBuf(login), port, request);
-}
-
-/**
- * Update request with parsed URI data.  If the request arg is
- * non-NULL, put parsed values there instead of allocating a new
- * HttpRequest.
- */
-static bool
-urlParseFinish(const HttpRequestMethod& method,
-               const AnyP::ProtocolType protocol,
-               const char *const protoStr, // for unknown protocols
-               const char *const urlpath,
-               const char *const host,
-               const SBuf &login,
-               const int port,
-               HttpRequest &request)
-{
-    request.initHTTP(method, protocol, protoStr, urlpath);
-    request.url.host(host);
-    request.url.userInfo(login);
-    request.url.port(port);
+    request.method = method;
+    request.url.parseFinish(protocol, proto, urlpath, host, SBuf(login), port);
     return true;
 }
 
-static bool
-urnParse(const HttpRequestMethod& method, char *urn, HttpRequest &request)
+/// Update the URL object with parsed URI data.
+void
+URL::parseFinish(const AnyP::ProtocolType protocol,
+                 const char *const protoStr, // for unknown protocols
+                 const char *const aUrlPath,
+                 const char *const aHost,
+                 const SBuf &aLogin,
+                 const int aPort)
 {
-    debugs(50, 5, "urnParse: " << urn);
-    request.initHTTP(method, AnyP::PROTO_URN, "urn", urn + 4);
-    return true;
+    setScheme(protocol, protoStr);
+    path(aUrlPath);
+    host(aHost);
+    userInfo(aLogin);
+    port(aPort);
 }
 
 void