1*6236dae4SAndroid Build Coastguard Worker<testcase> 2*6236dae4SAndroid Build Coastguard Worker# Derived from test227 3*6236dae4SAndroid Build Coastguard Worker<info> 4*6236dae4SAndroid Build Coastguard Worker<keywords> 5*6236dae4SAndroid Build Coastguard WorkerFTP 6*6236dae4SAndroid Build Coastguard Workerpost-quote 7*6236dae4SAndroid Build Coastguard Workerpre-quote 8*6236dae4SAndroid Build Coastguard Worker--libcurl 9*6236dae4SAndroid Build Coastguard Worker</keywords> 10*6236dae4SAndroid Build Coastguard Worker</info> 11*6236dae4SAndroid Build Coastguard Worker# Server-side 12*6236dae4SAndroid Build Coastguard Worker<reply> 13*6236dae4SAndroid Build Coastguard Worker<data> 14*6236dae4SAndroid Build Coastguard Workerdata 15*6236dae4SAndroid Build Coastguard Worker to 16*6236dae4SAndroid Build Coastguard Worker see 17*6236dae4SAndroid Build Coastguard Workerthat FTP 18*6236dae4SAndroid Build Coastguard Workerworks 19*6236dae4SAndroid Build Coastguard Worker so does it? 20*6236dae4SAndroid Build Coastguard Worker</data> 21*6236dae4SAndroid Build Coastguard Worker<servercmd> 22*6236dae4SAndroid Build Coastguard WorkerREPLY EPSV 500 no such command 23*6236dae4SAndroid Build Coastguard WorkerREPLY FAIL 500 this might not be a failure! 24*6236dae4SAndroid Build Coastguard Worker</servercmd> 25*6236dae4SAndroid Build Coastguard Worker</reply> 26*6236dae4SAndroid Build Coastguard Worker 27*6236dae4SAndroid Build Coastguard Worker# Client-side 28*6236dae4SAndroid Build Coastguard Worker<client> 29*6236dae4SAndroid Build Coastguard Worker<server> 30*6236dae4SAndroid Build Coastguard Workerftp 31*6236dae4SAndroid Build Coastguard Worker</server> 32*6236dae4SAndroid Build Coastguard Worker<name> 33*6236dae4SAndroid Build Coastguard Worker--libcurl for FTP with quote ops 34*6236dae4SAndroid Build Coastguard Worker</name> 35*6236dae4SAndroid Build Coastguard Worker<setenv> 36*6236dae4SAndroid Build Coastguard WorkerSSL_CERT_FILE= 37*6236dae4SAndroid Build Coastguard Worker</setenv> 38*6236dae4SAndroid Build Coastguard Worker<command> 39*6236dae4SAndroid Build Coastguard Workerftp://%HOSTIP:%FTPPORT/%TESTNUMBER -Q "NOOP 1" -Q "+NOOP 2" -Q "-NOOP 3" -Q "*FAIL" -Q "+*FAIL HARD" --libcurl %LOGDIR/test%TESTNUMBER.c 40*6236dae4SAndroid Build Coastguard Worker</command> 41*6236dae4SAndroid Build Coastguard Worker</client> 42*6236dae4SAndroid Build Coastguard Worker 43*6236dae4SAndroid Build Coastguard Worker# Verify data after the test has been "shot" 44*6236dae4SAndroid Build Coastguard Worker<verify> 45*6236dae4SAndroid Build Coastguard Worker<strip> 46*6236dae4SAndroid Build Coastguard WorkerQUIT 47*6236dae4SAndroid Build Coastguard Worker</strip> 48*6236dae4SAndroid Build Coastguard Worker<protocol> 49*6236dae4SAndroid Build Coastguard WorkerUSER anonymous 50*6236dae4SAndroid Build Coastguard WorkerPASS [email protected] 51*6236dae4SAndroid Build Coastguard WorkerPWD 52*6236dae4SAndroid Build Coastguard WorkerNOOP 1 53*6236dae4SAndroid Build Coastguard WorkerFAIL 54*6236dae4SAndroid Build Coastguard WorkerEPSV 55*6236dae4SAndroid Build Coastguard WorkerPASV 56*6236dae4SAndroid Build Coastguard WorkerTYPE I 57*6236dae4SAndroid Build Coastguard WorkerNOOP 2 58*6236dae4SAndroid Build Coastguard WorkerFAIL HARD 59*6236dae4SAndroid Build Coastguard WorkerSIZE %TESTNUMBER 60*6236dae4SAndroid Build Coastguard WorkerRETR %TESTNUMBER 61*6236dae4SAndroid Build Coastguard WorkerNOOP 3 62*6236dae4SAndroid Build Coastguard WorkerQUIT 63*6236dae4SAndroid Build Coastguard Worker</protocol> 64*6236dae4SAndroid Build Coastguard Worker<file name="%LOGDIR/test%TESTNUMBER.c" mode="text"> 65*6236dae4SAndroid Build Coastguard Worker/********* Sample code generated by the curl command line tool ********** 66*6236dae4SAndroid Build Coastguard Worker * All curl_easy_setopt() options are documented at: 67*6236dae4SAndroid Build Coastguard Worker * https://curl.se/libcurl/c/curl_easy_setopt.html 68*6236dae4SAndroid Build Coastguard Worker ************************************************************************/ 69*6236dae4SAndroid Build Coastguard Worker#include <curl/curl.h> 70*6236dae4SAndroid Build Coastguard Worker 71*6236dae4SAndroid Build Coastguard Workerint main(int argc, char *argv[]) 72*6236dae4SAndroid Build Coastguard Worker{ 73*6236dae4SAndroid Build Coastguard Worker CURLcode ret; 74*6236dae4SAndroid Build Coastguard Worker CURL *hnd; 75*6236dae4SAndroid Build Coastguard Worker struct curl_slist *slist1; 76*6236dae4SAndroid Build Coastguard Worker struct curl_slist *slist2; 77*6236dae4SAndroid Build Coastguard Worker struct curl_slist *slist3; 78*6236dae4SAndroid Build Coastguard Worker 79*6236dae4SAndroid Build Coastguard Worker slist1 = NULL; 80*6236dae4SAndroid Build Coastguard Worker slist1 = curl_slist_append(slist1, "NOOP 1"); 81*6236dae4SAndroid Build Coastguard Worker slist1 = curl_slist_append(slist1, "*FAIL"); 82*6236dae4SAndroid Build Coastguard Worker slist2 = NULL; 83*6236dae4SAndroid Build Coastguard Worker slist2 = curl_slist_append(slist2, "NOOP 3"); 84*6236dae4SAndroid Build Coastguard Worker slist3 = NULL; 85*6236dae4SAndroid Build Coastguard Worker slist3 = curl_slist_append(slist3, "NOOP 2"); 86*6236dae4SAndroid Build Coastguard Worker slist3 = curl_slist_append(slist3, "*FAIL HARD"); 87*6236dae4SAndroid Build Coastguard Worker 88*6236dae4SAndroid Build Coastguard Worker hnd = curl_easy_init(); 89*6236dae4SAndroid Build Coastguard Worker curl_easy_setopt(hnd, CURLOPT_BUFFERSIZE, 102400L); 90*6236dae4SAndroid Build Coastguard Worker curl_easy_setopt(hnd, CURLOPT_URL, "ftp://%HOSTIP:%FTPPORT/%TESTNUMBER"); 91*6236dae4SAndroid Build Coastguard Worker curl_easy_setopt(hnd, CURLOPT_QUOTE, slist1); 92*6236dae4SAndroid Build Coastguard Worker curl_easy_setopt(hnd, CURLOPT_POSTQUOTE, slist2); 93*6236dae4SAndroid Build Coastguard Worker curl_easy_setopt(hnd, CURLOPT_PREQUOTE, slist3); 94*6236dae4SAndroid Build Coastguard Worker curl_easy_setopt(hnd, CURLOPT_VERBOSE, 1L); 95*6236dae4SAndroid Build Coastguard Worker curl_easy_setopt(hnd, CURLOPT_FTP_SKIP_PASV_IP, 1L); 96*6236dae4SAndroid Build Coastguard Worker curl_easy_setopt(hnd, CURLOPT_TCP_KEEPALIVE, 1L); 97*6236dae4SAndroid Build Coastguard Worker 98*6236dae4SAndroid Build Coastguard Worker /* Here is a list of options the curl code used that cannot get generated 99*6236dae4SAndroid Build Coastguard Worker as source easily. You may choose to either not use them or implement 100*6236dae4SAndroid Build Coastguard Worker them yourself. 101*6236dae4SAndroid Build Coastguard Worker 102*6236dae4SAndroid Build Coastguard Worker CURLOPT_WRITEDATA was set to an object pointer 103*6236dae4SAndroid Build Coastguard Worker CURLOPT_WRITEFUNCTION was set to a function pointer 104*6236dae4SAndroid Build Coastguard Worker CURLOPT_READDATA was set to an object pointer 105*6236dae4SAndroid Build Coastguard Worker CURLOPT_READFUNCTION was set to a function pointer 106*6236dae4SAndroid Build Coastguard Worker CURLOPT_SEEKDATA was set to an object pointer 107*6236dae4SAndroid Build Coastguard Worker CURLOPT_SEEKFUNCTION was set to a function pointer 108*6236dae4SAndroid Build Coastguard Worker CURLOPT_ERRORBUFFER was set to an object pointer 109*6236dae4SAndroid Build Coastguard Worker CURLOPT_STDERR was set to an object pointer 110*6236dae4SAndroid Build Coastguard Worker CURLOPT_DEBUGFUNCTION was set to a function pointer 111*6236dae4SAndroid Build Coastguard Worker CURLOPT_DEBUGDATA was set to an object pointer 112*6236dae4SAndroid Build Coastguard Worker CURLOPT_HEADERFUNCTION was set to a function pointer 113*6236dae4SAndroid Build Coastguard Worker CURLOPT_HEADERDATA was set to an object pointer 114*6236dae4SAndroid Build Coastguard Worker 115*6236dae4SAndroid Build Coastguard Worker */ 116*6236dae4SAndroid Build Coastguard Worker 117*6236dae4SAndroid Build Coastguard Worker ret = curl_easy_perform(hnd); 118*6236dae4SAndroid Build Coastguard Worker 119*6236dae4SAndroid Build Coastguard Worker curl_easy_cleanup(hnd); 120*6236dae4SAndroid Build Coastguard Worker hnd = NULL; 121*6236dae4SAndroid Build Coastguard Worker curl_slist_free_all(slist1); 122*6236dae4SAndroid Build Coastguard Worker slist1 = NULL; 123*6236dae4SAndroid Build Coastguard Worker curl_slist_free_all(slist2); 124*6236dae4SAndroid Build Coastguard Worker slist2 = NULL; 125*6236dae4SAndroid Build Coastguard Worker curl_slist_free_all(slist3); 126*6236dae4SAndroid Build Coastguard Worker slist3 = NULL; 127*6236dae4SAndroid Build Coastguard Worker 128*6236dae4SAndroid Build Coastguard Worker return (int)ret; 129*6236dae4SAndroid Build Coastguard Worker} 130*6236dae4SAndroid Build Coastguard Worker/**** End of sample code ****/ 131*6236dae4SAndroid Build Coastguard Worker</file> 132*6236dae4SAndroid Build Coastguard Worker<stripfile> 133*6236dae4SAndroid Build Coastguard Worker# CURLOPT_USERAGENT and CURLOPT_MAXREDIRS requires HTTP protocol 134*6236dae4SAndroid Build Coastguard Worker# CURLOPT_INTERLEAVEDATA requires RTSP (HTTP) protocol 135*6236dae4SAndroid Build Coastguard Worker# support, IOW depends on configuration - just ignore these. 136*6236dae4SAndroid Build Coastguard Worker$_ = '' if /CURLOPT_USERAGENT/ 137*6236dae4SAndroid Build Coastguard Worker$_ = '' if /CURLOPT_MAXREDIRS/ 138*6236dae4SAndroid Build Coastguard Worker# CURLOPT_SSL_VERIFYPEER, SSH_KNOWNHOSTS and HTTP_VERSION vary with 139*6236dae4SAndroid Build Coastguard Worker# configurations - just ignore them 140*6236dae4SAndroid Build Coastguard Worker$_ = '' if /CURLOPT_SSL_VERIFYPEER/ 141*6236dae4SAndroid Build Coastguard Worker$_ = '' if /CURLOPT_SSH_KNOWNHOSTS/ 142*6236dae4SAndroid Build Coastguard Worker$_ = '' if /CURLOPT_HTTP_VERSION/ 143*6236dae4SAndroid Build Coastguard Worker$_ = '' if /CURLOPT_HTTP09_ALLOWED/ 144*6236dae4SAndroid Build Coastguard Worker$_ = '' if /CURLOPT_INTERLEAVEDATA/ 145*6236dae4SAndroid Build Coastguard Worker</stripfile> 146*6236dae4SAndroid Build Coastguard Worker</verify> 147*6236dae4SAndroid Build Coastguard Worker</testcase> 148