Index: docs/examples/ftp3rdparty.c
===================================================================
RCS file: /cvsroot/curl/curl/docs/examples/ftp3rdparty.c,v
retrieving revision 1.1
diff -u -r1.1 ftp3rdparty.c
--- docs/examples/ftp3rdparty.c	3 Jun 2004 11:15:27 -0000	1.1
+++ docs/examples/ftp3rdparty.c	17 Jan 2005 14:58:51 -0000
@@ -1,8 +1,8 @@
 /*****************************************************************************
- *                                  _   _ ____  _     
- *  Project                     ___| | | |  _ \| |    
- *                             / __| | | | |_) | |    
- *                            | (__| |_| |  _ <| |___ 
+ *                                  _   _ ____  _
+ *  Project                     ___| | | |  _ \| |
+ *                             / __| | | | |_) | |
+ *                            | (__| |_| |  _ <| |___
  *                             \___|\___/|_| \_\_____|
  *
  * $Id: ftp3rdparty.c,v 1.1 2004/06/03 11:15:27 bagder Exp $
@@ -31,7 +31,7 @@
   char sourceUserPass[] = "user:pass";
   char targetUserPass[] = "user:pass";
   char url[100];
-  
+
   struct curl_slist *source_pre_cmd = NULL;
   struct curl_slist *target_pre_cmd = NULL;
   struct curl_slist *source_post_cmd = NULL;
@@ -39,7 +39,7 @@
   char cmd[] = "PWD";   /* just to test */
 
   curl_global_init(CURL_GLOBAL_DEFAULT);
-  
+
   curl = curl_easy_init();
   if (curl) {
     sprintf(url, "ftp://%s@%s/%s", targetUserPass, targetHost, targetFileName);
@@ -77,7 +77,7 @@
     target_post_cmd = curl_slist_append(target_post_cmd, cmd);
     /* Set a post-quote command */
     curl_easy_setopt(curl, CURLOPT_POSTQUOTE, target_post_cmd);
-    
+
     /* Switch on full protocol/debug output */
     curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
 
Index: lib/ftp.c
===================================================================
RCS file: /cvsroot/curl/curl/lib/ftp.c,v
retrieving revision 1.290
diff -u -r1.290 ftp.c
--- lib/ftp.c	17 Dec 2004 10:09:32 -0000	1.290
+++ lib/ftp.c	17 Jan 2005 14:58:52 -0000
@@ -360,7 +360,7 @@
 
             /* output debug output if that is requested */
             if(data->set.verbose)
-              Curl_debug(data, CURLINFO_HEADER_IN, line_start, perline, conn->host.dispname);
+              Curl_debug(data, CURLINFO_HEADER_IN, line_start, perline, conn);
 
             /*
              * We pass all response-lines to the callback function registered
@@ -2356,7 +2356,7 @@
       break;
 
     if(conn->data->set.verbose)
-      Curl_debug(conn->data, CURLINFO_HEADER_OUT, sptr, bytes_written, conn->host.dispname);
+      Curl_debug(conn->data, CURLINFO_HEADER_OUT, sptr, bytes_written, conn);
 
     if(bytes_written != (ssize_t)write_len) {
       write_len -= bytes_written;
@@ -2542,6 +2542,9 @@
   struct SessionHandle *data = conn->data;
   struct connectdata *sec_conn = conn->sec_conn;
 
+  conn->xfertype = TARGET3RD;
+  sec_conn->xfertype = SOURCE3RD;
+
   /* sets transfer type */
   result = ftp_transfertype(conn, data->set.ftp_ascii);
   if (result)
@@ -2650,7 +2653,7 @@
       return CURLE_FTP_COULDNT_RETR_FILE;
     }
 
-    result = Curl_ftpsendf(conn, "%s %s", stor_cmd, conn->path);
+    result = Curl_ftpsendf(conn, "%s %s", stor_cmd, conn->proto.ftp->file);
     if(CURLE_OK == result)
       result = Curl_GetFTPResponse(&nread, conn, &ftpcode);
     if (result)
Index: lib/http.c
===================================================================
RCS file: /cvsroot/curl/curl/lib/http.c,v
retrieving revision 1.258
diff -u -r1.258 http.c
--- lib/http.c	16 Dec 2004 13:55:19 -0000	1.258
+++ lib/http.c	17 Jan 2005 14:58:53 -0000
@@ -858,8 +858,7 @@
 
     if(conn->data->set.verbose)
       /* this data _may_ contain binary stuff */
