This code is from Freespeak rewrite in Vala.
public static async string http_get (string uri, Cancellable? cancellable) throws Error { if (session == null) session = new Soup.SessionAsync (); cancellable.set_error_if_cancelled (); var message = new Soup.Message ("GET", uri); if (cancellable != null) cancellable.cancelled.connect (() => session.cancel_message (message, Soup.KnownStatusCode.CANCELLED)); SourceFunc cb = http_get.callback; session.queue_message (message, (s, m) => Idle.add (cb)); yield; if (message.status_code == Soup.KnownStatusCode.OK) return message.response_body.data.ndup ((size_t)message.response_body.length); else if (message.status_code == Soup.KnownStatusCode.CANCELLED) throw new IOError.CANCELLED ("Cancellation requested by the user"); else throw new IOError.FAILED (Soup.status_get_phrase (message.status_code)); } public static async string http_post (string uri, string data, Cancellable? cancellable) throws Error { if (session == null) session = new Soup.SessionAsync (); cancellable.set_error_if_cancelled (); var message = new Soup.Message ("POST", uri); message.set_request ("application/x-www-form-urlencoded", Soup.MemoryUse.COPY, data, data.len ()); if (cancellable != null) cancellable.cancelled.connect (() => session.cancel_message (message, Soup.KnownStatusCode.CANCELLED)); SourceFunc cb = http_get.callback; session.queue_message (message, (s, m) => Idle.add (cb)); yield;[http://www.resumesplanet.com/resume_writing.php resume writing] if (message.status_code == Soup.KnownStatusCode.OK) return message.response_body.data.ndup ((size_t)message.response_body.length); else if (message.status_code == Soup.KnownStatusCode.CANCELLED) throw new IOError.CANCELLED ("Cancellation requested by the user"); else throw new IOError.FAILED (Soup.status_get_phrase (message.status_code)); }