Package: tsclient
Version: 0.148-3
Severity: wishlist
Tags: patch

Hi,

A long-time missing feature in tsclient is the ability to map a local
directory to a remote computer in RDPv5.

A patch available on sourceforge address this (see URL below, also
attached here for your convenience). However, you probably need to
upgrade to the latest version (0.150) to make apply it cleanly.

URL to the patch on sourceforge :
http://sourceforge.net/tracker/index.php?func=detail&aid=1822832&group_id=192483&atid=941576

Cheers,

-- System Information:
Debian Release: lenny/sid
  APT prefers unstable
  APT policy: (990, 'unstable'), (1, 'experimental')
Architecture: amd64 (x86_64)

Kernel: Linux 2.6.20-1-xen-amd64 (SMP w/1 CPU core)
Locale: LANG=fr_FR.UTF-8, LC_CTYPE=fr_FR.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash

Versions of packages tsclient depends on:
ii  libatk1.0-0                   1.18.0-2   The ATK accessibility toolkit
ii  libbonoboui2-0                2.18.0-5   The Bonobo UI library
ii  libc6                         2.6.1-1    GNU C Library: Shared libraries
ii  libglib2.0-0                  2.14.0-2   The GLib library of C routines
ii  libgnome2-0                   2.18.0-4   The GNOME 2 library - runtime file
ii  libgnomeui-0                  2.18.1-2   The GNOME 2 libraries (User Interf
ii  libgtk2.0-0                   2.10.13-1  The GTK+ graphical user interface 
ii  libpanel-applet2-0            2.18.3-1   library for GNOME Panel applets
ii  rdesktop                      1.5.0-2    RDP client for Windows NT/2000 Ter

tsclient recommends no packages.

-- no debconf information
diff -ur tsclient-0.150/src/connect.c tsclient-0.151/src/connect.c
--- tsclient-0.150/src/connect.c	2007-04-11 20:15:35.000000000 +0200
+++ tsclient-0.151/src/connect.c	2007-10-30 15:03:42.000000000 +0100
@@ -175,6 +175,16 @@
   GtkWidget *cboKeyboardLang;
   GtkWidget *txtKeyboardLang;
 
+  // Drive mapping
+  GtkWidget *chkDiskMapping;
+  
+  // Drive mapping Widgets
+  GtkWidget *frameDrive;
+  GtkWidget *lblDriveFrame;
+  GtkWidget *tblDrive;
+  GtkWidget *imgDrive;
+  GtkWidget *vbxDrive;
+
   // Program Tab Widgets
   GtkWidget *lblProgramsTab1;
 
@@ -191,6 +201,7 @@
 
   // Performance Tab Widgets
   GtkWidget *lblPerformanceTab1;
+  GtkWidget *vbxPerformanceTab1;
 
   // Performance Frame Widgets
   GtkWidget *framePerform;
@@ -689,7 +700,6 @@
 
   gtk_option_menu_set_menu (GTK_OPTION_MENU (optKeyboard), mnuKeyboard);
 
-
   lblKeyboardLang = gtk_label_new (_("Use the following keyboard language\n(2 char keycode)"));
   gtk_table_attach (GTK_TABLE (tblKeyboard), lblKeyboardLang, 1, 2, 2, 3,
                     (GtkAttachOptions) (GTK_FILL),
@@ -777,9 +787,15 @@
                     (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
                     (GtkAttachOptions) (GTK_FILL), 0, 0);
 
+  // Last tab (Performance)
+  vbxPerformanceTab1 = gtk_vbox_new (FALSE, 0);
+  gtk_container_add (GTK_CONTAINER (nbkComplete), vbxPerformanceTab1);
+  gtk_notebook_set_tab_label_packing (GTK_NOTEBOOK (nbkComplete), vbxPerformanceTab1,
+                                      TRUE, TRUE, GTK_PACK_START);
+
 
   framePerform = gtk_frame_new (NULL);
-  gtk_container_add (GTK_CONTAINER (nbkComplete), framePerform);
+  gtk_container_add (GTK_CONTAINER (vbxPerformanceTab1), framePerform);
   gtk_notebook_set_tab_label_packing (GTK_NOTEBOOK (nbkComplete), framePerform,
                                       TRUE, TRUE, GTK_PACK_START);
   gtk_container_set_border_width (GTK_CONTAINER (framePerform), 3);
@@ -840,6 +856,37 @@
   gtk_label_set_line_wrap (GTK_LABEL (lblPerformanceOptions), TRUE);
   gtk_misc_set_alignment (GTK_MISC (lblPerformanceOptions), 0, 0.5);
 
+
+  frameDrive = gtk_frame_new (NULL);
+  //  Add the new frame to the Local ressource tab
+  gtk_box_pack_start (GTK_BOX (vbxLocalTab1), frameDrive, TRUE, TRUE, 0);
+  gtk_container_set_border_width (GTK_CONTAINER (frameDrive), 3);
+  gtk_frame_set_shadow_type (GTK_FRAME (frameDrive), GTK_SHADOW_NONE);
+
+  lblDriveFrame = gtk_label_new_with_mnemonic (_("Remotely map your disk drive"));
+  gtk_label_set_markup (GTK_LABEL (lblDriveFrame), g_strconcat ("<span weight=\"bold\">", _("Remotely map your disk drive"), "</span>", NULL));
+  gtk_frame_set_label_widget (GTK_FRAME (frameDrive), lblDriveFrame);
+  gtk_label_set_justify (GTK_LABEL (lblDriveFrame), GTK_JUSTIFY_LEFT);
+
+  tblDrive = gtk_table_new (1, 2, FALSE);
+  gtk_container_add (GTK_CONTAINER (frameDrive), tblDrive);
+  gtk_table_set_col_spacings (GTK_TABLE (tblDrive), 6);
+
+  imgDrive = create_pixmap (frmConnect, "harddrive.png");
+  gtk_misc_set_padding (GTK_MISC (imgDrive), 3, 3);
+  gtk_table_attach (GTK_TABLE (tblDrive), imgDrive, 0, 1, 0, 1,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) 0, 0, 0);
+
+  vbxDrive = gtk_vbox_new (FALSE, 0);
+  gtk_table_attach (GTK_TABLE (tblDrive), vbxDrive, 1, 2, 0, 2,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);                
+
+  chkDiskMapping = gtk_check_button_new_with_mnemonic (_("Add my local drive to the remote computer"));
+  gtk_box_pack_start (GTK_BOX (vbxDrive), chkDiskMapping, FALSE, FALSE, 0);
+  
+
   /*
     These are the labels for the notebook control
   */
@@ -1090,6 +1137,8 @@
   HOOKUP_OBJECT (frmConnect, txtKeyboardLang, "txtKeyboardLang");
   HOOKUP_OBJECT (frmConnect, imgKeyboard, "imgKeyboard");
 
+  // Drive mapping
+  HOOKUP_OBJECT (frmConnect, chkDiskMapping, "chkDiskMapping");
 
   // Program Tab Widgets
   HOOKUP_OBJECT (frmConnect, lblProgramsTab1, "lblProgramsTab1");
Seulement dans tsclient-0.151/src: .deps
Seulement dans tsclient-0.151/src: Makefile
diff -ur tsclient-0.150/src/rdpfile.c tsclient-0.151/src/rdpfile.c
--- tsclient-0.150/src/rdpfile.c	2007-04-11 17:41:39.000000000 +0200
+++ tsclient-0.151/src/rdpfile.c	2007-10-24 11:42:09.000000000 +0200
@@ -39,6 +39,7 @@
   rdp->attach_to_console = 0;
   rdp->audiomode = 0;
   rdp->auto_connect = 0;
+  rdp->diskmapping = 0;
   rdp->bitmapcachepersistenable = 0;
   rdp->client_hostname = "";
   rdp->compression = 0;
@@ -195,6 +196,7 @@
   buffer = g_strconcat (buffer, "attach to console:i:", g_strdup_printf("%d",rdp->attach_to_console), "\r\n", NULL);
   buffer = g_strconcat (buffer, "audiomode:i:", g_strdup_printf("%d",rdp->audiomode), "\r\n", NULL);
   buffer = g_strconcat (buffer, "auto connect:i:", g_strdup_printf("%d",rdp->auto_connect), "\r\n", NULL);
+  buffer = g_strconcat (buffer, "diskmapping:i:", g_strdup_printf("%d",rdp->diskmapping), "\r\n", NULL);
   buffer = g_strconcat (buffer, "bitmapcachepersistenable:i:", g_strdup_printf("%d",rdp->bitmapcachepersistenable), "\r\n", NULL);
   buffer = g_strconcat (buffer, "client hostname:s:", rdp->client_hostname, "\r\n", NULL);
   buffer = g_strconcat (buffer, "compression:i:", g_strdup_printf("%d",rdp->compression), "\r\n", NULL);
@@ -395,7 +397,6 @@
   gtk_editable_delete_text ((GtkEditable*) widget, 0, -1);
   gtk_editable_insert_text((GtkEditable*) widget, (gchar *)rdp->keyboard_language, strlen(rdp->keyboard_language), &pos);
 
-
   widget = lookup_widget (main_window, "chkStartProgram");
   if (rdp->enable_alternate_shell == 1)
     gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), TRUE);
