OSDN Git Service

Fix bugs of UTF-8 to UTF-16 API bridge.
authors_kawamoto <s_kawamoto@users.sourceforge.jp>
Sun, 11 Sep 2011 14:59:43 +0000 (23:59 +0900)
committers_kawamoto <s_kawamoto@users.sourceforge.jp>
Sun, 11 Sep 2011 14:59:43 +0000 (23:59 +0900)
Add UIs for encryption.
Add support for FTP over Explicit SSL/TLS (OpenSSL is required).
Fix bugs of synchronization between threads.
Fix bugs of behavior caused by uninitialized variables.
Fix bugs of algorithm to wait for SOCKET signals.

29 files changed:
FFFTP.exe
FFFTP.vc90.vcproj
FFFTP.vcproj
FFFTP_English.vc90.vcproj
FFFTP_English.vcproj
Resource/FFFTP.APS
Resource/FFFTP.rc
Resource/resource.h
Resource_eng/FFFTP-eng.aps
Resource_eng/FFFTP-eng.rc
Resource_eng/resource.h
common.h
config.h
connect.c
ftpproc.c
getput.c
history.c
hostman.c
main.c
mbswrapper.c
mesg-eng.h
mesg-eng.old.h
mesg-jpn.h
mesg-jpn.old.h
registory.c
remote.c
socket.c
socketwrapper.c [new file with mode: 0644]
socketwrapper.h [new file with mode: 0644]

index b17506b..30c7891 100644 (file)
Binary files a/FFFTP.exe and b/FFFTP.exe differ
index ab1b0aa..4457a7a 100644 (file)
                                >
                        </File>
                        <File
                                >
                        </File>
                        <File
+                               RelativePath=".\socketwrapper.c"
+                               >
+                       </File>
+                       <File
                                RelativePath=".\statuswin.c"
                                >
                        </File>
                                RelativePath=".\statuswin.c"
                                >
                        </File>
                                RelativePath=".\Resource\resource.h"
                                >
                        </File>
                                RelativePath=".\Resource\resource.h"
                                >
                        </File>
+                       <File
+                               RelativePath=".\socketwrapper.h"
+                               >
+                       </File>
                </Filter>
                <Filter
                        Name="Resource Files"
                </Filter>
                <Filter
                        Name="Resource Files"
index 503a503..bb072e9 100644 (file)
                                >\r
                        </File>\r
                        <File\r
                                >\r
                        </File>\r
                        <File\r
+                               RelativePath=".\mbswrapper.c"\r
+                               >\r
+                       </File>\r
+                       <File\r
                                RelativePath=".\md4.c"\r
                                >\r
                        </File>\r
                                RelativePath=".\md4.c"\r
                                >\r
                        </File>\r
                                >\r
                        </File>\r
                        <File\r
                                >\r
                        </File>\r
                        <File\r
+                               RelativePath=".\socketwrapper.c"\r
+                               >\r
+                       </File>\r
+                       <File\r
                                RelativePath=".\statuswin.c"\r
                                >\r
                        </File>\r
                                RelativePath=".\statuswin.c"\r
                                >\r
                        </File>\r
                                >\r
                        </File>\r
                        <File\r
                                >\r
                        </File>\r
                        <File\r
+                               RelativePath=".\mbswrapper.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
                                RelativePath=".\Resource\resource.h"\r
                                >\r
                        </File>\r
                                RelativePath=".\Resource\resource.h"\r
                                >\r
                        </File>\r
+                       <File\r
+                               RelativePath=".\socketwrapper.h"\r
+                               >\r
+                       </File>\r
                </Filter>\r
                <Filter\r
                        Name="Resource Files"\r
                </Filter>\r
                <Filter\r
                        Name="Resource Files"\r
index c745f09..5b25653 100644 (file)
                                >
                        </File>
                        <File
                                >
                        </File>
                        <File
+                               RelativePath=".\socketwrapper.c"
+                               >
+                       </File>
+                       <File
                                RelativePath=".\statuswin.c"
                                >
                        </File>
                                RelativePath=".\statuswin.c"
                                >
                        </File>
                                RelativePath=".\Resource_eng\resource.h"
                                >
                        </File>
                                RelativePath=".\Resource_eng\resource.h"
                                >
                        </File>
+                       <File
+                               RelativePath=".\socketwrapper.h"
+                               >
+                       </File>
                </Filter>
                <Filter
                        Name="Resource Files"
                </Filter>
                <Filter
                        Name="Resource Files"
index 484fe3e..b36eefd 100644 (file)
                                >\r
                        </File>\r
                        <File\r
                                >\r
                        </File>\r
                        <File\r
+                               RelativePath=".\mbswrapper.c"\r
+                               >\r
+                       </File>\r
+                       <File\r
                                RelativePath=".\md4.c"\r
                                >\r
                        </File>\r
                                RelativePath=".\md4.c"\r
                                >\r
                        </File>\r
                                >\r
                        </File>\r
                        <File\r
                                >\r
                        </File>\r
                        <File\r
+                               RelativePath=".\socketwrapper.c"\r
+                               >\r
+                       </File>\r
+                       <File\r
                                RelativePath=".\statuswin.c"\r
                                >\r
                        </File>\r
                                RelativePath=".\statuswin.c"\r
                                >\r
                        </File>\r
                                >\r
                        </File>\r
                        <File\r
                                >\r
                        </File>\r
                        <File\r
+                               RelativePath=".\mbswrapper.h"\r
+                               >\r
+                       </File>\r
+                       <File\r
                                RelativePath=".\Resource_eng\resource.h"\r
                                >\r
                        </File>\r
                                RelativePath=".\Resource_eng\resource.h"\r
                                >\r
                        </File>\r
+                       <File\r
+                               RelativePath=".\socketwrapper.h"\r
+                               >\r
+                       </File>\r
                </Filter>\r
                <Filter\r
                        Name="Resource Files"\r
                </Filter>\r
                <Filter\r
                        Name="Resource Files"\r
index cd20b45..9e3189e 100644 (file)
Binary files a/Resource/FFFTP.APS and b/Resource/FFFTP.APS differ
index 49cdeaf..c264ad5 100644 (file)
@@ -1341,6 +1341,15 @@ BEGIN
     CONTROL         "",INP_ANONYMOUS,"Button",BS_AUTOCHECKBOX | NOT WS_VISIBLE | WS_DISABLED | WS_TABSTOP,172,42,8,8\r
 END\r
 \r
     CONTROL         "",INP_ANONYMOUS,"Button",BS_AUTOCHECKBOX | NOT WS_VISIBLE | WS_DISABLED | WS_TABSTOP,172,42,8,8\r
 END\r
 \r
+hset_crypt_dlg DIALOG  0, 0, 207, 139\r
+STYLE DS_SETFONT | WS_CHILD | WS_DISABLED | WS_CAPTION\r
+FONT 9, "\82l\82\82o\83S\83V\83b\83N"\r
+BEGIN\r
+    CONTROL         "FTPS (Explicit)\82Å\90Ú\91±",HSET_FTPES,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,7,7,148,10\r
+    CONTROL         "FTPS (Inplicit)\82Å\90Ú\91±",HSET_FTPIS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,21,148,10\r
+    CONTROL         "SFTP\82Å\90Ú\91±",HSET_SFTP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,35,148,10\r
+END\r
+\r
 \r
 /////////////////////////////////////////////////////////////////////////////\r
 //\r
 \r
 /////////////////////////////////////////////////////////////////////////////\r
 //\r
index 0fd2d66..a8046d3 100644 (file)
 #define forcepasschange_dlg             186\r
 #define newmasterpasswd_dlg             187\r
 #define masterpasswd_dlg                188\r
 #define forcepasschange_dlg             186\r
 #define newmasterpasswd_dlg             187\r
 #define masterpasswd_dlg                188\r
+#define hset_crypt_dlg                  189\r
 #define TRANS_TIME_BAR                  1002\r
 #define TRANS_TEXT                      1003\r
 #define TRANS_REMOTE                    1003\r
 #define TRANS_TIME_BAR                  1002\r
 #define TRANS_TEXT                      1003\r
 #define TRANS_REMOTE                    1003\r
 #define HSET_SJIS_CNV                   1195\r
 #define HSET_UTF8N_CNV                  1196\r
 #define HSET_FN_SJIS_CNV                1197\r
 #define HSET_SJIS_CNV                   1195\r
 #define HSET_UTF8N_CNV                  1196\r
 #define HSET_FN_SJIS_CNV                1197\r
+#define HSET_FTPES                      1198\r
+#define HSET_FTPIS                      1199\r
+#define HSET_SFTP                       1200\r
 #define MENU_END                        40001\r
 #define MENU_EXIT                       40001\r
 #define MENU_CONNECT                    40003\r
 #define MENU_END                        40001\r
 #define MENU_EXIT                       40001\r
 #define MENU_CONNECT                    40003\r
 // \r
 #ifdef APSTUDIO_INVOKED\r
 #ifndef APSTUDIO_READONLY_SYMBOLS\r
 // \r
 #ifdef APSTUDIO_INVOKED\r
 #ifndef APSTUDIO_READONLY_SYMBOLS\r
-#define _APS_NEXT_RESOURCE_VALUE        189\r
+#define _APS_NEXT_RESOURCE_VALUE        190\r
 #define _APS_NEXT_COMMAND_VALUE         40175\r
 #define _APS_NEXT_COMMAND_VALUE         40175\r
-#define _APS_NEXT_CONTROL_VALUE         1198\r
+#define _APS_NEXT_CONTROL_VALUE         1201\r
 #define _APS_NEXT_SYMED_VALUE           101\r
 #endif\r
 #endif\r
 #define _APS_NEXT_SYMED_VALUE           101\r
 #endif\r
 #endif\r
index 27bf57a..a9928a3 100644 (file)
Binary files a/Resource_eng/FFFTP-eng.aps and b/Resource_eng/FFFTP-eng.aps differ
index 6bf6616..2d734af 100644 (file)
@@ -1201,6 +1201,15 @@ BEGIN
     CONTROL         "",INP_ANONYMOUS,"Button",BS_AUTOCHECKBOX | NOT WS_VISIBLE | WS_DISABLED | WS_TABSTOP,173,39,8,8\r
 END\r
 \r
     CONTROL         "",INP_ANONYMOUS,"Button",BS_AUTOCHECKBOX | NOT WS_VISIBLE | WS_DISABLED | WS_TABSTOP,173,39,8,8\r
 END\r
 \r
+hset_crypt_dlg DIALOG  0, 0, 207, 139\r
+STYLE DS_SETFONT | WS_CHILD | WS_DISABLED | WS_CAPTION\r
+FONT 9, "\82l\82\82o\83S\83V\83b\83N"\r
+BEGIN\r
+    CONTROL         "Connect with FTPS (Explicit)",HSET_FTPES,"Button",BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,7,7,148,10\r
+    CONTROL         "Connect with FTPS (Inplicit)",HSET_FTPIS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,21,148,10\r
+    CONTROL         "Connect with SFTP",HSET_SFTP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,35,148,10\r
+END\r
+\r
 \r
 /////////////////////////////////////////////////////////////////////////////\r
 //\r
 \r
 /////////////////////////////////////////////////////////////////////////////\r
 //\r
index d580642..17dfc27 100644 (file)
 #define forcepasschange_dlg             186\r
 #define newmasterpasswd_dlg             187\r
 #define masterpasswd_dlg                188\r
 #define forcepasschange_dlg             186\r
 #define newmasterpasswd_dlg             187\r
 #define masterpasswd_dlg                188\r
+#define hset_crypt_dlg                  189\r
 #define TRANS_TIME_BAR                  1002\r
 #define TRANS_TEXT                      1003\r
 #define TRANS_REMOTE                    1003\r
 #define TRANS_TIME_BAR                  1002\r
 #define TRANS_TEXT                      1003\r
 #define TRANS_REMOTE                    1003\r
 #define HSET_SJIS_CNV                   1195\r
 #define HSET_UTF8N_CNV                  1196\r
 #define HSET_FN_SJIS_CNV                1197\r
 #define HSET_SJIS_CNV                   1195\r
 #define HSET_UTF8N_CNV                  1196\r
 #define HSET_FN_SJIS_CNV                1197\r
+#define HSET_FTPES                      1198\r
+#define HSET_FTPIS                      1199\r
+#define HSET_SFTP                       1200\r
 #define MENU_END                        40001\r
 #define MENU_EXIT                       40001\r
 #define MENU_CONNECT                    40003\r
 #define MENU_END                        40001\r
 #define MENU_EXIT                       40001\r
 #define MENU_CONNECT                    40003\r
 // \r
 #ifdef APSTUDIO_INVOKED\r
 #ifndef APSTUDIO_READONLY_SYMBOLS\r
 // \r
 #ifdef APSTUDIO_INVOKED\r
 #ifndef APSTUDIO_READONLY_SYMBOLS\r
-#define _APS_NEXT_RESOURCE_VALUE        189\r
+#define _APS_NEXT_RESOURCE_VALUE        190\r
 #define _APS_NEXT_COMMAND_VALUE         40175\r
 #define _APS_NEXT_COMMAND_VALUE         40175\r
-#define _APS_NEXT_CONTROL_VALUE         1198\r
+#define _APS_NEXT_CONTROL_VALUE         1201\r
 #define _APS_NEXT_SYMED_VALUE           101\r
 #endif\r
 #endif\r
 #define _APS_NEXT_SYMED_VALUE           101\r
 #endif\r
 #endif\r
index c661dad..b6f2fa6 100644 (file)
--- a/common.h
+++ b/common.h
@@ -853,6 +853,12 @@ LIST_UNIX_70
 #define DEFAULT_PASSWORD       "DefaultPassword"\r
 #define MAX_PASSWORD_LEN       128\r
 \r
 #define DEFAULT_PASSWORD       "DefaultPassword"\r
 #define MAX_PASSWORD_LEN       128\r
 \r
+// \88Ã\8d\86\89»\92Ê\90M\91Î\89\9e\r
+#define CRYPT_NONE                     0\r
+#define CRYPT_FTPES                    1\r
+#define CRYPT_FTPIS                    2\r
+#define CRYPT_SFTP                     3\r
+\r
 \r
 /*=================================================\r
 *              \83X\83g\83\89\83N\83`\83\83\r
 \r
 /*=================================================\r
 *              \83X\83g\83\89\83N\83`\83\83\r
@@ -896,6 +902,11 @@ typedef struct {
        int DialupAlways;                                       /* \8fí\82É\82±\82Ì\83G\83\93\83g\83\8a\82Ö\90Ú\91±\82·\82é\82©\82Ç\82¤\82© (YES/NO) */\r
        int DialupNotify;                                       /* \8dÄ\90Ú\91±\82Ì\8dÛ\82É\8am\94F\82·\82é (YES/NO) */\r
        char DialEntry[RAS_NAME_LEN+1];         /* \83_\83C\83A\83\8b\83A\83b\83v\83G\83\93\83g\83\8a */\r
        int DialupAlways;                                       /* \8fí\82É\82±\82Ì\83G\83\93\83g\83\8a\82Ö\90Ú\91±\82·\82é\82©\82Ç\82¤\82© (YES/NO) */\r
        int DialupNotify;                                       /* \8dÄ\90Ú\91±\82Ì\8dÛ\82É\8am\94F\82·\82é (YES/NO) */\r
        char DialEntry[RAS_NAME_LEN+1];         /* \83_\83C\83A\83\8b\83A\83b\83v\83G\83\93\83g\83\8a */\r
+       // \88Ã\8d\86\89»\92Ê\90M\91Î\89\9e\r
+       int CryptMode;                                          /* \88Ã\8d\86\89»\92Ê\90M\83\82\81[\83h (CRYPT_xxx) */\r
+       int UseFTPES;                                           /* FTPES\82Å\90Ú\91±\82·\82é (YES/NO) */\r
+       int UseFTPIS;                                           /* FTPIS\82Å\90Ú\91±\82·\82é (YES/NO) */\r
+       int UseSFTP;                                            /* SFTP\82Å\90Ú\91±\82·\82é (YES/NO) */\r
 } HOSTDATA;\r
 \r
 \r
 } HOSTDATA;\r
 \r
 \r
