summaryrefslogtreecommitdiffstats
path: root/rdp
diff options
context:
space:
mode:
authorjsorg71 <jsorg71>2008-04-03 06:43:30 +0000
committerjsorg71 <jsorg71>2008-04-03 06:43:30 +0000
commitd061537be9463c74261eb53e76c92c3b9c1376a0 (patch)
tree4e0b712b2a87350da97e488ee69fd781fd3ab32e /rdp
parentfee6f82bf7bf049ad2cad8e4dab85dad4d3986db (diff)
downloadxrdp-proprietary-d061537be9463c74261eb53e76c92c3b9c1376a0.tar.gz
xrdp-proprietary-d061537be9463c74261eb53e76c92c3b9c1376a0.zip
added new wait_obj functions
Diffstat (limited to 'rdp')
-rw-r--r--rdp/rdp.c49
-rw-r--r--rdp/rdp.h7
2 files changed, 55 insertions, 1 deletions
diff --git a/rdp/rdp.c b/rdp/rdp.c
index 12edb5a9..b7a279b7 100644
--- a/rdp/rdp.c
+++ b/rdp/rdp.c
@@ -53,6 +53,7 @@ lib_mod_connect(struct mod* mod)
if (rdp_rdp_connect(mod->rdp_layer, mod->ip, mod->port) == 0)
{
mod->sck = mod->rdp_layer->sec_layer->mcs_layer->iso_layer->tcp_layer->sck;
+ mod->sck_obj = g_create_wait_obj_from_socket(mod->sck, 0);
DEBUG(("out lib_mod_connect"));
return 0;
}
@@ -209,6 +210,11 @@ lib_mod_end(struct mod* mod)
mod->rdp_layer = 0;
free_stream(mod->in_s);
mod->in_s = 0;
+ if (mod->sck_obj != 0)
+ {
+ g_delete_wait_obj_from_socket(mod->sck_obj);
+ mod->sck_obj = 0;
+ }
if (mod->sck != 0)
{
g_tcp_close(mod->sck);
@@ -250,6 +256,47 @@ lib_mod_set_param(struct mod* mod, char* name, char* value)
}
/******************************************************************************/
+/* return error */
+int DEFAULT_CC
+lib_mod_get_wait_objs(struct mod* mod, tbus* read_objs, int* rcount,
+ tbus* write_objs, int* wcount, int* timeout)
+{
+ int i;
+
+ i = *rcount;
+ if (mod != 0)
+ {
+ if (mod->sck_obj != 0)
+ {
+ read_objs[i++] = mod->sck_obj;
+ }
+ }
+ *rcount = i;
+ return 0;
+}
+
+/******************************************************************************/
+/* return error */
+int DEFAULT_CC
+lib_mod_check_wait_objs(struct mod* mod)
+{
+ int rv;
+
+ rv = 0;
+ if (mod != 0)
+ {
+ if (mod->sck_obj != 0)
+ {
+ if (g_is_wait_obj_set(mod->sck_obj))
+ {
+ rv = lib_mod_signal(mod);
+ }
+ }
+ }
+ return rv;
+}
+
+/******************************************************************************/
struct mod* EXPORT_CC
mod_init(void)
{
@@ -265,6 +312,8 @@ mod_init(void)
mod->mod_signal = lib_mod_signal;
mod->mod_end = lib_mod_end;
mod->mod_set_param = lib_mod_set_param;
+ mod->mod_get_wait_objs = lib_mod_get_wait_objs;
+ mod->mod_check_wait_objs = lib_mod_check_wait_objs;
mod->rdp_layer = rdp_rdp_create(mod);
DEBUG(("out mod_init"));
return mod;
diff --git a/rdp/rdp.h b/rdp/rdp.h
index 2344e591..4e471dc1 100644
--- a/rdp/rdp.h
+++ b/rdp/rdp.h
@@ -263,7 +263,11 @@ struct mod
int (*mod_signal)(struct mod* v);
int (*mod_end)(struct mod* v);
int (*mod_set_param)(struct mod* v, char* name, char* value);
- long mod_dumby[100 - 6]; /* align, 100 minus the number of mod
+ int (*mod_session_change)(struct mod* v, int, int);
+ int (*mod_get_wait_objs)(struct mod* v, tbus* read_objs, int* rcount,
+ tbus* write_objs, int* wcount, int* timeout);
+ int (*mod_check_wait_objs)(struct mod* v);
+ long mod_dumby[100 - 9]; /* align, 100 minus the number of mod
functions above */
/* server functions */
int (*server_begin_update)(struct mod* v);
@@ -328,6 +332,7 @@ struct mod
int keylayout;
int up_and_running;
struct stream* in_s;
+ tbus sck_obj;
};
/* rdp_tcp.c */