OSDN Git Service

Add support for retrying file transfer.
authors_kawamoto <s_kawamoto@users.sourceforge.jp>
Fri, 18 Nov 2011 12:58:10 +0000 (21:58 +0900)
committers_kawamoto <s_kawamoto@users.sourceforge.jp>
Fri, 18 Nov 2011 12:58:10 +0000 (21:58 +0900)
Add UI for retrying file transfer.
Fix bugs of file transfer queues.
Modify documents.

20 files changed:
FFFTP_Eng_Release/FFFTP.exe
Release/FFFTP.exe
Resource/FFFTP.rc
Resource/resource.h
Resource_eng/FFFTP-eng.rc
Resource_eng/resource.h
common.h
connect.c
doc/eng/FFFTP.txt
doc/eng/history.txt
doc/jpn/FFFTP.txt
doc/jpn/history.txt
getput.c
history.c
hostman.c
mesg-eng.h
mesg-eng.old.h
mesg-jpn.h
mesg-jpn.old.h
registry.c

index 7df235d..aac2807 100644 (file)
Binary files a/FFFTP_Eng_Release/FFFTP.exe and b/FFFTP_Eng_Release/FFFTP.exe differ
index 2e44649..6d5c6e8 100644 (file)
Binary files a/Release/FFFTP.exe and b/Release/FFFTP.exe differ
index 154c397..45f1ae5 100644 (file)
@@ -700,28 +700,38 @@ BEGIN
     PUSHBUTTON      "\83e\83X\83g",SOUND_ERROR_TEST,166,88,37,13\r
 END\r
 \r
-downerr_dlg DIALOGEX 0, 0, 182, 65\r
+downerr_dlg DIALOG  0, 0, 223, 103\r
 STYLE DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | WS_POPUP | WS_CAPTION\r
 CAPTION "FFFTP\81F\83G\83\89\81["\r
-FONT 9, "\82l\82\82o\83S\83V\83b\83N", 0, 0, 0x1\r
+FONT 9, "\82l\82\82o\83S\83V\83b\83N"\r
 BEGIN\r
-    DEFPUSHBUTTON   "\82±\82Ì\83t\83@\83C\83\8b\82ð\92\86\8e~",IDOK,10,47,76,14\r
-    PUSHBUTTON      "\91S\82Ä\92\86\8e~",IDCANCEL,95,47,76,14\r
-    LTEXT           "\82ª\83_\83E\83\93\83\8d\81[\83h\82Å\82«\82Ü\82¹\82ñ\82Å\82µ\82½\81B",-1,16,16,138,10\r
-    LTEXT           "",UPDOWN_ERR_FNAME,7,4,168,8,SS_NOPREFIX\r
-    EDITTEXT        UPDOWN_ERR_MSG,7,28,168,12,ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER,WS_EX_STATICEDGE\r
+    CONTROL         "\8cã\82Å\8fã\8f\91\82«(&O)",DOWN_EXIST_OVW,"Button",BS_AUTORADIOBUTTON | WS_GROUP,7,46,99,10\r
+    CONTROL         "\8cã\82Å\83\8a\83W\83\85\81[\83\80(&R)",DOWN_EXIST_RESUME,"Button",BS_AUTORADIOBUTTON,7,58,99,10\r
+    CONTROL         "\83_\83E\83\93\83\8d\81[\83h\82µ\82È\82¢(&N)",DOWN_EXIST_IGNORE,"Button",BS_AUTORADIOBUTTON,7,70,99,10\r
+    DEFPUSHBUTTON   "OK",IDOK,8,85,50,14,WS_GROUP\r
+    PUSHBUTTON      "\88È\8d~\91S\82Ä(&A)",IDOK_ALL,63,85,50,14\r
+    PUSHBUTTON      "\91S\82Ä\92\86\8e~(&S)",IDCANCEL,118,85,50,14\r
+    PUSHBUTTON      "\83w\83\8b\83v",9,173,85,41,14\r
+    LTEXT           "\82ª\83_\83E\83\93\83\8d\81[\83h\82Å\82«\82Ü\82¹\82ñ\82Å\82µ\82½\81B",-1,7,16,184,10\r
+    LTEXT           "",UPDOWN_ERR_FNAME,7,4,184,8,SS_NOPREFIX\r
+    EDITTEXT        UPDOWN_ERR_MSG,7,28,209,12,ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER,WS_EX_STATICEDGE\r
 END\r
 \r
-uperr_dlg DIALOGEX 0, 0, 182, 65\r
+uperr_dlg DIALOG  0, 0, 223, 103\r
 STYLE DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | WS_POPUP | WS_CAPTION\r
 CAPTION "FFFTP\81F\83G\83\89\81["\r
-FONT 9, "\82l\82\82o\83S\83V\83b\83N", 0, 0, 0x1\r
+FONT 9, "\82l\82\82o\83S\83V\83b\83N"\r
 BEGIN\r
