Skip to content

Commit a6afdd2

Browse files
committed
Android: add specifying port number for SSH
Closes #220
1 parent de3d07a commit a6afdd2

File tree

18 files changed

+55
-3
lines changed

18 files changed

+55
-3
lines changed

android/app/src/main/cpp/vncconn.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -468,6 +468,7 @@ JNIEXPORT jboolean JNICALL Java_com_coboltforge_dontmind_multivnc_VNCConn_rfbIni
468468
jint compressLevel,
469469
jint qualityLevel,
470470
jstring ssh_host,
471+
jint ssh_port,
471472
jstring ssh_user,
472473
jstring ssh_password,
473474
jbyteArray ssh_priv_key,
@@ -507,10 +508,10 @@ JNIEXPORT jboolean JNICALL Java_com_coboltforge_dontmind_multivnc_VNCConn_rfbIni
507508
// ssh-tunneling, check whether it's password- or key-based
508509
if(cSshPassword) {
509510
// password-based
510-
tunnel = ssh_tunnel_open_with_password(cSshHost, 22, cSshUser, cSshPassword, cHost, port, cl, onSshFingerprintCheck, onSshError);
511+
tunnel = ssh_tunnel_open_with_password(cSshHost, ssh_port, cSshUser, cSshPassword, cHost, port, cl, onSshFingerprintCheck, onSshError);
511512
} else {
512513
// key-based
513-
tunnel = ssh_tunnel_open_with_privkey(cSshHost, 22, cSshUser, (char*)cSshPrivKey, cSshPrivKeyLen, cSshPrivKeyPassword, cHost, port, cl, onSshFingerprintCheck, onSshError);
514+
tunnel = ssh_tunnel_open_with_privkey(cSshHost, ssh_port, cSshUser, (char*)cSshPrivKey, cSshPrivKeyLen, cSshPrivKeyPassword, cHost, port, cl, onSshFingerprintCheck, onSshError);
514515
}
515516

516517
cl->serverHost = strdup("127.0.0.1");

