blob: 72189c074403f7b17da37432cc43d50d50d45986 [file] [log] [blame]
Vitaly Buka7b6b3f02015-06-09 15:50:20 -07001// Copyright 2014 The Chromium OS Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef BUFFET_PRIVET_PRIVET_MANAGER_H_
6#define BUFFET_PRIVET_PRIVET_MANAGER_H_
7
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 Buka7b6b3f02015-06-09 15:50:20 -070015
16#include "buffet/privet/cloud_delegate.h"
17
Vitaly Bukaae96cc32015-06-09 17:22:18 -070018namespace buffet {
19class CommandManager;
20class DeviceRegistrationInfo;
Vitaly Buka7ab89ff2015-06-09 22:11:40 -070021class StateManager;
Vitaly Bukaae96cc32015-06-09 17:22:18 -070022}
23
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070024namespace chromeos {
25namespace dbus_utils {
26class AsyncEventSequencer;
27}
28}
29
30namespace libwebserv {
31class ProtocolHandler;
32class Request;
33class Response;
34class Server;
35}
36
37namespace privetd {
38
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070039class ApManagerClient;
Vitaly Bukaae96cc32015-06-09 17:22:18 -070040class CloudDelegate;
41class DaemonState;
42class DeviceDelegate;
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070043class PeerdClient;
44class PrivetHandler;
Vitaly Bukaae96cc32015-06-09 17:22:18 -070045class SecurityManager;
46class ShillClient;
47class WifiBootstrapManager;
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070048
Vitaly Bukaae96cc32015-06-09 17:22:18 -070049class Manager : public CloudDelegate::Observer {
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070050 public:
Vitaly Bukaae96cc32015-06-09 17:22:18 -070051 struct Options {
52 bool disable_privet{false};
53 bool disable_security{false};
54 bool enable_ping{false};
55 std::set<std::string> device_whitelist;
Vitaly Buka3d2cd662015-06-16 16:23:03 -070056 base::FilePath config_path;
Vitaly Bukaae96cc32015-06-09 17:22:18 -070057 };
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070058
Vitaly Bukaae96cc32015-06-09 17:22:18 -070059 Manager();
60 ~Manager();
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070061
Vitaly Bukaae96cc32015-06-09 17:22:18 -070062 void Start(const Options& options,
63 const scoped_refptr<dbus::Bus>& bus,
Vitaly Buka7ab89ff2015-06-09 22:11:40 -070064 buffet::DeviceRegistrationInfo* device,
65 buffet::CommandManager* command_manager,
66 buffet::StateManager* state_manager,
Vitaly Bukaae96cc32015-06-09 17:22:18 -070067 chromeos::dbus_utils::AsyncEventSequencer* sequencer);
68
69 void OnShutdown();
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070070
71 void OnDeviceInfoChanged() override;
72
Vitaly Bukaae96cc32015-06-09 17:22:18 -070073 privetd::WifiBootstrapManager* GetWifiBootstrapManager() {
74 return wifi_bootstrap_manager_.get();
75 }
76
77 privetd::SecurityManager* GetSecurityManager() { return security_.get(); }
78
Vitaly Buka7b6b3f02015-06-09 15:50:20 -070079 private:
80 void PrivetRequestHandler(std::unique_ptr<libwebserv::Request> request,
81 std::unique_ptr<libwebserv::Response> response);
82
83 void PrivetResponseHandler(std::unique_ptr<libwebserv::Response> response,
84 int status,
85 const base::DictionaryValue& output);
86
87 void HelloWorldHandler(std::unique_ptr<libwebserv::Request> request,
88 std::unique_ptr<libwebserv::Response> response);
89
90 void OnChanged();
91
92 void OnConnectivityChanged(bool online);
93
94 void OnProtocolHandlerConnected(
95 libwebserv::ProtocolHandler* protocol_handler);
96
97 void OnProtocolHandlerDisconnected(
98 libwebserv::ProtocolHandler* protocol_handler);
99
Vitaly Bukaae96cc32015-06-09 17:22:18 -0700100 bool disable_security_{false};
Vitaly Buka7b6b3f02015-06-09 15:50:20 -0700101 std::unique_ptr<CloudDelegate> cloud_;
102 std::unique_ptr<DeviceDelegate> device_;
103 std::unique_ptr<SecurityManager> security_;
104 std::unique_ptr<ShillClient> shill_client_;
105 std::unique_ptr<ApManagerClient> ap_manager_client_;
106 std::unique_ptr<WifiBootstrapManager> wifi_bootstrap_manager_;
107 std::unique_ptr<PeerdClient> peerd_client_;
108 std::unique_ptr<PrivetHandler> privet_handler_;
109 std::unique_ptr<libwebserv::Server> web_server_;
110
111 ScopedObserver<CloudDelegate, CloudDelegate::Observer> cloud_observer_{this};
112
113 base::WeakPtrFactory<Manager> weak_ptr_factory_{this};
114 DISALLOW_COPY_AND_ASSIGN(Manager);
115};
116
117} // namespace privetd
118
119#endif // BUFFET_PRIVET_PRIVET_MANAGER_H_