Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(770)

Unified Diff: native_client_sdk/src/examples/api/vpn_provider/vpn_provider.cc

Issue 1731273002: ppapi: PPB_VpnProvider: Add a simple NaCl SDK example. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@vpn-ppapi
Patch Set: New simplied API. Full connection workflow. Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: native_client_sdk/src/examples/api/vpn_provider/vpn_provider.cc
diff --git a/native_client_sdk/src/examples/api/vpn_provider/vpn_provider.cc b/native_client_sdk/src/examples/api/vpn_provider/vpn_provider.cc
new file mode 100644
index 0000000000000000000000000000000000000000..823e920473d4776daef8445fa7a1ec137c263376
--- /dev/null
+++ b/native_client_sdk/src/examples/api/vpn_provider/vpn_provider.cc
@@ -0,0 +1,141 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <queue>
+
+#include "ppapi/cpp/instance.h"
+#include "ppapi/cpp/module.h"
+#include "ppapi/cpp/var.h"
+#include "ppapi/cpp/var_dictionary.h"
+
+#include "vpn_provider_helper.h"
+
+class VpnProviderInstance : public pp::Instance {
+ public:
+ explicit VpnProviderInstance(PP_Instance instance)
+ : pp::Instance(instance), vpn_provider_helper_(this) {
+ vpn_provider_helper_.Init();
+ }
+
+ virtual ~VpnProviderInstance() {}
+
+ // Handles On Click messages from Javascript
emaxx 2016/07/18 13:46:58 The comment looks to be a bit confusing, as the me
adrian.belgun 2016/07/19 13:57:22 Done. Was a leftover from an older version.
+ virtual void HandleMessage(const pp::Var& message) {
+ // Expecting only dictionary messages from JS.
+ if (!message.is_dictionary()) {
+ PostMessage(
+ "NaCl: VpnProviderInstance::HandleMessage: "
+ "Unexpected message. Not a dictionary.");
+ return;
+ }
+
+ // Message type defined by 'cmd' key.
+ pp::VarDictionary dict(message);
+ pp::Var cmd = dict.Get("cmd");
+ if (cmd.is_undefined()) {
+ PostMessage(
+ "NaCl: VpnProviderInstance::HandleMessage: "
+ "Malformed message. No 'cmd' key.");
+ return;
+ }
+ if (!cmd.is_string()) {
+ PostMessage(
+ "NaCl: VpnProviderInstance::HandleMessage: "
+ "Malformed message. Type for key 'cmd' is not string");
+ return;
+ }
+
+ std::string command = cmd.AsString();
emaxx 2016/07/18 13:46:58 nit: #include <string>
adrian.belgun 2016/07/19 13:57:22 Done.
+ if (cmd == "bind") {
+ pp::Var name = dict.Get("name");
+ if (name.is_undefined()) {
+ PostMessage(
+ "NaCl: VpnProviderInstance::HandleMessage: "
+ "Malformed message. No 'name' key.");
+ return;
+ }
+ if (!name.is_string()) {
+ PostMessage(
+ "NaCl: VpnProviderInstance::HandleMessage: "
+ "Malformed message. Type for key 'name' is not string");
+ return;
+ }
+
+ pp::Var id = dict.Get("id");
binji 2016/07/18 18:46:28 duplicated 3 times, probably worth making a functi
adrian.belgun 2016/07/19 13:57:22 Done.
+ if (id.is_undefined()) {
+ PostMessage(
+ "NaCl: VpnProviderInstance::HandleMessage: "
+ "Malformed message. No 'id' key.");
+ return;
+ }
+ if (!id.is_string()) {
+ PostMessage(
+ "NaCl: VpnProviderInstance::HandleMessage: "
+ "Malformed message. Type for key 'id' is not string");
+ return;
+ }
+
+ PostMessage(
+ "NaCl: VpnProviderInstance::HandleMessage: "
+ "Bind request.");
+ vpn_provider_helper_.Bind(name.AsString(), id.AsString());
+ return;
+ }
+
+ if (cmd == "connected") {
+ PostMessage(
+ "NaCl: VpnProviderInstance::HandleMessage: "
+ "Connect request.");
+
+ /* This is the place where the developer would establing the VPN
+ * connection. The response would usually contain configuration details
+ * for the tunnel obtained from the VPN implementation.
+ *
+ * Currently just signaling that is was executed succesfuly.
+ */
+
+ pp::VarDictionary dict;
+ dict.Set("cmd", "setParameters");
+ PostMessage(dict);
+ return;
+ }
+
+ if (cmd == "disconnected") {
+ PostMessage(
+ "NaCl: VpnProviderInstance::HandleMessage: "
+ "Disconnect request.");
+
+ /* This is the place where the developer would disconnect from the VPN
+ * connection.
+ */
+
+ return;
+ }
+
+ PostMessage(
+ "NaCl: VpnProviderInstance::HandleMessage: "
+ "Unexpected command.");
+ }
+
+ private:
+ VpnProviderHelper vpn_provider_helper_;
+};
+
+class VpnProviderModule : public pp::Module {
+ public:
+ VpnProviderModule() : pp::Module() {}
+ virtual ~VpnProviderModule() {}
+
+ virtual pp::Instance* CreateInstance(PP_Instance instance) {
+ return new VpnProviderInstance(instance);
+ }
+};
+
+namespace pp {
+
+Module* CreateModule() {
+ return new VpnProviderModule();
+}
+
+} // namespace pp

Powered by Google App Engine
This is Rietveld 408576698