blob: 1de0b15f3f9193d8cfbc84b524274e1e08343179 [file] [log] [blame]
Darin Petkov33af05c2012-02-28 10:10:30 +01001// Copyright (c) 2012 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 SHILL_VPN_PROVIDER_
6#define SHILL_VPN_PROVIDER_
7
Paul Stewartca6abd42012-03-01 15:45:29 -08008#include <string>
9#include <vector>
10
Darin Petkov33af05c2012-02-28 10:10:30 +010011#include <base/basictypes.h>
Paul Stewartca6abd42012-03-01 15:45:29 -080012#include <gtest/gtest_prod.h> // for FRIEND_TEST
Darin Petkov33af05c2012-02-28 10:10:30 +010013
14#include "shill/refptr_types.h"
15
16namespace shill {
17
18class ControlInterface;
19class Error;
20class EventDispatcher;
21class KeyValueStore;
22class Manager;
23class Metrics;
24
25class VPNProvider {
26 public:
27 VPNProvider(ControlInterface *control_interface,
28 EventDispatcher *dispatcher,
29 Metrics *metrics,
30 Manager *manager);
31 ~VPNProvider();
32
33 void Start();
34 void Stop();
35
36 VPNServiceRefPtr GetService(const KeyValueStore &args, Error *error);
37
Paul Stewartca6abd42012-03-01 15:45:29 -080038 // Offers an unclaimed interface to VPN services. Returns true if this
39 // device has been accepted by a service.
40 bool OnDeviceInfoAvailable(const std::string &link_name, int interface_index);
41
Paul Stewart65512e12012-03-26 18:01:08 -070042 // Clean up a VPN services that has been unloaded and will be deregistered.
43 // This removes the VPN provider's reference to this service in its
44 // services_ vector.
45 void RemoveService(VPNServiceRefPtr service);
46
Paul Stewart66815332012-04-09 18:09:36 -070047 void CreateServicesFromProfile(ProfileRefPtr profile);
48
Darin Petkov33af05c2012-02-28 10:10:30 +010049 private:
Darin Petkov9d1bbe72012-04-25 10:58:59 +020050 FRIEND_TEST(VPNProviderTest, CreateService);
Paul Stewartca6abd42012-03-01 15:45:29 -080051 FRIEND_TEST(VPNProviderTest, OnDeviceInfoAvailable);
Paul Stewart65512e12012-03-26 18:01:08 -070052 FRIEND_TEST(VPNProviderTest, RemoveService);
Paul Stewartca6abd42012-03-01 15:45:29 -080053
Paul Stewart66815332012-04-09 18:09:36 -070054 // Create a service of type |type| and storage identifier |storage_id|
55 // and initial parameters |args|. Returns a service reference pointer
56 // to the newly created service, or popuplates |error| with an the error
57 // that caused this to fail.
58 VPNServiceRefPtr CreateService(const std::string &type,
Paul Stewart451aa7f2012-04-11 19:07:58 -070059 const std::string &name,
Paul Stewart66815332012-04-09 18:09:36 -070060 const std::string &storage_id,
Paul Stewart66815332012-04-09 18:09:36 -070061 Error *error);
62
63 // Find a service of type |type| whose storage identifier is |storage_id|.
64 VPNServiceRefPtr FindService(const std::string &type,
65 const std::string &storage_id);
66
Darin Petkov33af05c2012-02-28 10:10:30 +010067 ControlInterface *control_interface_;
68 EventDispatcher *dispatcher_;
69 Metrics *metrics_;
70 Manager *manager_;
Paul Stewartca6abd42012-03-01 15:45:29 -080071 std::vector<VPNServiceRefPtr> services_;
Darin Petkov33af05c2012-02-28 10:10:30 +010072
73 DISALLOW_COPY_AND_ASSIGN(VPNProvider);
74};
75
76} // namespace shill
77
78#endif // SHILL_VPN_PROVIDER_