From 8bca5e05b8e96bbfaaef9cc8dcecc33ce7ef6a15 Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Wed, 20 Nov 2002 19:11:22 +0000 Subject: [PATCH] Kjetil Jacobsen's patch that introduces CURLOPT_PRIVATE and CURLINFO_PRIVATE for storage and retrieval of private data in the curl handle. --- docs/libcurl/curl_easy_getinfo.3 | 6 +++++- docs/libcurl/curl_easy_setopt.3 | 7 +++++++ include/curl/curl.h | 6 +++++- lib/getinfo.c | 3 +++ lib/url.c | 7 +++++++ lib/urldata.h | 2 ++ 6 files changed, 29 insertions(+), 2 deletions(-) diff --git a/docs/libcurl/curl_easy_getinfo.3 b/docs/libcurl/curl_easy_getinfo.3 index 9f1e6a07ee..ae149264d5 100644 --- a/docs/libcurl/curl_easy_getinfo.3 +++ b/docs/libcurl/curl_easy_getinfo.3 @@ -115,8 +115,12 @@ Pass a pointer to a 'char *' to receive the content-type of the downloaded object. This is the value read from the Content-Type: field. If you get NULL, it means that the server didn't send a valid Content-Type header or that the protocol used doesn't support this. (Added in 7.9.4) +.TP +.B CURLINFO_PRIVATE +Pass a pointer to a 'char *' to receive the pointer to the private data +associated with the curl handle (set with the CURLOPT_PRIVATE option to curl_easy_setopt). +(Added in 7.10.3) .PP - .SH RETURN VALUE If the operation was successful, CURLE_OK is returned. Otherwise an appropriate error code will be returned. diff --git a/docs/libcurl/curl_easy_setopt.3 b/docs/libcurl/curl_easy_setopt.3 index 1d17ebb8eb..b387445f4f 100644 --- a/docs/libcurl/curl_easy_setopt.3 +++ b/docs/libcurl/curl_easy_setopt.3 @@ -763,6 +763,13 @@ krb4 awareness. This is a string, 'clear', 'safe', 'confidential' or will be used. Set the string to NULL to disable kerberos4. The kerberos support only works for FTP. (Added in 7.3) .PP +.SH OTHER OPTIONS +.TP 0.4i +.B CURLOPT_PRIVATE +Pass a char * as parameter, pointing to data that should be +associated with the curl handle. The pointer can be subsequently retrieved using +the CURLINFO_PRIVATE options to curl_easy_getinfo. (Added in 7.10.3) +.PP .SH RETURN VALUE CURLE_OK (zero) means that the option was set properly, non-zero means an error occurred as \fI\fP defines. See the \fIlibcurl-errors.3\fP diff --git a/include/curl/curl.h b/include/curl/curl.h index 94c2cd0489..bf7b4852d2 100644 --- a/include/curl/curl.h +++ b/include/curl/curl.h @@ -610,6 +610,8 @@ typedef enum { the response to be compressed. */ CINIT(ENCODING, OBJECTPOINT, 102), + /* Set pointer to private data */ + CINIT(PRIVATE, OBJECTPOINT, 103), CURLOPT_LASTENTRY /* the last unused */ } CURLoption; @@ -861,9 +863,11 @@ typedef enum { CURLINFO_REDIRECT_TIME = CURLINFO_DOUBLE + 19, CURLINFO_REDIRECT_COUNT = CURLINFO_LONG + 20, + CURLINFO_PRIVATE = CURLINFO_STRING + 21, + /* Fill in new entries here! */ - CURLINFO_LASTONE = 21 + CURLINFO_LASTONE = 22 } CURLINFO; /* unfortunately, the easy.h and multi.h include files need options and info diff --git a/lib/getinfo.c b/lib/getinfo.c index 01d6dda854..009a3c10a7 100644 --- a/lib/getinfo.c +++ b/lib/getinfo.c @@ -158,6 +158,9 @@ CURLcode Curl_getinfo(struct SessionHandle *data, CURLINFO info, ...) case CURLINFO_CONTENT_TYPE: *param_charp = data->info.contenttype; break; + case CURLINFO_PRIVATE: + *param_charp = data->set.private?data->set.private:(char *)""; + break; default: return CURLE_BAD_FUNCTION_ARGUMENT; } diff --git a/lib/url.c b/lib/url.c index 7083490be1..c07c508613 100644 --- a/lib/url.c +++ b/lib/url.c @@ -1088,6 +1088,13 @@ CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option, ...) data->set.proxytype = va_arg(param, long); break; + case CURLOPT_PRIVATE: + /* + * Set private data pointer. + */ + data->set.private = va_arg(param, char *); + break; + default: /* unknown tag and its companion, just ignore: */ return CURLE_FAILED_INIT; /* correct this */ diff --git a/lib/urldata.h b/lib/urldata.h index 8d20a78f8c..f123a770cd 100644 --- a/lib/urldata.h +++ b/lib/urldata.h @@ -686,6 +686,8 @@ struct UserDefined { int dns_cache_timeout; /* DNS cache timeout */ long buffer_size; /* size of receive buffer to use */ + + char *private; /* Private data */ /* Here follows boolean settings that define how to behave during this session. They are STATIC, set by libcurl users or at least initially