-    DEFPUSHBUTTON   "\82±\82Ì\83t\83@\83C\83\8b\82ð\92\86\8e~",IDOK,9,47,76,14\r
-    PUSHBUTTON      "\91S\82Ä\92\86\8e~",IDCANCEL,95,47,76,14\r
-    LTEXT           "\82ª\83A\83b\83v\83\8d\81[\83h\82Å\82«\82Ü\82¹\82ñ\82Å\82µ\82½\81B",-1,21,16,137,10\r
-    LTEXT           "",UPDOWN_ERR_FNAME,7,4,168,8,SS_NOPREFIX\r
-    EDITTEXT        UPDOWN_ERR_MSG,7,29,168,12,ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER,WS_EX_STATICEDGE\r
+    CONTROL         "\8cã\82Å\8fã\8f\91\82«(&O)",DOWN_EXIST_OVW,"Button",BS_AUTORADIOBUTTON | WS_GROUP,7,46,99,10\r
+    CONTROL         "\8cã\82Å\83\8a\83W\83\85\81[\83\80(&R)",DOWN_EXIST_RESUME,"Button",BS_AUTORADIOBUTTON,7,58,99,10\r
+    CONTROL         "\83A\83b\83v\83\8d\81[\83h\82µ\82È\82¢(&N)",DOWN_EXIST_IGNORE,"Button",BS_AUTORADIOBUTTON,7,70,99,10\r
+    DEFPUSHBUTTON   "OK",IDOK,8,85,50,14,WS_GROUP\r
+    PUSHBUTTON      "\88È\8d~\91S\82Ä(&A)",IDOK_ALL,63,85,50,14\r
+    PUSHBUTTON      "\91S\82Ä\92\86\8e~(&S)",IDCANCEL,118,85,50,14\r
+    PUSHBUTTON      "\83w\83\8b\83v",9,173,85,41,14\r
+    LTEXT           "\82ª\83A\83b\83v\83\8d\81[\83h\82Å\82«\82Ü\82¹\82ñ\82Å\82µ\82½\81B",-1,7,16,184,10\r
+    LTEXT           "",UPDOWN_ERR_FNAME,7,4,184,8,SS_NOPREFIX\r
+    EDITTEXT        UPDOWN_ERR_MSG,7,28,209,12,ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER,WS_EX_STATICEDGE\r
 END\r
 \r
 hset_code_dlg DIALOGEX 0, 0, 207, 155\r
@@ -1371,6 +1381,8 @@ BEGIN
     EDITTEXT        HSET_NOOP_INTERVAL,92,42,17,12,ES_AUTOHSCROLL | ES_NUMBER\r
     CONTROL         "Spin1",HSET_NOOP_INTERVAL_SPN,"msctls_updown32",UDS_SETBUDDYINT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,109,41,9,14\r
     LTEXT           "(0\81`300\95b\81F 0=\96³\8cø)",-1,122,44,76,8\r
+    LTEXT           "\93]\91\97\83G\83\89\81[\8e\9e\82Ì\8f\88\97\9d",-1,7,61,81,8\r
+    COMBOBOX        HSET_ERROR_MODE,7,71,71,75,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP\r
 END\r
 \r
 savecrypt_dlg DIALOG  0, 0, 146, 50\r
@@ -1628,17 +1640,17 @@ BEGIN
     downerr_dlg, DIALOG\r
     BEGIN\r
         LEFTMARGIN, 7\r
-        RIGHTMARGIN, 175\r
-        TOPMARGIN, 4\r
-        BOTTOMMARGIN, 61\r
+        RIGHTMARGIN, 216\r
+        TOPMARGIN, 7\r
+        BOTTOMMARGIN, 99\r
     END\r
 \r
     uperr_dlg, DIALOG\r
     BEGIN\r
         LEFTMARGIN, 7\r
-        RIGHTMARGIN, 175\r
-        TOPMARGIN, 4\r
-        BOTTOMMARGIN, 61\r
+        RIGHTMARGIN, 216\r
+        TOPMARGIN, 7\r
+        BOTTOMMARGIN, 99\r
     END\r
 \r
     hset_code_dlg, DIALOG\r
index 73c8472..ed87acc 100644 (file)
 #define HSET_NOOP_INTERVAL              1208\r
 #define HSET_NOOP_INTERVAL_SPN          1209\r
 #define HSET_NETTYPE                    1210\r
+#define HSET_ERROR_MODE                 1211\r
 #define MENU_END                        40001\r
 #define MENU_EXIT                       40001\r
 #define MENU_CONNECT                    40003\r
 #ifndef APSTUDIO_READONLY_SYMBOLS\r
 #define _APS_NEXT_RESOURCE_VALUE        193\r
 #define _APS_NEXT_COMMAND_VALUE         40176\r
-#define _APS_NEXT_CONTROL_VALUE         1211\r
+#define _APS_NEXT_CONTROL_VALUE         1212\r
 #define _APS_NEXT_SYMED_VALUE           101\r
 #endif\r
 #endif\r
index 4a8a85b..6d8d073 100644 (file)
@@ -707,28 +707,38 @@ BEGIN
     PUSHBUTTON      "Test",SOUND_ERROR_TEST,166,88,37,13\r
 END\r
 \r
-downerr_dlg DIALOGEX 0, 0, 159, 65\r
+downerr_dlg DIALOG  0, 0, 223, 103\r
 STYLE DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | WS_POPUP | WS_CAPTION\r
 CAPTION "FFFTP:Error"\r
-FONT 9, "MS Sans Serif", 0, 0, 0x1\r
+FONT 9, "MS Sans Serif"\r
 BEGIN\r
-    DEFPUSHBUTTON   "Cancel this File",IDOK,7,47,82,14\r
-    PUSHBUTTON      "Cancel All",IDCANCEL,102,47,50,14\r
-    LTEXT           "Cannot download following file :",-1,7,4,138,10\r
-    LTEXT           "",UPDOWN_ERR_FNAME,7,16,145,8,SS_NOPREFIX\r
-    EDITTEXT        UPDOWN_ERR_MSG,7,29,145,12,ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER,WS_EX_STATICEDGE\r
+    CONTROL         "&Overwrite later",DOWN_EXIST_OVW,"Button",BS_AUTORADIOBUTTON | WS_GROUP,7,46,99,10\r
+    CONTROL         "&Resume later",DOWN_EXIST_RESUME,"Button",BS_AUTORADIOBUTTON,7,58,99,10\r
+    CONTROL         "&Skip",DOWN_EXIST_IGNORE,"Button",BS_AUTORADIOBUTTON,7,70,99,10\r
+    DEFPUSHBUTTON   "OK",IDOK,8,85,50,14,WS_GROUP\r
+    PUSHBUTTON      "&Do All",IDOK_ALL,63,85,50,14\r
+    PUSHBUTTON      "&Cancel All",IDCANCEL,118,85,50,14\r
+    PUSHBUTTON      "&Help",9,173,85,41,14\r
+    LTEXT           "Cannot download following file :",-1,7,4,184,10\r
+    LTEXT           "",UPDOWN_ERR_FNAME,7,16,184,8,SS_NOPREFIX\r
+    EDITTEXT        UPDOWN_ERR_MSG,7,28,209,12,ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER,WS_EX_STATICEDGE\r
 END\r
 \r
