1 /*=============================================================================
\r
3 *
\83_
\83E
\83\93\83\8d\81[
\83h
\81^
\83A
\83b
\83v
\83\8d\81[
\83h
\r
5 ===============================================================================
\r
6 / Copyright (C) 1997-2007 Sota. All rights reserved.
\r
8 / Redistribution and use in source and binary forms, with or without
\r
9 / modification, are permitted provided that the following conditions
\r
12 / 1. Redistributions of source code must retain the above copyright
\r
13 / notice, this list of conditions and the following disclaimer.
\r
14 / 2. Redistributions in binary form must reproduce the above copyright
\r
15 / notice, this list of conditions and the following disclaimer in the
\r
16 / documentation and/or other materials provided with the distribution.
\r
18 / THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
\r
19 / IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
\r
20 / OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
\r
21 / IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
\r
22 / INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
\r
23 / BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
\r
24 / USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
\r
25 / ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
\r
26 / (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
\r
27 / THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
\r
28 /============================================================================*/
\r
30 /*
\82±
\82Ì
\83\
\81[
\83X
\82Í
\88ê
\95\94\81AWS_FTP Version 93.12.05
\82Ì
\83\
\81[
\83X
\82ð
\8eQ
\8dl
\82É
\82µ
\82Ü
\82µ
\82½
\81B */
\r
31 /*
\83X
\83\8c\83b
\83h
\82Ì
\8dì
\90¬
\81^
\8fI
\97¹
\82É
\8aÖ
\82µ
\82Ä
\81A
\94ó
\8cû
\93a
\8dì
\90¬
\82Ì
\83p
\83b
\83`
\82ð
\91g
\82Ý
\8d\9e\82Ý
\82Ü
\82µ
\82½
\81B */
\r
34 \88ê
\95\94\81A
\8d\82\91¬
\89»
\82Ì
\82½
\82ß
\82Ì
\83R
\81[
\83h
\92Ç
\89Á by H.Shirouzu at 2002/10/02
\r
42 #include <mbstring.h>
\r
44 #include <winsock.h>
\r
45 #include <windowsx.h>
\r
46 #include <commctrl.h>
\r
47 #include <process.h>
\r
50 #include "resource.h"
\r
52 #define SET_BUFFER_SIZE
\r
54 /* Add by H.Shirouzu at 2002/10/02 */
\r
56 #define BUFSIZE (32 * 1024)
\r
57 #define SOCKBUF_SIZE (256 * 1024)
\r
60 #ifdef DISABLE_NETWORK_BUFFERS
\r
62 #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
63 #undef SET_BUFFER_SIZE
\r
66 #define TIMER_DISPLAY 1 /*
\95\
\8e¦
\8dX
\90V
\97p
\83^
\83C
\83}
\82ÌID */
\r
67 #define DISPLAY_TIMING 500 /*
\95\
\8e¦
\8dX
\90V
\8e\9e\8aÔ 0.5
\95b */
\r
69 #define ERR_MSG_LEN 1024
\r
72 /*
\8dí
\8f\9c\8am
\94F
\83_
\83C
\83A
\83\8d\83O
\82Ì
\8fî
\95ñ */
\r
79 /*=====
\83v
\83\8d\83g
\83^
\83C
\83v =====*/
\r
81 static void DispTransPacket(TRANSPACKET *Pkt);
\r
82 static void EraseTransFileList(void);
\r
83 static ULONG WINAPI TransferThread(void *Dummy);
\r
84 static int MakeNonFullPath(TRANSPACKET *Pkt, char *CurDir, char *Tmp);
\r
85 static int DownLoadNonPassive(TRANSPACKET *Pkt, int *CancelCheckWork);
\r
86 static int DownLoadPassive(TRANSPACKET *Pkt, int *CancelCheckWork);
\r
87 static int DownLoadFile(TRANSPACKET *Pkt, SOCKET dSkt, int CreateMode, int *CancelCheckWork);
\r
88 static void DispDownloadFinishMsg(TRANSPACKET *Pkt, int iRetCode);
\r
89 static int DispUpDownErrDialog(int ResID, HWND hWnd, char *Fname);
\r
90 static BOOL CALLBACK UpDownErrorDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
\r
91 static int SetDownloadResume(TRANSPACKET *Pkt, int ProcMode, LONGLONG Size, int *Mode, int *CancelCheckWork);
\r
92 static BOOL CALLBACK NoResumeWndProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);
\r
93 static int DoUpLoad(SOCKET cSkt, TRANSPACKET *Pkt);
\r
94 static int UpLoadNonPassive(TRANSPACKET *Pkt);
\r
95 static int UpLoadPassive(TRANSPACKET *Pkt);
\r
96 static int UpLoadFile(TRANSPACKET *Pkt, SOCKET dSkt);
\r
97 static int TermCodeConvAndSend(TERMCODECONVINFO *tInfo, SOCKET Skt, char *Data, int Size, int Ascii);
\r
98 static void DispUploadFinishMsg(TRANSPACKET *Pkt, int iRetCode);
\r
99 static int SetUploadResume(TRANSPACKET *Pkt, int ProcMode, LONGLONG Size, int *Mode);
\r
100 static LRESULT CALLBACK TransDlgProc(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam);
\r
101 static void DispTransferStatus(HWND hWnd, int End, TRANSPACKET *Pkt);
\r
102 static void DispTransFileInfo(TRANSPACKET *Pkt, char *Title, int SkipButton, int Info);
\r
103 static int GetAdrsAndPort(char *Str, char *Adrs, int *Port, int Max);
\r
104 static int IsSpecialDevice(char *Fname);
\r
105 static int MirrorDelNotify(int Cur, int Notify, TRANSPACKET *Pkt);
\r
106 static BOOL CALLBACK MirrorDeleteDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);
\r
107 static void SetErrorMsg(char *fmt, ...);
\r
109 /*=====
\83\8d\81[
\83J
\83\8b\82È
\83\8f\81[
\83N =====*/
\r
111 static HANDLE hTransferThread;
\r
112 static int fTransferThreadExit = FALSE;
\r
114 static HANDLE hRunMutex; /*
\93]
\91\97\83X
\83\8c\83b
\83h
\8eÀ
\8ds
\83~
\83\85\81[
\83e
\83b
\83N
\83X */
\r
115 static HANDLE hListAccMutex; /*
\93]
\91\97\83t
\83@
\83C
\83\8b\83A
\83N
\83Z
\83X
\97p
\83~
\83\85\81[
\83e
\83b
\83N
\83X */
\r
117 static int TransFiles = 0; /*
\93]
\91\97\91Ò
\82¿
\83t
\83@
\83C
\83\8b\90\94 */
\r
118 static TRANSPACKET *TransPacketBase = NULL; /*
\93]
\91\97\83t
\83@
\83C
\83\8b\83\8a\83X
\83g */
\r
120 static int Canceled; /*
\92\86\8e~
\83t
\83\89\83O YES/NO */
\r
121 static int ClearAll; /*
\91S
\82Ä
\92\86\8e~
\83t
\83\89\83O YES/NO */
\r
123 static int ForceAbort; /*
\93]
\91\97\92\86\8e~
\83t
\83\89\83O */
\r
124 /*
\82±
\82Ì
\83t
\83\89\83O
\82Í
\83X
\83\8c\83b
\83h
\82ð
\8fI
\97¹
\82³
\82¹
\82é
\82Æ
\82«
\82É
\8eg
\82¤ */
\r
126 static LONGLONG AllTransSizeNow; /*
\8d¡
\89ñ
\82Ì
\93]
\91\97\82Å
\93]
\91\97\82µ
\82½
\83T
\83C
\83Y */
\r
127 static time_t TimeStart; /*
\93]
\91\97\8aJ
\8en
\8e\9e\8aÔ */
\r
129 static int KeepDlg = NO; /*
\93]
\91\97\92\86\83_
\83C
\83A
\83\8d\83O
\82ð
\8fÁ
\82³
\82È
\82¢
\82©
\82Ç
\82¤
\82© (YES/NO) */
\r
130 static int MoveToForeground = NO; /*
\83E
\83C
\83\93\83h
\83E
\82ð
\91O
\96Ê
\82É
\88Ú
\93®
\82·
\82é
\82©
\82Ç
\82¤
\82© (YES/NO) */
\r
132 static char CurDir[FMAX_PATH+1] = { "" };
\r
133 static char ErrMsg[ERR_MSG_LEN+7];
\r
135 /*=====
\8aO
\95\94\8eQ
\8fÆ =====*/
\r
138 extern int SaveTimeStamp;
\r
140 // extern int TimeOut;
\r
141 extern int FwallType;
\r
142 extern int MirUpDelNotify;
\r
143 extern int MirDownDelNotify;
\r
144 extern int FolderAttr;
\r
145 extern int FolderAttrNum;
\r
148 /*-----
\83t
\83@
\83C
\83\8b\93]
\91\97\83X
\83\8c\83b
\83h
\82ð
\8bN
\93®
\82·
\82é ----------------------------------------
\r
155 *----------------------------------------------------------------------------*/
\r
157 int MakeTransferThread(void)
\r
161 hListAccMutex = CreateMutex( NULL, FALSE, NULL );
\r
162 hRunMutex = CreateMutex( NULL, TRUE, NULL );
\r
167 fTransferThreadExit = FALSE;
\r
168 hTransferThread = (HANDLE)_beginthreadex(NULL, 0, TransferThread, 0, 0, &dwID);
\r
169 if (hTransferThread == NULL)
\r
170 return(FAIL); /* XXX */
\r
176 /*-----
\83t
\83@
\83C
\83\8b\93]
\91\97\83X
\83\8c\83b
\83h
\82ð
\8fI
\97¹
\82·
\82é ----------------------------------------
\r
183 *----------------------------------------------------------------------------*/
\r
185 void CloseTransferThread(void)
\r
191 fTransferThreadExit = TRUE;
\r
192 while(WaitForSingleObject(hTransferThread, 10) == WAIT_TIMEOUT)
\r
194 BackgrndMessageProc();
\r
197 CloseHandle(hTransferThread);
\r
199 ReleaseMutex( hRunMutex );
\r
201 CloseHandle( hListAccMutex );
\r
202 CloseHandle( hRunMutex );
\r
207 /*-----
\93]
\91\97\82·
\82é
\83t
\83@
\83C
\83\8b\8fî
\95ñ
\82ð
\83\8a\83X
\83g
\82É
\92Ç
\89Á
\82·
\82é --------------------------------
\r
210 * TRANSPACKET *Pkt :
\93]
\91\97\83t
\83@
\83C
\83\8b\8fî
\95ñ
\r
211 * TRANSPACKET **Base :
\83\8a\83X
\83g
\82Ì
\90æ
\93ª
\r
214 * int
\83X
\83e
\81[
\83^
\83X
\r
216 *----------------------------------------------------------------------------*/
\r
218 int AddTmpTransFileList(TRANSPACKET *Pkt, TRANSPACKET **Base)
\r
225 if((Pos = malloc(sizeof(TRANSPACKET))) != NULL)
\r
227 memcpy(Pos, Pkt, sizeof(TRANSPACKET));
\r
235 while(Prev->Next != NULL)
\r
245 /*-----
\93]
\91\97\82·
\82é
\83t
\83@
\83C
\83\8b\8fî
\95ñ
\83\8a\83X
\83g
\82ð
\83N
\83\8a\83A
\82·
\82é --------------------------------
\r
248 * TRANSPACKET **Base :
\83\8a\83X
\83g
\82Ì
\90æ
\93ª
\r
252 *----------------------------------------------------------------------------*/
\r
254 void EraseTmpTransFileList(TRANSPACKET **Base)
\r
271 /*-----
\93]
\91\97\82·
\82é
\83t
\83@
\83C
\83\8b\8fî
\95ñ
\83\8a\83X
\83g
\82©
\82ç
\82P
\82Â
\82Ì
\8fî
\95ñ
\82ð
\8eæ
\82è
\8f\9c\82 --------------------
\r
274 * TRANSPACKET *Pkt :
\93]
\91\97\83t
\83@
\83C
\83\8b\8fî
\95ñ
\r
275 * TRANSPACKET **Base :
\83\8a\83X
\83g
\82Ì
\90æ
\93ª
\r
278 * int
\83X
\83e
\81[
\83^
\83X
\r
280 *----------------------------------------------------------------------------*/
\r
282 int RemoveTmpTransFileListItem(TRANSPACKET **Base, int Num)
\r
304 Prev->Next = Pos->Next;
\r
315 /*-----
\93]
\91\97\82·
\82é
\83t
\83@
\83C
\83\8b\8fî
\95ñ
\82ð
\93]
\91\97\83t
\83@
\83C
\83\8b\83\8a\83X
\83g
\82É
\93o
\98^
\82·
\82é --------------------
\r
318 * TRANSPACKET *Pkt :
\93]
\91\97\83t
\83@
\83C
\83\8b\8fî
\95ñ
\r
322 *----------------------------------------------------------------------------*/
\r
324 void AddTransFileList(TRANSPACKET *Pkt)
\r
326 DispTransPacket(Pkt);
\r
328 WaitForSingleObject(hListAccMutex, INFINITE);
\r
330 if(AddTmpTransFileList(Pkt, &TransPacketBase) == SUCCESS)
\r
332 if((strncmp(Pkt->Cmd, "RETR", 4) == 0) ||
\r
333 (strncmp(Pkt->Cmd, "STOR", 4) == 0))
\r
336 PostMessage(GetMainHwnd(), WM_CHANGE_COND, 0, 0);
\r
339 ReleaseMutex(hListAccMutex);
\r
345 /*-----
\93]
\91\97\83t
\83@
\83C
\83\8b\8fî
\95ñ
\82ð
\93]
\91\97\83t
\83@
\83C
\83\8b\83\8a\83X
\83g
\82É
\92Ç
\89Á
\82·
\82é ------------------------
\r
348 * TRANSPACKET *Pkt :
\93]
\91\97\83t
\83@
\83C
\83\8b\8fî
\95ñ
\r
349 * TRANSPACKET **Base :
\83\8a\83X
\83g
\82Ì
\90æ
\93ª
\r
355 * Pkt
\8e©
\91Ì
\82ð
\83\8a\83X
\83g
\82É
\98A
\8c\8b\82·
\82é
\r
356 *----------------------------------------------------------------------------*/
\r
358 void AppendTransFileList(TRANSPACKET *Pkt)
\r
362 WaitForSingleObject(hListAccMutex, INFINITE);
\r
364 if(TransPacketBase == NULL)
\r
365 TransPacketBase = Pkt;
\r
368 Pos = TransPacketBase;
\r
369 while(Pos->Next != NULL)
\r
376 DispTransPacket(Pkt);
\r
378 if((strncmp(Pkt->Cmd, "RETR", 4) == 0) ||
\r
379 (strncmp(Pkt->Cmd, "STOR", 4) == 0))
\r
382 PostMessage(GetMainHwnd(), WM_CHANGE_COND, 0, 0);
\r
387 ReleaseMutex(hListAccMutex);
\r
392 /*-----
\93]
\91\97\83t
\83@
\83C
\83\8b\8fî
\95ñ
\82ð
\95\
\8e¦
\82·
\82é --------------------------------------------
\r
395 * TRANSPACKET *Pkt :
\93]
\91\97\83t
\83@
\83C
\83\8b\8fî
\95ñ
\r
399 *----------------------------------------------------------------------------*/
\r
401 static void DispTransPacket(TRANSPACKET *Pkt)
\r
403 if((strncmp(Pkt->Cmd, "RETR", 4) == 0) || (strncmp(Pkt->Cmd, "STOR", 4) == 0))
\r
404 DoPrintf("TransList Cmd=%s : %s : %s", Pkt->Cmd, Pkt->RemoteFile, Pkt->LocalFile);
\r
405 else if(strncmp(Pkt->Cmd, "R-", 2) == 0)
\r
406 DoPrintf("TransList Cmd=%s : %s", Pkt->Cmd, Pkt->RemoteFile);
\r
407 else if(strncmp(Pkt->Cmd, "L-", 2) == 0)
\r
408 DoPrintf("TransList Cmd=%s : %s", Pkt->Cmd, Pkt->LocalFile);
\r
409 else if(strncmp(Pkt->Cmd, "MKD", 3) == 0)
\r
411 if(strlen(Pkt->LocalFile) > 0)
\r
412 DoPrintf("TransList Cmd=%s : %s", Pkt->Cmd, Pkt->LocalFile);
\r
414 DoPrintf("TransList Cmd=%s : %s", Pkt->Cmd, Pkt->RemoteFile);
\r
417 DoPrintf("TransList Cmd=%s", Pkt->Cmd);
\r
422 /*-----
\93]
\91\97\83t
\83@
\83C
\83\8b\83\8a\83X
\83g
\82ð
\83N
\83\8a\83A
\82·
\82é ----------------------------------------
\r
429 *----------------------------------------------------------------------------*/
\r
431 static void EraseTransFileList(void)
\r
435 TRANSPACKET *NotDel;
\r
440 WaitForSingleObject(hListAccMutex, INFINITE);
\r
441 New = TransPacketBase;
\r
444 /*
\8dÅ
\8cã
\82Ì"BACKCUR"
\82Í
\95K
\97v
\82È
\82Ì
\82Å
\8fÁ
\82³
\82È
\82¢ */
\r
445 if(strcmp(New->Cmd, "BACKCUR") == 0)
\r
451 NotDel->Next = NULL;
\r
460 TransPacketBase = NotDel;
\r
462 PostMessage(GetMainHwnd(), WM_CHANGE_COND, 0, 0);
\r
463 ReleaseMutex(hListAccMutex);
\r
465 strcpy(Pkt.Cmd, "GOQUIT");
\r
466 AddTransFileList(&Pkt);
\r
471 /*-----
\93]
\91\97\92\86\83_
\83C
\83A
\83\8d\83O
\82ð
\8fÁ
\82³
\82È
\82¢
\82æ
\82¤
\82É
\82·
\82é
\82©
\82Ç
\82¤
\82©
\82ð
\90Ý
\92è --------------------
\r
474 * int Sw :
\93]
\91\97\92\86\83_
\83C
\83A
\83\8d\83O
\82ð
\8fÁ
\82³
\82È
\82¢
\82©
\82Ç
\82¤
\82© (YES/NO)
\r
478 *----------------------------------------------------------------------------*/
\r
480 void KeepTransferDialog(int Sw)
\r
487 /*-----
\8c»
\8dÝ
\93]
\91\97\92\86\82©
\82Ç
\82¤
\82©
\82ð
\95Ô
\82· ----------------------------------------------
\r
493 * int
\83X
\83e
\81[
\83^
\83X (YES/NO=
\93]
\91\97\92\86\82Å
\82Í
\82È
\82¢)
\r
494 *----------------------------------------------------------------------------*/
\r
496 int AskTransferNow(void)
\r
498 return(TransPacketBase != NULL ? YES : NO);
\r
502 /*-----
\93]
\91\97\82·
\82é
\83t
\83@
\83C
\83\8b\82Ì
\90\94\82ð
\95Ô
\82· --------------------------------------------
\r
508 * int
\93]
\91\97\82·
\82é
\83t
\83@
\83C
\83\8b\82Ì
\90\94\r
509 *----------------------------------------------------------------------------*/
\r
511 int AskTransferFileNum(void)
\r
513 return(TransFiles);
\r
517 /*-----
\93]
\91\97\92\86\83E
\83C
\83\93\83h
\83E
\82ð
\91O
\96Ê
\82É
\8fo
\82· ------------------------------------------
\r
524 *----------------------------------------------------------------------------*/
\r
526 void GoForwardTransWindow(void)
\r
528 MoveToForeground = YES;
\r
533 /*-----
\93]
\91\97\83\
\83P
\83b
\83g
\82Ì
\83J
\83\8c\83\93\83g
\83f
\83B
\83\8c\83N
\83g
\83\8a\8fî
\95ñ
\82ð
\8f\89\8aú
\89» ------------------------
\r
540 *----------------------------------------------------------------------------*/
\r
542 void InitTransCurDir(void)
\r
544 strcpy(CurDir, "");
\r
549 /*-----
\83t
\83@
\83C
\83\8b\93]
\91\97\83X
\83\8c\83b
\83h
\82Ì
\83\81\83C
\83\93\83\8b\81[
\83v ------------------------------------
\r
552 * void *Dummy :
\8eg
\82í
\82È
\82¢
\r
556 *----------------------------------------------------------------------------*/
\r
558 static ULONG WINAPI TransferThread(void *Dummy)
\r
562 char Tmp[FMAX_PATH+1];
\r
575 while((TransPacketBase != NULL) ||
\r
576 (WaitForSingleObject(hRunMutex, 200) == WAIT_TIMEOUT))
\r
578 if(fTransferThreadExit == TRUE)
\r
581 WaitForSingleObject(hListAccMutex, INFINITE);
\r
582 memset(ErrMsg, NUL, ERR_MSG_LEN+7);
\r
586 if(TransPacketBase != NULL)
\r
588 ReleaseMutex(hListAccMutex);
\r
589 if(hWndTrans == NULL)
\r
591 if((strncmp(TransPacketBase->Cmd, "RETR", 4) == 0) ||
\r
592 (strncmp(TransPacketBase->Cmd, "STOR", 4) == 0) ||
\r
593 (strncmp(TransPacketBase->Cmd, "MKD", 3) == 0) ||
\r
594 (strncmp(TransPacketBase->Cmd, "L-", 2) == 0) ||
\r
595 (strncmp(TransPacketBase->Cmd, "R-", 2) == 0))
\r
597 hWndTrans = CreateDialog(GetFtpInst(), MAKEINTRESOURCE(transfer_dlg), HWND_DESKTOP, (DLGPROC)TransDlgProc);
\r
598 if(MoveToForeground == YES)
\r
599 SetForegroundWindow(hWndTrans);
\r
600 ShowWindow(hWndTrans, SW_SHOWNOACTIVATE);
\r
603 TransPacketBase->hWndTrans = hWndTrans;
\r
605 if(hWndTrans != NULL)
\r
607 if(MoveToForeground == YES)
\r
609 SetForegroundWindow(hWndTrans);
\r
610 MoveToForeground = NO;
\r
614 if(hWndTrans != NULL)
\r
615 SendMessage(hWndTrans, WM_SET_PACKET, 0, (LPARAM)TransPacketBase);
\r
617 /*
\83_
\83E
\83\93\83\8d\81[
\83h */
\r
618 if(strncmp(TransPacketBase->Cmd, "RETR", 4) == 0)
\r
620 /*
\95s
\90³
\82È
\83p
\83X
\82ð
\8c\9f\8fo */
\r
621 if(CheckPathViolation(TransPacketBase) == NO)
\r
623 /*
\83t
\83\8b\83p
\83X
\82ð
\8eg
\82í
\82È
\82¢
\82½
\82ß
\82Ì
\8f\88\97\9d */
\r
624 if(MakeNonFullPath(TransPacketBase, CurDir, Tmp) == SUCCESS)
\r
626 if(strncmp(TransPacketBase->Cmd, "RETR-S", 6) == 0)
\r
628 /*
\83T
\83C
\83Y
\82Æ
\93ú
\95t
\82ð
\8eæ
\93¾ */
\r
629 DoSIZE(TransPacketBase->RemoteFile, &TransPacketBase->Size);
\r
630 DoMDTM(TransPacketBase->RemoteFile, &TransPacketBase->Time);
\r
631 strcpy(TransPacketBase->Cmd, "RETR ");
\r
635 // if(DoDownLoad(AskTrnCtrlSkt(), TransPacketBase, NO) == 429)
\r
637 // if(ReConnectTrnSkt() == SUCCESS)
\r
638 DoDownLoad(AskTrnCtrlSkt(), TransPacketBase, NO, &Canceled);
\r
643 /*
\83A
\83b
\83v
\83\8d\81[
\83h */
\r
644 else if(strncmp(TransPacketBase->Cmd, "STOR", 4) == 0)
\r
646 /*
\83t
\83\8b\83p
\83X
\82ð
\8eg
\82í
\82È
\82¢
\82½
\82ß
\82Ì
\8f\88\97\9d */
\r
647 if(MakeNonFullPath(TransPacketBase, CurDir, Tmp) == SUCCESS)
\r
650 // if(DoUpLoad(AskTrnCtrlSkt(), TransPacketBase) == 429)
\r
652 // if(ReConnectTrnSkt() == SUCCESS)
\r
653 DoUpLoad(AskTrnCtrlSkt(), TransPacketBase);
\r
657 /*
\83t
\83H
\83\8b\83_
\8dì
\90¬
\81i
\83\8d\81[
\83J
\83\8b\82Ü
\82½
\82Í
\83z
\83X
\83g
\81j */
\r
658 else if(strncmp(TransPacketBase->Cmd, "MKD", 3) == 0)
\r
660 DispTransFileInfo(TransPacketBase, MSGJPN078, FALSE, YES);
\r
662 if(strlen(TransPacketBase->RemoteFile) > 0)
\r
664 /*
\83t
\83\8b\83p
\83X
\82ð
\8eg
\82í
\82È
\82¢
\82½
\82ß
\82Ì
\8f\88\97\9d */
\r
665 CwdSts = FTP_COMPLETE;
\r
667 strcpy(Tmp, TransPacketBase->RemoteFile);
\r
668 if(ProcForNonFullpath(Tmp, CurDir, hWndTrans, 1) == FAIL)
\r
671 CwdSts = FTP_ERROR;
\r
674 if(CwdSts == FTP_COMPLETE)
\r
677 CommandProcTrn(NULL, "MKD %s", Tmp);
\r
678 /*
\82·
\82Å
\82É
\83t
\83H
\83\8b\83_
\82ª
\82 \82é
\8fê
\8d\87\82à
\82 \82é
\82Ì
\82Å
\81A */
\r
679 /*
\82±
\82±
\82Å
\82Í
\83G
\83\89\81[
\83`
\83F
\83b
\83N
\82Í
\82µ
\82È
\82¢ */
\r
682 CommandProcTrn(NULL, "%s %03d %s", AskHostChmodCmd(), FolderAttrNum, Tmp);
\r
685 else if(strlen(TransPacketBase->LocalFile) > 0)
\r
688 DoLocalMKD(TransPacketBase->LocalFile);
\r
691 /*
\83f
\83B
\83\8c\83N
\83g
\83\8a\8dì
\90¬
\81i
\8fí
\82É
\83z
\83X
\83g
\91¤
\81j */
\r
692 else if(strncmp(TransPacketBase->Cmd, "R-MKD", 5) == 0)
\r
694 DispTransFileInfo(TransPacketBase, MSGJPN079, FALSE, YES);
\r
696 /*
\83t
\83\8b\83p
\83X
\82ð
\8eg
\82í
\82È
\82¢
\82½
\82ß
\82Ì
\8f\88\97\9d */
\r
697 if(MakeNonFullPath(TransPacketBase, CurDir, Tmp) == SUCCESS)
\r
700 CommandProcTrn(NULL, "%s%s", TransPacketBase->Cmd+2, TransPacketBase->RemoteFile);
\r
703 CommandProcTrn(NULL, "%s %03d %s", AskHostChmodCmd(), FolderAttrNum, TransPacketBase->RemoteFile);
\r
706 /*
\83f
\83B
\83\8c\83N
\83g
\83\8a\8dí
\8f\9c\81i
\8fí
\82É
\83z
\83X
\83g
\91¤
\81j */
\r
707 else if(strncmp(TransPacketBase->Cmd, "R-RMD", 5) == 0)
\r
709 DispTransFileInfo(TransPacketBase, MSGJPN080, FALSE, YES);
\r
711 DelNotify = MirrorDelNotify(WIN_REMOTE, DelNotify, TransPacketBase);
\r
712 if((DelNotify == YES) || (DelNotify == YES_ALL))
\r
714 /*
\83t
\83\8b\83p
\83X
\82ð
\8eg
\82í
\82È
\82¢
\82½
\82ß
\82Ì
\8f\88\97\9d */
\r
715 if(MakeNonFullPath(TransPacketBase, CurDir, Tmp) == SUCCESS)
\r
718 CommandProcTrn(NULL, "%s%s", TransPacketBase->Cmd+2, TransPacketBase->RemoteFile);
\r
722 /*
\83t
\83@
\83C
\83\8b\8dí
\8f\9c\81i
\8fí
\82É
\83z
\83X
\83g
\91¤
\81j */
\r
723 else if(strncmp(TransPacketBase->Cmd, "R-DELE", 6) == 0)
\r
725 DispTransFileInfo(TransPacketBase, MSGJPN081, FALSE, YES);
\r
727 DelNotify = MirrorDelNotify(WIN_REMOTE, DelNotify, TransPacketBase);
\r
728 if((DelNotify == YES) || (DelNotify == YES_ALL))
\r
730 /*
\83t
\83\8b\83p
\83X
\82ð
\8eg
\82í
\82È
\82¢
\82½
\82ß
\82Ì
\8f\88\97\9d */
\r
731 if(MakeNonFullPath(TransPacketBase, CurDir, Tmp) == SUCCESS)
\r
734 CommandProcTrn(NULL, "%s%s", TransPacketBase->Cmd+2, TransPacketBase->RemoteFile);
\r
738 /*
\83f
\83B
\83\8c\83N
\83g
\83\8a\8dì
\90¬
\81i
\8fí
\82É
\83\8d\81[
\83J
\83\8b\91¤
\81j */
\r
739 else if(strncmp(TransPacketBase->Cmd, "L-MKD", 5) == 0)
\r
741 DispTransFileInfo(TransPacketBase, MSGJPN082, FALSE, YES);
\r
744 DoLocalMKD(TransPacketBase->LocalFile);
\r
746 /*
\83f
\83B
\83\8c\83N
\83g
\83\8a\8dí
\8f\9c\81i
\8fí
\82É
\83\8d\81[
\83J
\83\8b\91¤
\81j */
\r
747 else if(strncmp(TransPacketBase->Cmd, "L-RMD", 5) == 0)
\r
749 DispTransFileInfo(TransPacketBase, MSGJPN083, FALSE, YES);
\r
751 DelNotify = MirrorDelNotify(WIN_LOCAL, DelNotify, TransPacketBase);
\r
752 if((DelNotify == YES) || (DelNotify == YES_ALL))
\r
755 DoLocalRMD(TransPacketBase->LocalFile);
\r
758 /*
\83t
\83@
\83C
\83\8b\8dí
\8f\9c\81i
\8fí
\82É
\83\8d\81[
\83J
\83\8b\91¤
\81j */
\r
759 else if(strncmp(TransPacketBase->Cmd, "L-DELE", 6) == 0)
\r
761 DispTransFileInfo(TransPacketBase, MSGJPN084, FALSE, YES);
\r
763 DelNotify = MirrorDelNotify(WIN_LOCAL, DelNotify, TransPacketBase);
\r
764 if((DelNotify == YES) || (DelNotify == YES_ALL))
\r
767 DoLocalDELE(TransPacketBase->LocalFile);
\r
770 /*
\83J
\83\8c\83\93\83g
\83f
\83B
\83\8c\83N
\83g
\83\8a\82ð
\90Ý
\92è */
\r
771 else if(strcmp(TransPacketBase->Cmd, "SETCUR") == 0)
\r
773 if(AskShareProh() == YES)
\r
775 if(strcmp(CurDir, TransPacketBase->RemoteFile) != 0)
\r
777 if(CommandProcTrn(NULL, "CWD %s", TransPacketBase->RemoteFile)/100 != FTP_COMPLETE)
\r
779 DispCWDerror(hWndTrans);
\r
784 strcpy(CurDir, TransPacketBase->RemoteFile);
\r
786 /*
\83J
\83\8c\83\93\83g
\83f
\83B
\83\8c\83N
\83g
\83\8a\82ð
\96ß
\82· */
\r
787 else if(strcmp(TransPacketBase->Cmd, "BACKCUR") == 0)
\r
789 if(AskShareProh() == NO)
\r
791 if(strcmp(CurDir, TransPacketBase->RemoteFile) != 0)
\r
792 CommandProcTrn(NULL, "CWD %s", TransPacketBase->RemoteFile);
\r
793 strcpy(CurDir, TransPacketBase->RemoteFile);
\r
796 /*
\8e©
\93®
\8fI
\97¹
\82Ì
\82½
\82ß
\82Ì
\92Ê
\92m */
\r
797 else if(strcmp(TransPacketBase->Cmd, "GOQUIT") == 0)
\r
802 /*=====
\82P
\82Â
\82Ì
\8f\88\97\9d\8fI
\82í
\82è =====*/
\r
804 if(ForceAbort == NO)
\r
806 WaitForSingleObject(hListAccMutex, INFINITE);
\r
807 if(ClearAll == YES)
\r
808 EraseTransFileList();
\r
811 if((strncmp(TransPacketBase->Cmd, "RETR", 4) == 0) ||
\r
812 (strncmp(TransPacketBase->Cmd, "STOR", 4) == 0))
\r
815 PostMessage(GetMainHwnd(), WM_CHANGE_COND, 0, 0);
\r
817 Pos = TransPacketBase;
\r
818 TransPacketBase = TransPacketBase->Next;
\r
822 ReleaseMutex(hListAccMutex);
\r
824 if(BackgrndMessageProc() == YES)
\r
826 WaitForSingleObject(hListAccMutex, INFINITE);
\r
827 EraseTransFileList();
\r
828 ReleaseMutex(hListAccMutex);
\r
836 ReleaseMutex(hListAccMutex);
\r
839 if(hWndTrans != NULL)
\r
841 DestroyWindow(hWndTrans);
\r
846 SoundPlay(SND_TRANS);
\r
848 if(AskAutoExit() == NO)
\r
851 PostMessage(GetMainHwnd(), WM_REFRESH_LOCAL_FLG, 0, 0);
\r
853 PostMessage(GetMainHwnd(), WM_REFRESH_REMOTE_FLG, 0, 0);
\r
860 BackgrndMessageProc();
\r
864 PostMessage(GetMainHwnd(), WM_COMMAND, MAKEWPARAM(MENU_AUTO_EXIT, 0), 0);
\r
873 /*-----
\83t
\83\8b\83p
\83X
\82ð
\8eg
\82í
\82È
\82¢
\83t
\83@
\83C
\83\8b\83A
\83N
\83Z
\83X
\82Ì
\8f\80\94õ ------------------------------
\r
876 * TRANSPACKET *Pkt :
\93]
\91\97\83p
\83P
\83b
\83g
\r
877 * char *Cur :
\83J
\83\8c\83\93\83g
\83f
\83B
\83\8c\83N
\83g
\83\8a\r
878 * char *Tmp :
\8dì
\8bÆ
\97p
\83G
\83\8a\83A
\r
881 * int
\83X
\83e
\81[
\83^
\83X(SUCCESS/FAIL)
\r
884 *
\83t
\83\8b\83p
\83X
\82ð
\8eg
\82í
\82È
\82¢
\8e\9e\82Í
\81A
\r
885 *
\82±
\82Ì
\83\82\83W
\83\85\81[
\83\8b\93à
\82Å CWD
\82ð
\8ds
\82È
\82¢
\81A
\r
886 * Pkt->RemoteFile
\82É
\83t
\83@
\83C
\83\8b\96¼
\82Ì
\82Ý
\8ec
\82·
\81B
\81i
\83p
\83X
\96¼
\82Í
\8fÁ
\82·
\81j
\r
887 *----------------------------------------------------------------------------*/
\r
889 static int MakeNonFullPath(TRANSPACKET *Pkt, char *Cur, char *Tmp)
\r
893 Sts = ProcForNonFullpath(Pkt->RemoteFile, Cur, Pkt->hWndTrans, 1);
\r
903 /*-----
\83_
\83E
\83\93\83\8d\81[
\83h
\82ð
\8ds
\82È
\82¤ --------------------------------------------------
\r
906 * SOCKET cSkt :
\83R
\83\93\83g
\83\8d\81[
\83\8b\83\
\83P
\83b
\83g
\r
907 * TRANSPACKET *Pkt :
\93]
\91\97\83t
\83@
\83C
\83\8b\8fî
\95ñ
\r
908 * int DirList :
\83f
\83B
\83\8c\83N
\83g
\83\8a\83\8a\83X
\83g
\82Ì
\83_
\83E
\83\93\83\8d\81[
\83h(YES/NO)
\r
911 * int
\89\9e\93\9a\83R
\81[
\83h
\r
914 *
\82±
\82Ì
\83\82\83W
\83\85\81[
\83\8b\82Í
\81A
\83t
\83@
\83C
\83\8b\88ê
\97\97\82Ì
\8eæ
\93¾
\82È
\82Ç
\82ð
\8ds
\82È
\82¤
\8dÛ
\82É
\83\81\83C
\83\93\82Ì
\83X
\83\8c\83b
\83h
\r
915 *
\82©
\82ç
\82à
\8cÄ
\82Î
\82ê
\82é
\81B
\83\81\83C
\83\93\82Ì
\83X
\83\8c\83b
\83h
\82©
\82ç
\8cÄ
\82Î
\82ê
\82é
\8e\9e\82Í Pkt->hWndTrans == NULL
\81B
\r
916 *----------------------------------------------------------------------------*/
\r
918 int DoDownLoad(SOCKET cSkt, TRANSPACKET *Pkt, int DirList, int *CancelCheckWork)
\r
921 char Reply[ERR_MSG_LEN+7];
\r
923 Pkt->ctrl_skt = cSkt;
\r
924 if(IsSpecialDevice(GetFileName(Pkt->LocalFile)) == YES)
\r
927 SetTaskMsg(MSGJPN085, GetFileName(Pkt->LocalFile));
\r
928 DispDownloadFinishMsg(Pkt, iRetCode);
\r
930 else if(Pkt->Mode != EXIST_IGNORE)
\r
932 if(Pkt->Type == TYPE_I)
\r
933 Pkt->KanjiCode = KANJI_NOCNV;
\r
935 iRetCode = command(Pkt->ctrl_skt, Reply, CancelCheckWork, "TYPE %c", Pkt->Type);
\r
936 if(iRetCode/100 < FTP_RETRY)
\r
938 if(Pkt->hWndTrans != NULL)
\r
940 AllTransSizeNow = 0;
\r
943 DispTransFileInfo(Pkt, MSGJPN086, TRUE, YES);
\r
945 DispTransFileInfo(Pkt, MSGJPN087, FALSE, NO);
\r
948 if(BackgrndMessageProc() == NO)
\r
950 if(AskPasvMode() != YES)
\r
951 iRetCode = DownLoadNonPassive(Pkt, CancelCheckWork);
\r
953 iRetCode = DownLoadPassive(Pkt, CancelCheckWork);
\r
959 SetErrorMsg(Reply);
\r
963 DispTransFileInfo(Pkt, MSGJPN088, TRUE, YES);
\r
964 SetTaskMsg(MSGJPN089, Pkt->RemoteFile);
\r
971 /*-----
\92Ê
\8fí
\83\82\81[
\83h
\82Å
\83t
\83@
\83C
\83\8b\82ð
\83_
\83E
\83\93\83\8d\81[
\83h ------------------------------------
\r
974 * TRANSPACKET *Pkt :
\93]
\91\97\83t
\83@
\83C
\83\8b\8fî
\95ñ
\r
977 * int
\89\9e\93\9a\83R
\81[
\83h
\r
978 *----------------------------------------------------------------------------*/
\r
980 static int DownLoadNonPassive(TRANSPACKET *Pkt, int *CancelCheckWork)
\r
984 SOCKET data_socket = INVALID_SOCKET; // data channel socket
\r
985 SOCKET listen_socket = INVALID_SOCKET; // data listen socket
\r
988 struct sockaddr_in saSockAddr1;
\r
989 char Reply[ERR_MSG_LEN+7];
\r
991 if((listen_socket = GetFTPListenSocket(Pkt->ctrl_skt, CancelCheckWork)) != INVALID_SOCKET)
\r
993 if(SetDownloadResume(Pkt, Pkt->Mode, Pkt->ExistSize, &CreateMode, CancelCheckWork) == YES)
\r
995 sprintf(Buf, "%s%s", Pkt->Cmd, Pkt->RemoteFile);
\r
996 iRetCode = command(Pkt->ctrl_skt, Reply, CancelCheckWork, "%s", Buf);
\r
997 if(iRetCode/100 == FTP_PRELIM)
\r
999 if(SocksGet2ndBindReply(listen_socket, &data_socket) == FAIL)
\r
1001 iLength = sizeof(saSockAddr1);
\r
1002 data_socket = do_accept(listen_socket, (struct sockaddr *)&saSockAddr1, (int *)&iLength);
\r
1004 if(shutdown(listen_socket, 1) != 0)
\r
1005 ReportWSError("shutdown listen", WSAGetLastError());
\r
1006 listen_socket = DoClose(listen_socket);
\r
1008 if(data_socket == INVALID_SOCKET)
\r
1010 SetErrorMsg(MSGJPN280);
\r
1011 ReportWSError("accept", WSAGetLastError());
\r
1015 DoPrintf("Skt=%u : accept from %s port %u", data_socket, inet_ntoa(saSockAddr1.sin_addr), ntohs(saSockAddr1.sin_port));
\r
1018 if(data_socket != INVALID_SOCKET)
\r
1020 iRetCode = DownLoadFile(Pkt, data_socket, CreateMode, CancelCheckWork);
\r
1021 // data_socket = DoClose(data_socket);
\r
1026 SetErrorMsg(Reply);
\r
1027 SetTaskMsg(MSGJPN090);
\r
1028 listen_socket = DoClose(listen_socket);
\r
1038 SetErrorMsg(MSGJPN279);
\r
1040 DispDownloadFinishMsg(Pkt, iRetCode);
\r
1046 /*----- Passive
\83\82\81[
\83h
\82Å
\83t
\83@
\83C
\83\8b\82ð
\83_
\83E
\83\93\83\8d\81[
\83h ---------------------------------
\r
1049 * TRANSPACKET *Pkt :
\93]
\91\97\83t
\83@
\83C
\83\8b\8fî
\95ñ
\r
1052 * int
\89\9e\93\9a\83R
\81[
\83h
\r
1053 *----------------------------------------------------------------------------*/
\r
1055 static int DownLoadPassive(TRANSPACKET *Pkt, int *CancelCheckWork)
\r
1058 SOCKET data_socket = INVALID_SOCKET; // data channel socket
\r
1064 char Reply[ERR_MSG_LEN+7];
\r
1066 iRetCode = command(Pkt->ctrl_skt, Buf, CancelCheckWork, "PASV");
\r
1067 if(iRetCode/100 == FTP_COMPLETE)
\r
1069 if(GetAdrsAndPort(Buf, Adrs, &Port, 19) == SUCCESS)
\r
1071 if((data_socket = connectsock(Adrs, Port, MSGJPN091, CancelCheckWork)) != INVALID_SOCKET)
\r
1073 if(setsockopt(data_socket, IPPROTO_TCP, TCP_NODELAY, (LPSTR)&Flg, sizeof(Flg)) == SOCKET_ERROR)
\r
1074 ReportWSError("setsockopt", WSAGetLastError());
\r
1076 if(SetDownloadResume(Pkt, Pkt->Mode, Pkt->ExistSize, &CreateMode, CancelCheckWork) == YES)
\r
1078 sprintf(Buf, "%s%s", Pkt->Cmd, Pkt->RemoteFile);
\r
1079 iRetCode = command(Pkt->ctrl_skt, Reply, CancelCheckWork, "%s", Buf);
\r
1080 if(iRetCode/100 == FTP_PRELIM)
\r
1082 iRetCode = DownLoadFile(Pkt, data_socket, CreateMode, CancelCheckWork);
\r
1083 // data_socket = DoClose(data_socket);
\r
1087 SetErrorMsg(Reply);
\r
1088 SetTaskMsg(MSGJPN092);
\r
1089 data_socket = DoClose(data_socket);
\r
1101 SetErrorMsg(MSGJPN093);
\r
1102 SetTaskMsg(MSGJPN093);
\r
1109 DispDownloadFinishMsg(Pkt, iRetCode);
\r
1115 /*-----
\83_
\83E
\83\93\83\8d\81[
\83h
\82Ì
\8eÀ
\8ds ----------------------------------------------------
\r
1118 * TRANSPACKET *Pkt :
\93]
\91\97\83t
\83@
\83C
\83\8b\8fî
\95ñ
\r
1119 * SOCKET dSkt :
\83f
\81[
\83^
\83\
\83P
\83b
\83g
\r
1120 * int CreateMode :
\83t
\83@
\83C
\83\8b\8dì
\90¬
\83\82\81[
\83h (CREATE_ALWAYS/OPEN_ALWAYS)
\r
1123 * int
\89\9e\93\9a\83R
\81[
\83h
\r
1126 *
\93]
\91\97\82Ì
\8co
\89ß
\95\
\8e¦
\82Í
\r
1127 *
\83_
\83C
\83A
\83\8d\83O
\82ð
\8fo
\82·(Pkt->hWndTrans!=NULL)
\8fê
\8d\87\81A
\83C
\83\93\83^
\81[
\83o
\83\8b\83^
\83C
\83}
\82Å
\8co
\89ß
\82ð
\95\
\8e¦
\82·
\82é
\r
1128 *
\83_
\83C
\83A
\83\8d\83O
\82ð
\8fo
\82³
\82È
\82¢
\8fê
\8d\87\81A
\82±
\82Ì
\83\8b\81[
\83`
\83\93\82©
\82çDispDownloadSize()
\82ð
\8cÄ
\82Ô
\r
1129 *----------------------------------------------------------------------------*/
\r
1131 static int DownLoadFile(TRANSPACKET *Pkt, SOCKET dSkt, int CreateMode, int *CancelCheckWork)
\r
1134 char Buf[BUFSIZE];
\r
1135 char Buf2[BUFSIZE+3];
\r
1136 HANDLE iFileHandle;
\r
1137 SECURITY_ATTRIBUTES Sec;
\r
1139 CODECONVINFO cInfo;
\r
1141 // fd_set ReadFds;
\r
1142 // struct timeval Tout;
\r
1143 // struct timeval *ToutPtr;
\r
1146 char TmpBuf[ONELINE_BUF_SIZE];
\r
1147 DWORD dwFileAttributes;
\r
1149 #ifdef SET_BUFFER_SIZE
\r
1150 /* Add by H.Shirouzu at 2002/10/02 */
\r
1151 int buf_size = SOCKBUF_SIZE;
\r
1152 for ( ; buf_size > 0; buf_size /= 2)
\r
1153 if (setsockopt(dSkt, SOL_SOCKET, SO_RCVBUF, (char *)&buf_size, sizeof(buf_size)) == 0)
\r
1158 #ifdef DISABLE_NETWORK_BUFFERS
\r
1159 //
\94O
\82Ì
\82½
\82ß
\8eó
\90M
\83o
\83b
\83t
\83@
\82ð
\96³
\8cø
\82É
\82·
\82é
\81B
\r
1161 setsockopt(dSkt, SOL_SOCKET, SO_RCVBUF, (char *)&buf_size, sizeof(buf_size));
\r
1164 Pkt->Abort = ABORT_NONE;
\r
1166 Sec.nLength = sizeof(SECURITY_ATTRIBUTES);
\r
1167 Sec.lpSecurityDescriptor = NULL;
\r
1168 Sec.bInheritHandle = FALSE;
\r
1170 dwFileAttributes = GetFileAttributes(Pkt->LocalFile);
\r
1171 if (dwFileAttributes != INVALID_FILE_ATTRIBUTES && (dwFileAttributes & FILE_ATTRIBUTE_READONLY)) {
\r
1172 //
\93Ç
\82Ý
\8eæ
\82è
\90ê
\97p
\r
1173 if (MessageBox(GetMainHwnd(), MSGJPN296, MSGJPN086, MB_YESNO) == IDYES) {
\r
1174 //
\91®
\90«
\82ð
\89ð
\8f\9c\r
1175 SetFileAttributes(Pkt->LocalFile, dwFileAttributes ^ FILE_ATTRIBUTE_READONLY);
\r
1179 if((iFileHandle = CreateFile(Pkt->LocalFile, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, &Sec, CreateMode, FILE_ATTRIBUTE_NORMAL, NULL)) != INVALID_HANDLE_VALUE)
\r
1181 // UTF-8
\91Î
\89\9e\r
1182 int ProcessedBOM = NO;
\r
1183 if(CreateMode == OPEN_ALWAYS)
\r
1184 SetFilePointer(iFileHandle, 0, 0, FILE_END);
\r
1186 if(Pkt->hWndTrans != NULL)
\r
1188 TimeStart = time(NULL);
\r
1189 SetTimer(Pkt->hWndTrans, TIMER_DISPLAY, DISPLAY_TIMING, NULL);
\r
1192 InitCodeConvInfo(&cInfo);
\r
1193 cInfo.KanaCnv = Pkt->KanaCnv;
\r
1195 /*=====
\83t
\83@
\83C
\83\8b\82ð
\8eó
\90M
\82·
\82é
\83\8b\81[
\83v =====*/
\r
1196 while((Pkt->Abort == ABORT_NONE) && (ForceAbort == NO))
\r
1198 // FD_ZERO(&ReadFds);
\r
1199 // FD_SET(dSkt, &ReadFds);
\r
1200 // ToutPtr = NULL;
\r
1201 // if(TimeOut != 0)
\r
1203 // Tout.tv_sec = TimeOut;
\r
1204 // Tout.tv_usec = 0;
\r
1205 // ToutPtr = &Tout;
\r
1207 // iNumBytes = select(0, &ReadFds, NULL, NULL, ToutPtr);
\r
1208 // if(iNumBytes == SOCKET_ERROR)
\r
1210 // ReportWSError("select", WSAGetLastError());
\r
1211 // if(Pkt->Abort == ABORT_NONE)
\r
1212 // Pkt->Abort = ABORT_ERROR;
\r
1215 // else if(iNumBytes == 0)
\r
1217 // SetErrorMsg(MSGJPN094);
\r
1218 // SetTaskMsg(MSGJPN094);
\r
1219 // Pkt->Abort = ABORT_ERROR;
\r
1223 if((iNumBytes = do_recv(dSkt, Buf, BUFSIZE, 0, &TimeOutErr, CancelCheckWork)) <= 0)
\r
1225 if(TimeOutErr == YES)
\r
1227 SetErrorMsg(MSGJPN094);
\r
1228 SetTaskMsg(MSGJPN094);
\r
1229 if(Pkt->hWndTrans != NULL)
\r
1231 if(Pkt->Abort == ABORT_NONE)
\r
1232 Pkt->Abort = ABORT_ERROR;
\r
1234 else if(iNumBytes == SOCKET_ERROR)
\r
1236 if(Pkt->Abort == ABORT_NONE)
\r
1237 Pkt->Abort = ABORT_ERROR;
\r
1242 /*
\8a¿
\8e\9a\83R
\81[
\83h
\95Ï
\8a· */
\r
1243 if(Pkt->KanjiCode != KANJI_NOCNV)
\r
1246 cInfo.StrLen = iNumBytes;
\r
1248 cInfo.BufSize = BUFSIZE+3;
\r
1251 //
\82±
\82±
\82Å
\91S
\82ÄUTF-8
\82Ö
\95Ï
\8a·
\82·
\82é
\r
1252 // TODO: SJIS
\88È
\8aO
\82à
\92¼
\90ÚUTF-8
\82Ö
\95Ï
\8a·
\r
1253 // if(Pkt->KanjiCode == KANJI_JIS)
\r
1254 // Continue = ConvJIStoSJIS(&cInfo);
\r
1256 // Continue = ConvEUCtoSJIS(&cInfo);
\r
1257 char Buf3[(BUFSIZE + 3) * 4];
\r
1258 CODECONVINFO cInfo2;
\r
1259 switch(Pkt->KanjiCode)
\r
1262 switch(Pkt->KanjiCodeDesired)
\r
1265 memcpy(Buf3, cInfo.Str, cInfo.StrLen);
\r
1266 cInfo2.OutLen = cInfo.StrLen;
\r
1274 if(ProcessedBOM == NO)
\r
1276 memcpy(Buf3, "\xEF\xBB\xBF", 3);
\r
1277 cInfo2.OutLen = 3;
\r
1279 ProcessedBOM = YES;
\r
1282 Continue = ConvSJIStoUTF8N(&cInfo);
\r
1283 memcpy(Buf3, Buf2, cInfo.OutLen);
\r
1284 cInfo2.OutLen = cInfo.OutLen;
\r
1289 switch(Pkt->KanjiCodeDesired)
\r
1292 Continue = ConvJIStoSJIS(&cInfo);
\r
1293 memcpy(Buf3, Buf2, cInfo.OutLen);
\r
1294 cInfo2.OutLen = cInfo.OutLen;
\r
1297 memcpy(Buf3, cInfo.Str, cInfo.StrLen);
\r
1298 cInfo2.OutLen = cInfo.StrLen;
\r
1304 if(ProcessedBOM == NO)
\r
1306 memcpy(Buf3, "\xEF\xBB\xBF", 3);
\r
1307 cInfo2.OutLen = 3;
\r
1309 ProcessedBOM = YES;
\r
1312 Continue = ConvJIStoSJIS(&cInfo);
\r
1313 InitCodeConvInfo(&cInfo2);
\r
1314 cInfo2.KanaCnv = NO;
\r
1315 cInfo2.Str = cInfo.Buf;
\r
1316 cInfo2.StrLen = cInfo.OutLen;
\r
1317 cInfo2.Buf = Buf3;
\r
1318 cInfo2.BufSize = (BUFSIZE + 3) * 4;
\r
1319 ConvSJIStoUTF8N(&cInfo2);
\r
1324 switch(Pkt->KanjiCodeDesired)
\r
1327 Continue = ConvEUCtoSJIS(&cInfo);
\r
1328 memcpy(Buf3, Buf2, cInfo.OutLen);
\r
1329 cInfo2.OutLen = cInfo.OutLen;
\r
1334 memcpy(Buf3, cInfo.Str, cInfo.StrLen);
\r
1335 cInfo2.OutLen = cInfo.StrLen;
\r
1339 if(ProcessedBOM == NO)
\r
1341 memcpy(Buf3, "\xEF\xBB\xBF", 3);
\r
1342 cInfo2.OutLen = 3;
\r
1344 ProcessedBOM = YES;
\r
1347 Continue = ConvEUCtoSJIS(&cInfo);
\r
1348 InitCodeConvInfo(&cInfo2);
\r
1349 cInfo2.KanaCnv = NO;
\r
1350 cInfo2.Str = cInfo.Buf;
\r
1351 cInfo2.StrLen = cInfo.OutLen;
\r
1352 cInfo2.Buf = Buf3;
\r
1353 cInfo2.BufSize = (BUFSIZE + 3) * 4;
\r
1354 ConvSJIStoUTF8N(&cInfo2);
\r
1359 if(ProcessedBOM == NO)
\r
1361 if(memcmp(Buf, "\xEF\xBB\xBF", 3) == 0)
\r
1364 cInfo.StrLen -= 3;
\r
1366 cInfo2.OutLen = 0;
\r
1367 switch(Pkt->KanjiCodeDesired)
\r
1370 memcpy(Buf3, "\xEF\xBB\xBF", 3);
\r
1371 cInfo2.OutLen = 3;
\r
1375 ProcessedBOM = YES;
\r
1378 switch(Pkt->KanjiCodeDesired)
\r
1381 Continue = ConvUTF8NtoSJIS(&cInfo);
\r
1382 memcpy(Buf3, Buf2, cInfo.OutLen);
\r
1383 cInfo2.OutLen = cInfo.OutLen;
\r
1390 memcpy(Buf3, cInfo.Str, cInfo.StrLen);
\r
1391 cInfo2.OutLen = cInfo.StrLen;
\r
1397 // if(WriteFile(iFileHandle, Buf2, cInfo.OutLen, &Writed, NULL) == FALSE)
\r
1398 if(WriteFile(iFileHandle, Buf3, cInfo2.OutLen, &Writed, NULL) == FALSE)
\r
1399 Pkt->Abort = ABORT_DISKFULL;
\r
1401 while((Continue == YES) && (Pkt->Abort == ABORT_NONE));
\r
1405 if(WriteFile(iFileHandle, Buf, iNumBytes, &Writed, NULL) == FALSE)
\r
1406 Pkt->Abort = ABORT_DISKFULL;
\r
1409 Pkt->ExistSize += iNumBytes;
\r
1410 if(Pkt->hWndTrans != NULL)
\r
1411 AllTransSizeNow += iNumBytes;
\r
1414 /*
\93]
\91\97\83_
\83C
\83A
\83\8d\83O
\82ð
\8fo
\82³
\82È
\82¢
\8e\9e\82Ì
\8co
\89ß
\95\
\8e¦ */
\r
1415 DispDownloadSize(Pkt->ExistSize);
\r
1418 if(BackgrndMessageProc() == YES)
\r
1422 /*
\8f\91\82«
\8ec
\82µ
\82½
\83f
\81[
\83^
\82ð
\8f\91\82«
\8d\9e\82Þ */
\r
1423 if(Pkt->KanjiCode != KANJI_NOCNV)
\r
1426 cInfo.BufSize = BUFSIZE+3;
\r
1427 FlushRestData(&cInfo);
\r
1428 if(WriteFile(iFileHandle, Buf2, cInfo.OutLen, &Writed, NULL) == FALSE)
\r
1429 Pkt->Abort = ABORT_DISKFULL;
\r
1432 /*
\83O
\83\89\83t
\95\
\8e¦
\82ð
\8dX
\90V */
\r
1433 if(Pkt->hWndTrans != NULL)
\r
1435 KillTimer(Pkt->hWndTrans, TIMER_DISPLAY);
\r
1436 DispTransferStatus(Pkt->hWndTrans, YES, Pkt);
\r
1437 TimeStart = time(NULL) - TimeStart + 1;
\r
1441 /*
\93]
\91\97\83_
\83C
\83A
\83\8d\83O
\82ð
\8fo
\82³
\82È
\82¢
\8e\9e\82Ì
\8co
\89ß
\95\
\8e¦
\82ð
\8fÁ
\82· */
\r
1442 DispDownloadSize(-1);
\r
1445 /*
\83t
\83@
\83C
\83\8b\82Ì
\83^
\83C
\83\80\83X
\83^
\83\93\83v
\82ð
\8d\87\82í
\82¹
\82é */
\r
1446 if((SaveTimeStamp == YES) &&
\r
1447 ((Pkt->Time.dwLowDateTime != 0) || (Pkt->Time.dwHighDateTime != 0)))
\r
1449 SetFileTime(iFileHandle, &Pkt->Time, &Pkt->Time, &Pkt->Time);
\r
1452 CloseHandle(iFileHandle);
\r
1454 if(iNumBytes == SOCKET_ERROR)
\r
1455 ReportWSError("recv",WSAGetLastError());
\r
1459 SetErrorMsg(MSGJPN095, Pkt->LocalFile);
\r
1460 SetTaskMsg(MSGJPN095, Pkt->LocalFile);
\r
1461 Pkt->Abort = ABORT_ERROR;
\r
1465 if(shutdown(dSkt, 1) != 0)
\r
1466 ReportWSError("shutdown", WSAGetLastError());
\r
1470 if(ForceAbort == NO)
\r
1472 /* Abort
\82ð
\83z
\83X
\83g
\82É
\93`
\82¦
\82é */
\r
1473 if(Pkt->Abort != ABORT_NONE && iFileHandle != INVALID_HANDLE_VALUE)
\r
1475 SendData(Pkt->ctrl_skt, "\xFF\xF4\xFF", 3, MSG_OOB, CancelCheckWork); /* MSG_OOB
\82É
\92\8d\88Ó */
\r
1476 SendData(Pkt->ctrl_skt, "\xF2", 1, 0, CancelCheckWork);
\r
1477 command(Pkt->ctrl_skt, NULL, CancelCheckWork, "ABOR");
\r
1481 iRetCode = ReadReplyMessage(Pkt->ctrl_skt, Buf, 1024, CancelCheckWork, TmpBuf);
\r
1484 //DoPrintf("##DOWN REPLY : %s", Buf);
\r
1486 if(Pkt->Abort == ABORT_DISKFULL)
\r
1488 SetErrorMsg(MSGJPN096);
\r
1489 SetTaskMsg(MSGJPN096);
\r
1491 if(iRetCode >= FTP_RETRY)
\r
1493 if(Pkt->Abort != ABORT_NONE)
\r
1500 /*-----
\83_
\83E
\83\93\83\8d\81[
\83h
\8fI
\97¹
\81^
\92\86\8e~
\8e\9e\82Ì
\83\81\83b
\83Z
\81[
\83W
\82ð
\95\
\8e¦ ----------------------------
\r
1503 * TRANSPACKET *Pkt :
\93]
\91\97\83t
\83@
\83C
\83\8b\8fî
\95ñ
\r
1504 * int iRetCode :
\89\9e\93\9a\83R
\81[
\83h
\r
1508 *----------------------------------------------------------------------------*/
\r
1510 static void DispDownloadFinishMsg(TRANSPACKET *Pkt, int iRetCode)
\r
1512 char Fname[FMAX_PATH+1];
\r
1514 if(ForceAbort == NO)
\r
1516 if((iRetCode/100) >= FTP_CONTINUE)
\r
1518 strcpy(Fname, Pkt->RemoteFile);
\r
1520 #if defined(HAVE_OPENVMS)
\r
1521 /* OpenVMS
\82Ì
\8fê
\8d\87\81A
\8bó
\83f
\83B
\83\8c\83N
\83g
\83\8a\82Ö
\88Ú
\93®
\82·
\82é
\82Æ550 File not found
\82É
\82È
\82Á
\82Ä
\r
1522 *
\83G
\83\89\81[
\83_
\83C
\83A
\83\8d\83O
\82â
\83G
\83\89\81[
\83\81\83b
\83Z
\81[
\83W
\82ª
\8fo
\82é
\82Ì
\82Å
\89½
\82à
\82µ
\82È
\82¢ */
\r
1523 if (AskHostType() == HTYPE_VMS)
\r
1527 if((strncmp(Pkt->Cmd, "NLST", 4) == 0) || (strncmp(Pkt->Cmd, "LIST", 4) == 0))
\r
1529 SetTaskMsg(MSGJPN097);
\r
1530 strcpy(Fname, MSGJPN098);
\r
1532 else if((Pkt->hWndTrans != NULL) && (TimeStart != 0))
\r
1533 SetTaskMsg(MSGJPN099, TimeStart, Pkt->ExistSize/TimeStart);
\r
1535 SetTaskMsg(MSGJPN100);
\r
1537 if(Pkt->Abort != ABORT_USER)
\r
1539 if(DispUpDownErrDialog(downerr_dlg, Pkt->hWndTrans, Fname) == NO)
\r
1545 if((strncmp(Pkt->Cmd, "NLST", 4) == 0) || (strncmp(Pkt->Cmd, "LIST", 4) == 0))
\r
1546 SetTaskMsg(MSGJPN101, Pkt->ExistSize);
\r
1547 else if((Pkt->hWndTrans != NULL) && (TimeStart != 0))
\r
1548 SetTaskMsg(MSGJPN102, TimeStart, Pkt->ExistSize/TimeStart);
\r
1550 SetTaskMsg(MSGJPN103, Pkt->ExistSize);
\r
1557 /*-----
\83_
\83E
\83\93\83\8d\81[
\83h
\81^
\83A
\83b
\83v
\83\8d\81[
\83h
\83G
\83\89\81[
\82Ì
\83_
\83C
\83A
\83\8d\83O
\82ð
\95\
\8e¦ --------------------
\r
1560 * int RedID :
\83_
\83C
\83A
\83\8d\83O
\83{
\83b
\83N
\83X
\82Ì
\83\8a\83\
\81[
\83XID
\r
1561 * HWND hWnd :
\8f\91\82«
\8d\9e\82Ý
\92\86\83_
\83C
\83A
\83\8d\83O
\82Ì
\83E
\83C
\83\93\83h
\83E
\r
1562 * char *Fname :
\83t
\83@
\83C
\83\8b\96¼
\r
1565 * int
\83X
\83e
\81[
\83^
\83X (YES=
\92\86\8e~/NO=
\91S
\82Ä
\92\86\8e~)
\r
1566 *----------------------------------------------------------------------------*/
\r
1568 static int DispUpDownErrDialog(int ResID, HWND hWnd, char *Fname)
\r
1571 hWnd = GetMainHwnd();
\r
1573 SoundPlay(SND_ERROR);
\r
1574 return(DialogBoxParam(GetFtpInst(), MAKEINTRESOURCE(ResID), hWnd, UpDownErrorDialogProc, (LPARAM)Fname));
\r
1578 /*-----
\83_
\83E
\83\93\83\8d\81[
\83h
\83G
\83\89\81[
\81^
\83A
\83b
\83v
\83\8d\81[
\83h
\83G
\83\89\81[
\83_
\83C
\83A
\83\8d\83O
\82Ì
\83R
\81[
\83\8b\83o
\83b
\83N --------
\r
1581 * HWND hDlg :
\83E
\83C
\83\93\83h
\83E
\83n
\83\93\83h
\83\8b\r
1582 * UINT message :
\83\81\83b
\83Z
\81[
\83W
\94Ô
\8d\86\r
1583 * WPARAM wParam :
\83\81\83b
\83Z
\81[
\83W
\82Ì WPARAM
\88ø
\90\94\r
1584 * LPARAM lParam :
\83\81\83b
\83Z
\81[
\83W
\82Ì LPARAM
\88ø
\90\94\r
1588 *----------------------------------------------------------------------------*/
\r
1590 static BOOL CALLBACK UpDownErrorDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
\r
1594 case WM_INITDIALOG :
\r
1595 SendDlgItemMessage(hDlg, UPDOWN_ERR_FNAME, WM_SETTEXT, 0, (LPARAM)lParam);
\r
1596 SendDlgItemMessage(hDlg, UPDOWN_ERR_MSG, WM_SETTEXT, 0, (LPARAM)ErrMsg);
\r
1600 switch(GET_WM_COMMAND_ID(wParam, lParam))
\r
1603 EndDialog(hDlg, YES);
\r
1607 EndDialog(hDlg, NO);
\r
1616 /*-----
\83_
\83E
\83\93\83\8d\81[
\83h
\82Ì
\83\8a\83W
\83\85\81[
\83\80\82Ì
\8f\80\94õ
\82ð
\8ds
\82¤ ----------------------------------
\r
1619 * TRANSPACKET *Pkt :
\93]
\91\97\83t
\83@
\83C
\83\8b\8fî
\95ñ
\r
1620 * iont ProcMode :
\8f\88\97\9d\83\82\81[
\83h(EXIST_xxx)
\r
1621 * LONGLONG Size :
\83\8d\81[
\83h
\8dÏ
\82Ý
\82Ì
\83t
\83@
\83C
\83\8b\82Ì
\83T
\83C
\83Y
\r
1622 * int *Mode :
\83t
\83@
\83C
\83\8b\8dì
\90¬
\83\82\81[
\83h (CREATE_xxxx)
\r
1625 * int
\93]
\91\97\82ð
\8ds
\82¤
\82©
\82Ç
\82¤
\82©(YES/NO=
\82±
\82Ì
\83t
\83@
\83C
\83\8b\82ð
\92\86\8e~/NO_ALL=
\91S
\82Ä
\92\86\8e~)
\r
1628 * Pkt->ExistSize
\82Ì
\83Z
\83b
\83g
\82ð
\8ds
\82È
\82¤
\r
1629 *----------------------------------------------------------------------------*/
\r
1631 static int SetDownloadResume(TRANSPACKET *Pkt, int ProcMode, LONGLONG Size, int *Mode, int *CancelCheckWork)
\r
1635 char Reply[ERR_MSG_LEN+7];
\r
1640 Pkt->ExistSize = 0;
\r
1641 *Mode = CREATE_ALWAYS;
\r
1643 if(ProcMode == EXIST_RESUME)
\r
1645 iRetCode = command(Pkt->ctrl_skt, Reply, CancelCheckWork, "REST %s", MakeNumString(Size, Tmp, FALSE));
\r
1646 if(iRetCode/100 < FTP_RETRY)
\r
1648 /*
\83\8a\83W
\83\85\81[
\83\80 */
\r
1649 if(Pkt->hWndTrans != NULL)
\r
1650 Pkt->ExistSize = Size;
\r
1651 *Mode = OPEN_ALWAYS;
\r
1655 Com = DialogBox(GetFtpInst(), MAKEINTRESOURCE(noresume_dlg), Pkt->hWndTrans, NoResumeWndProc);
\r
1658 if(Com == NO_ALL) /*
\91S
\82Ä
\92\86\8e~ */
\r
1660 Pkt->Abort = ABORT_USER;
\r
1668 /*----- resume
\83G
\83\89\81[
\83_
\83C
\83A
\83\8d\83O
\82Ì
\83R
\81[
\83\8b\83o
\83b
\83N ----------------------------------
\r
1671 * HWND hDlg :
\83E
\83C
\83\93\83h
\83E
\83n
\83\93\83h
\83\8b\r
1672 * UINT message :
\83\81\83b
\83Z
\81[
\83W
\94Ô
\8d\86\r
1673 * WPARAM wParam :
\83\81\83b
\83Z
\81[
\83W
\82Ì WPARAM
\88ø
\90\94\r
1674 * LPARAM lParam :
\83\81\83b
\83Z
\81[
\83W
\82Ì LPARAM
\88ø
\90\94\r
1678 *----------------------------------------------------------------------------*/
\r
1680 static BOOL CALLBACK NoResumeWndProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)
\r
1684 case WM_INITDIALOG :
\r
1688 switch(GET_WM_COMMAND_ID(wParam, lParam))
\r
1691 EndDialog(hDlg, YES);
\r
1695 EndDialog(hDlg, NO);
\r
1698 case RESUME_CANCEL_ALL :
\r
1699 EndDialog(hDlg, NO_ALL);
\r
1709 /*-----
\83A
\83b
\83v
\83\8d\81[
\83h
\82ð
\8ds
\82È
\82¤ --------------------------------------------------
\r
1712 * SOCKET cSkt :
\83R
\83\93\83g
\83\8d\81[
\83\8b\83\
\83P
\83b
\83g
\r
1713 * TRANSPACKET *Pkt :
\93]
\91\97\83t
\83@
\83C
\83\8b\8fî
\95ñ
\r
1716 * int
\89\9e\93\9a\83R
\81[
\83h
\r
1717 *----------------------------------------------------------------------------*/
\r
1719 static int DoUpLoad(SOCKET cSkt, TRANSPACKET *Pkt)
\r
1722 char Reply[ERR_MSG_LEN+7];
\r
1724 Pkt->ctrl_skt = cSkt;
\r
1726 if(Pkt->Mode != EXIST_IGNORE)
\r
1728 if(CheckFileReadable(Pkt->LocalFile) == SUCCESS)
\r
1730 if(Pkt->Type == TYPE_I)
\r
1731 Pkt->KanjiCode = KANJI_NOCNV;
\r
1733 iRetCode = command(Pkt->ctrl_skt, Reply, &Canceled, "TYPE %c", Pkt->Type);
\r
1734 if(iRetCode/100 < FTP_RETRY)
\r
1736 if(Pkt->Mode == EXIST_UNIQUE)
\r
1737 strcpy(Pkt->Cmd, "STOU ");
\r
1739 if(Pkt->hWndTrans != NULL)
\r
1740 DispTransFileInfo(Pkt, MSGJPN104, TRUE, YES);
\r
1742 if(BackgrndMessageProc() == NO)
\r
1744 if(AskPasvMode() != YES)
\r
1745 iRetCode = UpLoadNonPassive(Pkt);
\r
1747 iRetCode = UpLoadPassive(Pkt);
\r
1753 SetErrorMsg(Reply);
\r
1755 /*
\91®
\90«
\95Ï
\8dX */
\r
1756 if((Pkt->Attr != -1) && ((iRetCode/100) == FTP_COMPLETE))
\r
1757 command(Pkt->ctrl_skt, Reply, &Canceled, "%s %03X %s", AskHostChmodCmd(), Pkt->Attr, Pkt->RemoteFile);
\r
1761 SetErrorMsg(MSGJPN105, Pkt->LocalFile);
\r
1762 SetTaskMsg(MSGJPN105, Pkt->LocalFile);
\r
1764 Pkt->Abort = ABORT_ERROR;
\r
1765 DispUploadFinishMsg(Pkt, iRetCode);
\r
1770 DispTransFileInfo(Pkt, MSGJPN106, TRUE, YES);
\r
1771 SetTaskMsg(MSGJPN107, Pkt->LocalFile);
\r
1778 /*-----
\92Ê
\8fí
\83\82\81[
\83h
\82Å
\83t
\83@
\83C
\83\8b\82ð
\83A
\83b
\83v
\83\8d\81[
\83h ------------------------------------
\r
1781 * TRANSPACKET *Pkt :
\93]
\91\97\83t
\83@
\83C
\83\8b\8fî
\95ñ
\r
1784 * int
\89\9e\93\9a\83R
\81[
\83h
\r
1785 *----------------------------------------------------------------------------*/
\r
1787 static int UpLoadNonPassive(TRANSPACKET *Pkt)
\r
1791 SOCKET data_socket = INVALID_SOCKET; // data channel socket
\r
1792 SOCKET listen_socket = INVALID_SOCKET; // data listen socket
\r
1794 struct sockaddr_in saSockAddr1;
\r
1796 char Reply[ERR_MSG_LEN+7];
\r
1798 if((listen_socket = GetFTPListenSocket(Pkt->ctrl_skt, &Canceled)) != INVALID_SOCKET)
\r
1800 SetUploadResume(Pkt, Pkt->Mode, Pkt->ExistSize, &Resume);
\r
1802 sprintf(Buf, "%s%s", Pkt->Cmd, Pkt->RemoteFile);
\r
1804 sprintf(Buf, "%s%s", "APPE ", Pkt->RemoteFile);
\r
1806 iRetCode = command(Pkt->ctrl_skt, Reply, &Canceled, "%s", Buf);
\r
1807 if((iRetCode/100) == FTP_PRELIM)
\r
1809 if(SocksGet2ndBindReply(listen_socket, &data_socket) == FAIL)
\r
1811 iLength=sizeof(saSockAddr1);
\r
1812 data_socket = do_accept(listen_socket,(struct sockaddr *)&saSockAddr1, (int *)&iLength);
\r
1814 if(shutdown(listen_socket, 1) != 0)
\r
1815 ReportWSError("shutdown listen", WSAGetLastError());
\r
1816 listen_socket = DoClose(listen_socket);
\r
1818 if(data_socket == INVALID_SOCKET)
\r
1820 SetErrorMsg(MSGJPN280);
\r
1821 ReportWSError("accept", WSAGetLastError());
\r
1825 DoPrintf("Skt=%u : accept from %s port %u", data_socket, inet_ntoa(saSockAddr1.sin_addr), ntohs(saSockAddr1.sin_port));
\r
1828 if(data_socket != INVALID_SOCKET)
\r
1830 iRetCode = UpLoadFile(Pkt, data_socket);
\r
1831 data_socket = DoClose(data_socket);
\r
1836 SetErrorMsg(Reply);
\r
1837 SetTaskMsg(MSGJPN108);
\r
1838 listen_socket = DoClose(listen_socket);
\r
1844 SetErrorMsg(MSGJPN279);
\r
1847 DispUploadFinishMsg(Pkt, iRetCode);
\r
1853 /*----- Passive
\83\82\81[
\83h
\82Å
\83t
\83@
\83C
\83\8b\82ð
\83A
\83b
\83v
\83\8d\81[
\83h ---------------------------------
\r
1856 * TRANSPACKET *Pkt :
\93]
\91\97\83t
\83@
\83C
\83\8b\8fî
\95ñ
\r
1859 * int
\89\9e\93\9a\83R
\81[
\83h
\r
1860 *----------------------------------------------------------------------------*/
\r
1862 static int UpLoadPassive(TRANSPACKET *Pkt)
\r
1865 SOCKET data_socket = INVALID_SOCKET; // data channel socket
\r
1871 char Reply[ERR_MSG_LEN+7];
\r
1873 iRetCode = command(Pkt->ctrl_skt, Buf, &Canceled, "PASV");
\r
1874 if(iRetCode/100 == FTP_COMPLETE)
\r
1876 if(GetAdrsAndPort(Buf, Adrs, &Port, 19) == SUCCESS)
\r
1878 if((data_socket = connectsock(Adrs, Port, MSGJPN109, &Canceled)) != INVALID_SOCKET)
\r
1880 if(setsockopt(data_socket, IPPROTO_TCP, TCP_NODELAY, (LPSTR)&Flg, sizeof(Flg)) == SOCKET_ERROR)
\r
1881 ReportWSError("setsockopt", WSAGetLastError());
\r
1883 SetUploadResume(Pkt, Pkt->Mode, Pkt->ExistSize, &Resume);
\r
1885 sprintf(Buf, "%s%s", Pkt->Cmd, Pkt->RemoteFile);
\r
1887 sprintf(Buf, "%s%s", "APPE ", Pkt->RemoteFile);
\r
1889 iRetCode = command(Pkt->ctrl_skt, Reply, &Canceled, "%s", Buf);
\r
1890 if(iRetCode/100 == FTP_PRELIM)
\r
1892 iRetCode = UpLoadFile(Pkt, data_socket);
\r
1894 data_socket = DoClose(data_socket);
\r
1898 SetErrorMsg(Reply);
\r
1899 SetTaskMsg(MSGJPN110);
\r
1900 data_socket = DoClose(data_socket);
\r
1906 SetErrorMsg(MSGJPN281);
\r
1913 SetTaskMsg(MSGJPN111);
\r
1920 DispUploadFinishMsg(Pkt, iRetCode);
\r
1926 /*-----
\83A
\83b
\83v
\83\8d\81[
\83h
\82Ì
\8eÀ
\8ds ----------------------------------------------------
\r
1929 * TRANSPACKET *Pkt :
\93]
\91\97\83t
\83@
\83C
\83\8b\8fî
\95ñ
\r
1930 * SOCKET dSkt :
\83f
\81[
\83^
\83\
\83P
\83b
\83g
\r
1933 * int
\89\9e\93\9a\83R
\81[
\83h
\r
1936 *
\93]
\91\97\82Ì
\8co
\89ß
\95\
\8e¦
\82Í
\81A
\83C
\83\93\83^
\81[
\83o
\83\8b\83^
\83C
\83}
\82Å
\8co
\89ß
\82ð
\95\
\8e¦
\82·
\82é
\r
1937 *
\93]
\91\97\83_
\83C
\83A
\83\8d\83O
\82ð
\8fo
\82³
\82È
\82¢
\82Å
\83A
\83b
\83v
\83\8d\81[
\83h
\82·
\82é
\82±
\82Æ
\82Í
\82È
\82¢
\r
1938 *----------------------------------------------------------------------------*/
\r
1940 static int UpLoadFile(TRANSPACKET *Pkt, SOCKET dSkt)
\r
1943 HANDLE iFileHandle;
\r
1944 SECURITY_ATTRIBUTES Sec;
\r
1945 char Buf[BUFSIZE];
\r
1946 char Buf2[BUFSIZE+3];
\r
1947 CODECONVINFO cInfo;
\r
1948 TERMCODECONVINFO tInfo;
\r
1955 char TmpBuf[ONELINE_BUF_SIZE];
\r
1959 #ifdef SET_BUFFER_SIZE
\r
1960 /* Add by H.Shirouzu at 2002/10/02 */
\r
1961 int buf_size = SOCKBUF_SIZE;
\r
1962 for ( ; buf_size > 0; buf_size /= 2)
\r
1963 if (setsockopt(dSkt, SOL_SOCKET, SO_SNDBUF, (char *)&buf_size, sizeof(buf_size)) == 0)
\r
1968 #ifdef DISABLE_NETWORK_BUFFERS
\r
1969 //
\94O
\82Ì
\82½
\82ß
\91\97\90M
\83o
\83b
\83t
\83@
\82ð
\96³
\8cø
\82É
\82·
\82é
\81B
\r
1971 setsockopt(dSkt, SOL_SOCKET, SO_SNDBUF, (char *)&buf_size, sizeof(buf_size));
\r
1974 Pkt->Abort = ABORT_NONE;
\r
1976 Sec.nLength = sizeof(SECURITY_ATTRIBUTES);
\r
1977 Sec.lpSecurityDescriptor = NULL;
\r
1978 Sec.bInheritHandle = FALSE;
\r
1980 if((iFileHandle = CreateFile(Pkt->LocalFile, GENERIC_READ,
\r
1981 FILE_SHARE_READ|FILE_SHARE_WRITE, &Sec, OPEN_EXISTING, 0, NULL)) != INVALID_HANDLE_VALUE)
\r
1983 // UTF-8
\91Î
\89\9e\r
1984 int ProcessedBOM = NO;
\r
1985 if(Pkt->hWndTrans != NULL)
\r
1987 Low = GetFileSize(iFileHandle, &High);
\r
1988 Pkt->Size = MakeLongLong(High, Low);
\r
1990 High = (DWORD)HIGH32(Pkt->ExistSize);
\r
1991 Low = (DWORD)LOW32(Pkt->ExistSize);
\r
1992 SetFilePointer(iFileHandle, Low, &High, FILE_BEGIN);
\r
1994 AllTransSizeNow = 0;
\r
1995 TimeStart = time(NULL);
\r
1996 SetTimer(Pkt->hWndTrans, TIMER_DISPLAY, DISPLAY_TIMING, NULL);
\r
1999 InitCodeConvInfo(&cInfo);
\r
2000 cInfo.KanaCnv = Pkt->KanaCnv;
\r
2001 InitTermCodeConvInfo(&tInfo);
\r
2003 /*=====
\83t
\83@
\83C
\83\8b\82ð
\91\97\90M
\82·
\82é
\83\8b\81[
\83v =====*/
\r
2004 while((Pkt->Abort == ABORT_NONE) &&
\r
2005 (ForceAbort == NO) &&
\r
2006 (ReadFile(iFileHandle, Buf, BUFSIZE, &iNumBytes, NULL) == TRUE))
\r
2008 if(iNumBytes == 0)
\r
2011 /* EOF
\8f\9c\8b\8e */
\r
2013 if((RmEOF == YES) && (Pkt->Type == TYPE_A))
\r
2015 if((EofPos = memchr(Buf, 0x1A, iNumBytes)) != NULL)
\r
2016 iNumBytes = EofPos - Buf;
\r
2019 /*
\8a¿
\8e\9a\83R
\81[
\83h
\95Ï
\8a· */
\r
2020 if(Pkt->KanjiCode != KANJI_NOCNV)
\r
2023 cInfo.StrLen = iNumBytes;
\r
2025 cInfo.BufSize = BUFSIZE+3;
\r
2028 //
\82±
\82±
\82Å
\91S
\82ÄUTF-8
\82Ö
\95Ï
\8a·
\82·
\82é
\r
2029 // TODO: SJIS
\88È
\8aO
\82à
\92¼
\90ÚUTF-8
\82Ö
\95Ï
\8a·
\r
2030 // if(Pkt->KanjiCode == KANJI_JIS)
\r
2031 // Continue = ConvSJIStoJIS(&cInfo);
\r
2033 // Continue = ConvSJIStoEUC(&cInfo);
\r
2034 char Buf3[(BUFSIZE + 3) * 4];
\r
2035 CODECONVINFO cInfo2;
\r
2036 switch(Pkt->KanjiCodeDesired)
\r
2039 switch(Pkt->KanjiCode)
\r
2042 memcpy(Buf3, cInfo.Str, cInfo.StrLen);
\r
2043 cInfo2.OutLen = cInfo.StrLen;
\r
2051 if(ProcessedBOM == NO)
\r
2053 memcpy(Buf3, "\xEF\xBB\xBF", 3);
\r
2054 cInfo2.OutLen = 3;
\r
2056 ProcessedBOM = YES;
\r
2059 Continue = ConvSJIStoUTF8N(&cInfo);
\r
2060 memcpy(Buf3, cInfo.Str, cInfo.OutLen);
\r
2061 cInfo2.OutLen = cInfo.OutLen;
\r
2066 switch(Pkt->KanjiCode)
\r
2069 Continue = ConvJIStoSJIS(&cInfo);
\r
2070 memcpy(Buf3, Buf2, cInfo.OutLen);
\r
2071 cInfo2.OutLen = cInfo.OutLen;
\r
2074 memcpy(Buf3, cInfo.Str, cInfo.StrLen);
\r
2075 cInfo2.OutLen = cInfo.StrLen;
\r
2081 if(ProcessedBOM == NO)
\r
2083 memcpy(Buf3, "\xEF\xBB\xBF", 3);
\r
2084 cInfo2.OutLen = 3;
\r
2086 ProcessedBOM = YES;
\r
2089 Continue = ConvJIStoSJIS(&cInfo);
\r
2090 InitCodeConvInfo(&cInfo2);
\r
2091 cInfo2.KanaCnv = NO;
\r
2092 cInfo2.Str = cInfo.Buf;
\r
2093 cInfo2.StrLen = cInfo.OutLen;
\r
2094 cInfo2.Buf = Buf3;
\r
2095 cInfo2.BufSize = (BUFSIZE + 3) * 4;
\r
2096 ConvSJIStoUTF8N(&cInfo2);
\r
2101 switch(Pkt->KanjiCode)
\r
2104 Continue = ConvEUCtoSJIS(&cInfo);
\r
2105 memcpy(Buf3, Buf2, cInfo.OutLen);
\r
2106 cInfo2.OutLen = cInfo.OutLen;
\r
2111 memcpy(Buf3, cInfo.Str, cInfo.StrLen);
\r
2112 cInfo2.OutLen = cInfo.StrLen;
\r
2116 if(ProcessedBOM == NO)
\r
2118 memcpy(Buf3, "\xEF\xBB\xBF", 3);
\r
2119 cInfo2.OutLen = 3;
\r
2121 ProcessedBOM = YES;
\r
2124 Continue = ConvEUCtoSJIS(&cInfo);
\r
2125 InitCodeConvInfo(&cInfo2);
\r
2126 cInfo2.KanaCnv = NO;
\r
2127 cInfo2.Str = cInfo.Buf;
\r
2128 cInfo2.StrLen = cInfo.OutLen;
\r
2129 cInfo2.Buf = Buf3;
\r
2130 cInfo2.BufSize = (BUFSIZE + 3) * 4;
\r
2131 ConvSJIStoUTF8N(&cInfo2);
\r
2136 if(ProcessedBOM == NO)
\r
2138 if(memcmp(Buf, "\xEF\xBB\xBF", 3) == 0)
\r
2141 cInfo.StrLen -= 3;
\r
2143 cInfo2.OutLen = 0;
\r
2144 switch(Pkt->KanjiCode)
\r
2147 memcpy(Buf3, "\xEF\xBB\xBF", 3);
\r
2148 cInfo2.OutLen = 3;
\r
2152 ProcessedBOM = YES;
\r
2155 switch(Pkt->KanjiCode)
\r
2158 Continue = ConvUTF8NtoSJIS(&cInfo);
\r
2159 memcpy(Buf3, Buf2, cInfo.OutLen);
\r
2160 cInfo2.OutLen = cInfo.OutLen;
\r
2167 memcpy(Buf3, cInfo.Str, cInfo.StrLen);
\r
2168 cInfo2.OutLen = cInfo.StrLen;
\r
2175 // if(TermCodeConvAndSend(&tInfo, dSkt, Buf2, cInfo.OutLen, Pkt->Type) == FAIL)
\r
2176 if(TermCodeConvAndSend(&tInfo, dSkt, Buf3, cInfo2.OutLen, Pkt->Type) == FAIL)
\r
2178 Pkt->Abort = ABORT_ERROR;
\r
2182 while(Continue == YES);
\r
2186 if(TermCodeConvAndSend(&tInfo, dSkt, Buf, iNumBytes, Pkt->Type) == FAIL)
\r
2187 Pkt->Abort = ABORT_ERROR;
\r
2190 Pkt->ExistSize += iNumBytes;
\r
2191 if(Pkt->hWndTrans != NULL)
\r
2192 AllTransSizeNow += iNumBytes;
\r
2194 if(BackgrndMessageProc() == YES)
\r
2197 if(EofPos != NULL)
\r
2201 if((ForceAbort == NO) && (Pkt->Abort == ABORT_NONE))
\r
2203 /*
\91\97\82è
\8ec
\82µ
\82½
\83f
\81[
\83^
\82ð
\91\97\90M */
\r
2204 if(Pkt->KanjiCode != KANJI_NOCNV)
\r
2207 cInfo.BufSize = BUFSIZE+3;
\r
2208 FlushRestData(&cInfo);
\r
2210 if(TermCodeConvAndSend(&tInfo, dSkt, Buf2, cInfo.OutLen, Pkt->Type) == FAIL)
\r
2211 Pkt->Abort = ABORT_ERROR;
\r
2215 tInfo.BufSize = BUFSIZE+3;
\r
2216 FlushRestTermCodeConvData(&tInfo);
\r
2217 if(SendData(dSkt, Buf2, tInfo.OutLen, 0, &Canceled) == FAIL)
\r
2218 Pkt->Abort = ABORT_ERROR;
\r
2221 /*
\83O
\83\89\83t
\95\
\8e¦
\82ð
\8dX
\90V */
\r
2222 if(Pkt->hWndTrans != NULL)
\r
2224 KillTimer(Pkt->hWndTrans, TIMER_DISPLAY);
\r
2225 DispTransferStatus(Pkt->hWndTrans, YES, Pkt);
\r
2226 TimeStart = time(NULL) - TimeStart + 1;
\r
2228 CloseHandle(iFileHandle);
\r
2232 SetErrorMsg(MSGJPN112, Pkt->LocalFile);
\r
2233 SetTaskMsg(MSGJPN112, Pkt->LocalFile);
\r
2234 Pkt->Abort = ABORT_ERROR;
\r
2237 if(shutdown(dSkt, 1) != 0)
\r
2238 ReportWSError("shutdown", WSAGetLastError());
\r
2242 while(do_recv(dSkt, Buf, BUFSIZE, 0, &TimeOutErr, &Canceled) > 0)
\r
2246 iRetCode = ReadReplyMessage(Pkt->ctrl_skt, Buf, 1024, &Canceled, TmpBuf);
\r
2249 //DoPrintf("##UP REPLY : %s", Buf);
\r
2251 if(iRetCode >= FTP_RETRY)
\r
2254 if(Pkt->Abort != ABORT_NONE)
\r
2261 /*-----
\83o
\83b
\83t
\83@
\82Ì
\93à
\97e
\82ð
\89ü
\8ds
\83R
\81[
\83h
\95Ï
\8a·
\82µ
\82Ä
\91\97\90M --------------------------------
\r
2264 * TERMCODECONVINFO *tInfo :
\89ü
\8ds
\83R
\81[
\83h
\95Ï
\8a·
\83p
\83P
\83b
\83g
\r
2265 * SOCKET Skt :
\83\
\83P
\83b
\83g
\r
2266 * char *Data :
\83f
\81[
\83^
\r
2267 * int Size :
\83f
\81[
\83^
\82Ì
\83T
\83C
\83Y
\r
2268 * int Ascii :
\83\82\81[
\83h
\81@
\81@(TYPE_xx)
\r
2271 * int
\89\9e\93\9a\83R
\81[
\83h
\r
2272 *----------------------------------------------------------------------------*/
\r
2274 static int TermCodeConvAndSend(TERMCODECONVINFO *tInfo, SOCKET Skt, char *Data, int Size, int Ascii)
\r
2276 char Buf3[BUFSIZE*2];
\r
2282 // CR-LF
\88È
\8aO
\82Ì
\89ü
\8ds
\83R
\81[
\83h
\82ð
\95Ï
\8a·
\82µ
\82È
\82¢
\83\82\81[
\83h
\82Í
\82±
\82±
\82Ö
\92Ç
\89Á
\r
2283 if(Ascii == TYPE_A)
\r
2285 tInfo->Str = Data;
\r
2286 tInfo->StrLen = Size;
\r
2287 tInfo->Buf = Buf3;
\r
2288 tInfo->BufSize = BUFSIZE*2;
\r
2291 Continue = ConvTermCodeToCRLF(tInfo);
\r
2292 if((Ret = SendData(Skt, Buf3, tInfo->OutLen, 0, &Canceled)) == FAIL)
\r
2295 while(Continue == YES);
\r
2298 Ret = SendData(Skt, Data, Size, 0, &Canceled);
\r
2304 /*-----
\83A
\83b
\83v
\83\8d\81[
\83h
\8fI
\97¹
\81^
\92\86\8e~
\8e\9e\82Ì
\83\81\83b
\83Z
\81[
\83W
\82ð
\95\
\8e¦ ----------------------------
\r
2307 * TRANSPACKET *Pkt :
\93]
\91\97\83t
\83@
\83C
\83\8b\8fî
\95ñ
\r
2308 * int iRetCode :
\89\9e\93\9a\83R
\81[
\83h
\r
2312 *----------------------------------------------------------------------------*/
\r
2314 static void DispUploadFinishMsg(TRANSPACKET *Pkt, int iRetCode)
\r
2316 if(ForceAbort == NO)
\r
2318 if((iRetCode/100) >= FTP_CONTINUE)
\r
2320 if((Pkt->hWndTrans != NULL) && (TimeStart != 0))
\r
2321 SetTaskMsg(MSGJPN113, TimeStart, Pkt->ExistSize/TimeStart);
\r
2323 SetTaskMsg(MSGJPN114);
\r
2325 if(Pkt->Abort != ABORT_USER)
\r
2327 if(DispUpDownErrDialog(uperr_dlg, Pkt->hWndTrans, Pkt->LocalFile) == NO)
\r
2333 if((Pkt->hWndTrans != NULL) && (TimeStart != 0))
\r
2334 SetTaskMsg(MSGJPN115, TimeStart, Pkt->ExistSize/TimeStart);
\r
2336 SetTaskMsg(MSGJPN116);
\r
2343 /*-----
\83A
\83b
\83v
\83\8d\81[
\83h
\82Ì
\83\8a\83W
\83\85\81[
\83\80\82Ì
\8f\80\94õ
\82ð
\8ds
\82¤ ----------------------------------
\r
2346 * TRANSPACKET *Pkt :
\93]
\91\97\83t
\83@
\83C
\83\8b\8fî
\95ñ
\r
2347 * iont ProcMode :
\8f\88\97\9d\83\82\81[
\83h(EXIST_xxx)
\r
2348 * LONGLONG Size :
\83z
\83X
\83g
\82É
\82 \82é
\83t
\83@
\83C
\83\8b\82Ì
\83T
\83C
\83Y
\r
2349 * int *Mode :
\83\8a\83W
\83\85\81[
\83\80\82ð
\8ds
\82¤
\82©
\82Ç
\82¤
\82© (YES/NO)
\r
2352 * int
\83X
\83e
\81[
\83^
\83X = YES
\r
2355 * Pkt->ExistSize
\82Ì
\83Z
\83b
\83g
\82ð
\8ds
\82È
\82¤
\r
2356 *----------------------------------------------------------------------------*/
\r
2358 static int SetUploadResume(TRANSPACKET *Pkt, int ProcMode, LONGLONG Size, int *Mode)
\r
2360 Pkt->ExistSize = 0;
\r
2362 if(ProcMode == EXIST_RESUME)
\r
2364 if(Pkt->hWndTrans != NULL)
\r
2366 Pkt->ExistSize = Size;
\r
2374 /*-----
\93]
\91\97\92\86\83_
\83C
\83A
\83\8d\83O
\83{
\83b
\83N
\83X
\82Ì
\83R
\81[
\83\8b\83o
\83b
\83N --------------------------------
\r
2377 * HWND hDlg :
\83E
\83C
\83\93\83h
\83E
\83n
\83\93\83h
\83\8b\r
2378 * UINT message :
\83\81\83b
\83Z
\81[
\83W
\94Ô
\8d\86\r
2379 * WPARAM wParam :
\83\81\83b
\83Z
\81[
\83W
\82Ì WPARAM
\88ø
\90\94\r
2380 * LPARAM lParam :
\83\81\83b
\83Z
\81[
\83W
\82Ì LPARAM
\88ø
\90\94\r
2384 *----------------------------------------------------------------------------*/
\r
2386 static LRESULT CALLBACK TransDlgProc(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam)
\r
2391 static TRANSPACKET *Pkt;
\r
2395 case WM_INITDIALOG :
\r
2396 GetWindowRect(hDlg, &RectDlg);
\r
2397 RectDlg.right -= RectDlg.left;
\r
2398 RectDlg.bottom -= RectDlg.top;
\r
2399 GetWindowRect(GetMainHwnd(), &RectPar);
\r
2401 ((RectPar.right + RectPar.left) / 2) - (RectDlg.right / 2),
\r
2402 ((RectPar.bottom + RectPar.top) / 2) - (RectDlg.bottom / 2),
\r
2407 hMenu = GetSystemMenu(hDlg, FALSE);
\r
2408 EnableMenuItem(hMenu, SC_CLOSE, MF_GRAYED);
\r
2412 switch(LOWORD(wParam))
\r
2414 case TRANS_STOP_NEXT :
\r
2418 case TRANS_STOP_ALL :
\r
2420 /*
\82±
\82±
\82É break
\82Í
\82È
\82¢ */
\r
2423 Pkt->Abort = ABORT_USER;
\r
2430 if(wParam == TIMER_DISPLAY)
\r
2432 if(MoveToForeground == YES)
\r
2433 SetForegroundWindow(hDlg);
\r
2434 MoveToForeground = NO;
\r
2435 KillTimer(hDlg, TIMER_DISPLAY);
\r
2436 DispTransferStatus(hDlg, NO, Pkt);
\r
2437 SetTimer(hDlg, TIMER_DISPLAY, DISPLAY_TIMING, NULL);
\r
2441 case WM_SET_PACKET :
\r
2442 Pkt = (TRANSPACKET *)lParam;
\r
2449 /*-----
\93]
\91\97\83X
\83e
\81[
\83^
\83X
\82ð
\95\
\8e¦ --------------------------------------------------
\r
2452 * HWND hWnd :
\83E
\83C
\83\93\83h
\83E
\83n
\83\93\83h
\83\8b\r
2453 * int End :
\93]
\91\97\82ª
\8a®
\97¹
\82µ
\82½
\82©
\82Ç
\82¤
\82© (YES/NO)
\r
2457 *----------------------------------------------------------------------------*/
\r
2459 static void DispTransferStatus(HWND hWnd, int End, TRANSPACKET *Pkt)
\r
2473 SendMessage(hWnd, WM_GETTEXT, 79, (LPARAM)Str);
\r
2474 if((Pos = strchr(Str, ')')) != NULL)
\r
2478 sprintf(Tmp, "(%d)%s", AskTransferFileNum(), Pos);
\r
2479 SendMessage(hWnd, WM_SETTEXT, 0, (LPARAM)Tmp);
\r
2481 if(Pkt->Abort == ABORT_NONE)
\r
2485 TotalLap = time(NULL) - TimeStart + 1;
\r
2489 Bps = AllTransSizeNow / TotalLap;
\r
2490 Transed = Pkt->Size - Pkt->ExistSize;
\r
2492 if(Pkt->Size <= 0)
\r
2493 sprintf(Tmp, "%d ", Pkt->ExistSize);
\r
2494 else if(Pkt->Size < 1024)
\r
2495 sprintf(Tmp, "%s / %s ", MakeNumString(Pkt->ExistSize, Num1, TRUE), MakeNumString(Pkt->Size, Num2, TRUE));
\r
2497 sprintf(Tmp, "%sk / %sk ", MakeNumString(Pkt->ExistSize/1024, Num1, TRUE), MakeNumString(Pkt->Size/1024, Num2, TRUE));
\r
2501 sprintf(Tmp, "( 0 B/S )");
\r
2502 else if(Bps < 1000)
\r
2503 sprintf(Tmp, "( %s B/S )", MakeNumString(Bps, Num1, TRUE));
\r
2505 sprintf(Tmp, "( %s.%02d KB/S )", MakeNumString(Bps/1000, Num1, TRUE), (int)((Bps%1000)/10));
\r
2508 if((Bps > 0) && (Pkt->Size > 0) && (Transed >= 0))
\r
2510 sprintf(Tmp, " %d:%02d", (int)((Transed/Bps)/60), (int)((Transed/Bps)%60));
\r
2514 strcat(Str, " ??:??");
\r
2517 strcpy(Str, MSGJPN117);
\r
2520 strcpy(Str, MSGJPN118);
\r
2522 SendDlgItemMessage(hWnd, TRANS_STATUS, WM_SETTEXT, 0, (LPARAM)Str);
\r
2524 if(Pkt->Size <= 0)
\r
2526 else if(Pkt->Size < 1024*1024)
\r
2527 Per = (int)(Pkt->ExistSize * 100 / Pkt->Size);
\r
2529 Per = (int)((Pkt->ExistSize/1024) * 100 / (Pkt->Size/1024));
\r
2530 SendDlgItemMessage(hWnd, TRANS_TIME_BAR, PBM_SETPOS, Per, 0);
\r
2536 /*-----
\93]
\91\97\82·
\82é
\83t
\83@
\83C
\83\8b\82Ì
\8fî
\95ñ
\82ð
\95\
\8e¦ ------------------------------------------
\r
2539 * TRANSPACKET *Pkt :
\93]
\91\97\83t
\83@
\83C
\83\8b\8fî
\95ñ
\r
2540 * char *Title :
\83E
\83C
\83\93\83h
\83E
\82Ì
\83^
\83C
\83g
\83\8b\r
2541 * int SkipButton :
\81u
\82±
\82Ì
\83t
\83@
\83C
\83\8b\82ð
\92\86\8e~
\81v
\83{
\83^
\83\93\82Ì
\97L
\96³ (TRUE/FALSE)
\r
2542 * int Info :
\83t
\83@
\83C
\83\8b\8fî
\95ñ
\82ð
\95\
\8e¦
\82·
\82é
\82©
\82Ç
\82¤
\82© (YES/NO)
\r
2546 *----------------------------------------------------------------------------*/
\r
2548 static void DispTransFileInfo(TRANSPACKET *Pkt, char *Title, int SkipButton, int Info)
\r
2552 if(Pkt->hWndTrans != NULL)
\r
2554 EnableWindow(GetDlgItem(Pkt->hWndTrans, IDCANCEL), SkipButton);
\r
2556 sprintf(Tmp, "(%d)%s", AskTransferFileNum(), Title);
\r
2557 SendMessage(Pkt->hWndTrans, WM_SETTEXT, 0, (LPARAM)Tmp);
\r
2558 SendDlgItemMessage(Pkt->hWndTrans, TRANS_STATUS, WM_SETTEXT, 0, (LPARAM)"");
\r
2560 SendDlgItemMessage(Pkt->hWndTrans, TRANS_TIME_BAR, PBM_SETRANGE, 0, MAKELPARAM(0, 100));
\r
2561 SendDlgItemMessage(Pkt->hWndTrans, TRANS_TIME_BAR, PBM_SETSTEP, 1, 0);
\r
2562 SendDlgItemMessage(Pkt->hWndTrans, TRANS_TIME_BAR, PBM_SETPOS, 0, 0);
\r
2566 DispStaticText(GetDlgItem(Pkt->hWndTrans, TRANS_REMOTE), Pkt->RemoteFile);
\r
2567 DispStaticText(GetDlgItem(Pkt->hWndTrans, TRANS_LOCAL), Pkt->LocalFile);
\r
2569 if(Pkt->Type == TYPE_I)
\r
2570 SendDlgItemMessage(Pkt->hWndTrans, TRANS_MODE, WM_SETTEXT, 0, (LPARAM)MSGJPN119);
\r
2571 else if(Pkt->Type == TYPE_A)
\r
2572 SendDlgItemMessage(Pkt->hWndTrans, TRANS_MODE, WM_SETTEXT, 0, (LPARAM)MSGJPN120);
\r
2574 if(Pkt->KanjiCode == KANJI_NOCNV)
\r
2575 SendDlgItemMessage(Pkt->hWndTrans, TRANS_KANJI, WM_SETTEXT, 0, (LPARAM)MSGJPN121);
\r
2576 else if(Pkt->KanjiCode == KANJI_JIS)
\r
2577 SendDlgItemMessage(Pkt->hWndTrans, TRANS_KANJI, WM_SETTEXT, 0, (LPARAM)MSGJPN122);
\r
2578 else if(Pkt->KanjiCode == KANJI_EUC)
\r
2579 SendDlgItemMessage(Pkt->hWndTrans, TRANS_KANJI, WM_SETTEXT, 0, (LPARAM)MSGJPN123);
\r
2583 SendDlgItemMessage(Pkt->hWndTrans, TRANS_REMOTE, WM_SETTEXT, 0, (LPARAM)"");
\r
2584 SendDlgItemMessage(Pkt->hWndTrans, TRANS_LOCAL, WM_SETTEXT, 0, (LPARAM)"");
\r
2585 SendDlgItemMessage(Pkt->hWndTrans, TRANS_MODE, WM_SETTEXT, 0, (LPARAM)"");
\r
2586 SendDlgItemMessage(Pkt->hWndTrans, TRANS_KANJI, WM_SETTEXT, 0, (LPARAM)"");
\r
2593 /*----- PASV
\83R
\83}
\83\93\83h
\82Ì
\96ß
\82è
\92l
\82©
\82ç
\83A
\83h
\83\8c\83X
\82Æ
\83|
\81[
\83g
\94Ô
\8d\86\82ð
\92\8a\8fo --------------------
\r
2596 * char *Str : PASV
\83R
\83}
\83\93\83h
\82Ì
\83\8a\83v
\83\89\83C
\r
2597 * char *Adrs :
\83A
\83h
\83\8c\83X
\82Ì
\83R
\83s
\81[
\90æ ("www.xxx.yyy.zzz")
\r
2598 * int *Port :
\83|
\81[
\83g
\94Ô
\8d\86\82ð
\83Z
\83b
\83g
\82·
\82é
\83\8f\81[
\83N
\r
2599 * int Max :
\83A
\83h
\83\8c\83X
\95¶
\8e\9a\97ñ
\82Ì
\8dÅ
\91å
\92·
\r
2602 * int
\83X
\83e
\81[
\83^
\83X
\r
2604 *----------------------------------------------------------------------------*/
\r
2606 static int GetAdrsAndPort(char *Str, char *Adrs, int *Port, int Max)
\r
2614 Pos = strchr(Str, '(');
\r
2618 Btm = strchr(Pos, ',');
\r
2622 Btm = strchr(Btm, ',');
\r
2626 Btm = strchr(Btm, ',');
\r
2630 Btm = strchr(Btm, ',');
\r
2633 if((Btm - Pos) <= Max)
\r
2635 strncpy(Adrs, Pos, Btm - Pos);
\r
2636 *(Adrs + (Btm - Pos)) = NUL;
\r
2637 ReplaceAll(Adrs, ',', '.');
\r
2640 Btm = strchr(Pos, ',');
\r
2644 *Port = (atoi(Pos) * 0x100) + atoi(Btm);
\r
2657 /*----- Windows
\82Ì
\83X
\83y
\83V
\83\83\83\8b\83f
\83o
\83C
\83X
\82©
\82Ç
\82¤
\82©
\82ð
\95Ô
\82· -----------------------------
\r
2660 * char *Fname :
\83t
\83@
\83C
\83\8b\96¼
\r
2663 * int
\83X
\83e
\81[
\83^
\83X (YES/NO)
\r
2664 *----------------------------------------------------------------------------*/
\r
2666 static int IsSpecialDevice(char *Fname)
\r
2671 if((_stricmp(Fname, "CON") == 0) ||
\r
2672 (_stricmp(Fname, "PRN") == 0) ||
\r
2673 (_stricmp(Fname, "AUX") == 0) ||
\r
2674 (_strnicmp(Fname, "CON.", 4) == 0) ||
\r
2675 (_strnicmp(Fname, "PRN.", 4) == 0) ||
\r
2676 (_strnicmp(Fname, "AUX.", 4) == 0))
\r
2684 /*-----
\83~
\83\89\81[
\83\8a\83\93\83O
\82Å
\82Ì
\83t
\83@
\83C
\83\8b\8dí
\8f\9c\8am
\94F --------------------------------------
\r
2689 * TRANSPACKET *Pkt
\r
2693 *----------------------------------------------------------------------------*/
\r
2695 static int MirrorDelNotify(int Cur, int Notify, TRANSPACKET *Pkt)
\r
2697 MIRRORDELETEINFO DelInfo;
\r
2700 if(((Cur == WIN_LOCAL) && (MirDownDelNotify == NO)) ||
\r
2701 ((Cur == WIN_REMOTE) && (MirUpDelNotify == NO)))
\r
2706 if(Notify != YES_ALL)
\r
2708 DelInfo.Cur = Cur;
\r
2709 DelInfo.Pkt = Pkt;
\r
2710 hWnd = Pkt->hWndTrans;
\r
2712 hWnd = GetMainHwnd();
\r
2713 Notify = DialogBoxParam(GetFtpInst(), MAKEINTRESOURCE(delete_dlg), hWnd, MirrorDeleteDialogCallBack, (LPARAM)&DelInfo);
\r
2719 /*-----
\83~
\83\89\81[
\83\8a\83\93\83O
\82Å
\82Ì
\83t
\83@
\83C
\83\8b\8dí
\8f\9c\83_
\83C
\83A
\83\8d\83O
\82Ì
\83R
\81[
\83\8b\83o
\83b
\83N ------------------
\r
2722 * HWND hDlg :
\83E
\83C
\83\93\83h
\83E
\83n
\83\93\83h
\83\8b\r
2723 * UINT message :
\83\81\83b
\83Z
\81[
\83W
\94Ô
\8d\86\r
2724 * WPARAM wParam :
\83\81\83b
\83Z
\81[
\83W
\82Ì WPARAM
\88ø
\90\94\r
2725 * LPARAM lParam :
\83\81\83b
\83Z
\81[
\83W
\82Ì LPARAM
\88ø
\90\94\r
2729 *----------------------------------------------------------------------------*/
\r
2731 static BOOL CALLBACK MirrorDeleteDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)
\r
2733 static MIRRORDELETEINFO *DelInfo;
\r
2736 case WM_INITDIALOG :
\r
2737 DelInfo = (MIRRORDELETEINFO *)lParam;
\r
2739 if(DelInfo->Cur == WIN_LOCAL)
\r
2741 SendMessage(hDlg, WM_SETTEXT, 0, (LPARAM)MSGJPN124);
\r
2742 SendDlgItemMessage(hDlg, DELETE_TEXT, WM_SETTEXT, 0, (LPARAM)DelInfo->Pkt->LocalFile);
\r
2746 SendMessage(hDlg, WM_SETTEXT, 0, (LPARAM)MSGJPN125);
\r
2747 SendDlgItemMessage(hDlg, DELETE_TEXT, WM_SETTEXT, 0, (LPARAM)DelInfo->Pkt->RemoteFile);
\r
2752 switch(GET_WM_COMMAND_ID(wParam, lParam))
\r
2755 EndDialog(hDlg, YES);
\r
2759 EndDialog(hDlg, NO);
\r
2763 EndDialog(hDlg, YES_ALL);
\r
2768 EndDialog(hDlg, NO_ALL);
\r
2780 static void SetErrorMsg(char *fmt, ...)
\r
2784 if(strlen(ErrMsg) == 0)
\r
2786 va_start(Args, fmt);
\r
2787 wvsprintf(ErrMsg, fmt, Args);
\r
2798 /*-----
\83_
\83E
\83\93\83\8d\81[
\83h
\8e\9e\82Ì
\95s
\90³
\82È
\83p
\83X
\82ð
\83`
\83F
\83b
\83N ----------------------------------
\r
2801 * TRANSPACKET *packet :
\83_
\83E
\83\93\83\8d\81[
\83h
\8fî
\95ñ
\r
2804 * int YES=
\95s
\90³
\82È
\83p
\83X/NO=
\96â
\91è
\82È
\82¢
\83p
\83X
\r
2805 *----------------------------------------------------------------------------*/
\r
2806 int CheckPathViolation(TRANSPACKET *packet)
\r
2811 if((strncmp(packet->RemoteFile, "..\\", 3) == 0) ||
\r
2812 (strncmp(packet->RemoteFile, "../", 3) == 0) ||
\r
2813 (strstr(packet->RemoteFile, "\\..\\") != NULL) ||
\r
2814 (strstr(packet->RemoteFile, "/../") != NULL))
\r
2816 msg = malloc(strlen(MSGJPN297) + strlen(packet->RemoteFile) + 1);
\r
2819 sprintf(msg, MSGJPN297, packet->RemoteFile);
\r
2820 MessageBox(GetMainHwnd(), msg, MSGJPN086, MB_OK);
\r