Annotation of embedaddon/curl/docs/libcurl/opts/CURLOPT_DEBUGFUNCTION.3, revision 1.1.1.1

1.1       misho       1: .\" **************************************************************************
                      2: .\" *                                  _   _ ____  _
                      3: .\" *  Project                     ___| | | |  _ \| |
                      4: .\" *                             / __| | | | |_) | |
                      5: .\" *                            | (__| |_| |  _ <| |___
                      6: .\" *                             \___|\___/|_| \_\_____|
                      7: .\" *
                      8: .\" * Copyright (C) 1998 - 2020, 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 "March 23, 2020" "libcurl 7.70.0" "curl_easy_setopt options"
                     24: 
                     25: .SH NAME
                     26: CURLOPT_DEBUGFUNCTION \- debug callback
                     27: .SH SYNOPSIS
                     28: .nf
                     29: #include <curl/curl.h>
                     30: 
                     31: typedef enum {
                     32:   CURLINFO_TEXT = 0,
                     33:   CURLINFO_HEADER_IN,    /* 1 */
                     34:   CURLINFO_HEADER_OUT,   /* 2 */
                     35:   CURLINFO_DATA_IN,      /* 3 */
                     36:   CURLINFO_DATA_OUT,     /* 4 */
                     37:   CURLINFO_SSL_DATA_IN,  /* 5 */
                     38:   CURLINFO_SSL_DATA_OUT, /* 6 */
                     39:   CURLINFO_END
                     40: } curl_infotype;
                     41: 
                     42: int debug_callback(CURL *handle,
                     43:                    curl_infotype type,
                     44:                    char *data,
                     45:                    size_t size,
                     46:                    void *userptr);
                     47: 
                     48: CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DEBUGFUNCTION,
                     49:                           debug_callback);
                     50: .SH DESCRIPTION
                     51: Pass a pointer to your callback function, which should match the prototype
                     52: shown above.
                     53: 
                     54: \fICURLOPT_DEBUGFUNCTION(3)\fP replaces the standard debug function used when
                     55: \fICURLOPT_VERBOSE(3)\fP is in effect. This callback receives debug
                     56: information, as specified in the \fItype\fP argument. This function must
                     57: return 0. The \fIdata\fP pointed to by the char * passed to this function WILL
                     58: NOT be zero terminated, but will be exactly of the \fIsize\fP as told by the
                     59: \fIsize\fP argument.
                     60: 
                     61: The \fIuserptr\fP argument is the pointer set with \fICURLOPT_DEBUGDATA(3)\fP.
                     62: 
                     63: Available curl_infotype values:
                     64: .IP CURLINFO_TEXT
                     65: The data is informational text.
                     66: .IP CURLINFO_HEADER_IN
                     67: The data is header (or header-like) data received from the peer.
                     68: .IP CURLINFO_HEADER_OUT
                     69: The data is header (or header-like) data sent to the peer.
                     70: .IP CURLINFO_DATA_IN
                     71: The data is protocol data received from the peer.
                     72: .IP CURLINFO_DATA_OUT
                     73: The data is protocol data sent to the peer.
                     74: .IP CURLINFO_SSL_DATA_OUT
                     75: The data is SSL/TLS (binary) data sent to the peer.
                     76: .IP CURLINFO_SSL_DATA_IN
                     77: The data is SSL/TLS (binary) data received from the peer.
                     78: .SH DEFAULT
                     79: NULL
                     80: .SH PROTOCOLS
                     81: All
                     82: .SH EXAMPLE
                     83: .nf
                     84: static
                     85: void dump(const char *text,
                     86:           FILE *stream, unsigned char *ptr, size_t size)
                     87: {
                     88:   size_t i;
                     89:   size_t c;
                     90:   unsigned int width=0x10;
                     91: 
                     92:   fprintf(stream, "%s, %10.10ld bytes (0x%8.8lx)\\n",
                     93:           text, (long)size, (long)size);
                     94: 
                     95:   for(i=0; i<size; i+= width) {
                     96:     fprintf(stream, "%4.4lx: ", (long)i);
                     97: 
                     98:     /* show hex to the left */
                     99:     for(c = 0; c < width; c++) {
                    100:       if(i+c < size)
                    101:         fprintf(stream, "%02x ", ptr[i+c]);
                    102:       else
                    103:         fputs("   ", stream);
                    104:     }
                    105: 
                    106:     /* show data on the right */
                    107:     for(c = 0; (c < width) && (i+c < size); c++) {
                    108:       char x = (ptr[i+c] >= 0x20 && ptr[i+c] < 0x80) ? ptr[i+c] : '.';
                    109:       fputc(x, stream);
                    110:     }
                    111: 
                    112:     fputc('\\n', stream); /* newline */
                    113:   }
                    114: }
                    115: 
                    116: static
                    117: int my_trace(CURL *handle, curl_infotype type,
                    118:              char *data, size_t size,
                    119:              void *userp)
                    120: {
                    121:   const char *text;
                    122:   (void)handle; /* prevent compiler warning */
                    123:   (void)userp;
                    124: 
                    125:   switch (type) {
                    126:   case CURLINFO_TEXT:
                    127:     fprintf(stderr, "== Info: %s", data);
                    128:   default: /* in case a new one is introduced to shock us */
                    129:     return 0;
                    130: 
                    131:   case CURLINFO_HEADER_OUT:
                    132:     text = "=> Send header";
                    133:     break;
                    134:   case CURLINFO_DATA_OUT:
                    135:     text = "=> Send data";
                    136:     break;
                    137:   case CURLINFO_SSL_DATA_OUT:
                    138:     text = "=> Send SSL data";
                    139:     break;
                    140:   case CURLINFO_HEADER_IN:
                    141:     text = "<= Recv header";
                    142:     break;
                    143:   case CURLINFO_DATA_IN:
                    144:     text = "<= Recv data";
                    145:     break;
                    146:   case CURLINFO_SSL_DATA_IN:
                    147:     text = "<= Recv SSL data";
                    148:     break;
                    149:   }
                    150: 
                    151:   dump(text, stderr, (unsigned char *)data, size);
                    152:   return 0;
                    153: }
                    154: 
                    155: int main(void)
                    156: {
                    157:   CURL *curl;
                    158:   CURLcode res;
                    159: 
                    160:   curl = curl_easy_init();
                    161:   if(curl) {
                    162:     curl_easy_setopt(curl, CURLOPT_DEBUGFUNCTION, my_trace);
                    163: 
                    164:     /* the DEBUGFUNCTION has no effect until we enable VERBOSE */
                    165:     curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
                    166: 
                    167:     /* example.com is redirected, so we tell libcurl to follow redirection */
                    168:     curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
                    169: 
                    170:     curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/");
                    171:     res = curl_easy_perform(curl);
                    172:     /* Check for errors */
                    173:     if(res != CURLE_OK)
                    174:       fprintf(stderr, "curl_easy_perform() failed: %s\\n",
                    175:               curl_easy_strerror(res));
                    176: 
                    177:     /* always cleanup */
                    178:     curl_easy_cleanup(curl);
                    179:   }
                    180:   return 0;
                    181: }
                    182: .fi
                    183: .SH AVAILABILITY
                    184: Always
                    185: .SH RETURN VALUE
                    186: Returns CURLE_OK
                    187: .SH "SEE ALSO"
                    188: .BR CURLOPT_VERBOSE "(3), " CURLOPT_DEBUGDATA "(3), "

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>