Remmina - The GTK+ Remote Desktop Client  v1.4.2
Remmina is a remote desktop client written in GTK+, aiming to be useful for system administrators and travellers, who need to work with lots of remote computers in front of either large monitors or tiny netbooks. Remmina supports multiple network protocols in an integrated and consistent user interface. Currently RDP, VNC, NX, XDMCP and SSH are supported.
rdp_plugin.c File Reference

Go to the source code of this file.

Functions

static BOOL rf_process_event_queue (RemminaProtocolWidget *gp)
 
static gboolean remmina_rdp_tunnel_init (RemminaProtocolWidget *gp)
 
BOOL rf_auto_reconnect (rfContext *rfi)
 
BOOL rf_begin_paint (rdpContext *context)
 
BOOL rf_end_paint (rdpContext *context)
 
static BOOL rf_desktop_resize (rdpContext *context)
 
static BOOL rf_play_sound (rdpContext *context, const PLAY_SOUND_UPDATE *play_sound)
 
static BOOL rf_keyboard_set_indicators (rdpContext *context, UINT16 led_flags)
 
BOOL rf_keyboard_set_ime_status (rdpContext *context, UINT16 imeId, UINT32 imeState, UINT32 imeConvMode)
 
static BOOL remmina_rdp_pre_connect (freerdp *instance)
 
static BOOL remmina_rdp_post_connect (freerdp *instance)
 
static BOOL remmina_rdp_authenticate (freerdp *instance, char **username, char **password, char **domain)
 
static BOOL remmina_rdp_gw_authenticate (freerdp *instance, char **username, char **password, char **domain)
 
static DWORD remmina_rdp_verify_certificate (freerdp *instance, const char *common_name, const char *subject, const char *issuer, const char *fingerprint, BOOL host_mismatch)
 
static DWORD remmina_rdp_verify_changed_certificate (freerdp *instance, const char *common_name, const char *subject, const char *issuer, const char *new_fingerprint, const char *old_subject, const char *old_issuer, const char *old_fingerprint)
 
static void remmina_rdp_post_disconnect (freerdp *instance)
 
static void remmina_rdp_main_loop (RemminaProtocolWidget *gp)
 
int remmina_rdp_load_static_channel_addin (rdpChannels *channels, rdpSettings *settings, char *name, void *data)
 
gchar * remmina_rdp_find_prdriver (char *smap, char *prn)
 
int remmina_rdp_set_printers (void *user_data, unsigned flags, cups_dest_t *dest)
 Callback function used by cupsEnumDests. More...
 
static void remmina_rdp_send_ctrlaltdel (RemminaProtocolWidget *gp)
 
static gboolean remmina_rdp_main (RemminaProtocolWidget *gp)
 
static void rfi_uninit (rfContext *rfi)
 
static gboolean complete_cleanup_on_main_thread (gpointer data)
 
static gpointer remmina_rdp_main_thread (gpointer data)
 
static void remmina_rdp_init (RemminaProtocolWidget *gp)
 
static gboolean remmina_rdp_open_connection (RemminaProtocolWidget *gp)
 
static gboolean remmina_rdp_close_connection (RemminaProtocolWidget *gp)
 
static gboolean remmina_rdp_query_feature (RemminaProtocolWidget *gp, const RemminaProtocolFeature *feature)
 
static void remmina_rdp_call_feature (RemminaProtocolWidget *gp, const RemminaProtocolFeature *feature)
 
static void remmina_rdp_keystroke (RemminaProtocolWidget *gp, const guint keystrokes[], const gint keylen)
 
static gboolean remmina_rdp_get_screenshot (RemminaProtocolWidget *gp, RemminaPluginScreenshotData *rpsd)
 
static char * buildconfig_strstr (const char *bc, const char *option)
 
G_MODULE_EXPORT gboolean remmina_plugin_entry (RemminaPluginService *service)
 

Variables

RemminaPluginServiceremmina_plugin_service = NULL
 
static char remmina_rdp_plugin_default_drive_name [] = "RemminaDisk"
 
static BOOL gfx_h264_available = FALSE
 
static gpointer colordepth_list []
 
static gpointer quality_list []
 
static gpointer sound_list []
 
static gpointer security_list []
 
static gpointer gwtransp_list []
 
static gchar clientbuild_list []
 
static gchar clientbuild_tooltip []
 
static const RemminaProtocolSetting remmina_rdp_basic_settings []
 
static const RemminaProtocolSetting remmina_rdp_advanced_settings []
 
static const RemminaProtocolFeature remmina_rdp_features []
 
