HttpClient.vala 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. using Pprf.Messages;
  2. using Invercargill;
  3. namespace Pprf {
  4. public class HttpPprfClient : Client {
  5. public string endpoint { get; set; }
  6. public const string HTTP_CONTENT_TYPE = "application/pprf";
  7. private Soup.Session session;
  8. public HttpPprfClient(string endpoint) {
  9. this.endpoint = endpoint;
  10. session = new Soup.Session();
  11. session.idle_timeout = 30;
  12. }
  13. public override Message send_message(Message message) throws Error {
  14. var soup_message = new Soup.Message("POST", endpoint);
  15. var message_data = new MemoryOutputStream (null, GLib.realloc, GLib.free);
  16. var data_stream = new DataOutputStream(message_data);
  17. message.serialise(data_stream);
  18. data_stream.flush();
  19. data_stream.close();
  20. var raw_data = message_data.steal_as_bytes();
  21. soup_message.set_request_body_from_bytes(HTTP_CONTENT_TYPE, raw_data);
  22. var response_stream = session.send(soup_message);
  23. return MessageFactory.from_stream(response_stream);
  24. }
  25. }
  26. }