summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2002-01-04 09:03:11 +0000
committerDaniel Stenberg <daniel@haxx.se>2002-01-04 09:03:11 +0000
commit4fc76afef41ae040491460ea243bae2105396ad5 (patch)
tree91216a8ff116740ce41e564c6ac1b3ce120b9931
parenta31155a72aea0ba44b998548e4bcda123f7fb89e (diff)
downloadcurl-4fc76afef41ae040491460ea243bae2105396ad5.tar.gz
The FTP response lines are now passed to the function callback registered for
headers.
-rw-r--r--lib/ftp.c22
1 files changed, 18 insertions, 4 deletions
diff --git a/lib/ftp.c b/lib/ftp.c
index cdaef884a..56449f6a4 100644
--- a/lib/ftp.c
+++ b/lib/ftp.c
@@ -192,9 +192,12 @@ int Curl_GetFTPResponse(char *buf,
char *line_start;
int code=0; /* default "error code" to return */
-#define SELECT_OK 0
-#define SELECT_ERROR 1
-#define SELECT_TIMEOUT 2
+#define SELECT_OK 0
+#define SELECT_ERROR 1 /* select() problems */
+#define SELECT_TIMEOUT 2 /* took too long */
+#define SELECT_MEMORY 3 /* no available memory */
+#define SELECT_CALLBACK 4 /* aborted by callback */
+
int error = SELECT_OK;
struct FTP *ftp = conn->proto.ftp;
@@ -283,6 +286,7 @@ int Curl_GetFTPResponse(char *buf,
if(*ptr=='\n') {
/* a newline is CRLF in ftp-talk, so the CR is ignored as
the line isn't really terminated until the LF comes */
+ CURLcode result;
/* output debug output if that is requested */
if(data->set.verbose) {
@@ -291,6 +295,16 @@ int Curl_GetFTPResponse(char *buf,
/* no need to output LF here, it is part of the data */
}
+ /*
+ * We pass all response-lines to the callback function registered
+ * for "headers". The response lines can be seen as a kind of
+ * headers.
+ */
+ result = Curl_client_write(data, CLIENTWRITE_HEADER,
+ line_start, perline);
+ if(result)
+ return -SELECT_CALLBACK;
+
#define lastline(line) (isdigit((int)line[0]) && isdigit((int)line[1]) && \
isdigit((int)line[2]) && (' ' == line[3]))
@@ -324,7 +338,7 @@ int Curl_GetFTPResponse(char *buf,
if(ftp->cache)
memcpy(ftp->cache, line_start, ftp->cache_size);
else
- return CURLE_OUT_OF_MEMORY; /**BANG**/
+ return -SELECT_MEMORY; /**BANG**/
}
} /* there was data */
} /* if(no error) */