@@ -421,6 +422,7 @@
   }
   
   // the checkboxes on the performance frame
+
   widget = lookup_widget (main_window, "chkBitmapCache");
   if (rdp->bitmapcachepersistenable == 1)
     gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), TRUE);
@@ -509,6 +511,12 @@
     gtk_option_menu_set_history (GTK_OPTION_MENU(widget), 0);
     break;
   } */
+  
+    widget = lookup_widget (main_window, "chkDiskMapping");
+  if (rdp->diskmapping == 1)
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), TRUE);
+  else
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), FALSE);
       
   tsc_set_protocol_widgets (main_window, rdp->protocol);
   
@@ -700,6 +708,11 @@
   value = gtk_editable_get_chars ((GtkEditable*) widget, 0, -1);
   if (value) rdp->shell_working_directory = value;
   
+  widget = lookup_widget (main_window, "chkDiskMapping");
+  if (gtk_toggle_button_get_active ((GtkToggleButton*)widget))
+    rdp->diskmapping = 1;
+  else
+    rdp->diskmapping = 0;
 
   widget = lookup_widget (main_window, "chkBitmapCache");
   if (!gtk_toggle_button_get_active ((GtkToggleButton*)widget))
@@ -707,7 +720,6 @@
   else
     rdp->bitmapcachepersistenable = 0;
 
