diff options
-rw-r--r-- | xrdp/xrdp_mm.c | 29 |
1 files changed, 21 insertions, 8 deletions
diff --git a/xrdp/xrdp_mm.c b/xrdp/xrdp_mm.c index d76a63c5..3cb83f71 100644 --- a/xrdp/xrdp_mm.c +++ b/xrdp/xrdp_mm.c @@ -277,11 +277,11 @@ xrdp_mm_send_login(struct xrdp_mm* self) /*****************************************************************************/ /* returns error */ -/* this goes through the login_names looking for one called 'lib' +/* this goes through the login_names looking for one called 'aname' then it copies the corisponding login_values item into 'dest' 'dest' must be at least 'dest_len' + 1 bytes in size */ static int APP_CC -xrdp_mm_get_lib(struct xrdp_mm* self, char* dest, int dest_len) +xrdp_mm_get_value(struct xrdp_mm* self, char* aname, char* dest, int dest_len) { char* name; char* value; @@ -301,7 +301,7 @@ xrdp_mm_get_lib(struct xrdp_mm* self, char* dest, int dest_len) { break; } - if (g_strcasecmp(name, "lib") == 0) + if (g_strcasecmp(name, aname) == 0) { g_strncpy(dest, value, dest_len); rv = 0; @@ -323,7 +323,7 @@ xrdp_mm_setup_mod1(struct xrdp_mm* self) return 1; } lib[0] = 0; - if (xrdp_mm_get_lib(self, lib, 255) != 0) + if (xrdp_mm_get_value(self, "lib", lib, 255) != 0) { g_snprintf(text, 255, "no library name specified in xrdp.ini, please add " "lib=libxrdp-vnc.so or similar"); @@ -733,6 +733,8 @@ xrdp_mm_process_login_response(struct xrdp_mm* self, struct stream* s) int rv; int index; char text[256]; + char ip[256]; + char port[256]; rv = 0; in_uint16_be(s, ok); @@ -747,23 +749,34 @@ xrdp_mm_process_login_response(struct xrdp_mm* self, struct stream* s) { if (xrdp_mm_setup_mod2(self) == 0) { + xrdp_mm_get_value(self, "ip", ip, 255); xrdp_wm_set_login_mode(self->wm, 10); self->wm->dragging = 0; /* connect channel redir */ - self->chan_trans = trans_create(2, 8192, 8192); + if (strcmp(ip, "127.0.0.1") == 0) + { + /* unix socket */ + self->chan_trans = trans_create(2, 8192, 8192); + g_snprintf(port, 255, "/tmp/xrdp_chansrv_socket_%d", 7200 + display); + } + else + { + /* tcp */ + self->chan_trans = trans_create(1, 8192, 8192); + g_snprintf(port, 255, "%d", 7200 + display); + } self->chan_trans->trans_data_in = xrdp_mm_chan_data_in; self->chan_trans->header_size = 8; self->chan_trans->callback_data = self; - g_snprintf(text, 255, "/tmp/xrdp_chansrv_socket_%d", 7200 + display); /* try to connect up to 4 times */ for (index = 0; index < 4; index++) { - if (trans_connect(self->chan_trans, "127.0.0.1", text, 3000) == 0) + if (trans_connect(self->chan_trans, ip, port, 3000) == 0) { self->chan_trans_up = 1; break; } - g_sleep(250); + g_sleep(1000); g_writeln("xrdp_mm_process_login_response: connect failed " "trying again..."); } |