diff options
Diffstat (limited to 'xrdp/xrdp_wm.c')
-rw-r--r-- | xrdp/xrdp_wm.c | 102 |
1 files changed, 87 insertions, 15 deletions
diff --git a/xrdp/xrdp_wm.c b/xrdp/xrdp_wm.c index 8b26718d..fd7b13b8 100644 --- a/xrdp/xrdp_wm.c +++ b/xrdp/xrdp_wm.c @@ -27,6 +27,18 @@ #include "xrdp.h" #include "log.h" +#define LLOG_LEVEL 1 +#define LLOGLN(_level, _args) \ + do \ + { \ + if (_level < LLOG_LEVEL) \ + { \ + g_write("xrdp:xrdp_wm [%10.10u]: ", g_time3()); \ + g_writeln _args ; \ + } \ + } \ + while (0) + /*****************************************************************************/ struct xrdp_wm * xrdp_wm_create(struct xrdp_process *owner, @@ -563,6 +575,69 @@ xrdp_wm_init(struct xrdp_wm *self) load_xrdp_config(self->xrdp_config, self->screen->bpp); + /* global channels allow */ + names = list_create(); + names->auto_free = 1; + values = list_create(); + values->auto_free = 1; + g_snprintf(cfg_file, 255, "%s/xrdp.ini", XRDP_CFG_PATH); + if (file_by_name_read_section(cfg_file, "Channels", names, values) == 0) + { + int error; + int ii; + int chan_id; + int chan_flags; + int disabled; + char chan_name[16]; + + ii = 0; + error = libxrdp_query_channel(self->session, ii, chan_name, + &chan_flags); + while (error == 0) + { + r = NULL; + for (index = 0; index < names->count; index++) + { + q = (char *) list_get_item(names, index); + if (g_strcasecmp(q, chan_name) == 0) + { + r = (char *) list_get_item(values, index); + break; + } + } + if (r == NULL) + { + /* not found, disable the channel */ + chan_id = libxrdp_get_channel_id(self->session, chan_name); + libxrdp_disable_channel(self->session, chan_id, 1); + g_writeln("xrdp_wm_init: channel %s channel id %d is " + "disabled", chan_name, chan_id); + } + else + { + /* found */ + chan_id = libxrdp_get_channel_id(self->session, q); + disabled = !g_text2bool(r); + libxrdp_disable_channel(self->session, chan_id, disabled); + if (disabled) + { + g_writeln("xrdp_wm_init: channel %s channel id %d is " + "disabled", chan_name, chan_id); + } + else + { + g_writeln("xrdp_wm_init: channel %s channel id %d is " + "allowed", chan_name, chan_id); + } + } + ii++; + error = libxrdp_query_channel(self->session, ii, chan_name, + &chan_flags); + } + } + list_delete(names); + list_delete(values); + xrdp_wm_load_static_colors_plus(self, autorun_name); xrdp_wm_load_static_pointers(self); self->screen->bg_color = self->xrdp_config->cfg_globals.ls_top_window_bg_color; @@ -1758,27 +1833,21 @@ xrdp_wm_process_channel_data(struct xrdp_wm *self, tbus param3, tbus param4) { int rv; - int chanid ; rv = 1; if (self->mm->mod != 0) { - chanid = LOWORD(param1); - - if (is_channel_allowed(self, chanid)) + if (self->mm->usechansrv) { - if (self->mm->usechansrv) - { - rv = xrdp_mm_process_channel_data(self->mm, param1, param2, - param3, param4); - } - else + rv = xrdp_mm_process_channel_data(self->mm, param1, param2, + param3, param4); + } + else + { + if (self->mm->mod->mod_event != 0) { - if (self->mm->mod->mod_event != 0) - { - rv = self->mm->mod->mod_event(self->mm->mod, 0x5555, param1, param2, - param3, param4); - } + rv = self->mm->mod->mod_event(self->mm->mod, 0x5555, param1, param2, + param3, param4); } } } @@ -1844,6 +1913,9 @@ callback(intptr_t id, int msg, intptr_t param1, intptr_t param2, //g_writeln("callback: frame ack %d", param1); xrdp_mm_frame_ack(wm->mm, param1); break; + case 0x5558: + xrdp_mm_drdynvc_up(wm->mm); + break; } return rv; } |