1//
2// Copyright (C) 2012 The Android Open Source Project
3//
4// Licensed under the Apache License, Version 2.0 (the "License");
5// you may not use this file except in compliance with the License.
6// You may obtain a copy of the License at
7//
8//      http://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13// See the License for the specific language governing permissions and
14// limitations under the License.
15//
16
17#ifndef SHILL_DEFAULT_PROFILE_H_
18#define SHILL_DEFAULT_PROFILE_H_
19
20#include <random>
21#include <string>
22#include <vector>
23
24#include <gtest/gtest_prod.h>  // for FRIEND_TEST
25
26#include "shill/event_dispatcher.h"
27#include "shill/manager.h"
28#include "shill/profile.h"
29#include "shill/property_store.h"
30#include "shill/refptr_types.h"
31
32namespace shill {
33
34class ControlInterface;
35#if !defined(DISABLE_WIFI)
36class WiFiProvider;
37#endif  // DISABLE_WIFI
38
39class DefaultProfile : public Profile {
40 public:
41  static const char kDefaultId[];
42
43  DefaultProfile(ControlInterface* control,
44                 Metrics* metrics,
45                 Manager* manager,
46                 const base::FilePath& storage_directory,
47                 const std::string& profile_id,
48                 const Manager::Properties& manager_props);
49  ~DefaultProfile() override;
50
51  // Loads global configuration into manager properties.  This should
52  // only be called by the Manager.
53  virtual void LoadManagerProperties(Manager::Properties* manager_props,
54                                     DhcpProperties* dhcp_properties);
55
56  // Override the Profile superclass implementation to accept all Ethernet
57  // services, since these should have an affinity for the default profile.
58  bool ConfigureService(const ServiceRefPtr& service) override;
59
60  // Persists profile information, as well as that of discovered devices
61  // and bound services, to disk.
62  // Returns true on success, false on failure.
63  bool Save() override;
64
65  // Inherited from Profile.
66  bool UpdateDevice(const DeviceRefPtr& device) override;
67
68#if !defined(DISABLE_WIFI)
69  // Inherited from Profile.
70  bool UpdateWiFiProvider(const WiFiProvider& wifi_provider) override;
71#endif  // DISABLE_WIFI
72
73  bool IsDefault() const override { return true; }
74
75 private:
76  friend class DefaultProfileTest;
77  FRIEND_TEST(DefaultProfileTest, GetStoragePath);
78  FRIEND_TEST(DefaultProfileTest, LoadManagerDefaultProperties);
79  FRIEND_TEST(DefaultProfileTest, LoadManagerProperties);
80  FRIEND_TEST(DefaultProfileTest, Save);
81
82  static const char kStorageId[];
83  static const char kStorageArpGateway[];
84  static const char kStorageCheckPortalList[];
85  static const char kStorageConnectionIdSalt[];
86  static const char kStorageHostName[];
87  static const char kStorageIgnoredDNSSearchPaths[];
88  static const char kStorageLinkMonitorTechnologies[];
89  static const char kStorageName[];
90  static const char kStorageNoAutoConnectTechnologies[];
91  static const char kStorageOfflineMode[];
92  static const char kStoragePortalCheckInterval[];
93  static const char kStoragePortalURL[];
94  static const char kStorageProhibitedTechnologies[];
95
96  const std::string profile_id_;
97  const Manager::Properties& props_;
98  std::default_random_engine random_engine_;
99
100  DISALLOW_COPY_AND_ASSIGN(DefaultProfile);
101};
102
103}  // namespace shill
104
105#endif  // SHILL_DEFAULT_PROFILE_H_
106