X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=getput.c;h=6c7a2a7361fc30250cb30d74d2440cbfedd5c424;hb=6a29d875d5ea2ac915bf1fb3b24c6bd136649e35;hp=0fce875c0a5159e11ad52dbe674c013bd49d47c7;hpb=79dd2b343ce394098b2f0f9d89e53bd8c28b7401;p=ffftp%2Fffftp.git diff --git a/getput.c b/getput.c index 0fce875..6c7a2a7 100644 --- a/getput.c +++ b/getput.c @@ -43,7 +43,7 @@ #include // IPv6対応 //#include -#include +#include #include #include #include @@ -88,10 +88,16 @@ static int DownLoadNonPassive(TRANSPACKET *Pkt, int *CancelCheckWork); static int DownLoadPassive(TRANSPACKET *Pkt, int *CancelCheckWork); static int DownLoadFile(TRANSPACKET *Pkt, SOCKET dSkt, int CreateMode, int *CancelCheckWork); static void DispDownloadFinishMsg(TRANSPACKET *Pkt, int iRetCode); -static int DispUpDownErrDialog(int ResID, HWND hWnd, char *Fname); -static BOOL CALLBACK UpDownErrorDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); +// 再転送対応 +//static int DispUpDownErrDialog(int ResID, HWND hWnd, char *Fname); +static int DispUpDownErrDialog(int ResID, HWND hWnd, TRANSPACKET *Pkt); +// 64ビット対応 +//static BOOL CALLBACK UpDownErrorDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); +static INT_PTR CALLBACK UpDownErrorDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); static int SetDownloadResume(TRANSPACKET *Pkt, int ProcMode, LONGLONG Size, int *Mode, int *CancelCheckWork); -static BOOL CALLBACK NoResumeWndProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam); +// 64ビット対応 +//static BOOL CALLBACK NoResumeWndProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam); +static INT_PTR CALLBACK NoResumeWndProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam); static int DoUpLoad(SOCKET cSkt, TRANSPACKET *Pkt); static int UpLoadNonPassive(TRANSPACKET *Pkt); static int UpLoadPassive(TRANSPACKET *Pkt); @@ -111,7 +117,9 @@ static int GetAdrsAndPortIPv4(SOCKET Skt, char *Str, char *Adrs, int *Port, int static int GetAdrsAndPortIPv6(SOCKET Skt, char *Str, char *Adrs, int *Port, int Max); static int IsSpecialDevice(char *Fname); static int MirrorDelNotify(int Cur, int Notify, TRANSPACKET *Pkt); -static BOOL CALLBACK MirrorDeleteDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam); +// 64ビット対応 +//static BOOL CALLBACK MirrorDeleteDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam); +static INT_PTR CALLBACK MirrorDeleteDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam); static void SetErrorMsg(char *fmt, ...); // 同時接続対応 static char* GetErrMsg(); @@ -159,6 +167,9 @@ static HANDLE hErrMsgMutex; // 同時接続対応 static int WaitForMainThread = NO; +// 再転送対応 +static int TransferErrorMode = EXIST_OVW; +static int TransferErrorNotify = NO; /*===== 外部参照 =====*/ @@ -377,6 +388,9 @@ int RemoveTmpTransFileListItem(TRANSPACKET **Base, int Num) void AddTransFileList(TRANSPACKET *Pkt) { + // 同時接続対応 + TRANSPACKET *Pos; + DispTransPacket(Pkt); // 同時接続対応 @@ -388,6 +402,13 @@ void AddTransFileList(TRANSPACKET *Pkt) Sleep(1); } + // 同時接続対応 + Pos = TransPacketBase; + if(Pos != NULL) + { + while(Pos->Next != NULL) + Pos = Pos->Next; + } if(AddTmpTransFileList(Pkt, &TransPacketBase) == FFFTP_SUCCESS) { if((strncmp(Pkt->Cmd, "RETR", 4) == 0) || @@ -399,7 +420,12 @@ void AddTransFileList(TRANSPACKET *Pkt) } // 同時接続対応 if(NextTransPacketBase == NULL) - NextTransPacketBase = TransPacketBase; + { + if(Pos) + NextTransPacketBase = Pos->Next; + else + NextTransPacketBase = TransPacketBase; + } ReleaseMutex(hListAccMutex); // 同時接続対応 WaitForMainThread = NO; @@ -445,7 +471,7 @@ void AppendTransFileList(TRANSPACKET *Pkt) } // 同時接続対応 if(NextTransPacketBase == NULL) - NextTransPacketBase = TransPacketBase; + NextTransPacketBase = Pkt; while(Pkt != NULL) { @@ -549,7 +575,7 @@ static void EraseTransFileList(void) } TransPacketBase = NotDel; // 同時接続対応 - NextTransPacketBase = TransPacketBase; + NextTransPacketBase = NotDel; TransFiles = 0; PostMessage(GetMainHwnd(), WM_CHANGE_COND, 0, 0); ReleaseMutex(hListAccMutex); @@ -671,6 +697,7 @@ static ULONG WINAPI TransferThread(void *Dummy) SOCKET TrnSkt; RECT WndRect; int i; + DWORD LastUsed; hWndTrans = NULL; Down = NO; @@ -730,10 +757,13 @@ static ULONG WINAPI TransferThread(void *Dummy) { ReleaseMutex(hListAccMutex); ReConnectTrnSkt(&TrnSkt, &Canceled[ThreadCount]); - // 同時ログイン数制限に引っかかった可能性あり - // 負荷を下げるためにしばらく待機 - if(TrnSkt == INVALID_SOCKET) + // 同時ログイン数制限対策 + if(TrnSkt != INVALID_SOCKET) + LastUsed = timeGetTime(); + else { + // 同時ログイン数制限に引っかかった可能性あり + // 負荷を下げるために約10秒間待機 i = 10000; while(NewCmdSkt != CmdSkt && i > 0) { @@ -754,15 +784,20 @@ static ULONG WINAPI TransferThread(void *Dummy) { if(TrnSkt != INVALID_SOCKET) { - ReleaseMutex(hListAccMutex); - SendData(TrnSkt, "QUIT\r\n", 6, 0, &Canceled[ThreadCount]); - DoClose(TrnSkt); - TrnSkt = INVALID_SOCKET; -// WaitForSingleObject(hListAccMutex, INFINITE); - while(WaitForSingleObject(hListAccMutex, 0) == WAIT_TIMEOUT) + // 同時ログイン数制限対策 + // 10秒間は再利用を許可 + if(timeGetTime() - LastUsed > 10000) { - BackgrndMessageProc(); - Sleep(1); + ReleaseMutex(hListAccMutex); + SendData(TrnSkt, "QUIT\r\n", 6, 0, &Canceled[ThreadCount]); + DoClose(TrnSkt); + TrnSkt = INVALID_SOCKET; +// WaitForSingleObject(hListAccMutex, INFINITE); + while(WaitForSingleObject(hListAccMutex, 0) == WAIT_TIMEOUT) + { + BackgrndMessageProc(); + Sleep(1); + } } } } @@ -771,6 +806,13 @@ static ULONG WINAPI TransferThread(void *Dummy) // if(TransPacketBase != NULL) if(TrnSkt != INVALID_SOCKET && NextTransPacketBase != NULL) { + if(strcmp(NextTransPacketBase->Cmd, "GOQUIT") == 0 && NextTransPacketBase != TransPacketBase) + { + ReleaseMutex(hListAccMutex); + BackgrndMessageProc(); + Sleep(1); + continue; + } Pos = NextTransPacketBase; NextTransPacketBase = NextTransPacketBase->Next; // ディレクトリ操作は非同期で行わない @@ -1124,6 +1166,7 @@ static ULONG WINAPI TransferThread(void *Dummy) SendMessage(hWndTrans, WM_SET_PACKET, 0, 0); if(Pos != NULL) strcpy(Pos->Cmd, ""); + LastUsed = timeGetTime(); } // else else if(TransPacketBase == NULL) @@ -1173,6 +1216,10 @@ static ULONG WINAPI TransferThread(void *Dummy) PostMessage(GetMainHwnd(), WM_COMMAND, MAKEWPARAM(MENU_AUTO_EXIT, 0), 0); GoExit = NO; } + + // 再転送対応 + TransferErrorMode = AskTransferErrorMode(); + TransferErrorNotify = AskTransferErrorNotify(); } else { @@ -1280,7 +1327,13 @@ int DoDownLoad(SOCKET cSkt, TRANSPACKET *Pkt, int DirList, int *CancelCheckWork) DispTransFileInfo(Pkt, MSGJPN087, FALSE, NO); } - if(BackgrndMessageProc() == NO) + // SFTP対応 +// if(BackgrndMessageProc() == NO) + if(IsSFTPAttached(Pkt->ctrl_skt)) + { + // TODO: + } + else if(BackgrndMessageProc() == NO) { if(AskPasvMode() != YES) iRetCode = DownLoadNonPassive(Pkt, CancelCheckWork); @@ -1341,13 +1394,13 @@ static int DownLoadNonPassive(TRANSPACKET *Pkt, int *CancelCheckWork) // IPv6対応 // iLength = sizeof(saSockAddr1); // data_socket = do_accept(listen_socket, (struct sockaddr *)&saSockAddr1, (int *)&iLength); - switch(AskInetFamily()) + switch(AskCurNetType()) { - case AF_INET: + case NTYPE_IPV4: iLength=sizeof(saSockAddrIPv4); data_socket = do_accept(listen_socket,(struct sockaddr *)&saSockAddrIPv4, (int *)&iLength); break; - case AF_INET6: + case NTYPE_IPV6: iLength=sizeof(saSockAddrIPv6); data_socket = do_accept(listen_socket,(struct sockaddr *)&saSockAddrIPv6, (int *)&iLength); break; @@ -1367,12 +1420,12 @@ static int DownLoadNonPassive(TRANSPACKET *Pkt, int *CancelCheckWork) // IPv6対応 // DoPrintf("Skt=%u : accept from %s port %u", data_socket, inet_ntoa(saSockAddr1.sin_addr), ntohs(saSockAddr1.sin_port)); { - switch(AskInetFamily()) + switch(AskCurNetType()) { - case AF_INET: + case NTYPE_IPV4: DoPrintf("Skt=%u : accept from %s port %u", data_socket, inet_ntoa(saSockAddrIPv4.sin_addr), ntohs(saSockAddrIPv4.sin_port)); break; - case AF_INET6: + case NTYPE_IPV6: DoPrintf("Skt=%u : accept from %s port %u", data_socket, inet6_ntoa(saSockAddrIPv6.sin6_addr), ntohs(saSockAddrIPv6.sin6_port)); break; } @@ -1443,12 +1496,12 @@ static int DownLoadPassive(TRANSPACKET *Pkt, int *CancelCheckWork) // IPv6対応 // iRetCode = command(Pkt->ctrl_skt, Buf, CancelCheckWork, "PASV"); - switch(AskInetFamily()) + switch(AskCurNetType()) { - case AF_INET: + case NTYPE_IPV4: iRetCode = command(Pkt->ctrl_skt, Buf, CancelCheckWork, "PASV"); break; - case AF_INET6: + case NTYPE_IPV6: iRetCode = command(Pkt->ctrl_skt, Buf, CancelCheckWork, "EPSV"); break; } @@ -1669,8 +1722,6 @@ static int DownLoadFile(TRANSPACKET *Pkt, SOCKET dSkt, int CreateMode, int *Canc // Continue = ConvJIStoSJIS(&cInfo); // else // Continue = ConvEUCtoSJIS(&cInfo); - char Buf3[(BUFSIZE + 3) * 4]; - CODECONVINFO cInfo2; switch(Pkt->KanjiCode) { case KANJI_SJIS: @@ -2253,8 +2304,22 @@ static void DispDownloadFinishMsg(TRANSPACKET *Pkt, int iRetCode) { // 全て中止を選択後にダイアログが表示されるバグ対策 // if(DispUpDownErrDialog(downerr_dlg, Pkt->hWndTrans, Fname) == NO) - if(Canceled[Pkt->ThreadCount] == NO && ClearAll == NO && DispUpDownErrDialog(downerr_dlg, Pkt->hWndTrans, Fname) == NO) - ClearAll = YES; + // 再転送対応 +// if(Canceled[Pkt->ThreadCount] == NO && ClearAll == NO && DispUpDownErrDialog(downerr_dlg, Pkt->hWndTrans, Fname) == NO) +// ClearAll = YES; + if(Canceled[Pkt->ThreadCount] == NO && ClearAll == NO) + { + if(strncmp(Pkt->Cmd, "RETR", 4) == 0 || strncmp(Pkt->Cmd, "STOR", 4) == 0) + { + if(TransferErrorNotify == YES && DispUpDownErrDialog(downerr_dlg, Pkt->hWndTrans, Pkt) == NO) + ClearAll = YES; + else + { + Pkt->Mode = TransferErrorMode; + AddTransFileList(Pkt); + } + } + } } } else @@ -2288,13 +2353,17 @@ static void DispDownloadFinishMsg(TRANSPACKET *Pkt, int iRetCode) * int ステータス (YES=中止/NO=全て中止) *----------------------------------------------------------------------------*/ -static int DispUpDownErrDialog(int ResID, HWND hWnd, char *Fname) +// 再転送対応 +//static int DispUpDownErrDialog(int ResID, HWND hWnd, char *Fname) +static int DispUpDownErrDialog(int ResID, HWND hWnd, TRANSPACKET *Pkt) { if(hWnd == NULL) hWnd = GetMainHwnd(); SoundPlay(SND_ERROR); - return(DialogBoxParam(GetFtpInst(), MAKEINTRESOURCE(ResID), hWnd, UpDownErrorDialogProc, (LPARAM)Fname)); + // 再転送対応 +// return(DialogBoxParam(GetFtpInst(), MAKEINTRESOURCE(ResID), hWnd, UpDownErrorDialogProc, (LPARAM)Fname)); + return(DialogBoxParam(GetFtpInst(), MAKEINTRESOURCE(ResID), hWnd, UpDownErrorDialogProc, (LPARAM)Pkt)); } @@ -2310,31 +2379,57 @@ static int DispUpDownErrDialog(int ResID, HWND hWnd, char *Fname) * BOOL TRUE/FALSE *----------------------------------------------------------------------------*/ -static BOOL CALLBACK UpDownErrorDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) +// 64ビット対応 +//static BOOL CALLBACK UpDownErrorDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) +static INT_PTR CALLBACK UpDownErrorDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { + static TRANSPACKET *Pkt; + static const RADIOBUTTON DownExistButton[] = { + { DOWN_EXIST_OVW, EXIST_OVW }, + { DOWN_EXIST_RESUME, EXIST_RESUME }, + { DOWN_EXIST_IGNORE, EXIST_IGNORE } + }; + #define DOWNEXISTBUTTONS (sizeof(DownExistButton)/sizeof(RADIOBUTTON)) + switch (message) { case WM_INITDIALOG : - SendDlgItemMessage(hDlg, UPDOWN_ERR_FNAME, WM_SETTEXT, 0, (LPARAM)lParam); + Pkt = (TRANSPACKET *)lParam; +// SendDlgItemMessage(hDlg, UPDOWN_ERR_FNAME, WM_SETTEXT, 0, (LPARAM)lParam); + SendDlgItemMessage(hDlg, UPDOWN_ERR_FNAME, WM_SETTEXT, 0, (LPARAM)Pkt->RemoteFile); // 同時接続対応 // SendDlgItemMessage(hDlg, UPDOWN_ERR_MSG, WM_SETTEXT, 0, (LPARAM)ErrMsg); SendDlgItemMessage(hDlg, UPDOWN_ERR_MSG, WM_SETTEXT, 0, (LPARAM)GetErrMsg()); + + if((Pkt->Type == TYPE_A) || (Pkt->ExistSize <= 0)) + EnableWindow(GetDlgItem(hDlg, DOWN_EXIST_RESUME), FALSE); + + SetRadioButtonByValue(hDlg, TransferErrorMode, DownExistButton, DOWNEXISTBUTTONS); return(TRUE); case WM_COMMAND : switch(GET_WM_COMMAND_ID(wParam, lParam)) { + case IDOK_ALL : + TransferErrorNotify = NO; + /* ここに break はない */ + case IDOK : + TransferErrorMode = AskRadioButtonValue(hDlg, DownExistButton, DOWNEXISTBUTTONS); EndDialog(hDlg, YES); break; case IDCANCEL : EndDialog(hDlg, NO); break; + + case IDHELP : +// hHelpWin = HtmlHelp(NULL, AskHelpFilePath(), HH_HELP_CONTEXT, IDH_HELP_TOPIC_0000009); + break; } - return(TRUE); + return(TRUE); } - return(FALSE); + return(FALSE); } @@ -2402,7 +2497,9 @@ static int SetDownloadResume(TRANSPACKET *Pkt, int ProcMode, LONGLONG Size, int * BOOL TRUE/FALSE *----------------------------------------------------------------------------*/ -static BOOL CALLBACK NoResumeWndProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam) +// 64ビット対応 +//static BOOL CALLBACK NoResumeWndProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam) +static INT_PTR CALLBACK NoResumeWndProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam) { switch (iMessage) { @@ -2466,7 +2563,13 @@ static int DoUpLoad(SOCKET cSkt, TRANSPACKET *Pkt) if(Pkt->hWndTrans != NULL) DispTransFileInfo(Pkt, MSGJPN104, TRUE, YES); - if(BackgrndMessageProc() == NO) + // SFTP対応 +// if(BackgrndMessageProc() == NO) + if(IsSFTPAttached(Pkt->ctrl_skt)) + { + // TODO: + } + else if(BackgrndMessageProc() == NO) { if(AskPasvMode() != YES) iRetCode = UpLoadNonPassive(Pkt); @@ -2549,13 +2652,13 @@ static int UpLoadNonPassive(TRANSPACKET *Pkt) // IPv6対応 // iLength=sizeof(saSockAddr1); // data_socket = do_accept(listen_socket,(struct sockaddr *)&saSockAddr1, (int *)&iLength); - switch(AskInetFamily()) + switch(AskCurNetType()) { - case AF_INET: + case NTYPE_IPV4: iLength=sizeof(saSockAddrIPv4); data_socket = do_accept(listen_socket,(struct sockaddr *)&saSockAddrIPv4, (int *)&iLength); break; - case AF_INET6: + case NTYPE_IPV6: iLength=sizeof(saSockAddrIPv6); data_socket = do_accept(listen_socket,(struct sockaddr *)&saSockAddrIPv6, (int *)&iLength); break; @@ -2575,12 +2678,12 @@ static int UpLoadNonPassive(TRANSPACKET *Pkt) // IPv6対応 // DoPrintf("Skt=%u : accept from %s port %u", data_socket, inet_ntoa(saSockAddr1.sin_addr), ntohs(saSockAddr1.sin_port)); { - switch(AskInetFamily()) + switch(AskCurNetType()) { - case AF_INET: + case NTYPE_IPV4: DoPrintf("Skt=%u : accept from %s port %u", data_socket, inet_ntoa(saSockAddrIPv4.sin_addr), ntohs(saSockAddrIPv4.sin_port)); break; - case AF_INET6: + case NTYPE_IPV6: DoPrintf("Skt=%u : accept from %s port %u", data_socket, inet6_ntoa(saSockAddrIPv6.sin6_addr), ntohs(saSockAddrIPv6.sin6_port)); break; } @@ -2650,12 +2753,12 @@ static int UpLoadPassive(TRANSPACKET *Pkt) // iRetCode = command(Pkt->ctrl_skt, Buf, &Canceled, "PASV"); // IPv6対応 // iRetCode = command(Pkt->ctrl_skt, Buf, &Canceled[Pkt->ThreadCount], "PASV"); - switch(AskInetFamily()) + switch(AskCurNetType()) { - case AF_INET: + case NTYPE_IPV4: iRetCode = command(Pkt->ctrl_skt, Buf, &Canceled[Pkt->ThreadCount], "PASV"); break; - case AF_INET6: + case NTYPE_IPV6: iRetCode = command(Pkt->ctrl_skt, Buf, &Canceled[Pkt->ThreadCount], "EPSV"); break; } @@ -3452,8 +3555,22 @@ static void DispUploadFinishMsg(TRANSPACKET *Pkt, int iRetCode) { // 全て中止を選択後にダイアログが表示されるバグ対策 // if(DispUpDownErrDialog(uperr_dlg, Pkt->hWndTrans, Pkt->LocalFile) == NO) - if(Canceled[Pkt->ThreadCount] == NO && ClearAll == NO && DispUpDownErrDialog(uperr_dlg, Pkt->hWndTrans, Pkt->LocalFile) == NO) - ClearAll = YES; + // 再転送対応 +// if(Canceled[Pkt->ThreadCount] == NO && ClearAll == NO && DispUpDownErrDialog(uperr_dlg, Pkt->hWndTrans, Pkt->LocalFile) == NO) +// ClearAll = YES; + if(Canceled[Pkt->ThreadCount] == NO && ClearAll == NO) + { + if(strncmp(Pkt->Cmd, "RETR", 4) == 0 || strncmp(Pkt->Cmd, "STOR", 4) == 0) + { + if(TransferErrorNotify == YES && DispUpDownErrDialog(uperr_dlg, Pkt->hWndTrans, Pkt) == NO) + ClearAll = YES; + else + { + Pkt->Mode = TransferErrorMode; + AddTransFileList(Pkt); + } + } + } } } else @@ -3559,7 +3676,9 @@ static LRESULT CALLBACK TransDlgProc(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM /* ここに break はない */ case IDCANCEL : - if(!(Pkt = (TRANSPACKET*)GetWindowLong(hDlg, GWL_USERDATA))) + // 64ビット対応 +// if(!(Pkt = (TRANSPACKET*)GetWindowLong(hDlg, GWL_USERDATA))) + if(!(Pkt = (TRANSPACKET*)GetWindowLongPtr(hDlg, GWLP_USERDATA))) break; Pkt->Abort = ABORT_USER; // Canceled = YES; @@ -3575,7 +3694,9 @@ static LRESULT CALLBACK TransDlgProc(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM SetForegroundWindow(hDlg); MoveToForeground = NO; KillTimer(hDlg, TIMER_DISPLAY); - if(!(Pkt = (TRANSPACKET*)GetWindowLong(hDlg, GWL_USERDATA))) + // 64ビット対応 +// if(!(Pkt = (TRANSPACKET*)GetWindowLong(hDlg, GWL_USERDATA))) + if(!(Pkt = (TRANSPACKET*)GetWindowLongPtr(hDlg, GWLP_USERDATA))) break; if(Canceled[Pkt->ThreadCount] == YES) Pkt->Abort = ABORT_USER; @@ -3586,7 +3707,9 @@ static LRESULT CALLBACK TransDlgProc(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM case WM_SET_PACKET : // Pkt = (TRANSPACKET *)lParam; - SetWindowLong(hDlg, GWL_USERDATA, (LONG)lParam); + // 64ビット対応 +// SetWindowLong(hDlg, GWL_USERDATA, (LONG)lParam); + SetWindowLongPtr(hDlg, GWLP_USERDATA, (LONG_PTR)lParam); break; } return(FALSE); @@ -3765,12 +3888,12 @@ static int GetAdrsAndPort(SOCKET Skt, char *Str, char *Adrs, int *Port, int Max) { int Result; Result = FFFTP_FAIL; - switch(AskInetFamily()) + switch(AskCurNetType()) { - case AF_INET: + case NTYPE_IPV4: Result = GetAdrsAndPortIPv4(Skt, Str, Adrs, Port, Max); break; - case AF_INET6: + case NTYPE_IPV6: Result = GetAdrsAndPortIPv6(Skt, Str, Adrs, Port, Max); break; } @@ -3784,6 +3907,8 @@ static int GetAdrsAndPortIPv4(SOCKET Skt, char *Str, char *Adrs, int *Port, int { char *Pos; char *Btm; + // コンマではなくドットを返すホストがあるため + char *OldBtm; int Sts; Sts = FFFTP_FAIL; @@ -3799,24 +3924,30 @@ static int GetAdrsAndPortIPv4(SOCKET Skt, char *Str, char *Adrs, int *Port, int if(Btm != NULL) { Btm++; - Btm = strchr(Btm, ','); // コンマではなくドットを返すホストがあるため +// Btm = strchr(Btm, ','); + OldBtm = Btm; + Btm = strchr(OldBtm, ','); if(Btm == NULL) - Btm = strchr(Btm, '.'); + Btm = strchr(OldBtm, '.'); if(Btm != NULL) { Btm++; - Btm = strchr(Btm, ','); // コンマではなくドットを返すホストがあるため +// Btm = strchr(Btm, ','); + OldBtm = Btm; + Btm = strchr(OldBtm, ','); if(Btm == NULL) - Btm = strchr(Btm, '.'); + Btm = strchr(OldBtm, '.'); if(Btm != NULL) { Btm++; - Btm = strchr(Btm, ','); // コンマではなくドットを返すホストがあるため +// Btm = strchr(Btm, ','); + OldBtm = Btm; + Btm = strchr(OldBtm, ','); if(Btm == NULL) - Btm = strchr(Btm, '.'); + Btm = strchr(OldBtm, '.'); if(Btm != NULL) { if((Btm - Pos) <= Max) @@ -3993,7 +4124,9 @@ static int MirrorDelNotify(int Cur, int Notify, TRANSPACKET *Pkt) * BOOL TRUE/FALSE *----------------------------------------------------------------------------*/ -static BOOL CALLBACK MirrorDeleteDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam) +// 64ビット対応 +//static BOOL CALLBACK MirrorDeleteDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam) +static INT_PTR CALLBACK MirrorDeleteDialogCallBack(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam) { static MIRRORDELETEINFO *DelInfo; switch (iMessage)