-      Curl_debug(conn->data, CURLINFO_HEADER_OUT, ptr, amount,
-                 conn->host.dispname);
+      Curl_debug(conn->data, CURLINFO_HEADER_OUT, ptr, amount, conn);
 
     *bytes_written += amount;
 
@@ -1140,7 +1139,7 @@
               /* output debug if that is requested */
               if(data->set.verbose)
                 Curl_debug(data, CURLINFO_HEADER_IN, line_start, perline,
-                           conn->host.dispname);
+                           conn);
 
               /* send the header to the callback */
               writetype = CLIENTWRITE_HEADER;
Index: lib/sendf.c
===================================================================
RCS file: /cvsroot/curl/curl/lib/sendf.c,v
retrieving revision 1.95
diff -u -r1.95 sendf.c
--- lib/sendf.c	21 Dec 2004 14:33:37 -0000	1.95
+++ lib/sendf.c	17 Jan 2005 14:58:53 -0000
@@ -204,8 +204,7 @@
       break;
 
     if(data->set.verbose)
-      Curl_debug(data, CURLINFO_DATA_OUT, sptr, bytes_written,
-                 conn->host.dispname);
+      Curl_debug(data, CURLINFO_DATA_OUT, sptr, bytes_written, conn);
 
     if((size_t)bytes_written != write_len) {
       /* if not all was written at once, we must advance the pointer, decrease
@@ -468,18 +467,22 @@
 }
 
 int Curl_debug(struct SessionHandle *data, curl_infotype type,
-               char *ptr, size_t size, char *host)
+               char *ptr, size_t size,
+               struct connectdata *conn)
 {
   int rc;
-  if(data->set.printhost && host) {
+  if(data->set.printhost && conn && conn->host.dispname) {
     char buffer[160];
     const char *t=NULL;
+    const char *w="Data";
     switch (type) {
     case CURLINFO_HEADER_IN:
+      w = "Header";
     case CURLINFO_DATA_IN:
       t = "from";
       break;
     case CURLINFO_HEADER_OUT:
+      w = "Header";
     case CURLINFO_DATA_OUT:
       t = "to";
       break;
@@ -488,7 +491,10 @@
     }
 
     if(t) {
-      snprintf(buffer, sizeof(buffer), "[Data %s %s]", t, host);
+      snprintf(buffer, sizeof(buffer), "[%s %s %s%s]", w, t,
+               conn->xfertype==NORMAL?"":
+               (conn->xfertype==SOURCE3RD?"source ":"target "),
+               conn->host.dispname);
       rc = showit(data, CURLINFO_TEXT, buffer, strlen(buffer));
       if(rc)
         return rc;
Index: lib/sendf.h
===================================================================
RCS file: /cvsroot/curl/curl/lib/sendf.h,v
retrieving revision 1.28
diff -u -r1.28 sendf.h
--- lib/sendf.h	13 Nov 2004 21:57:33 -0000	1.28
+++ lib/sendf.h	17 Jan 2005 14:58:53 -0000
@@ -62,7 +62,8 @@
 
 /* the function used to output verbose information */
 int Curl_debug(struct SessionHandle *handle, curl_infotype type,
-               char *data, size_t size, char *host);
+               char *data, size_t size,
+               struct connectdata *conn);
 
 
 #endif
Index: lib/transfer.c
===================================================================
RCS file: /cvsroot/curl/curl/lib/transfer.c,v
retrieving revision 1.263
diff -u -r1.263 transfer.c
--- lib/transfer.c	11 Jan 2005 20:22:44 -0000	1.263
+++ lib/transfer.c	17 Jan 2005 14:58:54 -0000
@@ -935,7 +935,7 @@
 
             if(data->set.verbose)
               Curl_debug(data, CURLINFO_HEADER_IN,
-                         k->p, k->hbuflen, conn->host.dispname);
+                         k->p, k->hbuflen, conn);
 
             result = Curl_client_write(data, writetype, k->p, k->hbuflen);
             if(result)
