1<testcase> 2# Derived from test227 3<info> 4<keywords> 5FTP 6post-quote 7pre-quote 8quote 9--libcurl 10</keywords> 11</info> 12# Server-side 13<reply> 14<data> 15data 16 to 17 see 18that FTP 19works 20 so does it? 21</data> 22<servercmd> 23REPLY EPSV 500 no such command 24REPLY FAIL 500 this might not be a failure! 25</servercmd> 26</reply> 27 28# Client-side 29<client> 30<server> 31ftp 32</server> 33 <name> 34FTP with quote ops 35 </name> 36 <command> 37ftp://%HOSTIP:%FTPPORT/1405 -Q "NOOP 1" -Q "+NOOP 2" -Q "-NOOP 3" -Q "*FAIL" -Q "+*FAIL HARD" --libcurl log/test1405.c 38</command> 39</client> 40 41# Verify data after the test has been "shot" 42<verify> 43<protocol> 44USER anonymous 45PASS ftp@example.com 46PWD 47NOOP 1 48FAIL 49EPSV 50PASV 51TYPE I 52NOOP 2 53FAIL HARD 54SIZE 1405 55RETR 1405 56NOOP 3 57QUIT 58</protocol> 59<file name="log/test1405.c" mode="text"> 60/********* Sample code generated by the curl command line tool ********** 61 * All curl_easy_setopt() options are documented at: 62 * http://curl.haxx.se/libcurl/c/curl_easy_setopt.html 63 ************************************************************************/ 64#include <curl/curl.h> 65 66int main(int argc, char *argv[]) 67{ 68 CURLcode ret; 69 CURL *hnd; 70 struct curl_slist *slist1; 71 struct curl_slist *slist2; 72 struct curl_slist *slist3; 73 74 slist1 = NULL; 75 slist1 = curl_slist_append(slist1, "NOOP 1"); 76 slist1 = curl_slist_append(slist1, "*FAIL"); 77 slist2 = NULL; 78 slist2 = curl_slist_append(slist2, "NOOP 3"); 79 slist3 = NULL; 80 slist3 = curl_slist_append(slist3, "NOOP 2"); 81 slist3 = curl_slist_append(slist3, "*FAIL HARD"); 82 83 hnd = curl_easy_init(); 84 curl_easy_setopt(hnd, CURLOPT_URL, "ftp://%HOSTIP:%FTPPORT/1405"); 85 curl_easy_setopt(hnd, CURLOPT_HEADER, 1L); 86 curl_easy_setopt(hnd, CURLOPT_QUOTE, slist1); 87 curl_easy_setopt(hnd, CURLOPT_POSTQUOTE, slist2); 88 curl_easy_setopt(hnd, CURLOPT_PREQUOTE, slist3); 89 curl_easy_setopt(hnd, CURLOPT_VERBOSE, 1L); 90 curl_easy_setopt(hnd, CURLOPT_TCP_KEEPALIVE, 1L); 91 92 /* Here is a list of options the curl code used that cannot get generated 93 as source easily. You may select to either not use them or implement 94 them yourself. 95 96 CURLOPT_WRITEDATA set to a objectpointer 97 CURLOPT_WRITEFUNCTION set to a functionpointer 98 CURLOPT_READDATA set to a objectpointer 99 CURLOPT_READFUNCTION set to a functionpointer 100 CURLOPT_SEEKDATA set to a objectpointer 101 CURLOPT_SEEKFUNCTION set to a functionpointer 102 CURLOPT_ERRORBUFFER set to a objectpointer 103 CURLOPT_STDERR set to a objectpointer 104 CURLOPT_DEBUGFUNCTION set to a functionpointer 105 CURLOPT_DEBUGDATA set to a objectpointer 106 CURLOPT_HEADERFUNCTION set to a functionpointer 107 CURLOPT_HEADERDATA set to a objectpointer 108 109 */ 110 111 ret = curl_easy_perform(hnd); 112 113 curl_easy_cleanup(hnd); 114 hnd = NULL; 115 curl_slist_free_all(slist1); 116 slist1 = NULL; 117 curl_slist_free_all(slist2); 118 slist2 = NULL; 119 curl_slist_free_all(slist3); 120 slist3 = NULL; 121 122 return (int)ret; 123} 124/**** End of sample code ****/ 125</file> 126<stripfile> 127# CURLOPT_USERAGENT and CURLOPT_MAXREDIRS requires HTTP protocol 128# support, IOW depends on configuration - just ignore these. 129$_ = '' if /CURLOPT_USERAGENT/ 130$_ = '' if /CURLOPT_MAXREDIRS/ 131# CURLOPT_SSL_VERIFYPEER and SSH_KNOWNHOSTS vary with configurations - just 132# ignore them 133$_ = '' if /CURLOPT_SSL_VERIFYPEER/ 134$_ = '' if /CURLOPT_SSH_KNOWNHOSTS/ 135</stripfile> 136</verify> 137</testcase> 138