?? inetserverdlg.cpp.bak
字號:
{
closesocket( hServer ); WSACleanup();
return 1;
}
closesocket( hServer );
WSACleanup();
return 0;
}
int SendErrorMail(int curitem)
{
//we only try to send error messages once back to the sender
//create a temponary mail message for him:
mkdir("temp");
return 0;
}
void CAboutDlg::OnReg() //Writes the default values to the registry
{
if (MessageBox("This will set the default values\nto the registry, and enable all ports. Proceed?","Question",MB_YESNO|MB_ICONQUESTION) == 7) return;
char key[255];
sprintf(key,"Software\\InetServ");
HKEY hKey;
DWORD dwDisposition;
RegCreateKeyEx(HKEY_LOCAL_MACHINE,
key,
0,
"",
REG_OPTION_NON_VOLATILE,
KEY_ALL_ACCESS,
NULL, //Security
&hKey,
&dwDisposition );
RegCloseKey(hKey);
SetReg("Software\\InetServ","LogScreen" ,"TRUE");
SetReg("Software\\InetServ","ShowBusy" ,"TRUE");
SetReg("Software\\InetServ","LogFile" ,"TRUE");
SetReg("Software\\InetServ","Directory" ,"");
SetReg("Software\\InetServ","DaytimeEnabled" ,"TRUE");
SetReg("Software\\InetServ","MailEnabled" ,"TRUE");
SetReg("Software\\InetServ","TelnetEnabled" ,"FALSE");
SetReg("Software\\InetServ","MapiEnabled" ,"TRUE"); //- MAPI Enabled
SetReg("Software\\InetServ","AlltoOneForward" ,"FALSE");
SetReg("Software\\InetServ","DayTimePort" ,"13");
SetReg("Software\\InetServ","Pop3Port" ,"110");
SetReg("Software\\InetServ","SmtpPort" ,"25");
SetReg("Software\\InetServ","TelnetPort" ,"23");
SetReg("Software\\InetServ","UserForward","");
SetReg("Software\\InetServ","ForwardUser" ,"");
SetReg("Software\\InetServ","AllMailsTo" ,"");
SetReg("Software\\InetServ","LogAll" ,"FALSE");
SetReg("Software\\InetServ","RehashTime" ,"5");
MessageBox("Configuration written successful\r\nProgram must be restarted");
}
void CAboutDlg::OnOk()
{
CDialog::OnOK();
}
/////////////////////////////////////////////////////////////////////////////
// CInetServerDlg dialog
CInetServerDlg::CInetServerDlg(CWnd* pParent /*=NULL*/)
: CDialog(CInetServerDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CInetServerDlg)
m_log = _T("");
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CInetServerDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CInetServerDlg)
DDX_Control(pDX, IDC_LOG, mc_log);
DDX_Control(pDX, IDC_LIST2, mc_list1);
DDX_Text(pDX, IDC_LOG, m_log);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CInetServerDlg, CDialog)
//{{AFX_MSG_MAP(CInetServerDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_POP3, OnPop3)
ON_BN_CLICKED(IDC_SERVICE, OnService)
ON_BN_CLICKED(IDC_ABOUT, OnAbout)
ON_WM_DESTROY()
ON_BN_CLICKED(IDC_MAPISETUP, OnMapisetup)
ON_WM_TIMER()
ON_MESSAGE(WM_MY_TRAY_NOTIFICATION, OnTrayNotification)
ON_MESSAGE(WM_ADDLOG , OnAddLog)
ON_MESSAGE(WM_CLOSEWEB , OnWebClose)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CInetServerDlg message handlers
void CInetServerDlg::ChngList () //always called on connect/disconnect
{
char tempstr1[255];
sprintf(tempstr1,"%s",GetReg("Software\\InetServ","ShowBusy"));
if (strcmp(tempstr1,"TRUE") == 0)
{
UpdateData(TRUE);
HICON myicon;
if (mc_list1.GetCount() == 0)
{
myicon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
SetWindowText ("InetServer " CURVER );
}
else
{
myicon = AfxGetApp()->LoadIcon(IDI_BUSY);
SetWindowText ("InetServer " CURVER " (busy)");
}
SetIcon(myicon,TRUE);
SetIcon(myicon,FALSE);
UpdateData(FALSE);
UINT uCbMsg = WM_MY_TRAY_NOTIFICATION;
NOTIFYICONDATA m_nid;
UINT uID = 1;
memset(&m_nid, 0 , sizeof(m_nid));
m_nid.cbSize = sizeof(m_nid);
m_nid.uID = uID;
m_nid.hWnd = this->GetSafeHwnd();
m_nid.uCallbackMessage = uCbMsg;
if (mc_list1.GetCount() == 0)
m_nid.hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
else
m_nid.hIcon = AfxGetApp()->LoadIcon(IDI_BUSY);
m_nid.uFlags = NIF_ICON|NIF_MESSAGE;
DWORD msg = NIM_MODIFY;
BOOL bRet = Shell_NotifyIcon(msg, &m_nid);
int len = mc_log.GetWindowTextLength();
mc_log.SetSel(len,len);
}
}
void CInetServerDlg::AddToLogAll(CString expr)
{
char tempstr[255];
sprintf(tempstr,"%s",GetReg("Software\\InetServ","LogAll"));
if (strcmpi(tempstr,"TRUE") == 0) AddLog(expr);
}
void CInetServerDlg::AddLog (CString expr)//log to screen or file
{
CTime t = CTime::GetCurrentTime();
char tempstr1[255];
sprintf(tempstr1,"%s",GetReg("Software\\InetServ","LogScreen"));
if (strcmp(tempstr1,"TRUE") == 0)
{
char tempstr[255];
sprintf(tempstr,"%02i/%02i/%02i -%02i:%02i:%02i: ",t.GetMonth(),t.GetDay(),t.GetYear(),t.GetHour(),t.GetMinute(),t.GetSecond());
UpdateData(TRUE);
m_log = m_log + tempstr + expr + "\r\n";
UpdateData(FALSE);
int len = mc_log.GetWindowTextLength();
mc_log.SetSel(len,len);
}
sprintf(tempstr1,"%s",GetReg("Software\\InetServ","LogFile"));
if (strcmp(tempstr1,"TRUE") == 0)
{
FILE *x;
char logf[255];
mkdir ("logfiles");
sprintf(logf,"logfiles\\%02i%02i%02i.log",t.GetMonth(),t.GetDay(),t.GetYear());
if( (x = fopen(logf, "at" )) != NULL )
{
fprintf(x,"%02i:%02i:%02i: %s\r\n",t.GetHour(),t.GetMinute(),t.GetSecond(),expr);
fclose(x);
}
}
for (int y= 0;y<=SocketList.GetSize()-1;y++)
{
if (SocketList[y].showlog== TRUE)
{
char logf[255];
sprintf(logf,"%02i/%02i/%02i - %02i:%02i:%02i: %s\r\n",t.GetMonth(),t.GetDay(),t.GetYear(),t.GetHour(),t.GetMinute(),t.GetSecond(),expr);
SocketList[y].pSock->Send (logf,strlen(logf),0);
}
}
}
//the following is always called on SMTP disconnect
//(well, only if the data command was ended correctly (2.4);-)
void CInetServerDlg::ProcessNewMail(CString CTL, CString Fname,CString Sender)
{
char tempstr4[255];
char all_dir[255];
FILE *mapistream = 0 ; //- MAPI
BOOL fwd_mapi = FALSE ; //- MAPI
char mapi_enbld[255]; //- MAPI
sprintf(mapi_enbld,"%s",GetReg("Software\\InetServ","MapiEnabled")); //- MAPI
sprintf(tempstr4,"%s",GetReg("Software\\InetServ","AlltoOneForward"));
if (strcmp(tempstr4,"TRUE") == 0) //yep, copy all to this one.
{
sprintf(tempstr4,"%s",GetReg("Software\\InetServ","AllMailsTo"));
sprintf(all_dir,"%s",tempstr4);
//this one should may be a extra thread:
CopyFile("mail\\" + Fname,"mail\\" + (CString)all_dir + "\\" + Fname,FALSE );
}
if (Fname == "") return;
CString rcpt;
char srcpt[255];
char srcptip[255];
FILE *stream;
CString rcptFull;
char tempstr[255];
if( (stream = fopen("mail\\" + CTL, "rt" )) != NULL )
{
while (!feof(stream))
{
fgets(tempstr,255,stream);
if (!feof(stream))
{
if (tempstr[strlen(tempstr)-2] == '\n') tempstr[strlen(tempstr)-2] = '\0';
if (tempstr[strlen(tempstr)-2] == '\r') tempstr[strlen(tempstr)-2] = '\0';
rcptFull = tempstr;
int beginsign= -1;
int endsign= -1;
int atsign= -1;
for (UINT i = 0;i<= strlen(tempstr);i++)
{
if (tempstr[i] == '@') atsign = i;
if (tempstr[i] == '<') beginsign = i;
if (tempstr[i] == '>') endsign = i;
}
if ((beginsign== -1) || (endsign== -1) || (atsign== -1))
{
char err[255];
sprintf(err,"wrong reciepment format: %s (mail\\unknown\\%s)",tempstr,Fname);
AddLog(err);
LogError(err);
CopyFile("mail\\" + Fname,"mail\\unknown\\" + Fname,FALSE );
}
else
{
beginsign++;
for (int z = beginsign;z<=atsign;z++)
{
srcpt[z-beginsign] = tempstr[z];
}
srcpt[z-beginsign-1] = '\0';
atsign++;
for (z = atsign;z<=endsign;z++)
{
srcptip[z-atsign] = tempstr[z];
}
srcptip[z-atsign-1] = '\0';
rcpt = srcptip;
BOOL aka_ok = FALSE;
BOOL rcpt_ok = FALSE;
for (int a = 0;a<= MyAkaList.GetSize()-1;a++)
{
if (strcmpi(MyAkaList[a].Text,rcpt) == 0) aka_ok = TRUE;
}
for (a = 0;a<= MailUserList.GetSize()-1;a++)
{
if (strcmpi(MailUserList[a].Username,srcpt)== 0) rcpt_ok = TRUE;
}
if ((aka_ok) && (rcpt_ok))
{
if (strcmp(mapi_enbld,"TRUE") == 0) //- MAPI forward check before sending mail
{
for (a = 0;a<= MapiUserList.GetSize()-1;a++)
{
if (strcmpi(MapiUserList[a].Popuser,srcpt) == 0)
{
if ( ! fwd_mapi ) // file not opened
{
if( (mapistream = fopen("cmcqueue\\" + Fname, "at" )) != NULL )
{
fwd_mapi = TRUE ;
}
// TODO else failed eror message
}
if ( fwd_mapi )
{
fprintf(mapistream,"X-CMC_TO:%s;%s;\n",MapiUserList[a].Mapiuser,MapiUserList[a].Mapiaddres);
char logstr[255];
sprintf(logstr,"%s Queued for Mapi: %s",tempstr,MapiUserList[a].Mapiuser);
AddLog(logstr);
}
}
}
} //- MAPI end of if for mapi forward
else
{
rcpt = srcpt;
if (CopyFile("mail\\" + Fname,"mail\\" + rcpt + "\\" + Fname,FALSE ) == FALSE)
{
CopyFile("mail\\" + Fname,"mail\\unknown\\" + Fname,FALSE );
char logstr[255];
sprintf(logstr,"Could not send %s",tempstr);
AddLog(logstr);
LogError(logstr);
}
else
{
char logstr[255];
sprintf(logstr,"Mail send to: %s",tempstr);
AddLog(logstr);
}
}
}
else
{
//FORWARD Check
BOOL fwd =FALSE;
BOOL listmail = FALSE;
if (aka_ok == TRUE)
{
FILE *fwdfp;
fwdfp = fopen ("forward.ctl","rt");
if (fwdfp != NULL)
{
char fwdstr[255];
char fwdsrc[255];
char fwddest[255];
sprintf(fwdstr,"");
while (!feof(fwdfp))
{
sprintf(fwdstr,"");
fgets(fwdstr,255,fwdfp);
if (strlen(fwdstr) > 3)
{
if (fwdstr[strlen(fwdstr)-2] == '\n') fwdstr[strlen(fwdstr)-2] = '\0';
if (fwdstr[strlen(fwdstr)-2] == '\r') fwdstr[strlen(fwdstr)-2] = '\0';
sscanf(fwdstr,"%s %s",fwdsrc,fwddest);
rcpt = srcpt;
if (strcmpi(fwdsrc,rcpt) == 0)
{
fwd =TRUE;
char mkd[255];
sprintf(mkd,"mail\\%s",fwddest);
mkdir (mkd);
rcpt = fwddest;
if (CopyFile("mail\\" + Fname,"mail\\" + rcpt + "\\" + Fname,FALSE ) == FALSE)
{
char logstr[255];
sprintf(logstr,"Could not send mail (read error): %s (mail\\unknown\\%s)\n",tempstr,Fname);
LogError(logstr);
CopyFile("mail\\" + Fname,"mail\\unknown\\" + Fname,FALSE );
sprintf(logstr,"Could not send %s",tempstr);
AddLog(logstr);
}
else
{
char logstr[255];
sprintf(logstr,"Mail forward: %s->%s",fwdsrc,fwddest);
AddLog(logstr);
}
}
}
}
fclose(fwdfp);
//end alias-check
}
else
{
char logstr[255];
sprintf(logstr,"Cant read forward.ctl! Mail marked as bad.");
AddLog(logstr);
}
//is the user a list?
char curname[255];
strlwr(srcpt);
HANDLE hFind;
WIN32_FIND_DATA findData = {0};
hFind = FindFirstFile ("lists\\*.lst", &findData);
if (hFind != INVALID_HANDLE_VALUE)
{
do
{
if (findData.cFileName[0] != '.')
{
sprintf(curname,"%s",findData.cFileName);
strlwr(curname);
if ((curname[strlen(curname)-3] == 'l') &&
(curname[strlen(curname)-2] == 's') &&
(curname[strlen(curname)-1] == 't')
)
{
curname[strlen(curname)-4] = '\0';
if (stricmp(srcpt,curname) == 0) //valid list
{
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -