source: subversion/applications/utils/export/osmgarminmap/curlstuff.cpp @ 28719

Last change on this file since 28719 was 1800, checked in by nick, 13 years ago

Started osm2garmin -- automated utility to transfer live OSM data to Garmin GPS

File size: 1.8 KB
Line 
1#include "curlstuff.h"
2#include <stdlib.h>
3#include <string.h>
4
5CURL_LOAD_DATA  *grab_osm(const char *urlbase,
6                                        double west,double south,double east,double north,
7                                        const char* username,const char* password)
8{
9        char url[1024];
10        sprintf(url,"%s?bbox=%lf,%lf,%lf,%lf",
11                                        urlbase,west,south,east,north);
12        return grab_http_response(url,username,password);
13}
14                       
15CURL_LOAD_DATA *grab_http_response(const char *url,
16            const char *username,const char *password)
17{
18        CURL_LOAD_DATA *data;
19    CURL *curl =  curl_easy_init();
20        fprintf(stderr, "grab_http_response(): URL=%s\n",url);
21       
22
23    if(curl)
24        {
25                data = Do(curl,url,username,password);
26                curl_easy_cleanup(curl);
27                return data;
28        }
29        return NULL;
30}
31                                                                       
32CURL_LOAD_DATA *Do(CURL *curl,const char *url,
33                                        const char* username,const char* password)
34{
35     char uname_pwd[1024];
36      CURLcode res;
37     CURL_LOAD_DATA *data = (CURL_LOAD_DATA *)malloc(sizeof(CURL_LOAD_DATA));
38     data->data = NULL;
39     data->nbytes = 0;
40       
41     if(username && password)
42     {
43           sprintf(uname_pwd,"%s:%s",username,password);
44           curl_easy_setopt(curl,CURLOPT_USERPWD,uname_pwd);
45     }
46       
47        curl_easy_setopt(curl,CURLOPT_URL,url);
48        curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,response_callback);
49        curl_easy_setopt(curl,CURLOPT_WRITEDATA,data);
50        res=curl_easy_perform(curl);
51        fprintf(stderr,"Got data.\n");
52        return data;
53}
54
55size_t response_callback(void *ptr,size_t size,size_t nmemb, void *d)
56{
57        size_t rsize=size*nmemb;
58        CURL_LOAD_DATA *data=(CURL_LOAD_DATA *)d;
59        data->data=(char *)realloc(data->data,(data->nbytes+rsize)
60                                                          *sizeof(char));
61        memcpy(&(data->data[data->nbytes]),ptr,rsize);
62        data->nbytes += rsize;
63        return rsize;
64}
Note: See TracBrowser for help on using the repository browser.