@@ -942,6 +953,10 @@ typedef struct historydata {
        int DialupAlways;                                       /* \8fí\82É\82±\82Ì\83G\83\93\83g\83\8a\82Ö\90Ú\91±\82·\82é\82©\82Ç\82¤\82© (YES/NO) */\r
        int DialupNotify;                                       /* \8dÄ\90Ú\91±\82Ì\8dÛ\82É\8am\94F\82·\82é (YES/NO) */\r
        char DialEntry[RAS_NAME_LEN+1];         /* \83_\83C\83A\83\8b\83A\83b\83v\83G\83\93\83g\83\8a */\r
        int DialupAlways;                                       /* \8fí\82É\82±\82Ì\83G\83\93\83g\83\8a\82Ö\90Ú\91±\82·\82é\82©\82Ç\82¤\82© (YES/NO) */\r
        int DialupNotify;                                       /* \8dÄ\90Ú\91±\82Ì\8dÛ\82É\8am\94F\82·\82é (YES/NO) */\r
        char DialEntry[RAS_NAME_LEN+1];         /* \83_\83C\83A\83\8b\83A\83b\83v\83G\83\93\83g\83\8a */\r
+       // \88Ã\8d\86\89»\92Ê\90M\91Î\89\9e\r
+       int UseFTPES;                                           /* FTPES\82Å\90Ú\91±\82·\82é (YES/NO) */\r
+       int UseFTPIS;                                           /* FTPIS\82Å\90Ú\91±\82·\82é (YES/NO) */\r
+       int UseSFTP;                                            /* SFTP\82Å\90Ú\91±\82·\82é (YES/NO) */\r
        struct historydata *Next;\r
 } HISTORYDATA;\r
 \r
        struct historydata *Next;\r
 } HISTORYDATA;\r
 \r
@@ -962,11 +977,14 @@ typedef struct transpacket {
        FILETIME Time;                                  /* \83t\83@\83C\83\8b\82Ì\8e\9e\8aÔ(UTC) */\r
        int Attr;                                               /* \83t\83@\83C\83\8b\82Ì\91®\90« */\r
        int KanjiCode;                                  /* \8a¿\8e\9a\83R\81[\83h (KANJI_xxx) */\r
        FILETIME Time;                                  /* \83t\83@\83C\83\8b\82Ì\8e\9e\8aÔ(UTC) */\r
        int Attr;                                               /* \83t\83@\83C\83\8b\82Ì\91®\90« */\r
        int KanjiCode;                                  /* \8a¿\8e\9a\83R\81[\83h (KANJI_xxx) */\r
-       int KanjiCodeDesired;                   /* \95Ï\8a·\90æ\82Ì\8a¿\8e\9a\83R\81[\83h (KANJI_xxx) */\r
+       // UTF-8\91Î\89\9e\r
+       int KanjiCodeDesired;                   /* \83\8d\81[\83J\83\8b\82Ì\8a¿\8e\9a\83R\81[\83h (KANJI_xxx) */\r
        int KanaCnv;                                    /* \94¼\8ap\83J\83i\82ð\91S\8ap\82É\95Ï\8a·(YES/NO) */\r
        int Mode;                                               /* \93]\91\97\83\82\81[\83h (EXIST_xxx) */\r
        HWND hWndTrans;                                 /* \93]\91\97\92\86\83_\83C\83A\83\8d\83O\82Ì\83E\83C\83\93\83h\83E\83n\83\93\83h\83\8b */\r
        int Abort;                                              /* \93]\91\97\92\86\8e~\83t\83\89\83O (ABORT_xxx) */\r
        int KanaCnv;                                    /* \94¼\8ap\83J\83i\82ð\91S\8ap\82É\95Ï\8a·(YES/NO) */\r
        int Mode;                                               /* \93]\91\97\83\82\81[\83h (EXIST_xxx) */\r
        HWND hWndTrans;                                 /* \93]\91\97\92\86\83_\83C\83A\83\8d\83O\82Ì\83E\83C\83\93\83h\83E\83n\83\93\83h\83\8b */\r
        int Abort;                                              /* \93]\91\97\92\86\8e~\83t\83\89\83O (ABORT_xxx) */\r
+       // \88Ã\8d\86\89»\92Ê\90M\91Î\89\9e\r
+       int CryptMode;                                  /* \88Ã\8d\86\89»\92Ê\90M\83\82\81[\83h (CRYPT_xxx) */\r
        struct transpacket *Next;\r
 } TRANSPACKET;\r
 \r
        struct transpacket *Next;\r
 } TRANSPACKET;\r
 \r
@@ -1169,6 +1187,8 @@ int AskForceIni(void);
 int BackgrndMessageProc(void);\r
 void ResetAutoExitFlg(void);\r
 int AskAutoExit(void);\r
 int BackgrndMessageProc(void);\r
 void ResetAutoExitFlg(void);\r
 int AskAutoExit(void);\r
+// \88Ã\8d\86\89»\92Ê\90M\91Î\89\9e\r
+BOOL __stdcall SSLTimeoutCallback();\r
 \r
 /*===== filelist.c =====*/\r
 \r
 \r
 /*===== filelist.c =====*/\r
 \r
@@ -1340,6 +1360,11 @@ SOCKET connectsock(char *host, int port, char *PreMsg, int *CancelCheckWork);
 SOCKET GetFTPListenSocket(SOCKET ctrl_skt, int *CancelCheckWork);\r
 int AskTryingConnect(void);\r
 int SocksGet2ndBindReply(SOCKET Socket, SOCKET *Data);\r
 SOCKET GetFTPListenSocket(SOCKET ctrl_skt, int *CancelCheckWork);\r
 int AskTryingConnect(void);\r
 int SocksGet2ndBindReply(SOCKET Socket, SOCKET *Data);\r
+// \88Ã\8d\86\89»\92Ê\90M\91Î\89\9e\r
+int AskCryptMode(void);\r
+int AskUseFTPES(void);\r
+int AskUseFTPIS(void);\r
+int AskUseSFTP(void);\r
 \r
 /*===== cache.c =====*/\r
 \r
 \r
 /*===== cache.c =====*/\r
 \r
index 2febbab..8a92cfd 100644 (file)
--- a/config.h
+++ b/config.h
@@ -2,11 +2,15 @@
 /* OPENVMS\97p\82Ì\83R\81[\83h\82ð\97L\8cø\82É\82·\82é\81B\94ó\8cû\93a\8dì\90¬\82Ì\83p\83b\83`\82ð\91g\82Ý\8d\9e\82Ý\82Ü\82µ\82½\81B */\r
 #define HAVE_OPENVMS\r
 \r
 /* OPENVMS\97p\82Ì\83R\81[\83h\82ð\97L\8cø\82É\82·\82é\81B\94ó\8cû\93a\8dì\90¬\82Ì\83p\83b\83`\82ð\91g\82Ý\8d\9e\82Ý\82Ü\82µ\82½\81B */\r
 #define HAVE_OPENVMS\r
 \r
-//\91S\91Ì\82É\89e\8b¿\82·\82é\90Ý\92è\82Í\82±\82±\82É\8bL\8fq\82·\82é\97\\92è\r
-//\93à\95\94\82ðUTF-8\82Æ\82µ\82Ä\88µ\82¢\83}\83\8b\83`\83o\83C\83g\95\8e\9a\83\8f\83C\83h\95\8e\9aAPI\83\89\83b\83p\81[\82ð\8eg\97p\82·\82é\r
+// \91S\91Ì\82É\89e\8b¿\82·\82é\90Ý\92è\82Í\82±\82±\82É\8bL\8fq\82·\82é\97\\92è\r
+// \93à\95\94\82ðUTF-8\82Æ\82µ\82Ä\88µ\82¢\83}\83\8b\83`\83o\83C\83g\95\8e\9a\83\8f\83C\83h\95\8e\9aAPI\83\89\83b\83p\81[\82ð\8eg\97p\82·\82é\r
 #include "mbswrapper.h"\r
 #include "mbswrapper.h"\r
-//\8eg\97p\82·\82éCPU\82ð1\8cÂ\82É\8cÀ\92è\82·\82é\81i\83}\83\8b\83`\83R\83ACPU\82Ì\93Á\92è\8aÂ\8b«\89º\82Å\83t\83@\83C\83\8b\92Ê\90M\92\86\82É\83N\83\89\83b\83V\83\85\82·\82é\83o\83O\91Î\8dô\81j\r
+// OpenSSL\97p\83\\83P\83b\83g\83\89\83b\83p\81[\82ð\8eg\97p\82·\82é\r
+#include "socketwrapper.h"\r
+// \8eg\97p\82·\82éCPU\82ð1\8cÂ\82É\8cÀ\92è\82·\82é\81i\83}\83\8b\83`\83R\83ACPU\82Ì\93Á\92è\8aÂ\8b«\89º\82Å\83t\83@\83C\83\8b\92Ê\90M\92\86\82É\83N\83\89\83b\83V\83\85\82·\82é\83o\83O\91Î\8dô\81j\r
 #define DISABLE_MULTI_CPUS\r
 #define DISABLE_MULTI_CPUS\r
-//\83l\83b\83g\83\8f\81[\83N\83o\83b\83t\83@\82ð\96³\8cø\82É\82·\82é\81i\92Ê\90M\92\86\8e~\8cã\82É\83\8a\83\82\81[\83g\82Ì\83f\83B\83\8c\83N\83g\83\8a\82ª\95\\8e¦\82³\82ê\82È\82¢\83o\83O\91Î\8dô\81j\r
-//#define DISABLE_NETWORK_BUFFERS\r
+// \83t\83@\83C\83\8b\93]\91\97\97p\82Ì\83l\83b\83g\83\8f\81[\83N\83o\83b\83t\83@\82ð\96³\8cø\82É\82·\82é\81i\92Ê\90M\92\86\8e~\8cã\82É\83\8a\83\82\81[\83g\82Ì\83f\83B\83\8c\83N\83g\83\8a\82ª\95\\8e¦\82³\82ê\82È\82¢\83o\83O\91Î\8dô\81j\r
+//#define DISABLE_TRANSFER_NETWORK_BUFFERS\r
+// \83R\83\93\83g\83\8d\81[\83\8b\97p\82Ì\83l\83b\83g\83\8f\81[\83N\83o\83b\83t\83@\82ð\96³\8cø\82É\82·\82é\81i\83t\83\8a\81[\83Y\91Î\8dô\81j\r
+#define DISABLE_CONTROL_NETWORK_BUFFERS\r
 \r
 \r