@@ -1032,14 +1032,12 @@
           if(data->set.verbose) {
             if(k->badheader) {
               Curl_debug(data, CURLINFO_DATA_IN, data->state.headerbuff,
-                         k->hbuflen, conn->host.dispname);
+                         k->hbuflen, conn);
               if(k->badheader == HEADER_PARTHEADER)
-                Curl_debug(data, CURLINFO_DATA_IN, k->str, nread,
-                           conn->host.dispname);
+                Curl_debug(data, CURLINFO_DATA_IN, k->str, nread, conn);
             }
             else
-              Curl_debug(data, CURLINFO_DATA_IN, k->str, nread,
-                         conn->host.dispname);
+              Curl_debug(data, CURLINFO_DATA_IN, k->str, nread, conn);
           }
 
 #ifndef CURL_DISABLE_HTTP
@@ -1270,7 +1268,7 @@
         if(data->set.verbose)
           /* show the data before we change the pointer upload_fromhere */
           Curl_debug(data, CURLINFO_DATA_OUT, conn->upload_fromhere,
-                     bytes_written, conn->host.dispname);
+                     bytes_written, conn);
 
         if(conn->upload_present != bytes_written) {
           /* we only wrote a part of the buffer (if anything), deal with it! */
Index: lib/urldata.h
===================================================================
RCS file: /cvsroot/curl/curl/lib/urldata.h,v
retrieving revision 1.254
diff -u -r1.254 urldata.h
--- lib/urldata.h	11 Jan 2005 20:22:44 -0000	1.254
+++ lib/urldata.h	17 Jan 2005 14:58:54 -0000
@@ -614,6 +614,8 @@
 #endif
   struct connectdata *sec_conn;   /* secondary connection for 3rd party
                                      transfer */
+
+  enum { NORMAL, SOURCE3RD, TARGET3RD } xfertype;
 };
 
 /* The end of connectdata. */
Index: src/main.c
===================================================================
RCS file: /cvsroot/curl/curl/src/main.c,v
retrieving revision 1.304
diff -u -r1.304 main.c
--- src/main.c	6 Jan 2005 22:54:37 -0000	1.304
+++ src/main.c	17 Jan 2005 14:58:55 -0000
@@ -400,13 +400,12 @@
     "    --socks <host[:port]> Use SOCKS5 proxy on given host + port",
     "    --stderr <file> Where to redirect stderr. - means stdout",
     " -t/--telnet-option <OPT=val> Set telnet option",
-    "    --trace <file>  Dump a network/debug trace to the given file",
+    "    --trace <file>  Write a debug trace to the given file",
     "    --trace-ascii <file> Like --trace but without the hex output",
-    " -T/--upload-file <file> Transfer/upload <file> to remote site",
-    "    --url <URL>     Another way to specify URL to work with",
-    " -u/--user <user[:password]> Specify user and password to use",
-    "                    Overrides -n and --netrc-optional",
-    " -U/--proxy-user <user[:password]> Specify Proxy authentication",
+    " -T/--upload-file <file> Transfer <file> to remote site",
+    "    --url <URL>     Spet URL to work with",
+    " -u/--user <user[:password]> Set server user and password",
+    " -U/--proxy-user <user[:password]> Set proxy user and password",
     " -v/--verbose       Make the operation more talkative",
     " -V/--version       Show version number and quit",
 #ifdef __DJGPP__
@@ -422,6 +421,12 @@
     " -1/--tlsv1         Use TLSv1 (SSL)",
     " -2/--sslv2         Use SSLv2 (SSL)",
     " -3/--sslv3         Use SSLv3 (SSL)",
+    "    --3rd-host      FIX",
+    "    --3rd-user      FIX",
+    "    --3rd-path      FIX",
+    "    --3rd-quote     FIX",
+    "    --3rd-pasv      FIX",
+    "    --3rd-port      FIX",
     " -4/--ipv4          Resolve name to IPv4 address",
     " -6/--ipv6          Resolve name to IPv6 address",
     " -#/--progress-bar  Display transfer progress as a progress bar",
@@ -540,6 +545,15 @@
   long req_retry;   /* number of retries */
   long retry_delay; /* delay between retries (in seconds) */
   long retry_maxtime; /* maximum time to keep retrying */
+
+  char *thirdhost;
+  char *thirduser;
+  char *thirdpath;
+  struct curl_slist *thirdquote;
+  struct curl_slist *thirdpostquote;
+  struct curl_slist *thirdprequote;
+  long thirdport;
+  long thirdpasv;
 };
 
 /* global variable to hold info about libcurl */
