#include <curl/curl.h>

curl_version_info_data *curl_version_info( CURLversion type );


type Curl version number.

Return Values

Pointer to a curl_version_info_data structure.


Returns a pointer to a struct filled with information about various runtime features in libcurl. type should be set to the version of this functionality when you write your program. This ensures that libcurl will return a correct struct that your program understands, while future programs may get a different struct. CURLVERSION_NOW will be the most recent struct for the library you have installed.

data = curl_version_info(CURLVERSION_NOW);

Applications should use this information to determine if actions are possible (instead of using compile-time checks) as dynamic/DLL libraries can be changed independent of applications.

The curl_version_info_data struct is as follows.

typedef struct {   CURLversion age; /* see description below */

  /* when 'age' is 0 or higher, the members below also exist: */   
  const char *version; /* human readable string */   
  unsigned int version_num; /* numeric representation */   
  const char *host; /* human readable string */   
  int features; /* bitmask, see below */   
  char *ssl_version; /* human readable string */   
  long ssl_version_num; /* not used, always zero */   
  const char *libz_version; /* human readable string */   
  const char **protocols; /* list of protocols */

  /* when 'age' is 1 or higher, the members below also exist: */   
  const char *ares; /* human readable string */   int ares_num; /* number */

  /* when 'age' is 2 or higher, the member below also exists: */   
  const char *libidn; /* human readable string */

  /* when 'age' is 3 or higher, the members below also exist: */   
  int iconv_ver_num; /* '_libiconv_version' if iconv support enabled */

  const char *libssh_version; /* human readable string */

} curl_version_info_data; 

curl_version_info_data Structure Description

age describes the age of the struct. The number depends on how new the libcurl being used is. However, you are guaranteed a struct for which you have a matching struct in the header, as you relate to libcurl the "age" with the input argument.

version is an ASCII string for the libcurl version.

version_num is a 24-bit number created as follows: <8 bits major number> | <8 bits minor number> | <8 bits patch number>. Version 7.21.7 is returned as 0x071507.

host is an ASCII string showing the host information that the libcurl was built for. As discovered by a configure script, or set by the build environment.

features can have none, one, or more bits set. The currently defined bits are as follows.

CURL_VERSION_KERBEROS4 Supports kerberos4 (when using FTP).
CURL_VERSION_LIBZ Supports HTTP deflate using libz
CURL_VERSION_DEBUG libcurl was built with debug capabilities.
CURL_VERSION_CURLDEBUG libcurl was built with memory tracking debug capabilities. Mainly of interest for libcurl enthusiasts.
CURL_VERSION_ASYNCHDNS libcurl was built with support for asynchronous name lookups, which allows more exact timeouts (also on Windows) and less blocking when using the multi-interface.
CURL_VERSION_SPNEGO libcurl was built with support for SPNEGO authentication. (Simple and Protected GSS-API Negotiation Mechanism, defined in RFC 2478 -
CURL_VERSION_LARGEFILE libcurl was built with support for large files.
CURL_VERSION_IDN libcurl was built with support for IDNA, domain names with international letters.
CURL_VERSION_SSPI libcurl was built with support for SSPI. This is only available on Windows and makes libcurl use Windows-provided functions for NTLM authentication. It also allows libcurl to use the current user and the current user's password without the application having to pass them on.
CURL_VERSION_CONV libcurl was built with support for character conversions, as provided by the CURLOPT_CONV_* callbacks.

ssl_version is an ASCII string for the OpenSSL version used. If libcurl has no SSL support, this is NULL.

ssl_version_num is the numerical OpenSSL version value as defined by the OpenSSL project. If libcurl has no SSL support, this is 0.

libz_version is an ASCII string (there is no numerical version). If libcurl has no libz support, this is NULL.

protocols is a pointer to an array of char * pointers, containing the names protocols that libcurl supports (using lowercase letters). The protocol names are the same as would be used in URLs. The array is terminated by a NULL entry.

Do Not Call From


See Also

HTTP Client Library (libcurl)
libcurl API Functions
libcurl Error Codes

Revision History

2014/06/24 Reworked external link.
2013/09/18 Conversion
2013/05/08 Automated cleanup pass.
2012/05/04 Initial version.