Google backend: use libcurl, parse runtimes
[cinaest] / src / backends / google / curl-wrapper.vala
1 public class CurlWrapper : Object {
2         private Curl.EasyHandle curl;
3         private string url = null;
4         private SourceFunc callback = null;
5         private StringBuilder result;
6
7         construct {
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);
12         }
13
14         static construct {
15                 Curl.global_init (Curl.GLOBAL_DEFAULT);
16         }
17
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);
25
26                 if (callback != null)
27                         Idle.add (callback);
28                 callback = null;
29
30                 return null;
31         }
32
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));
36
37                 return size * nmemb;
38         }
39
40         public async unowned string http_get (string _url) {
41                 url = _url;
42                 callback = http_get.callback;
43                 result = new StringBuilder ();
44                 try {
45                         Thread.create(download_thread, false);
46                 } catch (ThreadError e) {
47                         critical ("Failed to create download thread\n");
48                         return "";
49                 }
50
51                 yield;
52
53                 return result.str;
54         }
55 }