Make HTTP_PROXY work for FTP.

Reported by:	Ben Smithurst <ben@scientia.demon.co.uk>
Reviewed by:	des
This commit is contained in:
Hajimu UMEMOTO 2000-05-15 09:05:36 +00:00
parent 78cb0ab485
commit c97925ad4e
2 changed files with 45 additions and 13 deletions

View File

@ -69,13 +69,19 @@ static struct fetcherr _url_errlist[] = {
FILE *
fetchGet(struct url *URL, char *flags)
{
int direct;
direct = (flags && strchr(flags, 'd'));
if (strcasecmp(URL->scheme, "file") == 0)
return fetchGetFile(URL, flags);
else if (strcasecmp(URL->scheme, "http") == 0)
return fetchGetHTTP(URL, flags);
else if (strcasecmp(URL->scheme, "ftp") == 0)
else if (strcasecmp(URL->scheme, "ftp") == 0) {
if (!direct &&
getenv("FTP_PROXY") == NULL && getenv("HTTP_PROXY") != NULL)
return fetchGetHTTP(URL, flags);
return fetchGetFTP(URL, flags);
else {
} else {
_url_seterr(URL_BAD_SCHEME);
return NULL;
}
@ -88,13 +94,19 @@ fetchGet(struct url *URL, char *flags)
FILE *
fetchPut(struct url *URL, char *flags)
{
int direct;
direct = (flags && strchr(flags, 'd'));
if (strcasecmp(URL->scheme, "file") == 0)
return fetchPutFile(URL, flags);
else if (strcasecmp(URL->scheme, "http") == 0)
return fetchPutHTTP(URL, flags);
else if (strcasecmp(URL->scheme, "ftp") == 0)
else if (strcasecmp(URL->scheme, "ftp") == 0) {
if (!direct &&
getenv("FTP_PROXY") == NULL && getenv("HTTP_PROXY") != NULL)
return fetchPutHTTP(URL, flags);
return fetchPutFTP(URL, flags);
else {
} else {
_url_seterr(URL_BAD_SCHEME);
return NULL;
}
@ -107,13 +119,19 @@ fetchPut(struct url *URL, char *flags)
int
fetchStat(struct url *URL, struct url_stat *us, char *flags)
{
int direct;
direct = (flags && strchr(flags, 'd'));
if (strcasecmp(URL->scheme, "file") == 0)
return fetchStatFile(URL, us, flags);
else if (strcasecmp(URL->scheme, "http") == 0)
return fetchStatHTTP(URL, us, flags);
else if (strcasecmp(URL->scheme, "ftp") == 0)
else if (strcasecmp(URL->scheme, "ftp") == 0) {
if (!direct &&
getenv("FTP_PROXY") == NULL && getenv("HTTP_PROXY") != NULL)
return fetchStatHTTP(URL, us, flags);
return fetchStatFTP(URL, us, flags);
else {
} else {
_url_seterr(URL_BAD_SCHEME);
return -1;
}
@ -126,13 +144,19 @@ fetchStat(struct url *URL, struct url_stat *us, char *flags)
struct url_ent *
fetchList(struct url *URL, char *flags)
{
int direct;
direct = (flags && strchr(flags, 'd'));
if (strcasecmp(URL->scheme, "file") == 0)
return fetchListFile(URL, flags);
else if (strcasecmp(URL->scheme, "http") == 0)
return fetchListHTTP(URL, flags);
else if (strcasecmp(URL->scheme, "ftp") == 0)
else if (strcasecmp(URL->scheme, "ftp") == 0) {
if (!direct &&
getenv("FTP_PROXY") == NULL && getenv("HTTP_PROXY") != NULL)
return fetchListHTTP(URL, flags);
return fetchListFTP(URL, flags);
else {
} else {
_url_seterr(URL_BAD_SCHEME);
return NULL;
}

View File

@ -311,10 +311,16 @@ _http_connect(struct url *URL, char *flags)
if (!URL->port) {
struct servent *se;
if ((se = getservbyname("http", "tcp")) != NULL)
URL->port = ntohs(se->s_port);
if (strcasecmp(URL->scheme, "ftp") == 0)
if ((se = getservbyname("ftp", "tcp")) != NULL)
URL->port = ntohs(se->s_port);
else
URL->port = 21;
else
URL->port = 80;
if ((se = getservbyname("http", "tcp")) != NULL)
URL->port = ntohs(se->s_port);
else
URL->port = 80;
}
/* attempt to connect to proxy server */
@ -363,6 +369,8 @@ _http_connect(struct url *URL, char *flags)
/* if no proxy is configured or could be contacted, try direct */
if (sd == -1) {
if (strcasecmp(URL->scheme, "ftp") == 0)
goto ouch;
if ((sd = _fetch_connect(URL->host, URL->port, verbose)) == -1)
goto ouch;
}
@ -394,8 +402,8 @@ _http_request(FILE *f, char *op, struct url *URL, char *flags)
/* send request (proxies require absolute form, so use that) */
if (verbose)
_fetch_info("requesting http://%s:%d%s",
URL->host, URL->port, URL->doc);
_fetch_info("requesting %s://%s:%d%s",
URL->scheme, URL->host, URL->port, URL->doc);
_http_cmd(f, "%s %s://%s:%d%s HTTP/1.1" ENDL,
op, URL->scheme, URL->host, URL->port, URL->doc);