2011-09-22 05:16:34 -04:00
|
|
|
/***************************************************************************
|
|
|
|
* _ _ ____ _
|
|
|
|
* Project ___| | | | _ \| |
|
|
|
|
* / __| | | | |_) | |
|
|
|
|
* | (__| |_| | _ <| |___
|
|
|
|
* \___|\___/|_| \_\_____|
|
|
|
|
*
|
2019-11-02 18:41:43 -04:00
|
|
|
* Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
|
2011-09-22 05:16:34 -04:00
|
|
|
*
|
|
|
|
* This software is licensed as described in the file COPYING, which
|
|
|
|
* you should have received as part of this distribution. The terms
|
2016-02-02 18:19:02 -05:00
|
|
|
* are also available at https://curl.haxx.se/docs/copyright.html.
|
2011-09-22 05:16:34 -04:00
|
|
|
*
|
|
|
|
* 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.
|
|
|
|
*
|
|
|
|
***************************************************************************/
|
2012-04-06 17:35:15 -04:00
|
|
|
#include "tool_setup.h"
|
2011-09-22 05:16:34 -04:00
|
|
|
|
2016-09-30 12:54:02 -04:00
|
|
|
#include "strcase.h"
|
2011-09-22 05:16:34 -04:00
|
|
|
|
|
|
|
#define ENABLE_CURLX_PRINTF
|
|
|
|
/* use our own printf() functions */
|
|
|
|
#include "curlx.h"
|
|
|
|
|
|
|
|
#include "tool_libinfo.h"
|
|
|
|
|
2013-01-03 20:50:28 -05:00
|
|
|
#include "memdebug.h" /* keep this as LAST include */
|
2011-09-22 05:16:34 -04:00
|
|
|
|
|
|
|
/* global variable definitions, for libcurl run-time info */
|
|
|
|
|
|
|
|
curl_version_info_data *curlinfo = NULL;
|
|
|
|
long built_in_protos = 0;
|
|
|
|
|
|
|
|
/*
|
|
|
|
* libcurl_info_init: retrieves run-time information about libcurl,
|
|
|
|
* setting a global pointer 'curlinfo' to libcurl's run-time info
|
|
|
|
* struct, and a global bit pattern 'built_in_protos' composed of
|
|
|
|
* CURLPROTO_* bits indicating which protocols are actually built
|
|
|
|
* into library being used.
|
|
|
|
*/
|
|
|
|
|
|
|
|
CURLcode get_libcurl_info(void)
|
|
|
|
{
|
|
|
|
static struct proto_name_pattern {
|
|
|
|
const char *proto_name;
|
|
|
|
long proto_pattern;
|
|
|
|
} const possibly_built_in[] = {
|
|
|
|
{ "dict", CURLPROTO_DICT },
|
|
|
|
{ "file", CURLPROTO_FILE },
|
|
|
|
{ "ftp", CURLPROTO_FTP },
|
|
|
|
{ "ftps", CURLPROTO_FTPS },
|
|
|
|
{ "gopher", CURLPROTO_GOPHER },
|
|
|
|
{ "http", CURLPROTO_HTTP },
|
|
|
|
{ "https", CURLPROTO_HTTPS },
|
|
|
|
{ "imap", CURLPROTO_IMAP },
|
|
|
|
{ "imaps", CURLPROTO_IMAPS },
|
|
|
|
{ "ldap", CURLPROTO_LDAP },
|
|
|
|
{ "ldaps", CURLPROTO_LDAPS },
|
|
|
|
{ "pop3", CURLPROTO_POP3 },
|
|
|
|
{ "pop3s", CURLPROTO_POP3S },
|
|
|
|
{ "rtmp", CURLPROTO_RTMP },
|
|
|
|
{ "rtsp", CURLPROTO_RTSP },
|
|
|
|
{ "scp", CURLPROTO_SCP },
|
|
|
|
{ "sftp", CURLPROTO_SFTP },
|
2014-11-30 11:27:03 -05:00
|
|
|
{ "smb", CURLPROTO_SMB },
|
|
|
|
{ "smbs", CURLPROTO_SMBS },
|
2011-09-22 05:16:34 -04:00
|
|
|
{ "smtp", CURLPROTO_SMTP },
|
|
|
|
{ "smtps", CURLPROTO_SMTPS },
|
|
|
|
{ "telnet", CURLPROTO_TELNET },
|
|
|
|
{ "tftp", CURLPROTO_TFTP },
|
|
|
|
{ NULL, 0 }
|
|
|
|
};
|
|
|
|
|
|
|
|
const char *const *proto;
|
|
|
|
|
|
|
|
/* Pointer to libcurl's run-time version information */
|
|
|
|
curlinfo = curl_version_info(CURLVERSION_NOW);
|
|
|
|
if(!curlinfo)
|
|
|
|
return CURLE_FAILED_INIT;
|
|
|
|
|
|
|
|
/* Build CURLPROTO_* bit pattern with libcurl's built-in protocols */
|
|
|
|
built_in_protos = 0;
|
|
|
|
if(curlinfo->protocols) {
|
|
|
|
for(proto = curlinfo->protocols; *proto; proto++) {
|
2018-06-02 16:52:56 -04:00
|
|
|
struct proto_name_pattern const *p;
|
2011-09-22 05:16:34 -04:00
|
|
|
for(p = possibly_built_in; p->proto_name; p++) {
|
2016-10-31 16:49:38 -04:00
|
|
|
if(curl_strequal(*proto, p->proto_name)) {
|
2011-09-22 05:16:34 -04:00
|
|
|
built_in_protos |= p->proto_pattern;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return CURLE_OK;
|
|
|
|
}
|