OSDN Git Service

End the support for Windows XP and earlier.
[ffftp/ffftp.git] / connect.c
index 6d33cb2..a26039d 100644 (file)
--- a/connect.c
+++ b/connect.c
@@ -99,13 +99,15 @@ extern int FwallPort;
 extern int FwallType;\r
 extern int FwallDefault;\r
 extern int FwallSecurity;\r
-extern int FwallResolv;\r
+extern int FwallResolve;\r
 extern int FwallLower;\r
 extern int FwallDelimiter;\r
 extern int PasvDefault;\r
 extern int QuickAnonymous;\r
 // 切断対策\r
 extern int TimeOut;\r
+// UPnP対応\r
+extern int UPnPEnabled;\r
 \r
 /*===== ローカルなワーク =====*/\r
 \r
@@ -233,6 +235,27 @@ void ConnectProc(int Type, int Num)
                                {\r
                                        if(DoDirListCmdSkt("", "", 999, &CancelFlg) == FTP_COMPLETE)\r
                                                CurHost.CurNameKanjiCode = AnalyzeNameKanjiCode(999);\r
+                                       switch(CurHost.CurNameKanjiCode)\r
+                                       {\r
+                                       case KANJI_SJIS:\r
+                                               SetTaskMsg(MSGJPN343, MSGJPN345);\r
+                                               break;\r
+                                       case KANJI_JIS:\r
+                                               SetTaskMsg(MSGJPN343, MSGJPN346);\r
+                                               break;\r
+                                       case KANJI_EUC:\r
+                                               SetTaskMsg(MSGJPN343, MSGJPN347);\r
+                                               break;\r
+                                       case KANJI_UTF8N:\r
+                                               SetTaskMsg(MSGJPN343, MSGJPN348);\r
+                                               break;\r
+                                       case KANJI_UTF8HFSX:\r
+                                               SetTaskMsg(MSGJPN343, MSGJPN349);\r
+                                               break;\r
+                                       default:\r
+                                               SetTaskMsg(MSGJPN344);\r
+                                               break;\r
+                                       }\r
                                }\r
 \r
                                strcpy(TitleHostName, CurHost.HostName);\r
@@ -326,6 +349,27 @@ void QuickConnectProc(void)
                                {\r
                                        if(DoDirListCmdSkt("", "", 999, &CancelFlg) == FTP_COMPLETE)\r
                                                CurHost.CurNameKanjiCode = AnalyzeNameKanjiCode(999);\r
+                                       switch(CurHost.CurNameKanjiCode)\r
+                                       {\r
+                                       case KANJI_SJIS:\r
+                                               SetTaskMsg(MSGJPN343, MSGJPN345);\r
+                                               break;\r
+                                       case KANJI_JIS:\r
+                                               SetTaskMsg(MSGJPN343, MSGJPN346);\r
+                                               break;\r
+                                       case KANJI_EUC:\r
+                                               SetTaskMsg(MSGJPN343, MSGJPN347);\r
+                                               break;\r
+                                       case KANJI_UTF8N:\r
+                                               SetTaskMsg(MSGJPN343, MSGJPN348);\r
+                                               break;\r
+                                       case KANJI_UTF8HFSX:\r
+                                               SetTaskMsg(MSGJPN343, MSGJPN349);\r
+                                               break;\r
+                                       default:\r
+                                               SetTaskMsg(MSGJPN344);\r
+                                               break;\r
+                                       }\r
                                }\r
 \r
                                strcpy(TitleHostName, CurHost.HostAdrs);\r