index 7283282..23b4e95 100644 (file)
--- a/connect.c
+++ b/connect.c
@@ -1213,6 +1213,12 @@ static SOCKET DoConnect(char *Host, char *User, char *Pass, char *Acct, int Port
        {\r
                if((ContSock = connectsock(Tmp, Port, "", &CancelFlg)) != INVALID_SOCKET)\r
                {\r
        {\r
                if((ContSock = connectsock(Tmp, Port, "", &CancelFlg)) != INVALID_SOCKET)\r
                {\r
+                       // \83o\83b\83t\83@\82ð\96³\8cø\r
+#ifdef DISABLE_CONTROL_NETWORK_BUFFERS\r
+                       int BufferSize = 0;\r
+                       setsockopt(ContSock, SOL_SOCKET, SO_SNDBUF, (char*)&BufferSize, sizeof(int));\r
+                       setsockopt(ContSock, SOL_SOCKET, SO_RCVBUF, (char*)&BufferSize, sizeof(int));\r
+#endif\r
                        while((Sts = ReadReplyMessage(ContSock, Buf, 1024, &CancelFlg, TmpBuf) / 100) == FTP_PRELIM)\r
                                ;\r
 \r
                        while((Sts = ReadReplyMessage(ContSock, Buf, 1024, &CancelFlg, TmpBuf) / 100) == FTP_PRELIM)\r
                                ;\r
 \r
@@ -1221,6 +1227,8 @@ static SOCKET DoConnect(char *Host, char *User, char *Pass, char *Acct, int Port
                                Flg = 1;\r
                                if(setsockopt(ContSock, SOL_SOCKET, SO_OOBINLINE, (LPSTR)&Flg, sizeof(Flg)) == SOCKET_ERROR)\r
                                        ReportWSError("setsockopt", WSAGetLastError());\r
                                Flg = 1;\r
                                if(setsockopt(ContSock, SOL_SOCKET, SO_OOBINLINE, (LPSTR)&Flg, sizeof(Flg)) == SOCKET_ERROR)\r
                                        ReportWSError("setsockopt", WSAGetLastError());\r
+                               if(setsockopt(ContSock, IPPROTO_TCP, TCP_NODELAY, (LPSTR)&Flg, sizeof(Flg)) == SOCKET_ERROR)\r
+                                       ReportWSError("setsockopt", WSAGetLastError());\r
 #pragma aaa\r
                                Flg = 1;\r
                                if(setsockopt(ContSock, SOL_SOCKET, SO_KEEPALIVE, (LPSTR)&Flg, sizeof(Flg)) == SOCKET_ERROR)\r
 #pragma aaa\r
                                Flg = 1;\r
                                if(setsockopt(ContSock, SOL_SOCKET, SO_KEEPALIVE, (LPSTR)&Flg, sizeof(Flg)) == SOCKET_ERROR)\r
@@ -1299,6 +1307,39 @@ static SOCKET DoConnect(char *Host, char *User, char *Pass, char *Acct, int Port
                                                        else\r
                                                                strcpy(Buf, User);\r
 \r
                                                        else\r
                                                                strcpy(Buf, User);\r
 \r
+                                                       // FTPES\91Î\89\9e\r
+                                                       // 2\89ñ\88È\8fã\8cÄ\82Î\82ê\82é\8e\96\82ª\82 \82é\82½\82ß\8aù\82ÉFTPES\82Å\90Ú\91±\82µ\82Ä\82¢\82Ä\82à\8dÄ\8am\94F\r
+                                                       if(CurHost.CryptMode == CRYPT_NONE || CurHost.CryptMode == CRYPT_FTPES)\r
+                                                       {\r
+                                                               if(IsOpenSSLLoaded() && CurHost.UseFTPES == YES && (Sts = command(ContSock, Reply, &CancelFlg, "AUTH TLS")) == 234)\r
+                                                               {\r
+                                                                       // SSL\82É\90Ø\82è\91Ö\82¦\r
+                                                                       SetTaskMsg(MSGJPN315);\r
+                                                                       CurHost.CryptMode = CRYPT_FTPES;\r
+                                                                       if(AttachSSL(ContSock))\r
+                                                                       {\r
+                                                                               if((Sts = command(ContSock, Reply, &CancelFlg, "PBSZ 0")) == 200)\r
+                                                                               {\r
+                                                                                       if((Sts = command(ContSock, Reply, &CancelFlg, "PROT P")) == 200)\r
+                                                                                       {\r
+                                                                                       }\r
+                                                                                       else\r
+                                                                                               Sts = FTP_ERROR;\r
+                                                                               }\r
+                                                                               else\r
+                                                                                       Sts = FTP_ERROR;\r
+                                                                       }\r
+                                                                       else\r
+                                                                               Sts = FTP_ERROR;\r
+                                                               }\r
+                                                               else\r
+                                                               {\r
+                                                                       // \88Ã\8d\86\89»\82È\82µ\r
+                                                                       CurHost.CryptMode = CRYPT_NONE;\r
+                                                                       SetTaskMsg(MSGJPN314);\r
+                                                               }\r
+                                                       }\r
+\r
                                                        ReInPass = NO;\r
                                                        do\r
                                                        {\r
                                                        ReInPass = NO;\r
                                                        do\r
                                                        {\r
@@ -2123,3 +2164,24 @@ int SocksGet2ndBindReply(SOCKET Socket, SOCKET *Data)
 \r
 \r
 \r
 \r
 \r
 \r
+// \88Ã\8d\86\89»\92Ê\90M\91Î\89\9e\r
+int AskCryptMode(void)\r
+{\r
+       return(CurHost.CryptMode);\r
+}\r
+\r
+int AskUseFTPES(void)\r
+{\r
+       return(CurHost.UseFTPES);\r
+}\r
+\r
+int AskUseFTPIS(void)\r
+{\r
+       return(CurHost.UseFTPIS);\r
+}\r
+\r
+int AskUseSFTP(void)\r
+{\r
+       return(CurHost.UseSFTP);\r
+}\r
+\r
index ef6b10a..4ef3aa0 100644 (file)
--- a/ftpproc.c
+++ b/ftpproc.c
@@ -200,6 +200,7 @@ void DownLoadProc(int ChName, int ForceFile, int All)
                                Pkt.Size = Pos->Size;\r
                                Pkt.Time = Pos->Time;\r
                                Pkt.KanjiCode = AskHostKanjiCode();\r
                                Pkt.Size = Pos->Size;\r
                                Pkt.Time = Pos->Time;\r
                                Pkt.KanjiCode = AskHostKanjiCode();\r
+                               // UTF-8\91Î\89\9e\r
                                Pkt.KanjiCodeDesired = AskLocalKanjiCode();\r
                                Pkt.KanaCnv = AskHostKanaCnv();\r
 \r
                                Pkt.KanjiCodeDesired = AskLocalKanjiCode();\r
                                Pkt.KanaCnv = AskHostKanaCnv();\r
 \r
@@ -302,6 +303,7 @@ void DirectDownLoadProc(char *Fname)
                                /* \83T\83C\83Y\82Æ\93ú\95t\82Í\93]\91\97\91¤\83X\83\8c\83b\83h\82Å\8eæ\93¾\82µ\81A\83Z\83b\83g\82·\82é */\r
 \r
                                Pkt.KanjiCode = AskHostKanjiCode();\r
                                /* \83T\83C\83Y\82Æ\93ú\95t\82Í\93]\91\97\91¤\83X\83\8c\83b\83h\82Å\8eæ\93¾\82µ\81A\83Z\83b\83g\82·\82é */\r
 \r
                                Pkt.KanjiCode = AskHostKanjiCode();\r
+                               // UTF-8\91Î\89\9e\r
                                Pkt.KanjiCodeDesired = AskLocalKanjiCode();\r
                                Pkt.KanaCnv = AskHostKanaCnv();\r
 \r
                                Pkt.KanjiCodeDesired = AskLocalKanjiCode();\r
                                Pkt.KanaCnv = AskHostKanaCnv();\r
 \r
@@ -553,6 +555,7 @@ void MirrorDownloadProc(int Notify)
                                                Pkt.Time = RemotePos->Time;\r
 //                                             Pkt.Attr = 0;\r
                                                Pkt.KanjiCode = AskHostKanjiCode();\r
                                                Pkt.Time = RemotePos->Time;\r
 //                                             Pkt.Attr = 0;\r
                                                Pkt.KanjiCode = AskHostKanjiCode();\r
+                                               // UTF-8\91Î\89\9e\r
                                                Pkt.KanjiCodeDesired = AskLocalKanjiCode();\r
                                                Pkt.KanaCnv = AskHostKanaCnv();\r
                                                Pkt.Mode = EXIST_OVW;\r
                                                Pkt.KanjiCodeDesired = AskLocalKanjiCode();\r
                                                Pkt.KanaCnv = AskHostKanaCnv();\r
                                                Pkt.Mode = EXIST_OVW;\r
@@ -947,6 +950,7 @@ void UpLoadListProc(int ChName, int All)
                                Pkt.Time = Pos->Time;\r
                                Pkt.Attr = AskUpLoadFileAttr(Pkt.RemoteFile);\r
                                Pkt.KanjiCode = AskHostKanjiCode();\r
                                Pkt.Time = Pos->Time;\r
                                Pkt.Attr = AskUpLoadFileAttr(Pkt.RemoteFile);\r
                                Pkt.KanjiCode = AskHostKanjiCode();\r
+                               // UTF-8\91Î\89\9e\r
                                Pkt.KanjiCodeDesired = AskLocalKanjiCode();\r
                                Pkt.KanaCnv = AskHostKanaCnv();\r
                                Pkt.Mode = CheckRemoteFile(&Pkt, RemoteList);\r
                                Pkt.KanjiCodeDesired = AskLocalKanjiCode();\r
                                Pkt.KanaCnv = AskHostKanaCnv();\r
                                Pkt.Mode = CheckRemoteFile(&Pkt, RemoteList);\r
@@ -1098,6 +1102,7 @@ void UpLoadDragProc(WPARAM wParam)
                                Pkt.Time = Pos->Time;\r
                                Pkt.Attr = AskUpLoadFileAttr(Pkt.RemoteFile);\r
                                Pkt.KanjiCode = AskHostKanjiCode();\r
                                Pkt.Time = Pos->Time;\r
                                Pkt.Attr = AskUpLoadFileAttr(Pkt.RemoteFile);\r
                                Pkt.KanjiCode = AskHostKanjiCode();\r
+                               // UTF-8\91Î\89\9e\r
                                Pkt.KanjiCodeDesired = AskLocalKanjiCode();\r
                                Pkt.KanaCnv = AskHostKanaCnv();\r
                                Pkt.Mode = CheckRemoteFile(&Pkt, RemoteList);\r
                                Pkt.KanjiCodeDesired = AskLocalKanjiCode();\r
                                Pkt.KanaCnv = AskHostKanaCnv();\r
                                Pkt.Mode = CheckRemoteFile(&Pkt, RemoteList);\r
@@ -1365,6 +1370,7 @@ void MirrorUploadProc(int Notify)
                                                Pkt.Time = LocalPos->Time;\r
                                                Pkt.Attr = AskUpLoadFileAttr(Pkt.RemoteFile);\r
                                                Pkt.KanjiCode = AskHostKanjiCode();\r
                                                Pkt.Time = LocalPos->Time;\r
                                                Pkt.Attr = AskUpLoadFileAttr(Pkt.RemoteFile);\r
                                                Pkt.KanjiCode = AskHostKanjiCode();\r
+                                               // UTF-8\91Î\89\9e\r
                                                Pkt.KanjiCodeDesired = AskLocalKanjiCode();\r
                                                Pkt.KanaCnv = AskHostKanaCnv();\r
                                                Pkt.Mode = EXIST_OVW;\r
                                                Pkt.KanjiCodeDesired = AskLocalKanjiCode();\r
                                                Pkt.KanaCnv = AskHostKanaCnv();\r
                                                Pkt.Mode = EXIST_OVW;\r
index cf28616..8aa9db2 100644 (file)
--- a/getput.c
+++ b/getput.c
@@ -57,7 +57,7 @@
 #define SOCKBUF_SIZE   (256 * 1024)\r
 /* End */\r
 \r
 #define SOCKBUF_SIZE   (256 * 1024)\r
 /* End */\r
 \r
-#ifdef DISABLE_NETWORK_BUFFERS\r
+#ifdef DISABLE_TRANSFER_NETWORK_BUFFERS\r
 #undef BUFSIZE\r
 #define BUFSIZE                        (64 * 1024)     // RWIN\92l\88È\89º\82Å\8f[\95ª\82È\91å\82«\82³\82ª\96]\82Ü\82µ\82¢\82Æ\8ev\82í\82ê\82é\81B\r
 #undef SET_BUFFER_SIZE\r
 #undef BUFSIZE\r
 #define BUFSIZE                        (64 * 1024)     // RWIN\92l\88È\89º\82Å\8f[\95ª\82È\91å\82«\82³\82ª\96]\82Ü\82µ\82¢\82Æ\8ev\82í\82ê\82é\81B\r
 #undef SET_BUFFER_SIZE\r
@@ -1017,7 +1017,17 @@ static int DownLoadNonPassive(TRANSPACKET *Pkt, int *CancelCheckWork)
 \r
                                if(data_socket != INVALID_SOCKET)\r
                                {\r
 \r
                                if(data_socket != INVALID_SOCKET)\r
                                {\r
-                                       iRetCode = DownLoadFile(Pkt, data_socket, CreateMode, CancelCheckWork);\r
+                                       // FTPS\91Î\89\9e\r
+//                                     iRetCode = DownLoadFile(Pkt, data_socket, CreateMode, CancelCheckWork);\r
+                                       if(AskCryptMode() == CRYPT_FTPES || AskCryptMode() == CRYPT_FTPIS)\r
+                                       {\r
+                                               if(AttachSSL(data_socket))\r
+                                                       iRetCode = DownLoadFile(Pkt, data_socket, CreateMode, CancelCheckWork);\r
+                                               else\r
+                                                       iRetCode = FTP_ERROR;\r
+                                       }\r
+                                       else\r
+                                               iRetCode = DownLoadFile(Pkt, data_socket, CreateMode, CancelCheckWork);\r
 //                                     data_socket = DoClose(data_socket);\r
                                }\r
                        }\r
 //                                     data_socket = DoClose(data_socket);\r
                                }\r
                        }\r
@@ -1070,6 +1080,8 @@ static int DownLoadPassive(TRANSPACKET *Pkt, int *CancelCheckWork)
                {\r
                        if((data_socket = connectsock(Adrs, Port, MSGJPN091, CancelCheckWork)) != INVALID_SOCKET)\r
                        {\r
                {\r
                        if((data_socket = connectsock(Adrs, Port, MSGJPN091, CancelCheckWork)) != INVALID_SOCKET)\r
                        {\r
+                               // \95Ï\90\94\82ª\96¢\8f\89\8aú\89»\82Ì\83o\83O\8fC\90³\r
+                               Flg = 1;\r
                                if(setsockopt(data_socket, IPPROTO_TCP, TCP_NODELAY, (LPSTR)&Flg, sizeof(Flg)) == SOCKET_ERROR)\r
                                        ReportWSError("setsockopt", WSAGetLastError());\r
 \r
                                if(setsockopt(data_socket, IPPROTO_TCP, TCP_NODELAY, (LPSTR)&Flg, sizeof(Flg)) == SOCKET_ERROR)\r
                                        ReportWSError("setsockopt", WSAGetLastError());\r
 \r
@@ -1079,7 +1091,17 @@ static int DownLoadPassive(TRANSPACKET *Pkt, int *CancelCheckWork)
                                        iRetCode = command(Pkt->ctrl_skt, Reply, CancelCheckWork, "%s", Buf);\r
                                        if(iRetCode/100 == FTP_PRELIM)\r
                                        {\r
                                        iRetCode = command(Pkt->ctrl_skt, Reply, CancelCheckWork, "%s", Buf);\r
                                        if(iRetCode/100 == FTP_PRELIM)\r
                                        {\r
-                                               iRetCode = DownLoadFile(Pkt, data_socket, CreateMode, CancelCheckWork);\r
+                                               // FTPS\91Î\89\9e\r
+//                                             iRetCode = DownLoadFile(Pkt, data_socket, CreateMode, CancelCheckWork);\r
+                                               if(AskCryptMode() == CRYPT_FTPES || AskCryptMode() == CRYPT_FTPIS)\r
+                                               {\r
+                                                       if(AttachSSL(data_socket))\r
+                                                               iRetCode = DownLoadFile(Pkt, data_socket, CreateMode, CancelCheckWork);\r
+                                                       else\r
+                                                               iRetCode = FTP_ERROR;\r
+                                               }\r
+                                               else\r
+                                                       iRetCode = DownLoadFile(Pkt, data_socket, CreateMode, CancelCheckWork);\r
 //                                             data_socket = DoClose(data_socket);\r
                                        }\r
                                        else\r
 //                                             data_socket = DoClose(data_socket);\r
                                        }\r
                                        else\r
@@ -1155,8 +1177,8 @@ static int DownLoadFile(TRANSPACKET *Pkt, SOCKET dSkt, int CreateMode, int *Canc
 /* End */\r
 #endif\r
 \r
 /* End */\r
 #endif\r
 \r
-#ifdef DISABLE_NETWORK_BUFFERS\r
-       // \94O\82Ì\82½\82ß\8eó\90M\83o\83b\83t\83@\82ð\96³\8cø\82É\82·\82é\81B\r
+       // \94O\82Ì\82½\82ß\8eó\90M\83o\83b\83t\83@\82ð\96³\8cø\82É\82·\82é\r
+#ifdef DISABLE_TRANSFER_NETWORK_BUFFERS\r
        int buf_size = 0;\r
        setsockopt(dSkt, SOL_SOCKET, SO_RCVBUF, (char *)&buf_size, sizeof(buf_size));\r
 #endif\r
        int buf_size = 0;\r
        setsockopt(dSkt, SOL_SOCKET, SO_RCVBUF, (char *)&buf_size, sizeof(buf_size));\r
 #endif\r
@@ -2002,7 +2024,17 @@ static int UpLoadNonPassive(TRANSPACKET *Pkt)
 \r
                        if(data_socket != INVALID_SOCKET)\r
                        {\r
 \r
                        if(data_socket != INVALID_SOCKET)\r
                        {\r
-                               iRetCode = UpLoadFile(Pkt, data_socket);\r
+                               // FTPS\91Î\89\9e\r
+//                             iRetCode = UpLoadFile(Pkt, data_socket);\r
+                               if(AskCryptMode() == CRYPT_FTPES || AskCryptMode() == CRYPT_FTPIS)\r
+                               {\r
+                                       if(AttachSSL(data_socket))\r
+                                               iRetCode = UpLoadFile(Pkt, data_socket);\r
+                                       else\r
+                                               iRetCode = FTP_ERROR;\r
+                               }\r
+                               else\r
+                                       iRetCode = UpLoadFile(Pkt, data_socket);\r
                                data_socket = DoClose(data_socket);\r
                        }\r
                }\r
                                data_socket = DoClose(data_socket);\r
                        }\r
                }\r
@@ -2052,6 +2084,8 @@ static int UpLoadPassive(TRANSPACKET *Pkt)
                {\r
                        if((data_socket = connectsock(Adrs, Port, MSGJPN109, &Canceled)) != INVALID_SOCKET)\r
                        {\r
                {\r
                        if((data_socket = connectsock(Adrs, Port, MSGJPN109, &Canceled)) != INVALID_SOCKET)\r
                        {\r
+                               // \95Ï\90\94\82ª\96¢\8f\89\8aú\89»\82Ì\83o\83O\8fC\90³\r
+                               Flg = 1;\r
                                if(setsockopt(data_socket, IPPROTO_TCP, TCP_NODELAY, (LPSTR)&Flg, sizeof(Flg)) == SOCKET_ERROR)\r
                                        ReportWSError("setsockopt", WSAGetLastError());\r
 \r
                                if(setsockopt(data_socket, IPPROTO_TCP, TCP_NODELAY, (LPSTR)&Flg, sizeof(Flg)) == SOCKET_ERROR)\r
                                        ReportWSError("setsockopt", WSAGetLastError());\r
 \r
@@ -2064,7 +2098,17 @@ static int UpLoadPassive(TRANSPACKET *Pkt)
                                iRetCode = command(Pkt->ctrl_skt, Reply, &Canceled, "%s", Buf);\r
                                if(iRetCode/100 == FTP_PRELIM)\r
                                {\r
                                iRetCode = command(Pkt->ctrl_skt, Reply, &Canceled, "%s", Buf);\r
                                if(iRetCode/100 == FTP_PRELIM)\r
                                {\r
-                                       iRetCode = UpLoadFile(Pkt, data_socket);\r
+                                       // FTPS\91Î\89\9e\r
+//                                     iRetCode = UpLoadFile(Pkt, data_socket);\r
+                                       if(AskCryptMode() == CRYPT_FTPES || AskCryptMode() == CRYPT_FTPIS)\r
+                                       {\r
+                                               if(AttachSSL(data_socket))\r
+                                                       iRetCode = UpLoadFile(Pkt, data_socket);\r
+                                               else\r
+                                                       iRetCode = FTP_ERROR;\r
+                                       }\r
+                                       else\r
+                                               iRetCode = UpLoadFile(Pkt, data_socket);\r
 \r
                                        data_socket = DoClose(data_socket);\r
                                }\r
 \r
                                        data_socket = DoClose(data_socket);\r
                                }\r
@@ -2140,8 +2184,8 @@ static int UpLoadFile(TRANSPACKET *Pkt, SOCKET dSkt)
 /* End */\r
 #endif\r
 \r
 /* End */\r
 #endif\r
 \r
-#ifdef DISABLE_NETWORK_BUFFERS\r
-       // \94O\82Ì\82½\82ß\91\97\90M\83o\83b\83t\83@\82ð\96³\8cø\82É\82·\82é\81B\r
+       // \94O\82Ì\82½\82ß\91\97\90M\83o\83b\83t\83@\82ð\96³\8cø\82É\82·\82é\r
+#ifdef DISABLE_TRANSFER_NETWORK_BUFFERS\r
        int buf_size = 0;\r
        setsockopt(dSkt, SOL_SOCKET, SO_SNDBUF, (char *)&buf_size, sizeof(buf_size));\r
 #endif\r
        int buf_size = 0;\r
        setsockopt(dSkt, SOL_SOCKET, SO_SNDBUF, (char *)&buf_size, sizeof(buf_size));\r
 #endif\r
@@ -3021,7 +3065,7 @@ static int IsSpecialDevice(char *Fname)
        int Sts;\r
 \r
        Sts = NO;\r
        int Sts;\r
 \r
        Sts = NO;\r
-       // \83o\83O\8fC\90³\r
+       // \94ä\8ar\82ª\95s\8a®\91S\82È\83o\83O\8fC\90³\r
 //     if((_stricmp(Fname, "CON") == 0) ||\r
 //        (_stricmp(Fname, "PRN") == 0) ||\r
 //        (_stricmp(Fname, "AUX") == 0) ||\r
 //     if((_stricmp(Fname, "CON") == 0) ||\r
 //        (_stricmp(Fname, "PRN") == 0) ||\r
 //        (_stricmp(Fname, "AUX") == 0) ||\r
index fe2ab64..91c3c74 100644 (file)
--- a/history.c
+++ b/history.c
@@ -223,6 +223,10 @@ static void CopyHostToHistory(HOSTDATA *Host, HISTORYDATA *New)
        New->DialupAlways = Host->DialupAlways;\r
        New->DialupNotify = Host->DialupNotify;\r
        strcpy(New->DialEntry, Host->DialEntry);\r
        New->DialupAlways = Host->DialupAlways;\r
        New->DialupNotify = Host->DialupNotify;\r
        strcpy(New->DialEntry, Host->DialEntry);\r
+       // \88Ã\8d\86\89»\92Ê\90M\91Î\89\9e\r
+       New->UseFTPES = Host->UseFTPES;\r
+       New->UseFTPIS = Host->UseFTPIS;\r
+       New->UseSFTP = Host->UseSFTP;\r
        return;\r
 }\r
 \r
        return;\r
 }\r
 \r
@@ -272,6 +276,10 @@ void CopyHistoryToHost(HISTORYDATA *Hist, HOSTDATA *Host)
        Host->DialupAlways = Hist->DialupAlways;\r
        Host->DialupNotify = Hist->DialupNotify;\r
        strcpy(Host->DialEntry, Hist->DialEntry);\r
        Host->DialupAlways = Hist->DialupAlways;\r
        Host->DialupNotify = Hist->DialupNotify;\r
        strcpy(Host->DialEntry, Hist->DialEntry);\r
+       // \88Ã\8d\86\89»\92Ê\90M\91Î\89\9e\r
+       Host->UseFTPES = Hist->UseFTPES;\r
+       Host->UseFTPIS = Hist->UseFTPIS;\r
+       Host->UseSFTP = Hist->UseSFTP;\r
        return;\r
 }\r
 \r
        return;\r
 }\r
 \r
index abecc33..4589389 100644 (file)
--- a/hostman.c
+++ b/hostman.c
@@ -63,6 +63,8 @@ static BOOL CALLBACK AdvSettingProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPA
 static BOOL CALLBACK CodeSettingProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);\r
 static BOOL CALLBACK DialupSettingProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);\r
 static BOOL CALLBACK Adv2SettingProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);\r
 static BOOL CALLBACK CodeSettingProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);\r
 static BOOL CALLBACK DialupSettingProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);\r
 static BOOL CALLBACK Adv2SettingProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);\r
+// \88Ã\8d\86\89»\92Ê\90M\91Î\89\9e\r
+static BOOL CALLBACK CryptSettingProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);\r
 \r
 /*===== \8aO\95\94\8eQ\8fÆ =====*/\r
 \r
 \r
 /*===== \8aO\95\94\8eQ\8fÆ =====*/\r
 \r
@@ -1015,6 +1017,10 @@ int CopyHostFromListInConnect(int Num, HOSTDATA *Set)
                Set->UseNLST_R = Pos->Set.UseNLST_R;\r
                Set->LastDir = Pos->Set.LastDir;\r
                Set->TimeZone = Pos->Set.TimeZone;\r
                Set->UseNLST_R = Pos->Set.UseNLST_R;\r
                Set->LastDir = Pos->Set.LastDir;\r
                Set->TimeZone = Pos->Set.TimeZone;\r
+               // \88Ã\8d\86\89»\92Ê\90M\91Î\89\9e\r
+               Set->UseFTPES = Pos->Set.UseFTPES;\r
+               Set->UseFTPIS = Pos->Set.UseFTPIS;\r
+               Set->UseSFTP = Pos->Set.UseSFTP;\r
                Sts = SUCCESS;\r
        }\r
        return(Sts);\r
                Sts = SUCCESS;\r
        }\r
        return(Sts);\r
@@ -1288,6 +1294,11 @@ void CopyDefaultHost(HOSTDATA *Set)
        Set->DialupAlways = NO;\r
        Set->DialupNotify = YES;\r
        strcpy(Set->DialEntry, "");\r
        Set->DialupAlways = NO;\r
        Set->DialupNotify = YES;\r
        strcpy(Set->DialEntry, "");\r
+       // \88Ã\8d\86\89»\92Ê\90M\91Î\89\9e\r
+       Set->CryptMode = CRYPT_NONE;\r
+       Set->UseFTPES = YES;\r
+       Set->UseFTPIS = YES;\r
+       Set->UseSFTP = YES;\r
        return;\r
 }\r
 \r
        return;\r
 }\r
 \r
