]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
bugfixed the proxytunnel
authorDaniel Stenberg <daniel@haxx.se>
Fri, 15 Sep 2000 12:55:38 +0000 (12:55 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Fri, 15 Sep 2000 12:55:38 +0000 (12:55 +0000)
lib/ftp.c
lib/http.c

index 905512993e2d03b1b17bae0aa3d2f9bba892096c..d8548587e7ec6723e523cbcf6bdf127ecd4cc1df 100644 (file)
--- a/lib/ftp.c
+++ b/lib/ftp.c
@@ -743,7 +743,8 @@ CURLcode _ftp(struct connectdata *conn)
     else {
       int ip[4];
       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];
       struct hostent *he;
       char *str=buf,*ip_addr;
@@ -771,6 +772,8 @@ CURLcode _ftp(struct connectdata *conn)
         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) {
         /*
          * 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.
          */
         he = conn->hp;
+        connectport = data->port; /* we connect to the proxy's port */
       }
       else {
         /* 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));
         if(!he) {
           failf(data, "Can't resolve new host %s", newhost);
           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);
 
       memset((char *) &serv_addr, '\0', sizeof(serv_addr));
       memcpy((char *)&(serv_addr.sin_addr), he->h_addr, he->h_length);
       serv_addr.sin_family = he->h_addrtype;
 
-      if(data->bits.httpproxy)
-        /* 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);
+      serv_addr.sin_port = htons(connectport);
 
       if(data->bits.verbose) {
         struct in_addr in;
@@ -863,7 +861,7 @@ CURLcode _ftp(struct connectdata *conn)
 #else
               ip_addr = inet_ntoa(in),
 #endif
-              newport);
+              connectport);
       }
        
       if (connect(data->secondarysocket, (struct sockaddr *) &serv_addr,
index fba4b80cb6b2257f2745f06c01fb5e9e861be453..c835b1313f65caf30c7bc3c6d3f991600292955a 100644 (file)
@@ -146,7 +146,7 @@ CURLcode GetHTTPProxyTunnel(struct UrlData *data, int tunnelsocket,
   int httperror=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 */
   sendf(tunnelsocket, data,