Style corrections, add domain parameter.
[libguac-client-rdp.git] / src / client.c
index 1dcd309..3a7c5f6 100644 (file)
 const char* GUAC_CLIENT_ARGS[] = {
     "hostname",
     "port",
+    "domain",
     "username",
     "password",
     "width",
     "height",
-    "initial_program",
-    "color_depth",
+    "initial-program",
+    "color-depth",
     NULL
 };
 
 enum ARGS_IDX {
     IDX_HOSTNAME,
     IDX_PORT,
+    IDX_DOMAIN,
     IDX_USERNAME,
     IDX_PASSWORD,
     IDX_WIDTH,
@@ -218,6 +220,7 @@ void __guac_rdp_client_load_keymap(guac_client* client,
 
     rdp_guac_client_data* guac_client_data =
         (rdp_guac_client_data*) client->data;
+
     /* Get mapping */
     const guac_rdp_keysym_desc* mapping = keymap->mapping;
 
@@ -253,7 +256,16 @@ int guac_client_init(guac_client* client, int argc, char** argv) {
     int port = RDP_DEFAULT_PORT;
     boolean bitmap_cache;
 
-    if (argc < 8) {
+    /**
+     * Selected server-side keymap. Client will be assumed to also use this
+     * keymap. Keys will be sent to server based on client input on a
+     * best-effort basis.
+     *
+     * Currently hard-coded to en-us-qwerty.
+     */
+    const guac_rdp_keymap* chosen_keymap = &guac_rdp_keymap_en_us;
+
+    if (argc < 9) {
 
         guac_protocol_send_error(client->socket,
                 "Wrong argument count received.");
@@ -320,20 +332,24 @@ int guac_client_init(guac_client* client, int argc, char** argv) {
     settings->port = port;
     settings->window_title = strdup(hostname);
 
-    /* username */
+    /* Domain */
+    if (argv[IDX_DOMAIN][0] != '\0')
+        settings->domain = strdup(argv[IDX_DOMAIN]);
+
+    /* Username */
     settings->username = "guest";
     if (argv[IDX_USERNAME][0] != '\0')
-        settings->username = strdup (argv[IDX_USERNAME]);
+        settings->username = strdup(argv[IDX_USERNAME]);
 
-    /* password */
+    /* Password */
     if (argv[IDX_PASSWORD][0] != '\0') {
-        settings->password = strdup (argv[IDX_PASSWORD]);
+        settings->password = strdup(argv[IDX_PASSWORD]);
         settings->autologon = 1;
     }
 
-    /* initial program */
+    /* Initial program */
     if (argv[IDX_INITIAL_PROGRAM][0] != '\0')
-        settings->shell = strdup (argv[IDX_INITIAL_PROGRAM]);
+        settings->shell = strdup(argv[IDX_INITIAL_PROGRAM]);
 
     /* Order support */
     bitmap_cache = settings->bitmap_cache;
@@ -381,7 +397,10 @@ int guac_client_init(guac_client* client, int argc, char** argv) {
     ((rdp_freerdp_context*) rdp_inst->context)->client = client;
 
     /* Load keymap into client */
-    __guac_rdp_client_load_keymap(client, &guac_rdp_keymap_en_us);
+    __guac_rdp_client_load_keymap(client, chosen_keymap);
+
+    /* Set server-side keymap */
+    settings->kbd_layout = chosen_keymap->freerdp_keyboard_layout; 
 
     /* Connect to RDP server */
     if (!freerdp_connect(rdp_inst)) {