@@ -1499,7 +1510,9 @@ void ImportFromWSFTP(void)
 \r
 static int DispHostSetDlg(HWND hDlg)\r
 {\r
 \r
 static int DispHostSetDlg(HWND hDlg)\r
 {\r
-       PROPSHEETPAGE psp[5];\r
+// SFTP\81AFTPES\81AFTPIS\91Î\89\9e\r
+//     PROPSHEETPAGE psp[5];\r
+       PROPSHEETPAGE psp[6];\r
        PROPSHEETHEADER psh;\r
 \r
        psp[0].dwSize = sizeof(PROPSHEETPAGE);\r
        PROPSHEETHEADER psh;\r
 \r
        psp[0].dwSize = sizeof(PROPSHEETPAGE);\r
@@ -1552,6 +1565,17 @@ static int DispHostSetDlg(HWND hDlg)
        psp[4].lParam = 0;\r
        psp[4].pfnCallback = NULL;\r
 \r
        psp[4].lParam = 0;\r
        psp[4].pfnCallback = NULL;\r
 \r
+// SFTP\81AFTPES\81AFTPIS\91Î\89\9e\r
+       psp[5].dwSize = sizeof(PROPSHEETPAGE);\r
+       psp[5].dwFlags = PSP_USETITLE | PSP_HASHELP;\r
+       psp[5].hInstance = GetFtpInst();\r
+       psp[5].pszTemplate = MAKEINTRESOURCE(hset_crypt_dlg);\r
+       psp[5].pszIcon = NULL;\r
+       psp[5].pfnDlgProc = CryptSettingProc;\r
+       psp[5].pszTitle = MSGJPN313;\r
+       psp[5].lParam = 0;\r
+       psp[5].pfnCallback = NULL;\r
+\r
        psh.dwSize = sizeof(PROPSHEETHEADER);\r
        psh.dwFlags = PSH_HASHELP | PSH_NOAPPLYNOW | PSH_PROPSHEETPAGE;\r
        psh.hwndParent = hDlg;\r
        psh.dwSize = sizeof(PROPSHEETHEADER);\r
        psh.dwFlags = PSH_HASHELP | PSH_NOAPPLYNOW | PSH_PROPSHEETPAGE;\r
        psh.hwndParent = hDlg;\r
@@ -1851,11 +1875,11 @@ static BOOL CALLBACK CodeSettingProc(HWND hDlg, UINT iMessage, WPARAM wParam, LP
 \r
                                // UTF-8\91Î\89\9e\r
                                case HSET_NO_CNV :\r
 \r
                                // UTF-8\91Î\89\9e\r
                                case HSET_NO_CNV :\r
-                               case HSET_SJIS_CNV :\r
                                case HSET_UTF8N_CNV :\r
                                        EnableWindow(GetDlgItem(hDlg, HSET_HANCNV), FALSE);\r
                                        break;\r
 \r
                                case HSET_UTF8N_CNV :\r
                                        EnableWindow(GetDlgItem(hDlg, HSET_HANCNV), FALSE);\r
                                        break;\r
 \r
+                               case HSET_SJIS_CNV :\r
                                case HSET_FN_JIS_CNV :\r
                                case HSET_FN_EUC_CNV :\r
                                        EnableWindow(GetDlgItem(hDlg, HSET_FN_HANCNV), TRUE);\r
                                case HSET_FN_JIS_CNV :\r
                                case HSET_FN_EUC_CNV :\r
                                        EnableWindow(GetDlgItem(hDlg, HSET_FN_HANCNV), TRUE);\r
@@ -2071,3 +2095,65 @@ static BOOL CALLBACK Adv2SettingProc(HWND hDlg, UINT iMessage, WPARAM wParam, LP
 }\r
 \r
 \r
 }\r
 \r
 \r
+// \88Ã\8d\86\89»\92Ê\90M\91Î\89\9e\r
+static BOOL CALLBACK CryptSettingProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)\r
+{\r
+       NMHDR *pnmhdr;\r
+       int Num;\r
+\r
+       switch (iMessage)\r
+       {\r
+               case WM_INITDIALOG :\r
+                       if(IsOpenSSLLoaded())\r
+                       {\r
+                               SendDlgItemMessage(hDlg, HSET_FTPES, BM_SETCHECK, TmpHost.UseFTPES, 0);\r
+                               SendDlgItemMessage(hDlg, HSET_FTPIS, BM_SETCHECK, TmpHost.UseFTPIS, 0);\r
+                               SendDlgItemMessage(hDlg, HSET_SFTP, BM_SETCHECK, TmpHost.UseSFTP, 0);\r
+                       }\r
+                       else\r
+                       {\r
+                               SendDlgItemMessage(hDlg, HSET_FTPES, BM_SETCHECK, BST_UNCHECKED, 0);\r
+                               EnableWindow(GetDlgItem(hDlg, HSET_FTPES), FALSE);\r
+                               SendDlgItemMessage(hDlg, HSET_FTPIS, BM_SETCHECK, BST_UNCHECKED, 0);\r
+                               EnableWindow(GetDlgItem(hDlg, HSET_FTPIS), FALSE);\r
+                               SendDlgItemMessage(hDlg, HSET_SFTP, BM_SETCHECK, BST_UNCHECKED, 0);\r
+                               EnableWindow(GetDlgItem(hDlg, HSET_SFTP), FALSE);\r
+                       }\r
+                       // TODO: FTPIS\91Î\89\9e\r
+                       SendDlgItemMessage(hDlg, HSET_FTPIS, BM_SETCHECK, BST_UNCHECKED, 0);\r
+                       EnableWindow(GetDlgItem(hDlg, HSET_FTPIS), FALSE);\r
+                       // TODO: SFTP\91Î\89\9e\r
+                       SendDlgItemMessage(hDlg, HSET_SFTP, BM_SETCHECK, BST_UNCHECKED, 0);\r
+                       EnableWindow(GetDlgItem(hDlg, HSET_SFTP), FALSE);\r
+                       return(TRUE);\r
+\r
+               case WM_NOTIFY:\r
+                       pnmhdr = (NMHDR FAR *)lParam;\r
+                       switch(pnmhdr->code)\r
+                       {\r
+                               case PSN_APPLY :\r
+                                       if(IsOpenSSLLoaded())\r
+                                       {\r
+                                               TmpHost.UseFTPES = SendDlgItemMessage(hDlg, HSET_FTPES, BM_GETCHECK, 0, 0);\r
+                                               // TODO: FTPIS\91Î\89\9e\r
+//                                             TmpHost.UseFTPIS = SendDlgItemMessage(hDlg, HSET_FTPIS, BM_GETCHECK, 0, 0);\r
+                                               // TODO: SFTP\91Î\89\9e\r
+//                                             TmpHost.UseSFTP = SendDlgItemMessage(hDlg, HSET_SFTP, BM_GETCHECK, 0, 0);\r
+                                       }\r
+                                       Apply = YES;\r
+                                       break;\r
+\r
+                               case PSN_RESET :\r
+                                       break;\r
+\r
+                               case PSN_HELP :\r
+                                       // TODO: \83w\83\8b\83v\83g\83s\83b\83N\r
+//                                     hHelpWin = HtmlHelp(NULL, AskHelpFilePath(), HH_HELP_CONTEXT, IDH_HELP_TOPIC_0000032);\r
+                                       break;\r
+                       }\r
+                       break;\r
+       }\r
+       return(FALSE);\r
+}\r
+\r
+\r
diff --git a/main.c b/main.c
index 8aebef3..8432896 100644 (file)
--- a/main.c
+++ b/main.c
@@ -236,6 +236,10 @@ int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLi
 \r
        InitCommonControls();\r
 \r
 \r
        InitCommonControls();\r
 \r
+#ifdef USE_OPENSSL\r
+       LoadOpenSSL();\r
+#endif\r
+\r
        Ret = FALSE;\r
        hWndFtp = NULL;\r
        hInstFtp = hInstance;\r
        Ret = FALSE;\r
        hWndFtp = NULL;\r
        hInstFtp = hInstance;\r
@@ -265,6 +269,9 @@ int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLi
                Ret = Msg.wParam;\r
        }\r
     UnregisterClass(FtpClassStr, hInstFtp);\r
                Ret = Msg.wParam;\r
        }\r
     UnregisterClass(FtpClassStr, hInstFtp);\r
+#ifdef USE_OPENSSL\r
+       FreeOpenSSL();\r
+#endif\r
        OleUninitialize();\r
        return(Ret);\r
 }\r
        OleUninitialize();\r
        return(Ret);\r
 }\r
@@ -375,6 +382,9 @@ static int InitApp(LPSTR lpszCmdLine, int cmdShow)
                {\r
                        LoadRegistory();\r
 \r
                {\r
                        LoadRegistory();\r
 \r
+                       // \88Ã\8d\86\89»\92Ê\90M\91Î\89\9e\r
+                       SetSSLTimeoutCallback(TimeOut * 1000, SSLTimeoutCallback);\r
+\r
                        LoadJre();\r
                        if(NoRasControl == NO)\r
                                LoadRasLib();\r
                        LoadJre();\r
                        if(NoRasControl == NO)\r
                                LoadRasLib();\r
@@ -458,6 +468,14 @@ static int InitApp(LPSTR lpszCmdLine, int cmdShow)
                }\r
        }\r
 \r
                }\r
        }\r
 \r