-uperr_dlg DIALOGEX 0, 0, 159, 67\r
+uperr_dlg DIALOG  0, 0, 223, 103\r
 STYLE DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | WS_POPUP | WS_CAPTION\r
 CAPTION "FFFTP:Error"\r
-FONT 9, "MS Sans Serif", 0, 0, 0x1\r
+FONT 9, "MS Sans Serif"\r
 BEGIN\r
-    DEFPUSHBUTTON   "Cancel this File",IDOK,7,49,82,14\r
-    PUSHBUTTON      "Cancel All",IDCANCEL,102,49,50,14\r
-    LTEXT           "Cannot upload following file.",-1,7,4,137,10\r
-    LTEXT           "",UPDOWN_ERR_FNAME,7,17,145,8,SS_NOPREFIX\r
-    EDITTEXT        UPDOWN_ERR_MSG,7,32,153,12,ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER,WS_EX_STATICEDGE\r
+    CONTROL         "&Overwrite later",DOWN_EXIST_OVW,"Button",BS_AUTORADIOBUTTON | WS_GROUP,7,46,99,10\r
+    CONTROL         "&Resume later",DOWN_EXIST_RESUME,"Button",BS_AUTORADIOBUTTON,7,58,99,10\r
+    CONTROL         "&Skip",DOWN_EXIST_IGNORE,"Button",BS_AUTORADIOBUTTON,7,70,99,10\r
+    DEFPUSHBUTTON   "OK",IDOK,8,85,50,14,WS_GROUP\r
+    PUSHBUTTON      "&Do All",IDOK_ALL,63,85,50,14\r
+    PUSHBUTTON      "&Cancel All",IDCANCEL,118,85,50,14\r
+    PUSHBUTTON      "&Help",9,173,85,41,14\r
+    LTEXT           "Cannot upload following file :",-1,7,4,184,10\r
+    LTEXT           "",UPDOWN_ERR_FNAME,7,16,184,8,SS_NOPREFIX\r
+    EDITTEXT        UPDOWN_ERR_MSG,7,28,209,12,ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER,WS_EX_STATICEDGE\r
 END\r
 \r
 hset_code_dlg DIALOGEX 0, 0, 207, 155\r
@@ -1397,6 +1407,8 @@ BEGIN
     EDITTEXT        HSET_NOOP_INTERVAL,92,42,17,12,ES_AUTOHSCROLL | ES_NUMBER\r
     CONTROL         "Spin1",HSET_NOOP_INTERVAL_SPN,"msctls_updown32",UDS_SETBUDDYINT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS,109,41,9,14\r
     LTEXT           "(0 to 300sec: 0=Never)",-1,122,44,76,8\r
+    LTEXT           "When transfer errors",-1,7,61,81,8\r
+    COMBOBOX        HSET_ERROR_MODE,7,71,71,75,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP\r
 END\r
 \r
 savecrypt_dlg DIALOG  0, 0, 146, 50\r
@@ -1654,17 +1666,17 @@ BEGIN
     downerr_dlg, DIALOG\r
     BEGIN\r
         LEFTMARGIN, 7\r
-        RIGHTMARGIN, 152\r
-        TOPMARGIN, 4\r
-        BOTTOMMARGIN, 61\r
+        RIGHTMARGIN, 216\r
+        TOPMARGIN, 7\r
+        BOTTOMMARGIN, 99\r
     END\r
 \r
     uperr_dlg, DIALOG\r
     BEGIN\r
         LEFTMARGIN, 7\r
-        RIGHTMARGIN, 152\r
-        TOPMARGIN, 4\r
-        BOTTOMMARGIN, 63\r
+        RIGHTMARGIN, 216\r
+        TOPMARGIN, 7\r
+        BOTTOMMARGIN, 99\r
     END\r
 \r
     hset_code_dlg, DIALOG\r
index 828460d..8e996d5 100644 (file)
 #define HSET_NOOP_INTERVAL              1208\r
 #define HSET_NOOP_INTERVAL_SPN          1209\r
 #define HSET_NETTYPE                    1210\r
+#define HSET_ERROR_MODE                 1211\r
 #define MENU_END                        40001\r
 #define MENU_EXIT                       40001\r
 #define MENU_CONNECT                    40003\r
 #ifndef APSTUDIO_READONLY_SYMBOLS\r
 #define _APS_NEXT_RESOURCE_VALUE        193\r
 #define _APS_NEXT_COMMAND_VALUE         40176\r
-#define _APS_NEXT_CONTROL_VALUE         1211\r
+#define _APS_NEXT_CONTROL_VALUE         1212\r
 #define _APS_NEXT_SYMED_VALUE           101\r
 #endif\r
 #endif\r
index d194ab2..edcb5dd 100644 (file)
--- a/common.h
+++ b/common.h
@@ -963,6 +963,9 @@ typedef struct {
        int CurNetType;                                         /* 接続中のネットワークの種類 (NTYPE_xxx) */\r
        // 自動切断対策\r
        int NoopInterval;                                       /* 無意味なコマンドを送信する間隔(秒数、0で無効)*/\r
+       // 再転送対応\r
+       int TransferErrorMode;                          /* 転送エラー時の処理 (EXIST_xxx) */\r
+       int TransferErrorNotify;                        /* 転送エラー時に確認ダイアログを出すかどうか (YES/NO) */\r
 } HOSTDATA;\r
 \r
 \r
