Added the file transfer feature to the server side.

git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@534 3789f03b-4d11-0410-bbf8-ca57d06f2519
diff --git a/rfb_win32/SFileTransferManagerWin32.cxx b/rfb_win32/SFileTransferManagerWin32.cxx
new file mode 100644
index 0000000..000b372
--- /dev/null
+++ b/rfb_win32/SFileTransferManagerWin32.cxx
@@ -0,0 +1,71 @@
+/* Copyright (C) 2006 TightVNC Team.  All Rights Reserved.

+ *

+ * Developed by Dennis Syrovatsky.

+ *    

+ * This is free software; you can redistribute it and/or modify

+ * it under the terms of the GNU General Public License as published by

+ * the Free Software Foundation; either version 2 of the License, or

+ * (at your option) any later version.

+ * 

+ * This software is distributed in the hope that it will be useful,

+ * but WITHOUT ANY WARRANTY; without even the implied warranty of

+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

+ * GNU General Public License for more details.

+ * 

+ * You should have received a copy of the GNU General Public License

+ * along with this software; if not, write to the Free Software

+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,

+ * USA.

+ *

+ * TightVNC distribution homepage on the Web: http://www.tightvnc.com/

+ *

+ */

+

+// -=- SFileTransferManagerWin32.cxx

+

+#include <rfb_win32/SFileTransferManagerWin32.h>

+

+using namespace rfb;

+using namespace win32;

+

+SFileTransferManagerWin32::SFileTransferManagerWin32()

+{

+

+}

+

+SFileTransferManagerWin32::~SFileTransferManagerWin32()

+{

+

+}

+

+SFileTransfer *

+SFileTransferManagerWin32::createObject(network::Socket *sock)

+{

+  rfb::SFileTransfer *pFT = 0;

+  rfb::win32::SFileTransferWin32 *pFTWin32 = 0;

+

+  pFTWin32 = new SFileTransferWin32(sock);

+  if (pFTWin32 == NULL) return NULL;

+

+  pFT = (SFileTransfer *) pFTWin32;

+

+  m_lstFTObjects.push_front(pFT);

+

+  return pFT;

+}

+

+void 

+SFileTransferManagerWin32::processDownloadMsg(MSG msg)

+{

+  SFileTransfer *pFT = (SFileTransfer *)msg.lParam;

+

+  if (pFT != NULL) {

+    std::list<SFileTransfer*>::iterator i;

+    for (i=m_lstFTObjects.begin(); i!=m_lstFTObjects.end(); i++) {

+      if ((*i) == pFT) {

+        (*i)->sendFileDownloadPortion();

+        return;

+      }

+    }

+  }

+}

diff --git a/rfb_win32/SFileTransferManagerWin32.h b/rfb_win32/SFileTransferManagerWin32.h
new file mode 100644
index 0000000..6014f38
--- /dev/null
+++ b/rfb_win32/SFileTransferManagerWin32.h
@@ -0,0 +1,48 @@
+/* Copyright (C) 2006 TightVNC Team.  All Rights Reserved.

+ *

+ * Developed by Dennis Syrovatsky.

+ *    

+ * This is free software; you can redistribute it and/or modify

+ * it under the terms of the GNU General Public License as published by

+ * the Free Software Foundation; either version 2 of the License, or

+ * (at your option) any later version.

+ * 

+ * This software is distributed in the hope that it will be useful,

+ * but WITHOUT ANY WARRANTY; without even the implied warranty of

+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

+ * GNU General Public License for more details.

+ * 

+ * You should have received a copy of the GNU General Public License

+ * along with this software; if not, write to the Free Software

+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,

+ * USA.

+ *

+ * TightVNC distribution homepage on the Web: http://www.tightvnc.com/

+ *

+ */

+

+// -=- SFileTransferManagerWin32.h

+

+#ifndef __RFB_WIN32_SFILETRANSFERMANAGERWIN32_H__

+#define __RFB_WIN32_SFILETRANSFERMANAGERWIN32_H__

+