+       // \88Ã\8d\86\89»\92Ê\90M\91Î\89\9e\r
+#ifdef USE_OPENSSL\r
+       if(IsOpenSSLLoaded())\r
+               SetTaskMsg(MSGJPN318);\r
+       else\r
+               SetTaskMsg(MSGJPN319);\r
+#endif\r
+\r
        if(sts == FAIL)\r
                DeleteAllObject();\r
 \r
        if(sts == FAIL)\r
                DeleteAllObject();\r
 \r
@@ -969,6 +987,8 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA
                                        DispTransferType();\r
                                        CheckHistoryNum(0);\r
                                        SetAllHistoryToMenu();\r
                                        DispTransferType();\r
                                        CheckHistoryNum(0);\r
                                        SetAllHistoryToMenu();\r
+                                       // \88Ã\8d\86\89»\92Ê\90M\91Î\89\9e\r
+                                       SetSSLTimeoutCallback(TimeOut * 1000, SSLTimeoutCallback);\r
                                        break;\r
 \r
                                case MENU_FILTER :\r
                                        break;\r
 \r
                                case MENU_FILTER :\r
@@ -2577,6 +2597,7 @@ int BackgrndMessageProc(void)
        int Ret;\r
 \r
        Ret = NO;\r
        int Ret;\r
 \r
        Ret = NO;\r
+       SendMessage(GetMainHwnd(), WM_NULL, 0, 0);\r
        while(PeekMessage(&Msg, NULL, 0, 0, PM_REMOVE))\r
        {\r
                if(!HtmlHelp(NULL, NULL, HH_PRETRANSLATEMESSAGE, (DWORD)&Msg))\r
        while(PeekMessage(&Msg, NULL, 0, 0, PM_REMOVE))\r
        {\r
                if(!HtmlHelp(NULL, NULL, HH_PRETRANSLATEMESSAGE, (DWORD)&Msg))\r
@@ -2669,3 +2690,19 @@ int EnterMasterPasswordAndSet( int Res, HWND hWnd )
        }\r
        return 0;\r
 }\r
        }\r
        return 0;\r
 }\r
+\r
+// \88Ã\8d\86\89»\92Ê\90M\91Î\89\9e\r
+BOOL __stdcall SSLTimeoutCallback()\r
+{\r
+       Sleep(1);\r
+       if(BackgrndMessageProc() == YES)\r
+               return TRUE;\r
+       // \94O\82Ì\82½\82ß\83c\81[\83\8b\83o\81[\82ÌMENU_ABORT\82à\8am\94F\r
+//     if(MainTransPkt.Abort != ABORT_NONE)\r
+//     {\r
+//             MainTransPkt.Abort = ABORT_NONE;\r
+//             return TRUE;\r
+//     }\r
+       return FALSE;\r
+}\r
+\r
index 8cb6257..fc4841a 100644 (file)
@@ -414,6 +414,20 @@ START_ROUTINE
                                pw0 = DuplicateMtoW((LPCSTR)lParam, -1);
                                r = SendMessageW(hWnd, CB_ADDSTRING, wParam, (LPARAM)pw0);
                                break;
                                pw0 = DuplicateMtoW((LPCSTR)lParam, -1);
                                r = SendMessageW(hWnd, CB_ADDSTRING, wParam, (LPARAM)pw0);
                                break;
+                       case CB_GETLBTEXT:
+                               Size = SendMessageW(hWnd, CB_GETLBTEXTLEN, wParam, 0) + 1;
+                               pw0 = AllocateStringW(Size);
+                               SendMessageW(hWnd, CB_GETLBTEXT, wParam, (LPARAM)pw0);
+                               // \83o\83b\83t\83@\92·\95s\96¾\82Ì\82½\82ß\83I\81[\83o\81[\83\89\83\93\82Ì\89Â\94\\90«\82 \82è
+                               WtoM((LPSTR)lParam, Size * 4, pw0, -1);
+                               r = TerminateStringM((LPSTR)lParam, Size * 4);
+                               break;
+                       case CB_GETLBTEXTLEN:
+                               Size = SendMessageW(hWnd, CB_GETLBTEXTLEN, wParam, 0) + 1;
+                               pw0 = AllocateStringW(Size);
+                               SendMessageW(hWnd, WM_GETTEXT, wParam, (LPARAM)pw0);
+                               r = WtoM(NULL, 0, pw0, -1) - 1;
+                               break;
                        case CB_INSERTSTRING:
                                pw0 = DuplicateMtoW((LPCSTR)lParam, -1);
                                r = SendMessageW(hWnd, CB_INSERTSTRING, wParam, (LPARAM)pw0);
                        case CB_INSERTSTRING:
                                pw0 = DuplicateMtoW((LPCSTR)lParam, -1);
                                r = SendMessageW(hWnd, CB_INSERTSTRING, wParam, (LPARAM)pw0);
@@ -441,12 +455,18 @@ START_ROUTINE
                                break;
                        case LB_GETTEXT:
                                Size = SendMessageW(hWnd, LB_GETTEXTLEN, wParam, 0) + 1;
                                break;
                        case LB_GETTEXT:
                                Size = SendMessageW(hWnd, LB_GETTEXTLEN, wParam, 0) + 1;
-                               pw0 = AllocateStringW(Size * 4);
+                               pw0 = AllocateStringW(Size);
                                SendMessageW(hWnd, LB_GETTEXT, wParam, (LPARAM)pw0);
                                // \83o\83b\83t\83@\92·\95s\96¾\82Ì\82½\82ß\83I\81[\83o\81[\83\89\83\93\82Ì\89Â\94\\90«\82 \82è
                                WtoM((LPSTR)lParam, Size * 4, pw0, -1);
                                r = TerminateStringM((LPSTR)lParam, Size * 4);
                                break;
                                SendMessageW(hWnd, LB_GETTEXT, wParam, (LPARAM)pw0);
                                // \83o\83b\83t\83@\92·\95s\96¾\82Ì\82½\82ß\83I\81[\83o\81[\83\89\83\93\82Ì\89Â\94\\90«\82 \82è
                                WtoM((LPSTR)lParam, Size * 4, pw0, -1);
                                r = TerminateStringM((LPSTR)lParam, Size * 4);
                                break;
+                       case LB_GETTEXTLEN:
+                               Size = SendMessageW(hWnd, LB_GETTEXTLEN, wParam, 0) + 1;
+                               pw0 = AllocateStringW(Size);
+                               SendMessageW(hWnd, WM_GETTEXT, wParam, (LPARAM)pw0);
+                               r = WtoM(NULL, 0, pw0, -1) - 1;
+                               break;
                        default:
                                r = SendMessageW(hWnd, Msg, wParam, lParam);
                                break;
                        default:
                                r = SendMessageW(hWnd, Msg, wParam, lParam);
                                break;
@@ -1343,8 +1363,3 @@ END_ROUTINE
        return r;
 }
 
        return r;
 }
 
-
-
-
-
-
index 554aa2b..f3fa824 100644 (file)
 #define MSGJPN310              "EUC Kanji Code (Local)"\r
 #define MSGJPN311              "JIS Kanji Code (Local)"\r
 #define MSGJPN312              "UTF-8N Kanji Code (Local)"\r
 #define MSGJPN310              "EUC Kanji Code (Local)"\r
 #define MSGJPN311              "JIS Kanji Code (Local)"\r
 #define MSGJPN312              "UTF-8N Kanji Code (Local)"\r
+#define MSGJPN313              "Encryption"\r
+#define MSGJPN314              "Communication is not encrypted.\r\nPassword and other data may be intercepted by a third party."\r
+#define MSGJPN315              "Using FTP over Explicit SSL/TLS (FTPES)."\r
+#define MSGJPN316              "Using FTP over Inplicit SSL/TLS (FTPIS)."\r
+#define MSGJPN317              "Using SSH FTP (SFTP)."\r
+#define MSGJPN318              "OpenSSL is loaded."\r
+#define MSGJPN319              "OpenSSL is not installed.\r\nCommunication will not be encrypted."\r
index ce44780..7ca33c0 100644 (file)
 #define MSGJPN310              "EUC Kanji Code (Local)"
 #define MSGJPN311              "JIS Kanji Code (Local)"
 #define MSGJPN312              "UTF-8N Kanji Code (Local)"
 #define MSGJPN310              "EUC Kanji Code (Local)"
 #define MSGJPN311              "JIS Kanji Code (Local)"
 #define MSGJPN312              "UTF-8N Kanji Code (Local)"
+#define MSGJPN313              "Encryption"
+#define MSGJPN314              "Communication is not encrypted.\r\nPassword and other data may be intercepted by a third party."
+#define MSGJPN315              "Using FTP over Explicit SSL/TLS (FTPES)."
+#define MSGJPN316              "Using FTP over Inplicit SSL/TLS (FTPIS)."
+#define MSGJPN317              "Using SSH FTP (SFTP)."
+#define MSGJPN318              "OpenSSL is loaded."
+#define MSGJPN319              "OpenSSL is not installed.\r\nCommunication will not be encrypted."
index 395d8dd..df2baa4 100644 (file)
 #define MSGJPN310              "\xE3\x83\xAD\xE3\x83\xBC\xE3\x82\xAB\xE3\x83\xAB\xE3\x81\xAE\xE6\xBC\xA2\xE5\xAD\x97\xE3\x82\xB3\xE3\x83\xBC\xE3\x83\x89\xE3\x81\xAF\x45UC"\r
 #define MSGJPN311              "\xE3\x83\xAD\xE3\x83\xBC\xE3\x82\xAB\xE3\x83\xAB\xE3\x81\xAE\xE6\xBC\xA2\xE5\xAD\x97\xE3\x82\xB3\xE3\x83\xBC\xE3\x83\x89\xE3\x81\xAFJIS"\r
 #define MSGJPN312              "\xE3\x83\xAD\xE3\x83\xBC\xE3\x82\xAB\xE3\x83\xAB\xE3\x81\xAE\xE6\xBC\xA2\xE5\xAD\x97\xE3\x82\xB3\xE3\x83\xBC\xE3\x83\x89\xE3\x81\xAFUTF-8N"\r
 #define MSGJPN310              "\xE3\x83\xAD\xE3\x83\xBC\xE3\x82\xAB\xE3\x83\xAB\xE3\x81\xAE\xE6\xBC\xA2\xE5\xAD\x97\xE3\x82\xB3\xE3\x83\xBC\xE3\x83\x89\xE3\x81\xAF\x45UC"\r
 #define MSGJPN311              "\xE3\x83\xAD\xE3\x83\xBC\xE3\x82\xAB\xE3\x83\xAB\xE3\x81\xAE\xE6\xBC\xA2\xE5\xAD\x97\xE3\x82\xB3\xE3\x83\xBC\xE3\x83\x89\xE3\x81\xAFJIS"\r
 #define MSGJPN312              "\xE3\x83\xAD\xE3\x83\xBC\xE3\x82\xAB\xE3\x83\xAB\xE3\x81\xAE\xE6\xBC\xA2\xE5\xAD\x97\xE3\x82\xB3\xE3\x83\xBC\xE3\x83\x89\xE3\x81\xAFUTF-8N"\r
+#define MSGJPN313              "\xE6\x9A\x97\xE5\x8F\xB7\xE5\x8C\x96"\r
+#define MSGJPN314              "\xE9\x80\x9A\xE4\xBF\xA1\xE3\x81\xAF\xE6\x9A\x97\xE5\x8F\xB7\xE5\x8C\x96\xE3\x81\x95\xE3\x82\x8C\xE3\x81\xA6\xE3\x81\x84\xE3\x81\xBE\xE3\x81\x9B\xE3\x82\x93.\r\n\xE7\xAC\xAC\xE4\xB8\x89\xE8\x80\x85\xE3\x81\xAB\xE3\x83\x91\xE3\x82\xB9\xE3\x83\xAF\xE3\x83\xBC\xE3\x83\x89\xE3\x81\x8A\xE3\x82\x88\xE3\x81\xB3\xE5\x86\x85\xE5\xAE\xB9\xE3\x82\x92\xE5\x82\x8D\xE5\x8F\x97\xE3\x81\x95\xE3\x82\x8C\xE3\x82\x8B\xE5\x8F\xAF\xE8\x83\xBD\xE6\x80\xA7\xE3\x81\x8C\xE3\x81\x82\xE3\x82\x8A\xE3\x81\xBE\xE3\x81\x99."\r
+#define MSGJPN315              "FTP over Explicit SSL/TLS (FTPES)\xE3\x82\x92\xE4\xBD\xBF\xE7\x94\xA8\xE3\x81\x97\xE3\x81\xBE\xE3\x81\x99."\r
+#define MSGJPN316              "FTP over Inplicit SSL/TLS (FTPIS)\xE3\x82\x92\xE4\xBD\xBF\xE7\x94\xA8\xE3\x81\x97\xE3\x81\xBE\xE3\x81\x99."\r
+#define MSGJPN317              "SSH FTP (SFTP)\xE3\x82\x92\xE4\xBD\xBF\xE7\x94\xA8\xE3\x81\x97\xE3\x81\xBE\xE3\x81\x99."\r
+#define MSGJPN318              "OpenSSL\xE3\x81\x8C\xE8\xAA\xAD\xE3\x81\xBF\xE8\xBE\xBC\xE3\x81\xBE\xE3\x82\x8C\xE3\x81\xBE\xE3\x81\x97\xE3\x81\x9F."\r
+#define MSGJPN319              "OpenSSL\xE3\x81\x8C\xE3\x82\xA4\xE3\x83\xB3\xE3\x82\xB9\xE3\x83\x88\xE3\x83\xBC\xE3\x83\xAB\xE3\x81\x95\xE3\x82\x8C\xE3\x81\xA6\xE3\x81\x84\xE3\x81\xBE\xE3\x81\x9B\xE3\x82\x93.\r\n\xE9\x80\x9A\xE4\xBF\xA1\xE3\x81\xAE\xE6\x9A\x97\xE5\x8F\xB7\xE5\x8C\x96\xE3\x81\xAF\xE8\xA1\x8C\xE3\x82\x8F\xE3\x82\x8C\xE3\x81\xBE\xE3\x81\x9B\xE3\x82\x93."\r
index 1677022..159c38e 100644 (file)
 #define MSGJPN310              "\83\8d\81[\83J\83\8b\82Ì\8a¿\8e\9a\83R\81[\83h\82ÍEUC"
 #define MSGJPN311              "\83\8d\81[\83J\83\8b\82Ì\8a¿\8e\9a\83R\81[\83h\82ÍJIS"
 #define MSGJPN312              "\83\8d\81[\83J\83\8b\82Ì\8a¿\8e\9a\83R\81[\83h\82ÍUTF-8N"
 #define MSGJPN310              "\83\8d\81[\83J\83\8b\82Ì\8a¿\8e\9a\83R\81[\83h\82ÍEUC"
 #define MSGJPN311              "\83\8d\81[\83J\83\8b\82Ì\8a¿\8e\9a\83R\81[\83h\82ÍJIS"
 #define MSGJPN312              "\83\8d\81[\83J\83\8b\82Ì\8a¿\8e\9a\83R\81[\83h\82ÍUTF-8N"