@@ -514,6 +558,27 @@ void DirectConnectProc(char *unc, int Kanji, int Kana, int Fkanji, int TrMode)
                        {\r
                                if(DoDirListCmdSkt("", "", 999, &CancelFlg) == FTP_COMPLETE)\r
                                        CurHost.CurNameKanjiCode = AnalyzeNameKanjiCode(999);\r
+                               switch(CurHost.CurNameKanjiCode)\r
+                               {\r
+                               case KANJI_SJIS:\r
+                                       SetTaskMsg(MSGJPN343, MSGJPN345);\r
+                                       break;\r
+                               case KANJI_JIS:\r
+                                       SetTaskMsg(MSGJPN343, MSGJPN346);\r
+                                       break;\r
+                               case KANJI_EUC:\r
+                                       SetTaskMsg(MSGJPN343, MSGJPN347);\r
+                                       break;\r
+                               case KANJI_UTF8N:\r
+                                       SetTaskMsg(MSGJPN343, MSGJPN348);\r
+                                       break;\r
+                               case KANJI_UTF8HFSX:\r
+                                       SetTaskMsg(MSGJPN343, MSGJPN349);\r
+                                       break;\r
+                               default:\r
+                                       SetTaskMsg(MSGJPN344);\r
+                                       break;\r
+                               }\r
                        }\r
 \r
                        strcpy(TitleHostName, CurHost.HostAdrs);\r
@@ -604,6 +669,27 @@ void HistoryConnectProc(int MenuCmd)
                                {\r
                                        if(DoDirListCmdSkt("", "", 999, &CancelFlg) == FTP_COMPLETE)\r
                                                CurHost.CurNameKanjiCode = AnalyzeNameKanjiCode(999);\r
+                                       switch(CurHost.CurNameKanjiCode)\r
+                                       {\r
+                                       case KANJI_SJIS:\r
+                                               SetTaskMsg(MSGJPN343, MSGJPN345);\r
+                                               break;\r
+                                       case KANJI_JIS:\r
+                                               SetTaskMsg(MSGJPN343, MSGJPN346);\r
+                                               break;\r
+                                       case KANJI_EUC:\r
+                                               SetTaskMsg(MSGJPN343, MSGJPN347);\r
+                                               break;\r
+                                       case KANJI_UTF8N:\r
+                                               SetTaskMsg(MSGJPN343, MSGJPN348);\r
+                                               break;\r
+                                       case KANJI_UTF8HFSX:\r
+                                               SetTaskMsg(MSGJPN343, MSGJPN349);\r
+                                               break;\r
+                                       default:\r
+                                               SetTaskMsg(MSGJPN344);\r
+                                               break;\r
+                                       }\r
                                }\r
 \r
                                strcpy(TitleHostName, CurHost.HostAdrs);\r
