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:
-rw-r--r--plugins/python_wrapper/python_wrapper_remmina.c1
-rw-r--r--plugins/rdp/rdp_plugin.c32
-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, 131 insertions, 1 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 5c2a36114..807b63fa1 100644
--- a/plugins/rdp/rdp_plugin.c
+++ b/plugins/rdp/rdp_plugin.c
@@ -58,6 +58,7 @@
#include <cairo/cairo.h>
#endif
#include <freerdp/addin.h>
+#include <freerdp/assistance.h>
#include <freerdp/settings.h>
#include <freerdp/freerdp.h>
#include <freerdp/constants.h>
@@ -1375,6 +1376,36 @@ 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", 0)){
+ rdpAssistanceFile* file = freerdp_assistance_file_new();
+ if (!file){
+ REMMINA_PLUGIN_DEBUG("Failed to allocate Assistance File structure");
+ return FALSE;
+ }
+
+ if (remmina_plugin_service->file_get_string(remminafile, "assistance_file") == NULL ||
+ remmina_plugin_service->file_get_string(remminafile, "assistance_pass") == NULL ){
+
+ REMMINA_PLUGIN_DEBUG("Assistance File and Password are not set while Assistance Mode is enabled");
+ return FALSE;
+ }
+
+ 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 Parse Assistance File");
+ return FALSE;
+ }
+
+
+ if (!freerdp_assistance_populate_settings_from_assistance_file(file, rfi->settings))
+ REMMINA_PLUGIN_DEBUG("Failed to populate settings from Assistance File");
+ return FALSE;
+ }
+
+
#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");
@@ -2871,6 +2902,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 },
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 d578c4aad..27c248644 100644
--- a/src/remmina_plugin_manager.c
+++ b/src/remmina_plugin_manager.c
@@ -462,6 +462,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;