From ff6d6fc404d1de64b1726ee157480f0b15139dab Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Fri, 25 Mar 2011 22:49:48 -0700 Subject: [PATCH] Actual calls to freerdp functions --- protocols/rdp/configure.in | 1 + protocols/rdp/src/rdp_client.c | 78 +++++++++++++++++++++++++++++++++- 2 files changed, 77 insertions(+), 2 deletions(-) diff --git a/protocols/rdp/configure.in b/protocols/rdp/configure.in index 3c71c218..4939ce6d 100644 --- a/protocols/rdp/configure.in +++ b/protocols/rdp/configure.in @@ -46,6 +46,7 @@ AC_PROG_LIBTOOL AC_CHECK_LIB([guac], [guac_get_client],, AC_MSG_ERROR("libguac is required for communication via the guacamole protocol")) AC_CHECK_LIB([png], [png_write_png],, AC_MSG_ERROR("libpng is required for writing png messages")) AC_CHECK_LIB([freerdp], [freerdp_new],, AC_MSG_ERROR("libfreerdp is required")) +AC_CHECK_LIB([freerdpchanman], [freerdp_chanman_new],, AC_MSG_ERROR("libfreerdp is required")) # Checks for header files. AC_CHECK_HEADERS([guacamole/client.h guacamole/guacio.h guacamole/protocol.h]) diff --git a/protocols/rdp/src/rdp_client.c b/protocols/rdp/src/rdp_client.c index a2246494..476b540f 100644 --- a/protocols/rdp/src/rdp_client.c +++ b/protocols/rdp/src/rdp_client.c @@ -35,12 +35,19 @@ * * ***** END LICENSE BLOCK ***** */ +#include +#include + +#include +#include #include #include #include #include +#define RDP_DEFAULT_PORT 3389 + /* Client plugin arguments */ const char* GUAC_CLIENT_ARGS[] = { "hostname", @@ -50,10 +57,77 @@ const char* GUAC_CLIENT_ARGS[] = { int guac_client_init(guac_client* client, int argc, char** argv) { + rdpInst* rdp_inst; + rdpChanMan* chanman; + rdpSet* settings; + + char* hostname; + int port = RDP_DEFAULT_PORT; + + if (argc < 2) { + guac_send_error(client->io, "Wrong argument count received."); + guac_flush(client->io); + return 1; + } + + /* If port specified, use it */ + if (argv[1][0] != '\0') + port = atoi(argv[1]); + + hostname = argv[0]; + + /* Get channel manager */ + chanman = freerdp_chanman_new(); + + /* INIT SETTINGS */ + settings = malloc(sizeof(rdpSet)); + memset(settings, 0, sizeof(rdpSet)); + + /* Set hostname */ + strncpy(settings->hostname, hostname, sizeof(settings->hostname) - 1); + + /* Default size */ + settings->width = 1024; + settings->height = 768; + + strncpy(settings->server, hostname, sizeof(settings->server)); + strcpy(settings->username, "guest"); + + settings->tcp_port_rdp = port; + settings->encryption = 1; + settings->server_depth = 16; + settings->bitmap_cache = 1; + settings->bitmap_compression = 1; + settings->desktop_save = 0; + settings->rdp5_performanceflags = + RDP5_NO_WALLPAPER | RDP5_NO_FULLWINDOWDRAG | RDP5_NO_MENUANIMATIONS; + settings->off_screen_bitmaps = 1; + settings->triblt = 0; + settings->new_cursors = 1; + settings->rdp_version = 5; + + /* Init chanman here? */ + + /* Init client */ + rdp_inst = freerdp_new(settings); + if (rdp_inst == NULL) { + guac_send_error(client->io, "Error initializing RDP client"); + guac_flush(client->io); + return 1; + } + + /* freerdp_chanman_pre_connect ? */ + /* rdp_inst->rdp_connect(rdp_inst) */ + /* rdp_inst->rdp_disconnect(rdp_inst) */ + /* freerdp_chanman_post_connect ? */ + + freerdp_free(rdp_inst); + freerdp_chanman_free(chanman); + free(settings); + /* STUB */ guac_send_error(client->io, "STUB"); - - return -1; + return 1; }