summaryrefslogtreecommitdiffabout
path: root/PumpKINDlg.cpp
Side-by-side diff
Diffstat (limited to 'PumpKINDlg.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--PumpKINDlg.cpp109
1 files changed, 101 insertions, 8 deletions
diff --git a/PumpKINDlg.cpp b/PumpKINDlg.cpp
index b6b8a36..4cb1633 100644
--- a/PumpKINDlg.cpp
+++ b/PumpKINDlg.cpp
@@ -7,2 +7,3 @@
+#include "ACLTargetCombo.h"
#include "PropsServer.h"
@@ -10,2 +11,3 @@
#include "PropsSounds.h"
+#include "PropsACL.h"
#include "ConfirmRRQDlg.h"
@@ -81,2 +83,6 @@ CPumpKINDlg::CPumpKINDlg(CWnd* pParent /*=NULL*/)
{
+ m_Listener.m_Daddy = this;
+
+ m_bListen = TRUE;
+
m_ListenPort = 69;
@@ -109,2 +115,11 @@ CPumpKINDlg::CPumpKINDlg(CWnd* pParent /*=NULL*/)
ASSERT(m_Trayer);
+ /* Ensure we're backwards compatible */
+ ASSERT(CPumpKINDlg::rrqGiveAll==0);
+ ASSERT(CPumpKINDlg::rrqAlwaysConfirm==1);
+ ASSERT(CPumpKINDlg::rrqDenyAll==2);
+ ASSERT(CPumpKINDlg::wrqTakeAll==0);
+ ASSERT(CPumpKINDlg::wrqConfirmIfExists==1);
+ ASSERT(CPumpKINDlg::wrqAlwaysConfirm==2);
+ ASSERT(CPumpKINDlg::wrqDenyAll==3);
+ /* -- */
LoadSettings();
@@ -116,2 +131,3 @@ void CPumpKINDlg::DoDataExchange(CDataExchange* pDX)
//{{AFX_DATA_MAP(CPumpKINDlg)
+ DDX_Control(pDX, IDC_LISTENING, m_ListenCtl);
DDX_Control(pDX, IDC_ABORT, m_AbortCtl);
@@ -153,2 +169,4 @@ BEGIN_MESSAGE_MAP(CPumpKINDlg, CDialog)
ON_BN_CLICKED(ID_HELP, OnHelp)
+ ON_BN_CLICKED(IDC_LISTENING, OnListening)
+ ON_COMMAND(ID_TRAY_LISTEN, OnTrayListen)
//}}AFX_MSG_MAP
@@ -219,2 +237,4 @@ CRect rc, drc;
+ m_ListenCtl.SetCheck(m_Listener.m_bListen?1:0);
+
// CG: The following block was added by the ToolTips component.
@@ -326,7 +346,6 @@ int CPumpKINDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
- m_Listener.m_Daddy=this;
- if(!m_Listener.Create(m_ListenPort,SOCK_DGRAM)){
+ if(!m_Listener.SetListen(m_bListen)) {
+ m_bListen=FALSE;
TRACE0("Failed to create socket\n");
AfxMessageBox(IDS_BOX_CANTBIND,MB_OK|MB_ICONEXCLAMATION);
- return -1;
}
@@ -666,3 +685,3 @@ CString lFile = localFile?localFile:m_FileName;
UpdateList();
- if(!localFile){ // Check only if server
+ if(!localFile){ // Check only for incoming requests
if(CheckBadRelativeness(m_FileName)){
@@ -671,3 +690,6 @@ CString lFile = localFile?localFile:m_FileName;
}
- switch(m_Daddy->m_RRQMode){
+ int atar=m_Daddy->m_aclRules.FindTarget(acl_rule::opRRQ,m_Peer.sin_addr.s_addr);
+ if(atar<0)
+ atar = m_Daddy->m_RRQMode;
+ switch(atar){
case CPumpKINDlg::rrqGiveAll:
@@ -677,2 +699,4 @@ CString lFile = localFile?localFile:m_FileName;
break;
+ default:
+ TRACE1("Unexpected access target: %d\n",atar);
case CPumpKINDlg::rrqDenyAll:
@@ -1109,3 +1133,3 @@ int i = m_Daddy->m_List.FindItem(&lvf);
-void CPumpKINDlg::LogLine(LPCTSTR str)
+void CPumpKINDlg::LogLineToScreen(LPCTSTR str)
{
@@ -1165,2 +1189,3 @@ CPropsNetwork network;
CPropsSounds sounds;
+CPropsACL acl;
@@ -1171,2 +1196,3 @@ CPropsSounds sounds;
server.m_PromptTimeOut=m_PromptTimeOut;
+ server.m_LogFile=m_LogFile;
@@ -1181,2 +1207,4 @@ CPropsSounds sounds;
+ acl.m_rulist = m_aclRules;
+
cps.AddPage(&server);
@@ -1184,2 +1212,3 @@ CPropsSounds sounds;
cps.AddPage(&sounds);
+ cps.AddPage(&acl);
if(cps.DoModal()==IDOK){
@@ -1190,2 +1219,3 @@ CPropsSounds sounds;
m_PromptTimeOut=server.m_PromptTimeOut;
+ m_LogFile=server.m_LogFile;
@@ -1199,2 +1229,6 @@ CPropsSounds sounds;
m_bnwAbort = sounds.m_Abort;
+
+ m_aclRules = acl.m_rulist;
+
+ m_lastlogerr.Empty();
}
@@ -1246,4 +1280,6 @@ CString fn = localFile?ApplyRootGently(localFile):ApplyRoot(lf);
m_Rename=exists=FALSE;
- // *** m_WRQMode only if server transfer
- switch(m_Daddy->m_WRQMode){
+ int atar=m_Daddy->m_aclRules.FindTarget(acl_rule::opWRQ,m_Peer.sin_addr.s_addr);
+ if(atar<0)
+ atar=m_Daddy->m_WRQMode;
+ switch(atar){
case CPumpKINDlg::wrqTakeAll:
@@ -1270,2 +1306,4 @@ CString fn = localFile?ApplyRootGently(localFile):ApplyRoot(lf);
}
+ default:
+ TRACE1("Unexpected access target: %d\n",atar);
case CPumpKINDlg::wrqDenyAll:
@@ -1797,2 +1835,3 @@ CWinApp *app = AfxGetApp();
ASSERT(app);
+ m_bListen=app->GetProfileInt("TFTPSettings","Listen",m_bListen);
m_bnwRequest=app->GetProfileString("BellsNWhistles","Request",m_bnwRequest);
@@ -1807,2 +1846,3 @@ CWinApp *app = AfxGetApp();
m_TFTPRoot=app->GetProfileString("TFTPSettings","TFTPRoot",m_TFTPRoot);
+ m_LogFile=app->GetProfileString("General","LogFile",m_LogFile);
m_TFTPTimeOut=CTimeSpan(app->GetProfileInt("TFTPSettings","TFTPTimeout",m_TFTPTimeOut.GetTotalSeconds()));
@@ -1818,2 +1858,3 @@ CWinApp *app = AfxGetApp();
::SetCurrentDirectory(m_TFTPRoot);
+ m_aclRules.LoadProfile(app);
}
@@ -1824,2 +1865,3 @@ CWinApp *app = AfxGetApp();
ASSERT(app);
+ app->WriteProfileInt("TFTPSettings","Listen",m_bListen);
app->WriteProfileString("BellsNWhistles","Request",m_bnwRequest);
@@ -1834,2 +1876,3 @@ CWinApp *app = AfxGetApp();
app->WriteProfileString("TFTPSettings","TFTPRoot",m_TFTPRoot);
+ app->WriteProfileString("General","LogFile",m_LogFile);
app->WriteProfileInt("TFTPSettings","TFTPTimeout",m_TFTPTimeOut.GetTotalSeconds());
@@ -1839,2 +1882,3 @@ CWinApp *app = AfxGetApp();
app->WriteProfileInt("UISettings","Visble",m_bShown);
+ m_aclRules.SaveProfile(app);
}
@@ -1986 +2030,50 @@ void CPumpKINDlg::OnHelp()
}
+
+BOOL CListenSocket::SetListen(BOOL b) {
+ ASSERT(m_Daddy);
+ if(b==m_bListen)
+ return TRUE;
+ if(b) {
+ if(!Create(m_Daddy->m_ListenPort,SOCK_DGRAM))
+ return FALSE;
+ return m_bListen=TRUE;
+ }else{
+ Close(); m_bListen=FALSE;
+ return TRUE;
+ }
+}
+
+void CPumpKINDlg::OnListening()
+{
+ if(!m_Listener.SetListen(m_ListenCtl.GetCheck()==1)) {
+ TRACE0("Failed to create socket\n");
+ AfxMessageBox(IDS_BOX_CANTBIND,MB_OK|MB_ICONEXCLAMATION);
+ }
+ m_ListenCtl.SetCheck(m_Listener.m_bListen?1:0);
+ m_bListen=m_Listener.m_bListen;
+}
+
+void CPumpKINDlg::OnTrayListen()
+{
+ if(!m_Listener.SetListen(!m_Listener.m_bListen)) {
+ TRACE0("Failed to create socket\n");
+ AfxMessageBox(IDS_BOX_CANTBIND,MB_OK|MB_ICONEXCLAMATION);
+ }
+ m_ListenCtl.SetCheck(m_Listener.m_bListen?1:0);
+ m_bListen=m_Listener.m_bListen;
+}
+
+void CPumpKINDlg::LogLine(LPCTSTR str)
+{
+ LogLineToScreen(str);
+ if(!m_LogFile.IsEmpty()) {
+ if(!Klever::LogRecord((LPCTSTR)m_LogFile,str)) {
+ if(m_lastlogerr!=m_LogFile) {
+ CString tmp;
+ tmp.Format(IDS_LOG_LOGERROR,m_LogFile);
+ LogLineToScreen(tmp);
+ m_lastlogerr=m_LogFile;
+ }
+ }
+ }
+}