summaryrefslogtreecommitdiffstats
path: root/freerdp1/xrdp-freerdp.c
diff options
context:
space:
mode:
Diffstat (limited to 'freerdp1/xrdp-freerdp.c')
-rw-r--r--freerdp1/xrdp-freerdp.c2700
1 files changed, 1388 insertions, 1312 deletions
diff --git a/freerdp1/xrdp-freerdp.c b/freerdp1/xrdp-freerdp.c
index 524dcf2e..25206f8e 100644
--- a/freerdp1/xrdp-freerdp.c
+++ b/freerdp1/xrdp-freerdp.c
@@ -23,1659 +23,1735 @@
#define LOG_LEVEL 1
#define LLOG(_level, _args) \
- do { if (_level < LOG_LEVEL) { g_write _args ; } } while (0)
+ do { if (_level < LOG_LEVEL) { g_write _args ; } } while (0)
#define LLOGLN(_level, _args) \
- do { if (_level < LOG_LEVEL) { g_writeln _args ; } } while (0)
+ do { if (_level < LOG_LEVEL) { g_writeln _args ; } } while (0)
struct mod_context
{
- rdpContext _p;
- struct mod* modi;
+ rdpContext _p;
+ struct mod *modi;
};
typedef struct mod_context modContext;
/*****************************************************************************/
/* return error */
static int DEFAULT_CC
-lxrdp_start(struct mod* mod, int w, int h, int bpp)
+lxrdp_start(struct mod *mod, int w, int h, int bpp)
{
- rdpSettings* settings;
+ rdpSettings *settings;
- LLOGLN(10, ("lxrdp_start: w %d h %d bpp %d", w, h, bpp));
- settings = mod->inst->settings;
- settings->width = w;
- settings->height = h;
- settings->color_depth = bpp;
- mod->bpp = bpp;
+ LLOGLN(10, ("lxrdp_start: w %d h %d bpp %d", w, h, bpp));
+ settings = mod->inst->settings;
+ settings->width = w;
+ settings->height = h;
+ settings->color_depth = bpp;
+ mod->bpp = bpp;
- settings->encryption = 1;
- settings->tls_security = 1;
- settings->nla_security = 0;
- settings->rdp_security = 1;
+ settings->encryption = 1;
+ settings->tls_security = 1;
+ settings->nla_security = 0;
+ settings->rdp_security = 1;
- return 0;
+ return 0;
}
/******************************************************************************/
/* return error */
static int DEFAULT_CC
-lxrdp_connect(struct mod* mod)
+lxrdp_connect(struct mod *mod)
{
- boolean ok;
+ boolean ok;
- LLOGLN(10, ("lxrdp_connect:"));
+ LLOGLN(10, ("lxrdp_connect:"));
- ok = freerdp_connect(mod->inst);
- LLOGLN(0, ("lxrdp_connect: freerdp_connect returned %d", ok));
+ ok = freerdp_connect(mod->inst);
+ LLOGLN(0, ("lxrdp_connect: freerdp_connect returned %d", ok));
- if (!ok)
- {
- LLOGLN(0, ("Failure to connect"));
-#ifdef ERRORSTART
- if (connectErrorCode != 0)
+ if (!ok)
{
- char buf[128];
+ LLOGLN(0, ("Failure to connect"));
+#ifdef ERRORSTART
- if (connectErrorCode < ERRORSTART)
- {
- if (strerror_r(connectErrorCode, buf, 128) != 0)
+ if (connectErrorCode != 0)
{
- snprintf(buf, 128, "Errorcode from connect : %d", connectErrorCode);
+ char buf[128];
+
+ if (connectErrorCode < ERRORSTART)
+ {
+ if (strerror_r(connectErrorCode, buf, 128) != 0)
+ {
+ snprintf(buf, 128, "Errorcode from connect : %d", connectErrorCode);
+ }
+ }
+ else
+ {
+ switch (connectErrorCode)
+ {
+ case PREECONNECTERROR:
+ snprintf(buf, 128, "The error code from connect is "
+ "PREECONNECTERROR");
+ break;
+ case UNDEFINEDCONNECTERROR:
+ snprintf(buf, 128, "The error code from connect is "
+ "UNDEFINEDCONNECTERROR");
+ break;
+ case POSTCONNECTERROR:
+ snprintf(buf, 128, "The error code from connect is "
+ "POSTCONNECTERROR");
+ break;
+ case DNSERROR:
+ snprintf(buf, 128, "The DNS system generated an error");
+ break;
+ case DNSNAMENOTFOUND:
+ snprintf(buf, 128, "The DNS system could not find the "
+ "specified name");
+ break;
+ case CONNECTERROR:
+ snprintf(buf, 128, "A general connect error was returned");
+ break;
+ case MCSCONNECTINITIALERROR:
+ snprintf(buf, 128, "The error code from connect is "
+ "MCSCONNECTINITIALERROR");
+ break;
+ case TLSCONNECTERROR:
+ snprintf(buf, 128, "Error in TLS handshake");
+ break;
+ case AUTHENTICATIONERROR:
+ snprintf(buf, 128, "Authentication error check your password "
+ "and username");
+ break;
+ default:
+ snprintf(buf, 128, "Unhandled Errorcode from connect : %d",
+ connectErrorCode);
+ break;
+ }
+ }
+
+ mod->server_msg(mod, buf, 0);
}
- }
- else
- {
- switch (connectErrorCode)
- {
- case PREECONNECTERROR:
- snprintf(buf, 128, "The error code from connect is "
- "PREECONNECTERROR");
+
+#endif
+ return 1;
+ }
+
+ return 0;
+}
+
+/******************************************************************************/
+/* return error */
+static int DEFAULT_CC
+lxrdp_event(struct mod *mod, int msg, long param1, long param2,
+ long param3, long param4)
+{
+ int x;
+ int y;
+ int flags;
+ int size;
+ int total_size;
+ int chanid;
+ int lchid;
+ char *data;
+
+ LLOGLN(10, ("lxrdp_event: msg %d", msg));
+
+ switch (msg)
+ {
+ case 15: /* key down */
+ mod->inst->input->KeyboardEvent(mod->inst->input, param4, param3);
break;
- case UNDEFINEDCONNECTERROR:
- snprintf(buf, 128, "The error code from connect is "
- "UNDEFINEDCONNECTERROR");
+ case 16: /* key up */
+ mod->inst->input->KeyboardEvent(mod->inst->input, param4, param3);
break;
- case POSTCONNECTERROR:
- snprintf(buf, 128, "The error code from connect is "
- "POSTCONNECTERROR");
+ case 17: /*Synchronize*/
+ LLOGLN(0, ("Synchronized event handled"));
+ mod->inst->input->SynchronizeEvent(mod->inst->input, 0);
break;
- case DNSERROR:
- snprintf(buf, 128, "The DNS system generated an error");
+ case 100: /* mouse move */
+ LLOGLN(10, ("mouse move %d %d", param1, param2));
+ x = param1;
+ y = param2;
+ flags = PTR_FLAGS_MOVE;
+ mod->inst->input->MouseEvent(mod->inst->input, flags, x, y);
break;
- case DNSNAMENOTFOUND:
- snprintf(buf, 128, "The DNS system could not find the "
- "specified name");
+ case 101: /* left button up */
+ LLOGLN(10, ("left button up %d %d", param1, param2));
+ x = param1;
+ y = param2;
+ flags = PTR_FLAGS_BUTTON1;
+ mod->inst->input->MouseEvent(mod->inst->input, flags, x, y);
break;
- case CONNECTERROR:
- snprintf(buf, 128, "A general connect error was returned");
+ case 102: /* left button down */
+ LLOGLN(10, ("left button down %d %d", param1, param2));
+ x = param1;
+ y = param2;
+ flags = PTR_FLAGS_BUTTON1 | PTR_FLAGS_DOWN;
+ mod->inst->input->MouseEvent(mod->inst->input, flags, x, y);
break;
- case MCSCONNECTINITIALERROR:
- snprintf(buf, 128, "The error code from connect is "
- "MCSCONNECTINITIALERROR");
+ case 103: /* right button up */
+ LLOGLN(10, ("right button up %d %d", param1, param2));
+ x = param1;
+ y = param2;
+ flags = PTR_FLAGS_BUTTON2;
+ mod->inst->input->MouseEvent(mod->inst->input, flags, x, y);
break;
- case TLSCONNECTERROR:
- snprintf(buf, 128, "Error in TLS handshake");
+ case 104: /* right button down */
+ LLOGLN(10, ("right button down %d %d", param1, param2));
+ x = param1;
+ y = param2;
+ flags = PTR_FLAGS_BUTTON2 | PTR_FLAGS_DOWN;
+ mod->inst->input->MouseEvent(mod->inst->input, flags, x, y);
break;
- case AUTHENTICATIONERROR:
- snprintf(buf, 128, "Authentication error check your password "
- "and username");
+ case 105: /* middle button up */
+ LLOGLN(10, ("middle button up %d %d", param1, param2));
+ x = param1;
+ y = param2;
+ flags = PTR_FLAGS_BUTTON3;
+ mod->inst->input->MouseEvent(mod->inst->input, flags, x, y);
break;
- default:
- snprintf(buf, 128, "Unhandled Errorcode from connect : %d",
- connectErrorCode);
+ case 106: /* middle button down */
+ LLOGLN(10, ("middle button down %d %d", param1, param2));
+ x = param1;
+ y = param2;
+ flags = PTR_FLAGS_BUTTON3 | PTR_FLAGS_DOWN;
+ mod->inst->input->MouseEvent(mod->inst->input, flags, x, y);
break;
- }
- }
- mod->server_msg(mod, buf, 0);
- }
-#endif
- return 1;
- }
- return 0;
-}
-
-/******************************************************************************/
-/* return error */
-static int DEFAULT_CC
-lxrdp_event(struct mod* mod, int msg, long param1, long param2,
- long param3, long param4)
-{
- int x;
- int y;
- int flags;
- int size;
- int total_size;
- int chanid;
- int lchid;
- char* data;
-
- LLOGLN(10, ("lxrdp_event: msg %d", msg));
- switch (msg)
- {
- case 15: /* key down */
- mod->inst->input->KeyboardEvent(mod->inst->input, param4, param3);
- break;
- case 16: /* key up */
- mod->inst->input->KeyboardEvent(mod->inst->input, param4, param3);
- break;
- case 17: /*Synchronize*/
- LLOGLN(0, ("Synchronized event handled"));
- mod->inst->input->SynchronizeEvent(mod->inst->input, 0);
- break;
- case 100: /* mouse move */
- LLOGLN(10, ("mouse move %d %d", param1, param2));
- x = param1;
- y = param2;
- flags = PTR_FLAGS_MOVE;
- mod->inst->input->MouseEvent(mod->inst->input, flags, x, y);
- break;
- case 101: /* left button up */
- LLOGLN(10, ("left button up %d %d", param1, param2));
- x = param1;
- y = param2;
- flags = PTR_FLAGS_BUTTON1;
- mod->inst->input->MouseEvent(mod->inst->input, flags, x, y);
- break;
- case 102: /* left button down */
- LLOGLN(10, ("left button down %d %d", param1, param2));
- x = param1;
- y = param2;
- flags = PTR_FLAGS_BUTTON1 | PTR_FLAGS_DOWN;
- mod->inst->input->MouseEvent(mod->inst->input, flags, x, y);
- break;
- case 103: /* right button up */
- LLOGLN(10, ("right button up %d %d", param1, param2));
- x = param1;
- y = param2;
- flags = PTR_FLAGS_BUTTON2;
- mod->inst->input->MouseEvent(mod->inst->input, flags, x, y);
- break;
- case 104: /* right button down */
- LLOGLN(10, ("right button down %d %d", param1, param2));
- x = param1;
- y = param2;
- flags = PTR_FLAGS_BUTTON2 | PTR_FLAGS_DOWN;
- mod->inst->input->MouseEvent(mod->inst->input, flags, x, y);
- break;
- case 105: /* middle button up */
- LLOGLN(10, ("middle button up %d %d", param1, param2));
- x = param1;
- y = param2;
- flags = PTR_FLAGS_BUTTON3;
- mod->inst->input->MouseEvent(mod->inst->input, flags, x, y);
- break;
- case 106: /* middle button down */
- LLOGLN(10, ("middle button down %d %d", param1, param2));
- x = param1;
- y = param2;
- flags = PTR_FLAGS_BUTTON3 | PTR_FLAGS_DOWN;
- mod->inst->input->MouseEvent(mod->inst->input, flags, x, y);
- break;
- case 107: /* wheel up */
- flags = PTR_FLAGS_WHEEL | 0x0078;
- mod->inst->input->MouseEvent(mod->inst->input, flags, 0, 0);
- case 108:
- break;
- case 109: /* wheel down */
- flags = PTR_FLAGS_WHEEL | PTR_FLAGS_WHEEL_NEGATIVE | 0x0088;
- mod->inst->input->MouseEvent(mod->inst->input, flags, 0, 0);
- case 110:
- break;
- case 200:
- LLOGLN(10, ("Invalidate request sent from client"));
- RECTANGLE_16 *rectangle = (RECTANGLE_16 *) g_malloc(sizeof(RECTANGLE_16), 0);
- /* The parameters are coded as follows param1 = MAKELONG(y, x), param2 =MAKELONG(h, w)
- * #define MAKELONG(lo, hi) ((((hi) & 0xffff) << 16) | ((lo) & 0xffff))
- */
- rectangle->left = (param1 >> 16) & 0xffff;
- rectangle->top = param1 & 0xffff;
- rectangle->right = (((param2 >> 16) & 0xffff) + rectangle->left) - 1;
- rectangle->bottom = ((param2 & 0xffff) + rectangle->top) - 1;
- if (mod->inst->settings->refresh_rect)
- {
- if (mod->inst->update != NULL)
- {
- if (mod->inst->update->RefreshRect != NULL)
- {
- if (mod->inst->context != NULL)
+ case 107: /* wheel up */
+ flags = PTR_FLAGS_WHEEL | 0x0078;
+ mod->inst->input->MouseEvent(mod->inst->input, flags, 0, 0);
+ case 108:
+ break;
+ case 109: /* wheel down */
+ flags = PTR_FLAGS_WHEEL | PTR_FLAGS_WHEEL_NEGATIVE | 0x0088;
+ mod->inst->input->MouseEvent(mod->inst->input, flags, 0, 0);
+ case 110:
+ break;
+ case 200:
+ LLOGLN(10, ("Invalidate request sent from client"));
+ RECTANGLE_16 *rectangle = (RECTANGLE_16 *) g_malloc(sizeof(RECTANGLE_16), 0);
+ /* The parameters are coded as follows param1 = MAKELONG(y, x), param2 =MAKELONG(h, w)
+ * #define MAKELONG(lo, hi) ((((hi) & 0xffff) << 16) | ((lo) & 0xffff))
+ */
+ rectangle->left = (param1 >> 16) & 0xffff;
+ rectangle->top = param1 & 0xffff;
+ rectangle->right = (((param2 >> 16) & 0xffff) + rectangle->left) - 1;
+ rectangle->bottom = ((param2 & 0xffff) + rectangle->top) - 1;
+
+ if (mod->inst->settings->refresh_rect)
{
- LLOGLN(0, ("update rectangle left: %d top: %d bottom: %d right: %d",
- rectangle->left, rectangle->top, rectangle->bottom, rectangle->right));
- mod->inst->update->RefreshRect(mod->inst->context, 1, rectangle);
+ if (mod->inst->update != NULL)
+ {
+ if (mod->inst->update->RefreshRect != NULL)
+ {
+ if (mod->inst->context != NULL)
+ {
+ LLOGLN(0, ("update rectangle left: %d top: %d bottom: %d right: %d",
+ rectangle->left, rectangle->top, rectangle->bottom, rectangle->right));
+ mod->inst->update->RefreshRect(mod->inst->context, 1, rectangle);
+ }
+ else
+ {
+ LLOGLN(0, ("Invalidate request -The context is null"));
+ }
+ }
+ else
+ {
+ LLOGLN(0, ("Invalidate request - RefreshRect is Null"));
+ }
+ }
+ else
+ {
+ LLOGLN(0, ("Invalidate request -the update pointer is null"));
+ }
}
else
{
- LLOGLN(0, ("Invalidate request -The context is null"));
+ LLOGLN(0, ("Invalidate request - warning - update rectangle is disabled"));
}
- }
- else
- {
- LLOGLN(0, ("Invalidate request - RefreshRect is Null"));
- }
- }
- else
- {
- LLOGLN(0, ("Invalidate request -the update pointer is null"));
- }
- }
- else
- {
- LLOGLN(0, ("Invalidate request - warning - update rectangle is disabled"));
- }
- g_free(rectangle);
- break;
- case 0x5555:
- chanid = LOWORD(param1);
- flags = HIWORD(param1);
- size = (int)param2;
- data = (char*)param3;
- total_size = (int)param4;
- LLOGLN(10, ("lxrdp_event: client to server flags %d", flags));
- if ((chanid < 0) || (chanid >= mod->inst->settings->num_channels))
- {
- LLOGLN(0, ("lxrdp_event: error chanid %d", chanid));
- break;
- }
- lchid = mod->inst->settings->channels[chanid].channel_id;
- switch (flags & 3)
- {
- case 3:
- mod->inst->SendChannelData(mod->inst, lchid, (tui8*)data, total_size);
- break;
- case 2:
- /* end */
- g_memcpy(mod->chan_buf + mod->chan_buf_valid, data, size);
- mod->chan_buf_valid += size;
- mod->inst->SendChannelData(mod->inst, lchid, (tui8*)(mod->chan_buf),
- total_size);
- g_free(mod->chan_buf);
- mod->chan_buf = 0;
- mod->chan_buf_bytes = 0;
- mod->chan_buf_valid = 0;
- break;
- case 1:
- /* start */
- g_free(mod->chan_buf);
- mod->chan_buf = (char*)g_malloc(total_size, 0);
- mod->chan_buf_bytes = total_size;
- mod->chan_buf_valid = 0;
- g_memcpy(mod->chan_buf + mod->chan_buf_valid, data, size);
- mod->chan_buf_valid += size;
- break;
+
+ g_free(rectangle);
+ break;
+ case 0x5555:
+ chanid = LOWORD(param1);
+ flags = HIWORD(param1);
+ size = (int)param2;
+ data = (char *)param3;
+ total_size = (int)param4;
+ LLOGLN(10, ("lxrdp_event: client to server flags %d", flags));
+
+ if ((chanid < 0) || (chanid >= mod->inst->settings->num_channels))
+ {
+ LLOGLN(0, ("lxrdp_event: error chanid %d", chanid));
+ break;
+ }
+
+ lchid = mod->inst->settings->channels[chanid].channel_id;
+
+ switch (flags & 3)
+ {
+ case 3:
+ mod->inst->SendChannelData(mod->inst, lchid, (tui8 *)data, total_size);
+ break;
+ case 2:
+ /* end */
+ g_memcpy(mod->chan_buf + mod->chan_buf_valid, data, size);
+ mod->chan_buf_valid += size;
+ mod->inst->SendChannelData(mod->inst, lchid, (tui8 *)(mod->chan_buf),
+ total_size);
+ g_free(mod->chan_buf);
+ mod->chan_buf = 0;
+ mod->chan_buf_bytes = 0;
+ mod->chan_buf_valid = 0;
+ break;
+ case 1:
+ /* start */
+ g_free(mod->chan_buf);
+ mod->chan_buf = (char *)g_malloc(total_size, 0);
+ mod->chan_buf_bytes = total_size;
+ mod->chan_buf_valid = 0;
+ g_memcpy(mod->chan_buf + mod->chan_buf_valid, data, size);
+ mod->chan_buf_valid += size;
+ break;
+ default:
+ /* middle */
+ g_memcpy(mod->chan_buf + mod->chan_buf_valid, data, size);
+ mod->chan_buf_valid += size;
+ break;
+ }
+
+ break;
default:
- /* middle */
- g_memcpy(mod->chan_buf + mod->chan_buf_valid, data, size);
- mod->chan_buf_valid += size;
- break;
- }
- break;
- default:
- LLOGLN(0, ("Unhandled message type in eventhandler %d", msg));
- break;
- }
- return 0;
+ LLOGLN(0, ("Unhandled message type in eventhandler %d", msg));
+ break;
+ }
+
+ return 0;
}
/******************************************************************************/
/* return error */
static int DEFAULT_CC
-lxrdp_signal(struct mod* mod)
+lxrdp_signal(struct mod *mod)
{
- LLOGLN(10, ("lxrdp_signal:"));
- return 0;
+ LLOGLN(10, ("lxrdp_signal:"));
+ return 0;
}
/******************************************************************************/
/* return error */
static int DEFAULT_CC
-lxrdp_end(struct mod* mod)
+lxrdp_end(struct mod *mod)
{
- int i;
- int j;
+ int i;
+ int j;
- for (j = 0; j < 4; j++)
- {
- for (i = 0; i < 4096; i++)
+ for (j = 0; j < 4; j++)
{
- g_free(mod->bitmap_cache[j][i].data);
+ for (i = 0; i < 4096; i++)
+ {
+ g_free(mod->bitmap_cache[j][i].data);
+ }
}
- }
- for (i = 0; i < 64; i++)
- {
- if (mod->brush_cache[i].data != mod->brush_cache[i].b8x8)
+
+ for (i = 0; i < 64; i++)
{
- g_free(mod->brush_cache[i].data);
+ if (mod->brush_cache[i].data != mod->brush_cache[i].b8x8)
+ {
+ g_free(mod->brush_cache[i].data);
+ }
}
- }
- LLOGLN(10, ("lxrdp_end:"));
- return 0;
+
+ LLOGLN(10, ("lxrdp_end:"));
+ return 0;
}
/******************************************************************************/
/* return error */
static int DEFAULT_CC
-lxrdp_set_param(struct mod* mod, char* name, char* value)
+lxrdp_set_param(struct mod *mod, char *name, char *value)
{
- rdpSettings* settings;
-
- LLOGLN(10, ("lxrdp_set_param: name [%s] value [%s]", name, value));
- settings = mod->inst->settings;
-
- LLOGLN(10, ("%p %d", settings->hostname, settings->encryption));
-
- if (g_strcmp(name, "hostname") == 0)
- {
- }
- else if (g_strcmp(name, "ip") == 0)
- {
- settings->hostname = g_strdup(value);
- }
- else if (g_strcmp(name, "port") == 0)
- {
- settings->port = g_atoi(value);
- }
- else if (g_strcmp(name, "keylayout") == 0)
- {
- }
- else if (g_strcmp(name, "name") == 0)
- {
- }
- else if (g_strcmp(name, "lib") == 0)
- {
- }
- else if (g_strcmp(name, "username") == 0)
- {
- g_strncpy(mod->username, value, 255);
- }
- else if (g_strcmp(name, "password") == 0)
- {
- g_strncpy(mod->password, value, 255);
- }
- else if (g_strcmp(name, "client_info") == 0)
- {
- g_memcpy(&(mod->client_info), value, sizeof(mod->client_info));
- /* This is a Struct and cannot be printed in next else*/
- LLOGLN(10, ("Client_info struct ignored"));
- }
- else
- {
- LLOGLN(0, ("lxrdp_set_param: unknown name [%s] value [%s]", name, value));
- }
-
- return 0;
+ rdpSettings *settings;
+
+ LLOGLN(10, ("lxrdp_set_param: name [%s] value [%s]", name, value));
+ settings = mod->inst->settings;
+
+ LLOGLN(10, ("%p %d", settings->hostname, settings->encryption));
+
+ if (g_strcmp(name, "hostname") == 0)
+ {
+ }
+ else if (g_strcmp(name, "ip") == 0)
+ {
+ settings->hostname = g_strdup(value);
+ }
+ else if (g_strcmp(name, "port") == 0)
+ {
+ settings->port = g_atoi(value);
+ }
+ else if (g_strcmp(name, "keylayout") == 0)
+ {
+ }
+ else if (g_strcmp(name, "name") == 0)
+ {
+ }
+ else if (g_strcmp(name, "lib") == 0)
+ {
+ }
+ else if (g_strcmp(name, "username") == 0)
+ {
+ g_strncpy(mod->username, value, 255);
+ }
+ else if (g_strcmp(name, "password") == 0)
+ {
+ g_strncpy(mod->password, value, 255);
+ }
+ else if (g_strcmp(name, "client_info") == 0)
+ {
+ g_memcpy(&(mod->client_info), value, sizeof(mod->client_info));
+ /* This is a Struct and cannot be printed in next else*/
+ LLOGLN(10, ("Client_info struct ignored"));
+ }
+ else
+ {
+ LLOGLN(0, ("lxrdp_set_param: unknown name [%s] value [%s]", name, value));
+ }
+
+ return 0;
}
/******************************************************************************/
static int DEFAULT_CC
-lxrdp_session_change(struct mod* mod, int a, int b)
+lxrdp_session_change(struct mod *mod, int a, int b)
{
- LLOGLN(10, ("lxrdp_session_change:"));
- return 0;
+ LLOGLN(10, ("lxrdp_session_change:"));
+ return 0;
}
/******************************************************************************/
static int DEFAULT_CC
-lxrdp_get_wait_objs(struct mod* mod, tbus* read_objs, int* rcount,
- tbus* write_objs, int* wcount, int* timeout)
+lxrdp_get_wait_objs(struct mod *mod, tbus *read_objs, int *rcount,
+ tbus *write_objs, int *wcount, int *timeout)
{
- void** rfds;
- void** wfds;
- boolean ok;
-
- LLOGLN(10, ("lxrdp_get_wait_objs:"));
- rfds = (void**)read_objs;
- wfds = (void**)write_objs;
- ok = freerdp_get_fds(mod->inst, rfds, rcount, wfds, wcount);
- if (!ok)
- {
- LLOGLN(0, ("lxrdp_get_wait_objs: freerdp_get_fds failed"));
- return 1;
- }
- return 0;
+ void **rfds;
+ void **wfds;
+ boolean ok;
+
+ LLOGLN(10, ("lxrdp_get_wait_objs:"));
+ rfds = (void **)read_objs;
+ wfds = (void **)write_objs;
+ ok = freerdp_get_fds(mod->inst, rfds, rcount, wfds, wcount);
+
+ if (!ok)
+ {
+ LLOGLN(0, ("lxrdp_get_wait_objs: freerdp_get_fds failed"));
+ return 1;
+ }
+
+ return 0;
}
/******************************************************************************/
static int DEFAULT_CC
-lxrdp_check_wait_objs(struct mod* mod)
+lxrdp_check_wait_objs(struct mod *mod)
{
- boolean ok;
-
- LLOGLN(10, ("lxrdp_check_wait_objs:"));
- ok = freerdp_check_fds(mod->inst);
- if (!ok)
- {
- LLOGLN(0, ("lxrdp_check_wait_objs: freerdp_check_fds failed"));
- return 1;
- }
- return 0;
-}
+ boolean ok;
-/******************************************************************************/
-static void DEFAULT_CC
-lfreerdp_begin_paint(rdpContext* context)
-{
- struct mod* mod;
+ LLOGLN(10, ("lxrdp_check_wait_objs:"));
+ ok = freerdp_check_fds(mod->inst);
+
+ if (!ok)
+ {
+ LLOGLN(0, ("lxrdp_check_wait_objs: freerdp_check_fds failed"));
+ return 1;
+ }
- LLOGLN(10, ("lfreerdp_begin_paint:"));
- mod = ((struct mod_context*)context)->modi;
- mod->server_begin_update(mod);
+ return 0;
}
/******************************************************************************/
static void DEFAULT_CC
-lfreerdp_end_paint(rdpContext* context)
+lfreerdp_begin_paint(rdpContext *context)
{
- struct mod* mod;
+ struct mod *mod;
- LLOGLN(10, ("lfreerdp_end_paint:"));
- mod = ((struct mod_context*)context)->modi;
- mod->server_end_update(mod);
+ LLOGLN(10, ("lfreerdp_begin_paint:"));
+ mod = ((struct mod_context *)context)->modi;
+ mod->server_begin_update(mod);
}
/******************************************************************************/
static void DEFAULT_CC
-lfreerdp_set_bounds(rdpContext* context, rdpBounds* bounds)
+lfreerdp_end_paint(rdpContext *context)
{
- struct mod* mod;
- int x;
- int y;
- int cx;
- int cy;
-
- LLOGLN(10, ("lfreerdp_set_bounds: %p", bounds));
- mod = ((struct mod_context*)context)->modi;
- if (bounds != 0)
- {
- x = bounds->left;
- y = bounds->top;
- cx = (bounds->right - bounds->left) + 1;
- cy = (bounds->bottom - bounds->top) + 1;
- mod->server_set_clip(mod, x, y, cx, cy);
- }
- else
- {
- mod->server_reset_clip(mod);
- }
+ struct mod *mod;
+
+ LLOGLN(10, ("lfreerdp_end_paint:"));
+ mod = ((struct mod_context *)context)->modi;
+ mod->server_end_update(mod);
}
/******************************************************************************/
static void DEFAULT_CC
-lfreerdp_bitmap_update(rdpContext* context, BITMAP_UPDATE* bitmap)
+lfreerdp_set_bounds(rdpContext *context, rdpBounds *bounds)
{
- struct mod* mod;
- int index;
- int cx;
- int cy;
- int server_bpp;
- int server_Bpp;
- int client_bpp;
- int j;
- int line_bytes;
- BITMAP_DATA* bd;
- char* dst_data;
- char* dst_data1;
- char* src;
- char* dst;
-
- mod = ((struct mod_context*)context)->modi;
- LLOGLN(10, ("lfreerdp_bitmap_update: %d %d", bitmap->number, bitmap->count));
-
- server_bpp = mod->inst->settings->color_depth;
- server_Bpp = (server_bpp + 7) / 8;
- client_bpp = mod->bpp;
-
- for (index = 0; index < bitmap->number; index++)
- {
- bd = bitmap->rectangles + index;
- cx = (bd->destRight - bd->destLeft) + 1;
- cy = (bd->destBottom - bd->destTop) + 1;
- line_bytes = server_Bpp * bd->width;
- dst_data = (char*)g_malloc(bd->height * line_bytes + 16, 0);
- if (bd->compressed)
+ struct mod *mod;
+ int x;
+ int y;
+ int cx;
+ int cy;
+
+ LLOGLN(10, ("lfreerdp_set_bounds: %p", bounds));
+ mod = ((struct mod_context *)context)->modi;
+
+ if (bounds != 0)
{
- bitmap_decompress(bd->bitmapDataStream, (tui8*)dst_data, bd->width,
- bd->height, bd->bitmapLength, server_bpp, server_bpp);
+ x = bounds->left;
+ y = bounds->top;
+ cx = (bounds->right - bounds->left) + 1;
+ cy = (bounds->bottom - bounds->top) + 1;
+ mod->server_set_clip(mod, x, y, cx, cy);
}
else
- { /* bitmap is upside down */
- src = (char*)(bd->bitmapDataStream);
- dst = dst_data + bd->height * line_bytes;
- for (j = 0; j < bd->height; j++)
- {
- dst -= line_bytes;
- g_memcpy(dst, src, line_bytes);
- src += line_bytes;
- }
+ {
+ mod->server_reset_clip(mod);
}
- dst_data1 = convert_bitmap(server_bpp, client_bpp, dst_data,
- bd->width, bd->height, mod->colormap);
- mod->server_paint_rect(mod, bd->destLeft, bd->destTop, cx, cy,
- dst_data1, bd->width, bd->height, 0, 0);
- if (dst_data1 != dst_data)
+}
+
+/******************************************************************************/
+static void DEFAULT_CC
+lfreerdp_bitmap_update(rdpContext *context, BITMAP_UPDATE *bitmap)
+{
+ struct mod *mod;
+ int index;
+ int cx;
+ int cy;
+ int server_bpp;
+ int server_Bpp;
+ int client_bpp;
+ int j;
+ int line_bytes;
+ BITMAP_DATA *bd;
+ char *dst_data;
+ char *dst_data1;
+ char *src;
+ char *dst;
+
+ mod = ((struct mod_context *)context)->modi;
+ LLOGLN(10, ("lfreerdp_bitmap_update: %d %d", bitmap->number, bitmap->count));
+
+ server_bpp = mod->inst->settings->color_depth;
+ server_Bpp = (server_bpp + 7) / 8;
+ client_bpp = mod->bpp;
+
+ for (index = 0; index < bitmap->number; index++)
{
- g_free(dst_data1);
+ bd = bitmap->rectangles + index;
+ cx = (bd->destRight - bd->destLeft) + 1;
+ cy = (bd->destBottom - bd->destTop) + 1;
+ line_bytes = server_Bpp * bd->width;
+ dst_data = (char *)g_malloc(bd->height * line_bytes + 16, 0);
+
+ if (bd->compressed)
+ {
+ bitmap_decompress(bd->bitmapDataStream, (tui8 *)dst_data, bd->width,
+ bd->height, bd->bitmapLength, server_bpp, server_bpp);
+ }
+ else
+ {
+ /* bitmap is upside down */
+ src = (char *)(bd->bitmapDataStream);
+ dst = dst_data + bd->height * line_bytes;
+
+ for (j = 0; j < bd->height; j++)
+ {
+ dst -= line_bytes;
+ g_memcpy(dst, src, line_bytes);
+ src += line_bytes;
+ }
+ }
+
+ dst_data1 = convert_bitmap(server_bpp, client_bpp, dst_data,
+ bd->width, bd->height, mod->colormap);
+ mod->server_paint_rect(mod, bd->destLeft, bd->destTop, cx, cy,
+ dst_data1, bd->width, bd->height, 0, 0);
+
+ if (dst_data1 != dst_data)
+ {
+ g_free(dst_data1);
+ }
+
+ g_free(dst_data);
}
- g_free(dst_data);
- }
}
/******************************************************************************/
static void DEFAULT_CC
-lfreerdp_dst_blt(rdpContext* context, DSTBLT_ORDER* dstblt)
+lfreerdp_dst_blt(rdpContext *context, DSTBLT_ORDER *dstblt)
{
- struct mod* mod;
-
- mod = ((struct mod_context*)context)->modi;
- LLOGLN(10, ("lfreerdp_dst_blt:"));
- mod->server_set_opcode(mod, dstblt->bRop);
- mod->server_fill_rect(mod, dstblt->nLeftRect, dstblt->nTopRect,
- dstblt->nWidth, dstblt->nHeight);
- mod->server_set_opcode(mod, 0xcc);
+ struct mod *mod;
+
+ mod = ((struct mod_context *)context)->modi;
+ LLOGLN(10, ("lfreerdp_dst_blt:"));
+ mod->server_set_opcode(mod, dstblt->bRop);
+ mod->server_fill_rect(mod, dstblt->nLeftRect, dstblt->nTopRect,
+ dstblt->nWidth, dstblt->nHeight);
+ mod->server_set_opcode(mod, 0xcc);
}
/******************************************************************************/
static void DEFAULT_CC
-lfreerdp_pat_blt(rdpContext* context, PATBLT_ORDER* patblt)
+lfreerdp_pat_blt(rdpContext *context, PATBLT_ORDER *patblt)
{
- struct mod* mod;
- int idx;
- int fgcolor;
- int bgcolor;
- int server_bpp;
- int client_bpp;
- struct brush_item* bi;
-
- mod = ((struct mod_context*)context)->modi;
- LLOGLN(10, ("lfreerdp_pat_blt:"));
-
- server_bpp = mod->inst->settings->color_depth;
- client_bpp = mod->bpp;
- LLOGLN(0, ("lfreerdp_pat_blt: bpp %d %d", server_bpp, client_bpp));
-
- fgcolor = convert_color(server_bpp, client_bpp,
- patblt->foreColor, mod->colormap);
- bgcolor = convert_color(server_bpp, client_bpp,
- patblt->backColor, mod->colormap);
-
- mod->server_set_mixmode(mod, 1);
- mod->server_set_opcode(mod, patblt->bRop);
- mod->server_set_fgcolor(mod, fgcolor);
- mod->server_set_bgcolor(mod, bgcolor);
-
- if (patblt->brush.style & 0x80)
- {
- idx = patblt->brush.hatch;
- if ((idx < 0) || (idx >= 64))
+ struct mod *mod;
+ int idx;
+ int fgcolor;
+ int bgcolor;
+ int server_bpp;
+ int client_bpp;
+ struct brush_item *bi;
+
+ mod = ((struct mod_context *)context)->modi;
+ LLOGLN(10, ("lfreerdp_pat_blt:"));
+
+ server_bpp = mod->inst->settings->color_depth;
+ client_bpp = mod->bpp;
+ LLOGLN(0, ("lfreerdp_pat_blt: bpp %d %d", server_bpp, client_bpp));
+
+ fgcolor = convert_color(server_bpp, client_bpp,
+ patblt->foreColor, mod->colormap);
+ bgcolor = convert_color(server_bpp, client_bpp,
+ patblt->backColor, mod->colormap);
+
+ mod->server_set_mixmode(mod, 1);
+ mod->server_set_opcode(mod, patblt->bRop);
+ mod->server_set_fgcolor(mod, fgcolor);
+ mod->server_set_bgcolor(mod, bgcolor);
+
+ if (patblt->brush.style & 0x80)
+ {
+ idx = patblt->brush.hatch;
+
+ if ((idx < 0) || (idx >= 64))
+ {
+ LLOGLN(0, ("lfreerdp_pat_blt: error"));
+ return;
+ }
+
+ bi = mod->brush_cache + idx;
+ mod->server_set_brush(mod, patblt->brush.x, patblt->brush.y,
+ 3, bi->b8x8);
+ }
+ else
{
- LLOGLN(0, ("lfreerdp_pat_blt: error"));
- return;
+ mod->server_set_brush(mod, patblt->brush.x, patblt->brush.y,
+ patblt->brush.style,
+ (char *)(patblt->brush.p8x8));
}
- bi = mod->brush_cache + idx;
- mod->server_set_brush(mod, patblt->brush.x, patblt->brush.y,
- 3, bi->b8x8);
- }
- else
- {
- mod->server_set_brush(mod, patblt->brush.x, patblt->brush.y,
- patblt->brush.style,
- (char*)(patblt->brush.p8x8));
- }
- mod->server_fill_rect(mod, patblt->nLeftRect, patblt->nTopRect,
- patblt->nWidth, patblt->nHeight);
- mod->server_set_opcode(mod, 0xcc);
- mod->server_set_mixmode(mod, 0);
+
+ mod->server_fill_rect(mod, patblt->nLeftRect, patblt->nTopRect,
+ patblt->nWidth, patblt->nHeight);
+ mod->server_set_opcode(mod, 0xcc);
+ mod->server_set_mixmode(mod, 0);
}
/******************************************************************************/
static void DEFAULT_CC
-lfreerdp_scr_blt(rdpContext* context, SCRBLT_ORDER* scrblt)
+lfreerdp_scr_blt(rdpContext *context, SCRBLT_ORDER *scrblt)
{
- struct mod* mod;
-
- mod = ((struct mod_context*)context)->modi;
- LLOGLN(10, ("lfreerdp_scr_blt:"));
- mod->server_set_opcode(mod, scrblt->bRop);
- mod->server_screen_blt(mod, scrblt->nLeftRect, scrblt->nTopRect,
- scrblt->nWidth, scrblt->nHeight,
- scrblt->nXSrc, scrblt->nYSrc);
- mod->server_set_opcode(mod, 0xcc);
+ struct mod *mod;
+
+ mod = ((struct mod_context *)context)->modi;
+ LLOGLN(10, ("lfreerdp_scr_blt:"));
+ mod->server_set_opcode(mod, scrblt->bRop);
+ mod->server_screen_blt(mod, scrblt->nLeftRect, scrblt->nTopRect,
+ scrblt->nWidth, scrblt->nHeight,
+ scrblt->nXSrc, scrblt->nYSrc);
+ mod->server_set_opcode(mod, 0xcc);
}
/******************************************************************************/
static void DEFAULT_CC
-lfreerdp_opaque_rect(rdpContext* context, OPAQUE_RECT_ORDER* opaque_rect)
+lfreerdp_opaque_rect(rdpContext *context, OPAQUE_RECT_ORDER *opaque_rect)
{
- struct mod* mod;
- int server_bpp;
- int client_bpp;
- int fgcolor;
-
- mod = ((struct mod_context*)context)->modi;
- LLOGLN(10, ("lfreerdp_opaque_rect:"));
- server_bpp = mod->inst->settings->color_depth;
- client_bpp = mod->bpp;
- fgcolor = convert_color(server_bpp, client_bpp,
- opaque_rect->color, mod->colormap);
- mod->server_set_fgcolor(mod, fgcolor);
- mod->server_fill_rect(mod, opaque_rect->nLeftRect, opaque_rect->nTopRect,
- opaque_rect->nWidth, opaque_rect->nHeight);
+ struct mod *mod;
+ int server_bpp;
+ int client_bpp;
+ int fgcolor;
+
+ mod = ((struct mod_context *)context)->modi;
+ LLOGLN(10, ("lfreerdp_opaque_rect:"));
+ server_bpp = mod->inst->settings->color_depth;
+ client_bpp = mod->bpp;
+ fgcolor = convert_color(server_bpp, client_bpp,
+ opaque_rect->color, mod->colormap);
+ mod->server_set_fgcolor(mod, fgcolor);
+ mod->server_fill_rect(mod, opaque_rect->nLeftRect, opaque_rect->nTopRect,
+ opaque_rect->nWidth, opaque_rect->nHeight);
}
/******************************************************************************/
static void DEFAULT_CC
-lfreerdp_mem_blt(rdpContext* context, MEMBLT_ORDER* memblt)
+lfreerdp_mem_blt(rdpContext *context, MEMBLT_ORDER *memblt)
{
- int id;
- int idx;
- struct mod* mod;
- struct bitmap_item* bi;
-
- mod = ((struct mod_context*)context)->modi;
- LLOGLN(10, ("lfreerdp_mem_blt: cacheId %d cacheIndex %d",
- memblt->cacheId, memblt->cacheIndex));
-
- id = memblt->cacheId;
- idx = memblt->cacheIndex;
-
- if (idx == 32767) /* BITMAPCACHE_WAITING_LIST_INDEX */
- {
- idx = 4096 - 1;
- }
-
- if ((id < 0) || (id >= 4))
- {
- LLOGLN(0, ("lfreerdp_mem_blt: bad id [%d]", id));
- return;
- }
- if ((idx < 0) || (idx >= 4096))
- {
- LLOGLN(0, ("lfreerdp_mem_blt: bad idx [%d]", idx));
- return;
- }
-
- bi = &(mod->bitmap_cache[id][idx]);
-
- mod->server_set_opcode(mod, memblt->bRop);
- mod->server_paint_rect(mod, memblt->nLeftRect, memblt->nTopRect,
- memblt->nWidth, memblt->nHeight,
- bi->data, bi->width, bi->height,
- memblt->nXSrc, memblt->nYSrc);
- mod->server_set_opcode(mod, 0xcc);
+ int id;
+ int idx;
+ struct mod *mod;
+ struct bitmap_item *bi;
+
+ mod = ((struct mod_context *)context)->modi;
+ LLOGLN(10, ("lfreerdp_mem_blt: cacheId %d cacheIndex %d",
+ memblt->cacheId, memblt->cacheIndex));
+
+ id = memblt->cacheId;
+ idx = memblt->cacheIndex;
+
+ if (idx == 32767) /* BITMAPCACHE_WAITING_LIST_INDEX */
+ {
+ idx = 4096 - 1;
+ }
+
+ if ((id < 0) || (id >= 4))
+ {
+ LLOGLN(0, ("lfreerdp_mem_blt: bad id [%d]", id));
+ return;
+ }
+
+ if ((idx < 0) || (idx >= 4096))
+ {
+ LLOGLN(0, ("lfreerdp_mem_blt: bad idx [%d]", idx));
+ return;
+ }
+
+ bi = &(mod->bitmap_cache[id][idx]);
+
+ mod->server_set_opcode(mod, memblt->bRop);
+ mod->server_paint_rect(mod, memblt->nLeftRect, memblt->nTopRect,
+ memblt->nWidth, memblt->nHeight,
+ bi->data, bi->width, bi->height,
+ memblt->nXSrc, memblt->nYSrc);
+ mod->server_set_opcode(mod, 0xcc);
}
/******************************************************************************/
static void DEFAULT_CC
-lfreerdp_glyph_index(rdpContext* context, GLYPH_INDEX_ORDER* glyph_index)
+lfreerdp_glyph_index(rdpContext *context, GLYPH_INDEX_ORDER *glyph_index)
{
- struct mod* mod;
- int server_bpp;
- int client_bpp;
- int fgcolor;
- int bgcolor;
-
- mod = ((struct mod_context*)context)->modi;
- LLOGLN(10, ("lfreerdp_glyph_index:"));
- server_bpp = mod->inst->settings->color_depth;
- client_bpp = mod->bpp;
- fgcolor = convert_color(server_bpp, client_bpp,
- glyph_index->foreColor, mod->colormap);
- bgcolor = convert_color(server_bpp, client_bpp,
- glyph_index->backColor, mod->colormap);
- mod->server_set_bgcolor(mod, fgcolor);
- mod->server_set_fgcolor(mod, bgcolor);
- mod->server_draw_text(mod, glyph_index->cacheId, glyph_index->flAccel,
- glyph_index->fOpRedundant,
- glyph_index->bkLeft, glyph_index->bkTop,
- glyph_index->bkRight, glyph_index->bkBottom,
- glyph_index->opLeft, glyph_index->opTop,
- glyph_index->opRight, glyph_index->opBottom,
- glyph_index->x, glyph_index->y,
- (char*)(glyph_index->data), glyph_index->cbData);
+ struct mod *mod;
+ int server_bpp;
+ int client_bpp;
+ int fgcolor;
+ int bgcolor;
+
+ mod = ((struct mod_context *)context)->modi;
+ LLOGLN(10, ("lfreerdp_glyph_index:"));
+ server_bpp = mod->inst->settings->color_depth;
+ client_bpp = mod->bpp;
+ fgcolor = convert_color(server_bpp, client_bpp,
+ glyph_index->foreColor, mod->colormap);
+ bgcolor = convert_color(server_bpp, client_bpp,
+ glyph_index->backColor, mod->colormap);
+ mod->server_set_bgcolor(mod, fgcolor);
+ mod->server_set_fgcolor(mod, bgcolor);
+ mod->server_draw_text(mod, glyph_index->cacheId, glyph_index->flAccel,
+ glyph_index->fOpRedundant,
+ glyph_index->bkLeft, glyph_index->bkTop,
+ glyph_index->bkRight, glyph_index->bkBottom,
+ glyph_index->opLeft, glyph_index->opTop,
+ glyph_index->opRight, glyph_index->opBottom,
+ glyph_index->x, glyph_index->y,
+ (char *)(glyph_index->data), glyph_index->cbData);
}
/******************************************************************************/
static void DEFAULT_CC
-lfreerdp_line_to(rdpContext* context, LINE_TO_ORDER* line_to)
+lfreerdp_line_to(rdpContext *context, LINE_TO_ORDER *line_to)
{
- struct mod* mod;
- int server_bpp;
- int client_bpp;
- int fgcolor;
- int bgcolor;
-
- mod = ((struct mod_context*)context)->modi;
- LLOGLN(10, ("lfreerdp_line_to:"));
- mod->server_set_opcode(mod, line_to->bRop2);
- server_bpp = mod->inst->settings->color_depth;
- client_bpp = mod->bpp;
- fgcolor = convert_color(server_bpp, client_bpp,
- line_to->penColor, mod->colormap);
- bgcolor = convert_color(server_bpp, client_bpp,
- line_to->backColor, mod->colormap);
- mod->server_set_fgcolor(mod, fgcolor);
- mod->server_set_bgcolor(mod, bgcolor);
- mod->server_set_pen(mod, line_to->penStyle, line_to->penWidth);
- mod->server_draw_line(mod, line_to->nXStart, line_to->nYStart,
- line_to->nXEnd, line_to->nYEnd);
- mod->server_set_opcode(mod, 0xcc);
+ struct mod *mod;
+ int server_bpp;
+ int client_bpp;
+ int fgcolor;
+ int bgcolor;
+
+ mod = ((struct mod_context *)context)->modi;
+ LLOGLN(10, ("lfreerdp_line_to:"));
+ mod->server_set_opcode(mod, line_to->bRop2);
+ server_bpp = mod->inst->settings->color_depth;
+ client_bpp = mod->bpp;
+ fgcolor = convert_color(server_bpp, client_bpp,
+ line_to->penColor, mod->colormap);
+ bgcolor = convert_color(server_bpp, client_bpp,
+ line_to->backColor, mod->colormap);
+ mod->server_set_fgcolor(mod, fgcolor);
+ mod->server_set_bgcolor(mod, bgcolor);
+ mod->server_set_pen(mod, line_to->penStyle, line_to->penWidth);
+ mod->server_draw_line(mod, line_to->nXStart, line_to->nYStart,
+ line_to->nXEnd, line_to->nYEnd);
+ mod->server_set_opcode(mod, 0xcc);
}
/******************************************************************************/
static void DEFAULT_CC
-lfreerdp_cache_bitmap(rdpContext* context, CACHE_BITMAP_ORDER* cache_bitmap_order)
+lfreerdp_cache_bitmap(rdpContext *context, CACHE_BITMAP_ORDER *cache_bitmap_order)
{
- LLOGLN(10, ("lfreerdp_cache_bitmap:"));
+ LLOGLN(10, ("lfreerdp_cache_bitmap:"));
}
/******************************************************************************/
/* Turn the bitmap upside down*/
static void DEFAULT_CC
-lfreerdp_upsidedown(uint8* destination, CACHE_BITMAP_V2_ORDER* cache_bitmap_v2_order, int server_Bpp)
+lfreerdp_upsidedown(uint8 *destination, CACHE_BITMAP_V2_ORDER *cache_bitmap_v2_order, int server_Bpp)
{
- tui8* src;
- tui8* dst;
- int line_bytes;
- int j;
-
- if (destination == NULL)
- {
- LLOGLN(0, ("lfreerdp_upsidedown: destination pointer is NULL !!!"));
- return;
- }
- line_bytes = server_Bpp * cache_bitmap_v2_order->bitmapWidth;
- src = cache_bitmap_v2_order->bitmapDataStream;
- dst = destination + ((cache_bitmap_v2_order->bitmapHeight) * line_bytes);
- for (j = 0; j < cache_bitmap_v2_order->bitmapHeight; j++)
- {
- dst -= line_bytes;
- g_memcpy(dst, src, line_bytes);
- src += line_bytes;
- }
+ tui8 *src;
+ tui8 *dst;
+ int line_bytes;
+ int j;
+
+ if (destination == NULL)
+ {
+ LLOGLN(0, ("lfreerdp_upsidedown: destination pointer is NULL !!!"));
+ return;
+ }
+
+ line_bytes = server_Bpp * cache_bitmap_v2_order->bitmapWidth;
+ src = cache_bitmap_v2_order->bitmapDataStream;
+ dst = destination + ((cache_bitmap_v2_order->bitmapHeight) * line_bytes);
+
+ for (j = 0; j < cache_bitmap_v2_order->bitmapHeight; j++)
+ {
+ dst -= line_bytes;
+ g_memcpy(dst, src, line_bytes);
+ src += line_bytes;
+ }
}
/******************************************************************************/
static void DEFAULT_CC
-lfreerdp_cache_bitmapV2(rdpContext* context,
- CACHE_BITMAP_V2_ORDER* cache_bitmap_v2_order)
+lfreerdp_cache_bitmapV2(rdpContext *context,
+ CACHE_BITMAP_V2_ORDER *cache_bitmap_v2_order)
{
- char* dst_data;
- char* dst_data1;
- int bytes;
- int width;
- int height;
- int id;
- int idx;
- int flags;
- int server_bpp;
- int server_Bpp;
- int client_bpp;
- struct mod* mod;
-
- LLOGLN(10, ("lfreerdp_cache_bitmapV2: %d %d 0x%8.8x compressed %d",
- cache_bitmap_v2_order->cacheId,
- cache_bitmap_v2_order->cacheIndex,
- cache_bitmap_v2_order->flags,
- cache_bitmap_v2_order->compressed));
-
- mod = ((struct mod_context*)context)->modi;
- id = cache_bitmap_v2_order->cacheId;
- idx = cache_bitmap_v2_order->cacheIndex;
- flags = cache_bitmap_v2_order->flags;
- if (flags & 0x10) /* CBR2_DO_NOT_CACHE */
- {
- idx = 4096 - 1;
- }
- if ((id < 0) || (id >= 4))
- {
- LLOGLN(0, ("lfreerdp_cache_bitmapV2: bad id [%d]", id));
- return;
- }
- if ((idx < 0) || (idx >= 4096))
- {
- LLOGLN(0, ("lfreerdp_cache_bitmapV2: bad idx [%d]", idx));
- return;
- }
-
- server_bpp = mod->inst->settings->color_depth;
- server_Bpp = (server_bpp + 7) / 8;
- client_bpp = mod->bpp;
-
- width = cache_bitmap_v2_order->bitmapWidth;
- height = cache_bitmap_v2_order->bitmapHeight;
- bytes = width * height * server_Bpp + 16;
- dst_data = (char*)g_malloc(bytes, 0);
- if (cache_bitmap_v2_order->compressed)
- {
- bitmap_decompress(cache_bitmap_v2_order->bitmapDataStream,
- (tui8*)dst_data, width, height,
- cache_bitmap_v2_order->bitmapLength,
- server_bpp, server_bpp);
- }
- else
- {
- /* Uncompressed bitmaps are upside down */
- lfreerdp_upsidedown((tui8*)dst_data, cache_bitmap_v2_order, server_Bpp);
- LLOGLN(10, ("lfreerdp_cache_bitmapV2: upside down progressed"));
- }
- dst_data1 = convert_bitmap(server_bpp, client_bpp, dst_data,
- width, height, mod->colormap);
- g_free(mod->bitmap_cache[id][idx].data);
- mod->bitmap_cache[id][idx].width = width;
- mod->bitmap_cache[id][idx].height = height;
- mod->bitmap_cache[id][idx].data = dst_data1;
- if (dst_data != dst_data1)
- {
- g_free(dst_data);
- }
+ char *dst_data;
+ char *dst_data1;
+ int bytes;
+ int width;
+ int height;
+ int id;
+ int idx;
+ int flags;
+ int server_bpp;
+ int server_Bpp;
+ int client_bpp;
+ struct mod *mod;
+
+ LLOGLN(10, ("lfreerdp_cache_bitmapV2: %d %d 0x%8.8x compressed %d",
+ cache_bitmap_v2_order->cacheId,
+ cache_bitmap_v2_order->cacheIndex,
+ cache_bitmap_v2_order->flags,
+ cache_bitmap_v2_order->compressed));
+
+ mod = ((struct mod_context *)context)->modi;
+ id = cache_bitmap_v2_order->cacheId;
+ idx = cache_bitmap_v2_order->cacheIndex;
+ flags = cache_bitmap_v2_order->flags;
+
+ if (flags & 0x10) /* CBR2_DO_NOT_CACHE */
+ {
+ idx = 4096 - 1;
+ }
+
+ if ((id < 0) || (id >= 4))
+ {
+ LLOGLN(0, ("lfreerdp_cache_bitmapV2: bad id [%d]", id));
+ return;
+ }
+
+ if ((idx < 0) || (idx >= 4096))
+ {
+ LLOGLN(0, ("lfreerdp_cache_bitmapV2: bad idx [%d]", idx));
+ return;
+ }
+
+ server_bpp = mod->inst->settings->color_depth;
+ server_Bpp = (server_bpp + 7) / 8;
+ client_bpp = mod->bpp;
+
+ width = cache_bitmap_v2_order->bitmapWidth;
+ height = cache_bitmap_v2_order->bitmapHeight;
+ bytes = width * height * server_Bpp + 16;
+ dst_data = (char *)g_malloc(bytes, 0);
+
+ if (cache_bitmap_v2_order->compressed)
+ {
+ bitmap_decompress(cache_bitmap_v2_order->bitmapDataStream,
+ (tui8 *)dst_data, width, height,
+ cache_bitmap_v2_order->bitmapLength,
+ server_bpp, server_bpp);
+ }
+ else
+ {
+ /* Uncompressed bitmaps are upside down */
+ lfreerdp_upsidedown((tui8 *)dst_data, cache_bitmap_v2_order, server_Bpp);
+ LLOGLN(10, ("lfreerdp_cache_bitmapV2: upside down progressed"));
+ }
+
+ dst_data1 = convert_bitmap(server_bpp, client_bpp, dst_data,
+ width, height, mod->colormap);
+ g_free(mod->bitmap_cache[id][idx].data);
+ mod->bitmap_cache[id][idx].width = width;
+ mod->bitmap_cache[id][idx].height = height;
+ mod->bitmap_cache[id][idx].data = dst_data1;
+
+ if (dst_data != dst_data1)
+ {
+ g_free(dst_data);
+ }
}
/******************************************************************************/
static void DEFAULT_CC
-lfreerdp_cache_glyph(rdpContext* context, CACHE_GLYPH_ORDER* cache_glyph_order)
+lfreerdp_cache_glyph(rdpContext *context, CACHE_GLYPH_ORDER *cache_glyph_order)
{
- int index;
- GLYPH_DATA* gd;
- struct mod* mod;
-
- mod = ((struct mod_context*)context)->modi;
- LLOGLN(10, ("lfreerdp_cache_glyph: %d", cache_glyph_order->cGlyphs));
- for (index = 0; index < cache_glyph_order->cGlyphs; index++)
- {
- gd = cache_glyph_order->glyphData[index];
- LLOGLN(10, (" %d %d %d %d %d", gd->cacheIndex, gd->x, gd->y,
- gd->cx, gd->cy));
- mod->server_add_char(mod, cache_glyph_order->cacheId, gd->cacheIndex,
- gd->x, gd->y, gd->cx, gd->cy, (char*)(gd->aj));
- xfree(gd->aj);
- gd->aj = 0;
- xfree(gd);
- cache_glyph_order->glyphData[index] = 0;
- }
- xfree(cache_glyph_order->unicodeCharacters);
- cache_glyph_order->unicodeCharacters = 0;
+ int index;
+ GLYPH_DATA *gd;
+ struct mod *mod;
+
+ mod = ((struct mod_context *)context)->modi;
+ LLOGLN(10, ("lfreerdp_cache_glyph: %d", cache_glyph_order->cGlyphs));
+
+ for (index = 0; index < cache_glyph_order->cGlyphs; index++)
+ {
+ gd = cache_glyph_order->glyphData[index];
+ LLOGLN(10, (" %d %d %d %d %d", gd->cacheIndex, gd->x, gd->y,
+ gd->cx, gd->cy));
+ mod->server_add_char(mod, cache_glyph_order->cacheId, gd->cacheIndex,
+ gd->x, gd->y, gd->cx, gd->cy, (char *)(gd->aj));
+ xfree(gd->aj);
+ gd->aj = 0;
+ xfree(gd);
+ cache_glyph_order->glyphData[index] = 0;
+ }
+
+ xfree(cache_glyph_order->unicodeCharacters);
+ cache_glyph_order->unicodeCharacters = 0;
}
/******************************************************************************/
static void DEFAULT_CC
-lfreerdp_cache_brush(rdpContext* context, CACHE_BRUSH_ORDER* cache_brush_order)
+lfreerdp_cache_brush(rdpContext *context, CACHE_BRUSH_ORDER *cache_brush_order)
{
- int idx;
- int bytes;
- int bpp;
- int cx;
- int cy;
- struct mod* mod;
-
- mod = ((struct mod_context*)context)->modi;
- bpp = cache_brush_order->bpp;
- cx = cache_brush_order->cx;
- cy = cache_brush_order->cy;
- idx = cache_brush_order->index;
- bytes = cache_brush_order->length;
- LLOGLN(10, ("lfreerdp_cache_brush: bpp %d cx %d cy %d idx %d bytes %d",
- bpp, cx, cy, idx, bytes));
- if ((idx < 0) || (idx >= 64))
- {
- LLOGLN(0, ("lfreerdp_cache_brush: error idx %d", idx));
- return;
- }
- if ((bpp != 1) || (cx != 8) || (cy != 8))
- {
- LLOGLN(0, ("lfreerdp_cache_brush: error unsupported brush "
- "bpp %d cx %d cy %d", bpp, cx, cy));
- return;
- }
- mod->brush_cache[idx].bpp = bpp;
- mod->brush_cache[idx].width = cx;
- mod->brush_cache[idx].height = cy;
- mod->brush_cache[idx].data = mod->brush_cache[idx].b8x8;
- if (bytes > 8)
- {
- bytes = 8;
- }
- g_memset(mod->brush_cache[idx].data, 0, 8);
- if (bytes > 0)
- {
+ int idx;
+ int bytes;
+ int bpp;
+ int cx;
+ int cy;
+ struct mod *mod;
+
+ mod = ((struct mod_context *)context)->modi;
+ bpp = cache_brush_order->bpp;
+ cx = cache_brush_order->cx;
+ cy = cache_brush_order->cy;
+ idx = cache_brush_order->index;
+ bytes = cache_brush_order->length;
+ LLOGLN(10, ("lfreerdp_cache_brush: bpp %d cx %d cy %d idx %d bytes %d",
+ bpp, cx, cy, idx, bytes));
+
+ if ((idx < 0) || (idx >= 64))
+ {
+ LLOGLN(0, ("lfreerdp_cache_brush: error idx %d", idx));
+ return;
+ }
+
+ if ((bpp != 1) || (cx != 8) || (cy != 8))
+ {
+ LLOGLN(0, ("lfreerdp_cache_brush: error unsupported brush "
+ "bpp %d cx %d cy %d", bpp, cx, cy));
+ return;
+ }
+
+ mod->brush_cache[idx].bpp = bpp;
+ mod->brush_cache[idx].width = cx;
+ mod->brush_cache[idx].height = cy;
+ mod->brush_cache[idx].data = mod->brush_cache[idx].b8x8;
+
if (bytes > 8)
{
- LLOGLN(0, ("lfreerdp_cache_brush: bytes to big %d", bytes));
- bytes = 8;
+ bytes = 8;
+ }
+
+ g_memset(mod->brush_cache[idx].data, 0, 8);
+
+ if (bytes > 0)
+ {
+ if (bytes > 8)
+ {
+ LLOGLN(0, ("lfreerdp_cache_brush: bytes to big %d", bytes));
+ bytes = 8;
+ }
+
+ g_memcpy(mod->brush_cache[idx].data, cache_brush_order->data, bytes);
}
- g_memcpy(mod->brush_cache[idx].data, cache_brush_order->data, bytes);
- }
- LLOGLN(10, ("lfreerdp_cache_brush: out bpp %d cx %d cy %d idx %d bytes %d",
- bpp, cx, cy, idx, bytes));
- xfree(cache_brush_order->data);
- cache_brush_order->data = 0;
+ LLOGLN(10, ("lfreerdp_cache_brush: out bpp %d cx %d cy %d idx %d bytes %d",
+ bpp, cx, cy, idx, bytes));
+
+ xfree(cache_brush_order->data);
+ cache_brush_order->data = 0;
}
/******************************************************************************/
static void DEFAULT_CC
-lfreerdp_pointer_position(rdpContext* context,
- POINTER_POSITION_UPDATE* pointer_position)
+lfreerdp_pointer_position(rdpContext *context,
+ POINTER_POSITION_UPDATE *pointer_position)
{
- LLOGLN(0, ("lfreerdp_pointer_position:"));
+ LLOGLN(0, ("lfreerdp_pointer_position:"));
}
/******************************************************************************/
static void DEFAULT_CC
-lfreerdp_pointer_system(rdpContext* context,
- POINTER_SYSTEM_UPDATE* pointer_system)
+lfreerdp_pointer_system(rdpContext *context,
+ POINTER_SYSTEM_UPDATE *pointer_system)
{
- LLOGLN(0, ("lfreerdp_pointer_system: - no code here"));
+ LLOGLN(0, ("lfreerdp_pointer_system: - no code here"));
}
/******************************************************************************/
static void DEFAULT_CC
-lfreerdp_pointer_color(rdpContext* context,
- POINTER_COLOR_UPDATE* pointer_color)
+lfreerdp_pointer_color(rdpContext *context,
+ POINTER_COLOR_UPDATE *pointer_color)
{
- LLOGLN(0, ("lfreerdp_pointer_color:"));
+ LLOGLN(0, ("lfreerdp_pointer_color:"));
}
/******************************************************************************/
static int APP_CC
-lfreerdp_get_pixel(void* bits, int width, int height, int bpp,
+lfreerdp_get_pixel(void *bits, int width, int height, int bpp,
int delta, int x, int y)
{
- int start;
- int shift;
- int pixel;
- tui8* src8;
-
- if (bpp == 1)
- {
- src8 = (tui8*)bits;
- start = (y * delta) + x / 8;
- shift = x % 8;
- pixel = (src8[start] & (0x80 >> shift)) != 0;
- return pixel ? 0xffffff : 0;
- }
- else
- {
- LLOGLN(0, ("lfreerdp_get_pixel: unknown bpp %d", bpp));
- }
- return 0;
+ int start;
+ int shift;
+ int pixel;
+ tui8 *src8;
+
+ if (bpp == 1)
+ {
+ src8 = (tui8 *)bits;
+ start = (y * delta) + x / 8;
+ shift = x % 8;
+ pixel = (src8[start] & (0x80 >> shift)) != 0;
+ return pixel ? 0xffffff : 0;
+ }
+ else
+ {
+ LLOGLN(0, ("lfreerdp_get_pixel: unknown bpp %d", bpp));
+ }
+
+ return 0;
}
/******************************************************************************/
static int APP_CC
-lfreerdp_set_pixel(int pixel, void* bits, int width, int height, int bpp,
+lfreerdp_set_pixel(int pixel, void *bits, int width, int height, int bpp,
int delta, int x, int y)
{
- tui8* dst8;
- int start;
- int shift;
-
- if (bpp == 1)
- {
- dst8 = (tui8*)bits;
- start = (y * delta) + x / 8;
- shift = x % 8;
- if (pixel)
+ tui8 *dst8;
+ int start;
+ int shift;
+
+ if (bpp == 1)
+ {
+ dst8 = (tui8 *)bits;
+ start = (y * delta) + x / 8;
+ shift = x % 8;
+
+ if (pixel)
+ {
+ dst8[start] = dst8[start] | (0x80 >> shift);
+ }
+ else
+ {
+ dst8[start] = dst8[start] & ~(0x80 >> shift);
+ }
+ }
+ else if (bpp == 24)
{
- dst8[start] = dst8[start] | (0x80 >> shift);
+ dst8 = (tui8 *)bits;
+ dst8 += y * delta + x * 3;
+ dst8[0] = (pixel >> 0) & 0xff;
+ dst8[1] = (pixel >> 8) & 0xff;
+ dst8[2] = (pixel >> 16) & 0xff;
}
else
{
- dst8[start] = dst8[start] & ~(0x80 >> shift);
+ LLOGLN(0, ("lfreerdp_set_pixel: unknown bpp %d", bpp));
}
- }
- else if (bpp == 24)
- {
- dst8 = (tui8*)bits;
- dst8 += y * delta + x * 3;
- dst8[0] = (pixel >> 0) & 0xff;
- dst8[1] = (pixel >> 8) & 0xff;
- dst8[2] = (pixel >> 16) & 0xff;
- }
- else
- {
- LLOGLN(0, ("lfreerdp_set_pixel: unknown bpp %d", bpp));
- }
- return 0;
+
+ return 0;
}
/******************************************************************************/
static int APP_CC
-lfreerdp_convert_color_image(void* dst, int dst_width, int dst_height,
+lfreerdp_convert_color_image(void *dst, int dst_width, int dst_height,
int dst_bpp, int dst_delta,
- void* src, int src_width, int src_height,
+ void *src, int src_width, int src_height,
int src_bpp, int src_delta)
{
- int i;
- int j;
- int pixel;
+ int i;
+ int j;
+ int pixel;
- for (j = 0; j < dst_height; j++)
- {
- for (i = 0; i < dst_width; i++)
+ for (j = 0; j < dst_height; j++)
{
- pixel = lfreerdp_get_pixel(src, src_width, src_height, src_bpp,
- src_delta, i, j);
- lfreerdp_set_pixel(pixel, dst, dst_width, dst_height, dst_bpp,
- dst_delta, i, j);
+ for (i = 0; i < dst_width; i++)
+ {
+ pixel = lfreerdp_get_pixel(src, src_width, src_height, src_bpp,
+ src_delta, i, j);
+ lfreerdp_set_pixel(pixel, dst, dst_width, dst_height, dst_bpp,
+ dst_delta, i, j);
+ }
}
- }
- return 0;
+
+ return 0;
}
/******************************************************************************/
static void DEFAULT_CC
-lfreerdp_pointer_new(rdpContext* context,
- POINTER_NEW_UPDATE* pointer_new)
+lfreerdp_pointer_new(rdpContext *context,
+ POINTER_NEW_UPDATE *pointer_new)
{
- struct mod* mod;
- int index;
- tui8* dst;
- tui8* src;
-
- mod = ((struct mod_context*)context)->modi;
- LLOGLN(0, ("lfreerdp_pointer_new:"));
- LLOGLN(0, (" bpp %d", pointer_new->xorBpp));
- LLOGLN(0, (" width %d height %d", pointer_new->colorPtrAttr.width,
- pointer_new->colorPtrAttr.height));
-
- LLOGLN(0, (" lengthXorMask %d lengthAndMask %d",
- pointer_new->colorPtrAttr.lengthXorMask,
- pointer_new->colorPtrAttr.lengthAndMask));
-
- index = pointer_new->colorPtrAttr.cacheIndex;
- if (pointer_new->xorBpp == 1 &&
- pointer_new->colorPtrAttr.width == 32 &&
- pointer_new->colorPtrAttr.height == 32 &&
- index < 32)
- {
- mod->pointer_cache[index].hotx = pointer_new->colorPtrAttr.xPos;
- mod->pointer_cache[index].hoty = pointer_new->colorPtrAttr.yPos;
-
- dst = (tui8*)(mod->pointer_cache[index].data);
- dst += 32 * 32 * 3 - 32 * 3;
- src = pointer_new->colorPtrAttr.xorMaskData;
- lfreerdp_convert_color_image(dst, 32, 32, 24, 32 * -3,
- src, 32, 32, 1, 32 / 8);
-
- dst = (tui8*)(mod->pointer_cache[index].mask);
- dst +=( 32 * 32 / 8) - (32 / 8);
- src = pointer_new->colorPtrAttr.andMaskData;
- lfreerdp_convert_color_image(dst, 32, 32, 1, 32 / -8,
- src, 32, 32, 1, 32 / 8);
-
- //memcpy(mod->pointer_cache[index].mask,
- // pointer_new->colorPtrAttr.andMaskData, 32 * 32 / 8);
+ struct mod *mod;
+ int index;
+ tui8 *dst;
+ tui8 *src;
+
+ mod = ((struct mod_context *)context)->modi;
+ LLOGLN(0, ("lfreerdp_pointer_new:"));
+ LLOGLN(0, (" bpp %d", pointer_new->xorBpp));
+ LLOGLN(0, (" width %d height %d", pointer_new->colorPtrAttr.width,
+ pointer_new->colorPtrAttr.height));
+
+ LLOGLN(0, (" lengthXorMask %d lengthAndMask %d",
+ pointer_new->colorPtrAttr.lengthXorMask,
+ pointer_new->colorPtrAttr.lengthAndMask));
+
+ index = pointer_new->colorPtrAttr.cacheIndex;
+
+ if (pointer_new->xorBpp == 1 &&
+ pointer_new->colorPtrAttr.width == 32 &&
+ pointer_new->colorPtrAttr.height == 32 &&
+ index < 32)
+ {
+ mod->pointer_cache[index].hotx = pointer_new->colorPtrAttr.xPos;
+ mod->pointer_cache[index].hoty = pointer_new->colorPtrAttr.yPos;
+
+ dst = (tui8 *)(mod->pointer_cache[index].data);
+ dst += 32 * 32 * 3 - 32 * 3;
+ src = pointer_new->colorPtrAttr.xorMaskData;
+ lfreerdp_convert_color_image(dst, 32, 32, 24, 32 * -3,
+ src, 32, 32, 1, 32 / 8);
+
+ dst = (tui8 *)(mod->pointer_cache[index].mask);
+ dst += ( 32 * 32 / 8) - (32 / 8);
+ src = pointer_new->colorPtrAttr.andMaskData;
+ lfreerdp_convert_color_image(dst, 32, 32, 1, 32 / -8,
+ src, 32, 32, 1, 32 / 8);
+
+ //memcpy(mod->pointer_cache[index].mask,
+ // pointer_new->colorPtrAttr.andMaskData, 32 * 32 / 8);
+
+ mod->server_set_cursor(mod, mod->pointer_cache[index].hotx,
+ mod->pointer_cache[index].hoty, mod->pointer_cache[index].data,
+ mod->pointer_cache[index].mask);
+ }
+ else
+ {
+ LLOGLN(0, ("lfreerdp_pointer_new: error bpp %d width %d height %d",
+ pointer_new->xorBpp, pointer_new->colorPtrAttr.width,
+ pointer_new->colorPtrAttr.height));
+ }
- mod->server_set_cursor(mod, mod->pointer_cache[index].hotx,
- mod->pointer_cache[index].hoty, mod->pointer_cache[index].data,
- mod->pointer_cache[index].mask);
- }
- else
- {
- LLOGLN(0, ("lfreerdp_pointer_new: error bpp %d width %d height %d",
- pointer_new->xorBpp, pointer_new->colorPtrAttr.width,
- pointer_new->colorPtrAttr.height));
- }
-
- xfree(pointer_new->colorPtrAttr.xorMaskData);
- pointer_new->colorPtrAttr.xorMaskData = 0;
- xfree(pointer_new->colorPtrAttr.andMaskData);
- pointer_new->colorPtrAttr.andMaskData = 0;
+ xfree(pointer_new->colorPtrAttr.xorMaskData);
+ pointer_new->colorPtrAttr.xorMaskData = 0;
+ xfree(pointer_new->colorPtrAttr.andMaskData);
+ pointer_new->colorPtrAttr.andMaskData = 0;
}
/******************************************************************************/
static void DEFAULT_CC
-lfreerdp_pointer_cached(rdpContext* context,
- POINTER_CACHED_UPDATE* pointer_cached)
+lfreerdp_pointer_cached(rdpContext *context,
+ POINTER_CACHED_UPDATE *pointer_cached)
{
- struct mod* mod;
- int index;
-
- LLOGLN(10, ("lfreerdp_pointer_cached:"));
- mod = ((struct mod_context*)context)->modi;
- index = pointer_cached->cacheIndex;
- mod->server_set_cursor(mod, mod->pointer_cache[index].hotx,
- mod->pointer_cache[index].hoty, mod->pointer_cache[index].data,
- mod->pointer_cache[index].mask);
+ struct mod *mod;
+ int index;
+
+ LLOGLN(10, ("lfreerdp_pointer_cached:"));
+ mod = ((struct mod_context *)context)->modi;
+ index = pointer_cached->cacheIndex;
+ mod->server_set_cursor(mod, mod->pointer_cache[index].hotx,
+ mod->pointer_cache[index].hoty, mod->pointer_cache[index].data,
+ mod->pointer_cache[index].mask);
}
/******************************************************************************/
static boolean DEFAULT_CC
-lfreerdp_pre_connect(freerdp* instance)
+lfreerdp_pre_connect(freerdp *instance)
{
- struct mod* mod;
- int index;
- int error;
- int num_chans;
- int ch_flags;
- char ch_name[256];
- char* dst_ch_name;
-
- LLOGLN(0, ("lfreerdp_pre_connect:"));
- mod = ((struct mod_context*)(instance->context))->modi;
- num_chans = 0;
- index = 0;
- error = mod->server_query_channel(mod, index, ch_name, &ch_flags);
- while (error == 0)
- {
- num_chans++;
- LLOGLN(10, ("lfreerdp_pre_connect: got channel [%s], flags [0x%8.8x]",
- ch_name, ch_flags));
- dst_ch_name = instance->settings->channels[index].name;
- g_memset(dst_ch_name, 0, 8);
- g_snprintf(dst_ch_name, 8, "%s", ch_name);
- instance->settings->channels[index].options = ch_flags;
- index++;
+ struct mod *mod;
+ int index;
+ int error;
+ int num_chans;
+ int ch_flags;
+ char ch_name[256];
+ char *dst_ch_name;
+
+ LLOGLN(0, ("lfreerdp_pre_connect:"));
+ mod = ((struct mod_context *)(instance->context))->modi;
+ num_chans = 0;
+ index = 0;
error = mod->server_query_channel(mod, index, ch_name, &ch_flags);
- }
- instance->settings->num_channels = num_chans;
-
- instance->settings->offscreen_bitmap_cache = false;
-
- instance->settings->glyph_cache = true;
- instance->settings->glyphSupportLevel = GLYPH_SUPPORT_FULL;
- instance->settings->order_support[NEG_GLYPH_INDEX_INDEX] = true;
- instance->settings->order_support[NEG_FAST_GLYPH_INDEX] = false;
- instance->settings->order_support[NEG_FAST_INDEX_INDEX] = false;
- instance->settings->order_support[NEG_SCRBLT_INDEX] = true;
- instance->settings->order_support[NEG_SAVEBITMAP_INDEX] = false;
-
- instance->settings->bitmap_cache = true;
- instance->settings->order_support[NEG_MEMBLT_INDEX] = true;
- instance->settings->order_support[NEG_MEMBLT_V2_INDEX] = true;
- instance->settings->order_support[NEG_MEM3BLT_INDEX] = false;
- instance->settings->order_support[NEG_MEM3BLT_V2_INDEX] = false;
- instance->settings->bitmapCacheV2NumCells = 3; // 5;
- instance->settings->bitmapCacheV2CellInfo[0].numEntries = 0x78; // 600;
- instance->settings->bitmapCacheV2CellInfo[0].persistent = false;
- instance->settings->bitmapCacheV2CellInfo[1].numEntries = 0x78; // 600;
- instance->settings->bitmapCacheV2CellInfo[1].persistent = false;
- instance->settings->bitmapCacheV2CellInfo[2].numEntries = 0x150; // 2048;
- instance->settings->bitmapCacheV2CellInfo[2].persistent = false;
- instance->settings->bitmapCacheV2CellInfo[3].numEntries = 0; // 4096;
- instance->settings->bitmapCacheV2CellInfo[3].persistent = false;
- instance->settings->bitmapCacheV2CellInfo[4].numEntries = 0; // 2048;
- instance->settings->bitmapCacheV2CellInfo[4].persistent = false;
-
- instance->settings->order_support[NEG_MULTIDSTBLT_INDEX] = false;
- instance->settings->order_support[NEG_MULTIPATBLT_INDEX] = false;
- instance->settings->order_support[NEG_MULTISCRBLT_INDEX] = false;
- instance->settings->order_support[NEG_MULTIOPAQUERECT_INDEX] = false;
- instance->settings->order_support[NEG_POLYLINE_INDEX] = false;
-
- instance->settings->username = g_strdup(mod->username);
- instance->settings->password = g_strdup(mod->password);
-
- if (mod->client_info.rail_support_level > 0)
- {
- instance->settings->remote_app = true;
- instance->settings->rail_langbar_supported = true;
- instance->settings->workarea = true;
- instance->settings->performance_flags = PERF_DISABLE_WALLPAPER | PERF_DISABLE_FULLWINDOWDRAG;
- }
-
- // here
- //instance->settings->rdp_version = 4;
-
- instance->update->BeginPaint = lfreerdp_begin_paint;
- instance->update->EndPaint = lfreerdp_end_paint;
- instance->update->SetBounds = lfreerdp_set_bounds;
- instance->update->BitmapUpdate = lfreerdp_bitmap_update;
-
- instance->update->primary->DstBlt = lfreerdp_dst_blt;
- instance->update->primary->PatBlt = lfreerdp_pat_blt;
- instance->update->primary->ScrBlt = lfreerdp_scr_blt;
- instance->update->primary->OpaqueRect = lfreerdp_opaque_rect;
- instance->update->primary->MemBlt = lfreerdp_mem_blt;
- instance->update->primary->GlyphIndex = lfreerdp_glyph_index;
- instance->update->primary->LineTo = lfreerdp_line_to;
-
- instance->update->secondary->CacheBitmap = lfreerdp_cache_bitmap;
- instance->update->secondary->CacheBitmapV2 = lfreerdp_cache_bitmapV2;
- instance->update->secondary->CacheGlyph = lfreerdp_cache_glyph;
- instance->update->secondary->CacheBrush = lfreerdp_cache_brush;
-
- instance->update->pointer->PointerPosition = lfreerdp_pointer_position;
- instance->update->pointer->PointerSystem = lfreerdp_pointer_system;
- instance->update->pointer->PointerColor = lfreerdp_pointer_color;
- instance->update->pointer->PointerNew = lfreerdp_pointer_new;
- instance->update->pointer->PointerCached = lfreerdp_pointer_cached;
-
- if ((mod->username[0] != 0) && (mod->password[0] != 0))
- {
- /* since we have username and password, we can try nla */
- instance->settings->nla_security = 1;
- }
- else
- {
- instance->settings->nla_security = 0;
- }
-
- return true;
+
+ while (error == 0)
+ {
+ num_chans++;
+ LLOGLN(10, ("lfreerdp_pre_connect: got channel [%s], flags [0x%8.8x]",
+ ch_name, ch_flags));
+ dst_ch_name = instance->settings->channels[index].name;
+ g_memset(dst_ch_name, 0, 8);
+ g_snprintf(dst_ch_name, 8, "%s", ch_name);
+ instance->settings->channels[index].options = ch_flags;
+ index++;
+ error = mod->server_query_channel(mod, index, ch_name, &ch_flags);
+ }
+
+ instance->settings->num_channels = num_chans;
+
+ instance->settings->offscreen_bitmap_cache = false;
+
+ instance->settings->glyph_cache = true;
+ instance->settings->glyphSupportLevel = GLYPH_SUPPORT_FULL;
+ instance->settings->order_support[NEG_GLYPH_INDEX_INDEX] = true;
+ instance->settings->order_support[NEG_FAST_GLYPH_INDEX] = false;
+ instance->settings->order_support[NEG_FAST_INDEX_INDEX] = false;
+ instance->settings->order_support[NEG_SCRBLT_INDEX] = true;
+ instance->settings->order_support[NEG_SAVEBITMAP_INDEX] = false;
+
+ instance->settings->bitmap_cache = true;
+ instance->settings->order_support[NEG_MEMBLT_INDEX] = true;
+ instance->settings->order_support[NEG_MEMBLT_V2_INDEX] = true;
+ instance->settings->order_support[NEG_MEM3BLT_INDEX] = false;
+ instance->settings->order_support[NEG_MEM3BLT_V2_INDEX] = false;
+ instance->settings->bitmapCacheV2NumCells = 3; // 5;
+ instance->settings->bitmapCacheV2CellInfo[0].numEntries = 0x78; // 600;
+ instance->settings->bitmapCacheV2CellInfo[0].persistent = false;
+ instance->settings->bitmapCacheV2CellInfo[1].numEntries = 0x78; // 600;
+ instance->settings->bitmapCacheV2CellInfo[1].persistent = false;
+ instance->settings->bitmapCacheV2CellInfo[2].numEntries = 0x150; // 2048;
+ instance->settings->bitmapCacheV2CellInfo[2].persistent = false;
+ instance->settings->bitmapCacheV2CellInfo[3].numEntries = 0; // 4096;
+ instance->settings->bitmapCacheV2CellInfo[3].persistent = false;
+ instance->settings->bitmapCacheV2CellInfo[4].numEntries = 0; // 2048;
+ instance->settings->bitmapCacheV2CellInfo[4].persistent = false;
+
+ instance->settings->order_support[NEG_MULTIDSTBLT_INDEX] = false;
+ instance->settings->order_support[NEG_MULTIPATBLT_INDEX] = false;
+ instance->settings->order_support[NEG_MULTISCRBLT_INDEX] = false;
+ instance->settings->order_support[NEG_MULTIOPAQUERECT_INDEX] = false;
+ instance->settings->order_support[NEG_POLYLINE_INDEX] = false;
+
+ instance->settings->username = g_strdup(mod->username);
+ instance->settings->password = g_strdup(mod->password);
+
+ if (mod->client_info.rail_support_level > 0)
+ {
+ instance->settings->remote_app = true;
+ instance->settings->rail_langbar_supported = true;
+ instance->settings->workarea = true;
+ instance->settings->performance_flags = PERF_DISABLE_WALLPAPER | PERF_DISABLE_FULLWINDOWDRAG;
+ }
+
+ // here
+ //instance->settings->rdp_version = 4;
+
+ instance->update->BeginPaint = lfreerdp_begin_paint;
+ instance->update->EndPaint = lfreerdp_end_paint;
+ instance->update->SetBounds = lfreerdp_set_bounds;
+ instance->update->BitmapUpdate = lfreerdp_bitmap_update;
+
+ instance->update->primary->DstBlt = lfreerdp_dst_blt;
+ instance->update->primary->PatBlt = lfreerdp_pat_blt;
+ instance->update->primary->ScrBlt = lfreerdp_scr_blt;
+ instance->update->primary->OpaqueRect = lfreerdp_opaque_rect;
+ instance->update->primary->MemBlt = lfreerdp_mem_blt;
+ instance->update->primary->GlyphIndex = lfreerdp_glyph_index;
+ instance->update->primary->LineTo = lfreerdp_line_to;
+
+ instance->update->secondary->CacheBitmap = lfreerdp_cache_bitmap;
+ instance->update->secondary->CacheBitmapV2 = lfreerdp_cache_bitmapV2;
+ instance->update->secondary->CacheGlyph = lfreerdp_cache_glyph;
+ instance->update->secondary->CacheBrush = lfreerdp_cache_brush;
+
+ instance->update->pointer->PointerPosition = lfreerdp_pointer_position;
+ instance->update->pointer->PointerSystem = lfreerdp_pointer_system;
+ instance->update->pointer->PointerColor = lfreerdp_pointer_color;
+ instance->update->pointer->PointerNew = lfreerdp_pointer_new;
+ instance->update->pointer->PointerCached = lfreerdp_pointer_cached;
+
+ if ((mod->username[0] != 0) && (mod->password[0] != 0))
+ {
+ /* since we have username and password, we can try nla */
+ instance->settings->nla_security = 1;
+ }
+ else
+ {
+ instance->settings->nla_security = 0;
+ }
+
+ return true;
}
/*****************************************************************************/
void DEFAULT_CC
-lrail_WindowCreate(rdpContext* context, WINDOW_ORDER_INFO* orderInfo,
- WINDOW_STATE_ORDER* window_state)
+lrail_WindowCreate(rdpContext *context, WINDOW_ORDER_INFO *orderInfo,
+ WINDOW_STATE_ORDER *window_state)
{
- int index;
- struct mod* mod;
- struct rail_window_state_order wso;
- UNICONV* uniconv;
-
- LLOGLN(0, ("llrail_WindowCreate:"));
- uniconv = freerdp_uniconv_new();
- mod = ((struct mod_context*)context)->modi;
- memset(&wso, 0, sizeof(wso));
- /* copy the window state order */
- wso.owner_window_id = window_state->ownerWindowId;
- wso.style = window_state->style;
- wso.extended_style = window_state->extendedStyle;
- wso.show_state = window_state->showState;
- if (orderInfo->fieldFlags & WINDOW_ORDER_FIELD_TITLE)
- {
- wso.title_info = freerdp_uniconv_in(uniconv,
- window_state->titleInfo.string, window_state->titleInfo.length);
- }
- LLOGLN(0, ("lrail_WindowCreate: %s", wso.title_info));
- wso.client_offset_x = window_state->clientOffsetX;
- wso.client_offset_y = window_state->clientOffsetY;
- wso.client_area_width = window_state->clientAreaWidth;
- wso.client_area_height = window_state->clientAreaHeight;
- wso.rp_content = window_state->RPContent;
- wso.root_parent_handle = window_state->rootParentHandle;
- wso.window_offset_x = window_state->windowOffsetX;
- wso.window_offset_y = window_state->windowOffsetY;
- wso.window_client_delta_x = window_state->windowClientDeltaX;
- wso.window_client_delta_y = window_state->windowClientDeltaY;
- wso.window_width = window_state->windowWidth;
- wso.window_height = window_state->windowHeight;
- wso.num_window_rects = window_state->numWindowRects;
- if (orderInfo->fieldFlags & WINDOW_ORDER_FIELD_WND_RECTS)
- {
- wso.window_rects = (struct rail_window_rect*)
- g_malloc(sizeof(struct rail_window_rect) * wso.num_window_rects, 0);
- for (index = 0; index < wso.num_window_rects; index++)
+ int index;
+ struct mod *mod;
+ struct rail_window_state_order wso;
+ UNICONV *uniconv;
+
+ LLOGLN(0, ("llrail_WindowCreate:"));
+ uniconv = freerdp_uniconv_new();
+ mod = ((struct mod_context *)context)->modi;
+ memset(&wso, 0, sizeof(wso));
+ /* copy the window state order */
+ wso.owner_window_id = window_state->ownerWindowId;
+ wso.style = window_state->style;
+ wso.extended_style = window_state->extendedStyle;
+ wso.show_state = window_state->showState;
+
+ if (orderInfo->fieldFlags & WINDOW_ORDER_FIELD_TITLE)
{
- wso.window_rects[index].left = window_state->windowRects[index].left;
- wso.window_rects[index].top = window_state->windowRects[index].top;
- wso.window_rects[index].right = window_state->windowRects[index].right;
- wso.window_rects[index].bottom = window_state->windowRects[index].bottom;
+ wso.title_info = freerdp_uniconv_in(uniconv,
+ window_state->titleInfo.string, window_state->titleInfo.length);
}
- }
- wso.visible_offset_x = window_state->visibleOffsetX;
- wso.visible_offset_y = window_state->visibleOffsetY;
- wso.num_visibility_rects = window_state->numVisibilityRects;
- if (orderInfo->fieldFlags & WINDOW_ORDER_FIELD_VISIBILITY)
- {
- wso.visibility_rects = (struct rail_window_rect*)
- g_malloc(sizeof(struct rail_window_rect) * wso.num_visibility_rects, 0);
- for (index = 0; index < wso.num_visibility_rects; index++)
+
+ LLOGLN(0, ("lrail_WindowCreate: %s", wso.title_info));
+ wso.client_offset_x = window_state->clientOffsetX;
+ wso.client_offset_y = window_state->clientOffsetY;
+ wso.client_area_width = window_state->clientAreaWidth;
+ wso.client_area_height = window_state->clientAreaHeight;
+ wso.rp_content = window_state->RPContent;
+ wso.root_parent_handle = window_state->rootParentHandle;
+ wso.window_offset_x = window_state->windowOffsetX;
+ wso.window_offset_y = window_state->windowOffsetY;
+ wso.window_client_delta_x = window_state->windowClientDeltaX;
+ wso.window_client_delta_y = window_state->windowClientDeltaY;
+ wso.window_width = window_state->windowWidth;
+ wso.window_height = window_state->windowHeight;
+ wso.num_window_rects = window_state->numWindowRects;
+
+ if (orderInfo->fieldFlags & WINDOW_ORDER_FIELD_WND_RECTS)
{
- wso.visibility_rects[index].left = window_state->visibilityRects[index].left;
- wso.visibility_rects[index].top = window_state->visibilityRects[index].top;
- wso.visibility_rects[index].right = window_state->visibilityRects[index].right;
- wso.visibility_rects[index].bottom = window_state->visibilityRects[index].bottom;
+ wso.window_rects = (struct rail_window_rect *)
+ g_malloc(sizeof(struct rail_window_rect) * wso.num_window_rects, 0);
+
+ for (index = 0; index < wso.num_window_rects; index++)
+ {
+ wso.window_rects[index].left = window_state->windowRects[index].left;
+ wso.window_rects[index].top = window_state->windowRects[index].top;
+ wso.window_rects[index].right = window_state->windowRects[index].right;
+ wso.window_rects[index].bottom = window_state->windowRects[index].bottom;
+ }
+ }
+
+ wso.visible_offset_x = window_state->visibleOffsetX;
+ wso.visible_offset_y = window_state->visibleOffsetY;
+ wso.num_visibility_rects = window_state->numVisibilityRects;
+
+ if (orderInfo->fieldFlags & WINDOW_ORDER_FIELD_VISIBILITY)
+ {
+ wso.visibility_rects = (struct rail_window_rect *)
+ g_malloc(sizeof(struct rail_window_rect) * wso.num_visibility_rects, 0);
+
+ for (index = 0; index < wso.num_visibility_rects; index++)
+ {
+ wso.visibility_rects[index].left = window_state->visibilityRects[index].left;
+ wso.visibility_rects[index].top = window_state->visibilityRects[index].top;
+ wso.visibility_rects[index].right = window_state->visibilityRects[index].right;
+ wso.visibility_rects[index].bottom = window_state->visibilityRects[index].bottom;
+ }
}
- }
- mod->server_window_new_update(mod, orderInfo->windowId, &wso,
- orderInfo->fieldFlags);
+ mod->server_window_new_update(mod, orderInfo->windowId, &wso,
+ orderInfo->fieldFlags);
- xfree(wso.title_info);
- g_free(wso.window_rects);
- g_free(wso.visibility_rects);
- freerdp_uniconv_free(uniconv);
+ xfree(wso.title_info);
+ g_free(wso.window_rects);
+ g_free(wso.visibility_rects);
+ freerdp_uniconv_free(uniconv);
}
/*****************************************************************************/
void DEFAULT_CC
-lrail_WindowUpdate(rdpContext* context, WINDOW_ORDER_INFO* orderInfo,
- WINDOW_STATE_ORDER* window_state)
+lrail_WindowUpdate(rdpContext *context, WINDOW_ORDER_INFO *orderInfo,
+ WINDOW_STATE_ORDER *window_state)
{
- LLOGLN(0, ("lrail_WindowUpdate:"));
- lrail_WindowCreate(context, orderInfo, window_state);
+ LLOGLN(0, ("lrail_WindowUpdate:"));
+ lrail_WindowCreate(context, orderInfo, window_state);
}
/*****************************************************************************/
void DEFAULT_CC
-lrail_WindowDelete(rdpContext* context, WINDOW_ORDER_INFO* orderInfo)
+lrail_WindowDelete(rdpContext *context, WINDOW_ORDER_INFO *orderInfo)
{
- struct mod* mod;
+ struct mod *mod;
- LLOGLN(0, ("lrail_WindowDelete:"));
- mod = ((struct mod_context*)context)->modi;
- mod->server_window_delete(mod, orderInfo->windowId);
+ LLOGLN(0, ("lrail_WindowDelete:"));
+ mod = ((struct mod_context *)context)->modi;
+ mod->server_window_delete(mod, orderInfo->windowId);
}
/*****************************************************************************/
void DEFAULT_CC
-lrail_WindowIcon(rdpContext* context, WINDOW_ORDER_INFO* orderInfo,
- WINDOW_ICON_ORDER* window_icon)
+lrail_WindowIcon(rdpContext *context, WINDOW_ORDER_INFO *orderInfo,
+ WINDOW_ICON_ORDER *window_icon)
{
- struct mod* mod;
- struct rail_icon_info rii;
-
- LLOGLN(0, ("lrail_WindowIcon:"));
- mod = ((struct mod_context*)context)->modi;
- memset(&rii, 0, sizeof(rii));
- rii.bpp = window_icon->iconInfo->bpp;
- rii.width = window_icon->iconInfo->width;
- rii.height = window_icon->iconInfo->height;
- rii.cmap_bytes = window_icon->iconInfo->cbColorTable;
- rii.mask_bytes = window_icon->iconInfo->cbBitsMask;
- rii.data_bytes = window_icon->iconInfo->cbBitsColor;
- rii.mask = (char*)(window_icon->iconInfo->bitsMask);
- rii.cmap = (char*)(window_icon->iconInfo->colorTable);
- rii.data = (char*)(window_icon->iconInfo->bitsColor);
- mod->server_window_icon(mod, orderInfo->windowId,
- window_icon->iconInfo->cacheEntry,
- window_icon->iconInfo->cacheId, &rii,
- orderInfo->fieldFlags);
+ struct mod *mod;
+ struct rail_icon_info rii;
+
+ LLOGLN(0, ("lrail_WindowIcon:"));
+ mod = ((struct mod_context *)context)->modi;
+ memset(&rii, 0, sizeof(rii));
+ rii.bpp = window_icon->iconInfo->bpp;
+ rii.width = window_icon->iconInfo->width;
+ rii.height = window_icon->iconInfo->height;
+ rii.cmap_bytes = window_icon->iconInfo->cbColorTable;
+ rii.mask_bytes = window_icon->iconInfo->cbBitsMask;
+ rii.data_bytes = window_icon->iconInfo->cbBitsColor;
+ rii.mask = (char *)(window_icon->iconInfo->bitsMask);
+ rii.cmap = (char *)(window_icon->iconInfo->colorTable);
+ rii.data = (char *)(window_icon->iconInfo->bitsColor);
+ mod->server_window_icon(mod, orderInfo->windowId,
+ window_icon->iconInfo->cacheEntry,
+ window_icon->iconInfo->cacheId, &rii,
+ orderInfo->fieldFlags);
}
/*****************************************************************************/
void DEFAULT_CC
-lrail_WindowCachedIcon(rdpContext* context, WINDOW_ORDER_INFO* orderInfo,
- WINDOW_CACHED_ICON_ORDER* window_cached_icon)
+lrail_WindowCachedIcon(rdpContext *context, WINDOW_ORDER_INFO *orderInfo,
+ WINDOW_CACHED_ICON_ORDER *window_cached_icon)
{
- struct mod* mod;
-
- LLOGLN(0, ("lrail_WindowCachedIcon:"));
- mod = ((struct mod_context*)context)->modi;
- mod->server_window_cached_icon(mod, orderInfo->windowId,
- window_cached_icon->cachedIcon.cacheEntry,
- window_cached_icon->cachedIcon.cacheId,
- orderInfo->fieldFlags);
+ struct mod *mod;
+
+ LLOGLN(0, ("lrail_WindowCachedIcon:"));
+ mod = ((struct mod_context *)context)->modi;
+ mod->server_window_cached_icon(mod, orderInfo->windowId,
+ window_cached_icon->cachedIcon.cacheEntry,
+ window_cached_icon->cachedIcon.cacheId,
+ orderInfo->fieldFlags);
}
/*****************************************************************************/
void DEFAULT_CC
-lrail_NotifyIconCreate(rdpContext* context, WINDOW_ORDER_INFO* orderInfo,
- NOTIFY_ICON_STATE_ORDER* notify_icon_state)
+lrail_NotifyIconCreate(rdpContext *context, WINDOW_ORDER_INFO *orderInfo,
+ NOTIFY_ICON_STATE_ORDER *notify_icon_state)
{
- struct mod* mod;
- struct rail_notify_state_order rnso;
- UNICONV* uniconv;
-
-
- LLOGLN(0, ("lrail_NotifyIconCreate:"));
- uniconv = freerdp_uniconv_new();
-
- mod = ((struct mod_context*)context)->modi;
-
- memset(&rnso, 0, sizeof(rnso));
- rnso.version = notify_icon_state->version;
- if (orderInfo->fieldFlags & WINDOW_ORDER_FIELD_NOTIFY_TIP)
- {
- rnso.tool_tip = freerdp_uniconv_in(uniconv,
- notify_icon_state->toolTip.string, notify_icon_state->toolTip.length);
- }
- if (orderInfo->fieldFlags & WINDOW_ORDER_FIELD_NOTIFY_INFO_TIP)
- {
- rnso.infotip.timeout = notify_icon_state->infoTip.timeout;
- rnso.infotip.flags = notify_icon_state->infoTip.flags;
- rnso.infotip.text = freerdp_uniconv_in(uniconv,
- notify_icon_state->infoTip.text.string,
- notify_icon_state->infoTip.text.length);
- rnso.infotip.title = freerdp_uniconv_in(uniconv,
- notify_icon_state->infoTip.title.string,
- notify_icon_state->infoTip.title.length);
- }
- rnso.state = notify_icon_state->state;
- rnso.icon_cache_entry = notify_icon_state->icon.cacheEntry;
- rnso.icon_cache_id = notify_icon_state->icon.cacheId;
-
- rnso.icon_info.bpp = notify_icon_state->icon.bpp;
- rnso.icon_info.width = notify_icon_state->icon.width;
- rnso.icon_info.height = notify_icon_state->icon.height;
- rnso.icon_info.cmap_bytes = notify_icon_state->icon.cbColorTable;
- rnso.icon_info.mask_bytes = notify_icon_state->icon.cbBitsMask;
- rnso.icon_info.data_bytes = notify_icon_state->icon.cbBitsColor;
- rnso.icon_info.mask = (char*)(notify_icon_state->icon.bitsMask);
- rnso.icon_info.cmap = (char*)(notify_icon_state->icon.colorTable);
- rnso.icon_info.data = (char*)(notify_icon_state->icon.bitsColor);
-
- mod->server_notify_new_update(mod, orderInfo->windowId,
- orderInfo->notifyIconId,
- &rnso, orderInfo->fieldFlags);
-
- xfree(rnso.tool_tip);
- xfree(rnso.infotip.text);
- xfree(rnso.infotip.title);
- freerdp_uniconv_free(uniconv);
+ struct mod *mod;
+ struct rail_notify_state_order rnso;
+ UNICONV *uniconv;
+
+
+ LLOGLN(0, ("lrail_NotifyIconCreate:"));
+ uniconv = freerdp_uniconv_new();
+
+ mod = ((struct mod_context *)context)->modi;
+
+ memset(&rnso, 0, sizeof(rnso));
+ rnso.version = notify_icon_state->version;
+
+ if (orderInfo->fieldFlags & WINDOW_ORDER_FIELD_NOTIFY_TIP)
+ {
+ rnso.tool_tip = freerdp_uniconv_in(uniconv,
+ notify_icon_state->toolTip.string, notify_icon_state->toolTip.length);
+ }
+
+ if (orderInfo->fieldFlags & WINDOW_ORDER_FIELD_NOTIFY_INFO_TIP)
+ {
+ rnso.infotip.timeout = notify_icon_state->infoTip.timeout;
+ rnso.infotip.flags = notify_icon_state->infoTip.flags;
+ rnso.infotip.text = freerdp_uniconv_in(uniconv,
+ notify_icon_state->infoTip.text.string,
+ notify_icon_state->infoTip.text.length);
+ rnso.infotip.title = freerdp_uniconv_in(uniconv,
+ notify_icon_state->infoTip.title.string,
+ notify_icon_state->infoTip.title.length);
+ }
+
+ rnso.state = notify_icon_state->state;
+ rnso.icon_cache_entry = notify_icon_state->icon.cacheEntry;
+ rnso.icon_cache_id = notify_icon_state->icon.cacheId;
+
+ rnso.icon_info.bpp = notify_icon_state->icon.bpp;
+ rnso.icon_info.width = notify_icon_state->icon.width;
+ rnso.icon_info.height = notify_icon_state->icon.height;
+ rnso.icon_info.cmap_bytes = notify_icon_state->icon.cbColorTable;
+ rnso.icon_info.mask_bytes = notify_icon_state->icon.cbBitsMask;
+ rnso.icon_info.data_bytes = notify_icon_state->icon.cbBitsColor;
+ rnso.icon_info.mask = (char *)(notify_icon_state->icon.bitsMask);
+ rnso.icon_info.cmap = (char *)(notify_icon_state->icon.colorTable);
+ rnso.icon_info.data = (char *)(notify_icon_state->icon.bitsColor);
+
+ mod->server_notify_new_update(mod, orderInfo->windowId,
+ orderInfo->notifyIconId,
+ &rnso, orderInfo->fieldFlags);
+
+ xfree(rnso.tool_tip);
+ xfree(rnso.infotip.text);
+ xfree(rnso.infotip.title);
+ freerdp_uniconv_free(uniconv);
}
/*****************************************************************************/
void DEFAULT_CC
-lrail_NotifyIconUpdate(rdpContext* context, WINDOW_ORDER_INFO* orderInfo,
- NOTIFY_ICON_STATE_ORDER* notify_icon_state)
+lrail_NotifyIconUpdate(rdpContext *context, WINDOW_ORDER_INFO *orderInfo,
+ NOTIFY_ICON_STATE_ORDER *notify_icon_state)
{
- LLOGLN(0, ("lrail_NotifyIconUpdate:"));
- lrail_NotifyIconCreate(context, orderInfo, notify_icon_state);
+ LLOGLN(0, ("lrail_NotifyIconUpdate:"));
+ lrail_NotifyIconCreate(context, orderInfo, notify_icon_state);
}
/*****************************************************************************/
void DEFAULT_CC
-lrail_NotifyIconDelete(rdpContext* context, WINDOW_ORDER_INFO* orderInfo)
+lrail_NotifyIconDelete(rdpContext *context, WINDOW_ORDER_INFO *orderInfo)
{
- struct mod* mod;
+ struct mod *mod;
- LLOGLN(0, ("lrail_NotifyIconDelete:"));
- mod = ((struct mod_context*)context)->modi;
- mod->server_notify_delete(mod, orderInfo->windowId,
- orderInfo->notifyIconId);
+ LLOGLN(0, ("lrail_NotifyIconDelete:"));
+ mod = ((struct mod_context *)context)->modi;
+ mod->server_notify_delete(mod, orderInfo->windowId,
+ orderInfo->notifyIconId);
}
/*****************************************************************************/
void DEFAULT_CC
-lrail_MonitoredDesktop(rdpContext* context, WINDOW_ORDER_INFO* orderInfo,
- MONITORED_DESKTOP_ORDER* monitored_desktop)
+lrail_MonitoredDesktop(rdpContext *context, WINDOW_ORDER_INFO *orderInfo,
+ MONITORED_DESKTOP_ORDER *monitored_desktop)
{
- int index;
- struct mod* mod;
- struct rail_monitored_desktop_order rmdo;
-
- LLOGLN(0, ("lrail_MonitoredDesktop:"));
- mod = ((struct mod_context*)context)->modi;
- memset(&rmdo, 0, sizeof(rmdo));
- rmdo.active_window_id = monitored_desktop->activeWindowId;
- rmdo.num_window_ids = monitored_desktop->numWindowIds;
- if (orderInfo->fieldFlags & WINDOW_ORDER_FIELD_DESKTOP_ZORDER)
- {
- if (rmdo.num_window_ids > 0)
+ int index;
+ struct mod *mod;
+ struct rail_monitored_desktop_order rmdo;
+
+ LLOGLN(0, ("lrail_MonitoredDesktop:"));
+ mod = ((struct mod_context *)context)->modi;
+ memset(&rmdo, 0, sizeof(rmdo));
+ rmdo.active_window_id = monitored_desktop->activeWindowId;
+ rmdo.num_window_ids = monitored_desktop->numWindowIds;
+
+ if (orderInfo->fieldFlags & WINDOW_ORDER_FIELD_DESKTOP_ZORDER)
{
- rmdo.window_ids = (int*)g_malloc(sizeof(int) * rmdo.num_window_ids, 0);
- for (index = 0; index < rmdo.num_window_ids; index++)
- {
- rmdo.window_ids[index] = monitored_desktop->windowIds[index];
- }
+ if (rmdo.num_window_ids > 0)
+ {
+ rmdo.window_ids = (int *)g_malloc(sizeof(int) * rmdo.num_window_ids, 0);
+
+ for (index = 0; index < rmdo.num_window_ids; index++)
+ {
+ rmdo.window_ids[index] = monitored_desktop->windowIds[index];
+ }
+ }
}
- }
- mod->server_monitored_desktop(mod, &rmdo, orderInfo->fieldFlags);
- g_free(rmdo.window_ids);
+
+ mod->server_monitored_desktop(mod, &rmdo, orderInfo->fieldFlags);
+ g_free(rmdo.window_ids);
}
/*****************************************************************************/
void DEFAULT_CC
-lrail_NonMonitoredDesktop(rdpContext* context, WINDOW_ORDER_INFO* orderInfo)
+lrail_NonMonitoredDesktop(rdpContext *context, WINDOW_ORDER_INFO *orderInfo)
{
- struct mod* mod;
- struct rail_monitored_desktop_order rmdo;
+ struct mod *mod;
+ struct rail_monitored_desktop_order rmdo;
- LLOGLN(0, ("lrail_NonMonitoredDesktop:"));
- mod = ((struct mod_context*)context)->modi;
- memset(&rmdo, 0, sizeof(rmdo));
- mod->server_monitored_desktop(mod, &rmdo, orderInfo->fieldFlags);
+ LLOGLN(0, ("lrail_NonMonitoredDesktop:"));
+ mod = ((struct mod_context *)context)->modi;
+ memset(&rmdo, 0, sizeof(rmdo));
+ mod->server_monitored_desktop(mod, &rmdo, orderInfo->fieldFlags);
}
/******************************************************************************/
static boolean DEFAULT_CC
-lfreerdp_post_connect(freerdp* instance)
+lfreerdp_post_connect(freerdp *instance)
{
- struct mod* mod;
-
- LLOGLN(0, ("lfreerdp_post_connect:"));
- mod = ((struct mod_context*)(instance->context))->modi;
- g_memset(mod->password, 0, sizeof(mod->password));
-
- mod->inst->update->window->WindowCreate = lrail_WindowCreate;
- mod->inst->update->window->WindowUpdate = lrail_WindowUpdate;
- mod->inst->update->window->WindowDelete = lrail_WindowDelete;
- mod->inst->update->window->WindowIcon = lrail_WindowIcon;
- mod->inst->update->window->WindowCachedIcon = lrail_WindowCachedIcon;
- mod->inst->update->window->NotifyIconCreate = lrail_NotifyIconCreate;
- mod->inst->update->window->NotifyIconUpdate = lrail_NotifyIconUpdate;
- mod->inst->update->window->NotifyIconDelete = lrail_NotifyIconDelete;
- mod->inst->update->window->MonitoredDesktop = lrail_MonitoredDesktop;
- mod->inst->update->window->NonMonitoredDesktop = lrail_NonMonitoredDesktop;
-
- return true;
+ struct mod *mod;
+
+ LLOGLN(0, ("lfreerdp_post_connect:"));
+ mod = ((struct mod_context *)(instance->context))->modi;
+ g_memset(mod->password, 0, sizeof(mod->password));
+
+ mod->inst->update->window->WindowCreate = lrail_WindowCreate;
+ mod->inst->update->window->WindowUpdate = lrail_WindowUpdate;
+ mod->inst->update->window->WindowDelete = lrail_WindowDelete;
+ mod->inst->update->window->WindowIcon = lrail_WindowIcon;
+ mod->inst->update->window->WindowCachedIcon = lrail_WindowCachedIcon;
+ mod->inst->update->window->NotifyIconCreate = lrail_NotifyIconCreate;
+ mod->inst->update->window->NotifyIconUpdate = lrail_NotifyIconUpdate;
+ mod->inst->update->window->NotifyIconDelete = lrail_NotifyIconDelete;
+ mod->inst->update->window->MonitoredDesktop = lrail_MonitoredDesktop;
+ mod->inst->update->window->NonMonitoredDesktop = lrail_NonMonitoredDesktop;
+
+ return true;
}
/******************************************************************************/
static void DEFAULT_CC
-lfreerdp_context_new(freerdp* instance, rdpContext* context)
+lfreerdp_context_new(freerdp *instance, rdpContext *context)
{
- LLOGLN(0, ("lfreerdp_context_new: %p", context));
+ LLOGLN(0, ("lfreerdp_context_new: %p", context));
}
/******************************************************************************/
static void DEFAULT_CC
-lfreerdp_context_free(freerdp* instance, rdpContext* context)
+lfreerdp_context_free(freerdp *instance, rdpContext *context)
{
- LLOGLN(0, ("lfreerdp_context_free:"));
+ LLOGLN(0, ("lfreerdp_context_free:"));
}
/******************************************************************************/
static int DEFAULT_CC
-lfreerdp_receive_channel_data(freerdp* instance, int channelId, uint8* data,
+lfreerdp_receive_channel_data(freerdp *instance, int channelId, uint8 *data,
int size, int flags, int total_size)
{
- struct mod* mod;
- int lchid;
- int index;
- int error;
-
- mod = ((struct mod_context*)(instance->context))->modi;
- lchid = -1;
- for (index = 0; index < instance->settings->num_channels; index++)
- {
- if (instance->settings->channels[index].channel_id == channelId)
+ struct mod *mod;
+ int lchid;
+ int index;
+ int error;
+
+ mod = ((struct mod_context *)(instance->context))->modi;
+ lchid = -1;
+
+ for (index = 0; index < instance->settings->num_channels; index++)
{
- lchid = index;
- break;
+ if (instance->settings->channels[index].channel_id == channelId)
+ {
+ lchid = index;
+ break;
+ }
+ }
+
+ if (lchid >= 0)
+ {
+ LLOGLN(10, ("lfreerdp_receive_channel_data: server to client"));
+ error = mod->server_send_to_channel(mod, lchid, (char *)data, size,
+ total_size, flags);
+
+ if (error != 0)
+ {
+ LLOGLN(0, ("lfreerdp_receive_channel_data: error %d", error));
+ }
}
- }
- if (lchid >= 0)
- {
- LLOGLN(10, ("lfreerdp_receive_channel_data: server to client"));
- error = mod->server_send_to_channel(mod, lchid, (char*)data, size,
- total_size, flags);
- if (error != 0)
+ else
{
- LLOGLN(0, ("lfreerdp_receive_channel_data: error %d", error));
+ LLOGLN(0, ("lfreerdp_receive_channel_data: bad lchid"));
}
- }
- else
- {
- LLOGLN(0, ("lfreerdp_receive_channel_data: bad lchid"));
- }
- return 0;
+
+ return 0;
}
/******************************************************************************/
static boolean DEFAULT_CC
-lfreerdp_authenticate(freerdp* instance, char** username,
- char** password, char** domain)
+lfreerdp_authenticate(freerdp *instance, char **username,
+ char **password, char **domain)
{
- LLOGLN(0, ("lfreerdp_authenticate:"));
- return true;
+ LLOGLN(0, ("lfreerdp_authenticate:"));
+ return true;
}
/******************************************************************************/
static boolean DEFAULT_CC
-lfreerdp_verify_certificate(freerdp* instance, char* subject, char* issuer,
- char* fingerprint)
+lfreerdp_verify_certificate(freerdp *instance, char *subject, char *issuer,
+ char *fingerprint)
{
- LLOGLN(0, ("lfreerdp_verify_certificate:"));
- return true;
+ LLOGLN(0, ("lfreerdp_verify_certificate:"));
+ return true;
}
/******************************************************************************/
-struct mod* EXPORT_CC
+struct mod *EXPORT_CC
mod_init(void)
{
- struct mod* mod;
- modContext* lcon;
-
- LLOGLN(0, ("mod_init:"));
- mod = (struct mod*)g_malloc(sizeof(struct mod), 1);
- freerdp_get_version(&(mod->vmaj), &(mod->vmin), &(mod->vrev));
- LLOGLN(0, (" FreeRDP version major %d minor %d revision %d",
- mod->vmaj, mod->vmin, mod->vrev));
- mod->size = sizeof(struct mod);
- mod->version = CURRENT_MOD_VER;
- mod->handle = (tbus)mod;
- mod->mod_connect = lxrdp_connect;
- mod->mod_start = lxrdp_start;
- mod->mod_event = lxrdp_event;
- mod->mod_signal = lxrdp_signal;
- mod->mod_end = lxrdp_end;
- mod->mod_set_param = lxrdp_set_param;
- mod->mod_session_change = lxrdp_session_change;
- mod->mod_get_wait_objs = lxrdp_get_wait_objs;
- mod->mod_check_wait_objs = lxrdp_check_wait_objs;
-
- mod->inst = freerdp_new();
- mod->inst->PreConnect = lfreerdp_pre_connect;
- mod->inst->PostConnect = lfreerdp_post_connect;
- mod->inst->context_size = sizeof(modContext);
- mod->inst->ContextNew = lfreerdp_context_new;
- mod->inst->ContextFree = lfreerdp_context_free;
- mod->inst->ReceiveChannelData = lfreerdp_receive_channel_data;
- mod->inst->Authenticate = lfreerdp_authenticate;
- mod->inst->VerifyCertificate = lfreerdp_verify_certificate;
-
- freerdp_context_new(mod->inst);
-
- lcon = (modContext*)(mod->inst->context);
- lcon->modi = mod;
- LLOGLN(10, ("mod_init: mod %p", mod));
-
- return mod;
+ struct mod *mod;
+ modContext *lcon;
+
+ LLOGLN(0, ("mod_init:"));
+ mod = (struct mod *)g_malloc(sizeof(struct mod), 1);
+ freerdp_get_version(&(mod->vmaj), &(mod->vmin), &(mod->vrev));
+ LLOGLN(0, (" FreeRDP version major %d minor %d revision %d",
+ mod->vmaj, mod->vmin, mod->vrev));
+ mod->size = sizeof(struct mod);
+ mod->version = CURRENT_MOD_VER;
+ mod->handle = (tbus)mod;
+ mod->mod_connect = lxrdp_connect;
+ mod->mod_start = lxrdp_start;
+ mod->mod_event = lxrdp_event;
+ mod->mod_signal = lxrdp_signal;
+ mod->mod_end = lxrdp_end;
+ mod->mod_set_param = lxrdp_set_param;
+ mod->mod_session_change = lxrdp_session_change;
+ mod->mod_get_wait_objs = lxrdp_get_wait_objs;
+ mod->mod_check_wait_objs = lxrdp_check_wait_objs;
+
+ mod->inst = freerdp_new();
+ mod->inst->PreConnect = lfreerdp_pre_connect;
+ mod->inst->PostConnect = lfreerdp_post_connect;
+ mod->inst->context_size = sizeof(modContext);
+ mod->inst->ContextNew = lfreerdp_context_new;
+ mod->inst->ContextFree = lfreerdp_context_free;
+ mod->inst->ReceiveChannelData = lfreerdp_receive_channel_data;
+ mod->inst->Authenticate = lfreerdp_authenticate;
+ mod->inst->VerifyCertificate = lfreerdp_verify_certificate;
+
+ freerdp_context_new(mod->inst);
+
+ lcon = (modContext *)(mod->inst->context);
+ lcon->modi = mod;
+ LLOGLN(10, ("mod_init: mod %p", mod));
+
+ return mod;
}
/******************************************************************************/
int EXPORT_CC
-mod_exit(struct mod* mod)
+mod_exit(struct mod *mod)
{
- LLOGLN(0, ("mod_exit:"));
- if (mod == 0)
- {
- return 0;
- }
- if (mod->inst == NULL)
- {
- LLOGLN(0, ("mod_exit - null pointer for inst:"));
+ LLOGLN(0, ("mod_exit:"));
+
+ if (mod == 0)
+ {
+ return 0;
+ }
+
+ if (mod->inst == NULL)
+ {
+ LLOGLN(0, ("mod_exit - null pointer for inst:"));
+ g_free(mod);
+ return 0 ;
+ }
+
+ freerdp_disconnect(mod->inst);
+
+ if ((mod->vmaj == 1) && (mod->vmin == 0) && (mod->vrev == 1))
+ {
+ /* this version has a bug with double free in freerdp_free */
+ }
+ else
+ {
+ freerdp_context_free(mod->inst);
+ }
+
+ freerdp_free(mod->inst);
g_free(mod);
- return 0 ;
- }
- freerdp_disconnect(mod->inst);
- if ((mod->vmaj == 1) && (mod->vmin == 0) && (mod->vrev == 1))
- {
- /* this version has a bug with double free in freerdp_free */
- }
- else
- {
- freerdp_context_free(mod->inst);
- }
- freerdp_free(mod->inst);
- g_free(mod);
- return 0;
+ return 0;
}