@@ -1240,6 +1254,14 @@
     {"$g", "retry",      TRUE},
     {"$h", "retry-delay", TRUE},
     {"$i", "retry-max-time", TRUE},
+
+    {"$j", "3rd-host", TRUE},
+    {"$k", "3rd-user", TRUE},
+    {"$l", "3rd-path", TRUE},
+    {"$m", "3rd-quote", TRUE},
+    {"$n", "3rd-pasv", TRUE},
+    {"$o", "3rd-port", TRUE},
+
     {"0", "http1.0",     FALSE},
     {"1", "tlsv1",       FALSE},
     {"2", "sslv2",       FALSE},
@@ -1586,6 +1608,26 @@
       case 'i': /* --retry-max-time */
         if(str2num(&config->retry_maxtime, nextarg))
           return PARAM_BAD_NUMERIC;
+        break;
+
+      case 'j': /* --3rd-host */
+        GetStr(&config->thirdhost, nextarg);
+        break;
+      case 'k': /* --3rd-user */
+        GetStr(&config->thirduser, nextarg);
+        break;
+      case 'l': /* --3rd-path */
+        GetStr(&config->thirdpath, nextarg);
+        break;
+      case 'm': /* --3rd-quote */
+        /* FIX */
+        break;
+      case 'n': /* --3rd-pasv */
+        /* FIX */
+        break;
+      case 'o': /* --3rd-port */
+        if(str2num(&config->thirdport, nextarg))
+          return PARAM_BAD_NUMERIC;
         /* break */
       }
       break;
@@ -3602,6 +3644,19 @@
           curl_easy_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
         }
 
+        /* curl 7.12.4 */
+        curl_easy_setopt(curl, CURLOPT_SOURCE_HOST, config->thirdhost);
+        curl_easy_setopt(curl, CURLOPT_SOURCE_USERPWD, config->thirduser);
+        curl_easy_setopt(curl, CURLOPT_SOURCE_PATH, config->thirdpath);
+        curl_easy_setopt(curl, CURLOPT_SOURCE_PORT, config->thirdport);
+        curl_easy_setopt(curl, CURLOPT_SOURCE_PREQUOTE, config->thirdprequote);
+        curl_easy_setopt(curl, CURLOPT_SOURCE_POSTQUOTE, config->thirdpostquote);
+        curl_easy_setopt(curl, CURLOPT_PASV_HOST, config->thirdpasv);
+#if 0
+        /* Why is there no CURLOPT_SOURCE_QUOTE ? */
+        curl_easy_setopt(curl, CURLOPT_SOURCE_QUOTE, config->thirdquote);
+#endif
+
         retry_numretries = config->req_retry;
 
         retrystart = curlx_tvnow();
Index: tests/ftpserver.pl
===================================================================
RCS file: /cvsroot/curl/curl/tests/ftpserver.pl,v
retrieving revision 1.47
diff -u -r1.47 ftpserver.pl
--- tests/ftpserver.pl	27 Oct 2004 14:18:57 -0000	1.47
+++ tests/ftpserver.pl	17 Jan 2005 14:58:55 -0000
@@ -38,11 +38,13 @@
 
 require "getpart.pm";
 
