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 (63 * 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 if(CreateMode == OPEN_ALWAYS)
\r
1182 SetFilePointer(iFileHandle, 0, 0, FILE_END);
\r
1184 if(Pkt->hWndTrans != NULL)
\r
1186 TimeStart = time(NULL);
\r
1187 SetTimer(Pkt->hWndTrans, TIMER_DISPLAY, DISPLAY_TIMING, NULL);
\r
1190 InitCodeConvInfo(&cInfo);
\r
1191 cInfo.KanaCnv = Pkt->KanaCnv;
\r
1193 /*=====
\83t
\83@
\83C
\83\8b\82ð
\8eó
\90M
\82·
\82é
\83\8b\81[
\83v =====*/
\r
1194 while((Pkt->Abort == ABORT_NONE) && (ForceAbort == NO))
\r
1196 // FD_ZERO(&ReadFds);
\r
1197 // FD_SET(dSkt, &ReadFds);
\r
1198 // ToutPtr = NULL;
\r
1199 // if(TimeOut != 0)
\r
1201 // Tout.tv_sec = TimeOut;
\r
1202 // Tout.tv_usec = 0;
\r
1203 // ToutPtr = &Tout;
\r
1205 // iNumBytes = select(0, &ReadFds, NULL, NULL, ToutPtr);
\r
1206 // if(iNumBytes == SOCKET_ERROR)
\r
1208 // ReportWSError("select", WSAGetLastError());
\r
1209 // if(Pkt->Abort == ABORT_NONE)
\r
1210 // Pkt->Abort = ABORT_ERROR;
\r
1213 // else if(iNumBytes == 0)
\r
1215 // SetErrorMsg(MSGJPN094);
\r
1216 // SetTaskMsg(MSGJPN094);
\r
1217 // Pkt->Abort = ABORT_ERROR;
\r
1221 if((iNumBytes = do_recv(dSkt, Buf, BUFSIZE, 0, &TimeOutErr, CancelCheckWork)) <= 0)
\r
1223 if(TimeOutErr == YES)
\r
1225 SetErrorMsg(MSGJPN094);
\r
1226 SetTaskMsg(MSGJPN094);
\r
1227 if(Pkt->hWndTrans != NULL)
\r
1229 if(Pkt->Abort == ABORT_NONE)
\r
1230 Pkt->Abort = ABORT_ERROR;
\r
1232 else if(iNumBytes == SOCKET_ERROR)
\r
1234 if(Pkt->Abort == ABORT_NONE)
\r
1235 Pkt->Abort = ABORT_ERROR;
\r
1240 /*
\8a¿
\8e\9a\83R
\81[
\83h
\95Ï
\8a· */
\r
1241 if(Pkt->KanjiCode != KANJI_NOCNV)
\r
1244 cInfo.StrLen = iNumBytes;
\r
1246 cInfo.BufSize = BUFSIZE+3;
\r
1249 if(Pkt->KanjiCode == KANJI_JIS)
\r
1250 Continue = ConvJIStoSJIS(&cInfo);
\r
1252 Continue = ConvEUCtoSJIS(&cInfo);
\r
1253 if(WriteFile(iFileHandle, Buf2, cInfo.OutLen, &Writed, NULL) == FALSE)
\r
1254 Pkt->Abort = ABORT_DISKFULL;
\r
1256 while((Continue == YES) && (Pkt->Abort == ABORT_NONE));
\r
1260 if(WriteFile(iFileHandle, Buf, iNumBytes, &Writed, NULL) == FALSE)
\r
1261 Pkt->Abort = ABORT_DISKFULL;
\r
1264 Pkt->ExistSize += iNumBytes;
\r
1265 if(Pkt->hWndTrans != NULL)
\r
1266 AllTransSizeNow += iNumBytes;
\r
1269 /*
\93]
\91\97\83_
\83C
\83A
\83\8d\83O
\82ð
\8fo
\82³
\82È
\82¢
\8e\9e\82Ì
\8co
\89ß
\95\
\8e¦ */
\r
1270 DispDownloadSize(Pkt->ExistSize);
\r
1273 if(BackgrndMessageProc() == YES)
\r
1277 /*
\8f\91\82«
\8ec
\82µ
\82½
\83f
\81[
\83^
\82ð
\8f\91\82«
\8d\9e\82Þ */
\r
1278 if(Pkt->KanjiCode != KANJI_NOCNV)
\r
1281 cInfo.BufSize = BUFSIZE+3;
\r
1282 FlushRestData(&cInfo);
\r
1283 if(WriteFile(iFileHandle, Buf2, cInfo.OutLen, &Writed, NULL) == FALSE)
\r
1284 Pkt->Abort = ABORT_DISKFULL;
\r
1287 /*
\83O
\83\89\83t
\95\
\8e¦
\82ð
\8dX
\90V */
\r
1288 if(Pkt->hWndTrans != NULL)
\r
1290 KillTimer(Pkt->hWndTrans, TIMER_DISPLAY);
\r
1291 DispTransferStatus(Pkt->hWndTrans, YES, Pkt);
\r
1292 TimeStart = time(NULL) - TimeStart + 1;
\r
1296 /*
\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
1297 DispDownloadSize(-1);
\r
1300 /*
\83t
\83@
\83C
\83\8b\82Ì
\83^
\83C
\83\80\83X
\83^
\83\93\83v
\82ð
\8d\87\82í
\82¹
\82é */
\r
1301 if((SaveTimeStamp == YES) &&
\r
1302 ((Pkt->Time.dwLowDateTime != 0) || (Pkt->Time.dwHighDateTime != 0)))
\r
1304 SetFileTime(iFileHandle, &Pkt->Time, &Pkt->Time, &Pkt->Time);
\r
1307 CloseHandle(iFileHandle);
\r
1309 if(iNumBytes == SOCKET_ERROR)
\r
1310 ReportWSError("recv",WSAGetLastError());
\r
1314 SetErrorMsg(MSGJPN095, Pkt->LocalFile);
\r
1315 SetTaskMsg(MSGJPN095, Pkt->LocalFile);
\r
1316 Pkt->Abort = ABORT_ERROR;
\r
1320 if(shutdown(dSkt, 1) != 0)
\r
1321 ReportWSError("shutdown", WSAGetLastError());
\r
1325 if(ForceAbort == NO)
\r
1327 /* Abort
\82ð
\83z
\83X
\83g
\82É
\93`
\82¦
\82é */
\r
1328 if(Pkt->Abort != ABORT_NONE && iFileHandle != INVALID_HANDLE_VALUE)
\r
1330 SendData(Pkt->ctrl_skt, "\xFF\xF4\xFF", 3, MSG_OOB, CancelCheckWork); /* MSG_OOB
\82É
\92\8d\88Ó */
\r
1331 SendData(Pkt->ctrl_skt, "\xF2", 1, 0, CancelCheckWork);
\r
1332 command(Pkt->ctrl_skt, NULL, CancelCheckWork, "ABOR");
\r
1336 iRetCode = ReadReplyMessage(Pkt->ctrl_skt, Buf, 1024, CancelCheckWork, TmpBuf);
\r
1339 //DoPrintf("##DOWN REPLY : %s", Buf);
\r
1341 if(Pkt->Abort == ABORT_DISKFULL)
\r
1343 SetErrorMsg(MSGJPN096);
\r
1344 SetTaskMsg(MSGJPN096);
\r
1346 if(iRetCode >= FTP_RETRY)
\r
1348 if(Pkt->Abort != ABORT_NONE)
\r
1355 /*-----
\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
1358 * TRANSPACKET *Pkt :
\93]
\91\97\83t
\83@
\83C
\83\8b\8fî
\95ñ
\r
1359 * int iRetCode :
\89\9e\93\9a\83R
\81[
\83h
\r
1363 *----------------------------------------------------------------------------*/
\r
1365 static void DispDownloadFinishMsg(TRANSPACKET *Pkt, int iRetCode)
\r
1367 char Fname[FMAX_PATH+1];
\r
1369 if(ForceAbort == NO)
\r
1371 if((iRetCode/100) >= FTP_CONTINUE)
\r
1373 strcpy(Fname, Pkt->RemoteFile);
\r
1375 #if defined(HAVE_OPENVMS)
\r
1376 /* 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
1377 *
\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
1378 if (AskHostType() == HTYPE_VMS)
\r
1382 if((strncmp(Pkt->Cmd, "NLST", 4) == 0) || (strncmp(Pkt->Cmd, "LIST", 4) == 0))
\r
1384 SetTaskMsg(MSGJPN097);
\r
1385 strcpy(Fname, MSGJPN098);
\r
1387 else if((Pkt->hWndTrans != NULL) && (TimeStart != 0))
\r
1388 SetTaskMsg(MSGJPN099, TimeStart, Pkt->ExistSize/TimeStart);
\r
1390 SetTaskMsg(MSGJPN100);
\r
1392 if(Pkt->Abort != ABORT_USER)
\r
1394 if(DispUpDownErrDialog(downerr_dlg, Pkt->hWndTrans, Fname) == NO)
\r
1400 if((strncmp(Pkt->Cmd, "NLST", 4) == 0) || (strncmp(Pkt->Cmd, "LIST", 4) == 0))
\r
1401 SetTaskMsg(MSGJPN101, Pkt->ExistSize);
\r
1402 else if((Pkt->hWndTrans != NULL) && (TimeStart != 0))
\r
1403 SetTaskMsg(MSGJPN102, TimeStart, Pkt->ExistSize/TimeStart);
\r
1405 SetTaskMsg(MSGJPN103, Pkt->ExistSize);
\r
1412 /*-----
\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
1415 * int RedID :
\83_
\83C
\83A
\83\8d\83O
\83{
\83b
\83N
\83X
\82Ì
\83\8a\83\
\81[
\83XID
\r
1416 * HWND hWnd :
\8f\91\82«
\8d\9e\82Ý
\92\86\83_
\83C
\83A
\83\8d\83O
\82Ì
\83E
\83C
\83\93\83h
\83E
\r
1417 * char *Fname :
\83t
\83@
\83C
\83\8b\96¼
\r
1420 * int
\83X
\83e
\81[
\83^
\83X (YES=
\92\86\8e~/NO=
\91S
\82Ä
\92\86\8e~)
\r
1421 *----------------------------------------------------------------------------*/
\r
1423 static int DispUpDownErrDialog(int ResID, HWND hWnd, char *Fname)
\r
1426 hWnd = GetMainHwnd();
\r
1428 SoundPlay(SND_ERROR);
\r
1429 return(DialogBoxParam(GetFtpInst(), MAKEINTRESOURCE(ResID), hWnd, UpDownErrorDialogProc, (LPARAM)Fname));
\r
1433 /*-----
\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
1436 * HWND hDlg :
\83E
\83C
\83\93\83h
\83E
\83n
\83\93\83h
\83\8b\r
1437 * UINT message :
\83\81\83b
\83Z
\81[
\83W
\94Ô
\8d\86\r
1438 * WPARAM wParam :
\83\81\83b
\83Z
\81[
\83W
\82Ì WPARAM
\88ø
\90\94\r
1439 * LPARAM lParam :
\83\81\83b
\83Z
\81[
\83W
\82Ì LPARAM
\88ø
\90\94\r
1443 *----------------------------------------------------------------------------*/
\r
1445 static BOOL CALLBACK UpDownErrorDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
\r
1449 case WM_INITDIALOG :
\r
1450 SendDlgItemMessage(hDlg, UPDOWN_ERR_FNAME, WM_SETTEXT, 0, (LPARAM)lParam);
\r
1451 SendDlgItemMessage(hDlg, UPDOWN_ERR_MSG, WM_SETTEXT, 0, (LPARAM)ErrMsg);
\r
1455 switch(GET_WM_COMMAND_ID(wParam, lParam))
\r
1458 EndDialog(hDlg, YES);
\r
1462 EndDialog(hDlg, NO);
\r
1471 /*-----
\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
1474 * TRANSPACKET *Pkt :
\93]
\91\97\83t
\83@
\83C
\83\8b\8fî
\95ñ
\r
1475 * iont ProcMode :
\8f\88\97\9d\83\82\81[
\83h(EXIST_xxx)
\r
1476 * LONGLONG Size :
\83\8d\81[
\83h
\8dÏ
\82Ý
\82Ì
\83t
\83@
\83C
\83\8b\82Ì
\83T
\83C
\83Y
\r
1477 * int *Mode :
\83t
\83@
\83C
\83\8b\8dì
\90¬
\83\82\81[
\83h (CREATE_xxxx)
\r
1480 * 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
1483 * Pkt->ExistSize
\82Ì
\83Z
\83b
\83g
\82ð
\8ds
\82È
\82¤
\r
1484 *----------------------------------------------------------------------------*/
\r
1486 static int SetDownloadResume(TRANSPACKET *Pkt, int ProcMode, LONGLONG Size, int *Mode, int *CancelCheckWork)
\r
1490 char Reply[ERR_MSG_LEN+7];
\r
1495 Pkt->ExistSize = 0;
\r
1496 *Mode = CREATE_ALWAYS;
\r
1498 if(ProcMode == EXIST_RESUME)
\r
1500 iRetCode = command(Pkt->ctrl_skt, Reply, CancelCheckWork, "REST %s", MakeNumString(Size, Tmp, FALSE));
\r
1501 if(iRetCode/100 < FTP_RETRY)
\r
1503 /*
\83\8a\83W
\83\85\81[
\83\80 */
\r
1504 if(Pkt->hWndTrans != NULL)
\r
1505 Pkt->ExistSize = Size;
\r
1506 *Mode = OPEN_ALWAYS;
\r
1510 Com = DialogBox(GetFtpInst(), MAKEINTRESOURCE(noresume_dlg), Pkt->hWndTrans, NoResumeWndProc);
\r
1513 if(Com == NO_ALL) /*
\91S
\82Ä
\92\86\8e~ */
\r
1515 Pkt->Abort = ABORT_USER;
\r
1523 /*----- resume
\83G
\83\89\81[
\83_
\83C
\83A
\83\8d\83O
\82Ì
\83R
\81[
\83\8b\83o
\83b
\83N ----------------------------------
\r
1526 * HWND hDlg :
\83E
\83C
\83\93\83h
\83E
\83n
\83\93\83h
\83\8b\r
1527 * UINT message :
\83\81\83b
\83Z
\81[
\83W
\94Ô
\8d\86\r
1528 * WPARAM wParam :
\83\81\83b
\83Z
\81[
\83W
\82Ì WPARAM
\88ø
\90\94\r
1529 * LPARAM lParam :
\83\81\83b
\83Z
\81[
\83W
\82Ì LPARAM
\88ø
\90\94\r
1533 *----------------------------------------------------------------------------*/
\r
1535 static BOOL CALLBACK NoResumeWndProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)
\r
1539 case WM_INITDIALOG :
\r
1543 switch(GET_WM_COMMAND_ID(wParam, lParam))
\r
1546 EndDialog(hDlg, YES);
\r
1550 EndDialog(hDlg, NO);
\r
1553 case RESUME_CANCEL_ALL :
\r
1554 EndDialog(hDlg, NO_ALL);
\r
1564 /*-----
\83A
\83b
\83v
\83\8d\81[
\83h
\82ð
\8ds
\82È
\82¤ --------------------------------------------------
\r
1567 * SOCKET cSkt :
\83R
\83\93\83g
\83\8d\81[
\83\8b\83\
\83P
\83b
\83g
\r
1568 * TRANSPACKET *Pkt :
\93]
\91\97\83t
\83@
\83C
\83\8b\8fî
\95ñ
\r
1571 * int
\89\9e\93\9a\83R
\81[
\83h
\r
1572 *----------------------------------------------------------------------------*/
\r
1574 static int DoUpLoad(SOCKET cSkt, TRANSPACKET *Pkt)
\r
1577 char Reply[ERR_MSG_LEN+7];
\r
1579 Pkt->ctrl_skt = cSkt;
\r
1581 if(Pkt->Mode != EXIST_IGNORE)
\r
1583 if(CheckFileReadable(Pkt->LocalFile) == SUCCESS)
\r
1585 if(Pkt->Type == TYPE_I)
\r
1586 Pkt->KanjiCode = KANJI_NOCNV;
\r
1588 iRetCode = command(Pkt->ctrl_skt, Reply, &Canceled, "TYPE %c", Pkt->Type);
\r
1589 if(iRetCode/100 < FTP_RETRY)
\r
1591 if(Pkt->Mode == EXIST_UNIQUE)
\r
1592 strcpy(Pkt->Cmd, "STOU ");
\r
1594 if(Pkt->hWndTrans != NULL)
\r
1595 DispTransFileInfo(Pkt, MSGJPN104, TRUE, YES);
\r
1597 if(BackgrndMessageProc() == NO)
\r
1599 if(AskPasvMode() != YES)
\r
1600 iRetCode = UpLoadNonPassive(Pkt);
\r
1602 iRetCode = UpLoadPassive(Pkt);
\r
1608 SetErrorMsg(Reply);
\r
1610 /*
\91®
\90«
\95Ï
\8dX */
\r
1611 if((Pkt->Attr != -1) && ((iRetCode/100) == FTP_COMPLETE))
\r
1612 command(Pkt->ctrl_skt, Reply, &Canceled, "%s %03X %s", AskHostChmodCmd(), Pkt->Attr, Pkt->RemoteFile);
\r
1616 SetErrorMsg(MSGJPN105, Pkt->LocalFile);
\r
1617 SetTaskMsg(MSGJPN105, Pkt->LocalFile);
\r
1619 Pkt->Abort = ABORT_ERROR;
\r
1620 DispUploadFinishMsg(Pkt, iRetCode);
\r
1625 DispTransFileInfo(Pkt, MSGJPN106, TRUE, YES);
\r
1626 SetTaskMsg(MSGJPN107, Pkt->LocalFile);
\r
1633 /*-----
\92Ê
\8fí
\83\82\81[
\83h
\82Å
\83t
\83@
\83C
\83\8b\82ð
\83A
\83b
\83v
\83\8d\81[
\83h ------------------------------------
\r
1636 * TRANSPACKET *Pkt :
\93]
\91\97\83t
\83@
\83C
\83\8b\8fî
\95ñ
\r
1639 * int
\89\9e\93\9a\83R
\81[
\83h
\r
1640 *----------------------------------------------------------------------------*/
\r
1642 static int UpLoadNonPassive(TRANSPACKET *Pkt)
\r
1646 SOCKET data_socket = INVALID_SOCKET; // data channel socket
\r
1647 SOCKET listen_socket = INVALID_SOCKET; // data listen socket
\r
1649 struct sockaddr_in saSockAddr1;
\r
1651 char Reply[ERR_MSG_LEN+7];
\r
1653 if((listen_socket = GetFTPListenSocket(Pkt->ctrl_skt, &Canceled)) != INVALID_SOCKET)
\r
1655 SetUploadResume(Pkt, Pkt->Mode, Pkt->ExistSize, &Resume);
\r
1657 sprintf(Buf, "%s%s", Pkt->Cmd, Pkt->RemoteFile);
\r
1659 sprintf(Buf, "%s%s", "APPE ", Pkt->RemoteFile);
\r
1661 iRetCode = command(Pkt->ctrl_skt, Reply, &Canceled, "%s", Buf);
\r
1662 if((iRetCode/100) == FTP_PRELIM)
\r
1664 if(SocksGet2ndBindReply(listen_socket, &data_socket) == FAIL)
\r
1666 iLength=sizeof(saSockAddr1);
\r
1667 data_socket = do_accept(listen_socket,(struct sockaddr *)&saSockAddr1, (int *)&iLength);
\r
1669 if(shutdown(listen_socket, 1) != 0)
\r
1670 ReportWSError("shutdown listen", WSAGetLastError());
\r
1671 listen_socket = DoClose(listen_socket);
\r
1673 if(data_socket == INVALID_SOCKET)
\r
1675 SetErrorMsg(MSGJPN280);
\r
1676 ReportWSError("accept", WSAGetLastError());
\r
1680 DoPrintf("Skt=%u : accept from %s port %u", data_socket, inet_ntoa(saSockAddr1.sin_addr), ntohs(saSockAddr1.sin_port));
\r
1683 if(data_socket != INVALID_SOCKET)
\r
1685 iRetCode = UpLoadFile(Pkt, data_socket);
\r
1686 data_socket = DoClose(data_socket);
\r
1691 SetErrorMsg(Reply);
\r
1692 SetTaskMsg(MSGJPN108);
\r
1693 listen_socket = DoClose(listen_socket);
\r
1699 SetErrorMsg(MSGJPN279);
\r
1702 DispUploadFinishMsg(Pkt, iRetCode);
\r
1708 /*----- Passive
\83\82\81[
\83h
\82Å
\83t
\83@
\83C
\83\8b\82ð
\83A
\83b
\83v
\83\8d\81[
\83h ---------------------------------
\r
1711 * TRANSPACKET *Pkt :
\93]
\91\97\83t
\83@
\83C
\83\8b\8fî
\95ñ
\r
1714 * int
\89\9e\93\9a\83R
\81[
\83h
\r
1715 *----------------------------------------------------------------------------*/
\r
1717 static int UpLoadPassive(TRANSPACKET *Pkt)
\r
1720 SOCKET data_socket = INVALID_SOCKET; // data channel socket
\r
1726 char Reply[ERR_MSG_LEN+7];
\r
1728 iRetCode = command(Pkt->ctrl_skt, Buf, &Canceled, "PASV");
\r
1729 if(iRetCode/100 == FTP_COMPLETE)
\r
1731 if(GetAdrsAndPort(Buf, Adrs, &Port, 19) == SUCCESS)
\r
1733 if((data_socket = connectsock(Adrs, Port, MSGJPN109, &Canceled)) != INVALID_SOCKET)
\r
1735 if(setsockopt(data_socket, IPPROTO_TCP, TCP_NODELAY, (LPSTR)&Flg, sizeof(Flg)) == SOCKET_ERROR)
\r
1736 ReportWSError("setsockopt", WSAGetLastError());
\r
1738 SetUploadResume(Pkt, Pkt->Mode, Pkt->ExistSize, &Resume);
\r
1740 sprintf(Buf, "%s%s", Pkt->Cmd, Pkt->RemoteFile);
\r
1742 sprintf(Buf, "%s%s", "APPE ", Pkt->RemoteFile);
\r
1744 iRetCode = command(Pkt->ctrl_skt, Reply, &Canceled, "%s", Buf);
\r
1745 if(iRetCode/100 == FTP_PRELIM)
\r
1747 iRetCode = UpLoadFile(Pkt, data_socket);
\r
1749 data_socket = DoClose(data_socket);
\r
1753 SetErrorMsg(Reply);
\r
1754 SetTaskMsg(MSGJPN110);
\r
1755 data_socket = DoClose(data_socket);
\r
1761 SetErrorMsg(MSGJPN281);
\r
1768 SetTaskMsg(MSGJPN111);
\r
1775 DispUploadFinishMsg(Pkt, iRetCode);
\r
1781 /*-----
\83A
\83b
\83v
\83\8d\81[
\83h
\82Ì
\8eÀ
\8ds ----------------------------------------------------
\r
1784 * TRANSPACKET *Pkt :
\93]
\91\97\83t
\83@
\83C
\83\8b\8fî
\95ñ
\r
1785 * SOCKET dSkt :
\83f
\81[
\83^
\83\
\83P
\83b
\83g
\r
1788 * int
\89\9e\93\9a\83R
\81[
\83h
\r
1791 *
\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
1792 *
\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
1793 *----------------------------------------------------------------------------*/
\r
1795 static int UpLoadFile(TRANSPACKET *Pkt, SOCKET dSkt)
\r
1798 HANDLE iFileHandle;
\r
1799 SECURITY_ATTRIBUTES Sec;
\r
1800 char Buf[BUFSIZE];
\r
1801 char Buf2[BUFSIZE+3];
\r
1802 CODECONVINFO cInfo;
\r
1803 TERMCODECONVINFO tInfo;
\r
1810 char TmpBuf[ONELINE_BUF_SIZE];
\r
1814 #ifdef SET_BUFFER_SIZE
\r
1815 /* Add by H.Shirouzu at 2002/10/02 */
\r
1816 int buf_size = SOCKBUF_SIZE;
\r
1817 for ( ; buf_size > 0; buf_size /= 2)
\r
1818 if (setsockopt(dSkt, SOL_SOCKET, SO_SNDBUF, (char *)&buf_size, sizeof(buf_size)) == 0)
\r
1823 // Written by Suguru Kawamoto
\r
1824 #ifdef DISABLE_NETWORK_BUFFERS
\r
1825 //
\94O
\82Ì
\82½
\82ß
\91\97\90M
\83o
\83b
\83t
\83@
\82ð
\96³
\8cø
\82É
\82·
\82é
\81B
\r
1827 setsockopt(dSkt, SOL_SOCKET, SO_SNDBUF, (char *)&buf_size, sizeof(buf_size));
\r
1829 // End Written by Suguru Kawamoto
\r
1831 Pkt->Abort = ABORT_NONE;
\r
1833 Sec.nLength = sizeof(SECURITY_ATTRIBUTES);
\r
1834 Sec.lpSecurityDescriptor = NULL;
\r
1835 Sec.bInheritHandle = FALSE;
\r
1837 if((iFileHandle = CreateFile(Pkt->LocalFile, GENERIC_READ,
\r
1838 FILE_SHARE_READ|FILE_SHARE_WRITE, &Sec, OPEN_EXISTING, 0, NULL)) != INVALID_HANDLE_VALUE)
\r
1840 if(Pkt->hWndTrans != NULL)
\r
1842 Low = GetFileSize(iFileHandle, &High);
\r
1843 Pkt->Size = MakeLongLong(High, Low);
\r
1845 High = (DWORD)HIGH32(Pkt->ExistSize);
\r
1846 Low = (DWORD)LOW32(Pkt->ExistSize);
\r
1847 SetFilePointer(iFileHandle, Low, &High, FILE_BEGIN);
\r
1849 AllTransSizeNow = 0;
\r
1850 TimeStart = time(NULL);
\r
1851 SetTimer(Pkt->hWndTrans, TIMER_DISPLAY, DISPLAY_TIMING, NULL);
\r
1854 InitCodeConvInfo(&cInfo);
\r
1855 cInfo.KanaCnv = Pkt->KanaCnv;
\r
1856 InitTermCodeConvInfo(&tInfo);
\r
1858 /*=====
\83t
\83@
\83C
\83\8b\82ð
\91\97\90M
\82·
\82é
\83\8b\81[
\83v =====*/
\r
1859 while((Pkt->Abort == ABORT_NONE) &&
\r
1860 (ForceAbort == NO) &&
\r
1861 (ReadFile(iFileHandle, Buf, BUFSIZE, &iNumBytes, NULL) == TRUE))
\r
1863 if(iNumBytes == 0)
\r
1866 /* EOF
\8f\9c\8b\8e */
\r
1868 if((RmEOF == YES) && (Pkt->Type == TYPE_A))
\r
1870 if((EofPos = memchr(Buf, 0x1A, iNumBytes)) != NULL)
\r
1871 iNumBytes = EofPos - Buf;
\r
1874 /*
\8a¿
\8e\9a\83R
\81[
\83h
\95Ï
\8a· */
\r
1875 if(Pkt->KanjiCode != KANJI_NOCNV)
\r
1878 cInfo.StrLen = iNumBytes;
\r
1880 cInfo.BufSize = BUFSIZE+3;
\r
1883 if(Pkt->KanjiCode == KANJI_JIS)
\r
1884 Continue = ConvSJIStoJIS(&cInfo);
\r
1886 Continue = ConvSJIStoEUC(&cInfo);
\r
1888 if(TermCodeConvAndSend(&tInfo, dSkt, Buf2, cInfo.OutLen, Pkt->Type) == FAIL)
\r
1890 Pkt->Abort = ABORT_ERROR;
\r
1894 while(Continue == YES);
\r
1898 if(TermCodeConvAndSend(&tInfo, dSkt, Buf, iNumBytes, Pkt->Type) == FAIL)
\r
1899 Pkt->Abort = ABORT_ERROR;
\r
1902 Pkt->ExistSize += iNumBytes;
\r
1903 if(Pkt->hWndTrans != NULL)
\r
1904 AllTransSizeNow += iNumBytes;
\r
1906 if(BackgrndMessageProc() == YES)
\r
1909 if(EofPos != NULL)
\r
1913 if((ForceAbort == NO) && (Pkt->Abort == ABORT_NONE))
\r
1915 /*
\91\97\82è
\8ec
\82µ
\82½
\83f
\81[
\83^
\82ð
\91\97\90M */
\r
1916 if(Pkt->KanjiCode != KANJI_NOCNV)
\r
1919 cInfo.BufSize = BUFSIZE+3;
\r
1920 FlushRestData(&cInfo);
\r
1922 if(TermCodeConvAndSend(&tInfo, dSkt, Buf2, cInfo.OutLen, Pkt->Type) == FAIL)
\r
1923 Pkt->Abort = ABORT_ERROR;
\r
1927 tInfo.BufSize = BUFSIZE+3;
\r
1928 FlushRestTermCodeConvData(&tInfo);
\r
1929 if(SendData(dSkt, Buf2, tInfo.OutLen, 0, &Canceled) == FAIL)
\r
1930 Pkt->Abort = ABORT_ERROR;
\r
1933 /*
\83O
\83\89\83t
\95\
\8e¦
\82ð
\8dX
\90V */
\r
1934 if(Pkt->hWndTrans != NULL)
\r
1936 KillTimer(Pkt->hWndTrans, TIMER_DISPLAY);
\r
1937 DispTransferStatus(Pkt->hWndTrans, YES, Pkt);
\r
1938 TimeStart = time(NULL) - TimeStart + 1;
\r
1940 CloseHandle(iFileHandle);
\r
1944 SetErrorMsg(MSGJPN112, Pkt->LocalFile);
\r
1945 SetTaskMsg(MSGJPN112, Pkt->LocalFile);
\r
1946 Pkt->Abort = ABORT_ERROR;
\r
1949 if(shutdown(dSkt, 1) != 0)
\r
1950 ReportWSError("shutdown", WSAGetLastError());
\r
1954 while(do_recv(dSkt, Buf, BUFSIZE, 0, &TimeOutErr, &Canceled) > 0)
\r
1958 iRetCode = ReadReplyMessage(Pkt->ctrl_skt, Buf, 1024, &Canceled, TmpBuf);
\r
1961 //DoPrintf("##UP REPLY : %s", Buf);
\r
1963 if(iRetCode >= FTP_RETRY)
\r
1966 if(Pkt->Abort != ABORT_NONE)
\r
1973 /*-----
\83o
\83b
\83t
\83@
\82Ì
\93à
\97e
\82ð
\89ü
\8ds
\83R
\81[
\83h
\95Ï
\8a·
\82µ
\82Ä
\91\97\90M --------------------------------
\r
1976 * TERMCODECONVINFO *tInfo :
\89ü
\8ds
\83R
\81[
\83h
\95Ï
\8a·
\83p
\83P
\83b
\83g
\r
1977 * SOCKET Skt :
\83\
\83P
\83b
\83g
\r
1978 * char *Data :
\83f
\81[
\83^
\r
1979 * int Size :
\83f
\81[
\83^
\82Ì
\83T
\83C
\83Y
\r
1980 * int Ascii :
\83\82\81[
\83h
\81@
\81@(TYPE_xx)
\r
1983 * int
\89\9e\93\9a\83R
\81[
\83h
\r
1984 *----------------------------------------------------------------------------*/
\r
1986 static int TermCodeConvAndSend(TERMCODECONVINFO *tInfo, SOCKET Skt, char *Data, int Size, int Ascii)
\r
1988 char Buf3[BUFSIZE*2];
\r
1994 // 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
1995 if(Ascii == TYPE_A)
\r
1997 tInfo->Str = Data;
\r
1998 tInfo->StrLen = Size;
\r
1999 tInfo->Buf = Buf3;
\r
2000 tInfo->BufSize = BUFSIZE*2;
\r
2003 Continue = ConvTermCodeToCRLF(tInfo);
\r
2004 if((Ret = SendData(Skt, Buf3, tInfo->OutLen, 0, &Canceled)) == FAIL)
\r
2007 while(Continue == YES);
\r
2010 Ret = SendData(Skt, Data, Size, 0, &Canceled);
\r
2016 /*-----
\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
2019 * TRANSPACKET *Pkt :
\93]
\91\97\83t
\83@
\83C
\83\8b\8fî
\95ñ
\r
2020 * int iRetCode :
\89\9e\93\9a\83R
\81[
\83h
\r
2024 *----------------------------------------------------------------------------*/
\r
2026 static void DispUploadFinishMsg(TRANSPACKET *Pkt, int iRetCode)
\r
2028 if(ForceAbort == NO)
\r
2030 if((iRetCode/100) >= FTP_CONTINUE)
\r
2032 if((Pkt->hWndTrans != NULL) && (TimeStart != 0))
\r
2033 SetTaskMsg(MSGJPN113, TimeStart, Pkt->ExistSize/TimeStart);
\r
2035 SetTaskMsg(MSGJPN114);
\r
2037 if(Pkt->Abort != ABORT_USER)
\r
2039 if(DispUpDownErrDialog(uperr_dlg, Pkt->hWndTrans, Pkt->LocalFile) == NO)
\r
2045 if((Pkt->hWndTrans != NULL) && (TimeStart != 0))
\r
2046 SetTaskMsg(MSGJPN115, TimeStart, Pkt->ExistSize/TimeStart);
\r
2048 SetTaskMsg(MSGJPN116);
\r
2055 /*-----
\83A
\83b
\83v
\83\8d\81[
\83h
\82Ì
\83\8a\83W
\83\85\81[
\83\80\82Ì
\8f\80\94õ
\82ð
\8ds
\82¤ ----------------------------------
\r
2058 * TRANSPACKET *Pkt :
\93]
\91\97\83t
\83@
\83C
\83\8b\8fî
\95ñ
\r
2059 * iont ProcMode :
\8f\88\97\9d\83\82\81[
\83h(EXIST_xxx)
\r
2060 * LONGLONG Size :
\83z
\83X
\83g
\82É
\82 \82é
\83t
\83@
\83C
\83\8b\82Ì
\83T
\83C
\83Y
\r
2061 * int *Mode :
\83\8a\83W
\83\85\81[
\83\80\82ð
\8ds
\82¤
\82©
\82Ç
\82¤
\82© (YES/NO)
\r
2064 * int
\83X
\83e
\81[
\83^
\83X = YES
\r
2067 * Pkt->ExistSize
\82Ì
\83Z
\83b
\83g
\82ð
\8ds
\82È
\82¤
\r
2068 *----------------------------------------------------------------------------*/
\r
2070 static int SetUploadResume(TRANSPACKET *Pkt, int ProcMode, LONGLONG Size, int *Mode)
\r
2072 Pkt->ExistSize = 0;
\r
2074 if(ProcMode == EXIST_RESUME)
\r
2076 if(Pkt->hWndTrans != NULL)
\r
2078 Pkt->ExistSize = Size;
\r
2086 /*-----
\93]
\91\97\92\86\83_
\83C
\83A
\83\8d\83O
\83{
\83b
\83N
\83X
\82Ì
\83R
\81[
\83\8b\83o
\83b
\83N --------------------------------
\r
2089 * HWND hDlg :
\83E
\83C
\83\93\83h
\83E
\83n
\83\93\83h
\83\8b\r
2090 * UINT message :
\83\81\83b
\83Z
\81[
\83W
\94Ô
\8d\86\r
2091 * WPARAM wParam :
\83\81\83b
\83Z
\81[
\83W
\82Ì WPARAM
\88ø
\90\94\r
2092 * LPARAM lParam :
\83\81\83b
\83Z
\81[
\83W
\82Ì LPARAM
\88ø
\90\94\r
2096 *----------------------------------------------------------------------------*/
\r
2098 static LRESULT CALLBACK TransDlgProc(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam)
\r
2103 static TRANSPACKET *Pkt;
\r
2107 case WM_INITDIALOG :
\r
2108 GetWindowRect(hDlg, &RectDlg);
\r
2109 RectDlg.right -= RectDlg.left;
\r
2110 RectDlg.bottom -= RectDlg.top;
\r
2111 GetWindowRect(GetMainHwnd(), &RectPar);
\r
2113 ((RectPar.right + RectPar.left) / 2) - (RectDlg.right / 2),
\r
2114 ((RectPar.bottom + RectPar.top) / 2) - (RectDlg.bottom / 2),
\r
2119 hMenu = GetSystemMenu(hDlg, FALSE);
\r
2120 EnableMenuItem(hMenu, SC_CLOSE, MF_GRAYED);
\r
2124 switch(LOWORD(wParam))
\r
2126 case TRANS_STOP_NEXT :
\r
2130 case TRANS_STOP_ALL :
\r
2132 /*
\82±
\82±
\82É break
\82Í
\82È
\82¢ */
\r
2135 Pkt->Abort = ABORT_USER;
\r
2142 if(wParam == TIMER_DISPLAY)
\r
2144 if(MoveToForeground == YES)
\r
2145 SetForegroundWindow(hDlg);
\r
2146 MoveToForeground = NO;
\r
2147 KillTimer(hDlg, TIMER_DISPLAY);
\r
2148 DispTransferStatus(hDlg, NO, Pkt);
\r
2149 SetTimer(hDlg, TIMER_DISPLAY, DISPLAY_TIMING, NULL);
\r
2153 case WM_SET_PACKET :
\r
2154 Pkt = (TRANSPACKET *)lParam;
\r
2161 /*-----
\93]
\91\97\83X
\83e
\81[
\83^
\83X
\82ð
\95\
\8e¦ --------------------------------------------------
\r
2164 * HWND hWnd :
\83E
\83C
\83\93\83h
\83E
\83n
\83\93\83h
\83\8b\r
2165 * int End :
\93]
\91\97\82ª
\8a®
\97¹
\82µ
\82½
\82©
\82Ç
\82¤
\82© (YES/NO)
\r
2169 *----------------------------------------------------------------------------*/
\r
2171 static void DispTransferStatus(HWND hWnd, int End, TRANSPACKET *Pkt)
\r
2185 SendMessage(hWnd, WM_GETTEXT, 79, (LPARAM)Str);
\r
2186 if((Pos = strchr(Str, ')')) != NULL)
\r
2190 sprintf(Tmp, "(%d)%s", AskTransferFileNum(), Pos);
\r
2191 SendMessage(hWnd, WM_SETTEXT, 0, (LPARAM)Tmp);
\r
2193 if(Pkt->Abort == ABORT_NONE)
\r
2197 TotalLap = time(NULL) - TimeStart + 1;
\r
2201 Bps = AllTransSizeNow / TotalLap;
\r
2202 Transed = Pkt->Size - Pkt->ExistSize;
\r
2204 if(Pkt->Size <= 0)
\r
2205 sprintf(Tmp, "%d ", Pkt->ExistSize);
\r
2206 else if(Pkt->Size < 1024)
\r
2207 sprintf(Tmp, "%s / %s ", MakeNumString(Pkt->ExistSize, Num1, TRUE), MakeNumString(Pkt->Size, Num2, TRUE));
\r
2209 sprintf(Tmp, "%sk / %sk ", MakeNumString(Pkt->ExistSize/1024, Num1, TRUE), MakeNumString(Pkt->Size/1024, Num2, TRUE));
\r
2213 sprintf(Tmp, "( 0 B/S )");
\r
2214 else if(Bps < 1000)
\r
2215 sprintf(Tmp, "( %s B/S )", MakeNumString(Bps, Num1, TRUE));
\r
2217 sprintf(Tmp, "( %s.%02d KB/S )", MakeNumString(Bps/1000, Num1, TRUE), (int)((Bps%1000)/10));
\r
2220 if((Bps > 0) && (Pkt->Size > 0) && (Transed >= 0))
\r
2222 sprintf(Tmp, " %d:%02d", (int)((Transed/Bps)/60), (int)((Transed/Bps)%60));
\r
2226 strcat(Str, " ??:??");
\r
2229 strcpy(Str, MSGJPN117);
\r
2232 strcpy(Str, MSGJPN118);
\r
2234 SendDlgItemMessage(hWnd, TRANS_STATUS, WM_SETTEXT, 0, (LPARAM)Str);
\r
2236 if(Pkt->Size <= 0)
\r
2238 else if(Pkt->Size < 1024*1024)
\r
2239 Per = (int)(Pkt->ExistSize * 100 / Pkt->Size);
\r
2241 Per = (int)((Pkt->ExistSize/1024) * 100 / (Pkt->Size/1024));
\r
2242 SendDlgItemMessage(hWnd, TRANS_TIME_BAR, PBM_SETPOS, Per, 0);
\r
2248 /*-----
\93]
\91\97\82·
\82é
\83t
\83@
\83C
\83\8b\82Ì
\8fî
\95ñ
\82ð
\95\
\8e¦ ------------------------------------------
\r
2251 * TRANSPACKET *Pkt :
\93]
\91\97\83t
\83@
\83C
\83\8b\8fî
\95ñ
\r
2252 * char *Title :
\83E
\83C
\83\93\83h
\83E
\82Ì
\83^
\83C
\83g
\83\8b\r
2253 * 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
2254 * int Info :
\83t
\83@
\83C
\83\8b\8fî
\95ñ
\82ð
\95\
\8e¦
\82·
\82é
\82©
\82Ç
\82¤
\82© (YES/NO)
\r
2258 *----------------------------------------------------------------------------*/
\r
2260 static void DispTransFileInfo(TRANSPACKET *Pkt, char *Title, int SkipButton, int Info)
\r
2264 if(Pkt->hWndTrans != NULL)
\r
2266 EnableWindow(GetDlgItem(Pkt->hWndTrans, IDCANCEL), SkipButton);
\r
2268 sprintf(Tmp, "(%d)%s", AskTransferFileNum(), Title);
\r
2269 SendMessage(Pkt->hWndTrans, WM_SETTEXT, 0, (LPARAM)Tmp);
\r
2270 SendDlgItemMessage(Pkt->hWndTrans, TRANS_STATUS, WM_SETTEXT, 0, (LPARAM)"");
\r
2272 SendDlgItemMessage(Pkt->hWndTrans, TRANS_TIME_BAR, PBM_SETRANGE, 0, MAKELPARAM(0, 100));
\r
2273 SendDlgItemMessage(Pkt->hWndTrans, TRANS_TIME_BAR, PBM_SETSTEP, 1, 0);
\r
2274 SendDlgItemMessage(Pkt->hWndTrans, TRANS_TIME_BAR, PBM_SETPOS, 0, 0);
\r
2278 DispStaticText(GetDlgItem(Pkt->hWndTrans, TRANS_REMOTE), Pkt->RemoteFile);
\r
2279 DispStaticText(GetDlgItem(Pkt->hWndTrans, TRANS_LOCAL), Pkt->LocalFile);
\r
2281 if(Pkt->Type == TYPE_I)
\r
2282 SendDlgItemMessage(Pkt->hWndTrans, TRANS_MODE, WM_SETTEXT, 0, (LPARAM)MSGJPN119);
\r
2283 else if(Pkt->Type == TYPE_A)
\r
2284 SendDlgItemMessage(Pkt->hWndTrans, TRANS_MODE, WM_SETTEXT, 0, (LPARAM)MSGJPN120);
\r
2286 if(Pkt->KanjiCode == KANJI_NOCNV)
\r
2287 SendDlgItemMessage(Pkt->hWndTrans, TRANS_KANJI, WM_SETTEXT, 0, (LPARAM)MSGJPN121);
\r
2288 else if(Pkt->KanjiCode == KANJI_JIS)
\r
2289 SendDlgItemMessage(Pkt->hWndTrans, TRANS_KANJI, WM_SETTEXT, 0, (LPARAM)MSGJPN122);
\r
2290 else if(Pkt->KanjiCode == KANJI_EUC)
\r
2291 SendDlgItemMessage(Pkt->hWndTrans, TRANS_KANJI, WM_SETTEXT, 0, (LPARAM)MSGJPN123);
\r
2295 SendDlgItemMessage(Pkt->hWndTrans, TRANS_REMOTE, WM_SETTEXT, 0, (LPARAM)"");
\r
2296 SendDlgItemMessage(Pkt->hWndTrans, TRANS_LOCAL, WM_SETTEXT, 0, (LPARAM)"");
\r
2297 SendDlgItemMessage(Pkt->hWndTrans, TRANS_MODE, WM_SETTEXT, 0, (LPARAM)"");
\r
2298 SendDlgItemMessage(Pkt->hWndTrans, TRANS_KANJI, WM_SETTEXT, 0, (LPARAM)"");
\r
2305 /*----- 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
2308 * char *Str : PASV
\83R
\83}
\83\93\83h
\82Ì
\83\8a\83v
\83\89\83C
\r
2309 * char *Adrs :
\83A
\83h
\83\8c\83X
\82Ì
\83R
\83s
\81[
\90æ ("www.xxx.yyy.zzz")
\r
2310 * int *Port :
\83|
\81[
\83g
\94Ô
\8d\86\82ð
\83Z
\83b
\83g
\82·
\82é
\83\8f\81[
\83N
\r
2311 * int Max :
\83A
\83h
\83\8c\83X
\95¶
\8e\9a\97ñ
\82Ì
\8dÅ
\91å
\92·
\r
2314 * int
\83X
\83e
\81[
\83^
\83X
\r
2316 *----------------------------------------------------------------------------*/
\r
2318 static int GetAdrsAndPort(char *Str, char *Adrs, int *Port, int Max)
\r
2326 Pos = strchr(Str, '(');
\r
2330 Btm = strchr(Pos, ',');
\r
2334 Btm = strchr(Btm, ',');
\r
2338 Btm = strchr(Btm, ',');
\r
2342 Btm = strchr(Btm, ',');
\r
2345 if((Btm - Pos) <= Max)
\r
2347 strncpy(Adrs, Pos, Btm - Pos);
\r
2348 *(Adrs + (Btm - Pos)) = NUL;
\r
2349 ReplaceAll(Adrs, ',', '.');
\r
2352 Btm = strchr(Pos, ',');
\r
2356 *Port = (atoi(Pos) * 0x100) + atoi(Btm);
\r
2369 /*----- Windows
\82Ì
\83X
\83y
\83V
\83\83\83\8b\83f
\83o
\83C
\83X
\82©
\82Ç
\82¤
\82©
\82ð
\95Ô
\82· -----------------------------
\r
2372 * char *Fname :
\83t
\83@
\83C
\83\8b\96¼
\r
2375 * int
\83X
\83e
\81[
\83^
\83X (YES/NO)
\r
2376 *----------------------------------------------------------------------------*/
\r
2378 static int IsSpecialDevice(char *Fname)
\r
2383 if((_stricmp(Fname, "CON") == 0) ||
\r
2384 (_stricmp(Fname, "PRN") == 0) ||
\r
2385 (_stricmp(Fname, "AUX") == 0) ||
\r
2386 (_strnicmp(Fname, "CON.", 4) == 0) ||
\r
2387 (_strnicmp(Fname, "PRN.", 4) == 0) ||
\r
2388 (_strnicmp(Fname, "AUX.", 4) == 0))
\r
2396 /*-----
\83~
\83\89\81[
\83\8a\83\93\83O
\82Å
\82Ì
\83t
\83@
\83C
\83\8b\8dí
\8f\9c\8am
\94F --------------------------------------
\r
2401 * TRANSPACKET *Pkt
\r
2405 *----------------------------------------------------------------------------*/
\r
2407 static int MirrorDelNotify(int Cur, int Notify, TRANSPACKET *Pkt)
\r
2409 MIRRORDELETEINFO DelInfo;
\r
2412 if(((Cur == WIN_LOCAL) && (MirDownDelNotify == NO)) ||
\r
2413 ((Cur == WIN_REMOTE) && (MirUpDelNotify == NO)))
\r
2418 if(Notify != YES_ALL)
\r
2420 DelInfo.Cur = Cur;
\r
2421 DelInfo.Pkt = Pkt;
\r
2422 hWnd = Pkt->hWndTrans;
\r
2424 hWnd = GetMainHwnd();
\r
2425 Notify = DialogBoxParam(GetFtpInst(), MAKEINTRESOURCE(delete_dlg), hWnd, MirrorDeleteDialogCallBack, (LPARAM)&DelInfo);
\r
2431 /*-----
\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
2434 * HWND hDlg :
\83E
\83C
\83\93\83h
\83E
\83n
\83\93\83h
\83\8b\r
2435 * UINT message :
\83\81\83b
\83Z
\81[
\83W
\94Ô
\8d\86\r
2436 * WPARAM wParam :
\83\81\83b
\83Z
\81[
\83W
\82Ì WPARAM
\88ø
\90\94\r
2437 * LPARAM lParam :
\83\81\83b
\83Z
\81[
\83W
\82Ì LPARAM
\88ø
\90\94\r
2441 *----------------------------------------------------------------------------*/
\r
2443 static BOOL CALLBACK MirrorDeleteDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)
\r
2445 static MIRRORDELETEINFO *DelInfo;
\r
2448 case WM_INITDIALOG :
\r
2449 DelInfo = (MIRRORDELETEINFO *)lParam;
\r
2451 if(DelInfo->Cur == WIN_LOCAL)
\r
2453 SendMessage(hDlg, WM_SETTEXT, 0, (LPARAM)MSGJPN124);
\r
2454 SendDlgItemMessage(hDlg, DELETE_TEXT, WM_SETTEXT, 0, (LPARAM)DelInfo->Pkt->LocalFile);
\r
2458 SendMessage(hDlg, WM_SETTEXT, 0, (LPARAM)MSGJPN125);
\r
2459 SendDlgItemMessage(hDlg, DELETE_TEXT, WM_SETTEXT, 0, (LPARAM)DelInfo->Pkt->RemoteFile);
\r
2464 switch(GET_WM_COMMAND_ID(wParam, lParam))
\r
2467 EndDialog(hDlg, YES);
\r
2471 EndDialog(hDlg, NO);
\r
2475 EndDialog(hDlg, YES_ALL);
\r
2480 EndDialog(hDlg, NO_ALL);
\r
2492 static void SetErrorMsg(char *fmt, ...)
\r
2496 if(strlen(ErrMsg) == 0)
\r
2498 va_start(Args, fmt);
\r
2499 wvsprintf(ErrMsg, fmt, Args);
\r
2510 /*-----
\83_
\83E
\83\93\83\8d\81[
\83h
\8e\9e\82Ì
\95s
\90³
\82È
\83p
\83X
\82ð
\83`
\83F
\83b
\83N ----------------------------------
\r
2513 * TRANSPACKET *packet :
\83_
\83E
\83\93\83\8d\81[
\83h
\8fî
\95ñ
\r
2516 * int YES=
\95s
\90³
\82È
\83p
\83X/NO=
\96â
\91è
\82È
\82¢
\83p
\83X
\r
2517 *----------------------------------------------------------------------------*/
\r
2518 int CheckPathViolation(TRANSPACKET *packet)
\r
2523 if((strncmp(packet->RemoteFile, "..\\", 3) == 0) ||
\r
2524 (strncmp(packet->RemoteFile, "../", 3) == 0) ||
\r
2525 (strstr(packet->RemoteFile, "\\..\\") != NULL) ||
\r
2526 (strstr(packet->RemoteFile, "/../") != NULL))
\r
2528 msg = malloc(strlen(MSGJPN297) + strlen(packet->RemoteFile) + 1);
\r
2531 sprintf(msg, MSGJPN297, packet->RemoteFile);
\r
2532 MessageBox(GetMainHwnd(), msg, MSGJPN086, MB_OK);
\r