android/app/src/main/java/com/coboltforge/dontmind/multivnc/VNCConn.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,7 @@ public void run() {
223223
COMPRESSMODEL.valueOf(connSettings.compressModel).toParameter(),
224224
QUALITYMODEL.valueOf(connSettings.qualityModel).toParameter(),
225225
connSettings.sshHost,
226+
connSettings.sshPort != null ? connSettings.sshPort : 22,
226227
connSettings.sshUsername,
227228
connSettings.sshPassword,
228229
connSettings.sshPrivkey,
@@ -400,6 +401,7 @@ private boolean sendCutText(String text) {
400401
private native boolean rfbInit(String host, int port, int repeaterId, int bytesPerPixel,
401402
String encodingsString, boolean hasCompress, boolean enableJPEG, int compressLevel, int qualityLevel,
402403
String ssh_host,
404+
int ssh_port,
403405
String ssh_user,
404406
String ssh_password,
405407
byte[] ssh_priv_key,

android/app/src/main/java/com/coboltforge/dontmind/multivnc/db/ConnectionBean.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,10 @@ data class ConnectionBean(
115115
@ColumnInfo(name = "SSH_HOST")
116116
var sshHost: String? = null,
117117

118+
@JvmField
119+
@ColumnInfo(name = "SSH_PORT")
120+
var sshPort: Int? = 22,
121+
118122
@JvmField
119123
@ColumnInfo(name = "SSH_USERNAME")
120124
var sshUsername: String? = null,

android/app/src/main/java/com/coboltforge/dontmind/multivnc/db/VncDatabase.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
@Database(entities = {ConnectionBean.class, MetaKeyBean.class, MetaList.class, SshKnownHost.class}, version = VncDatabase.VERSION, exportSchema = false)
2020
public abstract class VncDatabase extends RoomDatabase {
2121

22-
public static final int VERSION = 14;
22+
public static final int VERSION = 15;
2323
public static final String NAME = "VncDatabase";
2424

2525
public abstract MetaListDao getMetaListDao();
@@ -39,6 +39,7 @@ public static VncDatabase getInstance(Context context) {
3939
.allowMainThreadQueries()
4040
.addMigrations(MIGRATION_12_13)
4141
.addMigrations(MIGRATION_13_14)
42+
.addMigrations(MIGRATION_14_15)
4243
.build();
4344

4445
setupDefaultMetaList(instance);
@@ -153,4 +154,16 @@ public void migrate(@NonNull SupportSQLiteDatabase database) {
153154
")");
154155
}
155156
};
157+
158+
// this adds an SSH_PORT column to CONNECTION_BEAN table
159+
private static final Migration MIGRATION_14_15 = new Migration(14, 15) {
160+
@Override
161+
public void migrate(@NonNull SupportSQLiteDatabase database) {
162+
Log.i("VncDatabase", "Migrating to Room [14 -> 15]");
163+
164+
// add new SSH_PORT column to CONNECTION_BEAN, nullable as we don't want pre-v15
165+
// entries to show any value
166+
database.execSQL("ALTER TABLE CONNECTION_BEAN ADD SSH_PORT INTEGER");
167+
}
168+
};
156169
}

android/app/src/main/java/com/coboltforge/dontmind/multivnc/ui/ConnectionEditFragment.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ public class ConnectionEditFragment extends Fragment {
6060
private EditText textUsername;
6161
private SwitchMaterial sshSwitch;
6262
private EditText sshHostText;
63+
private EditText sshPortText;
6364
private EditText sshUsernameText;
6465
private RadioGroup sshCredentialsRadioGroup;
6566
private EditText sshPasswordText;
@@ -147,6 +148,7 @@ public void onClick(View v) {
147148
repeaterText = (TextView)view.findViewById(R.id.textRepeaterId);
148149

149150
sshHostText = view.findViewById(R.id.ssh_host_input);
151+
sshPortText = view.findViewById(R.id.ssh_port_input);
150152
sshUsernameText = view.findViewById(R.id.ssh_username_input);
151153
sshPasswordText = view.findViewById(R.id.ssh_password_input);
152154
sshPrivkeyImportButton = view.findViewById(R.id.ssh_privkey_import_button);
@@ -158,6 +160,7 @@ public void onClick(View v) {
158160
// and clear contents if disabled again
159161
if(!isChecked) {
160162
sshHostText.setText("");
163+
sshPortText.setText("");
161164
sshUsernameText.setText("");
162165
sshPasswordText.setText("");
163166
sshPrivkeyPasswordText.setText("");
@@ -274,6 +277,11 @@ public ConnectionBean getConnection() {
274277
conn.sshHost = sshHostText.getText().toString().trim();
275278
if(conn.sshHost.isEmpty())
276279
conn.sshHost = null;
280+
try {
281+
conn.sshPort = Integer.parseInt(sshPortText.getText().toString().trim());
282+
}
283+
catch (NumberFormatException ignored) {
284+
}
277285
conn.sshUsername = sshUsernameText.getText().toString().trim();
278286
if(conn.sshUsername.isEmpty())
279287
conn.sshUsername = null;
@@ -348,6 +356,8 @@ private void updateViews(View view, ConnectionBean conn) {
348356

349357
sshSwitch.setChecked(conn.sshHost != null);
350358
sshHostText.setText(conn.sshHost);
359+
if (conn.sshPort != null)
360+
sshPortText.setText(Integer.toString(conn.sshPort));
351361
sshUsernameText.setText(conn.sshUsername);
352362
if(conn.sshPrivkey != null) {
353363
sshCredentialsRadioGroup.check(R.id.ssh_privkey_radiobutton);

android/app/src/main/res/layout/connection_edit_fragment.xml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,16 @@
231231
android:hint="@string/ssh_host_hint"
232232
android:singleLine="true" />
233233

234+
235+
<EditText
236+
android:id="@+id/ssh_port_input"
237+
android:layout_width="fill_parent"
238+
android:layout_height="wrap_content"
239+
android:layout_weight="1"
240+
android:hint="@string/ssh_port_hint"
241+
android:inputType="number"
242+
android:singleLine="true" />
243+
234244
<EditText
235245
android:id="@+id/ssh_username_input"
236246
android:layout_width="fill_parent"

android/app/src/main/res/values-ca/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
<string name="repeater_hint">Identificació del servidor quan es connecta a un repetidor UltraVNC</string>
4545
<string name="ssh_caption">Túneles SSH</string>
4646
<string name="ssh_host_hint">Servidor SSH</string>
47+
<string name="ssh_port_hint">Port SSH</string>
4748
<string name="ssh_username_hint">Nom d\'usuari SSH</string>
4849
<string name="ssh_password">Contrasenya</string>
4950
<string name="ssh_privkey">Clau privada</string>

android/app/src/main/res/values-de/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
<string name="repeater_hint">"Server-ID bei Verbindung zu einem UltraVNC-Repeater"</string>
4343
<string name="ssh_caption">SSH-Tunnel</string>
4444
<string name="ssh_host_hint">SSH-Server</string>
45+
<string name="ssh_port_hint">SSH-Port</string>
4546
<string name="ssh_username_hint">SSH-Username</string>
4647
<string name="ssh_password">Passwort</string>
4748
<string name="ssh_privkey">Privater Schlüssel</string>

android/app/src/main/res/values-es/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
<string name="repeater_hint">Identificación del servidor cuando se conecta a un repetidor UltraVNC</string>
4545
<string name="ssh_caption">Tunelización SSH</string>
4646
<string name="ssh_host_hint">Servidor SSH</string>
47+
<string name="ssh_port_hint">Puerto SSH</string>
4748
<string name="ssh_username_hint">Nombre de usuario SSH</string>
4849
<string name="ssh_password">Clave</string>
4950
<string name="ssh_privkey">Llave privada</string>

android/app/src/main/res/values-gl/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
<string name="repeater_hint">Identificación do servidor cando se conecta a un repetidor UltraVNC</string>
4545
<string name="ssh_caption">Túneles SSH</string>
4646
<string name="ssh_host_hint">Servidor SSH</string>
47+
<string name="ssh_port_hint">Porto SSH</string>
4748
<string name="ssh_username_hint">Nome de usuario SSH</string>
4849
<string name="ssh_password">Contrasinal</string>
4950
<string name="ssh_privkey">Chave privada</string>

0 commit comments

Comments
 (0)