1c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu//
2c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// Copyright (C) 2012 The Android Open Source Project
3c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu//
4c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// Licensed under the Apache License, Version 2.0 (the "License");
5c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// you may not use this file except in compliance with the License.
6c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// You may obtain a copy of the License at
7c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu//
8c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu//      http://www.apache.org/licenses/LICENSE-2.0
9c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu//
10c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// Unless required by applicable law or agreed to in writing, software
11c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// distributed under the License is distributed on an "AS IS" BASIS,
12c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// See the License for the specific language governing permissions and
14c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu// limitations under the License.
15c0beca55d290fe0b1c96d78cbbcf94b05c23f5a5Peter Qiu//
16d7732e4b308836ed21723c1ab412f640f02abdf1Chris Masone
17c45688bb3881f0c2216e6ec0e19ebda0be33e871Ben Chan#ifndef SHILL_ADAPTOR_INTERFACES_H_
18c45688bb3881f0c2216e6ec0e19ebda0be33e871Ben Chan#define SHILL_ADAPTOR_INTERFACES_H_
19d7732e4b308836ed21723c1ab412f640f02abdf1Chris Masone
20d7732e4b308836ed21723c1ab412f640f02abdf1Chris Masone#include <string>
213239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal#include <vector>
22d7732e4b308836ed21723c1ab412f640f02abdf1Chris Masone
23c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu#include <base/callback.h>
243cfbf216f1f918384866bf0d1a4c9a447d8109e8Darin Petkov
25c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu#include "shill/accessor_interface.h"
2669b6a95f893d2b21d66ca66a068ae9b1f3cd5470Peter Qiu
27d7732e4b308836ed21723c1ab412f640f02abdf1Chris Masonenamespace shill {
28d7732e4b308836ed21723c1ab412f640f02abdf1Chris Masone
29e5bc2cbc1c9717564d4ab75c42a26492b505f537Darin Petkovclass Error;
30e5bc2cbc1c9717564d4ab75c42a26492b505f537Darin Petkov
314e85161f12699d8eb2116ae24766676ed8227a71Chris Masone// These are the functions that a Device adaptor must support
324e85161f12699d8eb2116ae24766676ed8227a71Chris Masoneclass DeviceAdaptorInterface {
33d7732e4b308836ed21723c1ab412f640f02abdf1Chris Masone public:
344e85161f12699d8eb2116ae24766676ed8227a71Chris Masone  virtual ~DeviceAdaptorInterface() {}
3595207da4b896bd0a4186163f6f9ebda044a5a7b9Chris Masone
3695207da4b896bd0a4186163f6f9ebda044a5a7b9Chris Masone  // Getter for the opaque identifier that represents this object on the
3795207da4b896bd0a4186163f6f9ebda044a5a7b9Chris Masone  // RPC interface to which the implementation is adapting.
38a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart  virtual const std::string& GetRpcIdentifier() = 0;
3995207da4b896bd0a4186163f6f9ebda044a5a7b9Chris Masone
40a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart  virtual void EmitBoolChanged(const std::string& name, bool value) = 0;
41a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart  virtual void EmitUintChanged(const std::string& name, uint32_t value) = 0;
42a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart  virtual void EmitUint16Changed(const std::string& name, uint16_t value) = 0;
43a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart  virtual void EmitIntChanged(const std::string& name, int value) = 0;
44a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart  virtual void EmitStringChanged(const std::string& name,
45a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart                                 const std::string& value) = 0;
46a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart  virtual void EmitStringmapChanged(const std::string& name,
47a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart                                    const Stringmap& value) = 0;
48a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart  virtual void EmitStringmapsChanged(const std::string& name,
49a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart                                     const Stringmaps& value) = 0;
50a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart  virtual void EmitStringsChanged(const std::string& name,
51a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart                                  const Strings& value) = 0;
52a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart  virtual void EmitKeyValueStoreChanged(const std::string& name,
53a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart                                        const KeyValueStore& value) = 0;
54a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart  virtual void EmitRpcIdentifierChanged(const std::string& name,
55a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart                                        const std::string& value) = 0;
56d4f26486b237fae831d4b682481de785fc99c66ePaul Stewart  virtual void EmitRpcIdentifierArrayChanged(
57a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart      const std::string& name, const std::vector<std::string>& value) = 0;
58d7732e4b308836ed21723c1ab412f640f02abdf1Chris Masone};
59d7732e4b308836ed21723c1ab412f640f02abdf1Chris Masone
604e85161f12699d8eb2116ae24766676ed8227a71Chris Masone// These are the functions that an IPConfig adaptor must support
614e85161f12699d8eb2116ae24766676ed8227a71Chris Masoneclass IPConfigAdaptorInterface {
62d7732e4b308836ed21723c1ab412f640f02abdf1Chris Masone public:
634e85161f12699d8eb2116ae24766676ed8227a71Chris Masone  virtual ~IPConfigAdaptorInterface() {}
6495207da4b896bd0a4186163f6f9ebda044a5a7b9Chris Masone
6595207da4b896bd0a4186163f6f9ebda044a5a7b9Chris Masone  // Getter for the opaque identifier that represents this object on the
6695207da4b896bd0a4186163f6f9ebda044a5a7b9Chris Masone  // RPC interface to which the implementation is adapting.
67a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart  virtual const std::string& GetRpcIdentifier() = 0;
68a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart
69a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart  virtual void EmitBoolChanged(const std::string& name, bool value) = 0;
70a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart  virtual void EmitUintChanged(const std::string& name, uint32_t value) = 0;
71a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart  virtual void EmitIntChanged(const std::string& name, int value) = 0;
72a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart  virtual void EmitStringChanged(const std::string& name,
73a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart                                 const std::string& value) = 0;
74a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart  virtual void EmitStringsChanged(const std::string& name,
75a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart                                  const std::vector<std::string>& value) = 0;
76d7732e4b308836ed21723c1ab412f640f02abdf1Chris Masone};
77d7732e4b308836ed21723c1ab412f640f02abdf1Chris Masone
784e85161f12699d8eb2116ae24766676ed8227a71Chris Masone// These are the functions that a Manager adaptor must support
794e85161f12699d8eb2116ae24766676ed8227a71Chris Masoneclass ManagerAdaptorInterface {
80d7732e4b308836ed21723c1ab412f640f02abdf1Chris Masone public:
814e85161f12699d8eb2116ae24766676ed8227a71Chris Masone  virtual ~ManagerAdaptorInterface() {}
82d0ceb8c66779819ab12b8abb488aed22b7d04fd3Chris Masone
8369b6a95f893d2b21d66ca66a068ae9b1f3cd5470Peter Qiu  virtual void RegisterAsync(
84c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu      const base::Callback<void(bool)>& completion_callback) = 0;
8569b6a95f893d2b21d66ca66a068ae9b1f3cd5470Peter Qiu
8695207da4b896bd0a4186163f6f9ebda044a5a7b9Chris Masone  // Getter for the opaque identifier that represents this object on the
8795207da4b896bd0a4186163f6f9ebda044a5a7b9Chris Masone  // RPC interface to which the implementation is adapting.
88a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart  virtual const std::string& GetRpcIdentifier() = 0;
8995207da4b896bd0a4186163f6f9ebda044a5a7b9Chris Masone
90a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart  virtual void EmitBoolChanged(const std::string& name, bool value) = 0;
91a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart  virtual void EmitUintChanged(const std::string& name, uint32_t value) = 0;
92a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart  virtual void EmitIntChanged(const std::string& name, int value) = 0;
93a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart  virtual void EmitStringChanged(const std::string& name,
94a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart                                 const std::string& value) = 0;
95a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart  virtual void EmitStringsChanged(const std::string& name,
96a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart                                  const std::vector<std::string>& value) = 0;
9749739c08a76187fae6494c61e960eec315960715Paul Stewart  virtual void EmitRpcIdentifierChanged(
98a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart      const std::string& name,
99a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart      const std::string& value) = 0;
1003239932e4a0a92fec52d88860081cbbb003eabb0mukesh agrawal  virtual void EmitRpcIdentifierArrayChanged(
101a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart      const std::string& name,
102a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart      const std::vector<std::string>& value) = 0;
103d7732e4b308836ed21723c1ab412f640f02abdf1Chris Masone};
104d7732e4b308836ed21723c1ab412f640f02abdf1Chris Masone
10552cd19bfd52226611d924930f1178307f79d5fdcChris Masone// These are the functions that a Profile adaptor must support
10652cd19bfd52226611d924930f1178307f79d5fdcChris Masoneclass ProfileAdaptorInterface {
10752cd19bfd52226611d924930f1178307f79d5fdcChris Masone public:
10852cd19bfd52226611d924930f1178307f79d5fdcChris Masone  virtual ~ProfileAdaptorInterface() {}
10952cd19bfd52226611d924930f1178307f79d5fdcChris Masone
110c6c6c13e2543bd3ff5beae067b0320647fe1e141Chris Masone  // Getter for the opaque identifier that represents this object on the
111c6c6c13e2543bd3ff5beae067b0320647fe1e141Chris Masone  // RPC interface to which the implementation is adapting.
112a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart  virtual const std::string& GetRpcIdentifier() = 0;
113c6c6c13e2543bd3ff5beae067b0320647fe1e141Chris Masone
114a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart  virtual void EmitBoolChanged(const std::string& name, bool value) = 0;
115a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart  virtual void EmitUintChanged(const std::string& name, uint32_t value) = 0;
116a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart  virtual void EmitIntChanged(const std::string& name, int value) = 0;
117a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart  virtual void EmitStringChanged(const std::string& name,
118a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart                                 const std::string& value) = 0;
119c6c6c13e2543bd3ff5beae067b0320647fe1e141Chris Masone};
120c6c6c13e2543bd3ff5beae067b0320647fe1e141Chris Masone
121a9b1fedcad9d354ff7b0a6a7e4cfd58fa7133084Darin Petkov// These are the functions that a RPCTask adaptor must support.
122a9b1fedcad9d354ff7b0a6a7e4cfd58fa7133084Darin Petkovclass RPCTaskAdaptorInterface {
123a9b1fedcad9d354ff7b0a6a7e4cfd58fa7133084Darin Petkov public:
124a9b1fedcad9d354ff7b0a6a7e4cfd58fa7133084Darin Petkov  virtual ~RPCTaskAdaptorInterface() {}
125a9b1fedcad9d354ff7b0a6a7e4cfd58fa7133084Darin Petkov
126a9b1fedcad9d354ff7b0a6a7e4cfd58fa7133084Darin Petkov  // Getter for the opaque identifier that represents this object on the
127a9b1fedcad9d354ff7b0a6a7e4cfd58fa7133084Darin Petkov  // RPC interface to which the implementation is adapting.
128a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart  virtual const std::string& GetRpcIdentifier() = 0;
129a9b1fedcad9d354ff7b0a6a7e4cfd58fa7133084Darin Petkov
130a9b1fedcad9d354ff7b0a6a7e4cfd58fa7133084Darin Petkov  // Getter for the opaque identifier that represents this object's
131a9b1fedcad9d354ff7b0a6a7e4cfd58fa7133084Darin Petkov  // connection to the RPC interface to which the implementation is adapting.
132a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart  virtual const std::string& GetRpcConnectionIdentifier() = 0;
133a9b1fedcad9d354ff7b0a6a7e4cfd58fa7133084Darin Petkov};
134a9b1fedcad9d354ff7b0a6a7e4cfd58fa7133084Darin Petkov
1354e85161f12699d8eb2116ae24766676ed8227a71Chris Masone// These are the functions that a Service adaptor must support
1364e85161f12699d8eb2116ae24766676ed8227a71Chris Masoneclass ServiceAdaptorInterface {
137c6c6c13e2543bd3ff5beae067b0320647fe1e141Chris Masone public:
1384e85161f12699d8eb2116ae24766676ed8227a71Chris Masone  virtual ~ServiceAdaptorInterface() {}
139c6c6c13e2543bd3ff5beae067b0320647fe1e141Chris Masone
140c6c6c13e2543bd3ff5beae067b0320647fe1e141Chris Masone  // Getter for the opaque identifier that represents this object on the
141c6c6c13e2543bd3ff5beae067b0320647fe1e141Chris Masone  // RPC interface to which the implementation is adapting.
142a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart  virtual const std::string& GetRpcIdentifier() = 0;
143c6c6c13e2543bd3ff5beae067b0320647fe1e141Chris Masone
144a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart  virtual void EmitBoolChanged(const std::string& name, bool value) = 0;
145a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart  virtual void EmitUint8Changed(const std::string& name, uint8_t value) = 0;
146a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart  virtual void EmitUint16Changed(const std::string& name, uint16_t value) = 0;
147a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart  virtual void EmitUint16sChanged(const std::string& name,
148a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart                                  const Uint16s& value) = 0;
149a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart  virtual void EmitUintChanged(const std::string& name, uint32_t value) = 0;
150a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart  virtual void EmitIntChanged(const std::string& name, int value) = 0;
151a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart  virtual void EmitRpcIdentifierChanged(const std::string& name,
152a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart                                        const std::string& value) = 0;
153a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart  virtual void EmitStringChanged(const std::string& name,
154a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart                                 const std::string& value) = 0;
155a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart  virtual void EmitStringmapChanged(const std::string& name,
156a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart                                    const Stringmap& value) = 0;
15752cd19bfd52226611d924930f1178307f79d5fdcChris Masone};
15852cd19bfd52226611d924930f1178307f79d5fdcChris Masone
159127b341755731bd6ecc19e44b63c23c79e0b7cd1Prabhu Kaliamoorthiclass ThirdPartyVpnAdaptorInterface {
160127b341755731bd6ecc19e44b63c23c79e0b7cd1Prabhu Kaliamoorthi public:
161c00d1fa87127a33bd1e1a7cf049a54a9cca49d68Peter Qiu  virtual ~ThirdPartyVpnAdaptorInterface() {}
162127b341755731bd6ecc19e44b63c23c79e0b7cd1Prabhu Kaliamoorthi
163a794cd60a7339d576ea2eed263a4f0a20fb255afPaul Stewart  virtual void EmitPacketReceived(const std::vector<uint8_t>& packet) = 0;
164127b341755731bd6ecc19e44b63c23c79e0b7cd1Prabhu Kaliamoorthi
165127b341755731bd6ecc19e44b63c23c79e0b7cd1Prabhu Kaliamoorthi  virtual void EmitPlatformMessage(uint32_t message) = 0;
166127b341755731bd6ecc19e44b63c23c79e0b7cd1Prabhu Kaliamoorthi};
167127b341755731bd6ecc19e44b63c23c79e0b7cd1Prabhu Kaliamoorthi
168d7732e4b308836ed21723c1ab412f640f02abdf1Chris Masone}  // namespace shill
169c45688bb3881f0c2216e6ec0e19ebda0be33e871Ben Chan
170c45688bb3881f0c2216e6ec0e19ebda0be33e871Ben Chan#endif  // SHILL_ADAPTOR_INTERFACES_H_
171