shill: Basic VPN service framework.

The manager uses a VPNProvider (similar to DeviceInfo and ModemInfo) to manage
VPN services. For each VPN service the VPNProvider instantiates an appropriate
VPNDriver (e.g., OpenVPNDriver) based on the service arguments and associates it
with the generic VPN service.

BUG=chromium-os:26835,chromium-os:26836,chromium-os:26838,chromium-os:26839
TEST=unit tests

Change-Id: Ia1bdbe49ecbb6d5b50a732dcef4a15e1feaa4f69
Reviewed-on: https://gerrit.chromium.org/gerrit/16956
Commit-Ready: Darin Petkov <petkov@chromium.org>
Reviewed-by: Darin Petkov <petkov@chromium.org>
Tested-by: Darin Petkov <petkov@chromium.org>
Reviewed-by: Paul Stewart <pstew@chromium.org>
diff --git a/vpn_provider.h b/vpn_provider.h
new file mode 100644
index 0000000..2d65b0c
--- /dev/null
+++ b/vpn_provider.h
@@ -0,0 +1,45 @@
+// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef SHILL_VPN_PROVIDER_
+#define SHILL_VPN_PROVIDER_
+
+#include <base/basictypes.h>
+
+#include "shill/refptr_types.h"
+
+namespace shill {
+
+class ControlInterface;
+class Error;
+class EventDispatcher;
+class KeyValueStore;
+class Manager;
+class Metrics;
+
+class VPNProvider {
+ public:
+  VPNProvider(ControlInterface *control_interface,
+              EventDispatcher *dispatcher,
+              Metrics *metrics,
+              Manager *manager);
+  ~VPNProvider();
+
+  void Start();
+  void Stop();
+
+  VPNServiceRefPtr GetService(const KeyValueStore &args, Error *error);
+
+ private:
+  ControlInterface *control_interface_;
+  EventDispatcher *dispatcher_;
+  Metrics *metrics_;
+  Manager *manager_;
+
+  DISALLOW_COPY_AND_ASSIGN(VPNProvider);
+};
+
+}  // namespace shill
+
+#endif  // SHILL_VPN_PROVIDER_