Actual calls to freerdp functions
authorMichael Jumper <zhangmaike@users.sourceforge.net>
Sat, 26 Mar 2011 05:49:48 +0000 (22:49 -0700)
committerMichael Jumper <zhangmaike@users.sourceforge.net>
Sat, 26 Mar 2011 05:49:48 +0000 (22:49 -0700)
configure.in
src/rdp_client.c

index 3c71c21..4939ce6 100644 (file)
@@ -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])
index a224649..476b540 100644 (file)
  *
  * ***** END LICENSE BLOCK ***** */
 
+#include <stdlib.h>
+#include <string.h>
+
+#include <freerdp/freerdp.h>
+#include <freerdp/chanman.h>
 
 #include <guacamole/log.h>
 #include <guacamole/guacio.h>
 #include <guacamole/protocol.h>
 #include <guacamole/client.h>
 
+#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;
 
 }