@@ -1024,6 +1027,9 @@ typedef struct historydata {
        int NetType;                                            /* ネットワークの種類 (NTYPE_xxx) */\r
        // 自動切断対策\r
        int NoopInterval;                                       /* NOOPコマンドを送信する間隔(秒数、0で無効)*/\r
+       // 再転送対応\r
+       int TransferErrorMode;                          /* 転送エラー時の処理 (EXIST_xxx) */\r
+       int TransferErrorNotify;                        /* 転送エラー時に確認ダイアログを出すかどうか (YES/NO) */\r
        struct historydata *Next;\r
 } HISTORYDATA;\r
 \r
@@ -1462,6 +1468,9 @@ int AskUseMLSD(void);
 int AskCurNetType(void);\r
 // 自動切断対策\r
 int AskNoopInterval(void);\r
+// 再転送対応\r
+int AskTransferErrorMode(void);\r
+int AskTransferErrorNotify(void);\r
 \r
 /*===== cache.c =====*/\r
 \r
index 3f3acf5..bebf227 100644 (file)
--- a/connect.c
+++ b/connect.c
@@ -2977,3 +2977,14 @@ int AskNoopInterval(void)
        return(CurHost.NoopInterval);\r
 }\r
 \r
+// 再転送対応\r
+int AskTransferErrorMode(void)\r
+{\r
+       return(CurHost.TransferErrorMode);\r
+}\r
+\r
+int AskTransferErrorNotify(void)\r
+{\r
+       return(CurHost.TransferErrorNotify);\r
+}\r
+\r
index b4d4e3d..f17a776 100644 (file)
@@ -55,6 +55,10 @@ Changes in Ver.1.99
 -- Added a feature to send commands for keep alive.\r
    This is disabled by default.\r
 \r
+-- Reduced chance of stopping transfer when numerous files are transfered.\r
+\r
+-- Added a feature to retry transfering files if failed.\r
+\r
 \r
 Outline\r
 -------\r
index 3e49742..ebee186 100644 (file)
@@ -27,6 +27,10 @@ Changes in Ver.1.99
 -- Added a feature to send commands for keep alive.\r
    This is disabled by default.\r
 \r
+-- Reduced chance of stopping transfer when numerous files are transfered.\r
+\r
+-- Added a feature to retry transfering files if failed.\r
+\r
 Changes in Ver.1.98c\r
 --------------------\r
 \r
index 4bc5754..7c31fba 100644 (file)
@@ -62,6 +62,10 @@ Ver 1.99
 \81E\83z\83X\83g\82Æ\82Ì\90Ú\91±\82ð\88Û\8e\9d\82·\82é\82½\82ß\82É\88ê\92è\8e\9e\8aÔ\82²\82Æ\82É\83R\83}\83\93\83h\82ð\91\97\90M\82·\82é\8b@\94\\82ð\r
 \81@\92Ç\89Á\82µ\82Ü\82µ\82½\81B\82½\82¾\82µ\82±\82Ì\8b@\94\\82Í\83f\83t\83H\83\8b\83g\82Å\82Í\96³\8cø\82É\90Ý\92è\82³\82ê\82Ü\82·\81B\r
 \r
+\81E\91å\97Ê\82Ì\83t\83@\83C\83\8b\82ð\93]\91\97\82µ\82½\8e\9e\82É\93r\92\86\82Å\93]\91\97\82ª\8fI\97¹\82·\82é\83o\83O\82ð\8cy\8c¸\82µ\82Ü\82µ\82½\81B\r
+\r
+\81E\83t\83@\83C\83\8b\82Ì\93]\91\97\82É\8e¸\94s\82µ\82½\8fê\8d\87\82É\93]\91\97\82ð\82â\82è\92¼\82·\8b@\94\\82ð\92Ç\89Á\82µ\82Ü\82µ\82½\81B\r
+\r
 \r
 Ver 1.96d\88È\91O\82Ö\96ß\82·\8fê\8d\87\r
 -----------------------\r
index 621189a..b451a08 100644 (file)
@@ -65,6 +65,10 @@ FFFTP
 \81E\8f\89\89ñ\8bN\93®\8e\9e\82Ì\83E\83B\83\93\83h\83E\82Ì\83T\83C\83Y\82Æ\83\8c\83C\83A\83E\83g\82ð\95Ï\8dX\82µ\82Ü\82µ\82½\81i\88È\91O\82Ì\r
 \81@\83o\81[\83W\83\87\83\93\82Ì\90Ý\92è\82ª\8ec\82Á\82Ä\82¢\82é\8fê\8d\87\82Í\82»\82Ì\90Ý\92è\82ª\93K\97p\82³\82ê\82Ü\82·\81j\81B\r
 \r
+\81E\91å\97Ê\82Ì\83t\83@\83C\83\8b\82ð\93]\91\97\82µ\82½\8e\9e\82É\93r\92\86\82Å\93]\91\97\82ª\8fI\97¹\82·\82é\83o\83O\82ð\8cy\8c¸\82µ\82Ü\82µ\82½\81B\r
+\r
+\81E\83t\83@\83C\83\8b\82Ì\93]\91\97\82É\8e¸\94s\82µ\82½\8fê\8d\87\82É\93]\91\97\82ð\82â\82è\92¼\82·\8b@\94\\82ð\92Ç\89Á\82µ\82Ü\82µ\82½\81B\r
+\r
 \81¡Ver 1.98b\r
 \r
 \81E\90M\97\8a\82Å\82«\82È\82¢DLL\82Ì\93Ç\82Ý\8d\9e\82Ý\82ð\96h\82®\8b@\94\\82ð\92Ç\89Á\82µ\82Ü\82µ\82½\81BMicrosoft\82Ì\8f\90\96¼\82ª\r
index 340a45b..b4c338d 100644 (file)
--- a/getput.c
+++ b/getput.c
@@ -88,7 +88,9 @@ static int DownLoadNonPassive(TRANSPACKET *Pkt, int *CancelCheckWork);
 static int DownLoadPassive(TRANSPACKET *Pkt, int *CancelCheckWork);\r
 static int DownLoadFile(TRANSPACKET *Pkt, SOCKET dSkt, int CreateMode, int *CancelCheckWork);\r
 static void DispDownloadFinishMsg(TRANSPACKET *Pkt, int iRetCode);\r