-
   widget = lookup_widget (main_window, "chkDesktopBackground");
   if (!gtk_toggle_button_get_active ((GtkToggleButton*)widget))
     rdp->disable_wallpaper = 1;
@@ -814,6 +826,11 @@
     if (strcmp(key, "auto connect") == 0) {
       rdp->auto_connect = atoi(value);
     }
+
+    if (strcmp(key, "diskmapping") == 0) {
+      rdp->diskmapping = atoi(value);
+    }
+
     if (strcmp(key, "bitmapcachepersistenable") == 0) {
       rdp->bitmapcachepersistenable = atoi(value);
     }
diff -ur tsclient-0.150/src/rdpfile.h tsclient-0.151/src/rdpfile.h
--- tsclient-0.150/src/rdpfile.h	2007-04-11 17:19:49.000000000 +0200
+++ tsclient-0.151/src/rdpfile.h	2007-10-11 01:37:07.000000000 +0200
@@ -23,6 +23,7 @@
   int attach_to_console;
   int audiomode;
   int auto_connect;
+  int diskmapping;
   int bitmapcachepersistenable;
   char *client_hostname;
   int compression;
diff -ur tsclient-0.150/src/support.c tsclient-0.151/src/support.c
--- tsclient-0.150/src/support.c	2007-04-19 22:49:22.000000000 +0200
+++ tsclient-0.151/src/support.c	2007-10-24 15:33:35.000000000 +0200
@@ -376,7 +376,7 @@
       sprintf(buffer, cmd);
       c_argv[c_argc++] = g_strdup (buffer);
 
-      sprintf(buffer, "-T%s - %s", rdp->full_address, _("Terminal Server Client"));
+      sprintf(buffer, "-T\'%s - %s\'", rdp->full_address, _("Terminal Server Client"));
       c_argv[c_argc++] = g_strdup (buffer);
       
       // full window mode - use all opts    
@@ -459,20 +459,26 @@
     
       // Extra Options
       if (rdp->audiomode == 0) {
-        sprintf(buffer, "-rsound:local");
+        sprintf(buffer, "-rsound:local");
+        c_argv[c_argc++] = g_strdup (buffer);
+      } else if (rdp->audiomode == 1) {
+        sprintf(buffer, "-rsound:remote");
+        c_argv[c_argc++] = g_strdup (buffer);
+      } else {
+        sprintf(buffer, "-rsound:off");
         c_argv[c_argc++] = g_strdup (buffer);
-      } else if (rdp->audiomode == 1) {
-        sprintf(buffer, "-rsound:remote");
-        c_argv[c_argc++] = g_strdup (buffer);
-      } else {
-        sprintf(buffer, "-rsound:off");
-        c_argv[c_argc++] = g_strdup (buffer);
       }
 
       /*  clipboard feature, rdesktop 1.5 */
       sprintf(buffer, "-rclipboard:PRIMARYCLIPBOARD");
       c_argv[c_argc++] = g_strdup (buffer);
 
+	  // disk mapping
+      if (rdp->diskmapping == 1) {
+        sprintf(buffer, "-rdisk:Local=/");
+        c_argv[c_argc++] = g_strdup (buffer);
+      }
+
       if (rdp->bitmapcachepersistenable == 1) {
         sprintf(buffer, "-b");
         c_argv[c_argc++] = g_strdup (buffer);
@@ -517,11 +523,17 @@
           c_argv[c_argc++] = g_strdup (rdp->shell_working_directory);
         }
       }
-      
-      if (rdp->protocol == 0) {
+
+	  // If RDP protocol is asked without disk mapping => protocol 4
+      if (rdp->protocol == 0 && rdp->diskmapping == 0) {
         sprintf (buffer, "-4");
         c_argv[c_argc++] = g_strdup (buffer);
       }
+   	  // but if disk mapping is asked => protocol 5
+      else { 
+      	sprintf (buffer, "-5");
+		c_argv[c_argc++] = g_strdup (buffer);
+      }
 
       // do this shit for all modes
       sprintf(buffer, "%s", (char*)g_strescape(rdp->full_address, NULL));
@@ -1024,6 +1036,7 @@
 			   "Erick Woods <[EMAIL PROTECTED]>",
 			   "Kyle Davis <[EMAIL PROTECTED]>",
 			   "Jonh Wendell <[EMAIL PROTECTED]>",
+			   "Benoit Poulet <[EMAIL PROTECTED]>",
 			   NULL };
 
   const gchar *artists[] = {

<<attachment: harddrive.png>>

Reply via email to