+my $ftpdnum="";
+
 # open and close each time to allow removal at any time
 sub logmsg {
     my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
         localtime(time);
-    open(FTPLOG, ">>log/ftpd.log");
+    open(FTPLOG, ">>log/ftpd$ftpdnum.log");
     printf FTPLOG ("%02d:%02d:%02d ", $hour, $min, $sec);
     print FTPLOG @_;
     close(FTPLOG);
@@ -50,8 +52,8 @@
 
 sub ftpmsg {
   # append to the server.input file
-  open(INPUT, ">>log/server.input") ||
-    logmsg "failed to open log/server.input\n";
+  open(INPUT, ">>log/server$ftpdnum.input") ||
+    logmsg "failed to open log/server$ftpdnum.input\n";
 
   INPUT->autoflush(1);
   print INPUT @_;
@@ -77,6 +79,10 @@
         $srcdir=$ARGV[1];
         shift @ARGV;
     }
+    elsif($ARGV[0] eq "--id") {
+        $ftpdnum=$ARGV[1];
+        shift @ARGV;
+    }
     elsif($ARGV[0] =~ /^(\d+)$/) {
         $port = $1;
     }
@@ -90,9 +96,10 @@
 bind(Server, sockaddr_in($port, INADDR_ANY))|| die "bind: $!";
 listen(Server,SOMAXCONN) || die "listen: $!";
 
-#print "FTP server started on port $port\n";
 
-open(PID, ">.ftp.pid");
+logmsg "FTP server started on port $port\n";
+
+open(PID, ">.ftp$ftpdnum.pid");
 print PID $$;
 close(PID);
 
Index: tests/runtests.pl
===================================================================
RCS file: /cvsroot/curl/curl/tests/runtests.pl,v
retrieving revision 1.158
diff -u -r1.158 runtests.pl
--- tests/runtests.pl	15 Jan 2005 09:21:51 -0000	1.158
+++ tests/runtests.pl	17 Jan 2005 14:58:56 -0000
@@ -40,6 +40,7 @@
 my $HTTP6PORT; # HTTP IPv6 server port
 my $HTTPSPORT; # HTTPS server port
 my $FTPPORT; # FTP server port
+my $FTP2PORT; # FTP server 2 port
 my $FTPSPORT; # FTPS server port
 
 my $CURL="../src/curl"; # what curl executable to run on the tests
@@ -66,6 +67,7 @@
 my $HTTP6PIDFILE=".http6.pid";
 my $HTTPSPIDFILE=".https.pid";
 my $FTPPIDFILE=".ftp.pid";
+my $FTP2PIDFILE=".ftp2.pid";
 my $FTPSPIDFILE=".ftps.pid";
 
 # invoke perl like this:
@@ -487,19 +489,20 @@
 # start the ftp server if needed
 #
 sub runftpserver {
-    my $verbose = $_[0];
+    my ($id, $verbose) = @_;
     my $STATUS;
     my $RUNNING;
+    my $port = $id?$FTP2PORT:$FTPPORT;
     # check for pidfile
-    my $pid = checkserver ($FTPPIDFILE );
+    my $pid = checkserver ($id?$FTP2PIDFILE:$FTPPIDFILE);
 
     if ($pid <= 0) {
-        print "RUN: Check port $FTPPORT for our own FTP server\n"
+        print "RUN: Check port $port for the FTP$id server\n"
             if ($verbose);
 
         my $time=time();
         # check if this is our server running on this port:
-        my @data=`$CURL -m4 --silent ftp://$HOSTIP:$FTPPORT/verifiedserver 2>/dev/null`;
+        my @data=`$CURL -m4 --silent ftp://$HOSTIP:$port/verifiedserver 2>/dev/null`;
         my $line;
 
         # if this took more than 2 secs, we assume it "hung" on a weird server
@@ -513,7 +516,7 @@
         }
         if(!$pid && $data[0]) {
             # this is not a known server
-            print "RUN: Unknown server on our favourite FTP port: $FTPPORT\n";
+            print "RUN: Unknown server on our favourite FTP port: $port\n";
             return -1;
         }
     }
@@ -522,7 +525,7 @@
         print "RUN: Killing a previous server using pid $pid\n" if($verbose);
         my $res = kill (9, $pid); # die!
         if(!$res) {
-            print "RUN: Failed to kill our FTP test server, do it manually and",
+            print "RUN: Failed to kill FTP$id test server, do it manually and",
             " restart the tests.\n";
             return -1;
         }
@@ -531,8 +534,11 @@
 
     # now (re-)start our server:
     my $flag=$debugprotocol?"-v ":"";
-    $flag .= "-s \"$srcdir\"";
-    my $cmd="$perl $srcdir/ftpserver.pl $flag $FTPPORT &";
+    $flag .= "-s \"$srcdir\" ";
+    if($id) {
+        $flag .="--id $id ";
+    }
+    my $cmd="$perl $srcdir/ftpserver.pl $flag $port &";
     if($verbose) {
         print "CMD: $cmd\n";
     }
@@ -543,7 +549,7 @@
     for(1 .. 10) {
         # verify that our server is up and running:
         my $line;
-        my $cmd="$CURL --silent ftp://$HOSTIP:$FTPPORT/verifiedserver 2>/dev/null";
+        my $cmd="$CURL --silent ftp://$HOSTIP:$port/verifiedserver 2>/dev/null";
         print "$cmd\n" if($verbose);
         my @data = `$cmd`;
         foreach $line (@data) {
@@ -555,7 +561,7 @@
         }
         if(!$pid) {
             if($verbose) {
-                print STDERR "RUN: Retrying FTP server existence in 3 sec\n";
+                print STDERR "RUN: Retrying FTP$id server existence in 3 sec\n";
             }
             sleep(3);
             next;
@@ -565,12 +571,12 @@
         }
     }
     if(!$verified) {
-        warn "RUN: failed to start our FTP server\n";
+        warn "RUN: failed to start our FTP$id server\n";
         return -2;
     }
 
     if($verbose) {
-        print "RUN: FTP server is now verified to be our server\n";
+        print "RUN: FTP$id server is now verified to be our server\n";
     }
 
     return $pid;
@@ -845,6 +851,7 @@
 
     printf("* HTTP port:      %d\n", $HTTPPORT);
     printf("* FTP port:       %d\n", $FTPPORT);
+    printf("* FTP port 2:     %d\n", $FTP2PORT);
     if($stunnel) {
         printf("* FTPS port:      %d\n", $FTPSPORT);
         printf("* HTTPS port:     %d\n", $HTTPSPORT);
@@ -867,6 +874,7 @@
   $$thing =~ s/%HTTP6PORT/$HTTP6PORT/g;
   $$thing =~ s/%HTTPSPORT/$HTTPSPORT/g;
   $$thing =~ s/%FTPPORT/$FTPPORT/g;
+  $$thing =~ s/%FTP2PORT/$FTP2PORT/g;
   $$thing =~ s/%FTPSPORT/$FTPSPORT/g;
   $$thing =~ s/%SRCDIR/$srcdir/g;
   $$thing =~ s/%PWD/$pwd/g;
@@ -1491,7 +1499,7 @@
         $what =~ s/[^a-z0-9-]//g;
         if($what eq "ftp") {
             if(!$run{'ftp'}) {
-                $pid = runftpserver($verbose);
+                $pid = runftpserver("", $verbose);
                 if($pid <= 0) {
                     return "failed starting FTP server";
                 }
@@ -1499,6 +1507,16 @@
                 $run{'ftp'}=$pid;
             }
         }
+        elsif($what eq "ftp2") {
+            if(!$run{'ftp2'}) {
+                $pid = runftpserver("2", $verbose);
+                if($pid <= 0) {
+                    return "failed starting FTP2 server";
+                }
+                printf ("* pid ftp2 => %-5d\n", $pid) if($verbose);
+                $run{'ftp2'}=$pid;
+            }
+        }
         elsif($what eq "http") {
             if(!$run{'http'}) {
                 $pid = runhttpserver($verbose);
@@ -1529,7 +1547,7 @@
                 return "curl lacks SSL support";
             }
             if(!$run{'ftp'}) {
-                $pid = runftpserver($verbose);
+                $pid = runftpserver("", $verbose);
                 if($pid <= 0) {
                     return "failed starting FTP server";
                 }
@@ -1735,6 +1753,7 @@
 $FTPSPORT =  $base + 3; # FTPS server port
 $HTTP6PORT = $base + 4; # HTTP IPv6 server port (different IP protocol
                         # but we follow the same port scheme anyway)
+$FTP2PORT =  $base + 5; # FTP server 2 port
 
 #######################################################################
 # Output curl version and host info being tested
Index: tests/data/test230
===================================================================
RCS file: tests/data/test230
diff -N tests/data/test230
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ tests/data/test230	17 Jan 2005 14:58:56 -0000
@@ -0,0 +1,36 @@
+#
+# Server-side
+<reply>
+<data>
+contents of source file 230
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+ftp
+ftp2
+</server>
+ <name>
+FTP 3rd party transfer
+ </name>
+ <command>
+ftp://%HOSTIP:%FTPPORT/dest/destpath/230 -u daniel:stenberg --3rd-host %HOSTIP --3rd-user daniel2:stenberg2 --3rd-path source/sourcepath/230-s --3rd-port %FTP2PORT
+</command>
+</test>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<protocol>
+USER anonymous
+PASS curl_by_daniel@haxx.se
+PWD
+EPSV
+TYPE A
+LIST
+QUIT
+</protocol>
+</verify>
