blob: f7ac195fe8bf8161508f8149d1645a7690d81b6a [file] [log] [blame]
Eric Shienbrood5de44ab2011-12-05 10:46:27 -05001// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
Darin Petkovc90fe522011-07-15 13:59:47 -07002// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef SHILL_PROXY_FACTORY_
6#define SHILL_PROXY_FACTORY_
7
8#include <string>
9
10#include <base/basictypes.h>
Darin Petkovab565bb2011-10-06 02:55:51 -070011#include <base/lazy_instance.h>
Darin Petkovaceede32011-07-18 15:32:38 -070012#include <base/memory/scoped_ptr.h>
Darin Petkovd1967262011-07-18 14:55:18 -070013#include <dbus-c++/dbus.h>
14
15#include "shill/refptr_types.h"
Darin Petkovc90fe522011-07-15 13:59:47 -070016
17namespace shill {
18
David Rochberg24c6c622012-03-05 11:30:44 -050019class DBusObjectManagerProxyInterface;
Darin Petkov5c97ac52011-07-19 16:30:49 -070020class DBusPropertiesProxyInterface;
Darin Petkov18fb2f72012-06-14 09:09:34 +020021class DBusServiceProxyInterface;
Darin Petkovaceede32011-07-18 15:32:38 -070022class DHCPProxyInterface;
Darin Petkovbec79a22011-08-01 14:47:17 -070023class ModemCDMAProxyInterface;
Darin Petkov975b5e72011-08-30 11:48:08 -070024class ModemGSMCardProxyInterface;
Darin Petkova1e0a1c2011-08-25 15:08:33 -070025class ModemGSMNetworkProxyInterface;
David Rochberg81030ea2012-03-02 15:44:25 -050026class ModemManagerClassic;
Darin Petkovc90fe522011-07-15 13:59:47 -070027class ModemManagerProxyInterface;
Darin Petkove9d12e02011-07-27 15:09:37 -070028class ModemProxyInterface;
Darin Petkove604f702011-07-28 15:51:17 -070029class ModemSimpleProxyInterface;
Darin Petkov394b7d42011-11-03 15:48:02 +010030class PowerManagerProxyDelegate;
31class PowerManagerProxyInterface;
mukesh agrawalb20776f2012-02-10 16:00:36 -080032class SupplicantBSSProxyInterface;
Darin Petkovd1967262011-07-18 14:55:18 -070033class SupplicantInterfaceProxyInterface;
34class SupplicantProcessProxyInterface;
Darin Petkov096b3472012-05-15 10:26:22 +020035class WiMaxDeviceProxyInterface;
36class WiMaxManagerProxyInterface;
Darin Petkov9893d9c2012-05-17 15:27:31 -070037class WiMaxNetworkProxyInterface;
Darin Petkovc90fe522011-07-15 13:59:47 -070038
Jason Glasgow9a0be632012-03-30 08:53:35 -040039namespace mm1 {
40
41class ModemModem3gppProxyInterface;
42class ModemModemCdmaProxyInterface;
43class ModemProxyInterface;
44class ModemSimpleProxyInterface;
45class SimProxyInterface;
46
47} // namespace mm1
48
Darin Petkovc90fe522011-07-15 13:59:47 -070049// Global DBus proxy factory that can be mocked out in tests.
50class ProxyFactory {
51 public:
Darin Petkovc90fe522011-07-15 13:59:47 -070052 virtual ~ProxyFactory();
53
Darin Petkovab565bb2011-10-06 02:55:51 -070054 // Since this is a singleton, use ProxyFactory::GetInstance()->Foo()
55 static ProxyFactory *GetInstance();
56
Thieu Lefb46caf2012-03-08 11:57:15 -080057 virtual void Init();
Darin Petkovaceede32011-07-18 15:32:38 -070058
David Rochberg24c6c622012-03-05 11:30:44 -050059 virtual DBusObjectManagerProxyInterface *CreateDBusObjectManagerProxy(
David Rochberg24c6c622012-03-05 11:30:44 -050060 const std::string &path,
61 const std::string &service);
62
Darin Petkov5c97ac52011-07-19 16:30:49 -070063 virtual DBusPropertiesProxyInterface *CreateDBusPropertiesProxy(
Darin Petkov5c97ac52011-07-19 16:30:49 -070064 const std::string &path,
65 const std::string &service);
66
Darin Petkov18fb2f72012-06-14 09:09:34 +020067 virtual DBusServiceProxyInterface *CreateDBusServiceProxy();
68
Darin Petkovc90fe522011-07-15 13:59:47 -070069 virtual ModemManagerProxyInterface *CreateModemManagerProxy(
David Rochberg81030ea2012-03-02 15:44:25 -050070 ModemManagerClassic *manager,
Darin Petkovc90fe522011-07-15 13:59:47 -070071 const std::string &path,
72 const std::string &service);
73
Eric Shienbrood9a245532012-03-07 14:20:39 -050074 virtual ModemProxyInterface *CreateModemProxy(const std::string &path,
Darin Petkove9d12e02011-07-27 15:09:37 -070075 const std::string &service);
76
Darin Petkove604f702011-07-28 15:51:17 -070077 virtual ModemSimpleProxyInterface *CreateModemSimpleProxy(
78 const std::string &path,
79 const std::string &service);
80
Darin Petkovbec79a22011-08-01 14:47:17 -070081 virtual ModemCDMAProxyInterface *CreateModemCDMAProxy(
82 const std::string &path,
83 const std::string &service);
84
Darin Petkov975b5e72011-08-30 11:48:08 -070085 virtual ModemGSMCardProxyInterface *CreateModemGSMCardProxy(
Darin Petkov975b5e72011-08-30 11:48:08 -070086 const std::string &path,
87 const std::string &service);
88
Darin Petkova1e0a1c2011-08-25 15:08:33 -070089 virtual ModemGSMNetworkProxyInterface *CreateModemGSMNetworkProxy(
Darin Petkova1e0a1c2011-08-25 15:08:33 -070090 const std::string &path,
91 const std::string &service);
92
Jason Glasgow9a0be632012-03-30 08:53:35 -040093 // Proxies for ModemManager1 interfaces
94 virtual mm1::ModemModem3gppProxyInterface *CreateMM1ModemModem3gppProxy(
95 const std::string &path,
96 const std::string &service);
97
98 virtual mm1::ModemModemCdmaProxyInterface *CreateMM1ModemModemCdmaProxy(
99 const std::string &path,
100 const std::string &service);
101
102 virtual mm1::ModemProxyInterface *CreateMM1ModemProxy(
103 const std::string &path,
104 const std::string &service);
105
106 virtual mm1::ModemSimpleProxyInterface *CreateMM1ModemSimpleProxy(
107 const std::string &path,
108 const std::string &service);
109
110 virtual mm1::SimProxyInterface *CreateSimProxy(
111 const std::string &path,
112 const std::string &service);
113
Darin Petkov096b3472012-05-15 10:26:22 +0200114 virtual WiMaxDeviceProxyInterface *CreateWiMaxDeviceProxy(
115 const std::string &path);
116 virtual WiMaxManagerProxyInterface *CreateWiMaxManagerProxy();
Darin Petkov9893d9c2012-05-17 15:27:31 -0700117 virtual WiMaxNetworkProxyInterface *CreateWiMaxNetworkProxy(
118 const std::string &path);
Darin Petkov096b3472012-05-15 10:26:22 +0200119
mukesh agrawal7c1fece2012-01-13 11:31:27 -0800120 // The caller retains ownership of 'delegate'. It must not be deleted before
121 // the proxy.
Darin Petkov394b7d42011-11-03 15:48:02 +0100122 virtual PowerManagerProxyInterface *CreatePowerManagerProxy(
123 PowerManagerProxyDelegate *delegate);
124
Darin Petkovaceede32011-07-18 15:32:38 -0700125 virtual SupplicantProcessProxyInterface *CreateSupplicantProcessProxy(
Darin Petkovd1967262011-07-18 14:55:18 -0700126 const char *dbus_path,
127 const char *dbus_addr);
128
Darin Petkovaceede32011-07-18 15:32:38 -0700129 virtual SupplicantInterfaceProxyInterface *CreateSupplicantInterfaceProxy(
Darin Petkovd1967262011-07-18 14:55:18 -0700130 const WiFiRefPtr &wifi,
131 const DBus::Path &object_path,
132 const char *dbus_addr);
133
mukesh agrawalb20776f2012-02-10 16:00:36 -0800134 // See comment in supplicant_bss_proxy.h, about bare pointer.
135 virtual SupplicantBSSProxyInterface *CreateSupplicantBSSProxy(
136 WiFiEndpoint *wifi_endpoint,
137 const DBus::Path &object_path,
138 const char *dbus_addr);
139
Darin Petkova7b89492011-07-27 12:48:17 -0700140 virtual DHCPProxyInterface *CreateDHCPProxy(const std::string &service);
Darin Petkovaceede32011-07-18 15:32:38 -0700141
Darin Petkovab565bb2011-10-06 02:55:51 -0700142 DBus::Connection *connection() const { return connection_.get(); }
Darin Petkovc90fe522011-07-15 13:59:47 -0700143
Darin Petkovab565bb2011-10-06 02:55:51 -0700144 protected:
145 ProxyFactory();
Darin Petkovaceede32011-07-18 15:32:38 -0700146
Darin Petkovc90fe522011-07-15 13:59:47 -0700147 private:
Darin Petkovab565bb2011-10-06 02:55:51 -0700148 friend struct base::DefaultLazyInstanceTraits<ProxyFactory>;
Darin Petkovc90fe522011-07-15 13:59:47 -0700149
Darin Petkovaceede32011-07-18 15:32:38 -0700150 scoped_ptr<DBus::Connection> connection_;
151
Darin Petkovc90fe522011-07-15 13:59:47 -0700152 DISALLOW_COPY_AND_ASSIGN(ProxyFactory);
153};
154
155} // namespace shill
156
157#endif // SHILL_PROXY_FACTORY_