static char remmina_plugin_rdp_version [256]
 
static RemminaProtocolPlugin remmina_rdp
 
static RemminaFilePlugin remmina_rdpf
 
static RemminaPrefPlugin remmina_rdps
 

Function Documentation

◆ buildconfig_strstr()

static char* buildconfig_strstr ( const char *  bc,
const char *  option 
)
static

Definition at line 2147 of file rdp_plugin.c.

◆ complete_cleanup_on_main_thread()

static gboolean complete_cleanup_on_main_thread ( gpointer  data)
static

Definition at line 1676 of file rdp_plugin.c.

◆ remmina_plugin_entry()

G_MODULE_EXPORT gboolean remmina_plugin_entry ( RemminaPluginService service)

Definition at line 2167 of file rdp_plugin.c.

◆ remmina_rdp_authenticate()

static BOOL remmina_rdp_authenticate ( freerdp *  instance,
char **  username,
char **  password,
char **  domain 
)
static

Definition at line 561 of file rdp_plugin.c.

◆ remmina_rdp_call_feature()

static void remmina_rdp_call_feature ( RemminaProtocolWidget gp,
const RemminaProtocolFeature feature 
)
static

Definition at line 1849 of file rdp_plugin.c.

◆ remmina_rdp_close_connection()

static gboolean remmina_rdp_close_connection ( RemminaProtocolWidget gp)
static

Definition at line 1808 of file rdp_plugin.c.

◆ remmina_rdp_find_prdriver()

gchar* remmina_rdp_find_prdriver ( char *  smap,
char *  prn 
)

Definition at line 823 of file rdp_plugin.c.

◆ remmina_rdp_get_screenshot()

static gboolean remmina_rdp_get_screenshot ( RemminaProtocolWidget gp,
RemminaPluginScreenshotData rpsd 
)
static
Todo:
we should lock FreeRDP subthread to update rfi->primary_buffer, rfi->gdi and w/h, from here to memcpy, but… how ?

Definition at line 1900 of file rdp_plugin.c.

◆ remmina_rdp_gw_authenticate()

static BOOL remmina_rdp_gw_authenticate ( freerdp *  instance,
char **  username,
char **  password,
char **  domain 
)
static

Definition at line 620 of file rdp_plugin.c.

◆ remmina_rdp_init()

static void remmina_rdp_init ( RemminaProtocolWidget gp)
static

Definition at line 1732 of file rdp_plugin.c.

◆ remmina_rdp_keystroke()

static void remmina_rdp_keystroke ( RemminaProtocolWidget gp,
const guint  keystrokes[],
const gint  keylen 
)
static

Definition at line 1891 of file rdp_plugin.c.

◆ remmina_rdp_load_static_channel_addin()

int remmina_rdp_load_static_channel_addin ( rdpChannels *  channels,
rdpSettings *  settings,
char *  name,
void *  data 
)

Definition at line 792 of file rdp_plugin.c.

◆ remmina_rdp_main()

static gboolean remmina_rdp_main ( RemminaProtocolWidget gp)
static

Proxy support Proxy settings are hidden at the moment as an advanced feature

multitransport enables RDP8 UDP support

Definition at line 986 of file rdp_plugin.c.

◆ remmina_rdp_main_loop()

static void remmina_rdp_main_loop ( RemminaProtocolWidget gp)
static

Definition at line 734 of file rdp_plugin.c.

◆ remmina_rdp_main_thread()

static gpointer remmina_rdp_main_thread ( gpointer  data)
static

Definition at line 1706 of file rdp_plugin.c.

◆ remmina_rdp_open_connection()

static gboolean remmina_rdp_open_connection ( RemminaProtocolWidget gp)
static

Definition at line 1765 of file rdp_plugin.c.

◆ remmina_rdp_post_connect()

static BOOL remmina_rdp_post_connect ( freerdp *  instance)
static

Definition at line 497 of file rdp_plugin.c.

◆ remmina_rdp_post_disconnect()

static void remmina_rdp_post_disconnect ( freerdp *  instance)
static

Definition at line 718 of file rdp_plugin.c.

◆ remmina_rdp_pre_connect()

static BOOL remmina_rdp_pre_connect ( freerdp *  instance)
static

Definition at line 464 of file rdp_plugin.c.

◆ remmina_rdp_query_feature()

static gboolean remmina_rdp_query_feature ( RemminaProtocolWidget gp,
const RemminaProtocolFeature feature 
)
static

Definition at line 1843 of file rdp_plugin.c.

◆ remmina_rdp_send_ctrlaltdel()

