diff options
author | Daniel Stenberg <daniel@haxx.se> | 2002-02-28 23:31:23 +0000 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2002-02-28 23:31:23 +0000 |
commit | 80b004a57d6fe8ce2d2fceb29b6eb4a7101da958 (patch) | |
tree | cb8bf3a28106c1a23c9d689a300759a8cee92401 | |
parent | ea8476a2dcf730c16142794975e5eed15cab5db5 (diff) |
Wesley Laxton's CURLOPT_PREQUOTE work
-rw-r--r-- | include/curl/curl.h | 3 | ||||
-rw-r--r-- | lib/ftp.c | 12 | ||||
-rw-r--r-- | lib/url.c | 10 | ||||
-rw-r--r-- | lib/urldata.h | 3 | ||||
-rw-r--r-- | src/main.c | 13 |
5 files changed, 35 insertions, 6 deletions
diff --git a/include/curl/curl.h b/include/curl/curl.h index c4118b6c1..a12a24672 100644 --- a/include/curl/curl.h +++ b/include/curl/curl.h @@ -493,6 +493,9 @@ typedef enum { /* DNS cache timeout */ CINIT(DNS_CACHE_TIMEOUT, LONG, 92), + + /* send linked-list of pre-transfer QUOTE commands (Wesley Laxton)*/ + CINIT(PREQUOTE, OBJECTPOINT, 93), CURLOPT_LASTENTRY /* the last unusued */ } CURLoption; @@ -1618,6 +1618,12 @@ CURLcode ftp_perform(struct connectdata *conn) if(result) return result; + /* Send any PREQUOTE strings after transfer type is set? (Wesley Laxton)*/ + if(data->set.prequote) { + if ((result = ftp_sendquote(conn, data->set.prequote)) != CURLE_OK) + return result; + } + if(conn->resume_from) { /* we're about to continue the uploading of a file */ /* 1. get already existing file's size. We use the SIZE @@ -1803,6 +1809,12 @@ CURLcode ftp_perform(struct connectdata *conn) if(result) return result; + /* Send any PREQUOTE strings after transfer type is set? (Wesley Laxton)*/ + if(data->set.prequote) { + if ((result = ftp_sendquote(conn, data->set.prequote)) != CURLE_OK) + return result; + } + /* Attempt to get the size, it'll be useful in some cases: for resumed downloads and when talking to servers that don't give away the size in the RETR response line. */ @@ -735,6 +735,12 @@ CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option, ...) */ data->set.postquote = va_arg(param, struct curl_slist *); break; + case CURLOPT_PREQUOTE: + /* + * List of RAW FTP commands to use prior to RETR (Wesley Laxton) + */ + data->set.prequote = va_arg(param, struct curl_slist *); + break; case CURLOPT_QUOTE: /* * List of RAW FTP commands to use before a transfer @@ -1983,8 +1989,8 @@ static CURLcode CreateConnection(struct SessionHandle *data, conn = conn_temp; /* use this connection from now on */ /* we need these pointers if we speak over a proxy */ - conn->hostname = old_conn->gname; - conn->name = old_conn->name; + conn->hostname = conn->gname; + conn->name = &conn->gname[old_conn->name - old_conn->gname]; free(conn->path); /* free the previously allocated path pointer */ diff --git a/lib/urldata.h b/lib/urldata.h index cd667fade..c2778a8e3 100644 --- a/lib/urldata.h +++ b/lib/urldata.h @@ -604,8 +604,9 @@ struct UserDefined { char *crypto_engine; /* name of the crypto engine to use */ char *cookiejar; /* dump all cookies to this file */ bool crlf; /* convert crlf on ftp upload(?) */ - struct curl_slist *quote; /* before the transfer */ + struct curl_slist *quote; /* after connection is established */ struct curl_slist *postquote; /* after the transfer */ + struct curl_slist *prequote; /* before the transfer, after type (Wesley Laxton)*/ struct curl_slist *telnet_options; /* linked list of telnet options */ curl_TimeCond timecondition; /* kind of time/date comparison */ time_t timevalue; /* what time to compare with */ diff --git a/src/main.c b/src/main.c index caf02e7cc..d43f49bd1 100644 --- a/src/main.c +++ b/src/main.c @@ -448,6 +448,7 @@ struct Configurable { struct curl_slist *quote; struct curl_slist *postquote; + struct curl_slist *prequote; long ssl_version; curl_TimeCond timecond; @@ -1376,12 +1377,18 @@ static ParameterError getparameter(char *flag, /* f or -long-flag */ break; case 'Q': /* QUOTE command to send to FTP server */ - if(nextarg[0] == '-') { + switch(nextarg[0]) { + case '-': /* prefixed with a dash makes it a POST TRANSFER one */ nextarg++; config->postquote = curl_slist_append(config->postquote, nextarg); - } - else { + break; + case '+': + /* prefixed with a plus makes it a just-before-transfer one */ + nextarg++; + config->prequote = curl_slist_append(config->prequote, nextarg); + break; + default: config->quote = curl_slist_append(config->quote, nextarg); } break; |