blob: 8c5ccac830171d76006aed620acacbd223226443 [file] [log] [blame]
Vitaly Buka4615e0d2015-10-14 15:35:12 -07001// Copyright 2015 The Weave Authors. All rights reserved.
Vitaly Buka17b0a8a2015-08-31 19:12:35 -07002// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
Johan Euphrosine3523fdd2015-10-14 20:46:05 -07005#ifndef LIBWEAVE_EXAMPLES_PROVIDER_CURL_HTTP_CLIENT_H_
6#define LIBWEAVE_EXAMPLES_PROVIDER_CURL_HTTP_CLIENT_H_
Vitaly Buka17b0a8a2015-08-31 19:12:35 -07007
Vitaly Bukaa627e122015-11-06 14:55:53 -08008#include <future>
Vitaly Buka17b0a8a2015-08-31 19:12:35 -07009#include <string>
Vitaly Bukaa627e122015-11-06 14:55:53 -080010#include <utility>
Vitaly Buka17b0a8a2015-08-31 19:12:35 -070011
12#include <base/memory/weak_ptr.h>
Vitaly Buka1e363672015-09-25 14:01:16 -070013#include <weave/provider/http_client.h>
Vitaly Buka17b0a8a2015-08-31 19:12:35 -070014
15namespace weave {
16
Vitaly Buka1e363672015-09-25 14:01:16 -070017namespace provider {
Vitaly Buka17b0a8a2015-08-31 19:12:35 -070018class TaskRunner;
Vitaly Buka1e363672015-09-25 14:01:16 -070019}
Vitaly Buka17b0a8a2015-08-31 19:12:35 -070020
21namespace examples {
22
23// Basic implementation of weave::HttpClient using libcurl. Should be used in
24// production code as it's blocking and does not validate server certificates.
Vitaly Buka1e363672015-09-25 14:01:16 -070025class CurlHttpClient : public provider::HttpClient {
Vitaly Buka17b0a8a2015-08-31 19:12:35 -070026 public:
Vitaly Buka1e363672015-09-25 14:01:16 -070027 explicit CurlHttpClient(provider::TaskRunner* task_runner);
Vitaly Buka17b0a8a2015-08-31 19:12:35 -070028
Vitaly Buka1a42e142015-10-10 18:15:15 -070029 void SendRequest(Method method,
Vitaly Buka866b60a2015-10-09 14:24:55 -070030 const std::string& url,
31 const Headers& headers,
32 const std::string& data,
Vitaly Buka74763422015-10-11 00:39:52 -070033 const SendRequestCallback& callback) override;
Vitaly Buka17b0a8a2015-08-31 19:12:35 -070034
35 private:
Vitaly Bukaa627e122015-11-06 14:55:53 -080036 void CheckTasks();
37
38 std::vector<
39 std::pair<std::future<std::pair<std::unique_ptr<Response>, ErrorPtr>>,
Vitaly Buka34668e72015-12-15 14:46:47 -080040 SendRequestCallback>>
41 pending_tasks_;
Vitaly Buka1e363672015-09-25 14:01:16 -070042 provider::TaskRunner* task_runner_{nullptr};
Vitaly Buka17b0a8a2015-08-31 19:12:35 -070043
44 base::WeakPtrFactory<CurlHttpClient> weak_ptr_factory_{this};
45};
46
47} // namespace examples
48} // namespace weave
49
Johan Euphrosine3523fdd2015-10-14 20:46:05 -070050#endif // LIBWEAVE_EXAMPLES_PROVIDER_CURL_HTTP_CLIENT_H_