📄 settings.cpp
字号:
/*
+-----------------------------------------------------------------------------+
| |
| settings.cpp |
| Last change: yyyy-mm-dd |
| |
| Author: Jan Krumsiek |
| eMail: proxy@krumsiek.com |
| Web: http://www.krumsiek.com/proxy |
| |
| Copyright 2003 - Jan Krumsiek |
| This source code can freely be modified and redistributed. No liability |
| whatsoever is taken by the author for any use of this software. |
| |
| Description: |
| This module is responsible for loading all settings from the config files |
| |
+-----------------------------------------------------------------------------+
*/
#include "proxymain.h"
#include "filesystem.h"
#include "rulefile.h"
#include "cfgfiles.h"
#include "settings.h"
#ifdef WIN32
#include "windows.h"
#endif
MAINSETTINGS mainset;
MAINSETTYPE MStrToCommand(CHARPTR command);
int LoadSettings()
// This is the main procedure that loads and stores main settings
{
// notification msg
cout << "Loading settings..." << flush;
// initialize with struct 0
memset(&mainset,0,sizeof(mainset));
// Open main config file and walk through all commands
COMMAND cur;
// retrieve name of main config file (depends on OS)
CHARPTR mainfile = GetMainConfigName();
// and get directory of this file
CHARPTR maindir = ExtractDir(mainfile);
// temporary var
CHARPTR fullpath;
// get app dir
CHARPTR appdir = GetAppDir();
int ret = OpenConfigFile(mainfile);
int templine, templine2;
if (ret == 0)
{
// error!
cout << endl << "Error: Cannot open main config file 'main.conf'" << flush;
// terminate app
ErrorAbort();
}
cur = GetNextFullCommand();
while (cur.command != 0)
{
switch (MStrToCommand(cur.command))
{
case MS_EMAILRULES:
// At this point, we just save the full path to the rule file
// as only one (config) file can be opened at a time
mainset.emailsettings.rulefile = CombinePaths(maindir,cur.paras[0]);
// save line of rulefile setting (for later possible error information)
templine = cur.line;
break;
case MS_EMAILPORT:
// email listen port, simply save it in settings struct
mainset.emailsettings.port = atoi(cur.paras[0]);
break;
case MS_EMAILTRASH:
// email trash dir, blocked msgs are stored here
#ifdef WIN32
// in WIN32 we use the application dir as base directory for trash-dir
mainset.emailsettings.trashdir =
CombinePaths(appdir, cur.paras[0]);
// ensure that this directory exists
CreateDir(mainset.emailsettings.trashdir);
#endif
break;
case MS_EMAILKEEPTRASH:
// "emailkeeptrash" sets how many days blocked messages are stored
mainset.emailsettings.keeptrash = atoi(cur.paras[0]);
break;
case MS_EMAILIPRULES:
// "emailiprules" sets email ip rules file
// build full path
fullpath = CombinePaths(maindir,cur.paras[0]);
// store path for now
mainset.emailsettings.iprulefile = fullpath;
templine2 = cur.line;
break;
default:
cout << "\nError in " << mainfile << "(" << cur.line << ")"
<< ": Unknown command '" << cur.command << "'";
ErrorAbort();
}
cur = GetNextFullCommand();
}
ReleaseConfigFile();
// Email rules, now load rules and save in settings struct
mainset.emailsettings.rules = LoadRules(mainset.emailsettings.rulefile);
if (mainset.emailsettings.rules == 0) // An error occured
{
cout << "\nError in " << mainfile << "(" << templine << ")"
<< ": Cannot open file '" << mainset.emailsettings.rulefile << "' or errors occured in this file";
ErrorAbort();
return false;
}
// now load IP rules
if (mainset.emailsettings.iprulefile != 0)
{
// load rules
mainset.emailsettings.iprules = LoadIPRules(mainset.emailsettings.iprulefile);
// error?
if (mainset.emailsettings.iprules == 0)
{
ErrorAbort();
return 0;
}
}
// set archive directory
#ifdef WIN32
// in WIN32 it's a sub-directory "archive" the application directory
mainset.emailsettings.archivedir =
ConnectStrings(appdir,"archive\\\0");
// ensure that this dir exists
CreateDir(mainset.emailsettings.archivedir);
#endif
// notification msg
cout << "Done\n\0" << flush;
// clean up
delete mainfile;
#if WIN32
delete appdir;
#endif
return true;
}
MAINSETTYPE MStrToCommand(CHARPTR command)
// converts a string-command from the main config file
// to its ID (type MAINSETTYPE)
{
// email rules file
if (stricmp(command,"emailrules") == 0)
return MS_EMAILRULES;
// email listen port
if (stricmp(command,"emailport") == 0)
return MS_EMAILPORT;
// email trash
if (stricmp(command,"emailtrash") == 0)
return MS_EMAILTRASH;
// email keep trash
if (stricmp(command,"emailkeeptrash") == 0)
return MS_EMAILKEEPTRASH;
// email ip rules
if (stricmp(command,"emailiprules") == 0)
return MS_EMAILIPRULES;
return MS_UNKNOWN;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -