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 #define TIMER_DISPLAY 1 /*
\95\
\8e¦
\8dX
\90V
\97p
\83^
\83C
\83}
\82ÌID */
\r
61 #define DISPLAY_TIMING 500 /*
\95\
\8e¦
\8dX
\90V
\8e\9e\8aÔ 0.5
\95b */
\r
63 #define ERR_MSG_LEN 1024
\r
66 /*
\8dí
\8f\9c\8am
\94F
\83_
\83C
\83A
\83\8d\83O
\82Ì
\8fî
\95ñ */
\r
73 /*=====
\83v
\83\8d\83g
\83^
\83C
\83v =====*/
\r
75 static void DispTransPacket(TRANSPACKET *Pkt);
\r
76 static void EraseTransFileList(void);
\r
77 static ULONG WINAPI TransferThread(void *Dummy);
\r
78 static int MakeNonFullPath(TRANSPACKET *Pkt, char *CurDir, char *Tmp);
\r
79 static int DownLoadNonPassive(TRANSPACKET *Pkt, int *CancelCheckWork);
\r
80 static int DownLoadPassive(TRANSPACKET *Pkt, int *CancelCheckWork);
\r
81 static int DownLoadFile(TRANSPACKET *Pkt, SOCKET dSkt, int CreateMode, int *CancelCheckWork);
\r
82 static void DispDownloadFinishMsg(TRANSPACKET *Pkt, int iRetCode);
\r
83 static int DispUpDownErrDialog(int ResID, HWND hWnd, char *Fname);
\r
84 static BOOL CALLBACK UpDownErrorDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
\r
85 static int SetDownloadResume(TRANSPACKET *Pkt, int ProcMode, LONGLONG Size, int *Mode, int *CancelCheckWork);
\r
86 static BOOL CALLBACK NoResumeWndProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);
\r
87 static int DoUpLoad(SOCKET cSkt, TRANSPACKET *Pkt);
\r
88 static int UpLoadNonPassive(TRANSPACKET *Pkt);
\r
89 static int UpLoadPassive(TRANSPACKET *Pkt);
\r
90 static int UpLoadFile(TRANSPACKET *Pkt, SOCKET dSkt);
\r
91 static int TermCodeConvAndSend(TERMCODECONVINFO *tInfo, SOCKET Skt, char *Data, int Size, int Ascii);
\r
92 static void DispUploadFinishMsg(TRANSPACKET *Pkt, int iRetCode);
\r
93 static int SetUploadResume(TRANSPACKET *Pkt, int ProcMode, LONGLONG Size, int *Mode);
\r
94 static LRESULT CALLBACK TransDlgProc(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam);
\r
95 static void DispTransferStatus(HWND hWnd, int End, TRANSPACKET *Pkt);
\r
96 static void DispTransFileInfo(TRANSPACKET *Pkt, char *Title, int SkipButton, int Info);
\r
97 static int GetAdrsAndPort(char *Str, char *Adrs, int *Port, int Max);
\r
98 static int IsSpecialDevice(char *Fname);
\r
99 static int MirrorDelNotify(int Cur, int Notify, TRANSPACKET *Pkt);
\r
100 static BOOL CALLBACK MirrorDeleteDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);
\r
101 static void SetErrorMsg(char *fmt, ...);
\r
103 /*=====
\83\8d\81[
\83J
\83\8b\82È
\83\8f\81[
\83N =====*/
\r
105 static HANDLE hTransferThread;
\r
106 static int fTransferThreadExit = FALSE;
\r
108 static HANDLE hRunMutex; /*
\93]
\91\97\83X
\83\8c\83b
\83h
\8eÀ
\8ds
\83~
\83\85\81[
\83e
\83b
\83N
\83X */
\r
109 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
111 static int TransFiles = 0; /*
\93]
\91\97\91Ò
\82¿
\83t
\83@
\83C
\83\8b\90\94 */
\r
112 static TRANSPACKET *TransPacketBase = NULL; /*
\93]
\91\97\83t
\83@
\83C
\83\8b\83\8a\83X
\83g */
\r
114 static int Canceled; /*
\92\86\8e~
\83t
\83\89\83O YES/NO */
\r
115 static int ClearAll; /*
\91S
\82Ä
\92\86\8e~
\83t
\83\89\83O YES/NO */
\r
117 static int ForceAbort; /*
\93]
\91\97\92\86\8e~
\83t
\83\89\83O */
\r
118 /*
\82±
\82Ì
\83t
\83\89\83O
\82Í
\83X
\83\8c\83b
\83h
\82ð
\8fI
\97¹
\82³
\82¹
\82é
\82Æ
\82«
\82É
\8eg
\82¤ */
\r
120 static LONGLONG AllTransSizeNow; /*
\8d¡
\89ñ
\82Ì
\93]
\91\97\82Å
\93]
\91\97\82µ
\82½
\83T
\83C
\83Y */
\r
121 static time_t TimeStart; /*
\93]
\91\97\8aJ
\8en
\8e\9e\8aÔ */
\r
123 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
124 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
126 static char CurDir[FMAX_PATH+1] = { "" };
\r
127 static char ErrMsg[ERR_MSG_LEN+7];
\r
129 /*=====
\8aO
\95\94\8eQ
\8fÆ =====*/
\r
132 extern int SaveTimeStamp;
\r
134 // extern int TimeOut;
\r
135 extern int FwallType;
\r
136 extern int MirUpDelNotify;
\r
137 extern int MirDownDelNotify;
\r
138 extern int FolderAttr;
\r
139 extern int FolderAttrNum;
\r
142 /*-----
\83t
\83@
\83C
\83\8b\93]
\91\97\83X
\83\8c\83b
\83h
\82ð
\8bN
\93®
\82·
\82é ----------------------------------------
\r
149 *----------------------------------------------------------------------------*/
\r
151 int MakeTransferThread(void)
\r
155 hListAccMutex = CreateMutex( NULL, FALSE, NULL );
\r
156 hRunMutex = CreateMutex( NULL, TRUE, NULL );
\r
161 fTransferThreadExit = FALSE;
\r
162 hTransferThread = (HANDLE)_beginthreadex(NULL, 0, TransferThread, 0, 0, &dwID);
\r
163 if (hTransferThread == NULL)
\r
164 return(FAIL); /* XXX */
\r
170 /*-----
\83t
\83@
\83C
\83\8b\93]
\91\97\83X
\83\8c\83b
\83h
\82ð
\8fI
\97¹
\82·
\82é ----------------------------------------
\r
177 *----------------------------------------------------------------------------*/
\r
179 void CloseTransferThread(void)
\r
185 fTransferThreadExit = TRUE;
\r
186 while(WaitForSingleObject(hTransferThread, 10) == WAIT_TIMEOUT)
\r
188 BackgrndMessageProc();
\r
191 CloseHandle(hTransferThread);
\r
193 ReleaseMutex( hRunMutex );
\r
195 CloseHandle( hListAccMutex );
\r
196 CloseHandle( hRunMutex );
\r
201 /*-----
\93]
\91\97\82·
\82é
\83t
\83@
\83C
\83\8b\8fî
\95ñ
\82ð
\83\8a\83X
\83g
\82É
\92Ç
\89Á
\82·
\82é --------------------------------
\r
204 * TRANSPACKET *Pkt :
\93]
\91\97\83t
\83@
\83C
\83\8b\8fî
\95ñ
\r
205 * TRANSPACKET **Base :
\83\8a\83X
\83g
\82Ì
\90æ
\93ª
\r
208 * int
\83X
\83e
\81[
\83^
\83X
\r
210 *----------------------------------------------------------------------------*/
\r
212 int AddTmpTransFileList(TRANSPACKET *Pkt, TRANSPACKET **Base)
\r
219 if((Pos = malloc(sizeof(TRANSPACKET))) != NULL)
\r
221 memcpy(Pos, Pkt, sizeof(TRANSPACKET));
\r
229 while(Prev->Next != NULL)
\r
239 /*-----
\93]
\91\97\82·
\82é
\83t
\83@
\83C
\83\8b\8fî
\95ñ
\83\8a\83X
\83g
\82ð
\83N
\83\8a\83A
\82·
\82é --------------------------------
\r
242 * TRANSPACKET **Base :
\83\8a\83X
\83g
\82Ì
\90æ
\93ª
\r
246 *----------------------------------------------------------------------------*/
\r
248 void EraseTmpTransFileList(TRANSPACKET **Base)
\r
265 /*-----
\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
268 * TRANSPACKET *Pkt :
\93]
\91\97\83t
\83@
\83C
\83\8b\8fî
\95ñ
\r
269 * TRANSPACKET **Base :
\83\8a\83X
\83g
\82Ì
\90æ
\93ª
\r
272 * int
\83X
\83e
\81[
\83^
\83X
\r
274 *----------------------------------------------------------------------------*/
\r
276 int RemoveTmpTransFileListItem(TRANSPACKET **Base, int Num)
\r
298 Prev->Next = Pos->Next;
\r
309 /*-----
\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
312 * TRANSPACKET *Pkt :
\93]
\91\97\83t
\83@
\83C
\83\8b\8fî
\95ñ
\r
316 *----------------------------------------------------------------------------*/
\r
318 void AddTransFileList(TRANSPACKET *Pkt)
\r
320 DispTransPacket(Pkt);
\r
322 WaitForSingleObject(hListAccMutex, INFINITE);
\r
324 if(AddTmpTransFileList(Pkt, &TransPacketBase) == SUCCESS)
\r
326 if((strncmp(Pkt->Cmd, "RETR", 4) == 0) ||
\r
327 (strncmp(Pkt->Cmd, "STOR", 4) == 0))
\r
330 PostMessage(GetMainHwnd(), WM_CHANGE_COND, 0, 0);
\r
333 ReleaseMutex(hListAccMutex);
\r
339 /*-----
\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
342 * TRANSPACKET *Pkt :
\93]
\91\97\83t
\83@
\83C
\83\8b\8fî
\95ñ
\r
343 * TRANSPACKET **Base :
\83\8a\83X
\83g
\82Ì
\90æ
\93ª
\r
349 * Pkt
\8e©
\91Ì
\82ð
\83\8a\83X
\83g
\82É
\98A
\8c\8b\82·
\82é
\r
350 *----------------------------------------------------------------------------*/
\r
352 void AppendTransFileList(TRANSPACKET *Pkt)
\r
356 WaitForSingleObject(hListAccMutex, INFINITE);
\r
358 if(TransPacketBase == NULL)
\r
359 TransPacketBase = Pkt;
\r
362 Pos = TransPacketBase;
\r
363 while(Pos->Next != NULL)
\r
370 DispTransPacket(Pkt);
\r
372 if((strncmp(Pkt->Cmd, "RETR", 4) == 0) ||
\r
373 (strncmp(Pkt->Cmd, "STOR", 4) == 0))
\r
376 PostMessage(GetMainHwnd(), WM_CHANGE_COND, 0, 0);
\r
381 ReleaseMutex(hListAccMutex);
\r
386 /*-----
\93]
\91\97\83t
\83@
\83C
\83\8b\8fî
\95ñ
\82ð
\95\
\8e¦
\82·
\82é --------------------------------------------
\r
389 * TRANSPACKET *Pkt :
\93]
\91\97\83t
\83@
\83C
\83\8b\8fî
\95ñ
\r
393 *----------------------------------------------------------------------------*/
\r
395 static void DispTransPacket(TRANSPACKET *Pkt)
\r
397 if((strncmp(Pkt->Cmd, "RETR", 4) == 0) || (strncmp(Pkt->Cmd, "STOR", 4) == 0))
\r
398 DoPrintf("TransList Cmd=%s : %s : %s", Pkt->Cmd, Pkt->RemoteFile, Pkt->LocalFile);
\r
399 else if(strncmp(Pkt->Cmd, "R-", 2) == 0)
\r
400 DoPrintf("TransList Cmd=%s : %s", Pkt->Cmd, Pkt->RemoteFile);
\r
401 else if(strncmp(Pkt->Cmd, "L-", 2) == 0)
\r
402 DoPrintf("TransList Cmd=%s : %s", Pkt->Cmd, Pkt->LocalFile);
\r
403 else if(strncmp(Pkt->Cmd, "MKD", 3) == 0)
\r
405 if(strlen(Pkt->LocalFile) > 0)
\r
406 DoPrintf("TransList Cmd=%s : %s", Pkt->Cmd, Pkt->LocalFile);
\r
408 DoPrintf("TransList Cmd=%s : %s", Pkt->Cmd, Pkt->RemoteFile);
\r
411 DoPrintf("TransList Cmd=%s", Pkt->Cmd);
\r
416 /*-----
\93]
\91\97\83t
\83@
\83C
\83\8b\83\8a\83X
\83g
\82ð
\83N
\83\8a\83A
\82·
\82é ----------------------------------------
\r
423 *----------------------------------------------------------------------------*/
\r
425 static void EraseTransFileList(void)
\r
429 TRANSPACKET *NotDel;
\r
434 WaitForSingleObject(hListAccMutex, INFINITE);
\r
435 New = TransPacketBase;
\r
438 /*
\8dÅ
\8cã
\82Ì"BACKCUR"
\82Í
\95K
\97v
\82È
\82Ì
\82Å
\8fÁ
\82³
\82È
\82¢ */
\r
439 if(strcmp(New->Cmd, "BACKCUR") == 0)
\r
445 NotDel->Next = NULL;
\r
454 TransPacketBase = NotDel;
\r
456 PostMessage(GetMainHwnd(), WM_CHANGE_COND, 0, 0);
\r
457 ReleaseMutex(hListAccMutex);
\r
459 strcpy(Pkt.Cmd, "GOQUIT");
\r
460 AddTransFileList(&Pkt);
\r
465 /*-----
\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
468 * 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
472 *----------------------------------------------------------------------------*/
\r
474 void KeepTransferDialog(int Sw)
\r
481 /*-----
\8c»
\8dÝ
\93]
\91\97\92\86\82©
\82Ç
\82¤
\82©
\82ð
\95Ô
\82· ----------------------------------------------
\r
487 * int
\83X
\83e
\81[
\83^
\83X (YES/NO=
\93]
\91\97\92\86\82Å
\82Í
\82È
\82¢)
\r
488 *----------------------------------------------------------------------------*/
\r
490 int AskTransferNow(void)
\r
492 return(TransPacketBase != NULL ? YES : NO);
\r
496 /*-----
\93]
\91\97\82·
\82é
\83t
\83@
\83C
\83\8b\82Ì
\90\94\82ð
\95Ô
\82· --------------------------------------------
\r
502 * int
\93]
\91\97\82·
\82é
\83t
\83@
\83C
\83\8b\82Ì
\90\94\r
503 *----------------------------------------------------------------------------*/
\r
505 int AskTransferFileNum(void)
\r
507 return(TransFiles);
\r
511 /*-----
\93]
\91\97\92\86\83E
\83C
\83\93\83h
\83E
\82ð
\91O
\96Ê
\82É
\8fo
\82· ------------------------------------------
\r
518 *----------------------------------------------------------------------------*/
\r
520 void GoForwardTransWindow(void)
\r
522 MoveToForeground = YES;
\r
527 /*-----
\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
534 *----------------------------------------------------------------------------*/
\r
536 void InitTransCurDir(void)
\r
538 strcpy(CurDir, "");
\r
543 /*-----
\83t
\83@
\83C
\83\8b\93]
\91\97\83X
\83\8c\83b
\83h
\82Ì
\83\81\83C
\83\93\83\8b\81[
\83v ------------------------------------
\r
546 * void *Dummy :
\8eg
\82í
\82È
\82¢
\r
550 *----------------------------------------------------------------------------*/
\r
552 static ULONG WINAPI TransferThread(void *Dummy)
\r
556 char Tmp[FMAX_PATH+1];
\r
569 while((TransPacketBase != NULL) ||
\r
570 (WaitForSingleObject(hRunMutex, 200) == WAIT_TIMEOUT))
\r
572 if(fTransferThreadExit == TRUE)
\r
575 WaitForSingleObject(hListAccMutex, INFINITE);
\r
576 memset(ErrMsg, NUL, ERR_MSG_LEN+7);
\r
580 if(TransPacketBase != NULL)
\r
582 ReleaseMutex(hListAccMutex);
\r
583 if(hWndTrans == NULL)
\r
585 if((strncmp(TransPacketBase->Cmd, "RETR", 4) == 0) ||
\r
586 (strncmp(TransPacketBase->Cmd, "STOR", 4) == 0) ||
\r
587 (strncmp(TransPacketBase->Cmd, "MKD", 3) == 0) ||
\r
588 (strncmp(TransPacketBase->Cmd, "L-", 2) == 0) ||
\r
589 (strncmp(TransPacketBase->Cmd, "R-", 2) == 0))
\r
591 hWndTrans = CreateDialog(GetFtpInst(), MAKEINTRESOURCE(transfer_dlg), HWND_DESKTOP, (DLGPROC)TransDlgProc);
\r
592 if(MoveToForeground == YES)
\r
593 SetForegroundWindow(hWndTrans);
\r
594 ShowWindow(hWndTrans, SW_SHOWNOACTIVATE);
\r
597 TransPacketBase->hWndTrans = hWndTrans;
\r
599 if(hWndTrans != NULL)
\r
601 if(MoveToForeground == YES)
\r
603 SetForegroundWindow(hWndTrans);
\r
604 MoveToForeground = NO;
\r
608 if(hWndTrans != NULL)
\r
609 SendMessage(hWndTrans, WM_SET_PACKET, 0, (LPARAM)TransPacketBase);
\r
611 /*
\83_
\83E
\83\93\83\8d\81[
\83h */
\r
612 if(strncmp(TransPacketBase->Cmd, "RETR", 4) == 0)
\r
614 /*
\95s
\90³
\82È
\83p
\83X
\82ð
\8c\9f\8fo */
\r
615 if(CheckPathViolation(TransPacketBase) == NO)
\r
617 /*
\83t
\83\8b\83p
\83X
\82ð
\8eg
\82í
\82È
\82¢
\82½
\82ß
\82Ì
\8f\88\97\9d */
\r
618 if(MakeNonFullPath(TransPacketBase, CurDir, Tmp) == SUCCESS)
\r
620 if(strncmp(TransPacketBase->Cmd, "RETR-S", 6) == 0)
\r
622 /*
\83T
\83C
\83Y
\82Æ
\93ú
\95t
\82ð
\8eæ
\93¾ */
\r
623 DoSIZE(TransPacketBase->RemoteFile, &TransPacketBase->Size);
\r
624 DoMDTM(TransPacketBase->RemoteFile, &TransPacketBase->Time);
\r
625 strcpy(TransPacketBase->Cmd, "RETR ");
\r
629 // if(DoDownLoad(AskTrnCtrlSkt(), TransPacketBase, NO) == 429)
\r
631 // if(ReConnectTrnSkt() == SUCCESS)
\r
632 DoDownLoad(AskTrnCtrlSkt(), TransPacketBase, NO, &Canceled);
\r
637 /*
\83A
\83b
\83v
\83\8d\81[
\83h */
\r
638 else if(strncmp(TransPacketBase->Cmd, "STOR", 4) == 0)
\r
640 /*
\83t
\83\8b\83p
\83X
\82ð
\8eg
\82í
\82È
\82¢
\82½
\82ß
\82Ì
\8f\88\97\9d */
\r
641 if(MakeNonFullPath(TransPacketBase, CurDir, Tmp) == SUCCESS)
\r
644 // if(DoUpLoad(AskTrnCtrlSkt(), TransPacketBase) == 429)
\r
646 // if(ReConnectTrnSkt() == SUCCESS)
\r
647 DoUpLoad(AskTrnCtrlSkt(), TransPacketBase);
\r
651 /*
\83t
\83H
\83\8b\83_
\8dì
\90¬
\81i
\83\8d\81[
\83J
\83\8b\82Ü
\82½
\82Í
\83z
\83X
\83g
\81j */
\r
652 else if(strncmp(TransPacketBase->Cmd, "MKD", 3) == 0)
\r
654 DispTransFileInfo(TransPacketBase, MSGJPN078, FALSE, YES);
\r
656 if(strlen(TransPacketBase->RemoteFile) > 0)
\r
658 /*
\83t
\83\8b\83p
\83X
\82ð
\8eg
\82í
\82È
\82¢
\82½
\82ß
\82Ì
\8f\88\97\9d */
\r
659 CwdSts = FTP_COMPLETE;
\r
661 strcpy(Tmp, TransPacketBase->RemoteFile);
\r
662 if(ProcForNonFullpath(Tmp, CurDir, hWndTrans, 1) == FAIL)
\r
665 CwdSts = FTP_ERROR;
\r
668 if(CwdSts == FTP_COMPLETE)
\r
671 CommandProcTrn(NULL, "MKD %s", Tmp);
\r
672 /*
\82·
\82Å
\82É
\83t
\83H
\83\8b\83_
\82ª
\82 \82é
\8fê
\8d\87\82à
\82 \82é
\82Ì
\82Å
\81A */
\r
673 /*
\82±
\82±
\82Å
\82Í
\83G
\83\89\81[
\83`
\83F
\83b
\83N
\82Í
\82µ
\82È
\82¢ */
\r
676 CommandProcTrn(NULL, "%s %03d %s", AskHostChmodCmd(), FolderAttrNum, Tmp);
\r
679 else if(strlen(TransPacketBase->LocalFile) > 0)
\r
682 DoLocalMKD(TransPacketBase->LocalFile);
\r
685 /*
\83f
\83B
\83\8c\83N
\83g
\83\8a\8dì
\90¬
\81i
\8fí
\82É
\83z
\83X
\83g
\91¤
\81j */
\r
686 else if(strncmp(TransPacketBase->Cmd, "R-MKD", 5) == 0)
\r
688 DispTransFileInfo(TransPacketBase, MSGJPN079, FALSE, YES);
\r
690 /*
\83t
\83\8b\83p
\83X
\82ð
\8eg
\82í
\82È
\82¢
\82½
\82ß
\82Ì
\8f\88\97\9d */
\r
691 if(MakeNonFullPath(TransPacketBase, CurDir, Tmp) == SUCCESS)
\r
694 CommandProcTrn(NULL, "%s%s", TransPacketBase->Cmd+2, TransPacketBase->RemoteFile);
\r
697 CommandProcTrn(NULL, "%s %03d %s", AskHostChmodCmd(), FolderAttrNum, TransPacketBase->RemoteFile);
\r
700 /*
\83f
\83B
\83\8c\83N
\83g
\83\8a\8dí
\8f\9c\81i
\8fí
\82É
\83z
\83X
\83g
\91¤
\81j */
\r
701 else if(strncmp(TransPacketBase->Cmd, "R-RMD", 5) == 0)
\r
703 DispTransFileInfo(TransPacketBase, MSGJPN080, FALSE, YES);
\r
705 DelNotify = MirrorDelNotify(WIN_REMOTE, DelNotify, TransPacketBase);
\r
706 if((DelNotify == YES) || (DelNotify == YES_ALL))
\r
708 /*
\83t
\83\8b\83p
\83X
\82ð
\8eg
\82í
\82È
\82¢
\82½
\82ß
\82Ì
\8f\88\97\9d */
\r
709 if(MakeNonFullPath(TransPacketBase, CurDir, Tmp) == SUCCESS)
\r
712 CommandProcTrn(NULL, "%s%s", TransPacketBase->Cmd+2, TransPacketBase->RemoteFile);
\r
716 /*
\83t
\83@
\83C
\83\8b\8dí
\8f\9c\81i
\8fí
\82É
\83z
\83X
\83g
\91¤
\81j */
\r
717 else if(strncmp(TransPacketBase->Cmd, "R-DELE", 6) == 0)
\r
719 DispTransFileInfo(TransPacketBase, MSGJPN081, FALSE, YES);
\r
721 DelNotify = MirrorDelNotify(WIN_REMOTE, DelNotify, TransPacketBase);
\r
722 if((DelNotify == YES) || (DelNotify == YES_ALL))
\r
724 /*
\83t
\83\8b\83p
\83X
\82ð
\8eg
\82í
\82È
\82¢
\82½
\82ß
\82Ì
\8f\88\97\9d */
\r
725 if(MakeNonFullPath(TransPacketBase, CurDir, Tmp) == SUCCESS)
\r
728 CommandProcTrn(NULL, "%s%s", TransPacketBase->Cmd+2, TransPacketBase->RemoteFile);
\r
732 /*
\83f
\83B
\83\8c\83N
\83g
\83\8a\8dì
\90¬
\81i
\8fí
\82É
\83\8d\81[
\83J
\83\8b\91¤
\81j */
\r
733 else if(strncmp(TransPacketBase->Cmd, "L-MKD", 5) == 0)
\r
735 DispTransFileInfo(TransPacketBase, MSGJPN082, FALSE, YES);
\r
738 DoLocalMKD(TransPacketBase->LocalFile);
\r
740 /*
\83f
\83B
\83\8c\83N
\83g
\83\8a\8dí
\8f\9c\81i
\8fí
\82É
\83\8d\81[
\83J
\83\8b\91¤
\81j */
\r
741 else if(strncmp(TransPacketBase->Cmd, "L-RMD", 5) == 0)
\r
743 DispTransFileInfo(TransPacketBase, MSGJPN083, FALSE, YES);
\r
745 DelNotify = MirrorDelNotify(WIN_LOCAL, DelNotify, TransPacketBase);
\r
746 if((DelNotify == YES) || (DelNotify == YES_ALL))
\r
749 DoLocalRMD(TransPacketBase->LocalFile);
\r
752 /*
\83t
\83@
\83C
\83\8b\8dí
\8f\9c\81i
\8fí
\82É
\83\8d\81[
\83J
\83\8b\91¤
\81j */
\r
753 else if(strncmp(TransPacketBase->Cmd, "L-DELE", 6) == 0)
\r
755 DispTransFileInfo(TransPacketBase, MSGJPN084, FALSE, YES);
\r
757 DelNotify = MirrorDelNotify(WIN_LOCAL, DelNotify, TransPacketBase);
\r
758 if((DelNotify == YES) || (DelNotify == YES_ALL))
\r
761 DoLocalDELE(TransPacketBase->LocalFile);
\r
764 /*
\83J
\83\8c\83\93\83g
\83f
\83B
\83\8c\83N
\83g
\83\8a\82ð
\90Ý
\92è */
\r
765 else if(strcmp(TransPacketBase->Cmd, "SETCUR") == 0)
\r
767 if(AskShareProh() == YES)
\r
769 if(strcmp(CurDir, TransPacketBase->RemoteFile) != 0)
\r
771 if(CommandProcTrn(NULL, "CWD %s", TransPacketBase->RemoteFile)/100 != FTP_COMPLETE)
\r
773 DispCWDerror(hWndTrans);
\r
778 strcpy(CurDir, TransPacketBase->RemoteFile);
\r
780 /*
\83J
\83\8c\83\93\83g
\83f
\83B
\83\8c\83N
\83g
\83\8a\82ð
\96ß
\82· */
\r
781 else if(strcmp(TransPacketBase->Cmd, "BACKCUR") == 0)
\r
783 if(AskShareProh() == NO)
\r
785 if(strcmp(CurDir, TransPacketBase->RemoteFile) != 0)
\r
786 CommandProcTrn(NULL, "CWD %s", TransPacketBase->RemoteFile);
\r
787 strcpy(CurDir, TransPacketBase->RemoteFile);
\r
790 /*
\8e©
\93®
\8fI
\97¹
\82Ì
\82½
\82ß
\82Ì
\92Ê
\92m */
\r
791 else if(strcmp(TransPacketBase->Cmd, "GOQUIT") == 0)
\r
796 /*=====
\82P
\82Â
\82Ì
\8f\88\97\9d\8fI
\82í
\82è =====*/
\r
798 if(ForceAbort == NO)
\r
800 WaitForSingleObject(hListAccMutex, INFINITE);
\r
801 if(ClearAll == YES)
\r
802 EraseTransFileList();
\r
805 if((strncmp(TransPacketBase->Cmd, "RETR", 4) == 0) ||
\r
806 (strncmp(TransPacketBase->Cmd, "STOR", 4) == 0))
\r
809 PostMessage(GetMainHwnd(), WM_CHANGE_COND, 0, 0);
\r
811 Pos = TransPacketBase;
\r
812 TransPacketBase = TransPacketBase->Next;
\r
816 ReleaseMutex(hListAccMutex);
\r
818 if(BackgrndMessageProc() == YES)
\r
820 WaitForSingleObject(hListAccMutex, INFINITE);
\r
821 EraseTransFileList();
\r
822 ReleaseMutex(hListAccMutex);
\r
830 ReleaseMutex(hListAccMutex);
\r
833 if(hWndTrans != NULL)
\r
835 DestroyWindow(hWndTrans);
\r
840 SoundPlay(SND_TRANS);
\r
842 if(AskAutoExit() == NO)
\r
845 PostMessage(GetMainHwnd(), WM_REFRESH_LOCAL_FLG, 0, 0);
\r
847 PostMessage(GetMainHwnd(), WM_REFRESH_REMOTE_FLG, 0, 0);
\r
854 BackgrndMessageProc();
\r
858 PostMessage(GetMainHwnd(), WM_COMMAND, MAKEWPARAM(MENU_AUTO_EXIT, 0), 0);
\r
867 /*-----
\83t
\83\8b\83p
\83X
\82ð
\8eg
\82í
\82È
\82¢
\83t
\83@
\83C
\83\8b\83A
\83N
\83Z
\83X
\82Ì
\8f\80\94õ ------------------------------
\r
870 * TRANSPACKET *Pkt :
\93]
\91\97\83p
\83P
\83b
\83g
\r
871 * char *Cur :
\83J
\83\8c\83\93\83g
\83f
\83B
\83\8c\83N
\83g
\83\8a\r
872 * char *Tmp :
\8dì
\8bÆ
\97p
\83G
\83\8a\83A
\r
875 * int
\83X
\83e
\81[
\83^
\83X(SUCCESS/FAIL)
\r
878 *
\83t
\83\8b\83p
\83X
\82ð
\8eg
\82í
\82È
\82¢
\8e\9e\82Í
\81A
\r
879 *
\82±
\82Ì
\83\82\83W
\83\85\81[
\83\8b\93à
\82Å CWD
\82ð
\8ds
\82È
\82¢
\81A
\r
880 * Pkt->RemoteFile
\82É
\83t
\83@
\83C
\83\8b\96¼
\82Ì
\82Ý
\8ec
\82·
\81B
\81i
\83p
\83X
\96¼
\82Í
\8fÁ
\82·
\81j
\r
881 *----------------------------------------------------------------------------*/
\r
883 static int MakeNonFullPath(TRANSPACKET *Pkt, char *Cur, char *Tmp)
\r
887 Sts = ProcForNonFullpath(Pkt->RemoteFile, Cur, Pkt->hWndTrans, 1);
\r
897 /*-----
\83_
\83E
\83\93\83\8d\81[
\83h
\82ð
\8ds
\82È
\82¤ --------------------------------------------------
\r
900 * SOCKET cSkt :
\83R
\83\93\83g
\83\8d\81[
\83\8b\83\
\83P
\83b
\83g
\r
901 * TRANSPACKET *Pkt :
\93]
\91\97\83t
\83@
\83C
\83\8b\8fî
\95ñ
\r
902 * 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
905 * int
\89\9e\93\9a\83R
\81[
\83h
\r
908 *
\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
909 *
\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
910 *----------------------------------------------------------------------------*/
\r
912 int DoDownLoad(SOCKET cSkt, TRANSPACKET *Pkt, int DirList, int *CancelCheckWork)
\r
915 char Reply[ERR_MSG_LEN+7];
\r
917 Pkt->ctrl_skt = cSkt;
\r
918 if(IsSpecialDevice(GetFileName(Pkt->LocalFile)) == YES)
\r
921 SetTaskMsg(MSGJPN085, GetFileName(Pkt->LocalFile));
\r
922 DispDownloadFinishMsg(Pkt, iRetCode);
\r
924 else if(Pkt->Mode != EXIST_IGNORE)
\r
926 if(Pkt->Type == TYPE_I)
\r
927 Pkt->KanjiCode = KANJI_NOCNV;
\r
929 iRetCode = command(Pkt->ctrl_skt, Reply, CancelCheckWork, "TYPE %c", Pkt->Type);
\r
930 if(iRetCode/100 < FTP_RETRY)
\r
932 if(Pkt->hWndTrans != NULL)
\r
934 AllTransSizeNow = 0;
\r
937 DispTransFileInfo(Pkt, MSGJPN086, TRUE, YES);
\r
939 DispTransFileInfo(Pkt, MSGJPN087, FALSE, NO);
\r
942 if(BackgrndMessageProc() == NO)
\r
944 if(AskPasvMode() != YES)
\r
945 iRetCode = DownLoadNonPassive(Pkt, CancelCheckWork);
\r
947 iRetCode = DownLoadPassive(Pkt, CancelCheckWork);
\r
953 SetErrorMsg(Reply);
\r
957 DispTransFileInfo(Pkt, MSGJPN088, TRUE, YES);
\r
958 SetTaskMsg(MSGJPN089, Pkt->RemoteFile);
\r
965 /*-----
\92Ê
\8fí
\83\82\81[
\83h
\82Å
\83t
\83@
\83C
\83\8b\82ð
\83_
\83E
\83\93\83\8d\81[
\83h ------------------------------------
\r
968 * TRANSPACKET *Pkt :
\93]
\91\97\83t
\83@
\83C
\83\8b\8fî
\95ñ
\r
971 * int
\89\9e\93\9a\83R
\81[
\83h
\r
972 *----------------------------------------------------------------------------*/
\r
974 static int DownLoadNonPassive(TRANSPACKET *Pkt, int *CancelCheckWork)
\r
978 SOCKET data_socket = INVALID_SOCKET; // data channel socket
\r
979 SOCKET listen_socket = INVALID_SOCKET; // data listen socket
\r
982 struct sockaddr_in saSockAddr1;
\r
983 char Reply[ERR_MSG_LEN+7];
\r
985 if((listen_socket = GetFTPListenSocket(Pkt->ctrl_skt, CancelCheckWork)) != INVALID_SOCKET)
\r
987 if(SetDownloadResume(Pkt, Pkt->Mode, Pkt->ExistSize, &CreateMode, CancelCheckWork) == YES)
\r
989 sprintf(Buf, "%s%s", Pkt->Cmd, Pkt->RemoteFile);
\r
990 iRetCode = command(Pkt->ctrl_skt, Reply, CancelCheckWork, "%s", Buf);
\r
991 if(iRetCode/100 == FTP_PRELIM)
\r
993 if(SocksGet2ndBindReply(listen_socket, &data_socket) == FAIL)
\r
995 iLength = sizeof(saSockAddr1);
\r
996 data_socket = do_accept(listen_socket, (struct sockaddr *)&saSockAddr1, (int *)&iLength);
\r
998 if(shutdown(listen_socket, 1) != 0)
\r
999 ReportWSError("shutdown listen", WSAGetLastError());
\r
1000 listen_socket = DoClose(listen_socket);
\r
1002 if(data_socket == INVALID_SOCKET)
\r
1004 SetErrorMsg(MSGJPN280);
\r
1005 ReportWSError("accept", WSAGetLastError());
\r
1009 DoPrintf("Skt=%u : accept from %s port %u", data_socket, inet_ntoa(saSockAddr1.sin_addr), ntohs(saSockAddr1.sin_port));
\r
1012 if(data_socket != INVALID_SOCKET)
\r
1014 iRetCode = DownLoadFile(Pkt, data_socket, CreateMode, CancelCheckWork);
\r
1015 // data_socket = DoClose(data_socket);
\r
1020 SetErrorMsg(Reply);
\r
1021 SetTaskMsg(MSGJPN090);
\r
1022 listen_socket = DoClose(listen_socket);
\r
1032 SetErrorMsg(MSGJPN279);
\r
1034 DispDownloadFinishMsg(Pkt, iRetCode);
\r
1040 /*----- Passive
\83\82\81[
\83h
\82Å
\83t
\83@
\83C
\83\8b\82ð
\83_
\83E
\83\93\83\8d\81[
\83h ---------------------------------
\r
1043 * TRANSPACKET *Pkt :
\93]
\91\97\83t
\83@
\83C
\83\8b\8fî
\95ñ
\r
1046 * int
\89\9e\93\9a\83R
\81[
\83h
\r
1047 *----------------------------------------------------------------------------*/
\r
1049 static int DownLoadPassive(TRANSPACKET *Pkt, int *CancelCheckWork)
\r
1052 SOCKET data_socket = INVALID_SOCKET; // data channel socket
\r
1058 char Reply[ERR_MSG_LEN+7];
\r
1060 iRetCode = command(Pkt->ctrl_skt, Buf, CancelCheckWork, "PASV");
\r
1061 if(iRetCode/100 == FTP_COMPLETE)
\r
1063 if(GetAdrsAndPort(Buf, Adrs, &Port, 19) == SUCCESS)
\r
1065 if((data_socket = connectsock(Adrs, Port, MSGJPN091, CancelCheckWork)) != INVALID_SOCKET)
\r
1067 if(setsockopt(data_socket, IPPROTO_TCP, TCP_NODELAY, (LPSTR)&Flg, sizeof(Flg)) == SOCKET_ERROR)
\r
1068 ReportWSError("setsockopt", WSAGetLastError());
\r
1070 if(SetDownloadResume(Pkt, Pkt->Mode, Pkt->ExistSize, &CreateMode, CancelCheckWork) == YES)
\r
1072 sprintf(Buf, "%s%s", Pkt->Cmd, Pkt->RemoteFile);
\r
1073 iRetCode = command(Pkt->ctrl_skt, Reply, CancelCheckWork, "%s", Buf);
\r
1074 if(iRetCode/100 == FTP_PRELIM)
\r
1076 iRetCode = DownLoadFile(Pkt, data_socket, CreateMode, CancelCheckWork);
\r
1077 // data_socket = DoClose(data_socket);
\r
1081 SetErrorMsg(Reply);
\r
1082 SetTaskMsg(MSGJPN092);
\r
1083 data_socket = DoClose(data_socket);
\r
1095 SetErrorMsg(MSGJPN093);
\r
1096 SetTaskMsg(MSGJPN093);
\r
1103 DispDownloadFinishMsg(Pkt, iRetCode);
\r
1109 /*-----
\83_
\83E
\83\93\83\8d\81[
\83h
\82Ì
\8eÀ
\8ds ----------------------------------------------------
\r
1112 * TRANSPACKET *Pkt :
\93]
\91\97\83t
\83@
\83C
\83\8b\8fî
\95ñ
\r
1113 * SOCKET dSkt :
\83f
\81[
\83^
\83\
\83P
\83b
\83g
\r
1114 * int CreateMode :
\83t
\83@
\83C
\83\8b\8dì
\90¬
\83\82\81[
\83h (CREATE_ALWAYS/OPEN_ALWAYS)
\r
1117 * int
\89\9e\93\9a\83R
\81[
\83h
\r
1120 *
\93]
\91\97\82Ì
\8co
\89ß
\95\
\8e¦
\82Í
\r
1121 *
\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
1122 *
\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
1123 *----------------------------------------------------------------------------*/
\r
1125 static int DownLoadFile(TRANSPACKET *Pkt, SOCKET dSkt, int CreateMode, int *CancelCheckWork)
\r
1128 char Buf[BUFSIZE];
\r
1129 char Buf2[BUFSIZE+3];
\r
1130 HANDLE iFileHandle;
\r
1131 SECURITY_ATTRIBUTES Sec;
\r
1133 CODECONVINFO cInfo;
\r
1135 // fd_set ReadFds;
\r
1136 // struct timeval Tout;
\r
1137 // struct timeval *ToutPtr;
\r
1140 char TmpBuf[ONELINE_BUF_SIZE];
\r
1141 DWORD dwFileAttributes;
\r
1143 #ifdef SET_BUFFER_SIZE
\r
1144 /* Add by H.Shirouzu at 2002/10/02 */
\r
1145 int buf_size = SOCKBUF_SIZE;
\r
1146 for ( ; buf_size > 0; buf_size /= 2)
\r
1147 if (setsockopt(dSkt, SOL_SOCKET, SO_RCVBUF, (char *)&buf_size, sizeof(buf_size)) == 0)
\r
1152 Pkt->Abort = ABORT_NONE;
\r
1154 Sec.nLength = sizeof(SECURITY_ATTRIBUTES);
\r
1155 Sec.lpSecurityDescriptor = NULL;
\r
1156 Sec.bInheritHandle = FALSE;
\r
1158 dwFileAttributes = GetFileAttributes(Pkt->LocalFile);
\r
1159 if (dwFileAttributes != INVALID_FILE_ATTRIBUTES && (dwFileAttributes & FILE_ATTRIBUTE_READONLY)) {
\r
1160 //
\93Ç
\82Ý
\8eæ
\82è
\90ê
\97p
\r
1161 if (MessageBox(GetMainHwnd(), MSGJPN296, MSGJPN086, MB_YESNO) == IDYES) {
\r
1162 //
\91®
\90«
\82ð
\89ð
\8f\9c\r
1163 SetFileAttributes(Pkt->LocalFile, dwFileAttributes ^ FILE_ATTRIBUTE_READONLY);
\r
1167 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
1169 if(CreateMode == OPEN_ALWAYS)
\r
1170 SetFilePointer(iFileHandle, 0, 0, FILE_END);
\r
1172 if(Pkt->hWndTrans != NULL)
\r
1174 TimeStart = time(NULL);
\r
1175 SetTimer(Pkt->hWndTrans, TIMER_DISPLAY, DISPLAY_TIMING, NULL);
\r
1178 InitCodeConvInfo(&cInfo);
\r
1179 cInfo.KanaCnv = Pkt->KanaCnv;
\r
1181 /*=====
\83t
\83@
\83C
\83\8b\82ð
\8eó
\90M
\82·
\82é
\83\8b\81[
\83v =====*/
\r
1182 while((Pkt->Abort == ABORT_NONE) && (ForceAbort == NO))
\r
1184 // FD_ZERO(&ReadFds);
\r
1185 // FD_SET(dSkt, &ReadFds);
\r
1186 // ToutPtr = NULL;
\r
1187 // if(TimeOut != 0)
\r
1189 // Tout.tv_sec = TimeOut;
\r
1190 // Tout.tv_usec = 0;
\r
1191 // ToutPtr = &Tout;
\r
1193 // iNumBytes = select(0, &ReadFds, NULL, NULL, ToutPtr);
\r
1194 // if(iNumBytes == SOCKET_ERROR)
\r
1196 // ReportWSError("select", WSAGetLastError());
\r
1197 // if(Pkt->Abort == ABORT_NONE)
\r
1198 // Pkt->Abort = ABORT_ERROR;
\r
1201 // else if(iNumBytes == 0)
\r
1203 // SetErrorMsg(MSGJPN094);
\r
1204 // SetTaskMsg(MSGJPN094);
\r
1205 // Pkt->Abort = ABORT_ERROR;
\r
1209 if((iNumBytes = do_recv(dSkt, Buf, BUFSIZE, 0, &TimeOutErr, CancelCheckWork)) <= 0)
\r
1211 if(TimeOutErr == YES)
\r
1213 SetErrorMsg(MSGJPN094);
\r
1214 SetTaskMsg(MSGJPN094);
\r
1215 if(Pkt->hWndTrans != NULL)
\r
1217 if(Pkt->Abort == ABORT_NONE)
\r
1218 Pkt->Abort = ABORT_ERROR;
\r
1220 else if(iNumBytes == SOCKET_ERROR)
\r
1222 if(Pkt->Abort == ABORT_NONE)
\r
1223 Pkt->Abort = ABORT_ERROR;
\r
1228 /*
\8a¿
\8e\9a\83R
\81[
\83h
\95Ï
\8a· */
\r
1229 if(Pkt->KanjiCode != KANJI_NOCNV)
\r
1232 cInfo.StrLen = iNumBytes;
\r
1234 cInfo.BufSize = BUFSIZE+3;
\r
1237 if(Pkt->KanjiCode == KANJI_JIS)
\r
1238 Continue = ConvJIStoSJIS(&cInfo);
\r
1240 Continue = ConvEUCtoSJIS(&cInfo);
\r
1241 if(WriteFile(iFileHandle, Buf2, cInfo.OutLen, &Writed, NULL) == FALSE)
\r
1242 Pkt->Abort = ABORT_DISKFULL;
\r
1244 while((Continue == YES) && (Pkt->Abort == ABORT_NONE));
\r
1248 if(WriteFile(iFileHandle, Buf, iNumBytes, &Writed, NULL) == FALSE)
\r
1249 Pkt->Abort = ABORT_DISKFULL;
\r
1252 Pkt->ExistSize += iNumBytes;
\r
1253 if(Pkt->hWndTrans != NULL)
\r
1254 AllTransSizeNow += iNumBytes;
\r
1257 /*
\93]
\91\97\83_
\83C
\83A
\83\8d\83O
\82ð
\8fo
\82³
\82È
\82¢
\8e\9e\82Ì
\8co
\89ß
\95\
\8e¦ */
\r
1258 DispDownloadSize(Pkt->ExistSize);
\r
1261 if(BackgrndMessageProc() == YES)
\r
1265 /*
\8f\91\82«
\8ec
\82µ
\82½
\83f
\81[
\83^
\82ð
\8f\91\82«
\8d\9e\82Þ */
\r
1266 if(Pkt->KanjiCode != KANJI_NOCNV)
\r
1269 cInfo.BufSize = BUFSIZE+3;
\r
1270 FlushRestData(&cInfo);
\r
1271 if(WriteFile(iFileHandle, Buf2, cInfo.OutLen, &Writed, NULL) == FALSE)
\r
1272 Pkt->Abort = ABORT_DISKFULL;
\r
1275 /*
\83O
\83\89\83t
\95\
\8e¦
\82ð
\8dX
\90V */
\r
1276 if(Pkt->hWndTrans != NULL)
\r
1278 KillTimer(Pkt->hWndTrans, TIMER_DISPLAY);
\r
1279 DispTransferStatus(Pkt->hWndTrans, YES, Pkt);
\r
1280 TimeStart = time(NULL) - TimeStart + 1;
\r
1284 /*
\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
1285 DispDownloadSize(-1);
\r
1288 /*
\83t
\83@
\83C
\83\8b\82Ì
\83^
\83C
\83\80\83X
\83^
\83\93\83v
\82ð
\8d\87\82í
\82¹
\82é */
\r
1289 if((SaveTimeStamp == YES) &&
\r
1290 ((Pkt->Time.dwLowDateTime != 0) || (Pkt->Time.dwHighDateTime != 0)))
\r
1292 SetFileTime(iFileHandle, &Pkt->Time, &Pkt->Time, &Pkt->Time);
\r
1295 CloseHandle(iFileHandle);
\r
1297 if(iNumBytes == SOCKET_ERROR)
\r
1298 ReportWSError("recv",WSAGetLastError());
\r
1302 SetErrorMsg(MSGJPN095, Pkt->LocalFile);
\r
1303 SetTaskMsg(MSGJPN095, Pkt->LocalFile);
\r
1304 Pkt->Abort = ABORT_ERROR;
\r
1308 if(shutdown(dSkt, 1) != 0)
\r
1309 ReportWSError("shutdown", WSAGetLastError());
\r
1313 if(ForceAbort == NO)
\r
1315 /* Abort
\82ð
\83z
\83X
\83g
\82É
\93`
\82¦
\82é */
\r
1316 if(Pkt->Abort != ABORT_NONE && iFileHandle != INVALID_HANDLE_VALUE)
\r
1318 SendData(Pkt->ctrl_skt, "\xFF\xF4\xFF", 3, MSG_OOB, CancelCheckWork); /* MSG_OOB
\82É
\92\8d\88Ó */
\r
1319 SendData(Pkt->ctrl_skt, "\xF2", 1, 0, CancelCheckWork);
\r
1320 command(Pkt->ctrl_skt, NULL, CancelCheckWork, "ABOR");
\r
1324 iRetCode = ReadReplyMessage(Pkt->ctrl_skt, Buf, 1024, CancelCheckWork, TmpBuf);
\r
1327 //DoPrintf("##DOWN REPLY : %s", Buf);
\r
1329 if(Pkt->Abort == ABORT_DISKFULL)
\r
1331 SetErrorMsg(MSGJPN096);
\r
1332 SetTaskMsg(MSGJPN096);
\r
1334 if(iRetCode >= FTP_RETRY)
\r
1336 if(Pkt->Abort != ABORT_NONE)
\r
1343 /*-----
\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
1346 * TRANSPACKET *Pkt :
\93]
\91\97\83t
\83@
\83C
\83\8b\8fî
\95ñ
\r
1347 * int iRetCode :
\89\9e\93\9a\83R
\81[
\83h
\r
1351 *----------------------------------------------------------------------------*/
\r
1353 static void DispDownloadFinishMsg(TRANSPACKET *Pkt, int iRetCode)
\r
1355 char Fname[FMAX_PATH+1];
\r
1357 if(ForceAbort == NO)
\r
1359 if((iRetCode/100) >= FTP_CONTINUE)
\r
1361 strcpy(Fname, Pkt->RemoteFile);
\r
1363 #if defined(HAVE_OPENVMS)
\r
1364 /* 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
1365 *
\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
1366 if (AskHostType() == HTYPE_VMS)
\r
1370 if((strncmp(Pkt->Cmd, "NLST", 4) == 0) || (strncmp(Pkt->Cmd, "LIST", 4) == 0))
\r
1372 SetTaskMsg(MSGJPN097);
\r
1373 strcpy(Fname, MSGJPN098);
\r
1375 else if((Pkt->hWndTrans != NULL) && (TimeStart != 0))
\r
1376 SetTaskMsg(MSGJPN099, TimeStart, Pkt->ExistSize/TimeStart);
\r
1378 SetTaskMsg(MSGJPN100);
\r
1380 if(Pkt->Abort != ABORT_USER)
\r
1382 if(DispUpDownErrDialog(downerr_dlg, Pkt->hWndTrans, Fname) == NO)
\r
1388 if((strncmp(Pkt->Cmd, "NLST", 4) == 0) || (strncmp(Pkt->Cmd, "LIST", 4) == 0))
\r
1389 SetTaskMsg(MSGJPN101, Pkt->ExistSize);
\r
1390 else if((Pkt->hWndTrans != NULL) && (TimeStart != 0))
\r
1391 SetTaskMsg(MSGJPN102, TimeStart, Pkt->ExistSize/TimeStart);
\r
1393 SetTaskMsg(MSGJPN103, Pkt->ExistSize);
\r
1400 /*-----
\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
1403 * int RedID :
\83_
\83C
\83A
\83\8d\83O
\83{
\83b
\83N
\83X
\82Ì
\83\8a\83\
\81[
\83XID
\r
1404 * HWND hWnd :
\8f\91\82«
\8d\9e\82Ý
\92\86\83_
\83C
\83A
\83\8d\83O
\82Ì
\83E
\83C
\83\93\83h
\83E
\r
1405 * char *Fname :
\83t
\83@
\83C
\83\8b\96¼
\r
1408 * int
\83X
\83e
\81[
\83^
\83X (YES=
\92\86\8e~/NO=
\91S
\82Ä
\92\86\8e~)
\r
1409 *----------------------------------------------------------------------------*/
\r
1411 static int DispUpDownErrDialog(int ResID, HWND hWnd, char *Fname)
\r
1414 hWnd = GetMainHwnd();
\r
1416 SoundPlay(SND_ERROR);
\r
1417 return(DialogBoxParam(GetFtpInst(), MAKEINTRESOURCE(ResID), hWnd, UpDownErrorDialogProc, (LPARAM)Fname));
\r
1421 /*-----
\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
1424 * HWND hDlg :
\83E
\83C
\83\93\83h
\83E
\83n
\83\93\83h
\83\8b\r
1425 * UINT message :
\83\81\83b
\83Z
\81[
\83W
\94Ô
\8d\86\r
1426 * WPARAM wParam :
\83\81\83b
\83Z
\81[
\83W
\82Ì WPARAM
\88ø
\90\94\r
1427 * LPARAM lParam :
\83\81\83b
\83Z
\81[
\83W
\82Ì LPARAM
\88ø
\90\94\r
1431 *----------------------------------------------------------------------------*/
\r
1433 static BOOL CALLBACK UpDownErrorDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
\r
1437 case WM_INITDIALOG :
\r
1438 SendDlgItemMessage(hDlg, UPDOWN_ERR_FNAME, WM_SETTEXT, 0, (LPARAM)lParam);
\r
1439 SendDlgItemMessage(hDlg, UPDOWN_ERR_MSG, WM_SETTEXT, 0, (LPARAM)ErrMsg);
\r
1443 switch(GET_WM_COMMAND_ID(wParam, lParam))
\r
1446 EndDialog(hDlg, YES);
\r
1450 EndDialog(hDlg, NO);
\r
1459 /*-----
\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
1462 * TRANSPACKET *Pkt :
\93]
\91\97\83t
\83@
\83C
\83\8b\8fî
\95ñ
\r
1463 * iont ProcMode :
\8f\88\97\9d\83\82\81[
\83h(EXIST_xxx)
\r
1464 * LONGLONG Size :
\83\8d\81[
\83h
\8dÏ
\82Ý
\82Ì
\83t
\83@
\83C
\83\8b\82Ì
\83T
\83C
\83Y
\r
1465 * int *Mode :
\83t
\83@
\83C
\83\8b\8dì
\90¬
\83\82\81[
\83h (CREATE_xxxx)
\r
1468 * 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
1471 * Pkt->ExistSize
\82Ì
\83Z
\83b
\83g
\82ð
\8ds
\82È
\82¤
\r
1472 *----------------------------------------------------------------------------*/
\r
1474 static int SetDownloadResume(TRANSPACKET *Pkt, int ProcMode, LONGLONG Size, int *Mode, int *CancelCheckWork)
\r
1478 char Reply[ERR_MSG_LEN+7];
\r
1483 Pkt->ExistSize = 0;
\r
1484 *Mode = CREATE_ALWAYS;
\r
1486 if(ProcMode == EXIST_RESUME)
\r
1488 iRetCode = command(Pkt->ctrl_skt, Reply, CancelCheckWork, "REST %s", MakeNumString(Size, Tmp, FALSE));
\r
1489 if(iRetCode/100 < FTP_RETRY)
\r
1491 /*
\83\8a\83W
\83\85\81[
\83\80 */
\r
1492 if(Pkt->hWndTrans != NULL)
\r
1493 Pkt->ExistSize = Size;
\r
1494 *Mode = OPEN_ALWAYS;
\r
1498 Com = DialogBox(GetFtpInst(), MAKEINTRESOURCE(noresume_dlg), Pkt->hWndTrans, NoResumeWndProc);
\r
1501 if(Com == NO_ALL) /*
\91S
\82Ä
\92\86\8e~ */
\r
1503 Pkt->Abort = ABORT_USER;
\r
1511 /*----- resume
\83G
\83\89\81[
\83_
\83C
\83A
\83\8d\83O
\82Ì
\83R
\81[
\83\8b\83o
\83b
\83N ----------------------------------
\r
1514 * HWND hDlg :
\83E
\83C
\83\93\83h
\83E
\83n
\83\93\83h
\83\8b\r
1515 * UINT message :
\83\81\83b
\83Z
\81[
\83W
\94Ô
\8d\86\r
1516 * WPARAM wParam :
\83\81\83b
\83Z
\81[
\83W
\82Ì WPARAM
\88ø
\90\94\r
1517 * LPARAM lParam :
\83\81\83b
\83Z
\81[
\83W
\82Ì LPARAM
\88ø
\90\94\r
1521 *----------------------------------------------------------------------------*/
\r
1523 static BOOL CALLBACK NoResumeWndProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)
\r
1527 case WM_INITDIALOG :
\r
1531 switch(GET_WM_COMMAND_ID(wParam, lParam))
\r
1534 EndDialog(hDlg, YES);
\r
1538 EndDialog(hDlg, NO);
\r
1541 case RESUME_CANCEL_ALL :
\r
1542 EndDialog(hDlg, NO_ALL);
\r
1552 /*-----
\83A
\83b
\83v
\83\8d\81[
\83h
\82ð
\8ds
\82È
\82¤ --------------------------------------------------
\r
1555 * SOCKET cSkt :
\83R
\83\93\83g
\83\8d\81[
\83\8b\83\
\83P
\83b
\83g
\r
1556 * TRANSPACKET *Pkt :
\93]
\91\97\83t
\83@
\83C
\83\8b\8fî
\95ñ
\r
1559 * int
\89\9e\93\9a\83R
\81[
\83h
\r
1560 *----------------------------------------------------------------------------*/
\r
1562 static int DoUpLoad(SOCKET cSkt, TRANSPACKET *Pkt)
\r
1565 char Reply[ERR_MSG_LEN+7];
\r
1567 Pkt->ctrl_skt = cSkt;
\r
1569 if(Pkt->Mode != EXIST_IGNORE)
\r
1571 if(CheckFileReadable(Pkt->LocalFile) == SUCCESS)
\r
1573 if(Pkt->Type == TYPE_I)
\r
1574 Pkt->KanjiCode = KANJI_NOCNV;
\r
1576 iRetCode = command(Pkt->ctrl_skt, Reply, &Canceled, "TYPE %c", Pkt->Type);
\r
1577 if(iRetCode/100 < FTP_RETRY)
\r
1579 if(Pkt->Mode == EXIST_UNIQUE)
\r
1580 strcpy(Pkt->Cmd, "STOU ");
\r
1582 if(Pkt->hWndTrans != NULL)
\r
1583 DispTransFileInfo(Pkt, MSGJPN104, TRUE, YES);
\r
1585 if(BackgrndMessageProc() == NO)
\r
1587 if(AskPasvMode() != YES)
\r
1588 iRetCode = UpLoadNonPassive(Pkt);
\r
1590 iRetCode = UpLoadPassive(Pkt);
\r
1596 SetErrorMsg(Reply);
\r
1598 /*
\91®
\90«
\95Ï
\8dX */
\r
1599 if((Pkt->Attr != -1) && ((iRetCode/100) == FTP_COMPLETE))
\r
1600 command(Pkt->ctrl_skt, Reply, &Canceled, "%s %03X %s", AskHostChmodCmd(), Pkt->Attr, Pkt->RemoteFile);
\r
1604 SetErrorMsg(MSGJPN105, Pkt->LocalFile);
\r
1605 SetTaskMsg(MSGJPN105, Pkt->LocalFile);
\r
1607 Pkt->Abort = ABORT_ERROR;
\r
1608 DispUploadFinishMsg(Pkt, iRetCode);
\r
1613 DispTransFileInfo(Pkt, MSGJPN106, TRUE, YES);
\r
1614 SetTaskMsg(MSGJPN107, Pkt->LocalFile);
\r
1621 /*-----
\92Ê
\8fí
\83\82\81[
\83h
\82Å
\83t
\83@
\83C
\83\8b\82ð
\83A
\83b
\83v
\83\8d\81[
\83h ------------------------------------
\r
1624 * TRANSPACKET *Pkt :
\93]
\91\97\83t
\83@
\83C
\83\8b\8fî
\95ñ
\r
1627 * int
\89\9e\93\9a\83R
\81[
\83h
\r
1628 *----------------------------------------------------------------------------*/
\r
1630 static int UpLoadNonPassive(TRANSPACKET *Pkt)
\r
1634 SOCKET data_socket = INVALID_SOCKET; // data channel socket
\r
1635 SOCKET listen_socket = INVALID_SOCKET; // data listen socket
\r
1637 struct sockaddr_in saSockAddr1;
\r
1639 char Reply[ERR_MSG_LEN+7];
\r
1641 if((listen_socket = GetFTPListenSocket(Pkt->ctrl_skt, &Canceled)) != INVALID_SOCKET)
\r
1643 SetUploadResume(Pkt, Pkt->Mode, Pkt->ExistSize, &Resume);
\r
1645 sprintf(Buf, "%s%s", Pkt->Cmd, Pkt->RemoteFile);
\r
1647 sprintf(Buf, "%s%s", "APPE ", Pkt->RemoteFile);
\r
1649 iRetCode = command(Pkt->ctrl_skt, Reply, &Canceled, "%s", Buf);
\r
1650 if((iRetCode/100) == FTP_PRELIM)
\r
1652 if(SocksGet2ndBindReply(listen_socket, &data_socket) == FAIL)
\r
1654 iLength=sizeof(saSockAddr1);
\r
1655 data_socket = do_accept(listen_socket,(struct sockaddr *)&saSockAddr1, (int *)&iLength);
\r
1657 if(shutdown(listen_socket, 1) != 0)
\r
1658 ReportWSError("shutdown listen", WSAGetLastError());
\r
1659 listen_socket = DoClose(listen_socket);
\r
1661 if(data_socket == INVALID_SOCKET)
\r
1663 SetErrorMsg(MSGJPN280);
\r
1664 ReportWSError("accept", WSAGetLastError());
\r
1668 DoPrintf("Skt=%u : accept from %s port %u", data_socket, inet_ntoa(saSockAddr1.sin_addr), ntohs(saSockAddr1.sin_port));
\r
1671 if(data_socket != INVALID_SOCKET)
\r
1673 iRetCode = UpLoadFile(Pkt, data_socket);
\r
1674 data_socket = DoClose(data_socket);
\r
1679 SetErrorMsg(Reply);
\r
1680 SetTaskMsg(MSGJPN108);
\r
1681 listen_socket = DoClose(listen_socket);
\r
1687 SetErrorMsg(MSGJPN279);
\r
1690 DispUploadFinishMsg(Pkt, iRetCode);
\r
1696 /*----- Passive
\83\82\81[
\83h
\82Å
\83t
\83@
\83C
\83\8b\82ð
\83A
\83b
\83v
\83\8d\81[
\83h ---------------------------------
\r
1699 * TRANSPACKET *Pkt :
\93]
\91\97\83t
\83@
\83C
\83\8b\8fî
\95ñ
\r
1702 * int
\89\9e\93\9a\83R
\81[
\83h
\r
1703 *----------------------------------------------------------------------------*/
\r
1705 static int UpLoadPassive(TRANSPACKET *Pkt)
\r
1708 SOCKET data_socket = INVALID_SOCKET; // data channel socket
\r
1714 char Reply[ERR_MSG_LEN+7];
\r
1716 iRetCode = command(Pkt->ctrl_skt, Buf, &Canceled, "PASV");
\r
1717 if(iRetCode/100 == FTP_COMPLETE)
\r
1719 if(GetAdrsAndPort(Buf, Adrs, &Port, 19) == SUCCESS)
\r
1721 if((data_socket = connectsock(Adrs, Port, MSGJPN109, &Canceled)) != INVALID_SOCKET)
\r
1723 if(setsockopt(data_socket, IPPROTO_TCP, TCP_NODELAY, (LPSTR)&Flg, sizeof(Flg)) == SOCKET_ERROR)
\r
1724 ReportWSError("setsockopt", WSAGetLastError());
\r
1726 SetUploadResume(Pkt, Pkt->Mode, Pkt->ExistSize, &Resume);
\r
1728 sprintf(Buf, "%s%s", Pkt->Cmd, Pkt->RemoteFile);
\r
1730 sprintf(Buf, "%s%s", "APPE ", Pkt->RemoteFile);
\r
1732 iRetCode = command(Pkt->ctrl_skt, Reply, &Canceled, "%s", Buf);
\r
1733 if(iRetCode/100 == FTP_PRELIM)
\r
1735 iRetCode = UpLoadFile(Pkt, data_socket);
\r
1737 data_socket = DoClose(data_socket);
\r
1741 SetErrorMsg(Reply);
\r
1742 SetTaskMsg(MSGJPN110);
\r
1743 data_socket = DoClose(data_socket);
\r
1749 SetErrorMsg(MSGJPN281);
\r
1756 SetTaskMsg(MSGJPN111);
\r
1763 DispUploadFinishMsg(Pkt, iRetCode);
\r
1769 /*-----
\83A
\83b
\83v
\83\8d\81[
\83h
\82Ì
\8eÀ
\8ds ----------------------------------------------------
\r
1772 * TRANSPACKET *Pkt :
\93]
\91\97\83t
\83@
\83C
\83\8b\8fî
\95ñ
\r
1773 * SOCKET dSkt :
\83f
\81[
\83^
\83\
\83P
\83b
\83g
\r
1776 * int
\89\9e\93\9a\83R
\81[
\83h
\r
1779 *
\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
1780 *
\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
1781 *----------------------------------------------------------------------------*/
\r
1783 static int UpLoadFile(TRANSPACKET *Pkt, SOCKET dSkt)
\r
1786 HANDLE iFileHandle;
\r
1787 SECURITY_ATTRIBUTES Sec;
\r
1788 char Buf[BUFSIZE];
\r
1789 char Buf2[BUFSIZE+3];
\r
1790 CODECONVINFO cInfo;
\r
1791 TERMCODECONVINFO tInfo;
\r
1798 char TmpBuf[ONELINE_BUF_SIZE];
\r
1802 #ifdef SET_BUFFER_SIZE
\r
1803 /* Add by H.Shirouzu at 2002/10/02 */
\r
1804 int buf_size = SOCKBUF_SIZE;
\r
1805 for ( ; buf_size > 0; buf_size /= 2)
\r
1806 if (setsockopt(dSkt, SOL_SOCKET, SO_SNDBUF, (char *)&buf_size, sizeof(buf_size)) == 0)
\r
1811 Pkt->Abort = ABORT_NONE;
\r
1813 Sec.nLength = sizeof(SECURITY_ATTRIBUTES);
\r
1814 Sec.lpSecurityDescriptor = NULL;
\r
1815 Sec.bInheritHandle = FALSE;
\r
1817 if((iFileHandle = CreateFile(Pkt->LocalFile, GENERIC_READ,
\r
1818 FILE_SHARE_READ|FILE_SHARE_WRITE, &Sec, OPEN_EXISTING, 0, NULL)) != INVALID_HANDLE_VALUE)
\r
1820 if(Pkt->hWndTrans != NULL)
\r
1822 Low = GetFileSize(iFileHandle, &High);
\r
1823 Pkt->Size = MakeLongLong(High, Low);
\r
1825 High = (DWORD)HIGH32(Pkt->ExistSize);
\r
1826 Low = (DWORD)LOW32(Pkt->ExistSize);
\r
1827 SetFilePointer(iFileHandle, Low, &High, FILE_BEGIN);
\r
1829 AllTransSizeNow = 0;
\r
1830 TimeStart = time(NULL);
\r
1831 SetTimer(Pkt->hWndTrans, TIMER_DISPLAY, DISPLAY_TIMING, NULL);
\r
1834 InitCodeConvInfo(&cInfo);
\r
1835 cInfo.KanaCnv = Pkt->KanaCnv;
\r
1836 InitTermCodeConvInfo(&tInfo);
\r
1838 /*=====
\83t
\83@
\83C
\83\8b\82ð
\91\97\90M
\82·
\82é
\83\8b\81[
\83v =====*/
\r
1839 while((Pkt->Abort == ABORT_NONE) &&
\r
1840 (ForceAbort == NO) &&
\r
1841 (ReadFile(iFileHandle, Buf, BUFSIZE, &iNumBytes, NULL) == TRUE))
\r
1843 if(iNumBytes == 0)
\r
1846 /* EOF
\8f\9c\8b\8e */
\r
1848 if((RmEOF == YES) && (Pkt->Type == TYPE_A))
\r
1850 if((EofPos = memchr(Buf, 0x1A, iNumBytes)) != NULL)
\r
1851 iNumBytes = EofPos - Buf;
\r
1854 /*
\8a¿
\8e\9a\83R
\81[
\83h
\95Ï
\8a· */
\r
1855 if(Pkt->KanjiCode != KANJI_NOCNV)
\r
1858 cInfo.StrLen = iNumBytes;
\r
1860 cInfo.BufSize = BUFSIZE+3;
\r
1863 if(Pkt->KanjiCode == KANJI_JIS)
\r
1864 Continue = ConvSJIStoJIS(&cInfo);
\r
1866 Continue = ConvSJIStoEUC(&cInfo);
\r
1868 if(TermCodeConvAndSend(&tInfo, dSkt, Buf2, cInfo.OutLen, Pkt->Type) == FAIL)
\r
1870 Pkt->Abort = ABORT_ERROR;
\r
1874 while(Continue == YES);
\r
1878 if(TermCodeConvAndSend(&tInfo, dSkt, Buf, iNumBytes, Pkt->Type) == FAIL)
\r
1879 Pkt->Abort = ABORT_ERROR;
\r
1882 Pkt->ExistSize += iNumBytes;
\r
1883 if(Pkt->hWndTrans != NULL)
\r
1884 AllTransSizeNow += iNumBytes;
\r
1886 if(BackgrndMessageProc() == YES)
\r
1889 if(EofPos != NULL)
\r
1893 if((ForceAbort == NO) && (Pkt->Abort == ABORT_NONE))
\r
1895 /*
\91\97\82è
\8ec
\82µ
\82½
\83f
\81[
\83^
\82ð
\91\97\90M */
\r
1896 if(Pkt->KanjiCode != KANJI_NOCNV)
\r
1899 cInfo.BufSize = BUFSIZE+3;
\r
1900 FlushRestData(&cInfo);
\r
1902 if(TermCodeConvAndSend(&tInfo, dSkt, Buf2, cInfo.OutLen, Pkt->Type) == FAIL)
\r
1903 Pkt->Abort = ABORT_ERROR;
\r
1907 tInfo.BufSize = BUFSIZE+3;
\r
1908 FlushRestTermCodeConvData(&tInfo);
\r
1909 if(SendData(dSkt, Buf2, tInfo.OutLen, 0, &Canceled) == FAIL)
\r
1910 Pkt->Abort = ABORT_ERROR;
\r
1913 /*
\83O
\83\89\83t
\95\
\8e¦
\82ð
\8dX
\90V */
\r
1914 if(Pkt->hWndTrans != NULL)
\r
1916 KillTimer(Pkt->hWndTrans, TIMER_DISPLAY);
\r
1917 DispTransferStatus(Pkt->hWndTrans, YES, Pkt);
\r
1918 TimeStart = time(NULL) - TimeStart + 1;
\r
1920 CloseHandle(iFileHandle);
\r
1924 SetErrorMsg(MSGJPN112, Pkt->LocalFile);
\r
1925 SetTaskMsg(MSGJPN112, Pkt->LocalFile);
\r
1926 Pkt->Abort = ABORT_ERROR;
\r
1929 if(shutdown(dSkt, 1) != 0)
\r
1930 ReportWSError("shutdown", WSAGetLastError());
\r
1934 while(do_recv(dSkt, Buf, BUFSIZE, 0, &TimeOutErr, &Canceled) > 0)
\r
1938 iRetCode = ReadReplyMessage(Pkt->ctrl_skt, Buf, 1024, &Canceled, TmpBuf);
\r
1941 //DoPrintf("##UP REPLY : %s", Buf);
\r
1943 if(iRetCode >= FTP_RETRY)
\r
1946 if(Pkt->Abort != ABORT_NONE)
\r
1953 /*-----
\83o
\83b
\83t
\83@
\82Ì
\93à
\97e
\82ð
\89ü
\8ds
\83R
\81[
\83h
\95Ï
\8a·
\82µ
\82Ä
\91\97\90M --------------------------------
\r
1956 * TERMCODECONVINFO *tInfo :
\89ü
\8ds
\83R
\81[
\83h
\95Ï
\8a·
\83p
\83P
\83b
\83g
\r
1957 * SOCKET Skt :
\83\
\83P
\83b
\83g
\r
1958 * char *Data :
\83f
\81[
\83^
\r
1959 * int Size :
\83f
\81[
\83^
\82Ì
\83T
\83C
\83Y
\r
1960 * int Ascii :
\83\82\81[
\83h
\81@
\81@(TYPE_xx)
\r
1963 * int
\89\9e\93\9a\83R
\81[
\83h
\r
1964 *----------------------------------------------------------------------------*/
\r
1966 static int TermCodeConvAndSend(TERMCODECONVINFO *tInfo, SOCKET Skt, char *Data, int Size, int Ascii)
\r
1968 char Buf3[BUFSIZE*2];
\r
1974 // 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
1975 if(Ascii == TYPE_A)
\r
1977 tInfo->Str = Data;
\r
1978 tInfo->StrLen = Size;
\r
1979 tInfo->Buf = Buf3;
\r
1980 tInfo->BufSize = BUFSIZE*2;
\r
1983 Continue = ConvTermCodeToCRLF(tInfo);
\r
1984 if((Ret = SendData(Skt, Buf3, tInfo->OutLen, 0, &Canceled)) == FAIL)
\r
1987 while(Continue == YES);
\r
1990 Ret = SendData(Skt, Data, Size, 0, &Canceled);
\r
1996 /*-----
\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
1999 * TRANSPACKET *Pkt :
\93]
\91\97\83t
\83@
\83C
\83\8b\8fî
\95ñ
\r
2000 * int iRetCode :
\89\9e\93\9a\83R
\81[
\83h
\r
2004 *----------------------------------------------------------------------------*/
\r
2006 static void DispUploadFinishMsg(TRANSPACKET *Pkt, int iRetCode)
\r
2008 if(ForceAbort == NO)
\r
2010 if((iRetCode/100) >= FTP_CONTINUE)
\r
2012 if((Pkt->hWndTrans != NULL) && (TimeStart != 0))
\r
2013 SetTaskMsg(MSGJPN113, TimeStart, Pkt->ExistSize/TimeStart);
\r
2015 SetTaskMsg(MSGJPN114);
\r
2017 if(Pkt->Abort != ABORT_USER)
\r
2019 if(DispUpDownErrDialog(uperr_dlg, Pkt->hWndTrans, Pkt->LocalFile) == NO)
\r
2025 if((Pkt->hWndTrans != NULL) && (TimeStart != 0))
\r
2026 SetTaskMsg(MSGJPN115, TimeStart, Pkt->ExistSize/TimeStart);
\r
2028 SetTaskMsg(MSGJPN116);
\r
2035 /*-----
\83A
\83b
\83v
\83\8d\81[
\83h
\82Ì
\83\8a\83W
\83\85\81[
\83\80\82Ì
\8f\80\94õ
\82ð
\8ds
\82¤ ----------------------------------
\r
2038 * TRANSPACKET *Pkt :
\93]
\91\97\83t
\83@
\83C
\83\8b\8fî
\95ñ
\r
2039 * iont ProcMode :
\8f\88\97\9d\83\82\81[
\83h(EXIST_xxx)
\r
2040 * LONGLONG Size :
\83z
\83X
\83g
\82É
\82 \82é
\83t
\83@
\83C
\83\8b\82Ì
\83T
\83C
\83Y
\r
2041 * int *Mode :
\83\8a\83W
\83\85\81[
\83\80\82ð
\8ds
\82¤
\82©
\82Ç
\82¤
\82© (YES/NO)
\r
2044 * int
\83X
\83e
\81[
\83^
\83X = YES
\r
2047 * Pkt->ExistSize
\82Ì
\83Z
\83b
\83g
\82ð
\8ds
\82È
\82¤
\r
2048 *----------------------------------------------------------------------------*/
\r
2050 static int SetUploadResume(TRANSPACKET *Pkt, int ProcMode, LONGLONG Size, int *Mode)
\r
2052 Pkt->ExistSize = 0;
\r
2054 if(ProcMode == EXIST_RESUME)
\r
2056 if(Pkt->hWndTrans != NULL)
\r
2058 Pkt->ExistSize = Size;
\r
2066 /*-----
\93]
\91\97\92\86\83_
\83C
\83A
\83\8d\83O
\83{
\83b
\83N
\83X
\82Ì
\83R
\81[
\83\8b\83o
\83b
\83N --------------------------------
\r
2069 * HWND hDlg :
\83E
\83C
\83\93\83h
\83E
\83n
\83\93\83h
\83\8b\r
2070 * UINT message :
\83\81\83b
\83Z
\81[
\83W
\94Ô
\8d\86\r
2071 * WPARAM wParam :
\83\81\83b
\83Z
\81[
\83W
\82Ì WPARAM
\88ø
\90\94\r
2072 * LPARAM lParam :
\83\81\83b
\83Z
\81[
\83W
\82Ì LPARAM
\88ø
\90\94\r
2076 *----------------------------------------------------------------------------*/
\r
2078 static LRESULT CALLBACK TransDlgProc(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam)
\r
2083 static TRANSPACKET *Pkt;
\r
2087 case WM_INITDIALOG :
\r
2088 GetWindowRect(hDlg, &RectDlg);
\r
2089 RectDlg.right -= RectDlg.left;
\r
2090 RectDlg.bottom -= RectDlg.top;
\r
2091 GetWindowRect(GetMainHwnd(), &RectPar);
\r
2093 ((RectPar.right + RectPar.left) / 2) - (RectDlg.right / 2),
\r
2094 ((RectPar.bottom + RectPar.top) / 2) - (RectDlg.bottom / 2),
\r
2099 hMenu = GetSystemMenu(hDlg, FALSE);
\r
2100 EnableMenuItem(hMenu, SC_CLOSE, MF_GRAYED);
\r
2104 switch(LOWORD(wParam))
\r
2106 case TRANS_STOP_NEXT :
\r
2110 case TRANS_STOP_ALL :
\r
2112 /*
\82±
\82±
\82É break
\82Í
\82È
\82¢ */
\r
2115 Pkt->Abort = ABORT_USER;
\r
2122 if(wParam == TIMER_DISPLAY)
\r
2124 if(MoveToForeground == YES)
\r
2125 SetForegroundWindow(hDlg);
\r
2126 MoveToForeground = NO;
\r
2127 KillTimer(hDlg, TIMER_DISPLAY);
\r
2128 DispTransferStatus(hDlg, NO, Pkt);
\r
2129 SetTimer(hDlg, TIMER_DISPLAY, DISPLAY_TIMING, NULL);
\r
2133 case WM_SET_PACKET :
\r
2134 Pkt = (TRANSPACKET *)lParam;
\r
2141 /*-----
\93]
\91\97\83X
\83e
\81[
\83^
\83X
\82ð
\95\
\8e¦ --------------------------------------------------
\r
2144 * HWND hWnd :
\83E
\83C
\83\93\83h
\83E
\83n
\83\93\83h
\83\8b\r
2145 * int End :
\93]
\91\97\82ª
\8a®
\97¹
\82µ
\82½
\82©
\82Ç
\82¤
\82© (YES/NO)
\r
2149 *----------------------------------------------------------------------------*/
\r
2151 static void DispTransferStatus(HWND hWnd, int End, TRANSPACKET *Pkt)
\r
2165 SendMessage(hWnd, WM_GETTEXT, 79, (LPARAM)Str);
\r
2166 if((Pos = strchr(Str, ')')) != NULL)
\r
2170 sprintf(Tmp, "(%d)%s", AskTransferFileNum(), Pos);
\r
2171 SendMessage(hWnd, WM_SETTEXT, 0, (LPARAM)Tmp);
\r
2173 if(Pkt->Abort == ABORT_NONE)
\r
2177 TotalLap = time(NULL) - TimeStart + 1;
\r
2181 Bps = AllTransSizeNow / TotalLap;
\r
2182 Transed = Pkt->Size - Pkt->ExistSize;
\r
2184 if(Pkt->Size <= 0)
\r
2185 sprintf(Tmp, "%d ", Pkt->ExistSize);
\r
2186 else if(Pkt->Size < 1024)
\r
2187 sprintf(Tmp, "%s / %s ", MakeNumString(Pkt->ExistSize, Num1, TRUE), MakeNumString(Pkt->Size, Num2, TRUE));
\r
2189 sprintf(Tmp, "%sk / %sk ", MakeNumString(Pkt->ExistSize/1024, Num1, TRUE), MakeNumString(Pkt->Size/1024, Num2, TRUE));
\r
2193 sprintf(Tmp, "( 0 B/S )");
\r
2194 else if(Bps < 1000)
\r
2195 sprintf(Tmp, "( %s B/S )", MakeNumString(Bps, Num1, TRUE));
\r
2197 sprintf(Tmp, "( %s.%02d KB/S )", MakeNumString(Bps/1000, Num1, TRUE), (int)((Bps%1000)/10));
\r
2200 if((Bps > 0) && (Pkt->Size > 0) && (Transed >= 0))
\r
2202 sprintf(Tmp, " %d:%02d", (int)((Transed/Bps)/60), (int)((Transed/Bps)%60));
\r
2206 strcat(Str, " ??:??");
\r
2209 strcpy(Str, MSGJPN117);
\r
2212 strcpy(Str, MSGJPN118);
\r
2214 SendDlgItemMessage(hWnd, TRANS_STATUS, WM_SETTEXT, 0, (LPARAM)Str);
\r
2216 if(Pkt->Size <= 0)
\r
2218 else if(Pkt->Size < 1024*1024)
\r
2219 Per = (int)(Pkt->ExistSize * 100 / Pkt->Size);
\r
2221 Per = (int)((Pkt->ExistSize/1024) * 100 / (Pkt->Size/1024));
\r
2222 SendDlgItemMessage(hWnd, TRANS_TIME_BAR, PBM_SETPOS, Per, 0);
\r
2228 /*-----
\93]
\91\97\82·
\82é
\83t
\83@
\83C
\83\8b\82Ì
\8fî
\95ñ
\82ð
\95\
\8e¦ ------------------------------------------
\r
2231 * TRANSPACKET *Pkt :
\93]
\91\97\83t
\83@
\83C
\83\8b\8fî
\95ñ
\r
2232 * char *Title :
\83E
\83C
\83\93\83h
\83E
\82Ì
\83^
\83C
\83g
\83\8b\r
2233 * 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
2234 * int Info :
\83t
\83@
\83C
\83\8b\8fî
\95ñ
\82ð
\95\
\8e¦
\82·
\82é
\82©
\82Ç
\82¤
\82© (YES/NO)
\r
2238 *----------------------------------------------------------------------------*/
\r
2240 static void DispTransFileInfo(TRANSPACKET *Pkt, char *Title, int SkipButton, int Info)
\r
2244 if(Pkt->hWndTrans != NULL)
\r
2246 EnableWindow(GetDlgItem(Pkt->hWndTrans, IDCANCEL), SkipButton);
\r
2248 sprintf(Tmp, "(%d)%s", AskTransferFileNum(), Title);
\r
2249 SendMessage(Pkt->hWndTrans, WM_SETTEXT, 0, (LPARAM)Tmp);
\r
2250 SendDlgItemMessage(Pkt->hWndTrans, TRANS_STATUS, WM_SETTEXT, 0, (LPARAM)"");
\r
2252 SendDlgItemMessage(Pkt->hWndTrans, TRANS_TIME_BAR, PBM_SETRANGE, 0, MAKELPARAM(0, 100));
\r
2253 SendDlgItemMessage(Pkt->hWndTrans, TRANS_TIME_BAR, PBM_SETSTEP, 1, 0);
\r
2254 SendDlgItemMessage(Pkt->hWndTrans, TRANS_TIME_BAR, PBM_SETPOS, 0, 0);
\r
2258 DispStaticText(GetDlgItem(Pkt->hWndTrans, TRANS_REMOTE), Pkt->RemoteFile);
\r
2259 DispStaticText(GetDlgItem(Pkt->hWndTrans, TRANS_LOCAL), Pkt->LocalFile);
\r
2261 if(Pkt->Type == TYPE_I)
\r
2262 SendDlgItemMessage(Pkt->hWndTrans, TRANS_MODE, WM_SETTEXT, 0, (LPARAM)MSGJPN119);
\r
2263 else if(Pkt->Type == TYPE_A)
\r
2264 SendDlgItemMessage(Pkt->hWndTrans, TRANS_MODE, WM_SETTEXT, 0, (LPARAM)MSGJPN120);
\r
2266 if(Pkt->KanjiCode == KANJI_NOCNV)
\r
2267 SendDlgItemMessage(Pkt->hWndTrans, TRANS_KANJI, WM_SETTEXT, 0, (LPARAM)MSGJPN121);
\r
2268 else if(Pkt->KanjiCode == KANJI_JIS)
\r
2269 SendDlgItemMessage(Pkt->hWndTrans, TRANS_KANJI, WM_SETTEXT, 0, (LPARAM)MSGJPN122);
\r
2270 else if(Pkt->KanjiCode == KANJI_EUC)
\r
2271 SendDlgItemMessage(Pkt->hWndTrans, TRANS_KANJI, WM_SETTEXT, 0, (LPARAM)MSGJPN123);
\r
2275 SendDlgItemMessage(Pkt->hWndTrans, TRANS_REMOTE, WM_SETTEXT, 0, (LPARAM)"");
\r
2276 SendDlgItemMessage(Pkt->hWndTrans, TRANS_LOCAL, WM_SETTEXT, 0, (LPARAM)"");
\r
2277 SendDlgItemMessage(Pkt->hWndTrans, TRANS_MODE, WM_SETTEXT, 0, (LPARAM)"");
\r
2278 SendDlgItemMessage(Pkt->hWndTrans, TRANS_KANJI, WM_SETTEXT, 0, (LPARAM)"");
\r
2285 /*----- 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
2288 * char *Str : PASV
\83R
\83}
\83\93\83h
\82Ì
\83\8a\83v
\83\89\83C
\r
2289 * char *Adrs :
\83A
\83h
\83\8c\83X
\82Ì
\83R
\83s
\81[
\90æ ("www.xxx.yyy.zzz")
\r
2290 * int *Port :
\83|
\81[
\83g
\94Ô
\8d\86\82ð
\83Z
\83b
\83g
\82·
\82é
\83\8f\81[
\83N
\r
2291 * int Max :
\83A
\83h
\83\8c\83X
\95¶
\8e\9a\97ñ
\82Ì
\8dÅ
\91å
\92·
\r
2294 * int
\83X
\83e
\81[
\83^
\83X
\r
2296 *----------------------------------------------------------------------------*/
\r
2298 static int GetAdrsAndPort(char *Str, char *Adrs, int *Port, int Max)
\r
2306 Pos = strchr(Str, '(');
\r
2310 Btm = strchr(Pos, ',');
\r
2314 Btm = strchr(Btm, ',');
\r
2318 Btm = strchr(Btm, ',');
\r
2322 Btm = strchr(Btm, ',');
\r
2325 if((Btm - Pos) <= Max)
\r
2327 strncpy(Adrs, Pos, Btm - Pos);
\r
2328 *(Adrs + (Btm - Pos)) = NUL;
\r
2329 ReplaceAll(Adrs, ',', '.');
\r
2332 Btm = strchr(Pos, ',');
\r
2336 *Port = (atoi(Pos) * 0x100) + atoi(Btm);
\r
2349 /*----- Windows
\82Ì
\83X
\83y
\83V
\83\83\83\8b\83f
\83o
\83C
\83X
\82©
\82Ç
\82¤
\82©
\82ð
\95Ô
\82· -----------------------------
\r
2352 * char *Fname :
\83t
\83@
\83C
\83\8b\96¼
\r
2355 * int
\83X
\83e
\81[
\83^
\83X (YES/NO)
\r
2356 *----------------------------------------------------------------------------*/
\r
2358 static int IsSpecialDevice(char *Fname)
\r
2363 if((_stricmp(Fname, "CON") == 0) ||
\r
2364 (_stricmp(Fname, "PRN") == 0) ||
\r
2365 (_stricmp(Fname, "AUX") == 0) ||
\r
2366 (_strnicmp(Fname, "CON.", 4) == 0) ||
\r
2367 (_strnicmp(Fname, "PRN.", 4) == 0) ||
\r
2368 (_strnicmp(Fname, "AUX.", 4) == 0))
\r
2376 /*-----
\83~
\83\89\81[
\83\8a\83\93\83O
\82Å
\82Ì
\83t
\83@
\83C
\83\8b\8dí
\8f\9c\8am
\94F --------------------------------------
\r
2381 * TRANSPACKET *Pkt
\r
2385 *----------------------------------------------------------------------------*/
\r
2387 static int MirrorDelNotify(int Cur, int Notify, TRANSPACKET *Pkt)
\r
2389 MIRRORDELETEINFO DelInfo;
\r
2392 if(((Cur == WIN_LOCAL) && (MirDownDelNotify == NO)) ||
\r
2393 ((Cur == WIN_REMOTE) && (MirUpDelNotify == NO)))
\r
2398 if(Notify != YES_ALL)
\r
2400 DelInfo.Cur = Cur;
\r
2401 DelInfo.Pkt = Pkt;
\r
2402 hWnd = Pkt->hWndTrans;
\r
2404 hWnd = GetMainHwnd();
\r
2405 Notify = DialogBoxParam(GetFtpInst(), MAKEINTRESOURCE(delete_dlg), hWnd, MirrorDeleteDialogCallBack, (LPARAM)&DelInfo);
\r
2411 /*-----
\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
2414 * HWND hDlg :
\83E
\83C
\83\93\83h
\83E
\83n
\83\93\83h
\83\8b\r
2415 * UINT message :
\83\81\83b
\83Z
\81[
\83W
\94Ô
\8d\86\r
2416 * WPARAM wParam :
\83\81\83b
\83Z
\81[
\83W
\82Ì WPARAM
\88ø
\90\94\r
2417 * LPARAM lParam :
\83\81\83b
\83Z
\81[
\83W
\82Ì LPARAM
\88ø
\90\94\r
2421 *----------------------------------------------------------------------------*/
\r
2423 static BOOL CALLBACK MirrorDeleteDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)
\r
2425 static MIRRORDELETEINFO *DelInfo;
\r
2428 case WM_INITDIALOG :
\r
2429 DelInfo = (MIRRORDELETEINFO *)lParam;
\r
2431 if(DelInfo->Cur == WIN_LOCAL)
\r
2433 SendMessage(hDlg, WM_SETTEXT, 0, (LPARAM)MSGJPN124);
\r
2434 SendDlgItemMessage(hDlg, DELETE_TEXT, WM_SETTEXT, 0, (LPARAM)DelInfo->Pkt->LocalFile);
\r
2438 SendMessage(hDlg, WM_SETTEXT, 0, (LPARAM)MSGJPN125);
\r
2439 SendDlgItemMessage(hDlg, DELETE_TEXT, WM_SETTEXT, 0, (LPARAM)DelInfo->Pkt->RemoteFile);
\r
2444 switch(GET_WM_COMMAND_ID(wParam, lParam))
\r
2447 EndDialog(hDlg, YES);
\r
2451 EndDialog(hDlg, NO);
\r
2455 EndDialog(hDlg, YES_ALL);
\r
2460 EndDialog(hDlg, NO_ALL);
\r
2472 static void SetErrorMsg(char *fmt, ...)
\r
2476 if(strlen(ErrMsg) == 0)
\r
2478 va_start(Args, fmt);
\r
2479 wvsprintf(ErrMsg, fmt, Args);
\r
2490 /*-----
\83_
\83E
\83\93\83\8d\81[
\83h
\8e\9e\82Ì
\95s
\90³
\82È
\83p
\83X
\82ð
\83`
\83F
\83b
\83N ----------------------------------
\r
2493 * TRANSPACKET *packet :
\83_
\83E
\83\93\83\8d\81[
\83h
\8fî
\95ñ
\r
2496 * int YES=
\95s
\90³
\82È
\83p
\83X/NO=
\96â
\91è
\82È
\82¢
\83p
\83X
\r
2497 *----------------------------------------------------------------------------*/
\r
2498 int CheckPathViolation(TRANSPACKET *packet)
\r
2503 if((strncmp(packet->RemoteFile, "..\\", 3) == 0) ||
\r
2504 (strncmp(packet->RemoteFile, "../", 3) == 0) ||
\r
2505 (strstr(packet->RemoteFile, "\\..\\") != NULL) ||
\r
2506 (strstr(packet->RemoteFile, "/../") != NULL))
\r
2508 msg = malloc(strlen(MSGJPN297) + strlen(packet->RemoteFile) + 1);
\r
2511 sprintf(msg, MSGJPN297, packet->RemoteFile);
\r
2512 MessageBox(GetMainHwnd(), msg, MSGJPN086, MB_OK);
\r