DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH PRINT BOOK
 

CURLOPT_DEBUGFUNCTION(3)





CURLOPT_DEBUGFUNCTION(3curl_easy_setopt optionCURLOPT_DEBUGFUNCTION(3)



NAME

     CURLOPT_DEBUGFUNCTION - debug callback


SYNOPSIS

     #include <curl/curl.h>

     typedef enum {
       CURLINFO_TEXT = 0,
       CURLINFO_HEADER_IN,    /* 1 */
       CURLINFO_HEADER_OUT,   /* 2 */
       CURLINFO_DATA_IN,      /* 3 */
       CURLINFO_DATA_OUT,     /* 4 */
       CURLINFO_SSL_DATA_IN,  /* 5 */
       CURLINFO_SSL_DATA_OUT, /* 6 */
       CURLINFO_END
     } curl_infotype;

     int debug_callback(CURL *handle,
                        curl_infotype type,
                        char *data,
                        size_t size,
                        void *userptr);

     CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DEBUGFUNCTION,
                               debug_callback);


DESCRIPTION

     Pass a pointer to your callback function, which should match
     the prototype shown above.

     CURLOPT_DEBUGFUNCTION(3) replaces the standard  debug  func-
     tion  used  when CURLOPT_VERBOSE(3) is in effect. This call-
     back receives debug information, as specified  in  the  type
     argument.  This  function must return 0. The data pointed to
     by the char * passed to this function WILL NOT be zero  ter-
     minated, but will be exactly of the size as told by the size
     argument.

     The   userptr   argument   is   the   pointer    set    with
     CURLOPT_DEBUGDATA(3).

     Available curl_infotype values:

     CURLINFO_TEXT
          The data is informational text.

     CURLINFO_HEADER_IN
          The data is header (or header-like) data received  from
          the peer.

     CURLINFO_HEADER_OUT
          The data is header (or header-like) data  sent  to  the

libcurl 7.58.0    Last change: October 06, 2016                 1


CURLOPT_DEBUGFUNCTION(3curl_easy_setopt optionCURLOPT_DEBUGFUNCTION(3)


          peer.

     CURLINFO_DATA_IN
          The data is protocol data received from the peer.

     CURLINFO_DATA_OUT
          The data is protocol data sent to the peer.

     CURLINFO_SSL_DATA_OUT
          The data is SSL/TLS (binary) data sent to the peer.

     CURLINFO_SSL_DATA_IN
          The data is SSL/TLS (binary)  data  received  from  the
          peer.


DEFAULT

     NULL


PROTOCOLS

     All


EXAMPLE

     static
     void dump(const char *text,
               FILE *stream, unsigned char *ptr, size_t size)
     {
       size_t i;
       size_t c;
       unsigned int width=0x10;

       fprintf(stream, "%s, %10.10ld bytes (0x%8.8lx)\n",
               text, (long)size, (long)size);

       for(i=0; i<size; i+= width) {
         fprintf(stream, "%4.4lx: ", (long)i);

         /* show hex to the left */
         for(c = 0; c < width; c++) {
           if(i+c < size)
             fprintf(stream, "%02x ", ptr[i+c]);
           else
             fputs("   ", stream);
         }

         /* show data on the right */
         for(c = 0; (c < width) && (i+c < size); c++) {
           char x = (ptr[i+c] >= 0x20 && ptr[i+c] < 0x80) ? ptr[i+c] : '.';
           fputc(x, stream);
         }

         fputc('\n', stream); /* newline */
       }

libcurl 7.58.0    Last change: October 06, 2016                 2


CURLOPT_DEBUGFUNCTION(3curl_easy_setopt optionCURLOPT_DEBUGFUNCTION(3)


     }

     static
     int my_trace(CURL *handle, curl_infotype type,
                  char *data, size_t size,
                  void *userp)
     {
       const char *text;
       (void)handle; /* prevent compiler warning */
       (void)userp;

       switch (type) {
       case CURLINFO_TEXT:
         fprintf(stderr, "== Info: %s", data);
       default: /* in case a new one is introduced to shock us */
         return 0;

       case CURLINFO_HEADER_OUT:
         text = "=> Send header";
         break;
       case CURLINFO_DATA_OUT:
         text = "=> Send data";
         break;
       case CURLINFO_SSL_DATA_OUT:
         text = "=> Send SSL data";
         break;
       case CURLINFO_HEADER_IN:
         text = "<= Recv header";
         break;
       case CURLINFO_DATA_IN:
         text = "<= Recv data";
         break;
       case CURLINFO_SSL_DATA_IN:
         text = "<= Recv SSL data";
         break;
       }

       dump(text, stderr, (unsigned char *)data, size);
       return 0;
     }

     int main(void)
     {
       CURL *curl;
       CURLcode res;

       curl = curl_easy_init();
       if(curl) {
         curl_easy_setopt(curl, CURLOPT_DEBUGFUNCTION, my_trace);

         /* the DEBUGFUNCTION has no effect until we enable VERBOSE */
         curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);

libcurl 7.58.0    Last change: October 06, 2016                 3


CURLOPT_DEBUGFUNCTION(3curl_easy_setopt optionCURLOPT_DEBUGFUNCTION(3)


         /* example.com is redirected, so we tell libcurl to follow redirection */
         curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);

         curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/");
         res = curl_easy_perform(curl);
         /* Check for errors */
         if(res != CURLE_OK)
           fprintf(stderr, "curl_easy_perform() failed: %s\n",
                   curl_easy_strerror(res));

         /* always cleanup */
         curl_easy_cleanup(curl);
       }
       return 0;
     }


AVAILABILITY

     Always


RETURN VALUE

     Returns CURLE_OK


SEE ALSO

     CURLOPT_VERBOSE(3), CURLOPT_DEBUGDATA(3),

libcurl 7.58.0    Last change: October 06, 2016                 4


Man(1) output converted with man2html