-static int DispUpDownErrDialog(int ResID, HWND hWnd, char *Fname);\r
+// 再転送対応\r
+//static int DispUpDownErrDialog(int ResID, HWND hWnd, char *Fname);\r
+static int DispUpDownErrDialog(int ResID, HWND hWnd, TRANSPACKET *Pkt);\r
 static BOOL CALLBACK UpDownErrorDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);\r
 static int SetDownloadResume(TRANSPACKET *Pkt, int ProcMode, LONGLONG Size, int *Mode, int *CancelCheckWork);\r
 static BOOL CALLBACK NoResumeWndProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);\r
@@ -159,6 +161,9 @@ static HANDLE hErrMsgMutex;
 \r
 // 同時接続対応\r
 static int WaitForMainThread = NO;\r
+// 再転送対応\r
+static int TransferErrorMode = EXIST_OVW;\r
+static int TransferErrorNotify = NO;\r
 \r
 /*===== 外部参照 =====*/\r
 \r
@@ -377,6 +382,9 @@ int RemoveTmpTransFileListItem(TRANSPACKET **Base, int Num)
 \r
 void AddTransFileList(TRANSPACKET *Pkt)\r
 {\r
+       // 同時接続対応\r
+       TRANSPACKET *Pos;\r
+\r
        DispTransPacket(Pkt);\r
 \r
        // 同時接続対応\r
@@ -388,6 +396,13 @@ void AddTransFileList(TRANSPACKET *Pkt)
                Sleep(1);\r
        }\r
 \r
+       // 同時接続対応\r
+       Pos = TransPacketBase;\r
+       if(Pos != NULL)\r
+       {\r
+               while(Pos->Next != NULL)\r
+                       Pos = Pos->Next;\r
+       }\r
        if(AddTmpTransFileList(Pkt, &TransPacketBase) == FFFTP_SUCCESS)\r
        {\r
                if((strncmp(Pkt->Cmd, "RETR", 4) == 0) ||\r
@@ -399,7 +414,12 @@ void AddTransFileList(TRANSPACKET *Pkt)
        }\r
        // 同時接続対応\r
        if(NextTransPacketBase == NULL)\r
-               NextTransPacketBase = TransPacketBase;\r
+       {\r
+               if(Pos)\r
+                       NextTransPacketBase = Pos->Next;\r
+               else\r
+                       NextTransPacketBase = TransPacketBase;\r
+       }\r
        ReleaseMutex(hListAccMutex);\r
        // 同時接続対応\r
        WaitForMainThread = NO;\r
@@ -445,7 +465,7 @@ void AppendTransFileList(TRANSPACKET *Pkt)
        }\r
        // 同時接続対応\r
        if(NextTransPacketBase == NULL)\r
-               NextTransPacketBase = TransPacketBase;\r
+               NextTransPacketBase = Pkt;\r
 \r
        while(Pkt != NULL)\r
        {\r
@@ -549,7 +569,7 @@ static void EraseTransFileList(void)
        }\r
        TransPacketBase = NotDel;\r
        // 同時接続対応\r
-       NextTransPacketBase = TransPacketBase;\r
+       NextTransPacketBase = NotDel;\r
        TransFiles = 0;\r
        PostMessage(GetMainHwnd(), WM_CHANGE_COND, 0, 0);\r
        ReleaseMutex(hListAccMutex);\r
@@ -1173,6 +1193,10 @@ static ULONG WINAPI TransferThread(void *Dummy)
                                PostMessage(GetMainHwnd(), WM_COMMAND, MAKEWPARAM(MENU_AUTO_EXIT, 0), 0);\r
                                GoExit = NO;\r
                        }\r
+\r
+                       // 再転送対応\r
+                       TransferErrorMode = AskTransferErrorMode();\r
+                       TransferErrorNotify = AskTransferErrorNotify();\r
                }\r
                else\r
                {\r
@@ -2253,8 +2277,19 @@ static void DispDownloadFinishMsg(TRANSPACKET *Pkt, int iRetCode)
                        {\r
                                // 全て中止を選択後にダイアログが表示されるバグ対策\r
 //                             if(DispUpDownErrDialog(downerr_dlg, Pkt->hWndTrans, Fname) == NO)\r
-                               if(Canceled[Pkt->ThreadCount] == NO && ClearAll == NO && DispUpDownErrDialog(downerr_dlg, Pkt->hWndTrans, Fname) == NO)\r
-                                       ClearAll = YES;\r
+                               // 再転送対応\r
+//                             if(Canceled[Pkt->ThreadCount] == NO && ClearAll == NO && DispUpDownErrDialog(downerr_dlg, Pkt->hWndTrans, Fname) == NO)\r
+//                                     ClearAll = YES;\r
+                               if(Canceled[Pkt->ThreadCount] == NO && ClearAll == NO)\r
+                               {\r
+                                       if(TransferErrorNotify == YES && DispUpDownErrDialog(downerr_dlg, Pkt->hWndTrans, Pkt) == NO)\r
+                                               ClearAll = YES;\r
+                                       else\r
+                                       {\r
+                                               Pkt->Mode = TransferErrorMode;\r
+                                               AddTransFileList(Pkt);\r
+                                       }\r
+                               }\r
                        }\r
                }\r
                else\r
@@ -2288,13 +2323,17 @@ static void DispDownloadFinishMsg(TRANSPACKET *Pkt, int iRetCode)
 *              int ステータス (YES=中止/NO=全て中止)\r
 *----------------------------------------------------------------------------*/\r
 \r
