blob: 57d227250124fe1a7ad533b804f63ac6016dbfe4 [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_OPENVPN_DRIVER_
6#define SHILL_OPENVPN_DRIVER_
7
Darin Petkovfe6a9372012-02-28 16:25:06 +01008#include <string>
9#include <vector>
10
Darin Petkova9b1fed2012-02-29 11:49:05 +010011#include <base/memory/scoped_ptr.h>
Darin Petkovfe6a9372012-02-28 16:25:06 +010012#include <gtest/gtest_prod.h> // for FRIEND_TEST
13
14#include "shill/key_value_store.h"
Darin Petkov33af05c2012-02-28 10:10:30 +010015#include "shill/vpn_driver.h"
16
17namespace shill {
18
Darin Petkova9b1fed2012-02-29 11:49:05 +010019class ControlInterface;
Paul Stewartca6abd42012-03-01 15:45:29 -080020class DeviceInfo;
Darin Petkov33af05c2012-02-28 10:10:30 +010021class Error;
Darin Petkova9b1fed2012-02-29 11:49:05 +010022class RPCTask;
Paul Stewartca6abd42012-03-01 15:45:29 -080023class DeviceStub;
Darin Petkov33af05c2012-02-28 10:10:30 +010024
25class OpenVPNDriver : public VPNDriver {
26 public:
Paul Stewartca6abd42012-03-01 15:45:29 -080027 OpenVPNDriver(ControlInterface *control,
28 DeviceInfo *device_info,
29 const KeyValueStore &args);
Darin Petkov33af05c2012-02-28 10:10:30 +010030 virtual ~OpenVPNDriver();
31
32 // Inherited from VPNDriver.
Paul Stewartca6abd42012-03-01 15:45:29 -080033 virtual bool ClaimInterface(const std::string &link_name,
34 int interface_index);
Darin Petkov33af05c2012-02-28 10:10:30 +010035 virtual void Connect(Error *error);
36
37 private:
Darin Petkovfe6a9372012-02-28 16:25:06 +010038 friend class OpenVPNDriverTest;
39 FRIEND_TEST(OpenVPNDriverTest, AppendFlag);
40 FRIEND_TEST(OpenVPNDriverTest, AppendValueOption);
Paul Stewartca6abd42012-03-01 15:45:29 -080041 FRIEND_TEST(OpenVPNDriverTest, ClaimInterface);
Darin Petkovfe6a9372012-02-28 16:25:06 +010042 FRIEND_TEST(OpenVPNDriverTest, InitOptions);
43 FRIEND_TEST(OpenVPNDriverTest, InitOptionsNoHost);
44
45 void InitOptions(std::vector<std::string> *options, Error *error);
46
47 void AppendValueOption(const std::string &property,
48 const std::string &option,
49 std::vector<std::string> *options);
50 void AppendFlag(const std::string &property,
51 const std::string &option,
52 std::vector<std::string> *options);
53
Darin Petkova9b1fed2012-02-29 11:49:05 +010054 ControlInterface *control_;
Paul Stewartca6abd42012-03-01 15:45:29 -080055 DeviceInfo *device_info_;
Darin Petkovfe6a9372012-02-28 16:25:06 +010056 KeyValueStore args_;
Darin Petkova9b1fed2012-02-29 11:49:05 +010057 scoped_ptr<RPCTask> rpc_task_;
Paul Stewartca6abd42012-03-01 15:45:29 -080058 std::string tunnel_interface_;
59 int interface_index_;
Darin Petkovfe6a9372012-02-28 16:25:06 +010060
Darin Petkov33af05c2012-02-28 10:10:30 +010061 DISALLOW_COPY_AND_ASSIGN(OpenVPNDriver);
62};
63
64} // namespace shill
65
66#endif // SHILL_OPENVPN_DRIVER_