summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJay Sorg <jay.sorg@gmail.com>2016-07-17 23:28:37 -0700
committerspeidy <speidy@gmail.com>2017-01-15 08:20:50 +0200
commit6f74efa70a1002a458ff0c9a4dc7d6e62078f0d9 (patch)
tree1d11b86b1d63d428ebec9c4689f3c91664693b97
parent9f5656933b057bf5c47ae46716130226f8352901 (diff)
downloadxrdp-proprietary-6f74efa70a1002a458ff0c9a4dc7d6e62078f0d9.tar.gz
xrdp-proprietary-6f74efa70a1002a458ff0c9a4dc7d6e62078f0d9.zip
add session_info
Conflicts: libxrdp/libxrdp.h
-rw-r--r--libxrdp/libxrdp.c11
-rw-r--r--libxrdp/libxrdp.h3
-rw-r--r--libxrdp/libxrdpinc.h3
-rw-r--r--libxrdp/xrdp_rdp.c41
-rw-r--r--xrdp/xrdp.h3
-rw-r--r--xrdp/xrdp_mm.c12
-rw-r--r--xrdp/xrdp_types.h4
7 files changed, 76 insertions, 1 deletions
diff --git a/libxrdp/libxrdp.c b/libxrdp/libxrdp.c
index c52829f8..6c1ee3d0 100644
--- a/libxrdp/libxrdp.c
+++ b/libxrdp/libxrdp.c
@@ -1487,6 +1487,17 @@ libxrdp_fastpath_send_frame_marker(struct xrdp_session *session,
}
free_stream(s);
return 0;
+}
+/*****************************************************************************/
+int EXPORT_CC
+libxrdp_send_session_info(struct xrdp_session *session, const char *data,
+ int data_bytes)
+{
+ struct xrdp_rdp *rdp;
+
+ LLOGLN(10, ("libxrdp_send_session_info:"));
+ rdp = (struct xrdp_rdp *) (session->rdp);
+ return xrdp_rdp_send_session_info(rdp, data, data_bytes);
}
diff --git a/libxrdp/libxrdp.h b/libxrdp/libxrdp.h
index 857abc99..9b781c5c 100644
--- a/libxrdp/libxrdp.h
+++ b/libxrdp/libxrdp.h
@@ -402,6 +402,9 @@ int APP_CC
xrdp_rdp_disconnect(struct xrdp_rdp *self);
int APP_CC
xrdp_rdp_send_deactivate(struct xrdp_rdp *self);
+int APP_CC
+xrdp_rdp_send_session_info(struct xrdp_rdp *self, const char *data,
+ int data_bytes);
/* xrdp_orders.c */
struct xrdp_orders * APP_CC
diff --git a/libxrdp/libxrdpinc.h b/libxrdp/libxrdpinc.h
index 275b674a..bd4f89dc 100644
--- a/libxrdp/libxrdpinc.h
+++ b/libxrdp/libxrdpinc.h
@@ -247,5 +247,8 @@ libxrdp_fastpath_send_surface(struct xrdp_session *session,
int EXPORT_CC
libxrdp_fastpath_send_frame_marker(struct xrdp_session *session,
int frame_action, int frame_id);
+int EXPORT_CC
+libxrdp_send_session_info(struct xrdp_session *session, const char *data,
+ int data_bytes);
#endif
diff --git a/libxrdp/xrdp_rdp.c b/libxrdp/xrdp_rdp.c
index 219c0260..9b1f54fd 100644
--- a/libxrdp/xrdp_rdp.c
+++ b/libxrdp/xrdp_rdp.c
@@ -1252,3 +1252,44 @@ xrdp_rdp_send_deactivate(struct xrdp_rdp *self)
DEBUG(("out xrdp_rdp_send_deactivate"));
return 0;
}
+
+/*****************************************************************************/
+int APP_CC
+xrdp_rdp_send_session_info(struct xrdp_rdp *self, const char *data,
+ int data_bytes)
+{
+ struct stream *s;
+
+ LLOGLN(0, ("xrdp_rdp_send_session_info: data_bytes %d", data_bytes));
+ make_stream(s);
+ init_stream(s, 8192);
+
+ if (xrdp_rdp_init_data(self, s) != 0)
+ {
+ free_stream(s);
+ return 1;
+ }
+
+ if (s_check_rem_out(s, data_bytes))
+ {
+ out_uint8a(s, data, data_bytes);
+ }
+ else
+ {
+ free_stream(s);
+ return 1;
+ }
+
+ s_mark_end(s);
+
+ /* SAVE_SESSION_INFO 0x26 */
+ if (xrdp_rdp_send_data(self, s, 0x26) != 0)
+ {
+ free_stream(s);
+ return 1;
+ }
+
+ free_stream(s);
+ return 0;
+}
+
diff --git a/xrdp/xrdp.h b/xrdp/xrdp.h
index edf88cc4..a84a4c07 100644
--- a/xrdp/xrdp.h
+++ b/xrdp/xrdp.h
@@ -514,3 +514,6 @@ int DEFAULT_CC
server_add_char_alpha(struct xrdp_mod* mod, int font, int character,
int offset, int baseline,
int width, int height, char* data);
+int DEFAULT_CC
+server_session_info(struct xrdp_mod *mod, const char *data, int data_bytes);
+
diff --git a/xrdp/xrdp_mm.c b/xrdp/xrdp_mm.c
index df859c0a..9cb0eeef 100644
--- a/xrdp/xrdp_mm.c
+++ b/xrdp/xrdp_mm.c
@@ -472,6 +472,7 @@ xrdp_mm_setup_mod1(struct xrdp_mm *self)
self->mod->server_paint_rect_bpp = server_paint_rect_bpp;
self->mod->server_composite = server_composite;
self->mod->server_paint_rects = server_paint_rects;
+ self->mod->server_session_info = server_session_info;
self->mod->si = (tintptr) &(self->wm->session->si);
}
}
@@ -2601,6 +2602,17 @@ server_paint_rects(struct xrdp_mod* mod, int num_drects, short *drects,
/*****************************************************************************/
int DEFAULT_CC
+server_session_info(struct xrdp_mod *mod, const char *data, int data_bytes)
+{
+ struct xrdp_wm *wm;
+
+ LLOGLN(10, ("server_session_info:"));
+ wm = (struct xrdp_wm *)(mod->wm);
+ return libxrdp_send_session_info(wm->session, data, data_bytes);
+}
+
+/*****************************************************************************/
+int DEFAULT_CC
server_set_pointer(struct xrdp_mod *mod, int x, int y,
char *data, char *mask)
{
diff --git a/xrdp/xrdp_types.h b/xrdp/xrdp_types.h
index ca59cd1b..75c70ee7 100644
--- a/xrdp/xrdp_types.h
+++ b/xrdp/xrdp_types.h
@@ -146,7 +146,9 @@ struct xrdp_mod
int num_crects, short *crects,
char *data, int width, int height,
int flags, int frame_id);
- tintptr server_dumby[100 - 43]; /* align, 100 minus the number of server
+ int (*server_session_info)(struct xrdp_mod* v, const char *data,
+ int data_bytes);
+ tintptr server_dumby[100 - 44]; /* align, 100 minus the number of server
functions above */
/* common */
tintptr handle; /* pointer to self as int */