+#define MSGJPN313              "\88Ã\8d\86\89»"
+#define MSGJPN314              "\92Ê\90M\82Í\88Ã\8d\86\89»\82³\82ê\82Ä\82¢\82Ü\82¹\82ñ.\r\n\91æ\8eO\8eÒ\82É\83p\83X\83\8f\81[\83h\82¨\82æ\82Ñ\93à\97e\82ð\96T\8eó\82³\82ê\82é\89Â\94\\90«\82ª\82 \82è\82Ü\82·."
+#define MSGJPN315              "FTP over Explicit SSL/TLS (FTPES)\82ð\8eg\97p\82µ\82Ü\82·."
+#define MSGJPN316              "FTP over Inplicit SSL/TLS (FTPIS)\82ð\8eg\97p\82µ\82Ü\82·."
+#define MSGJPN317              "SSH FTP (SFTP)\82ð\8eg\97p\82µ\82Ü\82·."
+#define MSGJPN318              "OpenSSL\82ª\93Ç\82Ý\8d\9e\82Ü\82ê\82Ü\82µ\82½."
+#define MSGJPN319              "OpenSSL\82ª\83C\83\93\83X\83g\81[\83\8b\82³\82ê\82Ä\82¢\82Ü\82¹\82ñ.\r\n\92Ê\90M\82Ì\88Ã\8d\86\89»\82Í\8ds\82í\82ê\82Ü\82¹\82ñ."
index d36c574..70fc3ce 100644 (file)
@@ -462,6 +462,10 @@ void SaveRegistory(void)
                                                        SaveIntNum(hKey5, "UseIt", Hist.DialupAlways, DefaultHist.DialupAlways);\r
                                                        SaveIntNum(hKey5, "Notify", Hist.DialupNotify, DefaultHist.DialupNotify);\r
                                                        SaveStr(hKey5, "DialTo", Hist.DialEntry, DefaultHist.DialEntry);\r
                                                        SaveIntNum(hKey5, "UseIt", Hist.DialupAlways, DefaultHist.DialupAlways);\r
                                                        SaveIntNum(hKey5, "Notify", Hist.DialupNotify, DefaultHist.DialupNotify);\r
                                                        SaveStr(hKey5, "DialTo", Hist.DialEntry, DefaultHist.DialEntry);\r
+                                                       // \88Ã\8d\86\89»\92Ê\90M\91Î\89\9e\r
+                                                       SaveIntNum(hKey5, "FTPES", Hist.UseFTPES, DefaultHist.UseFTPES);\r
+                                                       SaveIntNum(hKey5, "FTPIS", Hist.UseFTPIS, DefaultHist.UseFTPIS);\r
+                                                       SaveIntNum(hKey5, "SFTP", Hist.UseSFTP, DefaultHist.UseSFTP);\r
 \r
                                                        CloseSubKey(hKey5);\r
                                                        n++;\r
 \r
                                                        CloseSubKey(hKey5);\r
                                                        n++;\r
@@ -530,6 +534,10 @@ void SaveRegistory(void)
                                                        SaveIntNum(hKey5, "UseIt", Host.DialupAlways, DefaultHost.DialupAlways);\r
                                                        SaveIntNum(hKey5, "Notify", Host.DialupNotify, DefaultHost.DialupNotify);\r
                                                        SaveStr(hKey5, "DialTo", Host.DialEntry, DefaultHost.DialEntry);\r
                                                        SaveIntNum(hKey5, "UseIt", Host.DialupAlways, DefaultHost.DialupAlways);\r
                                                        SaveIntNum(hKey5, "Notify", Host.DialupNotify, DefaultHost.DialupNotify);\r
                                                        SaveStr(hKey5, "DialTo", Host.DialEntry, DefaultHost.DialEntry);\r
+                                                       // \88Ã\8d\86\89»\92Ê\90M\91Î\89\9e\r
+                                                       SaveIntNum(hKey5, "FTPES", Host.UseFTPES, DefaultHost.UseFTPES);\r
+                                                       SaveIntNum(hKey5, "FTPIS", Host.UseFTPIS, DefaultHost.UseFTPIS);\r
+                                                       SaveIntNum(hKey5, "SFTP", Host.UseSFTP, DefaultHost.UseSFTP);\r
                                                }\r
                                                CloseSubKey(hKey5);\r
                                        }\r
                                                }\r
                                                CloseSubKey(hKey5);\r
                                        }\r
@@ -780,6 +788,10 @@ int LoadRegistory(void)
                                        ReadIntValueFromReg(hKey5, "UseIt", &Hist.DialupAlways);\r
                                        ReadIntValueFromReg(hKey5, "Notify", &Hist.DialupNotify);\r
                                        ReadStringFromReg(hKey5, "DialTo", Hist.DialEntry, RAS_NAME_LEN+1);\r
                                        ReadIntValueFromReg(hKey5, "UseIt", &Hist.DialupAlways);\r
                                        ReadIntValueFromReg(hKey5, "Notify", &Hist.DialupNotify);\r
                                        ReadStringFromReg(hKey5, "DialTo", Hist.DialEntry, RAS_NAME_LEN+1);\r
+                                       // \88Ã\8d\86\89»\92Ê\90M\91Î\89\9e\r
+                                       ReadIntValueFromReg(hKey5, "FTPES", &Hist.UseFTPES);\r
+                                       ReadIntValueFromReg(hKey5, "FTPIS", &Hist.UseFTPIS);\r
+                                       ReadIntValueFromReg(hKey5, "SFTP", &Hist.UseSFTP);\r
 \r
                                        CloseSubKey(hKey5);\r
                                        AddHistoryToHistory(&Hist);\r
 \r
                                        CloseSubKey(hKey5);\r
                                        AddHistoryToHistory(&Hist);\r
@@ -845,6 +857,10 @@ int LoadRegistory(void)
                                        ReadIntValueFromReg(hKey5, "UseIt", &Host.DialupAlways);\r
                                        ReadIntValueFromReg(hKey5, "Notify", &Host.DialupNotify);\r
                                        ReadStringFromReg(hKey5, "DialTo", Host.DialEntry, RAS_NAME_LEN+1);\r
                                        ReadIntValueFromReg(hKey5, "UseIt", &Host.DialupAlways);\r
                                        ReadIntValueFromReg(hKey5, "Notify", &Host.DialupNotify);\r
                                        ReadStringFromReg(hKey5, "DialTo", Host.DialEntry, RAS_NAME_LEN+1);\r
+                                       // \88Ã\8d\86\89»\92Ê\90M\91Î\89\9e\r
+                                       ReadIntValueFromReg(hKey5, "FTPES", &Host.UseFTPES);\r
+                                       ReadIntValueFromReg(hKey5, "FTPIS", &Host.UseFTPIS);\r
+                                       ReadIntValueFromReg(hKey5, "SFTP", &Host.UseSFTP);\r
 \r
                                        CloseSubKey(hKey5);\r
 \r
 \r
                                        CloseSubKey(hKey5);\r
 \r
index 46cf59a..2244517 100644 (file)
--- a/remote.c
+++ b/remote.c
@@ -1025,7 +1025,15 @@ static int ReadOneLine(SOCKET cSkt, char *Buf, int Max, int *CancelCheckWork)
                        memset(Buf, 0, Max);\r
 \r
                        if((SizeOnce == -2) || (AskTransferNow() == YES))\r
                        memset(Buf, 0, Max);\r
 \r
                        if((SizeOnce == -2) || (AskTransferNow() == YES))\r
-                               DisconnectSet();\r
+                       // \93]\91\97\92\86\82É\91S\82Ä\92\86\8e~\82ð\8ds\82¤\82Æ\95s\90³\82È\83f\81[\83^\82ª\93¾\82ç\82ê\82é\8fê\8d\87\82Ì\83o\83O\8fC\90³\r
+                       // \83G\83\89\81[\82Ì\8eí\97Þ\82É\82æ\82Á\82Ä\82Í\96³\8cÀ\83\8b\81[\83v\82Æ\83X\83^\83b\83N\83I\81[\83o\81[\83t\83\8d\81[\82Ì\89Â\94\\90«\82 \82è\r
+//                             DisconnectSet();\r
+                       {\r
+                               if(SizeOnce == -1)\r
+                                       ReConnectCmdSkt();\r
+                               else\r
+                                       DisconnectSet();\r
+                       }\r
                }\r
                else\r
                {\r
                }\r
                else\r
                {\r
index 7ec5b1c..b823c40 100644 (file)
--- a/socket.c
+++ b/socket.c
@@ -73,8 +73,11 @@ typedef struct {
 } ASYNCSIGNALDATABASE;\r
 \r
 \r
 } ASYNCSIGNALDATABASE;\r
 \r
 \r
-#define MAX_SIGNAL_ENTRY               10\r
-#define MAX_SIGNAL_ENTRY_DBASE 5\r
+// \83X\83\8c\83b\83h\8fÕ\93Ë\82Ì\83o\83O\8fC\90³\r
+//#define MAX_SIGNAL_ENTRY             10\r
+//#define MAX_SIGNAL_ENTRY_DBASE       5\r
+#define MAX_SIGNAL_ENTRY               100\r
+#define MAX_SIGNAL_ENTRY_DBASE 50\r
 \r
 \r
 \r
 \r
 \r
 \r
@@ -104,6 +107,8 @@ static ASYNCSIGNAL Signal[MAX_SIGNAL_ENTRY];
 static ASYNCSIGNALDATABASE SignalDbase[MAX_SIGNAL_ENTRY_DBASE];\r
 \r
 //static HANDLE hAsyncTblAccMutex;\r
 static ASYNCSIGNALDATABASE SignalDbase[MAX_SIGNAL_ENTRY_DBASE];\r
 \r
 //static HANDLE hAsyncTblAccMutex;\r
+// \83X\83\8c\83b\83h\8fÕ\93Ë\82Ì\83o\83O\8fC\90³\r
+static HANDLE hAsyncTblAccMutex;\r
 \r
 \r
 \r
 \r
 \r
 \r
@@ -148,10 +153,18 @@ int MakeSocketWin(HWND hWnd, HINSTANCE hInst)
        {\r
 //             hAsyncTblAccMutex = CreateMutex(NULL, FALSE, NULL);\r
 \r
        {\r
 //             hAsyncTblAccMutex = CreateMutex(NULL, FALSE, NULL);\r
 \r
-               for(i = 0; i < MAX_SIGNAL_ENTRY; i++)\r
-                       Signal[i].Socket = INVALID_SOCKET;\r
-               for(i = 0; i < MAX_SIGNAL_ENTRY_DBASE; i++)\r
-                       SignalDbase[i].Async = 0;\r
+               // \83X\83\8c\83b\83h\8fÕ\93Ë\82Ì\83o\83O\8fC\90³\r
+//             for(i = 0; i < MAX_SIGNAL_ENTRY; i++)\r
+//                     Signal[i].Socket = INVALID_SOCKET;\r
+//             for(i = 0; i < MAX_SIGNAL_ENTRY_DBASE; i++)\r
+//                     SignalDbase[i].Async = 0;\r
+               if(hAsyncTblAccMutex = CreateMutex(NULL, FALSE, NULL))\r
+               {\r
+                       for(i = 0; i < MAX_SIGNAL_ENTRY; i++)\r
+                               Signal[i].Socket = INVALID_SOCKET;\r
+                       for(i = 0; i < MAX_SIGNAL_ENTRY_DBASE; i++)\r
+                               SignalDbase[i].Async = 0;\r
+               }\r
                Sts = SUCCESS;\r
        }\r
        return(Sts);\r
                Sts = SUCCESS;\r
        }\r
        return(Sts);\r
@@ -170,6 +183,9 @@ int MakeSocketWin(HWND hWnd, HINSTANCE hInst)
 void DeleteSocketWin(void)\r
 {\r
 //     CloseHandle(hAsyncTblAccMutex);\r
 void DeleteSocketWin(void)\r
 {\r
 //     CloseHandle(hAsyncTblAccMutex);\r
+       // \83X\83\8c\83b\83h\8fÕ\93Ë\82Ì\83o\83O\8fC\90³\r
+       CloseHandle(hAsyncTblAccMutex);\r
+       hAsyncTblAccMutex = NULL;\r
 \r
        if(hWndSocket != NULL)\r
                DestroyWindow(hWndSocket);\r
 \r
        if(hWndSocket != NULL)\r
                DestroyWindow(hWndSocket);\r
@@ -196,6 +212,8 @@ static LRESULT CALLBACK SocketWndProc(HWND hWnd, UINT message, WPARAM wParam, LP
        switch(message)\r
        {\r
                case WM_ASYNC_SOCKET :\r
        switch(message)\r
        {\r
                case WM_ASYNC_SOCKET :\r
+                       // \83X\83\8c\83b\83h\8fÕ\93Ë\82Ì\83o\83O\8fC\90³\r
+                       WaitForSingleObject(hAsyncTblAccMutex, INFINITE);\r
                        for(Pos = 0; Pos < MAX_SIGNAL_ENTRY; Pos++)\r
                        {\r
                                if(Signal[Pos].Socket == (SOCKET)wParam)\r
                        for(Pos = 0; Pos < MAX_SIGNAL_ENTRY; Pos++)\r
                        {\r
                                if(Signal[Pos].Socket == (SOCKET)wParam)\r
@@ -247,9 +265,13 @@ static LRESULT CALLBACK SocketWndProc(HWND hWnd, UINT message, WPARAM wParam, LP
                                        break;\r
                                }\r
                        }\r
                                        break;\r
                                }\r
                        }\r
+                       // \83X\83\8c\83b\83h\8fÕ\93Ë\82Ì\83o\83O\8fC\90³\r
+                       ReleaseMutex(hAsyncTblAccMutex);\r
                        break;\r
 \r
                case WM_ASYNC_DBASE :\r
                        break;\r
 \r
                case WM_ASYNC_DBASE :\r
+                       // \83X\83\8c\83b\83h\8fÕ\93Ë\82Ì\83o\83O\8fC\90³\r
+                       WaitForSingleObject(hAsyncTblAccMutex, INFINITE);\r
                        for(Pos = 0; Pos < MAX_SIGNAL_ENTRY_DBASE; Pos++)\r
                        {\r
                                if(SignalDbase[Pos].Async == (HANDLE)wParam)\r
                        for(Pos = 0; Pos < MAX_SIGNAL_ENTRY_DBASE; Pos++)\r
                        {\r
                                if(SignalDbase[Pos].Async == (HANDLE)wParam)\r
@@ -268,6 +290,8 @@ static LRESULT CALLBACK SocketWndProc(HWND hWnd, UINT message, WPARAM wParam, LP
                                        break;\r
                                }\r
                        }\r
                                        break;\r
                                }\r
                        }\r
+                       // \83X\83\8c\83b\83h\8fÕ\93Ë\82Ì\83o\83O\8fC\90³\r
+                       ReleaseMutex(hAsyncTblAccMutex);\r
                        break;\r
 \r
                default :\r
                        break;\r
 \r
                default :\r
@@ -293,6 +317,8 @@ static int AskAsyncDone(SOCKET s, int *Error, int Mask)
        int Sts;\r
        int Pos;\r
 \r
        int Sts;\r
        int Pos;\r
 \r
+       // \83X\83\8c\83b\83h\8fÕ\93Ë\82Ì\83o\83O\8fC\90³\r
+       WaitForSingleObject(hAsyncTblAccMutex, INFINITE);\r
        Sts = NO;\r
        *Error = 0;\r
        for(Pos = 0; Pos < MAX_SIGNAL_ENTRY; Pos++)\r
        Sts = NO;\r
        *Error = 0;\r
        for(Pos = 0; Pos < MAX_SIGNAL_ENTRY; Pos++)\r
@@ -344,6 +370,8 @@ static int AskAsyncDone(SOCKET s, int *Error, int Mask)
                        break;\r
                }\r
        }\r
                        break;\r
                }\r
        }\r
+       // \83X\83\8c\83b\83h\8fÕ\93Ë\82Ì\83o\83O\8fC\90³\r
+       ReleaseMutex(hAsyncTblAccMutex);\r
 \r
        if(Pos == MAX_SIGNAL_ENTRY)\r
        {\r
 \r
        if(Pos == MAX_SIGNAL_ENTRY)\r
        {\r
@@ -375,6 +403,8 @@ static int AskAsyncDoneDbase(HANDLE Async, int *Error)
        int Sts;\r
        int Pos;\r
 \r
        int Sts;\r
        int Pos;\r
 \r
+       // \83X\83\8c\83b\83h\8fÕ\93Ë\82Ì\83o\83O\8fC\90³\r
+       WaitForSingleObject(hAsyncTblAccMutex, INFINITE);\r
        Sts = NO;\r
        *Error = 0;\r
        for(Pos = 0; Pos < MAX_SIGNAL_ENTRY_DBASE; Pos++)\r
        Sts = NO;\r
        *Error = 0;\r
        for(Pos = 0; Pos < MAX_SIGNAL_ENTRY_DBASE; Pos++)\r
@@ -392,6 +422,8 @@ static int AskAsyncDoneDbase(HANDLE Async, int *Error)
                        break;\r
                }\r
        }\r
                        break;\r
                }\r
        }\r