static void remmina_rdp_send_ctrlaltdel ( RemminaProtocolWidget gp)
static

Definition at line 976 of file rdp_plugin.c.

◆ remmina_rdp_set_printers()

int remmina_rdp_set_printers ( void *  user_data,
unsigned  flags,
cups_dest_t *  dest 
)

Callback function used by cupsEnumDests.

  • For each enumerated local printer tries to set the Printer Name and Driver.
    Returns
    1 if there are other printers to scan or 0 when it's done.
Warning
printer-make-and-model is not always the same as on the Windows, therefore it fails finding to right one and it fails to add the printer.

We pass NULL and we do not check for errors. The following code is how it is supposed to work.

Todo:
Ask CUPS mailing list for help.
const char *model = cupsGetOption("printer-make-and-model",
dest->num_options,
dest->options);

When remmina_rdp_find_prdriver doesn't return a DriverName it means that we don't want to share that printer

Definition at line 898 of file rdp_plugin.c.

◆ remmina_rdp_tunnel_init()

static gboolean remmina_rdp_tunnel_init ( RemminaProtocolWidget gp)
static

Definition at line 176 of file rdp_plugin.c.

◆ remmina_rdp_verify_certificate()

static DWORD remmina_rdp_verify_certificate ( freerdp *  instance,
const char *  common_name,
const char *  subject,
const char *  issuer,
const char *  fingerprint,
BOOL  host_mismatch 
)
static

Definition at line 680 of file rdp_plugin.c.

◆ remmina_rdp_verify_changed_certificate()

static DWORD remmina_rdp_verify_changed_certificate ( freerdp *  instance,
const char *  common_name,
const char *  subject,
const char *  issuer,
const char *  new_fingerprint,
const char *  old_subject,
const char *  old_issuer,
const char *  old_fingerprint 
)
static

Definition at line 698 of file rdp_plugin.c.

◆ rf_auto_reconnect()

BOOL rf_auto_reconnect ( rfContext rfi)

Definition at line 233 of file rdp_plugin.c.

◆ rf_begin_paint()

BOOL rf_begin_paint ( rdpContext *  context)

Definition at line 312 of file rdp_plugin.c.

◆ rf_desktop_resize()

static BOOL rf_desktop_resize ( rdpContext *  context)
static

Definition at line 371 of file rdp_plugin.c.

◆ rf_end_paint()

BOOL rf_end_paint ( rdpContext *  context)

Definition at line 327 of file rdp_plugin.c.

◆ rf_keyboard_set_ime_status()

BOOL rf_keyboard_set_ime_status ( rdpContext *  context,
UINT16  imeId,
UINT32  imeState,
UINT32  imeConvMode 
)

Definition at line 451 of file rdp_plugin.c.

◆ rf_keyboard_set_indicators()

static BOOL rf_keyboard_set_indicators ( rdpContext *  context,
UINT16  led_flags 
)
static

Definition at line 422 of file rdp_plugin.c.

◆ rf_play_sound()

static BOOL rf_play_sound ( rdpContext *  context,
const PLAY_SOUND_UPDATE *  play_sound 
)
static

Definition at line 406 of file rdp_plugin.c.

◆ rf_process_event_queue()

static BOOL rf_process_event_queue ( RemminaProtocolWidget gp)
static

Definition at line 94 of file rdp_plugin.c.

◆ rfi_uninit()

static void rfi_uninit ( rfContext rfi)
static

Definition at line 1641 of file rdp_plugin.c.

Variable Documentation

◆ clientbuild_list

gchar clientbuild_list[]
static
Initial value:
=
N_("2600 (Windows XP), 7601 (Windows Vista/7), 9600 (Windows 8 and newer)")
N_("Unable to connect to VNC server")
Definition: vnc_plugin.c:907

Definition at line 1996 of file rdp_plugin.c.

◆ clientbuild_tooltip

gchar clientbuild_tooltip[]
static
Initial value:
=
N_("Used i.a. by terminal services in smart card channel to distinguish client capabilities:\n"
" • < 4034: Windows XP base smart card functions\n"
" • 4034-7064: Windows Vista/7: SCardReadCache(), SCardWriteCache(),\n"
" SCardGetTransmitCount()\n"
" • >= 7065: Windows 8 and newer: SCardGetReaderIcon(), SCardGetDeviceTypeId()")
N_("Unable to connect to VNC server")
Definition: vnc_plugin.c:907

Definition at line 1999 of file rdp_plugin.c.

◆ colordepth_list

