shill: vpn: Parse openvpn IP configuration options.
The options are pushed to shill over DBus through the .Task.notify service
method.
BUG=chromium-os:27056
TEST=unit tests
Change-Id: I98d7d49c275f49daba5a6dbe0af0878bf82038a6
Reviewed-on: https://gerrit.chromium.org/gerrit/17219
Tested-by: Darin Petkov <petkov@chromium.org>
Reviewed-by: mukesh agrawal <quiche@chromium.org>
Commit-Ready: Darin Petkov <petkov@chromium.org>
diff --git a/openvpn_driver.h b/openvpn_driver.h
index 57d2272..00f7eab 100644
--- a/openvpn_driver.h
+++ b/openvpn_driver.h
@@ -5,12 +5,14 @@
#ifndef SHILL_OPENVPN_DRIVER_
#define SHILL_OPENVPN_DRIVER_
+#include <map>
#include <string>
#include <vector>
#include <base/memory/scoped_ptr.h>
#include <gtest/gtest_prod.h> // for FRIEND_TEST
+#include "shill/ipconfig.h"
#include "shill/key_value_store.h"
#include "shill/vpn_driver.h"
@@ -29,6 +31,9 @@
const KeyValueStore &args);
virtual ~OpenVPNDriver();
+ bool Notify(const std::string &reason,
+ const std::map<std::string, std::string> &dict);
+
// Inherited from VPNDriver.
virtual bool ClaimInterface(const std::string &link_name,
int interface_index);
@@ -41,6 +46,21 @@
FRIEND_TEST(OpenVPNDriverTest, ClaimInterface);
FRIEND_TEST(OpenVPNDriverTest, InitOptions);
FRIEND_TEST(OpenVPNDriverTest, InitOptionsNoHost);
+ FRIEND_TEST(OpenVPNDriverTest, ParseForeignOption);
+ FRIEND_TEST(OpenVPNDriverTest, ParseForeignOptions);
+ FRIEND_TEST(OpenVPNDriverTest, ParseIPConfiguration);
+
+ // The map is a sorted container that allows us to iterate through the options
+ // in order.
+ typedef std::map<int, std::string> ForeignOptions;
+
+ static void ParseIPConfiguration(
+ const std::map<std::string, std::string> &configuration,
+ IPConfig::Properties *properties);
+ static void ParseForeignOptions(const ForeignOptions &options,
+ IPConfig::Properties *properties);
+ static void ParseForeignOption(const std::string &option,
+ IPConfig::Properties *properties);
void InitOptions(std::vector<std::string> *options, Error *error);