* to the client socket.
*
\note If there is a callback, the callback is responsible for
- * closeing the FD, otherwise we do it ourseves.
+ * closing the FD, otherwise we do it ourselves.
*/
static void
errorSendComplete(int fd, char *bufnotused, size_t size, comm_err_t errflag, int xerrno, void *data)
/* - IP stuff */
str.Printf("ClientIP: %s\r\n", src_addr.NtoA(ntoabuf,MAX_IPSTRLEN));
- if (request && request->hier.host) {
+ if (request && request->hier.host[0] != '\0') {
str.Printf("ServerIP: %s\r\n", request->hier.host);
}
case 'h':
mb.Printf("%s", getMyHostname());
-
break;
case 'H':
if (request) {
- if (request->hier.host)
+ if (request->hier.host[0] != '\0') // if non-empty string.
p = request->hier.host;
else
p = request->GetHost();
break;
case 'I':
- if (request && request->hier.host) {
+ if (request && request->hier.host[0] != '\0') // if non-empty string
mb.Printf("%s", request->hier.host);
- } else
+ else
p = "[unknown]";
break;
break;
case 'U':
- p = request ? urlCanonicalClean(request) : url ? url : "[no URL]";
+ /* Using the fake-https version of canonical so error pages see https:// */
+ /* even when the url-path cannot be shown as more than '*' */
+ p = request ? urlCanonicalFakeHttps(request) : url ? url : "[no URL]";
break;
case 'u':
SQUIDCEXTERN void urlInitialize(void);
SQUIDCEXTERN HttpRequest *urlParse(const HttpRequestMethod&, char *, HttpRequest *request = NULL);
SQUIDCEXTERN const char *urlCanonical(HttpRequest *);
+SQUIDCEXTERN char *urlCanonicalClean(const HttpRequest *);
+SQUIDCEXTERN const char *urlCanonicalFakeHttps(const HttpRequest * request);
SQUIDCEXTERN bool urlIsRelative(const char *);
SQUIDCEXTERN char *urlMakeAbsolute(const HttpRequest *, const char *);
SQUIDCEXTERN char *urlRInternal(const char *host, u_short port, const char *dir, const char *name);
SQUIDCEXTERN int matchDomainName(const char *host, const char *domain);
SQUIDCEXTERN int urlCheckRequest(const HttpRequest *);
SQUIDCEXTERN int urlDefaultPort(protocol_t p);
-SQUIDCEXTERN char *urlCanonicalClean(const HttpRequest *);
SQUIDCEXTERN char *urlHostname(const char *url);
SQUIDCEXTERN void urlExtMethodConfigure(void);
return (request->canonical = xstrdup(urlbuf));
}
-/** \todo AYJ: Performance: This is an *almost* duplicate of urlCanoncical. But elides the query-string.
+/** \todo AYJ: Performance: This is an *almost* duplicate of urlCanonical. But elides the query-string.
* After copying it on in the first place! Would be less code to merge the two with a flag parameter.
* and never copy the query-string part in the first place
*/
return buf;
}
+/**
+ * Yet another alternative to urlCanonical.
+ * This one addes the https:// parts to METHOD_CONNECT URL
+ * for use in error page outputs.
+ * Luckily we can leverage the others instead of duplicating.
+ */
+const char *
+urlCanonicalFakeHttps(const HttpRequest * request)
+{
+ LOCAL_ARRAY(char, buf, MAX_URL);
+
+ // method CONNECT and port HTTPS
+ if(request->method == METHOD_CONNECT && request->port == 443) {
+ snprintf(buf, MAX_URL, "https://%s/*", request->GetHost());
+ return buf;
+ }
+
+ // else do the normal complete canonical thing.
+ return urlCanonicalClean(request);
+}
+
+
/*
* Test if a URL is relative.
*