File: basiccurl.cpp

package info (click to toggle)
mapnik 2.0.0%2Bds1-3
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 35,496 kB
  • sloc: cpp: 91,793; python: 6,051; xml: 3,528; sh: 848; makefile: 70; lisp: 10
file content (45 lines) | stat: -rwxr-xr-x 1,083 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include "basiccurl.h"

CURL_LOAD_DATA *grab_http_response(const char *url)
{
  CURL_LOAD_DATA *data;

  CURL *curl =  curl_easy_init(); 

  if(curl)
  {
    data = do_grab(curl,url);
    curl_easy_cleanup(curl);
    return data;
  }
  return NULL;
}

CURL_LOAD_DATA *do_grab(CURL *curl,const char *url)
{
  CURLcode res;
  CURL_LOAD_DATA *data = (CURL_LOAD_DATA *)malloc(sizeof(CURL_LOAD_DATA));
  data->data = NULL;
  data->nbytes = 0;
  
  curl_easy_setopt(curl,CURLOPT_URL,url);
  curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,response_callback);
  curl_easy_setopt(curl,CURLOPT_WRITEDATA,data);

  res=curl_easy_perform(curl);

  return data;
}

size_t response_callback(void *ptr,size_t size,size_t nmemb, void *d)
{
  size_t rsize=size*nmemb;
  CURL_LOAD_DATA *data=(CURL_LOAD_DATA *)d;
//  fprintf(stderr,"rsize is %d\n", rsize);
  data->data=(char *)realloc(data->data,(data->nbytes+rsize)
                    *sizeof(char));
  memcpy(&(data->data[data->nbytes]),ptr,rsize);
  data->nbytes += rsize;
//  fprintf(stderr,"data->nbytes is %d\n", data->nbytes);
  return rsize;
}