blob: 371d843e3646b5dbfc888eaa981f2c3b48d95ecc [file] [log] [blame]
Vitaly Buka4615e0d2015-10-14 15:35:12 -07001// Copyright 2015 The Weave Authors. All rights reserved.
Vitaly Buka7b6b3f02015-06-09 15:50:20 -07002// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
Vitaly Buka912b6982015-07-06 11:13:03 -07005#ifndef LIBWEAVE_SRC_PRIVET_PRIVET_MANAGER_H_
6#define LIBWEAVE_SRC_PRIVET_PRIVET_MANAGER_H_
Vitaly Buka7b6b3f02015-06-09 15:50:20 -07007
8#include <memory>
9#include <set>
10#include <string>
11#include <vector>
12
13#include <base/memory/weak_ptr.h>
14#include <base/scoped_observer.h>
Vitaly Buka7b382ac2015-08-03 13:50:01 -070015#include <weave/device.h>
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070016
Stefan Sauer2d16dfa2015-09-25 17:08:35 +020017#include "src/privet/cloud_delegate.h"
18#include "src/privet/security_manager.h"
19#include "src/privet/wifi_bootstrap_manager.h"
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070020
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070021namespace libwebserv {
22class ProtocolHandler;
23class Request;
24class Response;
25class Server;
26}
27
Vitaly Bukab6f015a2015-07-09 14:59:23 -070028namespace weave {
29
Alex Vakulenkod91d6252015-12-05 17:14:39 -080030class ComponentManager;
Vitaly Bukab6f015a2015-07-09 14:59:23 -070031class DeviceRegistrationInfo;
Vitaly Buka1e363672015-09-25 14:01:16 -070032class DnsServiceDiscovery;
33class Network;
Vitaly Bukab6f015a2015-07-09 14:59:23 -070034
35namespace privet {
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070036
Vitaly Bukaae96cc32015-06-09 17:22:18 -070037class CloudDelegate;
38class DaemonState;
39class DeviceDelegate;
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070040class PrivetHandler;
Vitaly Buka0bd32132015-07-30 15:54:48 -070041class Publisher;
Vitaly Bukaae96cc32015-06-09 17:22:18 -070042class SecurityManager;
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070043
Vitaly Bukae6073612015-10-01 17:58:52 -070044class Manager : public CloudDelegate::Observer {
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070045 public:
Vitaly Buka5fe76092015-10-08 13:37:53 -070046 explicit Manager(provider::TaskRunner* task_runner);
Vitaly Buka8b4ab962015-07-14 19:19:39 -070047 ~Manager() override;
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070048
Vitaly Buka5fe76092015-10-08 13:37:53 -070049 void Start(provider::Network* network,
Vitaly Buka1e363672015-09-25 14:01:16 -070050 provider::DnsServiceDiscovery* dns_sd,
51 provider::HttpServer* http_server,
52 provider::Wifi* wifi,
Vitaly Buka3d851b42015-12-08 16:17:01 -080053 AuthManager* auth_manager,
Vitaly Bukab6f015a2015-07-09 14:59:23 -070054 DeviceRegistrationInfo* device,
Alex Vakulenkod91d6252015-12-05 17:14:39 -080055 ComponentManager* component_manager);
Vitaly Bukaae96cc32015-06-09 17:22:18 -070056
Vitaly Buka0fa51e52015-07-10 00:12:25 -070057 std::string GetCurrentlyConnectedSsid() const;
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070058
Vitaly Buka0fa51e52015-07-10 00:12:25 -070059 void AddOnPairingChangedCallbacks(
Vitaly Bukae6073612015-10-01 17:58:52 -070060 const Device::PairingBeginCallback& begin_callback,
61 const Device::PairingEndCallback& end_callback);
Vitaly Bukaae96cc32015-06-09 17:22:18 -070062
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070063 private:
Vitaly Buka0fa51e52015-07-10 00:12:25 -070064 // CloudDelegate::Observer
65 void OnDeviceInfoChanged() override;
66
Vitaly Buka1e363672015-09-25 14:01:16 -070067 void PrivetRequestHandler(
Vitaly Buka5fe76092015-10-08 13:37:53 -070068 std::unique_ptr<provider::HttpServer::Request> request);
69
70 void PrivetRequestHandlerWithData(
71 const std::shared_ptr<provider::HttpServer::Request>& request,
72 const std::string& data);
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070073
Vitaly Buka1e363672015-09-25 14:01:16 -070074 void PrivetResponseHandler(
Vitaly Buka5fe76092015-10-08 13:37:53 -070075 const std::shared_ptr<provider::HttpServer::Request>& request,
Vitaly Buka1e363672015-09-25 14:01:16 -070076 int status,
77 const base::DictionaryValue& output);
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070078
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070079 void OnChanged();
Vitaly Bukabf6840a2015-09-21 13:38:56 -070080 void OnConnectivityChanged();
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070081
Vitaly Bukaae96cc32015-06-09 17:22:18 -070082 bool disable_security_{false};
Vitaly Buka5fe76092015-10-08 13:37:53 -070083 provider::TaskRunner* task_runner_{nullptr};
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070084 std::unique_ptr<CloudDelegate> cloud_;
85 std::unique_ptr<DeviceDelegate> device_;
86 std::unique_ptr<SecurityManager> security_;
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070087 std::unique_ptr<WifiBootstrapManager> wifi_bootstrap_manager_;
Vitaly Buka0bd32132015-07-30 15:54:48 -070088 std::unique_ptr<Publisher> publisher_;
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070089 std::unique_ptr<PrivetHandler> privet_handler_;
Vitaly Buka95d0e452015-08-01 00:17:09 -070090
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070091 ScopedObserver<CloudDelegate, CloudDelegate::Observer> cloud_observer_{this};
92
93 base::WeakPtrFactory<Manager> weak_ptr_factory_{this};
94 DISALLOW_COPY_AND_ASSIGN(Manager);
95};
96
Vitaly Bukab6f015a2015-07-09 14:59:23 -070097} // namespace privet
98} // namespace weave
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070099
Vitaly Buka912b6982015-07-06 11:13:03 -0700100#endif // LIBWEAVE_SRC_PRIVET_PRIVET_MANAGER_H_