gpointer colordepth_list[]
static
Initial value:
=
{
"66", N_("GFX AVC444 (32 bpp)"),
"65", N_("GFX AVC420 (32 bpp)"),
"64", N_("GFX RFX (32 bpp)"),
"0", N_("RemoteFX (32 bpp)"),
"32", N_("True colour (32 bpp)"),
"24", N_("True colour (24 bpp)"),
"16", N_("High colour (16 bpp)"),
"15", N_("High colour (15 bpp)"),
"8", N_("256 colours (8 bpp)"),
NULL
}
N_("Unable to connect to VNC server")
Definition: vnc_plugin.c:907

Definition at line 1940 of file rdp_plugin.c.

◆ gfx_h264_available

BOOL gfx_h264_available = FALSE
static

Definition at line 92 of file rdp_plugin.c.

◆ gwtransp_list

gpointer gwtransp_list[]
static
Initial value:
=
{
"http", "HTTP",
"rpc", "RPC",
"auto", "Auto",
NULL
}

Definition at line 1988 of file rdp_plugin.c.

◆ quality_list

gpointer quality_list[]
static
Initial value:
=
{
"0", N_("Poor (fastest)"),
"1", N_("Medium"),
"2", N_("Good"),
"9", N_("Best (slowest)"),
NULL
}
N_("Unable to connect to VNC server")
Definition: vnc_plugin.c:907

Definition at line 1956 of file rdp_plugin.c.

◆ remmina_plugin_rdp_version

char remmina_plugin_rdp_version[256]
static

Definition at line 2095 of file rdp_plugin.c.

◆ remmina_plugin_service

RemminaPluginService* remmina_plugin_service = NULL

Definition at line 89 of file rdp_plugin.c.

◆ remmina_rdp

RemminaProtocolPlugin remmina_rdp
static
Initial value:
=
{
"RDP",
N_("RDP - Remote Desktop Protocol"),
GETTEXT_PACKAGE,
"remmina-rdp-symbolic",
"remmina-rdp-ssh-symbolic",
}
static gboolean remmina_rdp_open_connection(RemminaProtocolWidget *gp)
Definition: rdp_plugin.c:1765
static gboolean remmina_rdp_query_feature(RemminaProtocolWidget *gp, const RemminaProtocolFeature *feature)
Definition: rdp_plugin.c:1843
static const RemminaProtocolSetting remmina_rdp_advanced_settings[]
Definition: rdp_plugin.c:2036
static void remmina_rdp_init(RemminaProtocolWidget *gp)
Definition: rdp_plugin.c:1732
static const RemminaProtocolFeature remmina_rdp_features[]
Definition: rdp_plugin.c:2084
static void remmina_rdp_keystroke(RemminaProtocolWidget *gp, const guint keystrokes[], const gint keylen)
Definition: rdp_plugin.c:1891
static gboolean remmina_rdp_close_connection(RemminaProtocolWidget *gp)
Definition: rdp_plugin.c:1808
static char remmina_plugin_rdp_version[256]
Definition: rdp_plugin.c:2095
static const RemminaProtocolSetting remmina_rdp_basic_settings[]
Definition: rdp_plugin.c:2015
static gboolean remmina_rdp_get_screenshot(RemminaProtocolWidget *gp, RemminaPluginScreenshotData *rpsd)
Definition: rdp_plugin.c:1900
static void remmina_rdp_call_feature(RemminaProtocolWidget *gp, const RemminaProtocolFeature *feature)
Definition: rdp_plugin.c:1849
N_("Unable to connect to VNC server")
Definition: vnc_plugin.c:907

Definition at line 2098 of file rdp_plugin.c.

◆ remmina_rdp_advanced_settings

const RemminaProtocolSetting remmina_rdp_advanced_settings[]
static

Definition at line 2036 of file rdp_plugin.c.

◆ remmina_rdp_basic_settings

const RemminaProtocolSetting remmina_rdp_basic_settings[]
static
Initial value:
=
{
{ REMMINA_PROTOCOL_SETTING_TYPE_SERVER, "server", NULL, FALSE, NULL, NULL },
{ REMMINA_PROTOCOL_SETTING_TYPE_TEXT, "username", N_("Username"), FALSE, NULL, NULL },
{ REMMINA_PROTOCOL_SETTING_TYPE_PASSWORD, "password", N_("Password"), FALSE, NULL, NULL },
{ REMMINA_PROTOCOL_SETTING_TYPE_TEXT, "domain", N_("Domain"), FALSE, NULL, NULL },
{ REMMINA_PROTOCOL_SETTING_TYPE_RESOLUTION, "resolution", NULL, FALSE, NULL, NULL },
{ REMMINA_PROTOCOL_SETTING_TYPE_SELECT, "colordepth", N_("Colour depth"), FALSE, colordepth_list, NULL },
{ REMMINA_PROTOCOL_SETTING_TYPE_FOLDER, "sharefolder", N_("Share folder"), FALSE, NULL, NULL },
{ REMMINA_PROTOCOL_SETTING_TYPE_END, NULL, NULL, FALSE, NULL, NULL }
}
static gpointer colordepth_list[]
Definition: rdp_plugin.c:1940
N_("Unable to connect to VNC server")
Definition: vnc_plugin.c:907