@@ -1567,7 +1653,7 @@ static SOCKET DoConnectCrypt(int CryptMode, HOSTDATA* HostData, char *Host, char
 //                                     ;\r
                                if(CryptMode == CRYPT_FTPIS)\r
                                {\r
-                                       if(AttachSSL(ContSock, INVALID_SOCKET, CancelCheckWork))\r
+                                       if(AttachSSL(ContSock, INVALID_SOCKET, CancelCheckWork, HostData->NoWeakEncryption))\r
                                        {\r
                                                while((Sts = ReadReplyMessage(ContSock, Buf, 1024, CancelCheckWork, TmpBuf) / 100) == FTP_PRELIM)\r
                                                        ;\r
@@ -1694,7 +1780,7 @@ static SOCKET DoConnectCrypt(int CryptMode, HOSTDATA* HostData, char *Host, char
                                                                {\r
                                                                        if(IsOpenSSLLoaded() && ((Sts = command(ContSock, Reply, CancelCheckWork, "AUTH TLS")) == 234 || (Sts = command(ContSock, Reply, CancelCheckWork, "AUTH SSL")) == 234))\r
                                                                        {\r
-                                                                               if(AttachSSL(ContSock, INVALID_SOCKET, CancelCheckWork))\r
+                                                                               if(AttachSSL(ContSock, INVALID_SOCKET, CancelCheckWork, HostData->NoWeakEncryption))\r
                                                                                {\r
                                                                                        if((Sts = command(ContSock, Reply, CancelCheckWork, "PBSZ 0")) == 200)\r
                                                                                        {\r
@@ -1863,68 +1949,12 @@ static SOCKET DoConnectCrypt(int CryptMode, HOSTDATA* HostData, char *Host, char
                        // UTF-8対応\r
                        if(HostData->CurNameKanjiCode == KANJI_AUTO && (HostData->Feature & FEATURE_UTF8))\r
                        {\r
-                               if((Sts = command(ContSock, Reply, CancelCheckWork, "OPTS UTF8 ON")) == 200)\r
-                                       HostData->CurNameKanjiCode = KANJI_UTF8N;\r
-                       }\r
-               }\r
-       }\r
-       else if(CryptMode == CRYPT_SFTP)\r
-       {\r
-               // TODO:\r
-               // テストコード\r
-               // ログイン成功を確認\r
-#define strrcmp(_Str1, _Str2) (strcmp(strstr(_Str1, _Str2) ? strstr(_Str1, _Str2) : "", _Str2))\r
-               size_t r;\r
-               ContSock = SFTP_socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);\r
-               SFTP_SetTimeoutCallback(ContSock, SSLTimeoutCallback);\r
-               while(1)\r
-               {\r
-                       r = SFTP_recv(ContSock, Reply, 1024, 0);\r
-                       if(r == SOCKET_ERROR)\r
-                               break;\r
-                       if(r <= 0)\r
-                               continue;\r
-                       Reply[r] = '\0';\r
-                       SetTaskMsg("%s", Reply);\r
-                       if(strrcmp(Reply, "psftp> ") == 0)\r
-                               break;\r
-               }\r
-               r = SFTP_send(ContSock, "open \"", strlen("open \""), 0);\r
-               r = SFTP_send(ContSock, Host, strlen(Host), 0);\r
-               r = SFTP_send(ContSock, "\"\r\n", strlen("\"\r\n"), 0);\r
-               while(1)\r
-               {\r
-                       r = SFTP_recv(ContSock, Reply, 1024, 0);\r
-                       if(r == SOCKET_ERROR)\r
-                               break;\r
-                       if(r <= 0)\r
-                               continue;\r
-                       Reply[r] = '\0';\r
-                       SetTaskMsg("%s", Reply);\r
-                       if(strrcmp(Reply, "Store key in cache? (y/n) ") == 0)\r
-                       {\r
-                               r = SFTP_send(ContSock, "n\r\n", strlen("n\r\n"), 0);\r
-                       }\r
-                       if(strrcmp(Reply, "Update cached key? (y/n, Return cancels connection) ") == 0)\r
-                       {\r
-                               r = SFTP_send(ContSock, "\r\n", strlen("\r\n"), 0);\r
-                       }\r
-                       if(strrcmp(Reply, "login as: ") == 0)\r
-                       {\r
-                               r = SFTP_send(ContSock, User, strlen(User), 0);\r
-                               r = SFTP_send(ContSock, "\r\n", strlen("\r\n"), 0);\r
+                               // UTF-8を指定した場合も自動判別を行う\r
+//                             if((Sts = command(ContSock, Reply, CancelCheckWork, "OPTS UTF8 ON")) == 200)\r
+//                                     HostData->CurNameKanjiCode = KANJI_UTF8N;\r
+                               command(ContSock, Reply, CancelCheckWork, "OPTS UTF8 ON");\r
                        }\r
-                       if(strrcmp(Reply, "password: ") == 0)\r
-                       {\r
-                               r = SFTP_send(ContSock, Pass, strlen(Pass), 0);\r
-                               r = SFTP_send(ContSock, "\r\n", strlen("\r\n"), 0);\r
-                       }\r
-                       if(strrcmp(Reply, "psftp> ") == 0)\r
-                               break;\r
-                       Sleep(1);\r
                }\r
-               SFTP_closesocket(ContSock);\r
-               ContSock = INVALID_SOCKET;\r
        }\r
 \r
        return(ContSock);\r
@@ -1937,12 +1967,6 @@ static SOCKET DoConnect(HOSTDATA* HostData, char *Host, char *User, char *Pass,
        SOCKET ContSock;\r
        ContSock = INVALID_SOCKET;\r
        *CancelCheckWork = NO;\r
-       if(*CancelCheckWork == NO && ContSock == INVALID_SOCKET && HostData->UseSFTP == YES)\r
-       {\r
-               SetTaskMsg(MSGJPN317);\r
-               if((ContSock = DoConnectCrypt(CRYPT_SFTP, HostData, Host, User, Pass, Acct, Port, Fwall, SavePass, Security, CancelCheckWork)) != INVALID_SOCKET)\r
-                       HostData->CryptMode = CRYPT_SFTP;\r
-       }\r
        if(*CancelCheckWork == NO && ContSock == INVALID_SOCKET && HostData->UseFTPIS == YES)\r
        {\r
                SetTaskMsg(MSGJPN316);\r
@@ -2016,7 +2040,7 @@ static int CheckOneTimePassword(char *Pass, char *Reply, int Type)
        if((Type == MD4) || (Type == MD5) || (Type == SHA1))\r
        {\r
                /* シーケンス番号を見つけるループ */\r
-               DoPrintf("Analize OTP");\r
+               DoPrintf("Analyze OTP");\r
                DoPrintf("%s", Pos);\r
                Sts = FFFTP_FAIL;\r
                while((Pos = GetNextField(Pos)) != NULL)\r
@@ -2246,7 +2270,7 @@ SOCKET connectsockIPv4(char *host, int port, char *PreMsg, int *CancelCheckWork)
                // ホスト名が指定された\r
                // ホスト名からアドレスを求める\r
                if(((Fwall == FWALL_SOCKS5_NOAUTH) || (Fwall == FWALL_SOCKS5_USER)) &&\r
-                  (FwallResolv == YES))\r
+                  (FwallResolve == YES))\r
                {\r
                        // ホスト名解決はSOCKSサーバに任せる\r
                        pHostEntry = NULL;\r
@@ -2451,7 +2475,7 @@ SOCKET connectsockIPv6(char *host, int port, char *PreMsg, int *CancelCheckWork)
                // ホスト名が指定された\r
                // ホスト名からアドレスを求める\r
                if(((Fwall == FWALL_SOCKS5_NOAUTH) || (Fwall == FWALL_SOCKS5_USER)) &&\r
-                  (FwallResolv == YES))\r
+                  (FwallResolve == YES))\r
                {\r
                        // ホスト名解決はSOCKSサーバに任せる\r
                        pHostEntry = NULL;\r
@@ -2729,7 +2753,7 @@ SOCKET GetFTPListenSocketIPv4(SOCKET ctrl_skt, int *CancelCheckWork)
                                                a = (char *)&saTmpAddr.sin_addr;\r
                                                p = (char *)&saCtrlAddr.sin_port;\r
                                                // UPnP対応\r
-                                               if(IsUPnPLoaded() == YES)\r
+                                               if(IsUPnPLoaded() == YES && UPnPEnabled == YES)\r
                                                {\r
                                                        if(AddPortMapping(AddressToStringIPv4(Adrs, &saTmpAddr.sin_addr), ntohs(saCtrlAddr.sin_port)) == FFFTP_SUCCESS)\r
                                                                SetAsyncTableDataMapPort(listen_skt, ntohs(saCtrlAddr.sin_port));\r
@@ -2871,6 +2895,8 @@ SOCKET GetFTPListenSocketIPv6(SOCKET ctrl_skt, int *CancelCheckWork)
                        saCtrlAddr.sin6_port = htons(0);\r
                        saCtrlAddr.sin6_family = AF_INET6;\r
                        memset(&saCtrlAddr.sin6_addr, 0, 16);\r
+                       saCtrlAddr.sin6_flowinfo = 0;\r
+                       saCtrlAddr.sin6_scope_id = 0;\r
 \r
                        if(bind(listen_skt, (struct sockaddr *)&saCtrlAddr, sizeof(struct sockaddr_in6)) != SOCKET_ERROR)\r
                        {\r
@@ -2886,7 +2912,7 @@ SOCKET GetFTPListenSocketIPv6(SOCKET ctrl_skt, int *CancelCheckWork)
                                                a = (char *)&saTmpAddr.sin6_addr;\r
                                                p = (char *)&saCtrlAddr.sin6_port;\r
                                                // UPnP対応\r
-                                               if(IsUPnPLoaded() == YES)\r
+                                               if(IsUPnPLoaded() == YES && UPnPEnabled == YES)\r
                                                {\r
                                                        if(AddPortMapping(AddressToStringIPv6(Adrs, &saTmpAddr.sin6_addr), ntohs(saCtrlAddr.sin6_port)) == FFFTP_SUCCESS)\r
                                                                SetAsyncTableDataMapPort(listen_skt, ntohs(saCtrlAddr.sin6_port));\r