Diff of /trunk/src/wms.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 3 by achadwick, Wed Dec 10 00:00:05 2008 UTC revision 4 by harbaum, Wed Dec 10 19:50:17 2008 UTC
# Line 19  Line 19 
19    
20  #include "appdata.h"  #include "appdata.h"
21    
 #include <curl/curl.h>  
 #include <curl/types.h> /* new for v7 */  
 #include <curl/easy.h> /* new for v7 */  
   
22  #include <libxml/parser.h>  #include <libxml/parser.h>
23  #include <libxml/tree.h>  #include <libxml/tree.h>
24    
# Line 76  typedef struct { Line 72  typedef struct {
72    wms_cap_t *cap;    wms_cap_t *cap;
73  } wms_t;  } wms_t;
74    
 typedef struct {  
   char *ptr;  
   int len;  
 } curl_data_t;  
   
 static size_t write_callback(void *ptr, size_t size, size_t nmemb,  
                              void *stream) {  
   curl_data_t *p = (curl_data_t*)stream;  
   
   p->ptr = g_realloc(p->ptr, p->len + size*nmemb + 1);  
   if(p->ptr) {  
     memcpy(p->ptr+p->len, ptr, size*nmemb);  
     p->len += size*nmemb;  
     p->ptr[p->len] = 0;  
   }  
   return nmemb;  
 }  
   
 static char *wms_download(char *url, char *filename) {  
   CURL *curl;  
   CURLcode res;  
   char buffer[CURL_ERROR_SIZE];  
   curl_data_t write_data;  
   FILE *write_file = NULL;  
   
   if(filename) {  
     write_file = fopen(filename, "w");  
   } else {  
     write_data.ptr = NULL;  
     write_data.len = 0;  
   }  
   
   printf("download of \"%s\"\n", url);  
   
   curl = curl_easy_init();  
   if(curl) {  
     curl_easy_setopt(curl, CURLOPT_URL, url);  
     curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, buffer);  
   
     if(filename) {  
       curl_easy_setopt(curl, CURLOPT_WRITEDATA, write_file);  
       curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, fwrite);  
     } else {  
       curl_easy_setopt(curl, CURLOPT_WRITEDATA, &write_data);  
       curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback);  
     }  
   
     res = curl_easy_perform(curl);  
   
     long response;  
     curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response);  
   
     curl_easy_cleanup(curl);  
   
     if(filename) {  
       /* just a flag that everything went well */  
       write_data.ptr = (char*)TRUE;  
       fclose(write_file);  
     }  
   
     /* erase reply buffer/file if there was an error */  
     if((res != 0) || (response != 200)) {  
       if(filename)  
         g_remove(filename);  
       else  
         g_free(write_data.ptr);  
   
       write_data.ptr = NULL;  
     }  
   }  
   
   return write_data.ptr;  
 }  
   
75  gboolean xmlTextIs(xmlDocPtr doc, xmlNodePtr list, char *str) {  gboolean xmlTextIs(xmlDocPtr doc, xmlNodePtr list, char *str) {
76    char *nstr = (char*)xmlNodeListGetString(doc, list, 1);    char *nstr = (char*)xmlNodeListGetString(doc, list, 1);
77    if(!nstr) return FALSE;    if(!nstr) return FALSE;
# Line 826  void wms_import(appdata_t *appdata) { Line 748  void wms_import(appdata_t *appdata) {
748                                "&REQUEST=GetCapabilities",                                "&REQUEST=GetCapabilities",
749                                wms->server, wms->path, append_char);                                wms->server, wms->path, append_char);
750    
751    char *cap = wms_download(url, NULL);    char *cap = net_io_download_mem(GTK_WIDGET(appdata->window), url);
752    g_free(url);    g_free(url);
753    
754    /* ----------- parse capabilities -------------- */    /* ----------- parse capabilities -------------- */
# Line 961  void wms_import(appdata_t *appdata) { Line 883  void wms_import(appdata_t *appdata) {
883    /* remove any existing image before */    /* remove any existing image before */
884    wms_remove(appdata);    wms_remove(appdata);
885    
886    if(!wms_download(url, filename)) {    if(!net_io_download_file(GTK_WIDGET(appdata->window), url, filename)) {
887      g_free(filename);      g_free(filename);
888      g_free(url);      g_free(url);
889      wms_free(wms);      wms_free(wms);

Legend:
Removed from v.3  
changed lines
  Added in v.4