options.cpp
来自「一个支持FTP,SFTP的客户端程序」· C++ 代码 · 共 1,863 行 · 第 1/5 页
CPP
1,863 行
//Store Transfer page
SetOption(OPTION_PRESERVEDOWNLOADFILETIME, m_OptionsTransferPage.m_bPreserveTime);
int value=_ttoi(m_OptionsTransferPage.m_MaxPrimarySize);
if (value<0)
value=1024;
SetOption(OPTION_TRANSFERPRIMARYMAXSIZE, value);
value=_ttoi(m_OptionsTransferPage.m_MaxConnCount);
if (value<0 || value>10)
value=2;
SetOption(OPTION_TRANSFERAPICOUNT, value);
SetOption(OPTION_TRANSFERUSEMULTIPLE, m_OptionsTransferPage.m_bUseMultiple);
SetOption(OPTION_FILEEXISTSACTION, m_OptionsTransferPage.m_nFileExistsAction);
SetOption(OPTION_VMSALLREVISIONS, m_OptionsTransferPage.m_vmsall);
//Store View/Edit page
COptions::SetOption(OPTION_VIEWEDITDEFAULT, m_OptionsViewEditPage.m_Default);
COptions::SetOption(OPTION_VIEWEDITCUSTOM, m_OptionsViewEditPage.m_Custom2);
//Store ident settings
SetOption(OPTION_IDENT, m_OptionsIdentPage.m_bIdent);
SetOption(OPTION_IDENTCONNECT, m_OptionsIdentPage.m_bIdentConnect);
SetOption(OPTION_IDENTSAMEIP, m_OptionsIdentPage.m_bSameIP);
SetOption(OPTION_IDENTUSER, m_OptionsIdentPage.m_UserID);
SetOption(OPTION_IDENTSYSTEM, m_OptionsIdentPage.m_System);
//Store language page
ProcessLanguagePage();
//Store Speed Limit page
SetOption(OPTION_SPEEDLIMIT_DOWNLOAD_TYPE, m_OptionsSpeedLimitPage.m_DownloadSpeedLimitType);
SetOption(OPTION_SPEEDLIMIT_DOWNLOAD_VALUE, m_OptionsSpeedLimitPage.m_DownloadValue);
SetOption(OPTION_SPEEDLIMIT_UPLOAD_TYPE, m_OptionsSpeedLimitPage.m_UploadSpeedLimitType);
SetOption(OPTION_SPEEDLIMIT_UPLOAD_VALUE, m_OptionsSpeedLimitPage.m_UploadValue);
m_Sync.Lock();
m_OptionsSpeedLimitPage.Copy( m_OptionsSpeedLimitPage.m_DownloadSpeedLimits, m_DownloadSpeedLimits);
m_OptionsSpeedLimitPage.Copy( m_OptionsSpeedLimitPage.m_UploadSpeedLimits, m_UploadSpeedLimits);
m_Sync.Unlock();
SetOption(OPTION_SPEEDLIMIT_DOWNLOAD_RULES, GetSpeedLimitsString( m_DownloadSpeedLimits));
SetOption(OPTION_SPEEDLIMIT_UPLOAD_RULES, GetSpeedLimitsString( m_UploadSpeedLimits));
//Store SSH Page
SetOption(OPTION_SSHUSECOMPRESSION, m_OptionsSshPage.m_nCompression);
SetOption(OPTION_SSHPROTOCOL, m_OptionsSshPage.m_nProtocol);
//Store pane layout page
SetOption(OPTION_LOCALTREEVIEWLOCATION, m_OptionsPaneLayoutPage.m_nLocalTreePos);
SetOption(OPTION_REMOTETREEVIEWLOCATION, m_OptionsPaneLayoutPage.m_nRemoteTreePos);
SetOption(OPTION_PANELAYOUT_SWITCHLAYOUT, m_OptionsPaneLayoutPage.m_bSwitchLayout);
//Store message log page
SetOption(OPTION_DEBUGLOGTOFILE, m_OptionsLoggingPage.m_bLogToFile);
SetOption(OPTION_DEBUGLOGFILE, m_OptionsLoggingPage.m_LogFile);
SetOption(OPTION_MESSAGELOG_USECUSTOMFONT, m_OptionsLoggingPage.m_bUseCustomFont);
SetOption(OPTION_MESSAGELOG_FONTNAME, m_OptionsLoggingPage.m_FontName);
SetOption(OPTION_MESSAGELOG_FONTSIZE, m_OptionsLoggingPage.m_nFontSize);
SetOption(OPTION_LOGTIMESTAMPS, m_OptionsLoggingPage.m_timestamps);
//Store transfer compression page
SetOption(OPTION_MODEZ_USE, m_OptionsTransferCompressionPage.m_useCompression);
SetOption(OPTION_MODEZ_LEVEL, _ttoi(m_OptionsTransferCompressionPage.m_level));
return TRUE;
}
BOOL COptions::OnInitDialog()
{
CSAPrefsDialog::OnInitDialog();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX-Eigenschaftenseiten sollten FALSE zur點kgeben
}
typedef struct
{
TCHAR name[30];
int nType;
} t_Option;
static t_Option options[OPTIONS_NUM]={ _T("Logontype"), 1, _T("Pasv"), 1,
_T("FWHost"), 0, _T("FWPort"), 1,
_T("FWUser"), 0, _T("FWPass"), 0,
_T("Timeout Length"), 1, _T("Use Keep Alive"), 1,
_T("Interval Low"), 1, _T("Interval High"), 1,
_T("Num Retries"), 1, _T("Retry Delay"), 1,
_T("Last Server Host"), 0, _T("Last Server Port"), 1,
_T("Last Server User"), 0, _T("Last Server Pass"), 0,
_T("Proxy Type"), 1, _T("Proxy Host"), 0,
_T("Proxy Port"), 1, _T("Proxy User"), 0,
_T("Proxy Pass"), 0, _T("Proxy Use Logon"), 1,
_T("Last Server Path"), 0, _T("Last Server Firewall Bypass"), 1,
_T("Language"), 0, _T("Default Folder Type"), 1,
_T("Default Folder"), 0, _T("Transfer Mode"), 1,
_T("ASCII files"), 0, _T("No view labels"), 1,
_T("No toolbar"), 1, _T("No Quickconnbar"), 1,
_T("No Statusbar"), 1, _T("No Messagelog"), 1,
_T("No Treeview"), 1, _T("No Queue"), 1,
_T("Remember View settings"), 1, _T("Local List View Style"), 1,
_T("Hide Local Columns"), 1, _T("Remote List View Style"), 1,
_T("Hide Remote Columns"), 1, _T("Sitemanager on startup"), 1,
_T("Use GSS"), 1, _T("GSS enabled servers"), 0,
_T("Last Server dont save pass"), 1, _T("Remember Window Size"), 1,
_T("Last Window Size"), 0, _T("Debug Trace"), 1,
_T("Debug Show Listing"), 1, _T("Debug Log To File"), 1,
_T("Debug Log File"), 0, _T("Limit Port Range"), 1,
_T("Port Range Low"), 1, _T("Port Range High"), 1,
_T("Remember Local View"), 1, _T("Remember Remote View"), 1,
_T("Last Splitter Pos"), 0, _T("Use directory cache"), 1,
_T("Max Dir Cache Time"), 1, _T("Last Server Type"), 1,
_T("Minimize to Tray"), 1, _T("Show Remote Treeview"), 1,
_T("Remember Local column widths"), 1, _T("Remember Remote column widths"), 1,
_T("Local column widths"), 0, _T("Remote column widths"), 0,
_T("Local Filesize format"), 1, _T("Remote Filesize format"), 1,
_T("Last server name"), 0, _T("Preserve DL file time"), 1,
_T("Run in Secure Mode"), 0, _T("Default View Edit Prog"), 0,
_T("Custom View Edit Progs"), 0, _T("Always Show Hidden Files"), 1,
_T("Primary TransferMax Size"), 1, _T("Enable debug menu"), 1,
_T("Transfer Api Count"), 1, _T("Use Registry"), 1,
_T("Use multiple connections"), 1, _T("Use Ident server"), 1,
_T("Ident when connecting only"), 1, _T("Ident reply same IP"), 1,
_T("Ident OS"), 0, _T("Ident UserID"), 0,
_T("File exists Action"), 1, _T("SpeedLimit Download Type"), 1,
_T("SpeedLimit Upload Type"), 1, _T("SpeedLimit Download Value"), 1,
_T("SpeedLimit Upload Value"), 1, _T("SpeedLimit Download Rules"), 0,
_T("SpeedLimit Upload Rules"), 0, _T("SiteManager Folders First"), 1,
_T("No Expand SiteManager Folders"),1, _T("Show Local Statusbar"), 1,
_T("Show Remote Statusbar"), 1, _T("Local column sort direction"), 1,
_T("Remote column sort direction"), 1, _T("SSH Use Compression"), 1,
_T("SSH Force Protocol"), 1, _T("Transfer IP"), 0,
_T("Local doubleclick action"), 1, _T("Remote doubleclick action"), 1,
_T("Local treeview location"), 1, _T("Remote treeview location"), 1,
_T("Last Server transfer mode"), 1, _T("Use custom messaglog font"), 1,
_T("Messagelog font name"), 0, _T("Messagelog font size"), 1,
_T("Switch view locations"), 1, _T("Use MODE Z "), 1,
_T("MODE Z level"), 1, _T("Transfer IP v6"), 0,
_T("Enable IPv6"), 1, _T("Log Timestamps"), 1,
_T("VMS display all revisions"), 1, _T("Last Server UTF8"), 1,
_T("Last Server account"), 0
};
void COptions::SetOption(int nOptionID,int value)
{
ASSERT(options[nOptionID-1].nType==1);
Init();
CSingleLock lock(&m_Sync, TRUE);
m_OptionsCache[nOptionID-1].bCached=TRUE;
m_OptionsCache[nOptionID-1].createtime=CTime::GetCurrentTime();
m_OptionsCache[nOptionID-1].value=value;
m_OptionsCache[nOptionID-1].nType=1;
if (m_bUseXML)
{
m_markup.ResetPos();
if (!m_markup.FindChildElem( _T("Settings") ))
m_markup.AddChildElem( _T("Settings") );
CString valuestr;
valuestr.Format( _T("%d"), value);
m_markup.IntoElem();
BOOL res=m_markup.FindChildElem();
while (res)
{
CString name=m_markup.GetChildAttrib( _T("name"));
if (!_tcscmp(name, options[nOptionID-1].name))
{
m_markup.SetChildAttrib(_T("name"), options[nOptionID-1].name);
m_markup.SetChildAttrib(_T("type"), _T("numeric"));
m_markup.SetChildData(valuestr);
break;
}
res=m_markup.FindChildElem();
}
if (!res)
{
m_markup.InsertChildElem( _T("Item"), valuestr );
m_markup.SetChildAttrib(_T("name"), options[nOptionID-1].name);
m_markup.SetChildAttrib(_T("type"), _T("numeric"));
}
m_markup.Save(GetXmlFileName());
}
else
{
unsigned char tmp[4];
memcpy(tmp,&value,4);
HKEY key;
if (RegCreateKeyEx(HKEY_CURRENT_USER, _T("Software\\FileZilla"), 0, 0, REG_OPTION_NON_VOLATILE, KEY_WRITE, 0, &key, NULL)==ERROR_SUCCESS)
{
RegSetValueEx(key, options[nOptionID-1].name, 0, REG_DWORD, tmp, 4);
RegCloseKey(key);
}
}
}
void COptions::SetOption(int nOptionID, CString value)
{
ASSERT(!options[nOptionID-1].nType);
Init();
CSingleLock lock(&m_Sync, TRUE);
m_OptionsCache[nOptionID-1].bCached=TRUE;
m_OptionsCache[nOptionID-1].createtime=CTime::GetCurrentTime();
m_OptionsCache[nOptionID-1].str=value;
m_OptionsCache[nOptionID-1].nType=0;
if (m_bUseXML)
{
m_markup.ResetPos();
if (!m_markup.FindChildElem( _T("Settings") ))
m_markup.AddChildElem( _T("Settings") );
CString str;
m_markup.IntoElem();
str=m_markup.GetTagName();
BOOL res=m_markup.FindChildElem();
while (res)
{
CString name=m_markup.GetChildAttrib( _T("name"));
if (!_tcscmp(name, options[nOptionID-1].name))
{
m_markup.SetChildAttrib(_T("name"), options[nOptionID-1].name);
m_markup.SetChildAttrib(_T("type"), _T("string"));
m_markup.SetChildData(value);
break;
}
res=m_markup.FindChildElem();
}
if (!res)
{
m_markup.InsertChildElem( _T("Item"), value );
m_markup.SetChildAttrib(_T("name"), options[nOptionID-1].name);
m_markup.SetChildAttrib(_T("type"), _T("string"));
}
m_markup.Save(GetXmlFileName());
}
else
{
LPTSTR tmp=new TCHAR[value.GetLength()+1];
LPCTSTR str=value;
_tcscpy(tmp,str);
HKEY key;
if (RegCreateKeyEx(HKEY_CURRENT_USER, _T("Software\\FileZilla"), 0, 0, REG_OPTION_NON_VOLATILE, KEY_WRITE, 0, &key, NULL)==ERROR_SUCCESS)
{
RegSetValueEx(key, options[nOptionID-1].name, 0, REG_SZ, (unsigned char *)tmp, (_tcslen(tmp)+1)*sizeof(TCHAR) );
RegCloseKey(key);
}
delete [] tmp;
}
}
CString COptions::GetOption(int nOptionID)
{
ASSERT(!options[nOptionID-1].nType);
Init();
CSingleLock lock(&m_Sync, TRUE);
CString res = "";
if (m_OptionsCache[nOptionID-1].bCached)
{
ASSERT(!m_OptionsCache[nOptionID-1].nType);
CTimeSpan span=CTime::GetCurrentTime()-m_OptionsCache[nOptionID-1].createtime;
if (span.GetTotalSeconds()<120 || m_bUseXML)
res=m_OptionsCache[nOptionID-1].str;
else
m_OptionsCache[nOptionID-1].bCached=FALSE;
}
if (!m_OptionsCache[nOptionID-1].bCached)
{
HKEY key;
unsigned long tmp=2000;
unsigned char *buffer=new unsigned char[2000];
BOOL exists = FALSE;
if (RegOpenKey(HKEY_CURRENT_USER, _T("Software\\FileZilla"), &key)==ERROR_SUCCESS)
{
memset(buffer, 0, 2000);
if (RegQueryValueEx(key, options[nOptionID-1].name, NULL, NULL, buffer, &tmp)==ERROR_SUCCESS)
{
exists=TRUE;
res=(LPTSTR)buffer;
}
RegCloseKey(key);
}
if (!exists || (!_ttoi(res) && nOptionID==OPTION_RUNINSECUREMODE))
{
memset(buffer, 0, 2000);
if (RegOpenKey(HKEY_LOCAL_MACHINE, _T("Software\\FileZilla") ,&key)==ERROR_SUCCESS)
{
if (RegQueryValueEx(key, options[nOptionID-1].name, NULL, NULL, buffer, &tmp)==ERROR_SUCCESS)
res = buffer;
RegCloseKey(key);
}
}
delete [] buffer;
}
if (res == "")
{
if (nOptionID == OPTION_ASCIIFILES)
res = "ASP;BAT;C;CFM;CGI;CONF;CPP;CSS;DHTML;DIZ;H;HPP;HTM;HTML;INC;JS;MAK;NFO;PAS;PATCH;PHP;PHTML;PINERC;PL;QMAIL;SH;SHTML;SQL;TCL;TPL;TXT;VBS;";
else if (nOptionID == OPTION_GSSSERVERS)
res = _T("mit.edu;");
else if (nOptionID == OPTION_IDENTSYSTEM)
res = _T("UNIX");
else if (nOptionID == OPTION_ANONPWD)
res = _T("anon@");
}
if (!m_OptionsCache[nOptionID-1].bCached)
{
m_OptionsCache[nOptionID-1].bCached=TRUE;
m_OptionsCache[nOptionID-1].createtime=CTime::GetCurrentTime();
m_OptionsCache[nOptionID-1].str=res;
m_OptionsCache[nOptionID-1].nType=0;
}
return res;
}
int COptions::GetOptionVal(int nOptionID)
{
ASSERT(options[nOptionID-1].nType==1);
Init();
CSingleLock lock(&m_Sync, TRUE);
int val=0;
if (m_OptionsCache[nOptionID-1].bCached)
{
ASSERT(m_OptionsCache[nOptionID-1].nType==1);
CTimeSpan span=CTime::GetCurrentTime()-m_OptionsCache[nOptionID-1].createtime;
if (span.GetTotalSeconds()<120 || m_bUseXML)
return m_OptionsCache[nOptionID-1].value;
else
m_OptionsCache[nOptionID-1].bCached=FALSE;
}
int error=1;
if (!m_OptionsCache[nOptionID-1].bCached)
{
error=1;
HKEY key;
unsigned char *buffer = new unsigned char[200];
unsigned long tmp=100;
if (RegOpenKey(HKEY_CURRENT_USER, _T("Software\\FileZilla") ,&key)==ERROR_SUCCESS)
{
DWORD type;
if (RegQueryValueEx(key, options[nOptionID-1].name, NULL, &type, buffer, &tmp)==ERROR_SUCCESS)
{
if (type == REG_DWORD)
{
if (tmp<=4)
{
memcpy(&val,buffer,tmp);
error=0;
}
}
else
{
int i;
LPTSTR str = (LPTSTR)buffer;
for (i = 0; i < 100; i++)
{
if (!str[i])
break;
}
if (i == 100)
str[99] = 0;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?