Newer
Older
/***************************************************************************
* _ _ ____ _
* Project ___| | | | _ \| |
* / __| | | | |_) | |
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
* Copyright (C) 1998 - 2002, Daniel Stenberg, <daniel@haxx.se>, et al.
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
* are also available at http://curl.haxx.se/docs/copyright.html.
*
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
* copies of the Software, and permit persons to whom the Software is
* furnished to do so, under the terms of the COPYING file.
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
* KIND, either express or implied.
***************************************************************************/
#include <string.h>
#include <stdio.h>
#include <curl/curl.h>
#include "urldata.h"
#ifdef USE_SSLEAY
static void getssl_version(char *ptr, long *num)
{
Daniel Stenberg
committed
#if (SSLEAY_VERSION_NUMBER >= 0x905000)
Daniel Stenberg
committed
unsigned long ssleay_value;
sub[1]='\0';
Daniel Stenberg
committed
ssleay_value=SSLeay();
*num = ssleay_value;
Daniel Stenberg
committed
if(ssleay_value < 0x906000) {
ssleay_value=SSLEAY_VERSION_NUMBER;
sub[0]='\0';
Daniel Stenberg
committed
}
else {
if(ssleay_value&0xff0) {
sub[0]=((ssleay_value>>4)&0xff) + 'a' -1;
}
else
sub[0]='\0';
}
sprintf(ptr, " OpenSSL/%lx.%lx.%lx%s",
Daniel Stenberg
committed
(ssleay_value>>28)&0xf,
(ssleay_value>>20)&0xff,
(ssleay_value>>12)&0xff,
*num = SSLEAY_VERSION_NUMBER;
sprintf(ptr, " OpenSSL/%lx.%lx.%lx",
(SSLEAY_VERSION_NUMBER>>28)&0xff,
(SSLEAY_VERSION_NUMBER>>20)&0xff,
(SSLEAY_VERSION_NUMBER>>12)&0xf);
#else
{
char sub[2];
sub[1]='\0';
if(SSLEAY_VERSION_NUMBER&0x0f) {
sub[0]=(SSLEAY_VERSION_NUMBER&0x0f) + 'a' -1;
}
else
sub[0]='\0';
sprintf(ptr, " SSL/%x.%x.%x%s",
(SSLEAY_VERSION_NUMBER>>12)&0xff,
(SSLEAY_VERSION_NUMBER>>8)&0xf,
(SSLEAY_VERSION_NUMBER>>4)&0xf, sub);
}
}
#endif
char *curl_version(void)
{
static char version[200];
char *ptr;
long num;
strcpy(version, LIBCURL_NAME "/" LIBCURL_VERSION );
ptr=strchr(version, '\0');
#ifdef USE_SSLEAY
getssl_version(ptr, &num);
ptr=strchr(version, '\0');
#else
(void)num; /* no compiler warning please */
sprintf(ptr, " krb4");
ptr += strlen(ptr);
#endif
#ifdef ENABLE_IPV6
sprintf(ptr, " ipv6");
ptr += strlen(ptr);
#endif
#ifdef HAVE_LIBZ
sprintf(ptr, " zlib/%s", zlibVersion());
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
/* 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 curl_version_info_data version_info = {
LIBCURL_VERSION,
LIBCURL_VERSION_NUM,
0 /* features is 0 by default */
#ifdef ENABLE_IPV6
| CURL_VERSION_IPV6
#endif
#ifdef KRB4
| CURL_VERSION_KERBEROS4
#endif
,
NULL, /* ssl_version */
0, /* ssl_version_num */
NULL, /* zlib_version */
protocols
};
const curl_version_info_data *curl_version_info(void)
{
#ifdef USE_SSLEAY
static char ssl_buffer[80];
long num;
getssl_version(ssl_buffer, &num);
version_info.ssl_version = ssl_buffer;
version_info.ssl_version_num = num;
/* SSL stuff is left zero if undefined */
#endif
#ifdef HAVE_LIBZ
version_info.libz_version = zlibVersion();
/* libz left NULL if non-existing */
#endif
return &version_info;
}
/*
* local variables:
* eval: (load-file "../curl-mode.el")
* end:
* vim600: fdm=marker
* vim: et sw=2 ts=2 sts=2 tw=78