mirror of
https://github.com/moparisthebest/curl
synced 2024-12-21 23:58:49 -05:00
bugfixed the proxytunnel
This commit is contained in:
parent
96009453e8
commit
00eaf20298
18
lib/ftp.c
18
lib/ftp.c
@ -743,7 +743,8 @@ CURLcode _ftp(struct connectdata *conn)
|
|||||||
else {
|
else {
|
||||||
int ip[4];
|
int ip[4];
|
||||||
int port[2];
|
int port[2];
|
||||||
unsigned short newport;
|
unsigned short newport; /* remote port, not necessary the local one */
|
||||||
|
unsigned short connectport; /* the local port connect() should use! */
|
||||||
char newhost[32];
|
char newhost[32];
|
||||||
struct hostent *he;
|
struct hostent *he;
|
||||||
char *str=buf,*ip_addr;
|
char *str=buf,*ip_addr;
|
||||||
@ -771,6 +772,8 @@ CURLcode _ftp(struct connectdata *conn)
|
|||||||
return CURLE_FTP_WEIRD_227_FORMAT;
|
return CURLE_FTP_WEIRD_227_FORMAT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sprintf(newhost, "%d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3]);
|
||||||
|
newport = (port[0]<<8) + port[1];
|
||||||
if(data->bits.httpproxy) {
|
if(data->bits.httpproxy) {
|
||||||
/*
|
/*
|
||||||
* This is a tunnel through a http proxy and we need to connect to the
|
* This is a tunnel through a http proxy and we need to connect to the
|
||||||
@ -778,30 +781,25 @@ CURLcode _ftp(struct connectdata *conn)
|
|||||||
* previous lookup.
|
* previous lookup.
|
||||||
*/
|
*/
|
||||||
he = conn->hp;
|
he = conn->hp;
|
||||||
|
connectport = data->port; /* we connect to the proxy's port */
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
/* normal, direct, ftp connection */
|
/* normal, direct, ftp connection */
|
||||||
sprintf(newhost, "%d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3]);
|
|
||||||
he = GetHost(data, newhost, hostent_buf, sizeof(hostent_buf));
|
he = GetHost(data, newhost, hostent_buf, sizeof(hostent_buf));
|
||||||
if(!he) {
|
if(!he) {
|
||||||
failf(data, "Can't resolve new host %s", newhost);
|
failf(data, "Can't resolve new host %s", newhost);
|
||||||
return CURLE_FTP_CANT_GET_HOST;
|
return CURLE_FTP_CANT_GET_HOST;
|
||||||
}
|
}
|
||||||
|
connectport = newport; /* we connect to the remote port */
|
||||||
}
|
}
|
||||||
|
|
||||||
newport = (port[0]<<8) + port[1];
|
|
||||||
data->secondarysocket = socket(AF_INET, SOCK_STREAM, 0);
|
data->secondarysocket = socket(AF_INET, SOCK_STREAM, 0);
|
||||||
|
|
||||||
memset((char *) &serv_addr, '\0', sizeof(serv_addr));
|
memset((char *) &serv_addr, '\0', sizeof(serv_addr));
|
||||||
memcpy((char *)&(serv_addr.sin_addr), he->h_addr, he->h_length);
|
memcpy((char *)&(serv_addr.sin_addr), he->h_addr, he->h_length);
|
||||||
serv_addr.sin_family = he->h_addrtype;
|
serv_addr.sin_family = he->h_addrtype;
|
||||||
|
|
||||||
if(data->bits.httpproxy)
|
serv_addr.sin_port = htons(connectport);
|
||||||
/* connect to the http proxy's port number */
|
|
||||||
serv_addr.sin_port = htons(data->port);
|
|
||||||
else
|
|
||||||
/* direct connection to remote host's PASV port */
|
|
||||||
serv_addr.sin_port = htons(newport);
|
|
||||||
|
|
||||||
if(data->bits.verbose) {
|
if(data->bits.verbose) {
|
||||||
struct in_addr in;
|
struct in_addr in;
|
||||||
@ -863,7 +861,7 @@ CURLcode _ftp(struct connectdata *conn)
|
|||||||
#else
|
#else
|
||||||
ip_addr = inet_ntoa(in),
|
ip_addr = inet_ntoa(in),
|
||||||
#endif
|
#endif
|
||||||
newport);
|
connectport);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (connect(data->secondarysocket, (struct sockaddr *) &serv_addr,
|
if (connect(data->secondarysocket, (struct sockaddr *) &serv_addr,
|
||||||
|
@ -146,7 +146,7 @@ CURLcode GetHTTPProxyTunnel(struct UrlData *data, int tunnelsocket,
|
|||||||
int httperror=0;
|
int httperror=0;
|
||||||
int subversion=0;
|
int subversion=0;
|
||||||
|
|
||||||
infof(data, "Establish HTTP proxy tunnel\n");
|
infof(data, "Establish HTTP proxy tunnel to %s:%d\n", hostname, remote_port);
|
||||||
|
|
||||||
/* OK, now send the connect statment */
|
/* OK, now send the connect statment */
|
||||||
sendf(tunnelsocket, data,
|
sendf(tunnelsocket, data,
|
||||||
|
Loading…
Reference in New Issue
Block a user