+#include <rfb/SFileTransfer.h>

+#include <rfb/SFileTransferManager.h>

+#include <rfb_win32/SFileTransferWin32.h>

+

+namespace rfb {

+  namespace win32 {

+    class SFileTransferManagerWin32 : public rfb::SFileTransferManager

+    {

+    public:

+      SFileTransferManagerWin32();

+      ~SFileTransferManagerWin32();  

+      

+      void processDownloadMsg(MSG msg);

+

+      virtual SFileTransfer *createObject(network::Socket *sock);

+    };

+  };

+}

+

+#endif // __RFB_WIN32_SFILETRANSFERMANAGERWIN32_H__

diff --git a/rfb_win32/SFileTransferWin32.cxx b/rfb_win32/SFileTransferWin32.cxx
new file mode 100644
index 0000000..5a33a43
--- /dev/null
+++ b/rfb_win32/SFileTransferWin32.cxx
@@ -0,0 +1,125 @@
+/* Copyright (C) 2006 TightVNC Team.  All Rights Reserved.

+ *

+ * Developed by Dennis Syrovatsky.

+ *    

+ * This is free software; you can redistribute it and/or modify

+ * it under the terms of the GNU General Public License as published by

+ * the Free Software Foundation; either version 2 of the License, or

+ * (at your option) any later version.

+ * 

+ * This software is distributed in the hope that it will be useful,

+ * but WITHOUT ANY WARRANTY; without even the implied warranty of

+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

+ * GNU General Public License for more details.

+ * 

+ * You should have received a copy of the GNU General Public License

+ * along with this software; if not, write to the Free Software

+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,

+ * USA.

+ *

+ * TightVNC distribution homepage on the Web: http://www.tightvnc.com/

+ *

+ */

+

+// -=- SFileTransferWin32.cxx

+

+#include <rfb/msgTypes.h>

+#include <rfb_win32/FolderManager.h>

+#include <rfb_win32/SFileTransferWin32.h>

+

+using namespace rfb;

+using namespace rfb::win32;

+

+SFileTransferWin32::SFileTransferWin32(network::Socket *sock) : SFileTransfer(sock)

+{

+}

+

+SFileTransferWin32::~SFileTransferWin32()

+{

+}

+

+bool 

+SFileTransferWin32::initDownloadCallback()

+{

+  PostThreadMessage(GetCurrentThreadId(), VNCM_FT_DOWNLOAD, (WPARAM) 0, (LPARAM) this);

+  return true;

+}

+

+bool 

+SFileTransferWin32::processDownloadCallback()

+{

+  return sendFileDownloadPortion();

+}

+

+bool 

+SFileTransferWin32::convertPathFromNet(char *pszPath)

+{

+  int len = strlen(pszPath);

+  if (pszPath[0] == '/') {

+    if (len == 1) { 

+      pszPath[0] = '\0'; 

+      return true; 

+    }

+  } else {

+    return false;

+  }

+

+  for(int i = 0; i < (len - 1); i++) {

+    if(pszPath[i+1] == '/') pszPath[i+1] = '\\';

+    pszPath[i] = pszPath[i+1];

+  }

+

+  pszPath[len-1] = '\0';

+  return true;

+}

+

+bool 

+SFileTransferWin32::makeFileList(char *pszPath, FileInfo *pFI, bool bDirOnly)

+{

+  FolderManager fm;

+  if (fm.getDirInfo(pszPath, pFI, bDirOnly)) 

+    return true; 

+  else 

+    return false;

+}

+

+bool 

+SFileTransferWin32::deleteIt(char *pszPath)

+{

+  FolderManager fm;

+

+  return fm.deleteIt(pszPath);

+}

+

+bool 

+SFileTransferWin32::renameIt(char *pszOldPath, char *pszNewPath)

+{

+  FolderManager fm;

+

+  return fm.renameIt(pszOldPath, pszNewPath);

+}

+

+bool 

+SFileTransferWin32::createDir(char *pszPath)

+{

+  FolderManager fm;

+

+  return fm.createDir(pszPath);

+}

