From c0460660d5a0c8f2be98adf79d2f27b5fa8f707a Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Wed, 25 Sep 2002 07:08:41 +0000 Subject: [PATCH] Wez Furlong's curl_version_info() function added, still needs some adjustments and possibly some improvments to feature all those things we could possibly want from this. --- include/curl/curl.h | 21 ++++++++++++++++++++ lib/url.c | 3 +++ lib/version.c | 47 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 71 insertions(+) diff --git a/include/curl/curl.h b/include/curl/curl.h index e4b63430a..65deb5247 100644 --- a/include/curl/curl.h +++ b/include/curl/curl.h @@ -909,6 +909,27 @@ CURLcode curl_share_set_unlock_function (curl_share *, curl_unlock_function); CURLcode curl_share_set_lock_data (curl_share *, void *); CURLcode curl_share_destroy (curl_share *); +/**************************************************************************** + * Structures for querying information about the curl library at runtime. + */ + +/* declared as a struct to allow future expansion while remaining backwards + * and binary compatible; any new fields in these two structs must be added + * after the existing fields */ +typedef struct { + const char *protoname; +} curl_runtime_protocol_info; + +typedef struct { + const char *version; /* LIBCURL_VERSION */ + unsigned int version_num; /* LIBCURL_VERSION_NUM */ + /* protocols is terminated by an entry with a NULL protoname */ + curl_runtime_protocol_info *protocols; +} curl_version_info_data; + +/* returns a pointer to a static copy of the version info struct */ +const curl_version_info_data *curl_version_info(void); + #ifdef __cplusplus } #endif diff --git a/lib/url.c b/lib/url.c index 394d3d0c9..abca0b986 100644 --- a/lib/url.c +++ b/lib/url.c @@ -1832,6 +1832,9 @@ static CURLcode CreateConnection(struct SessionHandle *data, * is based on the first letters of the server name. */ + /* Note: if you add a new protocol, please update the list in + * lib/version.c too! */ + if(strnequal(conn->gname, "FTP", 3)) { strcpy(conn->protostr, "ftp"); } diff --git a/lib/version.c b/lib/version.c index 78e956c93..9c347685b 100644 --- a/lib/version.c +++ b/lib/version.c @@ -105,6 +105,53 @@ char *curl_version(void) return version; } +/* data for curl_version_info */ + +static const curl_runtime_protocol_info protocols[] = { +#ifndef CURL_DISABLE_FTP + { "ftp" }, +#endif +#ifndef CURL_DISABLE_GOPHER + { "gopher" }, +#endif +#ifndef CURL_DISABLE_TELNET + { "telnet" }, +#endif +#ifndef CURL_DISABLE_DICT + { "dict" }, +#endif +#ifndef CURL_DISABLE_LDAP + { "ldap" }, +#endif +#ifndef CURL_DISABLE_HTTP + { "http" }, +#endif +#ifndef CURL_DISABLE_FILE + { "file" }, +#endif + +#ifdef USE_SSLEAY +#ifndef CURL_DISABLE_HTTP + { "https" }, +#endif +#ifndef CURL_DISABLE_FTP + { "ftps" }, +#endif +#endif + { NULL } +}; + +static const curl_version_info_data version_info = { + LIBCURL_VERSION, + LIBCURL_VERSION_NUM, + &protocols +}; + +const curl_version_info_data *curl_version_info(void) +{ + return &version_info; +} + /* * local variables: * eval: (load-file "../curl-mode.el")