in wb/wb.c [3362:3436]
static int parse_url(const char *url)
{
char *cp;
char *h;
char *scope_id;
apr_status_t rv;
/* Save a copy for the proxy */
fullurl = apr_pstrdup(cntxt, url);
if (strlen(url) > 7 && strncmp(url, "http://", 7) == 0) {
url += 7;
#ifdef USE_SSL
is_ssl = 0;
#endif
}
else
#ifdef USE_SSL
if (strlen(url) > 8 && strncmp(url, "https://", 8) == 0) {
url += 8;
is_ssl = 1;
}
#else
if (strlen(url) > 8 && strncmp(url, "https://", 8) == 0) {
fprintf(stderr, "SSL not compiled in; no https support\n");
exit(1);
}
#endif
if ((cp = strchr(url, '/')) == NULL)
#ifdef _WAF_BENCH_ // we can omit the '/' if it's the end
// no '/' is found, put cp to the end
cp = (char *)url + strlen(url);
#else
return 1;
#endif //_WAF_BENCH_ , we can omit the '/' if it's the end
h = apr_pstrmemdup(cntxt, url, cp - url);
rv = apr_parse_addr_port(&hostname, &scope_id, &port, h, cntxt);
if (rv != APR_SUCCESS || !hostname || scope_id) {
return 1;
}
path = apr_pstrdup(cntxt, cp);
#ifdef _WAF_BENCH_ // we can omit the '/' if it's the end
if (*cp == '\0') // append "/" to path
path = apr_pstrdup(cntxt, "/");
#endif //_WAF_BENCH_ , we can omit the '/' if it's the end
*cp = '\0';
if (*url == '[') { /* IPv6 numeric address string */
host_field = apr_psprintf(cntxt, "[%s]", hostname);
}
else {
host_field = hostname;
}
if (port == 0) { /* no port specified */
#ifdef USE_SSL
if (is_ssl)
port = 443;
else
#endif
port = 80;
}
if ((
#ifdef USE_SSL
is_ssl && (port != 443)) || (!is_ssl &&
#endif
(port != 80)))
{
colonhost = apr_psprintf(cntxt,":%d",port);
} else
colonhost = "";
return 0;
}