+

+bool 

+SFileTransferWin32::getDirSize(char *pszName, unsigned short *pHighSize16, 

+                               unsigned int *pLowSize32)

+{

+  FolderManager fm;

+  DWORD64 dw64DirSize = 0;

+

+  if (!fm.getDirSize(pszName, &dw64DirSize)) return false;

+

+  if (dw64DirSize & 0xFFFF000000000000) return false;

+

+  *pHighSize16 = ((dw64DirSize & 0x0000FFFF00000000) >> 32);

+  *pLowSize32 = (dw64DirSize & 0x00000000FFFFFFFF);

+

+  return true;

+}

diff --git a/rfb_win32/SFileTransferWin32.h b/rfb_win32/SFileTransferWin32.h
new file mode 100644
index 0000000..b2a5c57
--- /dev/null
+++ b/rfb_win32/SFileTransferWin32.h
@@ -0,0 +1,59 @@
+/* Copyright (C) 2006 TightVNC Team.  All Rights Reserved.

+ *

+ * Developed by Dennis Syrovatsky.

+ *    

+ * This is free software; you can redistribute it and/or modify

+ * it under the terms of the GNU General Public License as published by

+ * the Free Software Foundation; either version 2 of the License, or

+ * (at your option) any later version.

+ * 

+ * This software is distributed in the hope that it will be useful,

+ * but WITHOUT ANY WARRANTY; without even the implied warranty of

+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

+ * GNU General Public License for more details.

+ * 

+ * You should have received a copy of the GNU General Public License

+ * along with this software; if not, write to the Free Software

+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,

+ * USA.

+ *

+ * TightVNC distribution homepage on the Web: http://www.tightvnc.com/

+ *

+ */

+

+// -=- SFileTransferWin32.h

+

+#ifndef __RFB_SFILETRANSFERWIN32_H__

+#define __RFB_SFILETRANSFERWIN32_H__

+

+#include <windows.h>

+

+#include <rfb/SFileTransfer.h>

+

+const UINT VNCM_FT_DOWNLOAD = WM_USER + 2;

+

+namespace rfb {

+  namespace win32 {

+    class SFileTransferWin32 : public rfb::SFileTransfer

+    {

+    public:

+      SFileTransferWin32(network::Socket *sock);

+      ~SFileTransferWin32();

+

+      bool processDownloadCallback();

+      virtual bool initDownloadCallback();

+

+      virtual bool convertPathFromNet(char *pszPath);

+      virtual bool makeFileList(char *pszPath, FileInfo *pFI, bool bDirOnly);

+  

+      virtual bool deleteIt(char *pszPath);

+      virtual bool renameIt(char *pszOldPath, char *pszNewPath);

+      virtual bool createDir(char *pszPath);

+

+      virtual bool getDirSize(char *pszName, unsigned short *pHighSize16, unsigned int *pLowSize32);

+

+    };

+  };

+}

+

+#endif // __RFB_SFILETRANSFERWIN32_H__

diff --git a/rfb_win32/rfb_win32.dsp b/rfb_win32/rfb_win32.dsp
index de7f840..e9b746c 100644
--- a/rfb_win32/rfb_win32.dsp
+++ b/rfb_win32/rfb_win32.dsp
@@ -190,6 +190,14 @@
 # End Source File

 # Begin Source File

 

+SOURCE=.\SFileTransferManagerWin32.cxx

+# End Source File

+# Begin Source File

+

+SOURCE=.\SFileTransferWin32.cxx

+# End Source File

+# Begin Source File

+

 SOURCE=.\SInput.cxx

 # End Source File

 # Begin Source File

@@ -330,6 +338,14 @@
 # End Source File

 # Begin Source File

 

+SOURCE=.\SFileTransferManagerWin32.h

+# End Source File

+# Begin Source File

+

+SOURCE=.\SFileTransferWin32.h

+# End Source File

+# Begin Source File

+

 SOURCE=.\SInput.h

 # End Source File

 # Begin Source File