Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/Remmina/Remmina.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormyheroyuki <myheroyuki@outlook.com>2023-07-11 15:12:47 +0300
committermyheroyuki <myheroyuki@outlook.com>2023-07-11 15:12:47 +0300
commitfec1fb501d0df5e681887aa919ba171411bc7234 (patch)
treed05e9d648b60ea48835e11986a7a905fbee75d08
parente7c527ebec38feb2fd426a0cc0ab75df5399a1cf (diff)
Remote assistance now works in Remmina in the same way the /assistance flag works in FreeRDP
-rw-r--r--plugins/python_wrapper/python_wrapper_remmina.c1
-rw-r--r--plugins/rdp/rdp_plugin.c31
-rw-r--r--src/include/remmina/types.h1
-rw-r--r--src/remmina_file_editor.c96
-rw-r--r--src/remmina_plugin_manager.c2
5 files changed, 104 insertions, 27 deletions
diff --git a/plugins/python_wrapper/python_wrapper_remmina.c b/plugins/python_wrapper/python_wrapper_remmina.c
index 2dbb9d17e..c61ab09b5 100644
--- a/plugins/python_wrapper/python_wrapper_remmina.c
+++ b/plugins/python_wrapper/python_wrapper_remmina.c
@@ -661,6 +661,7 @@ PyMODINIT_FUNC python_wrapper_module_initialize(void)
PyModule_AddIntConstant(module, "PROTOCOL_SETTING_TYPE_SERVER", (long)REMMINA_PROTOCOL_SETTING_TYPE_SERVER);
PyModule_AddIntConstant(module, "PROTOCOL_SETTING_TYPE_PASSWORD", (long)REMMINA_PROTOCOL_SETTING_TYPE_PASSWORD);
PyModule_AddIntConstant(module, "PROTOCOL_SETTING_TYPE_RESOLUTION", (long)REMMINA_PROTOCOL_SETTING_TYPE_RESOLUTION);
+ PyModule_AddIntConstant(module, "PROTOCOL_SETTING_TYPE_ASSISTANCE", (long)REMMINA_PROTOCOL_SETTING_TYPE_ASSISTANCE);
PyModule_AddIntConstant(module, "PROTOCOL_SETTING_TYPE_KEYMAP", (long)REMMINA_PROTOCOL_SETTING_TYPE_KEYMAP);
PyModule_AddIntConstant(module, "PROTOCOL_SETTING_TYPE_TEXT", (long)REMMINA_PROTOCOL_SETTING_TYPE_TEXT);
PyModule_AddIntConstant(module, "PROTOCOL_SETTING_TYPE_SELECT", (long)REMMINA_PROTOCOL_SETTING_TYPE_SELECT);
diff --git a/plugins/rdp/rdp_plugin.c b/plugins/rdp/rdp_plugin.c
index 655660e5d..5f938c90e 100644
--- a/plugins/rdp/rdp_plugin.c
+++ b/plugins/rdp/rdp_plugin.c
@@ -1376,44 +1376,23 @@ static gboolean remmina_rdp_main(RemminaProtocolWidget *gp)
freerdp_settings_set_string(rfi->settings, FreeRDP_ConfigPath, datapath);
g_free(datapath);
-
-
-
-
-
- if (remmina_plugin_service->file_get_int(remminafile, "assistance_mode", FALSE)){
+ if (remmina_plugin_service->file_get_int(remminafile, "assistance_mode", 0)){
rdpAssistanceFile* file = freerdp_assistance_file_new();
if (!file)
REMMINA_PLUGIN_DEBUG("Failed to get file");
- status = freerdp_assistance_parse_file(file, "", "");
+ status = freerdp_assistance_parse_file(file,
+ remmina_plugin_service->file_get_string(remminafile, "assistance_file"),
+ remmina_plugin_service->file_get_string(remminafile, "assistance_pass"));
if (status < 0)
REMMINA_PLUGIN_DEBUG("Failed to get status");;
if (!freerdp_assistance_populate_settings_from_assistance_file(file, rfi->settings))
REMMINA_PLUGIN_DEBUG("Failed to populate");
-
-
}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
#if defined(PROXY_TYPE_IGNORE)
if (!remmina_plugin_service->file_get_int(remminafile, "useproxyenv", FALSE) ? TRUE : FALSE) {
REMMINA_PLUGIN_DEBUG("Not using system proxy settings");
@@ -2910,6 +2889,7 @@ static const RemminaProtocolSetting remmina_rdp_advanced_settings[] =
{ REMMINA_PROTOCOL_SETTING_TYPE_TEXT, "vc", N_("Static virtual channel"), FALSE, NULL, N_("<channel>[,<options>]") },
{ REMMINA_PROTOCOL_SETTING_TYPE_TEXT, "rdp2tcp", N_("TCP redirection"), FALSE, NULL, N_("/PATH/TO/rdp2tcp") },
{ REMMINA_PROTOCOL_SETTING_TYPE_TEXT, "rdp_reconnect_attempts", N_("Reconnect attempts number"), FALSE, NULL, N_("The maximum number of reconnect attempts upon an RDP disconnect (default: 20)") },
+ { REMMINA_PROTOCOL_SETTING_TYPE_ASSISTANCE, "assistance_mode", N_("Attempt to connect in assistnace mode"), TRUE, NULL },
{ REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "preferipv6", N_("Prefer IPv6 AAAA record over IPv4 A record"), TRUE, NULL, NULL },
{ REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "shareprinter", N_("Share printers"), TRUE, NULL, NULL },
{ REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "shareserial", N_("Share serial ports"), TRUE, NULL, NULL },
@@ -2935,7 +2915,6 @@ static const RemminaProtocolSetting remmina_rdp_advanced_settings[] =
{ REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "websockets", N_("Enable Gateway websockets support"), TRUE, NULL, NULL },
#endif
{ REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "no-suppress", N_("Update framebuffer even when not visible"), TRUE, NULL },
- { REMMINA_PROTOCOL_SETTING_TYPE_CHECK, "assistance_mode", N_("Attempt to connect in assistnace mode"), TRUE, NULL },
{ REMMINA_PROTOCOL_SETTING_TYPE_END, NULL, NULL, FALSE, NULL, NULL }
};
diff --git a/src/include/remmina/types.h b/src/include/remmina/types.h
index f81af78c2..43d7ec237 100644
--- a/src/include/remmina/types.h
+++ b/src/include/remmina/types.h
@@ -100,6 +100,7 @@ typedef enum {
REMMINA_PROTOCOL_SETTING_TYPE_SERVER,
REMMINA_PROTOCOL_SETTING_TYPE_PASSWORD,
REMMINA_PROTOCOL_SETTING_TYPE_RESOLUTION,
+ REMMINA_PROTOCOL_SETTING_TYPE_ASSISTANCE,
REMMINA_PROTOCOL_SETTING_TYPE_KEYMAP,
REMMINA_PROTOCOL_SETTING_TYPE_TEXT,
diff --git a/src/remmina_file_editor.c b/src/remmina_file_editor.c
index faafb7c80..719b092e2 100644
--- a/src/remmina_file_editor.c
+++ b/src/remmina_file_editor.c
@@ -111,6 +111,12 @@ struct _RemminaFileEditorPriv {
GtkWidget * resolution_custom_combo;
GtkWidget * keymap_combo;
+ GtkWidget * assistance_toggle;
+ GtkWidget * assistance_file;
+ GtkWidget * assistance_password;
+ GtkWidget * assistance_file_label;
+ GtkWidget * assistance_password_label;
+
GtkWidget * behavior_autostart_check;
GtkWidget * behavior_precommand_entry;
GtkWidget * behavior_postcommand_entry;
@@ -365,6 +371,27 @@ static void remmina_file_editor_ssh_tunnel_server_custom_radio_on_toggled(GtkTog
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gfe->priv->ssh_tunnel_server_custom_radio))));
}
+
+static void remmina_file_editor_assistance_enabled_check_on_toggled(GtkToggleButton *togglebutton,
+ RemminaFileEditor *gfe)
+{
+ TRACE_CALL(__func__);
+ RemminaFileEditorPriv *priv = gfe->priv;
+ gboolean enabled = TRUE;
+
+ if (gfe->priv->assistance_toggle) {
+ enabled = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gfe->priv->assistance_toggle));
+ if (gfe->priv->assistance_file)
+ gtk_widget_set_sensitive(GTK_WIDGET(gfe->priv->assistance_file), enabled);
+ if (gfe->priv->assistance_password)
+ gtk_widget_set_sensitive(GTK_WIDGET(gfe->priv->assistance_password), enabled);
+ if (gfe->priv->assistance_file_label)
+ gtk_widget_set_sensitive(GTK_WIDGET(gfe->priv->assistance_file_label), enabled);
+ if (gfe->priv->assistance_password_label)
+ gtk_widget_set_sensitive(GTK_WIDGET(gfe->priv->assistance_password_label), enabled);
+ }
+}
+
static void remmina_file_editor_ssh_tunnel_enabled_check_on_toggled(GtkToggleButton *togglebutton,
RemminaFileEditor *gfe, RemminaProtocolSSHSetting ssh_setting)
{
@@ -617,6 +644,57 @@ static void remmina_file_editor_create_resolution(RemminaFileEditor *gfe, const
g_free(res_str);
}
+
+static void remmina_file_editor_create_assistance(RemminaFileEditor *gfe, const RemminaProtocolSetting *setting,
+ GtkWidget *grid, gint row)
+{
+ TRACE_CALL(__func__);
+ GtkWidget *widget;
+ int assistance_mode;
+
+ assistance_mode = remmina_file_get_int(gfe->priv->remmina_file, "assistance_mode", 0);
+
+
+ widget = gtk_toggle_button_new_with_label(_("Assistance Mode"));
+ gtk_widget_set_halign(widget, GTK_ALIGN_START);
+ gtk_widget_show(widget);
+ gtk_grid_attach(GTK_GRID(grid), widget, 0, row, 1, 1);
+ gtk_toggle_button_set_active(widget, remmina_file_get_int(gfe->priv->remmina_file, "assistance_mode", 0));
+ gfe->priv->assistance_toggle = widget;
+ g_signal_connect(widget, "toggled", G_CALLBACK(remmina_file_editor_assistance_enabled_check_on_toggled), gfe);
+
+
+ widget = gtk_label_new("Assistance file");
+ gtk_widget_set_halign(widget, GTK_ALIGN_END);
+ gtk_widget_show(widget);
+ gtk_grid_attach(GTK_GRID(grid), widget, 0, row+1, 1, 1);
+ gfe->priv->assistance_file_label = widget;
+
+ widget = gtk_entry_new();
+ gtk_widget_set_halign(widget, GTK_ALIGN_START);
+ gtk_widget_show(widget);
+ gtk_entry_set_text(GTK_ENTRY(widget), remmina_file_get_string(gfe->priv->remmina_file, "assistance_file"));
+ gtk_grid_attach(GTK_GRID(grid), widget, 1, row+1, 1, 1);
+ gfe->priv->assistance_file = widget;
+
+ widget = gtk_label_new("Assistance Password");
+ gtk_widget_set_halign(widget, GTK_ALIGN_END);
+ gtk_widget_show(widget);
+ gtk_grid_attach(GTK_GRID(grid), widget, 0, row+2, 1, 1);
+ gfe->priv->assistance_password_label = widget;
+
+ widget = gtk_entry_new();
+ gtk_widget_set_halign(widget, GTK_ALIGN_START);
+ gtk_widget_show(widget);
+ gtk_entry_set_text(GTK_ENTRY(widget), remmina_file_get_string(gfe->priv->remmina_file, "assistance_pass"));
+ gtk_grid_attach(GTK_GRID(grid), widget, 1, row+2, 1, 1);
+ gfe->priv->assistance_password = widget;
+
+ remmina_file_editor_assistance_enabled_check_on_toggled(NULL, gfe);
+
+}
+
+
static GtkWidget *remmina_file_editor_create_text2(RemminaFileEditor *gfe, GtkWidget *grid,
gint row, gint col, const gchar *label, const gchar *value, gint left,
gint right, gchar *setting_name)
@@ -946,7 +1024,12 @@ static void remmina_file_editor_create_settings(RemminaFileEditor *gfe, GtkWidge
case REMMINA_PROTOCOL_SETTING_TYPE_RESOLUTION:
remmina_file_editor_create_resolution(gfe, settings, grid, grid_row);
- grid_row += 1;
+ grid_row ++;
+ break;
+
+ case REMMINA_PROTOCOL_SETTING_TYPE_ASSISTANCE:
+ remmina_file_editor_create_assistance(gfe, settings, grid, grid_row);
+ grid_row += 3;
break;
case REMMINA_PROTOCOL_SETTING_TYPE_KEYMAP:
@@ -1679,6 +1762,17 @@ static GError *remmina_file_editor_update(RemminaFileEditor * gfe,
remmina_file_set_int(priv->remmina_file, "resolution_height", res_h);
}
+ if (priv->assistance_toggle){
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->assistance_toggle))) {
+ remmina_file_set_string(priv->remmina_file, "assistance_file", gtk_entry_get_text(priv->assistance_file));
+ remmina_file_set_string(priv->remmina_file, "assistance_pass", gtk_entry_get_text(priv->assistance_password));
+ remmina_file_set_int(priv->remmina_file, "assistance_mode", 1);
+ }else{
+ remmina_file_set_int(priv->remmina_file, "assistance_mode", 0);
+ }
+
+ }
+
if (priv->keymap_combo)
remmina_file_set_string(priv->remmina_file, "keymap",
remmina_public_combo_get_active_text(GTK_COMBO_BOX(priv->keymap_combo)));
diff --git a/src/remmina_plugin_manager.c b/src/remmina_plugin_manager.c
index 1b056ea34..6a0f24483 100644
--- a/src/remmina_plugin_manager.c
+++ b/src/remmina_plugin_manager.c
@@ -460,6 +460,8 @@ const gchar *remmina_plugin_manager_get_canonical_setting_name(const RemminaProt
return "password";
if (setting->type == REMMINA_PROTOCOL_SETTING_TYPE_RESOLUTION)
return "resolution";
+ if (setting->type == REMMINA_PROTOCOL_SETTING_TYPE_ASSISTANCE)
+ return "assistance_mode";
return "missing_setting_name_into_plugin_RemminaProtocolSetting";
}
return setting->name;