comparison mupdf-source/thirdparty/curl/docs/libcurl/opts/CURLOPT_DEBUGFUNCTION.3 @ 2:b50eed0cc0ef upstream

ADD: MuPDF v1.26.7: the MuPDF source as downloaded by a default build of PyMuPDF 1.26.4. The directory name has changed: no version number in the expanded directory now.
author Franz Glasner <fzglas.hg@dom66.de>
date Mon, 15 Sep 2025 11:43:07 +0200
parents
children
comparison
equal deleted inserted replaced
1:1d09e1dec1d9 2:b50eed0cc0ef
1 .\" **************************************************************************
2 .\" * _ _ ____ _
3 .\" * Project ___| | | | _ \| |
4 .\" * / __| | | | |_) | |
5 .\" * | (__| |_| | _ <| |___
6 .\" * \___|\___/|_| \_\_____|
7 .\" *
8 .\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
9 .\" *
10 .\" * This software is licensed as described in the file COPYING, which
11 .\" * you should have received as part of this distribution. The terms
12 .\" * are also available at https://curl.haxx.se/docs/copyright.html.
13 .\" *
14 .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
15 .\" * copies of the Software, and permit persons to whom the Software is
16 .\" * furnished to do so, under the terms of the COPYING file.
17 .\" *
18 .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
19 .\" * KIND, either express or implied.
20 .\" *
21 .\" **************************************************************************
22 .\"
23 .TH CURLOPT_DEBUGFUNCTION 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt options"
24 .SH NAME
25 CURLOPT_DEBUGFUNCTION \- debug callback
26 .SH SYNOPSIS
27 .nf
28 #include <curl/curl.h>
29
30 typedef enum {
31 CURLINFO_TEXT = 0,
32 CURLINFO_HEADER_IN, /* 1 */
33 CURLINFO_HEADER_OUT, /* 2 */
34 CURLINFO_DATA_IN, /* 3 */
35 CURLINFO_DATA_OUT, /* 4 */
36 CURLINFO_SSL_DATA_IN, /* 5 */
37 CURLINFO_SSL_DATA_OUT, /* 6 */
38 CURLINFO_END
39 } curl_infotype;
40
41 int debug_callback(CURL *handle,
42 curl_infotype type,
43 char *data,
44 size_t size,
45 void *userptr);
46
47 CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DEBUGFUNCTION,
48 debug_callback);
49 .SH DESCRIPTION
50 Pass a pointer to your callback function, which should match the prototype
51 shown above.
52
53 \fICURLOPT_DEBUGFUNCTION(3)\fP replaces the standard debug function used when
54 \fICURLOPT_VERBOSE(3)\fP is in effect. This callback receives debug
55 information, as specified in the \fItype\fP argument. This function must
56 return 0. The \fIdata\fP pointed to by the char * passed to this function WILL
57 NOT be zero terminated, but will be exactly of the \fIsize\fP as told by the
58 \fIsize\fP argument.
59
60 The \fIuserptr\fP argument is the pointer set with \fICURLOPT_DEBUGDATA(3)\fP.
61
62 Available curl_infotype values:
63 .IP CURLINFO_TEXT
64 The data is informational text.
65 .IP CURLINFO_HEADER_IN
66 The data is header (or header-like) data received from the peer.
67 .IP CURLINFO_HEADER_OUT
68 The data is header (or header-like) data sent to the peer.
69 .IP CURLINFO_DATA_IN
70 The data is protocol data received from the peer.
71 .IP CURLINFO_DATA_OUT
72 The data is protocol data sent to the peer.
73 .IP CURLINFO_SSL_DATA_OUT
74 The data is SSL/TLS (binary) data sent to the peer.
75 .IP CURLINFO_SSL_DATA_IN
76 The data is SSL/TLS (binary) data received from the peer.
77 .SH DEFAULT
78 NULL
79 .SH PROTOCOLS
80 All
81 .SH EXAMPLE
82 .nf
83 static
84 void dump(const char *text,
85 FILE *stream, unsigned char *ptr, size_t size)
86 {
87 size_t i;
88 size_t c;
89 unsigned int width=0x10;
90
91 fprintf(stream, "%s, %10.10ld bytes (0x%8.8lx)\\n",
92 text, (long)size, (long)size);
93
94 for(i=0; i<size; i+= width) {
95 fprintf(stream, "%4.4lx: ", (long)i);
96
97 /* show hex to the left */
98 for(c = 0; c < width; c++) {
99 if(i+c < size)
100 fprintf(stream, "%02x ", ptr[i+c]);
101 else
102 fputs(" ", stream);
103 }
104
105 /* show data on the right */
106 for(c = 0; (c < width) && (i+c < size); c++) {
107 char x = (ptr[i+c] >= 0x20 && ptr[i+c] < 0x80) ? ptr[i+c] : '.';
108 fputc(x, stream);
109 }
110
111 fputc('\\n', stream); /* newline */
112 }
113 }
114
115 static
116 int my_trace(CURL *handle, curl_infotype type,
117 char *data, size_t size,
118 void *userp)
119 {
120 const char *text;
121 (void)handle; /* prevent compiler warning */
122 (void)userp;
123
124 switch (type) {
125 case CURLINFO_TEXT:
126 fprintf(stderr, "== Info: %s", data);
127 default: /* in case a new one is introduced to shock us */
128 return 0;
129
130 case CURLINFO_HEADER_OUT:
131 text = "=> Send header";
132 break;
133 case CURLINFO_DATA_OUT:
134 text = "=> Send data";
135 break;
136 case CURLINFO_SSL_DATA_OUT:
137 text = "=> Send SSL data";
138 break;
139 case CURLINFO_HEADER_IN:
140 text = "<= Recv header";
141 break;
142 case CURLINFO_DATA_IN:
143 text = "<= Recv data";
144 break;
145 case CURLINFO_SSL_DATA_IN:
146 text = "<= Recv SSL data";
147 break;
148 }
149
150 dump(text, stderr, (unsigned char *)data, size);
151 return 0;
152 }
153
154 int main(void)
155 {
156 CURL *curl;
157 CURLcode res;
158
159 curl = curl_easy_init();
160 if(curl) {
161 curl_easy_setopt(curl, CURLOPT_DEBUGFUNCTION, my_trace);
162
163 /* the DEBUGFUNCTION has no effect until we enable VERBOSE */
164 curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
165
166 /* example.com is redirected, so we tell libcurl to follow redirection */
167 curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
168
169 curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/");
170 res = curl_easy_perform(curl);
171 /* Check for errors */
172 if(res != CURLE_OK)
173 fprintf(stderr, "curl_easy_perform() failed: %s\\n",
174 curl_easy_strerror(res));
175
176 /* always cleanup */
177 curl_easy_cleanup(curl);
178 }
179 return 0;
180 }
181 .fi
182 .SH AVAILABILITY
183 Always
184 .SH RETURN VALUE
185 Returns CURLE_OK
186 .SH "SEE ALSO"
187 .BR CURLOPT_VERBOSE "(3), " CURLOPT_DEBUGDATA "(3), "