From ed2d941e830cd6f2c5af7ed5b66523476f19af83 Mon Sep 17 00:00:00 2001 From: AnhQuan Nguyen Date: Sun, 17 Jan 2021 12:01:05 -0800 Subject: [PATCH 1/2] add remote forwarding --- .../main/java/sq/flutter/ssh/SshPlugin.java | 25 +++++++++++++++++++ lib/ssh.dart | 10 ++++++++ 2 files changed, 35 insertions(+) diff --git a/android/src/main/java/sq/flutter/ssh/SshPlugin.java b/android/src/main/java/sq/flutter/ssh/SshPlugin.java index 2c7b8c8..e2e6710 100644 --- a/android/src/main/java/sq/flutter/ssh/SshPlugin.java +++ b/android/src/main/java/sq/flutter/ssh/SshPlugin.java @@ -144,6 +144,8 @@ public void onMethodCall(MethodCall call, Result rawResult) { execute((HashMap) call.arguments, result); } else if (call.method.equals("portForwardL")) { portForwardL((HashMap) call.arguments, result); + } else if (call.method.equals("portForwardL")) { + portForwardR((HashMap) call.arguments, result); } else if (call.method.equals("startShell")) { startShell((HashMap) call.arguments, result); } else if (call.method.equals("writeToShell")) { @@ -318,6 +320,29 @@ public void run() { }).start(); } + private void portForwardR(final HashMap args, final Result result) { + new Thread(new Runnable() { + public void run() { + try { + SSHClient client = getClient(args.get("id").toString(), result); + if (client == null) + return; + + Session session = client._session; + int rport = Integer.parseInt(args.get("rport").toString()); + int lport = Integer.parseInt(args.get("lport").toString()); + String rhost = args.get("rhost").toString(); + int assinged_port=session.setPortForwardingR(rport, rhost, lport); + + result.success(Integer.toString(assinged_port)); + } catch (JSchException error) { + Log.e(LOGTAG, "Error connecting portforwardL:" + error.getMessage()); + result.error("portforwardL_failure", error.getMessage(), null); + } + } + }).start(); + } + private void startShell(final HashMap args, final Result result) { new Thread(new Runnable() { public void run() { diff --git a/lib/ssh.dart b/lib/ssh.dart index 8aa73b5..a63a289 100644 --- a/lib/ssh.dart +++ b/lib/ssh.dart @@ -88,6 +88,16 @@ class SSHClient { return result; } + Future portForwardR(int rport, int lport, String rhost) async { + var result = await _channel.invokeMethod('portForwardR', { + "id": id, + "rhost": rhost, + "rport": rport, + "lport": lport + }); + return result; + } + Future startShell({ String ptyType = "vanilla", // vanilla, vt100, vt102, vt220, ansi, xterm Callback callback, From 57b3fde6aec6ef046443775c80c8237daf3f5067 Mon Sep 17 00:00:00 2001 From: AnhQuan Nguyen Date: Mon, 18 Jan 2021 11:51:20 -0800 Subject: [PATCH 2/2] fix forwadR: setPortForwardingR sctually returns void success needs arg remote port forward works --- android/build.gradle | 2 +- android/src/main/java/sq/flutter/ssh/SshPlugin.java | 11 +++++------ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/android/build.gradle b/android/build.gradle index c3a7d0a..9a104f5 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -8,7 +8,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.1.2' + classpath 'com.android.tools.build:gradle:4.1.0' } } diff --git a/android/src/main/java/sq/flutter/ssh/SshPlugin.java b/android/src/main/java/sq/flutter/ssh/SshPlugin.java index e2e6710..4bd6300 100644 --- a/android/src/main/java/sq/flutter/ssh/SshPlugin.java +++ b/android/src/main/java/sq/flutter/ssh/SshPlugin.java @@ -144,7 +144,7 @@ public void onMethodCall(MethodCall call, Result rawResult) { execute((HashMap) call.arguments, result); } else if (call.method.equals("portForwardL")) { portForwardL((HashMap) call.arguments, result); - } else if (call.method.equals("portForwardL")) { + } else if (call.method.equals("portForwardR")) { portForwardR((HashMap) call.arguments, result); } else if (call.method.equals("startShell")) { startShell((HashMap) call.arguments, result); @@ -332,12 +332,11 @@ public void run() { int rport = Integer.parseInt(args.get("rport").toString()); int lport = Integer.parseInt(args.get("lport").toString()); String rhost = args.get("rhost").toString(); - int assinged_port=session.setPortForwardingR(rport, rhost, lport); - - result.success(Integer.toString(assinged_port)); + session.setPortForwardingR(rport, rhost, lport); + result.success(args.get("lport").toString()); } catch (JSchException error) { - Log.e(LOGTAG, "Error connecting portforwardL:" + error.getMessage()); - result.error("portforwardL_failure", error.getMessage(), null); + Log.e(LOGTAG, "Error connecting portforwardR:" + error.getMessage()); + result.error("portforwardR_failure", error.getMessage(), null); } } }).start();