-static int DispUpDownErrDialog(int ResID, HWND hWnd, char *Fname)\r
+// 再転送対応\r
+//static int DispUpDownErrDialog(int ResID, HWND hWnd, char *Fname)\r
+static int DispUpDownErrDialog(int ResID, HWND hWnd, TRANSPACKET *Pkt)\r
 {\r
        if(hWnd == NULL)\r
                hWnd = GetMainHwnd();\r
 \r
        SoundPlay(SND_ERROR);\r
-       return(DialogBoxParam(GetFtpInst(), MAKEINTRESOURCE(ResID), hWnd, UpDownErrorDialogProc, (LPARAM)Fname));\r
+       // 再転送対応\r
+//     return(DialogBoxParam(GetFtpInst(), MAKEINTRESOURCE(ResID), hWnd, UpDownErrorDialogProc, (LPARAM)Fname));\r
+       return(DialogBoxParam(GetFtpInst(), MAKEINTRESOURCE(ResID), hWnd, UpDownErrorDialogProc, (LPARAM)Pkt));\r
 }\r
 \r
 \r
@@ -2312,29 +2351,53 @@ static int DispUpDownErrDialog(int ResID, HWND hWnd, char *Fname)
 \r
 static BOOL CALLBACK UpDownErrorDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
 {\r
+       static TRANSPACKET *Pkt;\r
+       static const RADIOBUTTON DownExistButton[] = {\r
+               { DOWN_EXIST_OVW, EXIST_OVW },\r
+               { DOWN_EXIST_RESUME, EXIST_RESUME },\r
+               { DOWN_EXIST_IGNORE, EXIST_IGNORE }\r
+       };\r
+       #define DOWNEXISTBUTTONS        (sizeof(DownExistButton)/sizeof(RADIOBUTTON))\r
+\r
        switch (message)\r
        {\r
                case WM_INITDIALOG :\r
-                       SendDlgItemMessage(hDlg, UPDOWN_ERR_FNAME, WM_SETTEXT, 0, (LPARAM)lParam);\r
+                       Pkt = (TRANSPACKET *)lParam;\r
+//                     SendDlgItemMessage(hDlg, UPDOWN_ERR_FNAME, WM_SETTEXT, 0, (LPARAM)lParam);\r
+                       SendDlgItemMessage(hDlg, UPDOWN_ERR_FNAME, WM_SETTEXT, 0, (LPARAM)Pkt->RemoteFile);\r
                        // 同時接続対応\r
 //                     SendDlgItemMessage(hDlg, UPDOWN_ERR_MSG, WM_SETTEXT, 0, (LPARAM)ErrMsg);\r
                        SendDlgItemMessage(hDlg, UPDOWN_ERR_MSG, WM_SETTEXT, 0, (LPARAM)GetErrMsg());\r
+\r
+                       if((Pkt->Type == TYPE_A) || (Pkt->ExistSize <= 0))\r
+                               EnableWindow(GetDlgItem(hDlg, DOWN_EXIST_RESUME), FALSE);\r
+\r
+                       SetRadioButtonByValue(hDlg, TransferErrorMode, DownExistButton, DOWNEXISTBUTTONS);\r
                        return(TRUE);\r
 \r
                case WM_COMMAND :\r
                        switch(GET_WM_COMMAND_ID(wParam, lParam))\r
                        {\r
+                               case IDOK_ALL :\r
+                                       TransferErrorNotify = NO;\r
+                                       /* ここに break はない */\r
+\r
                                case IDOK :\r
+                                       TransferErrorMode = AskRadioButtonValue(hDlg, DownExistButton, DOWNEXISTBUTTONS);\r
                                        EndDialog(hDlg, YES);\r
                                        break;\r
 \r
                                case IDCANCEL :\r
                                        EndDialog(hDlg, NO);\r
                                        break;\r
+\r
+                               case IDHELP :\r
+//                                     hHelpWin = HtmlHelp(NULL, AskHelpFilePath(), HH_HELP_CONTEXT, IDH_HELP_TOPIC_0000009);\r
+                                       break;\r
                        }\r
-                       return(TRUE);\r
+            return(TRUE);\r
        }\r
-    return(FALSE);\r
+       return(FALSE);\r
 }\r
 \r
 \r
@@ -3452,8 +3515,19 @@ static void DispUploadFinishMsg(TRANSPACKET *Pkt, int iRetCode)
                        {\r
                                // 全て中止を選択後にダイアログが表示されるバグ対策\r
 //                             if(DispUpDownErrDialog(uperr_dlg, Pkt->hWndTrans, Pkt->LocalFile) == NO)\r
-                               if(Canceled[Pkt->ThreadCount] == NO && ClearAll == NO && DispUpDownErrDialog(uperr_dlg, Pkt->hWndTrans, Pkt->LocalFile) == NO)\r
-                                       ClearAll = YES;\r
+                               // 再転送対応\r
+//                             if(Canceled[Pkt->ThreadCount] == NO && ClearAll == NO && DispUpDownErrDialog(uperr_dlg, Pkt->hWndTrans, Pkt->LocalFile) == NO)\r
+//                                     ClearAll = YES;\r
+                               if(Canceled[Pkt->ThreadCount] == NO && ClearAll == NO)\r
+                               {\r
+                                       if(TransferErrorNotify == YES && DispUpDownErrDialog(uperr_dlg, Pkt->hWndTrans, Pkt) == NO)\r
+                                               ClearAll = YES;\r
+                                       else\r
+                                       {\r
+                                               Pkt->Mode = TransferErrorMode;\r
+                                               AddTransFileList(Pkt);\r
+                                       }\r
+                               }\r
                        }\r
                }\r
                else\r
index db993ac..8bd01e1 100644 (file)
--- a/history.c
+++ b/history.c
@@ -241,6 +241,9 @@ static void CopyHostToHistory(HOSTDATA *Host, HISTORYDATA *New)
        New->NetType = Host->NetType;\r
        // 自動切断対策\r
        New->NoopInterval = Host->NoopInterval;\r
+       // 再転送対応\r
+       New->TransferErrorMode = Host->TransferErrorMode;\r
+       New->TransferErrorNotify = Host->TransferErrorNotify;\r
        return;\r
 }\r
 \r