Definition at line 2015 of file rdp_plugin.c.

◆ remmina_rdp_features

const RemminaProtocolFeature remmina_rdp_features[]
static
Initial value:
=
{
{ REMMINA_PROTOCOL_FEATURE_TYPE_TOOL, REMMINA_RDP_FEATURE_TOOL_REFRESH, N_("Refresh"), NULL, NULL },
{ REMMINA_PROTOCOL_FEATURE_TYPE_SCALE, REMMINA_RDP_FEATURE_SCALE, NULL, NULL, NULL },
{ REMMINA_PROTOCOL_FEATURE_TYPE_DYNRESUPDATE, REMMINA_RDP_FEATURE_DYNRESUPDATE, NULL, NULL, NULL },
{ REMMINA_PROTOCOL_FEATURE_TYPE_TOOL, REMMINA_RDP_FEATURE_TOOL_SENDCTRLALTDEL, N_("Send Ctrl+Alt+Delete"), NULL, NULL },
{ REMMINA_PROTOCOL_FEATURE_TYPE_UNFOCUS, REMMINA_RDP_FEATURE_UNFOCUS, NULL, NULL, NULL },
{ REMMINA_PROTOCOL_FEATURE_TYPE_END, 0, NULL, NULL, NULL }
}
N_("Unable to connect to VNC server")
Definition: vnc_plugin.c:907

Definition at line 2084 of file rdp_plugin.c.

◆ remmina_rdp_plugin_default_drive_name

char remmina_rdp_plugin_default_drive_name[] = "RemminaDisk"
static

Definition at line 90 of file rdp_plugin.c.

◆ remmina_rdpf

RemminaFilePlugin remmina_rdpf
static
Initial value:
=
{
"RDPF",
N_("RDP - RDP File Handler"),
GETTEXT_PACKAGE,
NULL
}
gboolean remmina_rdp_file_export(RemminaFile *remminafile, const gchar *to_file)
Definition: rdp_file.c:278
gboolean remmina_rdp_file_export_test(RemminaFile *remminafile)
Definition: rdp_file.c:207
RemminaFile * remmina_rdp_file_import(const gchar *from_file)
Definition: rdp_file.c:187
static char remmina_plugin_rdp_version[256]
Definition: rdp_plugin.c:2095
gboolean remmina_rdp_file_import_test(const gchar *from_file)
Definition: rdp_file.c:41
N_("Unable to connect to VNC server")
Definition: vnc_plugin.c:907

Definition at line 2121 of file rdp_plugin.c.

◆ remmina_rdps

RemminaPrefPlugin remmina_rdps
static
Initial value:
=
{
"RDPS",
N_("RDP - Preferences"),
GETTEXT_PACKAGE,
"RDP",
}
GtkWidget * remmina_rdp_settings_new(void)
Definition: rdp_settings.c:597
static char remmina_plugin_rdp_version[256]
Definition: rdp_plugin.c:2095
N_("Unable to connect to VNC server")
Definition: vnc_plugin.c:907

Definition at line 2136 of file rdp_plugin.c.

◆ security_list

gpointer security_list[]
static
Initial value:
=
{
"", N_("Negotiate protocol security"),
"nla", N_("NLA protocol security"),
"tls", N_("TLS protocol security"),
"rdp", N_("RDP protocol security"),
"ext", N_("NLA extended protocol security"),
NULL
}
N_("Unable to connect to VNC server")
Definition: vnc_plugin.c:907

Definition at line 1978 of file rdp_plugin.c.

◆ sound_list

gpointer sound_list[]
static
Initial value:
=
{
"off", N_("Off"),
"local", N_("Local"),
"local,11025,1", N_("Local - low quality"),
"local,22050,2", N_("Local - medium quality"),
"local,44100,2", N_("Local - high quality"),
"remote", N_("Remote"),
NULL
}
N_("Unable to connect to VNC server")
Definition: vnc_plugin.c:907

Definition at line 1966 of file rdp_plugin.c.