vpn_driver.h revision 0e9735db6db73a48c4b0cc3151a5272e3a8b9d2f
133af05c849e0888b15222da38b55515784b821c7Darin Petkov// Copyright (c) 2012 The Chromium OS Authors. All rights reserved. 233af05c849e0888b15222da38b55515784b821c7Darin Petkov// Use of this source code is governed by a BSD-style license that can be 333af05c849e0888b15222da38b55515784b821c7Darin Petkov// found in the LICENSE file. 433af05c849e0888b15222da38b55515784b821c7Darin Petkov 533af05c849e0888b15222da38b55515784b821c7Darin Petkov#ifndef SHILL_VPN_DRIVER_ 633af05c849e0888b15222da38b55515784b821c7Darin Petkov#define SHILL_VPN_DRIVER_ 733af05c849e0888b15222da38b55515784b821c7Darin Petkov 8ca6abd4635507fa5b8f4b8819a37819fb560c464Paul Stewart#include <string> 9ca6abd4635507fa5b8f4b8819a37819fb560c464Paul Stewart 1033af05c849e0888b15222da38b55515784b821c7Darin Petkov#include <base/basictypes.h> 110e9735db6db73a48c4b0cc3151a5272e3a8b9d2fDarin Petkov#include <gtest/gtest_prod.h> // for FRIEND_TEST 1233af05c849e0888b15222da38b55515784b821c7Darin Petkov 13b451d6e5b5deb3a42ac09c3db349f325e4c8004eDarin Petkov#include "shill/accessor_interface.h" 140e9735db6db73a48c4b0cc3151a5272e3a8b9d2fDarin Petkov#include "shill/ipconfig.h" 15b451d6e5b5deb3a42ac09c3db349f325e4c8004eDarin Petkov#include "shill/key_value_store.h" 1679d74c9bdb654be48765c1e7aa416126ffd2ae5eDarin Petkov#include "shill/refptr_types.h" 1779d74c9bdb654be48765c1e7aa416126ffd2ae5eDarin Petkov 1833af05c849e0888b15222da38b55515784b821c7Darin Petkovnamespace shill { 1933af05c849e0888b15222da38b55515784b821c7Darin Petkov 2033af05c849e0888b15222da38b55515784b821c7Darin Petkovclass Error; 210e9735db6db73a48c4b0cc3151a5272e3a8b9d2fDarin Petkovclass Manager; 22ebd3856da9d213154f3c85a71e4ec8e8fce3b9eaPaul Stewartclass PropertyStore; 23f3c71d70885fdddff8d71db75878c1310af28f9dDarin Petkovclass StoreInterface; 2433af05c849e0888b15222da38b55515784b821c7Darin Petkov 2533af05c849e0888b15222da38b55515784b821c7Darin Petkovclass VPNDriver { 2633af05c849e0888b15222da38b55515784b821c7Darin Petkov public: 27b451d6e5b5deb3a42ac09c3db349f325e4c8004eDarin Petkov virtual ~VPNDriver(); 2833af05c849e0888b15222da38b55515784b821c7Darin Petkov 29ca6abd4635507fa5b8f4b8819a37819fb560c464Paul Stewart virtual bool ClaimInterface(const std::string &link_name, 30ca6abd4635507fa5b8f4b8819a37819fb560c464Paul Stewart int interface_index) = 0; 3179d74c9bdb654be48765c1e7aa416126ffd2ae5eDarin Petkov virtual void Connect(const VPNServiceRefPtr &service, Error *error) = 0; 326aa2187f18e5a9ba3d6d475669cd27dfee4d92bdDarin Petkov virtual void Disconnect() = 0; 3339964fa3426450903d2640046e562708aeda0a30Paul Stewart virtual std::string GetProviderType() const = 0; 34b451d6e5b5deb3a42ac09c3db349f325e4c8004eDarin Petkov 35b451d6e5b5deb3a42ac09c3db349f325e4c8004eDarin Petkov virtual void InitPropertyStore(PropertyStore *store); 36b451d6e5b5deb3a42ac09c3db349f325e4c8004eDarin Petkov 37b451d6e5b5deb3a42ac09c3db349f325e4c8004eDarin Petkov virtual bool Load(StoreInterface *storage, const std::string &storage_id); 38b451d6e5b5deb3a42ac09c3db349f325e4c8004eDarin Petkov virtual bool Save(StoreInterface *storage, const std::string &storage_id); 39b451d6e5b5deb3a42ac09c3db349f325e4c8004eDarin Petkov 40b451d6e5b5deb3a42ac09c3db349f325e4c8004eDarin Petkov KeyValueStore *args() { return &args_; } 41b451d6e5b5deb3a42ac09c3db349f325e4c8004eDarin Petkov 42b451d6e5b5deb3a42ac09c3db349f325e4c8004eDarin Petkov protected: 43b451d6e5b5deb3a42ac09c3db349f325e4c8004eDarin Petkov struct Property { 44b451d6e5b5deb3a42ac09c3db349f325e4c8004eDarin Petkov enum Flags { 45b451d6e5b5deb3a42ac09c3db349f325e4c8004eDarin Petkov kEphemeral = 1 << 0, 46b451d6e5b5deb3a42ac09c3db349f325e4c8004eDarin Petkov kCrypted = 1 << 1, 47b451d6e5b5deb3a42ac09c3db349f325e4c8004eDarin Petkov }; 48b451d6e5b5deb3a42ac09c3db349f325e4c8004eDarin Petkov 49b451d6e5b5deb3a42ac09c3db349f325e4c8004eDarin Petkov const char *property; 50b451d6e5b5deb3a42ac09c3db349f325e4c8004eDarin Petkov int flags; 51b451d6e5b5deb3a42ac09c3db349f325e4c8004eDarin Petkov }; 52b451d6e5b5deb3a42ac09c3db349f325e4c8004eDarin Petkov 530e9735db6db73a48c4b0cc3151a5272e3a8b9d2fDarin Petkov VPNDriver(Manager *manager, 540e9735db6db73a48c4b0cc3151a5272e3a8b9d2fDarin Petkov const Property *properties, 550e9735db6db73a48c4b0cc3151a5272e3a8b9d2fDarin Petkov size_t property_count); 560e9735db6db73a48c4b0cc3151a5272e3a8b9d2fDarin Petkov 570e9735db6db73a48c4b0cc3151a5272e3a8b9d2fDarin Petkov Manager *manager() const { return manager_; } 580e9735db6db73a48c4b0cc3151a5272e3a8b9d2fDarin Petkov 590e9735db6db73a48c4b0cc3151a5272e3a8b9d2fDarin Petkov bool PinHostRoute(const IPConfig::Properties &properties); 60b451d6e5b5deb3a42ac09c3db349f325e4c8004eDarin Petkov 61b451d6e5b5deb3a42ac09c3db349f325e4c8004eDarin Petkov private: 620e9735db6db73a48c4b0cc3151a5272e3a8b9d2fDarin Petkov FRIEND_TEST(VPNDriverTest, PinHostRoute); 630e9735db6db73a48c4b0cc3151a5272e3a8b9d2fDarin Petkov 64b451d6e5b5deb3a42ac09c3db349f325e4c8004eDarin Petkov Stringmap GetProvider(Error *error); 65b451d6e5b5deb3a42ac09c3db349f325e4c8004eDarin Petkov void ClearMappedProperty(const size_t &index, Error *error); 66b451d6e5b5deb3a42ac09c3db349f325e4c8004eDarin Petkov std::string GetMappedProperty(const size_t &index, Error *error); 67b451d6e5b5deb3a42ac09c3db349f325e4c8004eDarin Petkov void SetMappedProperty( 68b451d6e5b5deb3a42ac09c3db349f325e4c8004eDarin Petkov const size_t &index, const std::string &value, Error *error); 69b451d6e5b5deb3a42ac09c3db349f325e4c8004eDarin Petkov 700e9735db6db73a48c4b0cc3151a5272e3a8b9d2fDarin Petkov Manager *manager_; 71b451d6e5b5deb3a42ac09c3db349f325e4c8004eDarin Petkov const Property * const properties_; 72b451d6e5b5deb3a42ac09c3db349f325e4c8004eDarin Petkov const size_t property_count_; 73b451d6e5b5deb3a42ac09c3db349f325e4c8004eDarin Petkov KeyValueStore args_; 74b451d6e5b5deb3a42ac09c3db349f325e4c8004eDarin Petkov 75b451d6e5b5deb3a42ac09c3db349f325e4c8004eDarin Petkov DISALLOW_COPY_AND_ASSIGN(VPNDriver); 7633af05c849e0888b15222da38b55515784b821c7Darin Petkov}; 7733af05c849e0888b15222da38b55515784b821c7Darin Petkov 7833af05c849e0888b15222da38b55515784b821c7Darin Petkov} // namespace shill 7933af05c849e0888b15222da38b55515784b821c7Darin Petkov 8033af05c849e0888b15222da38b55515784b821c7Darin Petkov#endif // SHILL_VPN_DRIVER_ 81