@@ -305,6 +308,9 @@ void CopyHistoryToHost(HISTORYDATA *Hist, HOSTDATA *Host)
        Host->NetType = Hist->NetType;\r
        // 自動切断対策\r
        Host->NoopInterval = Hist->NoopInterval;\r
+       // 再転送対応\r
+       Host->TransferErrorMode = Hist->TransferErrorMode;\r
+       Host->TransferErrorNotify = Hist->TransferErrorNotify;\r
        return;\r
 }\r
 \r
index 0567946..25c758d 100644 (file)
--- a/hostman.c
+++ b/hostman.c
@@ -1045,6 +1045,9 @@ int CopyHostFromListInConnect(int Num, HOSTDATA *Set)
                Set->NetType = Pos->Set.NetType;\r
                // 自動切断対策\r
                Set->NoopInterval = Pos->Set.NoopInterval;\r
+               // 再転送対応\r
+               Set->TransferErrorMode = Pos->Set.TransferErrorMode;\r
+               Set->TransferErrorNotify = Pos->Set.TransferErrorNotify;\r
                Sts = FFFTP_SUCCESS;\r
        }\r
        return(Sts);\r
@@ -1338,6 +1341,9 @@ void CopyDefaultHost(HOSTDATA *Set)
        Set->CurNetType = NTYPE_AUTO;\r
        // 自動切断対策\r
        Set->NoopInterval = 0;\r
+       // 再転送対応\r
+       Set->TransferErrorMode = EXIST_OVW;\r
+       Set->TransferErrorNotify = YES;\r
        return;\r
 }\r
 \r
