FTP::FTP() { ResetCache = TRUE; ShowHosts = TRUE; SwitchingToFTP = FALSE; RereadRequired = FALSE; CurrentState = fcsNormal; *IncludeMask = 0; *ExcludeMask = 0; PluginColumnModeSet = FALSE; ActiveColumnMode = 0; NeedToSetActiveMode = FALSE; UrlsList = NULL; UrlsTail = NULL; QuequeSize = 0; OverrideMsgCode = ocNone; LastMsgCode = ocNone; *PanelTitle = 0; LongBeep = NULL; KeepAlivePeriod = Opt.KeepAlive ? FP_PeriodCreate(Opt.KeepAlive*1000) : NULL; hConnect = NULL; CallLevel = 0; Host.Init(); FP_GetRegKey("LastHostsPath",HostsPath,NULL,ARRAYSIZE(HostsPath)); PanelInfo pi; FP_Info->Control(INVALID_HANDLE_VALUE,FCTL_GETPANELINFO,&pi); StartViewMode = pi.ViewMode; }
int FTP::ProcessEvent(int Event,void *Param) { #if defined(__FILELOG__) static LPCSTR states[] = { "fcsNormal", "fcsExpandList", "fcsClose", "fcsConnecting","fcsFTP" }; PROC(("ProcessEvent","%d (%s),%08X",Event,states[CurrentState],Param)) #endif PanelInfo pi; int n; FTPHost* p; pi.PanelItems = NULL; if(Event == FE_BREAK || CurrentState == fcsClose || CurrentState == fcsConnecting) { Log(("Skip event")); return FALSE; } //Close notify if(Event == FE_CLOSE) { Log(("Close notify")); CurrentState = fcsClose; if(ShowHosts) { if(!pi.PanelItems) FP_Info->Control(this, FCTL_GETPANELINFO, &pi); FP_SetRegKey("LastHostsMode",pi.ViewMode); Log(("Write HostsMode: %d",pi.ViewMode)); } return FALSE; } //Position cursor to added|corrected item on panel if(Event == FE_REDRAW) { if(SelectFile.Length()) { Log(("PositionItem: [%s]",SelectFile.c_str())); if(!pi.PanelItems) FP_Info->Control(this, FCTL_GETPANELINFO, &pi); for(n = 0; n < pi.ItemsNumber; n++) { if(ShowHosts) { if((p=FTPHost::Convert(&pi.PanelItems[n])) == NULL || !SelectFile.Cmp(PointToName(p->RegKey))) continue; } else { if(!SelectFile.Cmp(FTP_FILENAME(&pi.PanelItems[n]))) continue; } Log(("PosItem[%d] [%s]", n, FTP_FILENAME(&pi.PanelItems[n]))); PanelRedrawInfo pri; pri.CurrentItem = n; pri.TopPanelItem = pi.TopPanelItem; SelectFile = ""; FP_Info->Control(this,FCTL_REDRAWPANEL,&pri); break; } SelectFile = ""; } }/*REDRAW*/ //Correct saved hosts mode on change if(ShowHosts && Event == FE_CHANGEVIEWMODE) { if(!pi.PanelItems) FP_Info->Control(this, FCTL_GETPANELINFO, &pi); Log(("New ColumnMode %d",pi.ViewMode)); FP_SetRegKey("LastHostsMode",pi.ViewMode); } //Set start hosts panel mode if(Event == FE_REDRAW) { if(ShowHosts && !PluginColumnModeSet) { if(Opt.PluginColumnMode != -1) FP_Info->Control(this,FCTL_SETVIEWMODE,&Opt.PluginColumnMode); else { int num = FP_GetRegKey("LastHostsMode",2); FP_Info->Control(this,FCTL_SETVIEWMODE,&num); } PluginColumnModeSet = TRUE; } else if(isBackup() && NeedToSetActiveMode) { FP_Info->Control(this,FCTL_SETVIEWMODE,&ActiveColumnMode); NeedToSetActiveMode = FALSE; } } //Keep alive if(Event == FE_IDLE && !ShowHosts && FtpCmdLineAlive(hConnect) && KeepAlivePeriod && FP_PeriodEnd(KeepAlivePeriod)) { Log(("Keep alive")); FTPCmdBlock blocked(this,TRUE); if(Opt.ShowIdle) { SetLastError(ERROR_SUCCESS); IdleMessage(FP_GetMsg(MKeepAliveExec),Opt.ProcessColor); } FtpKeepAlive(hConnect); Log(("end Keep alive")); } //CMD line if(Event == FE_COMMAND) { Log(("CMD line")); return ExecCmdLine((LPCSTR)Param,FALSE); } return FALSE; }
//------------------------------------------------------------------------ void WINAPI ReadCfg(void) { char str[ FAR_MAX_NAME ],*m; int val,n; #define GCMD( fnm,nm,v ) FP_GetRegKey( fnm,Opt.v,nm,ARRAYSIZE(Opt.v) ); if (TrimLen(Opt.v) == 0) strcpy( Opt.v,nm ); Opt.AddToDisksMenu = FP_GetRegKey("AddToDisksMenu", 1); Opt.AddToPluginsMenu = FP_GetRegKey("AddToPluginsMenu", 1); Opt.DisksMenuDigit = FP_GetRegKey("DisksMenuDigit", 2); Opt.ReadDescriptions = FP_GetRegKey("ReadDescriptions", 0); Opt.UploadLowCase = FP_GetRegKey("UploadLowCase", 0); Opt.ShowUploadDialog = FP_GetRegKey("ShowUploadDialog", 1); Opt.ResumeDefault = FP_GetRegKey("ResumeDefault", 0); Opt.UpdateDescriptions = FP_GetRegKey("UpdateDescriptions", 0); Opt.PassiveMode = FP_GetRegKey("PassiveMode", 0); FP_GetRegKey("CharTable", Opt.Table,NULL,ARRAYSIZE(Opt.Table)); FP_GetRegKey("DescriptionNames", Opt.DescriptionNames,"00_index.txt,0index,0index.txt",ARRAYSIZE(Opt.DescriptionNames)); FP_GetRegKey("Firewall",Opt.Firewall,NULL,ARRAYSIZE(Opt.Firewall)); FP_GetRegKey("DefaultPassword", (BYTE *)str,(BYTE *)NULL,ARRAYSIZE(str)); DecryptPassword((BYTE*)str,Opt.DefaultPassword); //JM Opt.CmdLength = Max(5,Min(FP_ConHeight()-5,FP_GetRegKey("CmdLength",7))); Opt.CmdLine = Max(10,Min(FP_ConWidth()-9,FP_GetRegKey("CmdLine",70))); Opt.IOBuffSize = Max(FTR_MINBUFFSIZE,(DWORD)FP_GetRegKey("IOBuffSize",512)); Opt.dDelimit = FP_GetRegKey("DigitDelimit", TRUE); Opt.dDelimiter = (char)FP_GetRegKey("DigitDelimiter", 0); Opt.WaitTimeout = FP_GetRegKey("WaitTimeout", 30); Opt.AskAbort = FP_GetRegKey("AskAbort", TRUE); Opt.WaitIdle = FP_GetRegKey("WaitIdle", 1); Opt.CmdLogLimit = FP_GetRegKey("CmdLogLimit", 100); Opt.ShowIdle = FP_GetRegKey("ShowIdle", TRUE); Opt.TimeoutRetry = FP_GetRegKey("TimeoutRetry", FALSE); Opt.RetryCount = FP_GetRegKey("RetryCount", 0); Opt.LogOutput = FP_GetRegKey("LogOutput", FALSE); Opt._ShowPassword = FP_GetRegKey("ShowPassword", FALSE); Opt.IdleColor = FP_GetRegKey("IdleColor", FAR_COLOR(fccCYAN,fccBLUE)); Opt.IdleMode = FP_GetRegKey("IdleMode", IDLE_CONSOLE); Opt.LongBeepTimeout = FP_GetRegKey("BeepTimeout", 30); Opt.KeepAlive = FP_GetRegKey("KeepAlive", 60); Opt.IdleShowPeriod = FP_GetRegKey("IdleShowPeriod", 700); Opt.IdleStartPeriod = FP_GetRegKey("IdleStartPeriod", 4000); Opt.AskLoginFail = FP_GetRegKey("AskLoginFail", TRUE); Opt.ExtCmdView = FP_GetRegKey("ExtCmdView", TRUE); Opt.AutoAnonymous = FP_GetRegKey("AutoAnonymous", TRUE); Opt.CloseDots = FP_GetRegKey("CloseDots", TRUE); Opt.QuoteClipboardNames= FP_GetRegKey("QuoteClipboardNames",TRUE); Opt.SetHiddenOnAbort = FP_GetRegKey("SetHiddenOnAbort", FALSE); Opt.PwdSecurity = FP_GetRegKey("PwdSecurity", 0); Opt.WaitCounter = FP_GetRegKey("WaitCounter", 0); Opt.RetryTimeout = FP_GetRegKey("RetryTimeout", 10); Opt.DoNotExpandErrors = FP_GetRegKey("DoNotExpandErrors", FALSE); Opt.TruncateLogFile = FP_GetRegKey("TruncateLogFile", FALSE); Opt.ServerType = FP_GetRegKey("ServerType", FTP_TYPE_DETECT); Opt.UseBackups = FP_GetRegKey("UseBackups", TRUE); Opt.ProcessCmd = FP_GetRegKey("ProcessCmd", TRUE); Opt.FFDup = FP_GetRegKey("FFDup", FALSE); Opt.UndupFF = FP_GetRegKey("UndupFF", FALSE); Opt.ShowSilentProgress = FP_GetRegKey("ShowSilentProgress", FALSE); FP_GetRegKey("InvalidSymbols", Opt.InvalidSymbols, "<>|?*\"", ARRAYSIZE(Opt.InvalidSymbols)); FP_GetRegKey("CorrectedSymbols", Opt.CorrectedSymbols, "()!__\'", ARRAYSIZE(Opt.CorrectedSymbols)); for(n = 0; Opt.InvalidSymbols[n] && Opt.CorrectedSymbols[n]; n++); Opt.InvalidSymbols[n] = 0; Opt.CorrectedSymbols[n] = 0; Opt.PluginColumnMode = (int)FP_GetRegKey("PluginColumnMode", MAX_DWORD); if(Opt.PluginColumnMode < 0 || Opt.PluginColumnMode >= 10) Opt.PluginColumnMode = -1; FP_GetRegKey("CmdLogFile", Opt.CmdLogFile,"",ARRAYSIZE(Opt.CmdLogFile)); //Queue Opt.RestoreState = FP_GetRegKey("QueueRestoreState", TRUE); Opt.RemoveCompleted = FP_GetRegKey("QueueRemoveCompleted", TRUE); Opt.sli.AddPrefix = FP_GetRegKey("AddPrefix", TRUE); Opt.sli.AddPasswordAndUser = FP_GetRegKey("AddPasswordAndUser", TRUE); Opt.sli.Quote = FP_GetRegKey("Quote", TRUE); Opt.sli.Size = FP_GetRegKey("Size", TRUE); Opt.sli.RightBound = FP_GetRegKey("RightBound", 80); Opt.sli.ListType = (sliTypes)FP_GetRegKey("ListType", sltUrlList); //Formats GCMD("ServerDateFormat", "%*s %04d%02d%02d%02d%02d%02d", fmtDateFormat) //Months static const char *Months[12]= { "Jan","Feb","Mar","Apr","May","Jun", "Jul","Aug","Sep","Oct","Nov","Dec" }; for(n = 0; n < 12; n++) { FP_GetRegKey(Months[n], str, Months[n], ARRAYSIZE(str)); while((m=strpbrk(str,"\n\r\b")) != NULL) *m = 0; if(!str[0]) strcpy(str,Months[n]); Log(("month %d [%s]=[%s]",n,Opt.Months[n],str)); if(Opt.Months[n]) free(Opt.Months[n]); Opt.Months[n] = strdup(str); } //CMD`s GCMD("xcmdPUT", "STOR", cmdPut) GCMD("xcmdAPPE", "APPE", cmdAppe) GCMD("xcmdSTOR", "STOR", cmdStor) GCMD("xcmdSTOU", "STOU", cmdPutUniq) GCMD("xcmdPASV", "PASV", cmdPasv) GCMD("xcmdPORT", "PORT", cmdPort) GCMD("xcmdMDTM", "MDTM", cmdMDTM) GCMD("xcmdRETR", "RETR", cmdRetr) GCMD("xcmdREST", "REST", cmdRest) GCMD("xcmdALLO", "ALLO", cmdAllo) GCMD("xcmdCWD", "CWD", cmdCwd) GCMD("xcmdXCWD", "XCWD", cmdXCwd) GCMD("xcmdDELE", "DELE", cmdDel) GCMD("xcmdRNFR", "RNFR", cmdRen) GCMD("xcmdRNTO", "RNTO", cmdRenTo) GCMD("xcmdLIST", "LIST", cmdList) GCMD("xcmdNLIST","NLIST",cmdNList) GCMD("xcmdUSER", "USER", cmdUser) GCMD("xcmdPASS", "PASS", cmdPass) GCMD("xcmdACCT", "ACCT", cmdAcct) GCMD("xcmdPWD", "PWD", cmdPwd) GCMD("xcmdXPWD", "XPWD", cmdXPwd) GCMD("xcmdMKD", "MKD", cmdMkd) GCMD("xcmdXMKD", "XMKD", cmdXMkd) GCMD("xcmdRMD", "RMD", cmdRmd) GCMD("xcmdXRMD", "XRMD", cmdXRmd) GCMD("xcmdSITE", "SITE", cmdSite) GCMD("xcmdCHMOD","CHMOD",cmdChmod) GCMD("xcmdUMASK","UMASK",cmdUmask) GCMD("xcmdIDLE", "IDLE", cmdIdle) GCMD("xcmdHELP", "HELP", cmdHelp) GCMD("xcmdQUIT", "QUIT", cmdQuit) GCMD("xcmdCDUP", "CDUP", cmdCDUp) GCMD("xcmdXCUP", "XCUP", cmdXCDUp) GCMD("xcmdSYST", "SYST", cmdSyst) GCMD("xcmdSIZE", "SIZE", cmdSize) GCMD("xcmdSTAT", "STAT", cmdStat) //ProcessColor val = (int)FP_Info->AdvControl(FP_Info->ModuleNumber,ACTL_GETCOLOR,(void*)COL_DIALOGBOX); Opt.ProcessColor = FP_GetRegKey("ProcessColor",val); //dDelimit && dDelimiter if(Opt.dDelimit && Opt.dDelimiter == 0) { if(GetLocaleInfo(GetThreadLocale(),LOCALE_STHOUSAND,str,ARRAYSIZE(str))) { CharToOemBuff(str,str,2); Opt.dDelimiter = str[0]; } else Opt.dDelimiter = '.'; } }