Merge remote branch 'matthortman/MBH' into raster

This commit is contained in:
Michael Jumper 2012-02-27 10:34:51 -08:00
commit 13696d2c7c
3 changed files with 59 additions and 6 deletions

51
protocols/rdp/src/client.c Normal file → Executable file
View File

@ -69,9 +69,26 @@
const char* GUAC_CLIENT_ARGS[] = { const char* GUAC_CLIENT_ARGS[] = {
"hostname", "hostname",
"port", "port",
"username",
"password",
"width",
"height",
"initial_program",
"color_depth",
NULL NULL
}; };
enum ARGS_IDX {
IDX_HOSTNAME,
IDX_PORT,
IDX_USERNAME,
IDX_PASSWORD,
IDX_WIDTH,
IDX_HEIGHT,
IDX_INITIAL_PROGRAM,
IDX_COLOR_DEPTH
};
boolean rdp_freerdp_pre_connect(freerdp* instance) { boolean rdp_freerdp_pre_connect(freerdp* instance) {
rdpContext* context = instance->context; rdpContext* context = instance->context;
@ -197,17 +214,17 @@ int guac_client_init(guac_client* client, int argc, char** argv) {
int port = RDP_DEFAULT_PORT; int port = RDP_DEFAULT_PORT;
boolean bitmap_cache; boolean bitmap_cache;
if (argc < 2) { if (argc < 8) {
guac_protocol_send_error(client->socket, "Wrong argument count received."); guac_protocol_send_error(client->socket, "Wrong argument count received.");
guac_socket_flush(client->socket); guac_socket_flush(client->socket);
return 1; return 1;
} }
/* If port specified, use it */ /* If port specified, use it */
if (argv[1][0] != '\0') if (argv[IDX_PORT][0] != '\0')
port = atoi(argv[1]); port = atoi(argv[IDX_PORT]);
hostname = argv[0]; hostname = argv[IDX_HOSTNAME];
/* Allocate client data */ /* Allocate client data */
guac_client_data = malloc(sizeof(rdp_guac_client_data)); guac_client_data = malloc(sizeof(rdp_guac_client_data));
@ -238,14 +255,38 @@ int guac_client_init(guac_client* client, int argc, char** argv) {
settings->encryption_method = ENCRYPTION_METHOD_40BIT | ENCRYPTION_METHOD_128BIT | ENCRYPTION_METHOD_FIPS; settings->encryption_method = ENCRYPTION_METHOD_40BIT | ENCRYPTION_METHOD_128BIT | ENCRYPTION_METHOD_FIPS;
settings->encryption_level = ENCRYPTION_LEVEL_CLIENT_COMPATIBLE; settings->encryption_level = ENCRYPTION_LEVEL_CLIENT_COMPATIBLE;
/* Default size */ /* session width */
settings->width = 1024; settings->width = 1024;
if (argv[IDX_WIDTH][0] != '\0')
settings->width = atoi(argv[IDX_WIDTH]);
if (settings->width == 0)
settings->width = 1024;
/* session height */
settings->height = 768;
if (argv[IDX_HEIGHT][0] != '\0')
settings->height = atoi(argv[IDX_HEIGHT]);
if (settings->height == 0)
settings->height = 768; settings->height = 768;
/* Set hostname */ /* Set hostname */
settings->hostname = strdup(hostname); settings->hostname = strdup(hostname);
settings->window_title = strdup(hostname); settings->window_title = strdup(hostname);
/* username */
settings->username = "guest"; settings->username = "guest";
if (argv[IDX_USERNAME][0] != '\0')
settings->username = strdup (argv[IDX_USERNAME]);
/* password */
if (argv[IDX_PASSWORD][0] != '\0') {
settings->password = strdup (argv[IDX_PASSWORD]);
settings->autologon = 1;
}
/* initial program */
if (argv[IDX_INITIAL_PROGRAM][0] != '\0')
settings->shell = strdup (argv[IDX_INITIAL_PROGRAM]);
/* Order support */ /* Order support */
bitmap_cache = settings->bitmap_cache; bitmap_cache = settings->bitmap_cache;

14
protocols/rdp/src/rdp_gdi.c Normal file → Executable file
View File

@ -97,11 +97,23 @@ void guac_rdp_gdi_memblt(rdpContext* context, MEMBLT_ORDER* memblt) {
guac_socket* socket = client->socket; guac_socket* socket = client->socket;
guac_rdp_bitmap* bitmap = (guac_rdp_bitmap*) memblt->bitmap; guac_rdp_bitmap* bitmap = (guac_rdp_bitmap*) memblt->bitmap;
guac_composite_mode cmode = GUAC_COMP_OVER;
if (memblt->bRop == 204) cmode = GUAC_COMP_OVER;
else if (memblt->bRop == 238) cmode = GUAC_COMP_OR;
else if (memblt->bRop == 136) cmode = GUAC_COMP_AND;
else if (memblt->bRop == 102) cmode = GUAC_COMP_XOR2;
else if (memblt->bRop == 187) cmode = GUAC_COMP_NOR;
else
{
guac_client_log_info (client, "guac_rdp_gdi_memblt: UNSUPPORTED opcode = %d (0x%02X)", memblt->bRop, memblt->bRop);
}
if (bitmap->layer != NULL) if (bitmap->layer != NULL)
guac_protocol_send_copy(socket, guac_protocol_send_copy(socket,
bitmap->layer, bitmap->layer,
memblt->nXSrc, memblt->nYSrc, memblt->nWidth, memblt->nHeight, memblt->nXSrc, memblt->nYSrc, memblt->nWidth, memblt->nHeight,
GUAC_COMP_OVER, cmode,
current_layer, memblt->nLeftRect, memblt->nTopRect); current_layer, memblt->nLeftRect, memblt->nTopRect);
} }

0
protocols/rdp/src/rdp_glyph.c Normal file → Executable file
View File