@@ -2225,6 +2231,17 @@ static BOOL CALLBACK Adv3SettingProc(HWND hDlg, UINT iMessage, WPARAM wParam, LP
        NMHDR *pnmhdr;\r
 //     int Num;\r
 \r
+       // UTF-8対応\r
+       static const RADIOBUTTON KanjiButton[] = {\r
+               { HSET_NO_CNV, KANJI_NOCNV },\r
+               { HSET_SJIS_CNV, KANJI_SJIS },\r
+               { HSET_JIS_CNV, KANJI_JIS },\r
+               { HSET_EUC_CNV, KANJI_EUC },\r
+               { HSET_UTF8N_CNV, KANJI_UTF8N },\r
+               { HSET_UTF8BOM_CNV, KANJI_UTF8BOM }\r
+       };\r
+       #define KANJIBUTTONS    (sizeof(KanjiButton)/sizeof(RADIOBUTTON))\r
+\r
        switch (iMessage)\r
        {\r
                case WM_INITDIALOG :\r
@@ -2235,6 +2252,20 @@ static BOOL CALLBACK Adv3SettingProc(HWND hDlg, UINT iMessage, WPARAM wParam, LP
                        SendDlgItemMessage(hDlg, HSET_NOOP_INTERVAL, EM_LIMITTEXT, (WPARAM)3, 0);\r
                        SetDecimalText(hDlg, HSET_NOOP_INTERVAL, TmpHost.NoopInterval);\r
                        SendDlgItemMessage(hDlg, HSET_NOOP_INTERVAL_SPN, UDM_SETRANGE, 0, (LPARAM)MAKELONG(300, 0));\r
+                       SendDlgItemMessage(hDlg, HSET_ERROR_MODE, CB_ADDSTRING, 0, (LPARAM)MSGJPN335);\r
+                       SendDlgItemMessage(hDlg, HSET_ERROR_MODE, CB_ADDSTRING, 0, (LPARAM)MSGJPN336);\r
+                       SendDlgItemMessage(hDlg, HSET_ERROR_MODE, CB_ADDSTRING, 0, (LPARAM)MSGJPN337);\r
+                       SendDlgItemMessage(hDlg, HSET_ERROR_MODE, CB_ADDSTRING, 0, (LPARAM)MSGJPN338);\r
+                       if(TmpHost.TransferErrorNotify == YES)\r
+                               SendDlgItemMessage(hDlg, HSET_ERROR_MODE, CB_SETCURSEL, 0, 0);\r
+                       else if(TmpHost.TransferErrorMode == EXIST_OVW)\r
+                               SendDlgItemMessage(hDlg, HSET_ERROR_MODE, CB_SETCURSEL, 1, 0);\r
+                       else if(TmpHost.TransferErrorMode == EXIST_RESUME)\r
+                               SendDlgItemMessage(hDlg, HSET_ERROR_MODE, CB_SETCURSEL, 2, 0);\r
+                       else if(TmpHost.TransferErrorMode == EXIST_IGNORE)\r
+                               SendDlgItemMessage(hDlg, HSET_ERROR_MODE, CB_SETCURSEL, 3, 0);\r
+                       else\r
+                               SendDlgItemMessage(hDlg, HSET_ERROR_MODE, CB_SETCURSEL, 0, 0);\r
                        return(TRUE);\r
 \r
                case WM_NOTIFY:\r
@@ -2247,6 +2278,25 @@ static BOOL CALLBACK Adv3SettingProc(HWND hDlg, UINT iMessage, WPARAM wParam, LP
                                        TmpHost.ReuseCmdSkt = SendDlgItemMessage(hDlg, HSET_REUSE_SOCKET, BM_GETCHECK, 0, 0);\r
                                        TmpHost.NoopInterval = GetDecimalText(hDlg, HSET_NOOP_INTERVAL);\r
                                        CheckRange2(&TmpHost.NoopInterval, 300, 0);\r
+                                       switch(SendDlgItemMessage(hDlg, HSET_ERROR_MODE, CB_GETCURSEL, 0, 0))\r
+                                       {\r
+                                       case 0:\r
+                                               TmpHost.TransferErrorMode = EXIST_OVW;\r
+                                               TmpHost.TransferErrorNotify = YES;\r
+                                               break;\r
+                                       case 1:\r
+                                               TmpHost.TransferErrorMode = EXIST_OVW;\r
+                                               TmpHost.TransferErrorNotify = NO;\r
+                                               break;\r
+                                       case 2:\r
+                                               TmpHost.TransferErrorMode = EXIST_RESUME;\r
+                                               TmpHost.TransferErrorNotify = NO;\r
+                                               break;\r
+                                       case 3:\r
+                                               TmpHost.TransferErrorMode = EXIST_IGNORE;\r
+                                               TmpHost.TransferErrorNotify = NO;\r
+                                               break;\r
+                                       }\r
                                        Apply = YES;\r
                                        break;\r
 \r
index 5441ec3..fce4785 100644 (file)
 #define MSGJPN332              "Auto"\r
 #define MSGJPN333              "TCP/IPv4"\r
 #define MSGJPN334              "TCP/IPv6"\r
+#define MSGJPN335              "Ask everytime"\r
+#define MSGJPN336              "Overwrite all later"\r
+#define MSGJPN337              "Resume all later"\r
+#define MSGJPN338              "Skip all"\r
index 710c0e9..fbb560f 100644 (file)
 #define MSGJPN332              "Auto"\r
 #define MSGJPN333              "TCP/IPv4"\r
 #define MSGJPN334              "TCP/IPv6"\r
+#define MSGJPN335              "Ask everytime"\r
+#define MSGJPN336              "Overwrite all later"\r
+#define MSGJPN337              "Resume all later"\r
+#define MSGJPN338              "Skip all"\r
index f1999b7..02e3e6c 100644 (file)
 #define MSGJPN332              "\xE8\x87\xAA\xE5\x8B\x95"\r
 #define MSGJPN333              "TCP/IPv4"\r
 #define MSGJPN334              "TCP/IPv6"\r
+#define MSGJPN335              "\xE6\xAF\x8E\xE5\x9B\x9E\xE5\xB0\x8B\xE3\x81\xAD\xE3\x82\x8B"\r
+#define MSGJPN336              "\xE5\x85\xA8\xE3\x81\xA6\xE5\xBE\x8C\xE3\x81\xA7\xE4\xB8\x8A\xE6\x9B\xB8\xE3\x81\x8D"\r
+#define MSGJPN337              "\xE5\x85\xA8\xE3\x81\xA6\xE5\xBE\x8C\xE3\x81\xA7\xE3\x83\xAA\xE3\x82\xB8\xE3\x83\xA5\xE3\x83\xBC\xE3\x83\xA0"\r
+#define MSGJPN338              "\xE5\x85\xA8\xE3\x81\xA6\xE3\x82\xB9\xE3\x82\xAD\xE3\x83\x83\xE3\x83\x97"\r
index 6d75592..68a8a23 100644 (file)
 #define MSGJPN332              "\8e©\93®"\r
 #define MSGJPN333              "TCP/IPv4"\r
 #define MSGJPN334              "TCP/IPv6"\r
+#define MSGJPN335              "\96\88\89ñ\90q\82Ë\82é"\r
+#define MSGJPN336              "\91S\82Ä\8cã\82Å\8fã\8f\91\82«"\r
+#define MSGJPN337              "\91S\82Ä\8cã\82Å\83\8a\83W\83\85\81[\83\80"\r
+#define MSGJPN338              "\91S\82Ä\83X\83L\83b\83v"\r
index 8f41e39..825501f 100644 (file)
@@ -493,6 +493,9 @@ void SaveRegistory(void)
                                                        SaveIntNum(hKey5, "NetType", Hist.NetType, DefaultHist.NetType);\r
                                                        // 自動切断対策\r
                                                        SaveIntNum(hKey5, "Noop", Hist.NoopInterval, DefaultHist.NoopInterval);\r
+                                                       // 再転送対応\r
+                                                       SaveIntNum(hKey5, "ErrMode", Hist.TransferErrorMode, DefaultHist.TransferErrorMode);\r
+                                                       SaveIntNum(hKey5, "ErrNotify", Hist.TransferErrorNotify, DefaultHist.TransferErrorNotify);\r
 \r
                                                        CloseSubKey(hKey5);\r
                                                        n++;\r
@@ -577,6 +580,9 @@ void SaveRegistory(void)
                                                        SaveIntNum(hKey5, "NetType", Host.NetType, DefaultHost.NetType);\r
                                                        // 自動切断対策\r
                                                        SaveIntNum(hKey5, "Noop", Host.NoopInterval, DefaultHost.NoopInterval);\r
+                                                       // 再転送対応\r
+                                                       SaveIntNum(hKey5, "ErrMode", Host.TransferErrorMode, DefaultHost.TransferErrorMode);\r
+                                                       SaveIntNum(hKey5, "ErrNotify", Host.TransferErrorNotify, DefaultHost.TransferErrorNotify);\r
                                                }\r
                                                CloseSubKey(hKey5);\r
                                        }\r
@@ -857,6 +863,9 @@ int LoadRegistory(void)
                                        ReadIntValueFromReg(hKey5, "NetType", &Hist.NetType);\r
                                        // 自動切断対策\r
                                        ReadIntValueFromReg(hKey5, "Noop", &Hist.NoopInterval);\r
+                                       // 再転送対応\r
+                                       ReadIntValueFromReg(hKey5, "ErrMode", &Hist.TransferErrorMode);\r
+                                       ReadIntValueFromReg(hKey5, "ErrNotify", &Hist.TransferErrorNotify);\r
 \r
                                        CloseSubKey(hKey5);\r
                                        AddHistoryToHistory(&Hist);\r
@@ -950,6 +959,9 @@ int LoadRegistory(void)
                                        ReadIntValueFromReg(hKey5, "NetType", &Host.NetType);\r
                                        // 自動切断対策\r
                                        ReadIntValueFromReg(hKey5, "Noop", &Host.NoopInterval);\r
+                                       // 再転送対応\r
+                                       ReadIntValueFromReg(hKey5, "ErrMode", &Host.TransferErrorMode);\r
+                                       ReadIntValueFromReg(hKey5, "ErrNotify", &Host.TransferErrorNotify);\r
 \r
                                        CloseSubKey(hKey5);\r
 \r