+       // \83X\83\8c\83b\83h\8fÕ\93Ë\82Ì\83o\83O\8fC\90³\r
+       ReleaseMutex(hAsyncTblAccMutex);\r
 \r
        if(Pos == MAX_SIGNAL_ENTRY_DBASE)\r
        {\r
 \r
        if(Pos == MAX_SIGNAL_ENTRY_DBASE)\r
        {\r
@@ -417,6 +449,8 @@ static int RegistAsyncTable(SOCKET s)
        int Sts;\r
        int Pos;\r
 \r
        int Sts;\r
        int Pos;\r
 \r
+       // \83X\83\8c\83b\83h\8fÕ\93Ë\82Ì\83o\83O\8fC\90³\r
+       WaitForSingleObject(hAsyncTblAccMutex, INFINITE);\r
        Sts = NO;\r
        for(Pos = 0; Pos < MAX_SIGNAL_ENTRY; Pos++)\r
        {\r
        Sts = NO;\r
        for(Pos = 0; Pos < MAX_SIGNAL_ENTRY; Pos++)\r
        {\r
@@ -426,9 +460,13 @@ static int RegistAsyncTable(SOCKET s)
                        break;\r
                }\r
        }\r
                        break;\r
                }\r
        }\r
+       // \83X\83\8c\83b\83h\8fÕ\93Ë\82Ì\83o\83O\8fC\90³\r
+       ReleaseMutex(hAsyncTblAccMutex);\r
 \r
        if(Pos == MAX_SIGNAL_ENTRY)\r
        {\r
 \r
        if(Pos == MAX_SIGNAL_ENTRY)\r
        {\r
+               // \83X\83\8c\83b\83h\8fÕ\93Ë\82Ì\83o\83O\8fC\90³\r
+               WaitForSingleObject(hAsyncTblAccMutex, INFINITE);\r
                for(Pos = 0; Pos < MAX_SIGNAL_ENTRY; Pos++)\r
                {\r
                        if(Signal[Pos].Socket == INVALID_SOCKET)\r
                for(Pos = 0; Pos < MAX_SIGNAL_ENTRY; Pos++)\r
                {\r
                        if(Signal[Pos].Socket == INVALID_SOCKET)\r
@@ -447,6 +485,8 @@ static int RegistAsyncTable(SOCKET s)
                                break;\r
                        }\r
                }\r
                                break;\r
                        }\r
                }\r
+               // \83X\83\8c\83b\83h\8fÕ\93Ë\82Ì\83o\83O\8fC\90³\r
+               ReleaseMutex(hAsyncTblAccMutex);\r
 \r
                if(Pos == MAX_SIGNAL_ENTRY)\r
                {\r
 \r
                if(Pos == MAX_SIGNAL_ENTRY)\r
                {\r
@@ -473,6 +513,8 @@ static int RegistAsyncTableDbase(HANDLE Async)
        int Sts;\r
        int Pos;\r
 \r
        int Sts;\r
        int Pos;\r
 \r
+       // \83X\83\8c\83b\83h\8fÕ\93Ë\82Ì\83o\83O\8fC\90³\r
+       WaitForSingleObject(hAsyncTblAccMutex, INFINITE);\r
        Sts = NO;\r
        for(Pos = 0; Pos < MAX_SIGNAL_ENTRY_DBASE; Pos++)\r
        {\r
        Sts = NO;\r
        for(Pos = 0; Pos < MAX_SIGNAL_ENTRY_DBASE; Pos++)\r
        {\r
@@ -482,9 +524,13 @@ static int RegistAsyncTableDbase(HANDLE Async)
                        break;\r
                }\r
        }\r
                        break;\r
                }\r
        }\r
+       // \83X\83\8c\83b\83h\8fÕ\93Ë\82Ì\83o\83O\8fC\90³\r
+       ReleaseMutex(hAsyncTblAccMutex);\r
 \r
        if(Pos == MAX_SIGNAL_ENTRY_DBASE)\r
        {\r
 \r
        if(Pos == MAX_SIGNAL_ENTRY_DBASE)\r
        {\r
+               // \83X\83\8c\83b\83h\8fÕ\93Ë\82Ì\83o\83O\8fC\90³\r
+               WaitForSingleObject(hAsyncTblAccMutex, INFINITE);\r
                for(Pos = 0; Pos < MAX_SIGNAL_ENTRY; Pos++)\r
                {\r
                        if(SignalDbase[Pos].Async == 0)\r
                for(Pos = 0; Pos < MAX_SIGNAL_ENTRY; Pos++)\r
                {\r
                        if(SignalDbase[Pos].Async == 0)\r
@@ -499,6 +545,8 @@ static int RegistAsyncTableDbase(HANDLE Async)
                                break;\r
                        }\r
                }\r
                                break;\r
                        }\r
                }\r
+               // \83X\83\8c\83b\83h\8fÕ\93Ë\82Ì\83o\83O\8fC\90³\r
+               ReleaseMutex(hAsyncTblAccMutex);\r
 \r
                if(Pos == MAX_SIGNAL_ENTRY_DBASE)\r
                {\r
 \r
                if(Pos == MAX_SIGNAL_ENTRY_DBASE)\r
                {\r
@@ -525,6 +573,8 @@ static int UnRegistAsyncTable(SOCKET s)
        int Sts;\r
        int Pos;\r
 \r
        int Sts;\r
        int Pos;\r
 \r
+       // \83X\83\8c\83b\83h\8fÕ\93Ë\82Ì\83o\83O\8fC\90³\r
+       WaitForSingleObject(hAsyncTblAccMutex, INFINITE);\r
        Sts = NO;\r
        for(Pos = 0; Pos < MAX_SIGNAL_ENTRY; Pos++)\r
        {\r
        Sts = NO;\r
        for(Pos = 0; Pos < MAX_SIGNAL_ENTRY; Pos++)\r
        {\r
@@ -538,6 +588,8 @@ static int UnRegistAsyncTable(SOCKET s)
                        break;\r
                }\r
        }\r
                        break;\r
                }\r
        }\r
+       // \83X\83\8c\83b\83h\8fÕ\93Ë\82Ì\83o\83O\8fC\90³\r
+       ReleaseMutex(hAsyncTblAccMutex);\r
        return(Sts);\r
 }\r
 \r
        return(Sts);\r
 }\r
 \r
@@ -556,6 +608,8 @@ static int UnRegistAsyncTableDbase(HANDLE Async)
        int Sts;\r
        int Pos;\r
 \r
        int Sts;\r
        int Pos;\r
 \r
+       // \83X\83\8c\83b\83h\8fÕ\93Ë\82Ì\83o\83O\8fC\90³\r
+       WaitForSingleObject(hAsyncTblAccMutex, INFINITE);\r
        Sts = NO;\r
        for(Pos = 0; Pos < MAX_SIGNAL_ENTRY_DBASE; Pos++)\r
        {\r
        Sts = NO;\r
        for(Pos = 0; Pos < MAX_SIGNAL_ENTRY_DBASE; Pos++)\r
        {\r
@@ -569,6 +623,8 @@ static int UnRegistAsyncTableDbase(HANDLE Async)
                        break;\r
                }\r
        }\r
                        break;\r
                }\r
        }\r
+       // \83X\83\8c\83b\83h\8fÕ\93Ë\82Ì\83o\83O\8fC\90³\r
+       ReleaseMutex(hAsyncTblAccMutex);\r
        return(Sts);\r
 }\r
 \r
        return(Sts);\r
 }\r
 \r
@@ -652,7 +708,12 @@ int do_closesocket(SOCKET s)
 #endif\r
        CancelCheckWork = NO;\r
 \r
 #endif\r
        CancelCheckWork = NO;\r
 \r
