1 public class CurlWrapper : Object {
2 private Curl.EasyHandle curl;
3 private string url = null;
4 private SourceFunc callback = null;
5 private StringBuilder result;
8 curl = new Curl.EasyHandle ();
9 // FIXME: Fremantle SDK doesn't come with certs
10 curl.setopt (Curl.Option.SSL_VERIFYPEER, 0);
11 // curl.setopt (Curl.Option.VERBOSE, 1);
15 Curl.global_init (Curl.GLOBAL_DEFAULT);
18 private void* download_thread () {
19 curl.setopt (Curl.Option.WRITEFUNCTION, write_callback);
20 curl.setopt (Curl.Option.WRITEDATA, this);
21 curl.setopt (Curl.Option.URL, url);
22 var res = curl.perform ();
23 if (res != Curl.Code.OK)
24 print ("CURL: %d\n", res);
33 [CCode (instance_pos = -1)]
34 private size_t write_callback (void *buffer, size_t size, size_t nmemb) {
35 result.append_len ((string) buffer, (ssize_t) (size * nmemb));
40 public async unowned string http_get (string _url) {
42 callback = http_get.callback;
43 result = new StringBuilder ();
45 Thread.create(download_thread, false);
46 } catch (ThreadError e) {
47 critical ("Failed to create download thread\n");