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