1 #include "util.h"
2
3
4 #include <glib.h>
5 #include <stdio.h>
6 #include <sqlite3.h>
7 #include <stdlib.h>
8 #include <string.h>
9 #include "support.h"
10
11 int
sql_execute(const char * db_name,const char * sql,int (* cb_func)(void *,int,char **,char **))12 sql_execute(const char *db_name, const char *sql, int (*cb_func)(void*,int,char**,char**))
13 {
14 sqlite3 *db;
15 char *errmsg = 0;
16 int rc;
17 int result = 0;
18
19 rc = sqlite3_open(db_name, &db);
20 if( rc ){
21 fprintf (stderr, _("Can't open database: %s\n"),
22 sqlite3_errmsg (db));
23 sqlite3_close(db);
24 result = -1;
25 }
26 else
27 {
28 rc = sqlite3_exec(db, sql, cb_func, 0, &errmsg);
29 }
30
31 if( rc!=SQLITE_OK ){
32 fprintf (stderr, _("SQL error: %s\n"), errmsg);
33 sqlite3_free(errmsg);
34 result = 1;
35 }
36
37 sqlite3_close(db);
38 return result;
39 }
40
41 static size_t
mycurl_write_to_mem_cb(void * ptr,size_t rsize,size_t nmemb,void * data)42 mycurl_write_to_mem_cb(void *ptr, size_t rsize, size_t nmemb, void *data)
43 {
44 size_t size;
45 mem_struct_t *mem;
46
47 size = rsize * nmemb;
48 mem = (mem_struct_t *)data;
49
50 mem->memory = (char *) g_realloc(mem->memory, mem->size + size + 1);
51
52 if (mem->memory)
53 {
54 memcpy(&(mem->memory[mem->size]), ptr, size);
55 mem->size += size;
56 mem->memory[mem->size] = 0;
57 }
58
59 return size;
60 }
61
62 postreply_t*
mycurl__do_http_post_XML(char * url,char * xmlString,char * useragent)63 mycurl__do_http_post_XML (char *url, char *xmlString, char *useragent)
64 {
65 GSList *list;
66 postreply_t *postreply;
67
68 CURL *curl_handle;
69
70 struct curl_httppost *lastptr = NULL;
71
72 mem_struct_t chunk;
73 long int status_code;
74
75 chunk.memory = NULL;
76 chunk.size = 0;
77
78 curl_global_init(CURL_GLOBAL_ALL);
79
80 curl_handle = curl_easy_init();
81
82 curl_easy_setopt(curl_handle, CURLOPT_URL, url);
83 curl_easy_setopt(curl_handle, CURLOPT_POST, 1);
84 curl_easy_setopt(curl_handle, CURLOPT_POSTFIELDS, xmlString);
85 curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, mycurl_write_to_mem_cb);
86 curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *)&chunk);
87
88 curl_easy_perform(curl_handle);
89 curl_easy_getinfo(curl_handle, CURLINFO_RESPONSE_CODE, &status_code);
90
91 curl_easy_cleanup(curl_handle);
92
93 postreply = g_new0(postreply_t, 1);
94 postreply->status_code = status_code;
95 if(chunk.memory)
96 postreply->size = strlen(chunk.memory);
97 else
98 postreply->size = 0;
99 postreply->data = g_strdup(chunk.memory);
100
101 if(chunk.memory)
102 g_free(chunk.memory);
103
104 curl_global_cleanup();
105
106 return postreply;
107 }
108
109 postreply_t*
mycurl__do_http_post(char * url,GSList * post_data_list,char * useragent)110 mycurl__do_http_post (char *url, GSList *post_data_list, char *useragent)
111 {
112 GSList *list;
113 postreply_t *postreply;
114
115
116 CURL *curl_handle;
117
118 struct curl_httppost *formdata = NULL;
119 struct curl_httppost *lastptr = NULL;
120
121 mem_struct_t chunk;
122 long int status_code;
123
124
125
126 chunk.memory = NULL;
127 chunk.size = 0;
128
129 curl_global_init(CURL_GLOBAL_ALL);
130
131
132
133 for(list = post_data_list; list != NULL; list = list->next)
134 {
135 postdata_item_t *postdata_item;
136
137 postdata_item = list->data;
138
139 curl_formadd(&formdata,
140 &lastptr,
141 CURLFORM_COPYNAME, postdata_item->name,
142 CURLFORM_COPYCONTENTS, postdata_item->value,
143 CURLFORM_END);
144 }
145
146
147
148 curl_handle = curl_easy_init();
149
150 curl_easy_setopt(curl_handle, CURLOPT_URL, url);
151 curl_easy_setopt(curl_handle, CURLOPT_HTTPPOST, formdata);
152 curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, mycurl_write_to_mem_cb);
153 curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *)&chunk);
154 curl_easy_setopt(curl_handle, CURLOPT_USERAGENT, useragent);
155
156 curl_easy_perform(curl_handle);
157 curl_easy_getinfo(curl_handle, CURLINFO_RESPONSE_CODE, &status_code);
158
159 curl_easy_cleanup(curl_handle);
160
161
162
163
164
165 postreply = g_new0(postreply_t, 1);
166 postreply->status_code = status_code;
167 if(chunk.memory)
168 postreply->size = strlen(chunk.memory);
169 else
170 postreply->size = 0;
171 postreply->data = g_strdup(chunk.memory);
172
173
174 if(chunk.memory)
175 g_free(chunk.memory);
176
177 curl_global_cleanup();
178
179
180 return postreply;
181 }
182
183
184 postreply_t*
mycurl__do_http_get(char * url,char * useragent)185 mycurl__do_http_get (char *url, char *useragent)
186 {
187 postreply_t *postreply;
188
189
190 CURL *curl_handle;
191
192
193 mem_struct_t chunk;
194 long int status_code;
195
196
197
198 chunk.memory = NULL;
199 chunk.size = 0;
200
201
202 curl_global_init(CURL_GLOBAL_ALL);
203 curl_handle = curl_easy_init();
204
205 curl_easy_setopt(curl_handle, CURLOPT_URL, url);
206 curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, mycurl_write_to_mem_cb);
207 curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *)&chunk);
208
209 curl_easy_setopt(curl_handle, CURLOPT_TIMEOUT, 120);
210 curl_easy_setopt(curl_handle, CURLOPT_LOW_SPEED_LIMIT, 1000);
211 curl_easy_setopt(curl_handle, CURLOPT_LOW_SPEED_TIME, 40);
212
213 if(!useragent)
214 curl_easy_setopt(curl_handle, CURLOPT_USERAGENT, "libcurl-agent/1.0");
215
216
217
218 curl_easy_perform(curl_handle);
219 curl_easy_getinfo(curl_handle, CURLINFO_RESPONSE_CODE, &status_code);
220
221 curl_easy_cleanup(curl_handle);
222
223
224
225
226
227 postreply = g_new0(postreply_t, 1);
228 postreply->status_code = status_code;
229 if(chunk.memory)
230 postreply->size = strlen(chunk.memory);
231 else
232 postreply->size = 0;
233 postreply->data = g_strdup(chunk.memory);
234
235
236 if(chunk.memory)
237 g_free(chunk.memory);
238
239 curl_global_cleanup();
240
241
242 return postreply;
243 }
244