-       Ret = closesocket(s);\r
+       // FTPS\91Î\89\9e\r
+//     Ret = closesocket(s);\r
+       if(AskCryptMode() == CRYPT_FTPES || AskCryptMode() == CRYPT_FTPIS)\r
+               Ret = closesocketS(s);\r
+       else\r
+               Ret = closesocket(s);\r
        if(Ret == SOCKET_ERROR)\r
        {\r
                Error = 0;\r
        if(Ret == SOCKET_ERROR)\r
        {\r
                Error = 0;\r
@@ -703,7 +764,12 @@ int do_connect(SOCKET s, const struct sockaddr *name, int namelen, int *CancelCh
        Ret = WSAAsyncSelect(s, hWndSocket, WM_ASYNC_SOCKET, FD_CONNECT | FD_CLOSE | FD_ACCEPT | FD_READ | FD_WRITE);\r
        if(Ret != SOCKET_ERROR)\r
        {\r
        Ret = WSAAsyncSelect(s, hWndSocket, WM_ASYNC_SOCKET, FD_CONNECT | FD_CLOSE | FD_ACCEPT | FD_READ | FD_WRITE);\r
        if(Ret != SOCKET_ERROR)\r
        {\r
-               Ret = connect(s, name, namelen);\r
+               // FTPS\91Î\89\9e\r
+//             Ret = connect(s, name, namelen);\r
+               if(AskCryptMode() == CRYPT_FTPIS)\r
+                       Ret = connectS(s, name, namelen);\r
+               else\r
+                       Ret = connect(s, name, namelen);\r
                if(Ret == SOCKET_ERROR)\r
                {\r
                        do\r
                if(Ret == SOCKET_ERROR)\r
                {\r
                        do\r
@@ -797,7 +863,12 @@ SOCKET do_accept(SOCKET s, struct sockaddr *addr, int *addrlen)
        {\r
                do\r
                {\r
        {\r
                do\r
                {\r
-                       Ret2 = accept(s, addr, addrlen);\r
+                       // FTPS\91Î\89\9e\r
+//                     Ret2 = accept(s, addr, addrlen);\r
+                       if(AskCryptMode() == CRYPT_FTPIS)\r
+                               Ret2 = acceptS(s, addr, addrlen);\r
+                       else\r
+                               Ret2 = accept(s, addr, addrlen);\r
                        if(Ret2 != INVALID_SOCKET)\r
                        {\r
 #if DBG_MSG\r
                        if(Ret2 != INVALID_SOCKET)\r
                        {\r
 #if DBG_MSG\r
@@ -866,7 +937,10 @@ int do_recv(SOCKET s, char *buf, int len, int flags, int *TimeOutErr, int *Cance
        if(TimeOut != 0)\r
                time(&StartTime);\r
 \r
        if(TimeOut != 0)\r
                time(&StartTime);\r
 \r
-       while((*CancelCheckWork == NO) && (AskAsyncDone(s, &Error, FD_READ_BIT) != YES))\r
+       // FTPS\91Î\89\9e\r
+       // OpenSSL\82Å\82Í\8eó\90M\8am\94F\82ÍFD_READ\82ª\95¡\90\94\89ñ\8eó\90M\82³\82ê\82é\89Â\94\\90«\82ª\82 \82é\r
+//     while((*CancelCheckWork == NO) && (AskAsyncDone(s, &Error, FD_READ_BIT) != YES))\r
+       while(AskCryptMode() == CRYPT_NONE && (*CancelCheckWork == NO) && (AskAsyncDone(s, &Error, FD_READ_BIT) != YES))\r
        {\r
                if(AskAsyncDone(s, &Error, FD_CLOSE_BIT) == YES)\r
                {\r
        {\r
                if(AskAsyncDone(s, &Error, FD_CLOSE_BIT) == YES)\r
                {\r
@@ -897,13 +971,38 @@ int do_recv(SOCKET s, char *buf, int len, int flags, int *TimeOutErr, int *Cance
                        DoPrintf("## recv()");\r
 #endif\r
 \r
                        DoPrintf("## recv()");\r
 #endif\r
 \r
-                       Ret = recv(s, buf, len, flags);\r
+                       // FTPS\91Î\89\9e\r
+//                     Ret = recv(s, buf, len, flags);\r
+                       if(AskCryptMode() == CRYPT_FTPES || AskCryptMode() == CRYPT_FTPIS)\r
+                               Ret = recvS(s, buf, len, flags);\r
+                       else\r
+                               Ret = recv(s, buf, len, flags);\r
                        if(Ret != SOCKET_ERROR)\r
                                break;\r
                        Error = WSAGetLastError();\r
                        Sleep(1);\r
                        if(BackgrndMessageProc() == YES)\r
                                break;\r
                        if(Ret != SOCKET_ERROR)\r
                                break;\r
                        Error = WSAGetLastError();\r
                        Sleep(1);\r
                        if(BackgrndMessageProc() == YES)\r
                                break;\r
+                       // FTPS\91Î\89\9e\r
+                       // \8eó\90M\8am\94F\82ð\83o\83C\83p\83X\82µ\82½\82½\82ß\82±\82±\82Å\83^\83C\83\80\83A\83E\83g\82Ì\8am\94F\r
+                       if(AskCryptMode() == CRYPT_FTPES || AskCryptMode() == CRYPT_FTPIS)\r
+                       {\r
+                               if(BackgrndMessageProc() == YES)\r
+                                       *CancelCheckWork = YES;\r
+                       }\r
+                       else if(TimeOut != 0)\r
+                       {\r
+                               time(&ElapseTime);\r
+                               ElapseTime -= StartTime;\r
+                               if(ElapseTime >= TimeOut)\r
+                               {\r
+                                       DoPrintf("do_recv timed out");\r
+                                       *TimeOutErr = YES;\r
+                                       *CancelCheckWork = YES;\r
+                               }\r
+                       }\r
+                       if(*CancelCheckWork == YES)\r
+                               break;\r
                }\r
                while(Error == WSAEWOULDBLOCK);\r
        }\r
                }\r
                while(Error == WSAEWOULDBLOCK);\r
        }\r
@@ -948,7 +1047,10 @@ int do_send(SOCKET s, const char *buf, int len, int flags, int *TimeOutErr, int
        if(BackgrndMessageProc() == YES)\r
                *CancelCheckWork = YES;\r
 \r
        if(BackgrndMessageProc() == YES)\r
                *CancelCheckWork = YES;\r
 \r
-       while((*CancelCheckWork == NO) && (AskAsyncDone(s, &Error, FD_WRITE_BIT) != YES))\r
+       // FTPS\91Î\89\9e\r
+       // \91\97\90M\83o\83b\83t\83@\82Ì\8bó\82«\8am\94F\82É\82Í\89e\8b¿\82µ\82È\82¢\82ª\94O\82Ì\82½\82ß\r
+//     while((*CancelCheckWork == NO) && (AskAsyncDone(s, &Error, FD_WRITE_BIT) != YES))\r
+       while(AskCryptMode() == CRYPT_NONE && (*CancelCheckWork == NO) && (AskAsyncDone(s, &Error, FD_WRITE_BIT) != YES))\r
        {\r
                if(AskAsyncDone(s, &Error, FD_CLOSE_BIT) == YES)\r
                {\r
        {\r
                if(AskAsyncDone(s, &Error, FD_CLOSE_BIT) == YES)\r
                {\r
@@ -980,7 +1082,12 @@ int do_send(SOCKET s, const char *buf, int len, int flags, int *TimeOutErr, int
                        DoPrintf("## send()");\r
 #endif\r
 \r
                        DoPrintf("## send()");\r
 #endif\r
 \r
-                       Ret = send(s, buf, len, flags);\r
+                       // FTPS\91Î\89\9e\r
+//                     Ret = send(s, buf, len, flags);\r
+                       if(AskCryptMode() == CRYPT_FTPES || AskCryptMode() == CRYPT_FTPIS)\r
+                               Ret = sendS(s, buf, len, flags);\r
+                       else\r
+                               Ret = send(s, buf, len, flags);\r
                        if(Ret != SOCKET_ERROR)\r
                        {\r
 #if DBG_MSG\r
                        if(Ret != SOCKET_ERROR)\r
                        {\r
 #if DBG_MSG\r
@@ -992,6 +1099,26 @@ int do_send(SOCKET s, const char *buf, int len, int flags, int *TimeOutErr, int
                        Sleep(1);\r
                        if(BackgrndMessageProc() == YES)\r
                                break;\r
                        Sleep(1);\r
                        if(BackgrndMessageProc() == YES)\r
                                break;\r
+                       // FTPS\91Î\89\9e\r
+                       // \91\97\90M\83o\83b\83t\83@\8am\94F\82ð\83o\83C\83p\83X\82µ\82½\82½\82ß\82±\82±\82Å\83^\83C\83\80\83A\83E\83g\82Ì\8am\94F\r
+                       if(AskCryptMode() == CRYPT_FTPES || AskCryptMode() == CRYPT_FTPIS)\r
+                       {\r
+                               if(BackgrndMessageProc() == YES)\r
+                                       *CancelCheckWork = YES;\r
+                       }\r
+                       else if(TimeOut != 0)\r
+                       {\r
+                               time(&ElapseTime);\r
+                               ElapseTime -= StartTime;\r
+                               if(ElapseTime >= TimeOut)\r
+                               {\r
+                                       DoPrintf("do_recv timed out");\r
+                                       *TimeOutErr = YES;\r
+                                       *CancelCheckWork = YES;\r
+                               }\r
+                       }\r
+                       if(*CancelCheckWork == YES)\r
+                               break;\r
                }\r
                while(Error == WSAEWOULDBLOCK);\r
        }\r
                }\r
                while(Error == WSAEWOULDBLOCK);\r
        }\r
diff --git a/socketwrapper.c b/socketwrapper.c
new file mode 100644 (file)
index 0000000..744f7c2
--- /dev/null
@@ -0,0 +1,299 @@
+// socketwrapper.cpp
+// Copyright (C) 2011 Suguru Kawamoto
+// \83\\83P\83b\83g\83\89\83b\83p\81[
+// socket\8aÖ\98A\8aÖ\90\94\82ðOpenSSL\97p\82É\92u\8a·
+// \83R\83\93\83p\83C\83\8b\82É\82ÍOpenSSL\82Ì\83w\83b\83_\81[\83t\83@\83C\83\8b\82ª\95K\97v
+// \8eÀ\8ds\82É\82ÍOpenSSL\82ÌDLL\82ª\95K\97v
+
+#include <windows.h>
+#include <mmsystem.h>
+#include <openssl/ssl.h>
+
+#include "socketwrapper.h"
+
+typedef void (__stdcall* _SSL_load_error_strings)();
+typedef int (__stdcall* _SSL_library_init)();
+typedef SSL_METHOD* (__stdcall* _SSLv23_method)();
+typedef SSL_CTX* (__stdcall* _SSL_CTX_new)(SSL_METHOD*);
+typedef void (__stdcall* _SSL_CTX_free)(SSL_CTX*);
+typedef SSL* (__stdcall* _SSL_new)(SSL_CTX*);
+typedef void (__stdcall* _SSL_free)(SSL*);
+typedef int (__stdcall* _SSL_shutdown)(SSL*);
+typedef int (__stdcall* _SSL_get_fd)(SSL*);
+typedef int (__stdcall* _SSL_set_fd)(SSL*, int);
+typedef int (__stdcall* _SSL_accept)(SSL*);
+typedef int (__stdcall* _SSL_connect)(SSL*);
+typedef int (__stdcall* _SSL_write)(SSL*, const void*, int);
+typedef int (__stdcall* _SSL_peek)(SSL*, void*, int);
+typedef int (__stdcall* _SSL_read)(SSL*, void*, int);
+typedef int (__stdcall* _SSL_get_error)(SSL*, int);
+
+_SSL_load_error_strings pSSL_load_error_strings;
+_SSL_library_init pSSL_library_init;
+_SSLv23_method pSSLv23_method;
+_SSL_CTX_new pSSL_CTX_new;
+_SSL_CTX_free pSSL_CTX_free;
+_SSL_new pSSL_new;
+_SSL_free pSSL_free;
+_SSL_shutdown pSSL_shutdown;
+_SSL_get_fd pSSL_get_fd;
+_SSL_set_fd pSSL_set_fd;
+_SSL_accept pSSL_accept;
+_SSL_connect pSSL_connect;
+_SSL_write pSSL_write;
+_SSL_peek pSSL_peek;
+_SSL_read pSSL_read;
+_SSL_get_error pSSL_get_error;
+
+#define MAX_SSL_SOCKET 16
+
+BOOL g_bOpenSSLLoaded;
+HMODULE g_hOpenSSL;
+CRITICAL_SECTION g_OpenSSLLock;
+DWORD g_OpenSSLTimeout;
+LPSSLTIMEOUTCALLBACK g_pOpenSSLTimeoutCallback;
+SSL_CTX* g_pOpenSSLCTX;
+SSL* g_pOpenSSLHandle[MAX_SSL_SOCKET];
+
+BOOL __stdcall DefaultSSLTimeoutCallback()
+{
+       Sleep(100);
+       return FALSE;
+}
+
+BOOL LoadOpenSSL()
+{
+       if(g_bOpenSSLLoaded)
+               return FALSE;
+       g_hOpenSSL = LoadLibrary("ssleay32.dll");
+       if(!g_hOpenSSL)
+               g_hOpenSSL = LoadLibrary("libssl32.dll");
+       if(!g_hOpenSSL
+               || !(pSSL_load_error_strings = (_SSL_load_error_strings)GetProcAddress(g_hOpenSSL, "SSL_load_error_strings"))
+               || !(pSSL_library_init = (_SSL_library_init)GetProcAddress(g_hOpenSSL, "SSL_library_init"))
+               || !(pSSLv23_method = (_SSLv23_method)GetProcAddress(g_hOpenSSL, "SSLv23_method"))
+               || !(pSSL_CTX_new = (_SSL_CTX_new)GetProcAddress(g_hOpenSSL, "SSL_CTX_new"))
+               || !(pSSL_CTX_free = (_SSL_CTX_free)GetProcAddress(g_hOpenSSL, "SSL_CTX_free"))
+               || !(pSSL_new = (_SSL_new)GetProcAddress(g_hOpenSSL, "SSL_new"))
+               || !(pSSL_free = (_SSL_free)GetProcAddress(g_hOpenSSL, "SSL_free"))
+               || !(pSSL_shutdown = (_SSL_shutdown)GetProcAddress(g_hOpenSSL, "SSL_shutdown"))
+               || !(pSSL_get_fd = (_SSL_get_fd)GetProcAddress(g_hOpenSSL, "SSL_get_fd"))
+               || !(pSSL_set_fd = (_SSL_set_fd)GetProcAddress(g_hOpenSSL, "SSL_set_fd"))
+               || !(pSSL_accept = (_SSL_accept)GetProcAddress(g_hOpenSSL, "SSL_accept"))
+               || !(pSSL_connect = (_SSL_connect)GetProcAddress(g_hOpenSSL, "SSL_connect"))
+               || !(pSSL_write = (_SSL_write)GetProcAddress(g_hOpenSSL, "SSL_write"))
+               || !(pSSL_peek = (_SSL_peek)GetProcAddress(g_hOpenSSL, "SSL_peek"))
+               || !(pSSL_read = (_SSL_read)GetProcAddress(g_hOpenSSL, "SSL_read"))
+               || !(pSSL_get_error = (_SSL_get_error)GetProcAddress(g_hOpenSSL, "SSL_get_error")))
+       {
+               FreeLibrary(g_hOpenSSL);
+               g_hOpenSSL = NULL;
+               return FALSE;
+       }
+       InitializeCriticalSection(&g_OpenSSLLock);
+       pSSL_load_error_strings();
+       pSSL_library_init();
+       SetSSLTimeoutCallback(60000, DefaultSSLTimeoutCallback);
+       g_bOpenSSLLoaded = TRUE;
+       return TRUE;
+}
+
+void FreeOpenSSL()
+{
+       int i;
+       if(!g_bOpenSSLLoaded)
+               return;
+       EnterCriticalSection(&g_OpenSSLLock);
+       for(i = 0; i < MAX_SSL_SOCKET; i++)
+       {
+               if(g_pOpenSSLHandle[i])
+               {
+                       pSSL_shutdown(g_pOpenSSLHandle[i]);
+                       pSSL_free(g_pOpenSSLHandle[i]);
+                       g_pOpenSSLHandle[i] = NULL;
+               }
+       }
+       if(g_pOpenSSLCTX)
+               pSSL_CTX_free(g_pOpenSSLCTX);
+       g_pOpenSSLCTX = NULL;
+       FreeLibrary(g_hOpenSSL);
+       g_hOpenSSL = NULL;
+       LeaveCriticalSection(&g_OpenSSLLock);
+       DeleteCriticalSection(&g_OpenSSLLock);
+       g_bOpenSSLLoaded = FALSE;
+}
+
+BOOL IsOpenSSLLoaded()
+{
+       return g_bOpenSSLLoaded;
+}
+
+SSL** GetUnusedSSLPointer()
+{
+       int i;
+       for(i = 0; i < MAX_SSL_SOCKET; i++)
+       {
+               if(!g_pOpenSSLHandle[i])
+                       return &g_pOpenSSLHandle[i];
+       }
+       return NULL;
+}
+
+SSL** FindSSLPointerFromSocket(SOCKET s)
+{
+       int i;
+       for(i = 0; i < MAX_SSL_SOCKET; i++)
+       {
+               if(g_pOpenSSLHandle[i])
+               {
+                       if(pSSL_get_fd(g_pOpenSSLHandle[i]) == s)
+                               return &g_pOpenSSLHandle[i];
+               }
+       }
+       return NULL;
+}
+
+void SetSSLTimeoutCallback(DWORD Timeout, LPSSLTIMEOUTCALLBACK pCallback)
+{
+       EnterCriticalSection(&g_OpenSSLLock);
+       g_OpenSSLTimeout = Timeout;
+       g_pOpenSSLTimeoutCallback = pCallback;
+       LeaveCriticalSection(&g_OpenSSLLock);
+}
+
+BOOL AttachSSL(SOCKET s)
+{
+       BOOL r;
+       DWORD Time;
+       SSL** ppSSL;
+       r = FALSE;
+       Time = timeGetTime();
+       EnterCriticalSection(&g_OpenSSLLock);
+       if(!g_pOpenSSLCTX)
+               g_pOpenSSLCTX = pSSL_CTX_new(pSSLv23_method());
+       if(g_pOpenSSLCTX)
+       {
+               if(ppSSL = GetUnusedSSLPointer())
+               {
+                       if(*ppSSL = pSSL_new(g_pOpenSSLCTX))
+                       {
+                               if(pSSL_set_fd(*ppSSL, s) != 0)
+                               {
+                                       r = TRUE;
+                                       // SSL\82Ì\83l\83S\83V\83G\81[\83V\83\87\83\93\82É\82Í\8e\9e\8aÔ\82ª\82©\82©\82é\8fê\8d\87\82ª\82 \82é
+                                       while(pSSL_connect(*ppSSL) != 1)
+                                       {
+                                               LeaveCriticalSection(&g_OpenSSLLock);
+                                               if(g_pOpenSSLTimeoutCallback() || timeGetTime() - Time >= g_OpenSSLTimeout)
+                                               {
+                                                       DetachSSL(s);
+                                                       r = FALSE;
+                                                       EnterCriticalSection(&g_OpenSSLLock);
+                                                       break;
+                                               }
+                                               EnterCriticalSection(&g_OpenSSLLock);
+                                       }
+                               }
+                               else
+                                       DetachSSL(s);
+                       }
+               }
+       }
+       LeaveCriticalSection(&g_OpenSSLLock);
+       return r;
+}
+
+BOOL DetachSSL(SOCKET s)
+{
+       BOOL r;
+       SSL** ppSSL;
+       r = FALSE;
+       EnterCriticalSection(&g_OpenSSLLock);
+       if(ppSSL = FindSSLPointerFromSocket(s))
+       {
+               pSSL_shutdown(*ppSSL);
+               pSSL_free(*ppSSL);
+               *ppSSL = NULL;
+               r = TRUE;
+       }
+       LeaveCriticalSection(&g_OpenSSLLock);
+       return r;
+}
+
+BOOL IsSSLAttached(SOCKET s)
+{
+       SSL** ppSSL;
+       EnterCriticalSection(&g_OpenSSLLock);
+       ppSSL = FindSSLPointerFromSocket(s);
+       LeaveCriticalSection(&g_OpenSSLLock);
+       if(!ppSSL)
+               return TRUE;
+       return TRUE;
+}
+
+SOCKET socketS(int af, int type, int protocol)
+{
+       return socket(af, type, protocol);
+}
+
+int bindS(SOCKET s, const struct sockaddr *addr, int namelen)
+{
+       return bind(s, addr, namelen);
+}
+
+int listenS(SOCKET s, int backlog)
+{
+       return listen(s, backlog);
+}
+
+SOCKET acceptS(SOCKET s, struct sockaddr *addr, int *addrlen)
+{
+       SOCKET r;
+       r = accept(s, addr, addrlen);
+       if(!AttachSSL(r))
+       {
+               closesocket(r);
+               return INVALID_SOCKET;
+       }
+       return r;
+}
+
+int connectS(SOCKET s, const struct sockaddr *name, int namelen)
+{
+       int r;
+       r = connect(s, name, namelen);
+       if(!AttachSSL(r))
+               return SOCKET_ERROR;
+       return r;
+}
+
+int closesocketS(SOCKET s)
+{
+       DetachSSL(s);
+       return closesocket(s);
+}
+
+int sendS(SOCKET s, const char * buf, int len, int flags)
+{
+       SSL** ppSSL;
+       EnterCriticalSection(&g_OpenSSLLock);
+       ppSSL = FindSSLPointerFromSocket(s);
+       LeaveCriticalSection(&g_OpenSSLLock);
+       if(!ppSSL)
+               return send(s, buf, len, flags);
+       return pSSL_write(*ppSSL, buf, len);
+}
+
+int recvS(SOCKET s, char * buf, int len, int flags)
+{
+       SSL** ppSSL;
+       EnterCriticalSection(&g_OpenSSLLock);
+       ppSSL = FindSSLPointerFromSocket(s);
+       LeaveCriticalSection(&g_OpenSSLLock);
+       if(!ppSSL)
+               return recv(s, buf, len, flags);
+       if(flags & MSG_PEEK)
+               return pSSL_peek(*ppSSL, buf, len);
+       return pSSL_read(*ppSSL, buf, len);
+}
+
diff --git a/socketwrapper.h b/socketwrapper.h
new file mode 100644 (file)
index 0000000..884f63d
--- /dev/null
@@ -0,0 +1,29 @@
+// socketwrapper.h
+// Copyright (C) 2011 Suguru Kawamoto
+// \83\\83P\83b\83g\83\89\83b\83p\81[
+
+#ifndef __SOCKETWRAPPER_H__
+#define __SOCKETWRAPPER_H__
+
+#define USE_OPENSSL
+
+typedef BOOL (__stdcall* LPSSLTIMEOUTCALLBACK)();
+
+BOOL LoadOpenSSL();
+void FreeOpenSSL();
+BOOL IsOpenSSLLoaded();
+void SetSSLTimeoutCallback(DWORD Timeout, LPSSLTIMEOUTCALLBACK pCallback);
+BOOL AttachSSL(SOCKET s);
+BOOL DetachSSL(SOCKET s);
+BOOL IsSSLAttached(SOCKET s);
+SOCKET socketS(int af, int type, int protocol);
+int bindS(SOCKET s, const struct sockaddr *addr, int namelen);
+int listenS(SOCKET s, int backlog);
+SOCKET acceptS(SOCKET s, struct sockaddr *addr, int *addrlen);
+int connectS(SOCKET s, const struct sockaddr *name, int namelen);
+int closesocketS(SOCKET s);
+int sendS(SOCKET s, const char * buf, int len, int flags);
+int recvS(SOCKET s, char * buf, int len, int flags);
+
+#endif
+