[PATCH/RFC 6/6] JNI: Add demo program to illustrate library usage
Kevin Cernekee
cernekee at gmail.com
Mon Aug 5 01:25:59 EDT 2013
Signed-off-by: Kevin Cernekee <cernekee at gmail.com>
---
org/example/LibTest.java | 145 ++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 145 insertions(+)
create mode 100644 org/example/LibTest.java
diff --git a/org/example/LibTest.java b/org/example/LibTest.java
new file mode 100644
index 0000000..1300092
--- /dev/null
+++ b/org/example/LibTest.java
@@ -0,0 +1,145 @@
+/*
+ * OpenConnect (SSL + DTLS) VPN client
+ *
+ * Copyright © 2013 Kevin Cernekee <cernekee at gmail.com>
+ *
+ * Sample Java library client - usage:
+ *
+ * ./configure --with-jni
+ * make
+ * javac org/example/LibTest.java
+ * java -Djava.library.path=.libs org.example.LibTest <server_ip>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * version 2.1, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to:
+ *
+ * Free Software Foundation, Inc.
+ * 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA
+ */
+
+package org.example;
+
+import java.io.*;
+import org.infradead.openconnect.LibOpenConnect;
+
+public final class LibTest {
+ private static String getline() {
+ BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
+ try {
+ String line = br.readLine();
+ return line;
+ } catch (IOException e) {
+ System.out.println("\nI/O error");
+ System.exit(1);
+ }
+ return "";
+ }
+
+ private static class TestLib extends LibOpenConnect {
+ public int onValidatePeerCert(String msg) {
+ System.out.println("cert warning: " + msg);
+ System.out.println("cert SHA1: " + getCertSHA1());
+ System.out.println("cert details: " + getCertDetails());
+
+ byte der[] = getCertDER();
+ System.out.println("DER is " + der.length + " bytes long");
+
+ System.out.print("\nAccept this certificate? [n] ");
+ String s = getline();
+ if (s.startsWith("y") || s.startsWith("Y")) {
+ return 0;
+ } else {
+ return -1;
+ }
+ }
+
+ public int onWriteNewConfig(byte[] buf) {
+ System.out.println("new config: " + buf.length + " bytes");
+ return 0;
+ }
+
+ public int onProcessAuthForm(LibOpenConnect.AuthForm authForm) {
+ System.out.println("AuthForm:");
+ System.out.println("+-banner: " + authForm.banner);
+ System.out.println("+-message: " + authForm.message);
+ System.out.println("+-error: " + authForm.error);
+ System.out.println("+-authID: " + authForm.authID);
+ System.out.println("+-method: " + authForm.method);
+ System.out.println("+-action: " + authForm.action);
+
+ for (FormOpt fo : authForm.opts) {
+ System.out.println("->FormOpt: ");
+ System.out.println(" +-type: " + fo.type);
+ System.out.println(" +-name: " + fo.name);
+ System.out.println(" +-label: " + fo.label);
+
+ if (fo.type == OC_FORM_OPT_SELECT) {
+ for (FormChoice fc : fo.choices) {
+ System.out.println("--->FormChoice: ");
+ System.out.println(" +-name: " + fc.name);
+ System.out.println(" +-label: " + fc.label);
+ System.out.println(" +-authType: " + fc.authType);
+ System.out.println(" +-overrideName: " + fc.overrideName);
+ System.out.println(" +-overrideLabel: " + fc.overrideLabel);
+ }
+ }
+
+ if (fo.type == OC_FORM_OPT_TEXT ||
+ fo.type == OC_FORM_OPT_PASSWORD ||
+ fo.type == OC_FORM_OPT_SELECT) {
+ System.out.print("\n" + fo.label);
+ fo.setValue(getline());
+ }
+ }
+
+ return AUTH_FORM_PARSED;
+ }
+
+ public void onProgress(int level, String msg) {
+ System.out.print("progress: level " + level + ", msg " + msg);
+ }
+ }
+
+ public static void main(String argv[]) {
+ System.loadLibrary("openconnect");
+ LibOpenConnect lib = new TestLib();
+
+ if (argv.length != 1) {
+ System.out.println("usage: LibTest <server_name>");
+ System.exit(1);
+ }
+
+ System.out.println("OpenConnect version: " + lib.getVersion());
+ System.out.println(" PKCS=" + lib.hasPKCS11Support() +
+ ", TSS=" + lib.hasTSSBlobSupport() +
+ ", STOKEN=" + lib.hasStokenSupport() +
+ ", OATH=" + lib.hasOATHSupport());
+ lib.setReportedOS("win");
+ //lib.setTokenMode(LibOpenConnect.OC_TOKEN_MODE_STOKEN, null);
+ if (new File("/tmp/csd.sh").exists()) {
+ lib.setCSDWrapper("/tmp/csd.sh");
+ }
+ lib.parseURL(argv[0]);
+
+ int ret = lib.obtainCookie();
+ if (ret < 0) {
+ System.out.println("obtainCookie() returned error");
+ } else if (ret > 0) {
+ System.out.println("Aborted by user");
+ } else {
+ System.out.println("urlpath: " + lib.getUrlpath());
+ System.out.println("hostname: " + lib.getHostname());
+ System.out.println("cookie: " + lib.getCookie());
+ }
+ }
+}
--
1.7.9.5
More information about the openconnect-devel
mailing list