1#ifndef HEADER_CURL_TRC_H 2#define HEADER_CURL_TRC_H 3/*************************************************************************** 4 * _ _ ____ _ 5 * Project ___| | | | _ \| | 6 * / __| | | | |_) | | 7 * | (__| |_| | _ <| |___ 8 * \___|\___/|_| \_\_____| 9 * 10 * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al. 11 * 12 * This software is licensed as described in the file COPYING, which 13 * you should have received as part of this distribution. The terms 14 * are also available at https://curl.se/docs/copyright.html. 15 * 16 * You may opt to use, copy, modify, merge, publish, distribute and/or sell 17 * copies of the Software, and permit persons to whom the Software is 18 * furnished to do so, under the terms of the COPYING file. 19 * 20 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY 21 * KIND, either express or implied. 22 * 23 * SPDX-License-Identifier: curl 24 * 25 ***************************************************************************/ 26 27struct Curl_easy; 28struct Curl_cfilter; 29 30/** 31 * Init logging, return != 0 on failure. 32 */ 33CURLcode Curl_trc_init(void); 34 35/** 36 * Configure tracing. May be called several times during global 37 * initialization. Later calls may not take effect. 38 * 39 * Configuration format supported: 40 * - comma-separated list of component names to enable logging on. 41 * E.g. 'http/2,ssl'. Unknown names are ignored. Names are compared 42 * case-insensitive. 43 * - component 'all' applies to all known log components 44 * - prefixing a component with '+' or '-' will en-/disable logging for 45 * that component 46 * Example: 'all,-ssl' would enable logging for all components but the 47 * SSL filters. 48 * 49 * @param config configuration string 50 */ 51CURLcode Curl_trc_opt(const char *config); 52 53/* the function used to output verbose information */ 54void Curl_debug(struct Curl_easy *data, curl_infotype type, 55 char *ptr, size_t size); 56 57/** 58 * Output a failure message on registered callbacks for transfer. 59 */ 60void Curl_failf(struct Curl_easy *data, 61 const char *fmt, ...) CURL_PRINTF(2, 3); 62 63#define failf Curl_failf 64 65#define CURL_LOG_LVL_NONE 0 66#define CURL_LOG_LVL_INFO 1 67 68 69#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L 70#define CURL_HAVE_C99 71#endif 72 73#ifdef CURL_HAVE_C99 74#define infof(data, ...) \ 75 do { if(Curl_trc_is_verbose(data)) \ 76 Curl_infof(data, __VA_ARGS__); } while(0) 77#define CURL_TRC_CF(data, cf, ...) \ 78 do { if(Curl_trc_cf_is_verbose(cf, data)) \ 79 Curl_trc_cf_infof(data, cf, __VA_ARGS__); } while(0) 80 81#else 82#define infof Curl_infof 83#define CURL_TRC_CF Curl_trc_cf_infof 84#endif 85 86#ifndef CURL_DISABLE_VERBOSE_STRINGS 87/* informational messages enabled */ 88 89#define Curl_trc_is_verbose(data) ((data) && (data)->set.verbose) 90#define Curl_trc_cf_is_verbose(cf, data) \ 91 ((data) && (data)->set.verbose && \ 92 (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO) 93 94/** 95 * Output an informational message when transfer's verbose logging is enabled. 96 */ 97void Curl_infof(struct Curl_easy *data, 98 const char *fmt, ...) CURL_PRINTF(2, 3); 99 100/** 101 * Output an informational message when both transfer's verbose logging 102 * and connection filters verbose logging are enabled. 103 */ 104void Curl_trc_cf_infof(struct Curl_easy *data, struct Curl_cfilter *cf, 105 const char *fmt, ...) CURL_PRINTF(3, 4); 106 107#else /* defined(CURL_DISABLE_VERBOSE_STRINGS) */ 108/* All informational messages are not compiled in for size savings */ 109 110#define Curl_trc_is_verbose(d) ((void)(d), FALSE) 111#define Curl_trc_cf_is_verbose(x,y) ((void)(x), (void)(y), FALSE) 112 113static void Curl_infof(struct Curl_easy *data, const char *fmt, ...) 114{ 115 (void)data; (void)fmt; 116} 117 118static void Curl_trc_cf_infof(struct Curl_easy *data, 119 struct Curl_cfilter *cf, 120 const char *fmt, ...) 121{ 122 (void)data; (void)cf; (void)fmt; 123} 124 125#endif /* !defined(CURL_DISABLE_VERBOSE_STRINGS) */ 126 127#endif /* HEADER_CURL_TRC_H */ 128