FTP improvements:

If EPSV, EPRT or LPRT is tried and doesn't work, it will not be retried on
the same server again even if a following request is made using a persistent
connection.

If a second request is made to a server, requesting a file from the same
directory as the previous request operated on, libcurl will no longer make
that long series of CWD commands just to end up on the same spot. Note that
this is only for *exactly* the same dir. There is still room for improvements
to optimize the CWD-sending when the dirs are only slightly different.

Added test 210, 211 and 212 to verify these changes. Had to improve the
test script too and added a new primitive to the test file format.
This commit is contained in:
Daniel Stenberg 2004-11-25 22:21:49 +00:00
parent 5d94ff5974
commit bf51f05a50
11 changed files with 284 additions and 19 deletions

View file

@ -28,7 +28,7 @@ EXTRA_DIST = test1 test108 test117 test127 test20 test27 test34 test46 \
test513 test514 test178 test179 test180 test181 test182 test183 \
test184 test185 test186 test187 test188 test189 test191 test192 \
test193 test194 test195 test196 test197 test198 test515 test516 \
test517 test518
test517 test518 test210 test211 test212
# The following tests have been removed from the dist since they no longer
# work. We need to fix the test suite's FTPS server first, then bring them

43
tests/data/test210 Normal file
View file

@ -0,0 +1,43 @@
# Server-side
<reply>
<data>
data blobb
</data>
<datacheck>
data blobb
data blobb
</datacheck>
</reply>
# Client-side
<client>
<server>
ftp
</server>
<name>
Get two FTP files from the same remote dir: no second CWD
</name>
<command>
ftp://%HOSTIP:%FTPPORT/a/path/210 ftp://%HOSTIP:%FTPPORT/a/path/210
</command>
</test>
# Verify data after the test has been "shot"
<verify>
<protocol>
USER anonymous
PASS curl_by_daniel@haxx.se
PWD
CWD a
CWD path
EPSV
TYPE I
SIZE 210
RETR 210
EPSV
TYPE I
SIZE 210
RETR 210
QUIT
</protocol>
</verify>

47
tests/data/test211 Normal file
View file

@ -0,0 +1,47 @@
# Server-side
<reply>
<data>
data blobb
</data>
<datacheck>
data blobb
data blobb
</datacheck>
</reply>
# Client-side
<client>
<server>
ftp
</server>
<name>
Get two FTP files with no remote EPSV support
</name>
<command>
ftp://%HOSTIP:%FTPPORT/a/path/211 ftp://%HOSTIP:%FTPPORT/a/path/211
</command>
<file name="log/ftpserver.cmd">
REPLY EPSV 500 no such command
</file>
</test>
# Verify data after the test has been "shot"
<verify>
<protocol>
USER anonymous
PASS curl_by_daniel@haxx.se
PWD
CWD a
CWD path
EPSV
PASV
TYPE I
SIZE 211
RETR 211
PASV
TYPE I
SIZE 211
RETR 211
QUIT
</protocol>
</verify>

57
tests/data/test212 Normal file
View file

@ -0,0 +1,57 @@
# Server-side
<reply>
<data>
data blobb
</data>
<datacheck>
data blobb
data blobb
</datacheck>
</reply>
# Client-side
<client>
<features>
ipv6
</features>
<server>
ftp
</server>
<name>
Get two FTP files with no remote EPRT or LPRT support
</name>
<command>
ftp://%HOSTIP:%FTPPORT/a/path/212 ftp://%HOSTIP:%FTPPORT/a/path/212 -P -
</command>
<file name="log/ftpserver.cmd">
REPLY EPRT 500 no such command
REPLY LPRT 500 no such command
</file>
</test>
# Verify data after the test has been "shot"
<verify>
<strippart>
s/^EPRT .*/EPRT stripped/
s/^LPRT .*/LPRT stripped/
s/^PORT .*/PORT stripped/
</strippart>
<protocol>
USER anonymous
PASS curl_by_daniel@haxx.se
PWD
CWD a
CWD path
EPRT stripped
LPRT stripped
PORT stripped
TYPE I
SIZE 212
RETR 212
PORT stripped
TYPE I
SIZE 212
RETR 212
QUIT
</protocol>
</verify>