summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--ACLTargetCombo.cpp85
-rw-r--r--ACLTargetCombo.h42
-rw-r--r--COPYING2
-rw-r--r--PropsACL.cpp290
-rw-r--r--PropsACL.h71
-rw-r--r--PropsServer.cpp19
-rw-r--r--PropsServer.h3
-rw-r--r--PumpKINDlg.cpp109
-rw-r--r--PumpKINDlg.h178
-rw-r--r--Trayer.cpp7
-rw-r--r--Trayer.h1
-rw-r--r--help/pumpkin.cnt1
-rw-r--r--help/pumpkin.rtf15
-rw-r--r--help/pumpkin.xml17
-rw-r--r--install/Install.clw35
-rw-r--r--install/install.cpp2
-rw-r--r--install/install.rc10
-rw-r--r--pumpkin.clw78
-rw-r--r--pumpkin.mak362
-rw-r--r--pumpkin.rc169
-rw-r--r--res/down.icobin0 -> 766 bytes
-rw-r--r--res/remove.icobin0 -> 766 bytes
-rw-r--r--res/up.icobin0 -> 766 bytes
-rw-r--r--resource.h29
24 files changed, 1394 insertions, 131 deletions
diff --git a/ACLTargetCombo.cpp b/ACLTargetCombo.cpp
new file mode 100644
index 0000000..cdbd075
--- a/dev/null
+++ b/ACLTargetCombo.cpp
@@ -0,0 +1,85 @@
1// ACLTargetCombo.cpp : implementation file
2//
3
4#include "stdafx.h"
5#include "PumpKIN.h"
6#include "PumpKINDlg.h"
7#include "ACLTargetCombo.h"
8
9#ifdef _DEBUG
10#define new DEBUG_NEW
11#undef THIS_FILE
12static char THIS_FILE[] = __FILE__;
13#endif
14
15/////////////////////////////////////////////////////////////////////////////
16// CACLTargetCombo
17
18CACLTargetCombo::CACLTargetCombo()
19: m_op(-1)
20{
21}
22
23CACLTargetCombo::~CACLTargetCombo()
24{
25}
26
27
28BEGIN_MESSAGE_MAP(CACLTargetCombo, CComboBox)
29 //{{AFX_MSG_MAP(CACLTargetCombo)
30 // NOTE - the ClassWizard will add and remove mapping macros here.
31 //}}AFX_MSG_MAP
32END_MESSAGE_MAP()
33
34/////////////////////////////////////////////////////////////////////////////
35// CACLTargetCombo message handlers
36
37void CACLTargetCombo::SetOp(int op)
38{
39 m_op=op;
40 ResetContent();
41 switch(op) {
42 case tftp::opRRQ:
43 m_tmap.RemoveAll();
44 SetItemData(m_tmap[acl_rule::rrqNone]=AddString("fallback to global"),acl_rule::rrqNone);
45 SetItemData(m_tmap[acl_rule::rrqDeny]=AddString("deny access"),acl_rule::rrqDeny);
46 SetItemData(m_tmap[acl_rule::rrqPrompt]=AddString("prompt"),acl_rule::rrqPrompt);
47 SetItemData(m_tmap[acl_rule::rrqGrant]=AddString("grant access"),CPumpKINDlg::rrqGrant);
48 SetCurSel(0);
49 EnableWindow(TRUE);
50 break;
51 case tftp::opWRQ:
52 m_tmap.RemoveAll();
53 SetItemData(m_tmap[acl_rule::wrqNone]=AddString("fallback to global"),acl_rule::wrqNone);
54 SetItemData(m_tmap[acl_rule::wrqDeny]=AddString("deny access"),acl_rule::wrqDeny);
55 SetItemData(m_tmap[acl_rule::wrqPrompt]=AddString("prompt"),acl_rule::wrqPrompt);
56 SetItemData(m_tmap[acl_rule::wrqPromptIfExists]=AddString("prompt if file exists"),acl_rule::wrqPromptIfExists);
57 SetItemData(m_tmap[acl_rule::wrqGrant]=AddString("grant access"),acl_rule::wrqGrant);
58 SetCurSel(0);
59 EnableWindow(TRUE);
60 break;
61 default:
62 EnableWindow(FALSE);
63 break;
64 }
65}
66
67int CACLTargetCombo::GetTarget()
68{
69 int cs=GetCurSel();
70 if(cs==CB_ERR)
71 return -1;
72 return GetItemData(cs);
73}
74
75void CACLTargetCombo::SetTarget(int t,int op)
76{
77 if(op>=0)
78 SetOp(op);
79 ASSERT(m_op>=0);
80 int i;
81 if(m_tmap.Lookup(t,i))
82 SetCurSel(i);
83 else
84 SetCurSel(0);
85}
diff --git a/ACLTargetCombo.h b/ACLTargetCombo.h
new file mode 100644
index 0000000..ef7baef
--- a/dev/null
+++ b/ACLTargetCombo.h
@@ -0,0 +1,42 @@
1// ACLTargetCombo.h : header file
2//
3
4/////////////////////////////////////////////////////////////////////////////
5// CACLTargetCombo window
6
7class CACLTargetCombo : public CComboBox
8{
9// Construction
10public:
11 void SetTarget(int t,int op=-1);
12 int GetTarget();
13 void SetOp(int op);
14 int m_op;
15 CACLTargetCombo();
16
17// Attributes
18public:
19 CMap<int,int,int,int> m_tmap;
20
21// Operations
22public:
23
24// Overrides
25 // ClassWizard generated virtual function overrides
26 //{{AFX_VIRTUAL(CACLTargetCombo)
27 //}}AFX_VIRTUAL
28
29// Implementation
30public:
31 virtual ~CACLTargetCombo();
32
33 // Generated message map functions
34protected:
35 //{{AFX_MSG(CACLTargetCombo)
36 // NOTE - the ClassWizard will add and remove member functions here.
37 //}}AFX_MSG
38
39 DECLARE_MESSAGE_MAP()
40};
41
42/////////////////////////////////////////////////////////////////////////////
diff --git a/COPYING b/COPYING
index b830fe7..72571d7 100644
--- a/COPYING
+++ b/COPYING
@@ -1,2 +1,2 @@
1Copyright (c) 1997-2005 Klever Group (http://www.klever.net/) 1Copyright (c) 1997-2006 Klever Group (http://www.klever.net/)
2 2
diff --git a/PropsACL.cpp b/PropsACL.cpp
new file mode 100644
index 0000000..6d918ad
--- a/dev/null
+++ b/PropsACL.cpp
@@ -0,0 +1,290 @@
1// PropsACL.cpp : implementation file
2//
3
4#include "stdafx.h"
5#include "PumpKIN.h"
6#include "PumpKINDlg.h"
7#include "ACLTargetCombo.h"
8#include "PropsACL.h"
9
10#ifdef _DEBUG
11#define new DEBUG_NEW
12#undef THIS_FILE
13static char THIS_FILE[] = __FILE__;
14#endif
15
16/////////////////////////////////////////////////////////////////////////////
17// CPropsACL property page
18
19IMPLEMENT_DYNCREATE(CPropsACL, CPropertyPage)
20
21CPropsACL::CPropsACL() : CPropertyPage(CPropsACL::IDD)
22{
23 //{{AFX_DATA_INIT(CPropsACL)
24 //}}AFX_DATA_INIT
25}
26
27CPropsACL::~CPropsACL()
28{
29}
30
31void CPropsACL::DoDataExchange(CDataExchange* pDX)
32{
33 CPropertyPage::DoDataExchange(pDX);
34 //{{AFX_DATA_MAP(CPropsACL)
35 DDX_Control(pDX, IDC_ACL_REPLACE, m_ReplaceCtl);
36 DDX_Control(pDX, IDC_ACL_NETMASK, m_NetmaskCtl);
37 DDX_Control(pDX, IDC_ACL_XFER, m_XferCtl);
38 DDX_Control(pDX, IDC_ACL_UP, m_UpCtl);
39 DDX_Control(pDX, IDC_ACL_RULE, m_RuleCtl);
40 DDX_Control(pDX, IDC_ACL_REMOVE, m_RemoveCtl);
41 DDX_Control(pDX, IDC_ACL_LIST, m_ListCtl);
42 DDX_Control(pDX, IDC_ACL_DOWN, m_DownCtl);
43 DDX_Control(pDX, IDC_ACL_ADDR, m_AddrCtl);
44 DDX_Control(pDX, IDC_ACL_ADD, m_AddCtl);
45 //}}AFX_DATA_MAP
46}
47
48
49BEGIN_MESSAGE_MAP(CPropsACL, CPropertyPage)
50 //{{AFX_MSG_MAP(CPropsACL)
51 ON_CBN_SELCHANGE(IDC_ACL_XFER, OnSelchangeAclXfer)
52 ON_NOTIFY(LVN_ITEMCHANGED, IDC_ACL_LIST, OnItemchangedAclList)
53 ON_BN_CLICKED(IDC_ACL_ADD, OnAclAdd)
54 ON_BN_CLICKED(IDC_ACL_REPLACE, OnAclReplace)
55 ON_BN_CLICKED(IDC_ACL_REMOVE, OnAclRemove)
56 ON_BN_CLICKED(IDC_ACL_UP, OnAclUp)
57 ON_BN_CLICKED(IDC_ACL_DOWN, OnAclDown)
58 //}}AFX_MSG_MAP
59END_MESSAGE_MAP()
60
61/////////////////////////////////////////////////////////////////////////////
62// CPropsACL message handlers
63
64BOOL CPropsACL::OnInitDialog()
65{
66 CPropertyPage::OnInitDialog();
67
68 m_FocusedRule=-1;
69
70 m_Images.Create(16,16,TRUE,2,1);
71 m_iRRQ = m_Images.Add(AfxGetApp()->LoadIcon(IDI_RRQ));
72 m_iWRQ = m_Images.Add(AfxGetApp()->LoadIcon(IDI_WRQ));
73 ASSERT(m_iRRQ>=0); ASSERT(m_iWRQ>=0);
74 m_ListCtl.SetImageList(&m_Images,LVSIL_NORMAL);
75 m_ListCtl.SetImageList(&m_Images,LVSIL_SMALL);
76 m_ListCtl.SetImageList(&m_Images,LVSIL_STATE);
77
78 CRect lrc; m_ListCtl.GetClientRect(&lrc);
79 long lrcw3 = lrc.Width()/3;
80 m_ListCtl.InsertColumn(0,"IP",LVCFMT_LEFT,lrcw3,subitemIP);
81 m_ListCtl.InsertColumn(1,"netmask",LVCFMT_LEFT,lrcw3,subitemNM);
82 m_ListCtl.InsertColumn(2,"action",LVCFMT_LEFT,lrc.Width()-lrcw3*2,subitemAction);
83
84 m_UpCtl.SetIcon(AfxGetApp()->LoadIcon(IDI_UP));
85 m_DownCtl.SetIcon(AfxGetApp()->LoadIcon(IDI_DOWN));
86 m_RemoveCtl.SetIcon(AfxGetApp()->LoadIcon(IDI_REMOVE));
87
88 m_XferCtl.SetItemData(0,tftp::opRRQ);
89 m_XferCtl.SetItemData(1,tftp::opWRQ);
90
91 m_AddrCtl.SetWindowText("192.168.0.0");
92 m_NetmaskCtl.SetWindowText("255.255.255.0");
93
94 for(int i=0;i<m_rulist.GetSize();++i) {
95 m_ListCtl.InsertItem(i,0);
96 SetListRule(i,m_rulist[i]);
97 }
98
99 UpdateControls();
100
101 return TRUE; // return TRUE unless you set the focus to a control
102 // EXCEPTION: OCX Property Pages should return FALSE
103}
104
105void CPropsACL::OnSelchangeAclXfer() {
106 int cs = m_XferCtl.GetCurSel();
107 if(cs==CB_ERR) {
108 m_RuleCtl.EnableWindow(FALSE);
109 }else{
110 int rq = m_XferCtl.GetItemData(cs);
111 m_RuleCtl.SetOp(rq);
112 }
113}
114
115void CPropsACL::OnItemchangedAclList(NMHDR* pNMHDR, LRESULT* pResult) {
116 NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
117 if(
118 (pNMListView->uChanged&LVIF_STATE)
119 &&
120 (pNMListView->uNewState&LVIS_FOCUSED)!=(pNMListView->uOldState&LVIS_FOCUSED)
121 &&
122 pNMListView->iItem>=0 && pNMListView->iItem<m_ListCtl.GetItemCount()
123 ){
124 if(pNMListView->uNewState&LVIS_FOCUSED)
125 m_FocusedRule=pNMListView->iItem;
126 else if(pNMListView->iItem==m_FocusedRule)
127 m_FocusedRule=-1;
128 UpdateControls();
129 }
130
131 *pResult = 0;
132}
133
134void CPropsACL::UpdateControls() {
135 if(m_FocusedRule>=m_rulist.GetSize())
136 m_FocusedRule=-1;
137 if(m_FocusedRule>=0) {
138 m_UpCtl.EnableWindow(m_FocusedRule>0);
139 m_DownCtl.EnableWindow(m_FocusedRule<(m_ListCtl.GetItemCount()-1));
140 acl_rule r;
141 GetListRule(m_FocusedRule,r);
142 SetRule(r);
143 m_AddCtl.EnableWindow(TRUE);
144 m_ReplaceCtl.EnableWindow(TRUE);
145 }else{
146 OnSelchangeAclXfer();
147 m_AddCtl.EnableWindow(TRUE);
148 m_ReplaceCtl.EnableWindow(FALSE);
149 }
150 m_RemoveCtl.EnableWindow(m_ListCtl.GetSelectedCount()!=0 || m_FocusedRule>=0);
151}
152
153void CPropsACL::OnAclAdd() {
154 acl_rule r;
155 UINT err=GetRule(r);
156 if(err) {
157 AfxMessageBox(err,MB_OK);
158 }else{
159 int i=m_rulist.AppendRule(r);
160 ASSERT(r.op==acl_rule::opRRQ || r.op==acl_rule::opWRQ);
161 m_ListCtl.InsertItem(i,0);
162 SetListRule(i,r);
163 }
164}
165
166void CPropsACL::OnAclReplace() {
167 acl_rule r;
168 UINT err=GetRule(r);
169 if(err) {
170 AfxMessageBox(err,MB_OK);
171 }else{
172 ASSERT(m_FocusedRule>=0);
173 m_rulist[m_FocusedRule]=r;
174 SetListRule(m_FocusedRule,r);
175 }
176}
177
178int CPropsACL::GetOp() {
179 int cs=m_XferCtl.GetCurSel();
180 if(cs==CB_ERR)
181 return -1;
182 else
183 return m_XferCtl.GetItemData(cs);
184}
185
186void CPropsACL::SetOp(int op) {
187 int os=m_XferCtl.GetCount();
188 for(int i=0;i<os;++i) {
189 if(m_XferCtl.GetItemData(i)==op) {
190 m_XferCtl.SetCurSel(i);
191 return;
192 }
193 }
194 m_XferCtl.SetCurSel(-1);
195}
196
197void CPropsACL::SetListRule(int i,acl_rule& r) {
198 m_ListCtl.SetItem(i,subitemIP,LVIF_TEXT|LVIF_IMAGE,r.str_addr(),(r.op==acl_rule::opRRQ)?m_iRRQ:m_iWRQ,0,0,0);
199 m_ListCtl.SetItemText(i,subitemNM,r.str_mask());
200 m_ListCtl.SetItemText(i,subitemAction,r.str_target());
201}
202
203void CPropsACL::SetRule(acl_rule& r) {
204 SetOp(r.op);
205 m_AddrCtl.SetWindowText(r.str_addr());
206 m_NetmaskCtl.SetWindowText(r.str_mask());
207 m_RuleCtl.SetTarget(r.target,r.op);
208}
209
210void CPropsACL::GetListRule(int i,acl_rule& r) {
211 r = m_rulist[i];
212}
213
214UINT CPropsACL::GetRule(acl_rule& r)
215{
216 UINT rv=0;
217 r.op=GetOp();
218 if(r.op!=acl_rule::opRRQ && r.op!=acl_rule::opWRQ)
219 rv=IDS_NO_XFER_OP;
220 else{
221 CString t;
222 m_AddrCtl.GetWindowText(t);
223 if(t.IsEmpty() || ( (r.addr=inet_addr((LPCSTR)t))==INADDR_NONE && t!="255.255.255.255") )
224 rv=IDS_INVALID_IP;
225 else{
226 m_NetmaskCtl.GetWindowText(t);
227 if(t.IsEmpty() || ( (r.mask=inet_addr((LPCSTR)t))==INADDR_NONE && t!="255.255.255.255") )
228 rv=IDS_INVALID_NETMASK;
229 else{
230 r.target=m_RuleCtl.GetTarget();
231 if(!r.IsValid())
232 rv=IDS_INVALID_RULE;
233 }
234 }
235 }
236 return rv;
237}
238
239void CPropsACL::OnAclRemove() {
240 ASSERT(m_FocusedRule>=0);
241 int fr=m_FocusedRule;
242 if(fr<0 || fr>=m_rulist.GetSize()) return;
243 m_rulist.DeleteRule(fr);
244 m_ListCtl.DeleteItem(fr);
245 ASSERT(m_rulist.GetSize()==m_ListCtl.GetItemCount());
246 if(fr>=m_rulist.GetSize()) {
247 if(fr>0) {
248 fr=m_rulist.GetSize()-1;
249 }
250 }else
251 fr=-1;
252 if(fr>0)
253 SetListFocusSelection(fr);
254 m_ListCtl.SetFocus();
255}
256
257void CPropsACL::OnAclUp() {
258 int s=m_FocusedRule;
259 if(s<=0) return;
260 int d=s-1;
261 acl_rule r=m_rulist[s];
262 m_rulist[s]=m_rulist[d];
263 m_rulist[d]=r;
264 SetListRule(d,m_rulist[d]);
265 SetListRule(s,m_rulist[s]);
266 SetListFocusSelection(d);
267 m_ListCtl.SetFocus();
268}
269
270void CPropsACL::OnAclDown() {
271 int s=m_FocusedRule;
272 int d=s+1;
273 if(s<0 || d>=m_rulist.GetSize()) return;
274 acl_rule r=m_rulist[s];
275 m_rulist[s]=m_rulist[d];
276 m_rulist[d]=r;
277 SetListRule(d,m_rulist[d]);
278 SetListRule(s,m_rulist[s]);
279 SetListFocusSelection(d);
280 m_ListCtl.SetFocus();
281}
282
283void CPropsACL::SetListFocusSelection(int i) {
284 int s=m_ListCtl.GetItemCount();
285 for(int t=0;t<s;++t)
286 if(t!=i)
287 m_ListCtl.SetItemState(t,0,LVIS_FOCUSED|LVIS_SELECTED);
288 m_ListCtl.SetItemState(i,LVIS_FOCUSED|LVIS_SELECTED,LVIS_FOCUSED|LVIS_SELECTED);
289}
290
diff --git a/PropsACL.h b/PropsACL.h
new file mode 100644
index 0000000..c8773e7
--- a/dev/null
+++ b/PropsACL.h
@@ -0,0 +1,71 @@
1// PropsACL.h : header file
2//
3
4/////////////////////////////////////////////////////////////////////////////
5// CPropsACL dialog
6
7class CPropsACL : public CPropertyPage
8{
9 DECLARE_DYNCREATE(CPropsACL)
10
11// Construction
12public:
13 void SetListFocusSelection(int i);
14 UINT GetRule(acl_rule& r);
15 void GetListRule(int i,acl_rule& r);
16 void SetOp(int op);
17 void SetRule(acl_rule& r);
18 void SetListRule(int i,acl_rule& r);
19 int m_iWRQ;
20 int m_iRRQ;
21 CImageList m_Images;
22 int GetOp();
23 acl_rules_t m_rulist;
24 int m_FocusedRule;
25 void UpdateControls();
26 enum {
27 subitemIP=0, subitemNM, subitemAction
28 };
29
30 CPropsACL();
31 ~CPropsACL();
32
33// Dialog Data
34 //{{AFX_DATA(CPropsACL)
35 enum { IDD = IDD_PROPS_ACL };
36 CButtonm_ReplaceCtl;
37 CEditm_NetmaskCtl;
38 CComboBoxm_XferCtl;
39 CButtonm_UpCtl;
40 CACLTargetCombom_RuleCtl;
41 CButtonm_RemoveCtl;
42 CListCtrlm_ListCtl;
43 CButtonm_DownCtl;
44 CEditm_AddrCtl;
45 CButtonm_AddCtl;
46 //}}AFX_DATA
47
48
49// Overrides
50 // ClassWizard generate virtual function overrides
51 //{{AFX_VIRTUAL(CPropsACL)
52 protected:
53 virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
54 //}}AFX_VIRTUAL
55
56// Implementation
57protected:
58 // Generated message map functions
59 //{{AFX_MSG(CPropsACL)
60 virtual BOOL OnInitDialog();
61 afx_msg void OnSelchangeAclXfer();
62 afx_msg void OnItemchangedAclList(NMHDR* pNMHDR, LRESULT* pResult);
63 afx_msg void OnAclAdd();
64 afx_msg void OnAclReplace();
65 afx_msg void OnAclRemove();
66 afx_msg void OnAclUp();
67 afx_msg void OnAclDown();
68 //}}AFX_MSG
69 DECLARE_MESSAGE_MAP()
70
71};
diff --git a/PropsServer.cpp b/PropsServer.cpp
index 6f1e08c..a3948e0 100644
--- a/PropsServer.cpp
+++ b/PropsServer.cpp
@@ -25,2 +25,3 @@ CPropsServer::CPropsServer() : CPropertyPage(CPropsServer::IDD)
25 m_WRQMode = -1; 25 m_WRQMode = -1;
26 m_LogFile = _T("");
26 //}}AFX_DATA_INIT 27 //}}AFX_DATA_INIT
@@ -36,2 +37,3 @@ void CPropsServer::DoDataExchange(CDataExchange* pDX)
36 //{{AFX_DATA_MAP(CPropsServer) 37 //{{AFX_DATA_MAP(CPropsServer)
38 DDX_Control(pDX, IDC_LOGFILE_BROWSE, m_LogBrowseCtl);
37 DDX_Control(pDX, IDC_BROWSE, m_BrowseCtl); 39 DDX_Control(pDX, IDC_BROWSE, m_BrowseCtl);
@@ -42,2 +44,3 @@ void CPropsServer::DoDataExchange(CDataExchange* pDX)
42 DDX_Radio(pDX, IDC_WRQ_TAKEALL, m_WRQMode); 44 DDX_Radio(pDX, IDC_WRQ_TAKEALL, m_WRQMode);
45 DDX_Text(pDX, IDC_LOGFILE, m_LogFile);
43 //}}AFX_DATA_MAP 46 //}}AFX_DATA_MAP
@@ -53,2 +56,3 @@ BEGIN_MESSAGE_MAP(CPropsServer, CPropertyPage)
53 ON_BN_CLICKED(IDC_BROWSE, OnBrowse) 56 ON_BN_CLICKED(IDC_BROWSE, OnBrowse)
57 ON_BN_CLICKED(IDC_LOGFILE_BROWSE, OnLogfileBrowse)
54 //}}AFX_MSG_MAP 58 //}}AFX_MSG_MAP
@@ -65,2 +69,3 @@ BOOL CPropsServer::OnInitDialog()
65 m_BrowseCtl.SetIcon(AfxGetApp()->LoadIcon(IDI_BROWSE)); 69 m_BrowseCtl.SetIcon(AfxGetApp()->LoadIcon(IDI_BROWSE));
70 m_LogBrowseCtl.SetIcon(AfxGetApp()->LoadIcon(IDI_BROWSE));
66 71
@@ -79 +84,15 @@ CString nr = m_TFTPRoot;
79} 84}
85
86void CPropsServer::OnLogfileBrowse()
87{
88 UpdateData(TRUE);
89 CFileDialog cfd(
90 FALSE, ".log", (LPCSTR)m_LogFile,
91 OFN_EXPLORER|OFN_HIDEREADONLY|OFN_LONGNAMES|OFN_NOCHANGEDIR|OFN_OVERWRITEPROMPT|OFN_PATHMUSTEXIST,
92 "Log files (*.log)|*.log|All Files (*.*)|*.*||",
93 this);
94 if(cfd.DoModal()==IDOK) {
95 m_LogFile = cfd.GetPathName();
96 UpdateData(FALSE);
97 }
98}
diff --git a/PropsServer.h b/PropsServer.h
index 29d85bd..1563479 100644
--- a/PropsServer.h
+++ b/PropsServer.h
@@ -19,2 +19,3 @@ public:
19 enum { IDD = IDD_PROPS_SERVER }; 19 enum { IDD = IDD_PROPS_SERVER };
20 CButtonm_LogBrowseCtl;
20 CButtonm_BrowseCtl; 21 CButtonm_BrowseCtl;
@@ -25,2 +26,3 @@ public:
25 int m_WRQMode; 26 int m_WRQMode;
27 CStringm_LogFile;
26 //}}AFX_DATA 28 //}}AFX_DATA
@@ -41,2 +43,3 @@ protected:
41 afx_msg void OnBrowse(); 43 afx_msg void OnBrowse();
44 afx_msg void OnLogfileBrowse();
42 //}}AFX_MSG 45 //}}AFX_MSG
diff --git a/PumpKINDlg.cpp b/PumpKINDlg.cpp
index b6b8a36..4cb1633 100644
--- a/PumpKINDlg.cpp
+++ b/PumpKINDlg.cpp
@@ -7,2 +7,3 @@
7 7
8#include "ACLTargetCombo.h"
8#include "PropsServer.h" 9#include "PropsServer.h"
@@ -10,2 +11,3 @@
10#include "PropsSounds.h" 11#include "PropsSounds.h"
12#include "PropsACL.h"
11#include "ConfirmRRQDlg.h" 13#include "ConfirmRRQDlg.h"
@@ -81,2 +83,6 @@ CPumpKINDlg::CPumpKINDlg(CWnd* pParent /*=NULL*/)
81{ 83{
84 m_Listener.m_Daddy = this;
85
86 m_bListen = TRUE;
87
82 m_ListenPort = 69; 88 m_ListenPort = 69;
@@ -109,2 +115,11 @@ CPumpKINDlg::CPumpKINDlg(CWnd* pParent /*=NULL*/)
109 ASSERT(m_Trayer); 115 ASSERT(m_Trayer);
116 /* Ensure we're backwards compatible */
117 ASSERT(CPumpKINDlg::rrqGiveAll==0);
118 ASSERT(CPumpKINDlg::rrqAlwaysConfirm==1);
119 ASSERT(CPumpKINDlg::rrqDenyAll==2);
120 ASSERT(CPumpKINDlg::wrqTakeAll==0);
121 ASSERT(CPumpKINDlg::wrqConfirmIfExists==1);
122 ASSERT(CPumpKINDlg::wrqAlwaysConfirm==2);
123 ASSERT(CPumpKINDlg::wrqDenyAll==3);
124 /* -- */
110 LoadSettings(); 125 LoadSettings();
@@ -116,2 +131,3 @@ void CPumpKINDlg::DoDataExchange(CDataExchange* pDX)
116 //{{AFX_DATA_MAP(CPumpKINDlg) 131 //{{AFX_DATA_MAP(CPumpKINDlg)
132 DDX_Control(pDX, IDC_LISTENING, m_ListenCtl);
117 DDX_Control(pDX, IDC_ABORT, m_AbortCtl); 133 DDX_Control(pDX, IDC_ABORT, m_AbortCtl);
@@ -153,2 +169,4 @@ BEGIN_MESSAGE_MAP(CPumpKINDlg, CDialog)
153 ON_BN_CLICKED(ID_HELP, OnHelp) 169 ON_BN_CLICKED(ID_HELP, OnHelp)
170 ON_BN_CLICKED(IDC_LISTENING, OnListening)
171 ON_COMMAND(ID_TRAY_LISTEN, OnTrayListen)
154 //}}AFX_MSG_MAP 172 //}}AFX_MSG_MAP
@@ -219,2 +237,4 @@ CRect rc, drc;
219 237
238 m_ListenCtl.SetCheck(m_Listener.m_bListen?1:0);
239
220 // CG: The following block was added by the ToolTips component. 240 // CG: The following block was added by the ToolTips component.
@@ -326,7 +346,6 @@ int CPumpKINDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
326 346
327 m_Listener.m_Daddy=this; 347 if(!m_Listener.SetListen(m_bListen)) {
328 if(!m_Listener.Create(m_ListenPort,SOCK_DGRAM)){ 348 m_bListen=FALSE;
329 TRACE0("Failed to create socket\n"); 349 TRACE0("Failed to create socket\n");
330 AfxMessageBox(IDS_BOX_CANTBIND,MB_OK|MB_ICONEXCLAMATION); 350 AfxMessageBox(IDS_BOX_CANTBIND,MB_OK|MB_ICONEXCLAMATION);
331 return -1;
332 } 351 }
@@ -666,3 +685,3 @@ CString lFile = localFile?localFile:m_FileName;
666 UpdateList(); 685 UpdateList();
667 if(!localFile){// Check only if server 686 if(!localFile){// Check only for incoming requests
668 if(CheckBadRelativeness(m_FileName)){ 687 if(CheckBadRelativeness(m_FileName)){
@@ -671,3 +690,6 @@ CString lFile = localFile?localFile:m_FileName;
671 } 690 }
672 switch(m_Daddy->m_RRQMode){ 691 int atar=m_Daddy->m_aclRules.FindTarget(acl_rule::opRRQ,m_Peer.sin_addr.s_addr);
692 if(atar<0)
693 atar = m_Daddy->m_RRQMode;
694 switch(atar){
673 case CPumpKINDlg::rrqGiveAll: 695 case CPumpKINDlg::rrqGiveAll:
@@ -677,2 +699,4 @@ CString lFile = localFile?localFile:m_FileName;
677 break; 699 break;
700 default:
701 TRACE1("Unexpected access target: %d\n",atar);
678 case CPumpKINDlg::rrqDenyAll: 702 case CPumpKINDlg::rrqDenyAll:
@@ -1109,3 +1133,3 @@ int i = m_Daddy->m_List.FindItem(&lvf);
1109 1133
1110void CPumpKINDlg::LogLine(LPCTSTR str) 1134void CPumpKINDlg::LogLineToScreen(LPCTSTR str)
1111{ 1135{
@@ -1165,2 +1189,3 @@ CPropsNetwork network;
1165CPropsSounds sounds; 1189CPropsSounds sounds;
1190CPropsACL acl;
1166 1191
@@ -1171,2 +1196,3 @@ CPropsSounds sounds;
1171 server.m_PromptTimeOut=m_PromptTimeOut; 1196 server.m_PromptTimeOut=m_PromptTimeOut;
1197 server.m_LogFile=m_LogFile;
1172 1198
@@ -1181,2 +1207,4 @@ CPropsSounds sounds;
1181 1207
1208 acl.m_rulist = m_aclRules;
1209
1182 cps.AddPage(&server); 1210 cps.AddPage(&server);
@@ -1184,2 +1212,3 @@ CPropsSounds sounds;
1184 cps.AddPage(&sounds); 1212 cps.AddPage(&sounds);
1213 cps.AddPage(&acl);
1185 if(cps.DoModal()==IDOK){ 1214 if(cps.DoModal()==IDOK){
@@ -1190,2 +1219,3 @@ CPropsSounds sounds;
1190 m_PromptTimeOut=server.m_PromptTimeOut; 1219 m_PromptTimeOut=server.m_PromptTimeOut;
1220 m_LogFile=server.m_LogFile;
1191 1221
@@ -1199,2 +1229,6 @@ CPropsSounds sounds;
1199 m_bnwAbort = sounds.m_Abort; 1229 m_bnwAbort = sounds.m_Abort;
1230
1231 m_aclRules = acl.m_rulist;
1232
1233 m_lastlogerr.Empty();
1200 } 1234 }
@@ -1246,4 +1280,6 @@ CString fn = localFile?ApplyRootGently(localFile):ApplyRoot(lf);
1246 m_Rename=exists=FALSE; 1280 m_Rename=exists=FALSE;
1247 // *** m_WRQMode only if server transfer 1281 int atar=m_Daddy->m_aclRules.FindTarget(acl_rule::opWRQ,m_Peer.sin_addr.s_addr);
1248 switch(m_Daddy->m_WRQMode){ 1282 if(atar<0)
1283 atar=m_Daddy->m_WRQMode;
1284 switch(atar){
1249 case CPumpKINDlg::wrqTakeAll: 1285 case CPumpKINDlg::wrqTakeAll:
@@ -1270,2 +1306,4 @@ CString fn = localFile?ApplyRootGently(localFile):ApplyRoot(lf);
1270 } 1306 }
1307 default:
1308 TRACE1("Unexpected access target: %d\n",atar);
1271 case CPumpKINDlg::wrqDenyAll: 1309 case CPumpKINDlg::wrqDenyAll:
@@ -1797,2 +1835,3 @@ CWinApp *app = AfxGetApp();
1797 ASSERT(app); 1835 ASSERT(app);
1836 m_bListen=app->GetProfileInt("TFTPSettings","Listen",m_bListen);
1798 m_bnwRequest=app->GetProfileString("BellsNWhistles","Request",m_bnwRequest); 1837 m_bnwRequest=app->GetProfileString("BellsNWhistles","Request",m_bnwRequest);
@@ -1807,2 +1846,3 @@ CWinApp *app = AfxGetApp();
1807 m_TFTPRoot=app->GetProfileString("TFTPSettings","TFTPRoot",m_TFTPRoot); 1846 m_TFTPRoot=app->GetProfileString("TFTPSettings","TFTPRoot",m_TFTPRoot);
1847 m_LogFile=app->GetProfileString("General","LogFile",m_LogFile);
1808 m_TFTPTimeOut=CTimeSpan(app->GetProfileInt("TFTPSettings","TFTPTimeout",m_TFTPTimeOut.GetTotalSeconds())); 1848 m_TFTPTimeOut=CTimeSpan(app->GetProfileInt("TFTPSettings","TFTPTimeout",m_TFTPTimeOut.GetTotalSeconds()));
@@ -1818,2 +1858,3 @@ CWinApp *app = AfxGetApp();
1818 ::SetCurrentDirectory(m_TFTPRoot); 1858 ::SetCurrentDirectory(m_TFTPRoot);
1859 m_aclRules.LoadProfile(app);
1819} 1860}
@@ -1824,2 +1865,3 @@ CWinApp *app = AfxGetApp();
1824 ASSERT(app); 1865 ASSERT(app);
1866 app->WriteProfileInt("TFTPSettings","Listen",m_bListen);
1825 app->WriteProfileString("BellsNWhistles","Request",m_bnwRequest); 1867 app->WriteProfileString("BellsNWhistles","Request",m_bnwRequest);
@@ -1834,2 +1876,3 @@ CWinApp *app = AfxGetApp();
1834 app->WriteProfileString("TFTPSettings","TFTPRoot",m_TFTPRoot); 1876 app->WriteProfileString("TFTPSettings","TFTPRoot",m_TFTPRoot);
1877 app->WriteProfileString("General","LogFile",m_LogFile);
1835 app->WriteProfileInt("TFTPSettings","TFTPTimeout",m_TFTPTimeOut.GetTotalSeconds()); 1878 app->WriteProfileInt("TFTPSettings","TFTPTimeout",m_TFTPTimeOut.GetTotalSeconds());
@@ -1839,2 +1882,3 @@ CWinApp *app = AfxGetApp();
1839 app->WriteProfileInt("UISettings","Visble",m_bShown); 1882 app->WriteProfileInt("UISettings","Visble",m_bShown);
1883 m_aclRules.SaveProfile(app);
1840} 1884}
@@ -1986 +2030,50 @@ void CPumpKINDlg::OnHelp()
1986} 2030}
2031
2032BOOL CListenSocket::SetListen(BOOL b) {
2033 ASSERT(m_Daddy);
2034 if(b==m_bListen)
2035 return TRUE;
2036 if(b) {
2037 if(!Create(m_Daddy->m_ListenPort,SOCK_DGRAM))
2038 return FALSE;
2039 return m_bListen=TRUE;
2040 }else{
2041 Close(); m_bListen=FALSE;
2042 return TRUE;
2043 }
2044}
2045
2046void CPumpKINDlg::OnListening()
2047{
2048 if(!m_Listener.SetListen(m_ListenCtl.GetCheck()==1)) {
2049 TRACE0("Failed to create socket\n");
2050 AfxMessageBox(IDS_BOX_CANTBIND,MB_OK|MB_ICONEXCLAMATION);
2051 }
2052 m_ListenCtl.SetCheck(m_Listener.m_bListen?1:0);
2053 m_bListen=m_Listener.m_bListen;
2054}
2055
2056void CPumpKINDlg::OnTrayListen()
2057{
2058 if(!m_Listener.SetListen(!m_Listener.m_bListen)) {
2059 TRACE0("Failed to create socket\n");
2060 AfxMessageBox(IDS_BOX_CANTBIND,MB_OK|MB_ICONEXCLAMATION);
2061 }
2062 m_ListenCtl.SetCheck(m_Listener.m_bListen?1:0);
2063 m_bListen=m_Listener.m_bListen;
2064}
2065
2066void CPumpKINDlg::LogLine(LPCTSTR str)
2067{
2068 LogLineToScreen(str);
2069 if(!m_LogFile.IsEmpty()) {
2070 if(!Klever::LogRecord((LPCTSTR)m_LogFile,str)) {
2071 if(m_lastlogerr!=m_LogFile) {
2072 CString tmp;
2073 tmp.Format(IDS_LOG_LOGERROR,m_LogFile);
2074 LogLineToScreen(tmp);
2075 m_lastlogerr=m_LogFile;
2076 }
2077 }
2078 }
2079}
diff --git a/PumpKINDlg.h b/PumpKINDlg.h
index 42ae62d..b247c56 100644
--- a/PumpKINDlg.h
+++ b/PumpKINDlg.h
@@ -115,2 +115,143 @@ public:
115 115
116struct acl_rule {
117 enum {
118 opRRQ=tftp::opRRQ, opWRQ=tftp::opWRQ
119 };
120 int op;
121 DWORD addr, mask;
122 enum {
123 rrqGrant=0, rrqPrompt, rrqDeny,
124 rrqRules,
125 rrqNone=-1
126 };
127 enum {
128 wrqGrant=0, wrqPromptIfExists, wrqPrompt, wrqDeny,
129 wrqRules,
130 wrqNone=-1
131 };
132 int target;
133
134 acl_rule()
135 : op(-1), addr(0), mask(0), target(-1) { }
136 acl_rule(int o,DWORD a,DWORD m,int t)
137 : op(o), addr(a), mask(m), target(t) { }
138 acl_rule(const acl_rule& s)
139 : op(s.op), addr(s.addr), mask(s.mask), target(s.target) { }
140
141 BOOL IsValid() {
142 if(op==opRRQ) {
143 if(target<rrqNone || target>=rrqRules)
144 return FALSE;
145 }else if(op==opWRQ) {
146 if(target<wrqNone || target>=wrqRules)
147 return FALSE;
148 }else
149 return FALSE;
150 return TRUE;
151 }
152
153 BOOL IsMatch(int o,DWORD a) {
154 if(o!=op) return FALSE;
155 if( (a&mask) != (addr&mask)) return FALSE;
156 return TRUE;
157 }
158
159 CString str_addr() {
160 return inet_ntoa(*(struct in_addr*)&addr);
161 }
162 CString str_mask() {
163 return inet_ntoa(*(struct in_addr*)&mask);
164 }
165 CString str_target() {
166 if(op==opRRQ) {
167 switch(target) {
168 case rrqNone: return "fallback";
169 case rrqGrant: return "grant";
170 case rrqPrompt: return "prompt";
171 case rrqDeny: return "deny";
172 default: return "?";
173 }
174 }else if(op==opWRQ) {
175 switch(target) {
176 case wrqNone: return "fallback";
177 case wrqGrant: return "grant";
178 case wrqPromptIfExists: return "prompt if exists";
179 case wrqPrompt: return "prompt";
180 case wrqDeny: return "deny";
181 default: return "?";
182 }
183 }else
184 return "?";
185 }
186
187 void SaveProfile(CWinApp* app,int i) {
188 CString n; n.Format("%d",i);
189 app->WriteProfileInt("ACL","op_"+n,op);
190 app->WriteProfileString("ACL","addr_"+n,str_addr());
191 app->WriteProfileString("ACL","mask_"+n,str_mask());
192 app->WriteProfileInt("ACL","target_"+n,target);
193 }
194
195 void LoadProfile(CWinApp* app,int i) {
196 CString n; n.Format("%d",i);
197 op=app->GetProfileInt("ACL","op_"+n,-1);
198 addr=inet_addr(app->GetProfileString("ACL","addr_"+n));
199 mask=inet_addr(app->GetProfileString("ACL","mask_"+n));
200 target=app->GetProfileInt("ACL","target_"+n,-1);
201 }
202
203};
204
205class acl_rules_t : public CArray<acl_rule,acl_rule&> {
206public:
207
208 acl_rules_t& operator=(const acl_rules_t& s) {
209 // Copy(s); XXX: unsuprisingly, there's a bug in MFC Copy, *pDst++=*pSrc (no ++ for Src)
210 RemoveAll();
211 int ns = s.GetSize();
212 SetSize(ns);
213 for(int i=0;i<ns;++i)
214 m_pData[i]=s.m_pData[i];
215 return *this;
216 }
217
218 int AppendRule(acl_rule& r) {
219 return Add(r);
220 }
221
222 void DeleteRule(int r) {
223 RemoveAt(r);
224 }
225
226 int FindRule(int op,DWORD ip) {
227 for(int i=0;i<GetSize();++i)
228 if(m_pData[i].IsMatch(op,ip))
229 return i;
230 return -1;
231 }
232
233 int FindTarget(int op,DWORD ip) {
234 int r=FindRule(op,ip);
235 if(r<0) return -1;
236 return m_pData[r].target;
237 }
238
239 void SaveProfile(CWinApp* app) {
240 int s=GetSize();
241 for(int i=0;i<s;++i)
242 m_pData[i].SaveProfile(app,i);
243 app->WriteProfileInt("ACL","rules",s);
244 }
245 void LoadProfile(CWinApp* app) {
246 RemoveAll();
247 int s=app->GetProfileInt("ACL","rules",0);
248 for(int i=0;i<s;++i) {
249 acl_rule r;
250 r.LoadProfile(app,i);
251 if(r.IsValid())
252 Add(r);
253 }
254 }
255};
256
116class CPumpKINDlg; 257class CPumpKINDlg;
@@ -118,4 +259,10 @@ class CListenSocket : public CAsyncSocket {
118public: 259public:
119 virtual void OnReceive(int nErrorCode);
120 CPumpKINDlg* m_Daddy; 260 CPumpKINDlg* m_Daddy;
261 BOOL m_bListen;
262
263 CListenSocket()
264 : m_bListen(FALSE), m_Daddy(0) { }
265
266 BOOL SetListen(BOOL b);
267 virtual void OnReceive(int nErrorCode);
121}; 268};
@@ -222,2 +369,7 @@ class CPumpKINDlg : public CDialog
222public: 369public:
370 CString m_lastlogerr;
371 void LogLine(LPCTSTR str);
372 CString m_LogFile;
373 BOOL m_bListen;
374 acl_rules_t m_aclRules;
223 CString m_bnwRequest; 375 CString m_bnwRequest;
@@ -242,3 +394,4 @@ public:
242 CTimeMap m_LogTimes; 394 CTimeMap m_LogTimes;
243 void LogLine(LPCTSTR str); 395 void LogLineToFile(LPCTSTR str);
396 void LogLineToScreen(LPCTSTR str);
244 int m_LogLength; 397 int m_LogLength;
@@ -253,11 +406,15 @@ public:
253 enum{ 406 enum{
254 rrqGiveAll=0, 407 rrqGiveAll=acl_rule::rrqGrant,
255 rrqAlwaysConfirm, 408 rrqAlwaysConfirm=acl_rule::rrqPrompt,
256 rrqDenyAll 409 rrqDenyAll=acl_rule::rrqDeny,
410 rrqFallback=acl_rule::rrqNone,
411 rrqGrant=rrqGiveAll, rrqDeny=rrqDenyAll, rrqPrompt=rrqAlwaysConfirm
257 }; 412 };
258 enum{ 413 enum{
259 wrqTakeAll=0, 414 wrqTakeAll=acl_rule::wrqGrant,
260 wrqConfirmIfExists, 415 wrqConfirmIfExists=acl_rule::wrqPromptIfExists,
261 wrqAlwaysConfirm, 416 wrqAlwaysConfirm=acl_rule::wrqPrompt,
262 wrqDenyAll 417 wrqDenyAll=acl_rule::wrqDeny,
418 wrqFallback=acl_rule::wrqNone,
419 wrqGrant=wrqTakeAll,wrqDeny=wrqDenyAll, wrqPrompt=wrqAlwaysConfirm
263 }; 420 };
@@ -275,2 +432,3 @@ public:
275 enum { IDD = IDD_PUMPKIN_DIALOG }; 432 enum { IDD = IDD_PUMPKIN_DIALOG };
433 CButtonm_ListenCtl;
276 CButtonm_AbortCtl; 434 CButtonm_AbortCtl;
@@ -312,2 +470,3 @@ protected:
312 afx_msg void OnTrayShowpumpkinwindow(); 470 afx_msg void OnTrayShowpumpkinwindow();
471 afx_msg void OnTrayListen();
313 afx_msg void OnTrayExit(); 472 afx_msg void OnTrayExit();
@@ -324,2 +483,3 @@ protected:
324 afx_msg void OnHelp(); 483 afx_msg void OnHelp();
484 afx_msg void OnListening();
325 //}}AFX_MSG 485 //}}AFX_MSG
diff --git a/Trayer.cpp b/Trayer.cpp
index 6e8c100..1e1ab3c 100644
--- a/Trayer.cpp
+++ b/Trayer.cpp
@@ -39,2 +39,3 @@ BEGIN_MESSAGE_MAP(CTrayer, CWnd)
39 ON_COMMAND(ID_TRAY_SHOWPUMPKINWINDOW, OnTrayShowpumpkinwindow) 39 ON_COMMAND(ID_TRAY_SHOWPUMPKINWINDOW, OnTrayShowpumpkinwindow)
40 ON_COMMAND(ID_TRAY_LISTEN, OnTrayListen)
40 //}}AFX_MSG_MAP 41 //}}AFX_MSG_MAP
@@ -67,2 +68,3 @@ LRESULT CTrayer::OnTray(WPARAM wP,LPARAM lP)
67 popUp->CheckMenuItem(ID_TRAY_SHOWPUMPKINWINDOW,MF_BYCOMMAND|(IsWindowVisible()?MF_CHECKED:MF_UNCHECKED)); 68 popUp->CheckMenuItem(ID_TRAY_SHOWPUMPKINWINDOW,MF_BYCOMMAND|(IsWindowVisible()?MF_CHECKED:MF_UNCHECKED));
69 popUp->CheckMenuItem(ID_TRAY_LISTEN,MF_BYCOMMAND|(m_Daddy->m_Listener.m_bListen?MF_CHECKED:MF_UNCHECKED));
68 popUp->TrackPopupMenu(TPM_RIGHTALIGN|TPM_LEFTBUTTON|TPM_RIGHTBUTTON,pt.x,pt.y,this); 70 popUp->TrackPopupMenu(TPM_RIGHTALIGN|TPM_LEFTBUTTON|TPM_RIGHTBUTTON,pt.x,pt.y,this);
@@ -118 +120,6 @@ void CTrayer::OnTrayShowpumpkinwindow()
118} 120}
121
122void CTrayer::OnTrayListen()
123{
124 m_Daddy->SendMessage(WM_COMMAND,ID_TRAY_LISTEN);
125}
diff --git a/Trayer.h b/Trayer.h
index 061a53a..c5a9465 100644
--- a/Trayer.h
+++ b/Trayer.h
@@ -43,2 +43,3 @@ protected:
43 afx_msg void OnTrayShowpumpkinwindow(); 43 afx_msg void OnTrayShowpumpkinwindow();
44 afx_msg void OnTrayListen();
44 //}}AFX_MSG 45 //}}AFX_MSG
diff --git a/help/pumpkin.cnt b/help/pumpkin.cnt
index 0e09da3..dfe42e5 100644
--- a/help/pumpkin.cnt
+++ b/help/pumpkin.cnt
@@ -14 +14,2 @@
142 Sounds Options=SoundsOptions 142 Sounds Options=SoundsOptions
152 Access Lists=ACL
diff --git a/help/pumpkin.rtf b/help/pumpkin.rtf
index b39ca9c..9c02ca9 100644
--- a/help/pumpkin.rtf
+++ b/help/pumpkin.rtf
@@ -20,3 +20,3 @@ K{\footnote about}
20{ 20{
21\par\pard\plain\sb360\sa120 \f1\fs16 Copyright (c) 1997-2005 {\uldb\cf0 Klever Group (http://www.klever.net/)}{\v %!ExecFile("http://www.klever.net/")} 21\par\pard\plain\sb360\sa120 \f1\fs16 Copyright (c) 1997-2006 {\uldb\cf0 Klever Group (http://www.klever.net/)}{\v %!ExecFile("http://www.klever.net/")}
22\par\qj\sb120\sa120Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 22\par\qj\sb120\sa120Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
@@ -30,2 +30,5 @@ K{\footnote about}
30${\footnote What's New} 30${\footnote What's New}
31\par\pard\plain\f1\fs24\qc\cf2\b 2.7 - February 1st, 2006
32\par\pard\plain\fi0\li0\f1\fs18 \bullet Added acess lists based on request IP address and TFTP opcode for automating access policy
33\par\pard\plain\fi0\li0\f1\fs18 \bullet Added possibility to start/stop TFTP server, while keeping client functionality intact
31\par\pard\plain\f1\fs24\qc\cf2\b 2.6 - August 6th, 2005 34\par\pard\plain\f1\fs24\qc\cf2\b 2.6 - August 6th, 2005
@@ -114,3 +117,3 @@ ${\footnote Server Options}
114\pard\plain\keepn 117\pard\plain\keepn
115#{\footnote SoundsOptoins} 118#{\footnote SoundsOptions}
116${\footnote Sounds Options} 119${\footnote Sounds Options}
@@ -120,2 +123,10 @@ ${\footnote Sounds Options}
120\page 123\page
124
125\pard\plain\keepn
126#{\footnote ACL}
127${\footnote Access Lists}
128{ \f1\fs18\b\sb120 Access Lists}
129\par\sa120\sb120\qj\pard \f1\fs18\sb120 You can slightly automate your access policies by setting up read/write request behavior for different incoming requests.
130\par\sa120\sb120\qj\pard \f1\fs18\sb120 The rule consists of {\b request type}, source networke ({\b ip} and {\b netmask}) and {\b action} to take (see also {\uldb Server Options}{\v ServerOptions}).
131\page
121} \ No newline at end of file 132} \ No newline at end of file
diff --git a/help/pumpkin.xml b/help/pumpkin.xml
index 38c54ca..944bb54 100644
--- a/help/pumpkin.xml
+++ b/help/pumpkin.xml
@@ -7,3 +7,3 @@
7 <p><b><i>Enjoy!</i></b></p> 7 <p><b><i>Enjoy!</i></b></p>
8 <license years="1997-2005"/> 8 <license years="1997-2006"/>
9 <credist/> 9 <credist/>
@@ -11,2 +11,6 @@
11 <topic id="News" title="What's New"> 11 <topic id="News" title="What's New">
12 <newsfor version="2.7" date="">
13 <ni>Added acess lists based on request IP address and TFTP opcode for automating access policy</ni>
14 <ni>Added possibility to start/stop TFTP server, while keeping client functionality intact</ni>
15 </newsfor>
12 <newsfor version="2.6" date="August 6th, 2005"> 16 <newsfor version="2.6" date="August 6th, 2005">
@@ -38,2 +42,3 @@
38 <p>Use <a href="#Options">Options</a> button to set <kin>PumpKIN</kin> options.</p> 42 <p>Use <a href="#Options">Options</a> button to set <kin>PumpKIN</kin> options.</p>
43 <p>You can start and stop <kin>PumpKIN</kin>'s <term>TFTP</term> server by checking and unchecking the <b>Server is running</b> checkbox in the lower right corner of main <kin>PumpKIN</kin> window.</p>
39 </topic> 44 </topic>
@@ -85,3 +90,3 @@
85 </topic> 90 </topic>
86 <topic id="SoundsOptoins" title="Sounds Options"> 91 <topic id="SoundsOptions" title="Sounds Options">
87 <heading scroll="no">Sounds</heading> 92 <heading scroll="no">Sounds</heading>
@@ -90,2 +95,10 @@
90 </topic> 95 </topic>
96 <topic id="ACL" title="Access Lists">
97 <heading scroll="no">Access Lists</heading>
98 <p>You can slightly automate your access policies by setting up read/write request behavior for different incoming requests.</p>
99 <p>The rule consists of <b>request type</b>, source network (<b>ip</b> and <b>netmask</b>) and <b>action</b> to take (see also <a href="#ServerOptions">Server Options</a>).</p>
100 <p>When <kin>PumpKIN</kin> receives request it goes through the list of rules and bases its decision on the first matching rule. To rearrange order of rules, select the rule you wish to move and use up and down arrows buttons on the right. To remove rule, use the cross button.</p>
101 <p>To add a new rule fill in the information about <b>request type</b>, source <b>address</b> and <b>netmask</b> and desired action. Then click on the 'Add new rule' button.</p>
102 <p>If you wish to amend the rule, select it in the rules list, change parameters below and click the 'Replace rule' button.</p>
103 </topic>
91</winhelp> 104</winhelp>
diff --git a/install/Install.clw b/install/Install.clw
new file mode 100644
index 0000000..6775b4c
--- a/dev/null
+++ b/install/Install.clw
@@ -0,0 +1,35 @@
1; CLW file contains information for the MFC ClassWizard
2
3[General Info]
4Version=1
5LastClass=
6LastTemplate=CDialog
7NewFileInclude1=#include "stdafx.h"
8NewFileInclude2=#include "install.h"
9LastPage=0
10
11ClassCount=0
12
13ResourceCount=2
14Resource1=IDD_INSTALLING (FALSE)
15Resource2=IDD_PATH
16
17[DLG:IDD_INSTALLING (FALSE)]
18Type=1
19Class=?
20ControlCount=4
21Control1=IDCANCEL,button,1342295808
22Control2=IDC_DISKS,SysAnimate32,1342242822
23Control3=IDC_STATE,static,1342308736
24Control4=IDC_PROGRESS,msctls_progress32,1342177280
25
26[DLG:IDD_PATH]
27Type=1
28Class=?
29ControlCount=5
30Control1=IDC_PROMPT,static,1342308352
31Control2=IDC_PATH,edit,1350631552
32Control3=IDC_BROWSE,button,1342242816
33Control4=IDOK,button,1342242817
34Control5=IDCANCEL,button,1342242816
35
diff --git a/install/install.cpp b/install/install.cpp
index d11de03..cfe4d27 100644
--- a/install/install.cpp
+++ b/install/install.cpp
@@ -3,3 +3,3 @@
3 3
4#define VERSION "2.6" 4#define VERSION "2.7"
5 #defineKINAME "PumpKIN " VERSION 5 #defineKINAME "PumpKIN " VERSION
diff --git a/install/install.rc b/install/install.rc
index cc621ad..9a03edb 100644
--- a/install/install.rc
+++ b/install/install.rc
@@ -133,4 +133,4 @@ IDI_ICON ICON DISCARDABLE "../shared-data/install-icon.ico
133VS_VERSION_INFO VERSIONINFO 133VS_VERSION_INFO VERSIONINFO
134 FILEVERSION 2,6,0,0 134 FILEVERSION 2,7,0,0
135 PRODUCTVERSION 2,6,0,0 135 PRODUCTVERSION 2,7,0,0
136 FILEFLAGSMASK 0x3fL 136 FILEFLAGSMASK 0x3fL
@@ -151,5 +151,5 @@ BEGIN
151 VALUE "FileDescription", "INSTALL: PumpKIN, tftp client/daemon\0" 151 VALUE "FileDescription", "INSTALL: PumpKIN, tftp client/daemon\0"
152 VALUE "FileVersion", "2, 6, 0, 0\0" 152 VALUE "FileVersion", "2, 7, 0, 0\0"
153 VALUE "InternalName", "INSTALL\0" 153 VALUE "InternalName", "INSTALL\0"
154 VALUE "LegalCopyright", "Copyright © 1997-2005 Klever Group (http://www.klever.net/)\0" 154 VALUE "LegalCopyright", "Copyright © 1997-2006 Klever Group (http://www.klever.net/)\0"
155 VALUE "LegalTrademarks", "Klever Group (http://www.klever.net/)\0" 155 VALUE "LegalTrademarks", "Klever Group (http://www.klever.net/)\0"
@@ -157,3 +157,3 @@ BEGIN
157 VALUE "ProductName", "PumpKIN\0" 157 VALUE "ProductName", "PumpKIN\0"
158 VALUE "ProductVersion", "2, 6, 0, 0\0" 158 VALUE "ProductVersion", "2, 7, 0, 0\0"
159 END 159 END
diff --git a/pumpkin.clw b/pumpkin.clw
index 4ae747b..5344bfd 100644
--- a/pumpkin.clw
+++ b/pumpkin.clw
@@ -4,4 +4,4 @@
4Version=1 4Version=1
5LastClass=CPropsSounds 5LastClass=CPropsServer
6LastTemplate=CPropertyPage 6LastTemplate=CComboBox
7NewFileInclude1=#include "stdafx.h" 7NewFileInclude1=#include "stdafx.h"
@@ -9,3 +9,3 @@ NewFileInclude2=#include "PumpKIN.h"
9 9
10ClassCount=12 10ClassCount=14
11Class1=CPumpKINApp 11Class1=CPumpKINApp
@@ -14,5 +14,5 @@ Class3=CAboutDlg
14 14
15ResourceCount=9 15ResourceCount=10
16Resource1=IDD_REQUEST 16Resource1=IDD_REQUEST
17Resource2=IDD_PROPS_SERVER 17Resource2=IDD_PROPS_NETWORK
18Resource3=IDD_CONFIRM_RRQ 18Resource3=IDD_CONFIRM_RRQ
@@ -22,3 +22,3 @@ Class5=CPropsNetwork
22Resource5=IDD_CONFIRM_WRQ 22Resource5=IDD_CONFIRM_WRQ
23Resource6=IDD_PROPS_NETWORK 23Resource6=IDD_PROPS_ACL
24Class6=CConfirmRRQDlg 24Class6=CConfirmRRQDlg
@@ -33,2 +33,5 @@ Class12=CPropsSounds
33Resource9=IDM_POPUPS 33Resource9=IDM_POPUPS
34Class13=CPropsACL
35Class14=CACLTargetCombo
36Resource10=IDD_PROPS_SERVER
34 37
@@ -47,3 +50,3 @@ BaseClass=CDialog
47VirtualFilter=dWC 50VirtualFilter=dWC
48LastObject=ID_HELP 51LastObject=CPumpKINDlg
49 52
@@ -71,3 +74,3 @@ Type=1
71Class=CPumpKINDlg 74Class=CPumpKINDlg
72ControlCount=9 75ControlCount=10
73Control1=IDC_CONNECTIONS,SysListView32,1350631681 76Control1=IDC_CONNECTIONS,SysListView32,1350631681
@@ -81,2 +84,3 @@ Control8=IDC_LOG,listbox,1353728129
81Control9=IDCANCEL,button,1073741824 84Control9=IDCANCEL,button,1073741824
85Control10=IDC_LISTENING,button,1342275619
82 86
@@ -85,3 +89,3 @@ Type=1
85Class=CPropsServer 89Class=CPropsServer
86ControlCount=15 90ControlCount=18
87Control1=IDC_STATIC,button,1342177287 91Control1=IDC_STATIC,button,1342177287
@@ -101,2 +105,5 @@ Control14=IDC_STATIC,static,1342308609
101Control15=IDC_PROMPTTIMEOUT,msctls_trackbar32,1342242823 105Control15=IDC_PROMPTTIMEOUT,msctls_trackbar32,1342242823
106Control16=IDC_STATIC,button,1342177287
107Control17=IDC_LOGFILE,edit,1350631552
108Control18=IDC_LOGFILE_BROWSE,button,1342242880
102 109
@@ -129,3 +136,3 @@ Filter=D
129VirtualFilter=idWC 136VirtualFilter=idWC
130LastObject=CPropsServer 137LastObject=IDC_LOGFILE_BROWSE
131 138
@@ -138,3 +145,3 @@ Filter=D
138VirtualFilter=idWC 145VirtualFilter=idWC
139LastObject=CPropsNetwork 146LastObject=IDC_BLOCKSIZE
140 147
@@ -232,8 +239,9 @@ Command2=ID_TRAY_FETCHFILE
232Command3=ID_TRAY_OPTIONS 239Command3=ID_TRAY_OPTIONS
233Command4=ID_TRAY_SHOWPUMPKINWINDOW 240Command4=ID_TRAY_LISTEN
234Command5=ID_TRAY_OPENFILESFOLDER 241Command5=ID_TRAY_SHOWPUMPKINWINDOW
235Command6=ID_TRAY_HELP 242Command6=ID_TRAY_OPENFILESFOLDER
236Command7=ID_TRAY_ABOUTPUMPKIN 243Command7=ID_TRAY_HELP
237Command8=ID_TRAY_EXIT 244Command8=ID_TRAY_ABOUTPUMPKIN
238CommandCount=8 245Command9=ID_TRAY_EXIT
246CommandCount=9
239 247
@@ -283 +291,37 @@ VirtualFilter=idWC
283 291
292[DLG:IDD_PROPS_ACL]
293Type=1
294Class=CPropsACL
295ControlCount=14
296Control1=IDC_ACL_LIST,SysListView32,1350631425
297Control2=IDC_ACL_UP,button,1342246720
298Control3=IDC_ACL_DOWN,button,1342246720
299Control4=IDC_ACL_REMOVE,button,1342246720
300Control5=IDC_STATIC,static,1342308352
301Control6=IDC_ACL_XFER,combobox,1344339971
302Control7=IDC_STATIC,static,1342308352
303Control8=IDC_ACL_ADDR,edit,1350631552
304Control9=IDC_STATIC,static,1342308352
305Control10=IDC_ACL_NETMASK,edit,1350631552
306Control11=IDC_STATIC,static,1342308352
307Control12=IDC_ACL_RULE,combobox,1344339971
308Control13=IDC_ACL_ADD,button,1342242816
309Control14=IDC_ACL_REPLACE,button,1342242816
310
311[CLS:CPropsACL]
312Type=0
313HeaderFile=PropsACL.h
314ImplementationFile=PropsACL.cpp
315BaseClass=CPropertyPage
316Filter=D
317LastObject=CPropsACL
318VirtualFilter=idWC
319
320[CLS:CACLTargetCombo]
321Type=0
322HeaderFile=ACLTargetCombo.h
323ImplementationFile=ACLTargetCombo.cpp
324BaseClass=CComboBox
325Filter=W
326LastObject=CACLTargetCombo
327
diff --git a/pumpkin.mak b/pumpkin.mak
index bd466fe..7d2ec22 100644
--- a/pumpkin.mak
+++ b/pumpkin.mak
@@ -68,4 +68,6 @@ ALL : "$(OUTDIR)\pumpkin.exe" "$(OUTDIR)\pumpkin.ex_" "$(OUTDIR)\pumpkin.hlp"\
68CLEAN : 68CLEAN :
69 -@erase "$(INTDIR)\ACLTargetCombo.obj"
69 -@erase "$(INTDIR)\ConfirmRRQDlg.obj" 70 -@erase "$(INTDIR)\ConfirmRRQDlg.obj"
70 -@erase "$(INTDIR)\ConfirmWRQDlg.obj" 71 -@erase "$(INTDIR)\ConfirmWRQDlg.obj"
72 -@erase "$(INTDIR)\PropsACL.obj"
71 -@erase "$(INTDIR)\PropsNetwork.obj" 73 -@erase "$(INTDIR)\PropsNetwork.obj"
@@ -117,4 +119,6 @@ LINK32_FLAGS=/nologo /subsystem:windows /incremental:no\
117LINK32_OBJS= \ 119LINK32_OBJS= \
120 "$(INTDIR)\ACLTargetCombo.obj" \
118 "$(INTDIR)\ConfirmRRQDlg.obj" \ 121 "$(INTDIR)\ConfirmRRQDlg.obj" \
119 "$(INTDIR)\ConfirmWRQDlg.obj" \ 122 "$(INTDIR)\ConfirmWRQDlg.obj" \
123 "$(INTDIR)\PropsACL.obj" \
120 "$(INTDIR)\PropsNetwork.obj" \ 124 "$(INTDIR)\PropsNetwork.obj" \
@@ -171,2 +175,4 @@ ALL : "$(OUTDIR)\pumpkin.exe" "$(OUTDIR)\pumpkin.bsc" "$(OUTDIR)\pumpkin.ex_"\
171CLEAN : 175CLEAN :
176 -@erase "$(INTDIR)\ACLTargetCombo.obj"
177 -@erase "$(INTDIR)\ACLTargetCombo.sbr"
172 -@erase "$(INTDIR)\ConfirmRRQDlg.obj" 178 -@erase "$(INTDIR)\ConfirmRRQDlg.obj"
@@ -175,2 +181,4 @@ CLEAN :
175 -@erase "$(INTDIR)\ConfirmWRQDlg.sbr" 181 -@erase "$(INTDIR)\ConfirmWRQDlg.sbr"
182 -@erase "$(INTDIR)\PropsACL.obj"
183 -@erase "$(INTDIR)\PropsACL.sbr"
176 -@erase "$(INTDIR)\PropsNetwork.obj" 184 -@erase "$(INTDIR)\PropsNetwork.obj"
@@ -230,4 +238,6 @@ BSC32_FLAGS=/nologo /o"$(OUTDIR)/pumpkin.bsc"
230BSC32_SBRS= \ 238BSC32_SBRS= \
239 "$(INTDIR)\ACLTargetCombo.sbr" \
231 "$(INTDIR)\ConfirmRRQDlg.sbr" \ 240 "$(INTDIR)\ConfirmRRQDlg.sbr" \
232 "$(INTDIR)\ConfirmWRQDlg.sbr" \ 241 "$(INTDIR)\ConfirmWRQDlg.sbr" \
242 "$(INTDIR)\PropsACL.sbr" \
233 "$(INTDIR)\PropsNetwork.sbr" \ 243 "$(INTDIR)\PropsNetwork.sbr" \
@@ -254,4 +264,6 @@ LINK32_FLAGS=/nologo /subsystem:windows /incremental:yes\
254LINK32_OBJS= \ 264LINK32_OBJS= \
265 "$(INTDIR)\ACLTargetCombo.obj" \
255 "$(INTDIR)\ConfirmRRQDlg.obj" \ 266 "$(INTDIR)\ConfirmRRQDlg.obj" \
256 "$(INTDIR)\ConfirmWRQDlg.obj" \ 267 "$(INTDIR)\ConfirmWRQDlg.obj" \
268 "$(INTDIR)\PropsACL.obj" \
257 "$(INTDIR)\PropsNetwork.obj" \ 269 "$(INTDIR)\PropsNetwork.obj" \
@@ -307,4 +319,6 @@ ALL : "$(OUTDIR)\pumpkin.exe" "$(OUTDIR)\pumpkin.ex_" "$(OUTDIR)\pumpkin.hlp"\
307CLEAN : 319CLEAN :
320 -@erase "$(INTDIR)\ACLTargetCombo.obj"
308 -@erase "$(INTDIR)\ConfirmRRQDlg.obj" 321 -@erase "$(INTDIR)\ConfirmRRQDlg.obj"
309 -@erase "$(INTDIR)\ConfirmWRQDlg.obj" 322 -@erase "$(INTDIR)\ConfirmWRQDlg.obj"
323 -@erase "$(INTDIR)\PropsACL.obj"
310 -@erase "$(INTDIR)\PropsNetwork.obj" 324 -@erase "$(INTDIR)\PropsNetwork.obj"
@@ -355,4 +369,6 @@ LINK32_FLAGS=/nologo /subsystem:windows /incremental:no\
355LINK32_OBJS= \ 369LINK32_OBJS= \
370 "$(INTDIR)\ACLTargetCombo.obj" \
356 "$(INTDIR)\ConfirmRRQDlg.obj" \ 371 "$(INTDIR)\ConfirmRRQDlg.obj" \
357 "$(INTDIR)\ConfirmWRQDlg.obj" \ 372 "$(INTDIR)\ConfirmWRQDlg.obj" \
373 "$(INTDIR)\PropsACL.obj" \
358 "$(INTDIR)\PropsNetwork.obj" \ 374 "$(INTDIR)\PropsNetwork.obj" \
@@ -672,4 +688,7 @@ LINK32_OBJS= \
672SOURCE=.\PumpKIN.cpp 688SOURCE=.\PumpKIN.cpp
689
690!IF "$(CFG)" == "PumpKIN - Win32 Release"
691
673DEP_CPP_PUMPK=\ 692DEP_CPP_PUMPK=\
674 ".\PumpKIN.h"\ 693 ".\pumpkin.h"\
675 ".\PumpKINDlg.h"\ 694 ".\PumpKINDlg.h"\
@@ -680,5 +699,2 @@ DEP_CPP_PUMPK=\
680 699
681!IF "$(CFG)" == "PumpKIN - Win32 Release"
682
683
684"$(INTDIR)\PumpKIN.obj" : $(SOURCE) $(DEP_CPP_PUMPK) "$(INTDIR)"\ 700"$(INTDIR)\PumpKIN.obj" : $(SOURCE) $(DEP_CPP_PUMPK) "$(INTDIR)"\
@@ -689,2 +705,8 @@ DEP_CPP_PUMPK=\
689 705
706DEP_CPP_PUMPK=\
707 ".\pumpkin.h"\
708 ".\PumpKINDlg.h"\
709 ".\shared-code\kHelpers.h"\
710 ".\stdafx.h"\
711
690 712
@@ -699,2 +721,9 @@ DEP_CPP_PUMPK=\
699 721
722DEP_CPP_PUMPK=\
723 ".\pumpkin.h"\
724 ".\PumpKINDlg.h"\
725 ".\shared-code\BellsNWhistles.h"\
726 ".\shared-code\kHelpers.h"\
727 ".\stdafx.h"\
728
700 729
@@ -711,5 +740,10 @@ DEP_CPP_PUMPK=\
711SOURCE=.\PumpKINDlg.cpp 740SOURCE=.\PumpKINDlg.cpp
741
742!IF "$(CFG)" == "PumpKIN - Win32 Release"
743
712DEP_CPP_PUMPKI=\ 744DEP_CPP_PUMPKI=\
745 ".\ACLTargetCombo.h"\
713 ".\ConfirmRRQDlg.h"\ 746 ".\ConfirmRRQDlg.h"\
714 ".\ConfirmWRQDlg.h"\ 747 ".\ConfirmWRQDlg.h"\
748 ".\PropsACL.h"\
715 ".\PropsNetwork.h"\ 749 ".\PropsNetwork.h"\
@@ -717,3 +751,3 @@ DEP_CPP_PUMPKI=\
717 ".\PropsSounds.h"\ 751 ".\PropsSounds.h"\
718 ".\PumpKIN.h"\ 752 ".\pumpkin.h"\
719 ".\PumpKINDlg.h"\ 753 ".\PumpKINDlg.h"\
@@ -728,5 +762,2 @@ DEP_CPP_PUMPKI=\
728 762
729!IF "$(CFG)" == "PumpKIN - Win32 Release"
730
731
732"$(INTDIR)\PumpKINDlg.obj" : $(SOURCE) $(DEP_CPP_PUMPKI) "$(INTDIR)"\ 763"$(INTDIR)\PumpKINDlg.obj" : $(SOURCE) $(DEP_CPP_PUMPKI) "$(INTDIR)"\
@@ -737,2 +768,20 @@ DEP_CPP_PUMPKI=\
737 768
769DEP_CPP_PUMPKI=\
770 ".\ACLTargetCombo.h"\
771 ".\ConfirmRRQDlg.h"\
772 ".\ConfirmWRQDlg.h"\
773 ".\PropsACL.h"\
774 ".\PropsNetwork.h"\
775 ".\PropsServer.h"\
776 ".\PropsSounds.h"\
777 ".\pumpkin.h"\
778 ".\PumpKINDlg.h"\
779 ".\RequestDlg.h"\
780 ".\Resolver.h"\
781 ".\Retrier.h"\
782 ".\shared-code\BellsNWhistles.h"\
783 ".\shared-code\kHelpers.h"\
784 ".\stdafx.h"\
785 ".\Trayer.h"\
786
738 787
@@ -747,2 +796,20 @@ DEP_CPP_PUMPKI=\
747 796
797DEP_CPP_PUMPKI=\
798 ".\ACLTargetCombo.h"\
799 ".\ConfirmRRQDlg.h"\
800 ".\ConfirmWRQDlg.h"\
801 ".\PropsACL.h"\
802 ".\PropsNetwork.h"\
803 ".\PropsServer.h"\
804 ".\PropsSounds.h"\
805 ".\pumpkin.h"\
806 ".\PumpKINDlg.h"\
807 ".\RequestDlg.h"\
808 ".\Resolver.h"\
809 ".\Retrier.h"\
810 ".\shared-code\BellsNWhistles.h"\
811 ".\shared-code\kHelpers.h"\
812 ".\stdafx.h"\
813 ".\Trayer.h"\
814
748 815
@@ -824,2 +891,3 @@ SOURCE=.\pumpkin.rc
824DEP_RSC_PUMPKIN=\ 891DEP_RSC_PUMPKIN=\
892 ".\res\down.ico"\
825 ".\res\failed.wav"\ 893 ".\res\failed.wav"\
@@ -828,4 +896,6 @@ DEP_RSC_PUMPKIN=\
828 ".\res\pumpkin.rc2"\ 896 ".\res\pumpkin.rc2"\
897 ".\res\remove.ico"\
829 ".\res\ring.wav"\ 898 ".\res\ring.wav"\
830 ".\res\rrq.ico"\ 899 ".\res\rrq.ico"\
900 ".\res\up.ico"\
831 ".\res\wrq.ico"\ 901 ".\res\wrq.ico"\
@@ -953,5 +1023,8 @@ BuildCmds= \
953SOURCE=.\PropsServer.cpp 1023SOURCE=.\PropsServer.cpp
1024
1025!IF "$(CFG)" == "PumpKIN - Win32 Release"
1026
954DEP_CPP_PROPS=\ 1027DEP_CPP_PROPS=\
955 ".\PropsServer.h"\ 1028 ".\PropsServer.h"\
956 ".\PumpKIN.h"\ 1029 ".\pumpkin.h"\
957 ".\shared-code\BellsNWhistles.h"\ 1030 ".\shared-code\BellsNWhistles.h"\
@@ -961,5 +1034,2 @@ DEP_CPP_PROPS=\
961 1034
962!IF "$(CFG)" == "PumpKIN - Win32 Release"
963
964
965"$(INTDIR)\PropsServer.obj" : $(SOURCE) $(DEP_CPP_PROPS) "$(INTDIR)"\ 1035"$(INTDIR)\PropsServer.obj" : $(SOURCE) $(DEP_CPP_PROPS) "$(INTDIR)"\
@@ -970,2 +1040,8 @@ DEP_CPP_PROPS=\
970 1040
1041DEP_CPP_PROPS=\
1042 ".\PropsServer.h"\
1043 ".\pumpkin.h"\
1044 ".\shared-code\kHelpers.h"\
1045 ".\stdafx.h"\
1046
971 1047
@@ -980,2 +1056,9 @@ DEP_CPP_PROPS=\
980 1056
1057DEP_CPP_PROPS=\
1058 ".\PropsServer.h"\
1059 ".\pumpkin.h"\
1060 ".\shared-code\BellsNWhistles.h"\
1061 ".\shared-code\kHelpers.h"\
1062 ".\stdafx.h"\
1063
981 1064
@@ -994,3 +1077,3 @@ DEP_CPP_PROPSN=\
994 ".\PropsNetwork.h"\ 1077 ".\PropsNetwork.h"\
995 ".\PumpKIN.h"\ 1078 ".\pumpkin.h"\
996 ".\shared-code\BellsNWhistles.h"\ 1079 ".\shared-code\BellsNWhistles.h"\
@@ -1031,5 +1114,8 @@ DEP_CPP_PROPSN=\
1031SOURCE=.\ConfirmRRQDlg.cpp 1114SOURCE=.\ConfirmRRQDlg.cpp
1115
1116!IF "$(CFG)" == "PumpKIN - Win32 Release"
1117
1032DEP_CPP_CONFI=\ 1118DEP_CPP_CONFI=\
1033 ".\ConfirmRRQDlg.h"\ 1119 ".\ConfirmRRQDlg.h"\
1034 ".\PumpKIN.h"\ 1120 ".\pumpkin.h"\
1035 ".\PumpKINDlg.h"\ 1121 ".\PumpKINDlg.h"\
@@ -1040,5 +1126,2 @@ DEP_CPP_CONFI=\
1040 1126
1041!IF "$(CFG)" == "PumpKIN - Win32 Release"
1042
1043
1044"$(INTDIR)\ConfirmRRQDlg.obj" : $(SOURCE) $(DEP_CPP_CONFI) "$(INTDIR)"\ 1127"$(INTDIR)\ConfirmRRQDlg.obj" : $(SOURCE) $(DEP_CPP_CONFI) "$(INTDIR)"\
@@ -1049,2 +1132,9 @@ DEP_CPP_CONFI=\
1049 1132
1133DEP_CPP_CONFI=\
1134 ".\ConfirmRRQDlg.h"\
1135 ".\pumpkin.h"\
1136 ".\PumpKINDlg.h"\
1137 ".\shared-code\kHelpers.h"\
1138 ".\stdafx.h"\
1139
1050 1140
@@ -1059,2 +1149,10 @@ DEP_CPP_CONFI=\
1059 1149
1150DEP_CPP_CONFI=\
1151 ".\ConfirmRRQDlg.h"\
1152 ".\pumpkin.h"\
1153 ".\PumpKINDlg.h"\
1154 ".\shared-code\BellsNWhistles.h"\
1155 ".\shared-code\kHelpers.h"\
1156 ".\stdafx.h"\
1157
1060 1158
@@ -1071,5 +1169,8 @@ DEP_CPP_CONFI=\
1071SOURCE=.\ConfirmWRQDlg.cpp 1169SOURCE=.\ConfirmWRQDlg.cpp
1170
1171!IF "$(CFG)" == "PumpKIN - Win32 Release"
1172
1072DEP_CPP_CONFIR=\ 1173DEP_CPP_CONFIR=\
1073 ".\ConfirmWRQDlg.h"\ 1174 ".\ConfirmWRQDlg.h"\
1074 ".\PumpKIN.h"\ 1175 ".\pumpkin.h"\
1075 ".\PumpKINDlg.h"\ 1176 ".\PumpKINDlg.h"\
@@ -1080,5 +1181,2 @@ DEP_CPP_CONFIR=\
1080 1181
1081!IF "$(CFG)" == "PumpKIN - Win32 Release"
1082
1083
1084"$(INTDIR)\ConfirmWRQDlg.obj" : $(SOURCE) $(DEP_CPP_CONFIR) "$(INTDIR)"\ 1182"$(INTDIR)\ConfirmWRQDlg.obj" : $(SOURCE) $(DEP_CPP_CONFIR) "$(INTDIR)"\
@@ -1089,2 +1187,9 @@ DEP_CPP_CONFIR=\
1089 1187
1188DEP_CPP_CONFIR=\
1189 ".\ConfirmWRQDlg.h"\
1190 ".\pumpkin.h"\
1191 ".\PumpKINDlg.h"\
1192 ".\shared-code\kHelpers.h"\
1193 ".\stdafx.h"\
1194
1090 1195
@@ -1099,2 +1204,10 @@ DEP_CPP_CONFIR=\
1099 1204
1205DEP_CPP_CONFIR=\
1206 ".\ConfirmWRQDlg.h"\
1207 ".\pumpkin.h"\
1208 ".\PumpKINDlg.h"\
1209 ".\shared-code\BellsNWhistles.h"\
1210 ".\shared-code\kHelpers.h"\
1211 ".\stdafx.h"\
1212
1100 1213
@@ -1112,3 +1225,3 @@ SOURCE=.\RequestDlg.cpp
1112DEP_CPP_REQUE=\ 1225DEP_CPP_REQUE=\
1113 ".\PumpKIN.h"\ 1226 ".\pumpkin.h"\
1114 ".\RequestDlg.h"\ 1227 ".\RequestDlg.h"\
@@ -1150,4 +1263,7 @@ DEP_CPP_REQUE=\
1150SOURCE=.\Resolver.cpp 1263SOURCE=.\Resolver.cpp
1264
1265!IF "$(CFG)" == "PumpKIN - Win32 Release"
1266
1151DEP_CPP_RESOL=\ 1267DEP_CPP_RESOL=\
1152 ".\PumpKIN.h"\ 1268 ".\pumpkin.h"\
1153 ".\PumpKINDlg.h"\ 1269 ".\PumpKINDlg.h"\
@@ -1159,5 +1275,2 @@ DEP_CPP_RESOL=\
1159 1275
1160!IF "$(CFG)" == "PumpKIN - Win32 Release"
1161
1162
1163"$(INTDIR)\Resolver.obj" : $(SOURCE) $(DEP_CPP_RESOL) "$(INTDIR)"\ 1276"$(INTDIR)\Resolver.obj" : $(SOURCE) $(DEP_CPP_RESOL) "$(INTDIR)"\
@@ -1168,2 +1281,9 @@ DEP_CPP_RESOL=\
1168 1281
1282DEP_CPP_RESOL=\
1283 ".\pumpkin.h"\
1284 ".\PumpKINDlg.h"\
1285 ".\Resolver.h"\
1286 ".\shared-code\kHelpers.h"\
1287 ".\stdafx.h"\
1288
1169 1289
@@ -1178,2 +1298,10 @@ DEP_CPP_RESOL=\
1178 1298
1299DEP_CPP_RESOL=\
1300 ".\pumpkin.h"\
1301 ".\PumpKINDlg.h"\
1302 ".\Resolver.h"\
1303 ".\shared-code\BellsNWhistles.h"\
1304 ".\shared-code\kHelpers.h"\
1305 ".\stdafx.h"\
1306
1179 1307
@@ -1190,4 +1318,7 @@ DEP_CPP_RESOL=\
1190SOURCE=.\Retrier.cpp 1318SOURCE=.\Retrier.cpp
1319
1320!IF "$(CFG)" == "PumpKIN - Win32 Release"
1321
1191DEP_CPP_RETRI=\ 1322DEP_CPP_RETRI=\
1192 ".\PumpKIN.h"\ 1323 ".\pumpkin.h"\
1193 ".\PumpKINDlg.h"\ 1324 ".\PumpKINDlg.h"\
@@ -1199,5 +1330,2 @@ DEP_CPP_RETRI=\
1199 1330
1200!IF "$(CFG)" == "PumpKIN - Win32 Release"
1201
1202
1203"$(INTDIR)\Retrier.obj" : $(SOURCE) $(DEP_CPP_RETRI) "$(INTDIR)"\ 1331"$(INTDIR)\Retrier.obj" : $(SOURCE) $(DEP_CPP_RETRI) "$(INTDIR)"\
@@ -1208,2 +1336,9 @@ DEP_CPP_RETRI=\
1208 1336
1337DEP_CPP_RETRI=\
1338 ".\pumpkin.h"\
1339 ".\PumpKINDlg.h"\
1340 ".\Retrier.h"\
1341 ".\shared-code\kHelpers.h"\
1342 ".\stdafx.h"\
1343
1209 1344
@@ -1218,2 +1353,10 @@ DEP_CPP_RETRI=\
1218 1353
1354DEP_CPP_RETRI=\
1355 ".\pumpkin.h"\
1356 ".\PumpKINDlg.h"\
1357 ".\Retrier.h"\
1358 ".\shared-code\BellsNWhistles.h"\
1359 ".\shared-code\kHelpers.h"\
1360 ".\stdafx.h"\
1361
1219 1362
@@ -1230,4 +1373,7 @@ DEP_CPP_RETRI=\
1230SOURCE=.\Trayer.cpp 1373SOURCE=.\Trayer.cpp
1374
1375!IF "$(CFG)" == "PumpKIN - Win32 Release"
1376
1231DEP_CPP_TRAYE=\ 1377DEP_CPP_TRAYE=\
1232 ".\PumpKIN.h"\ 1378 ".\pumpkin.h"\
1233 ".\PumpKINDlg.h"\ 1379 ".\PumpKINDlg.h"\
@@ -1239,5 +1385,2 @@ DEP_CPP_TRAYE=\
1239 1385
1240!IF "$(CFG)" == "PumpKIN - Win32 Release"
1241
1242
1243"$(INTDIR)\Trayer.obj" : $(SOURCE) $(DEP_CPP_TRAYE) "$(INTDIR)"\ 1386"$(INTDIR)\Trayer.obj" : $(SOURCE) $(DEP_CPP_TRAYE) "$(INTDIR)"\
@@ -1248,2 +1391,9 @@ DEP_CPP_TRAYE=\
1248 1391
1392DEP_CPP_TRAYE=\
1393 ".\pumpkin.h"\
1394 ".\PumpKINDlg.h"\
1395 ".\shared-code\kHelpers.h"\
1396 ".\stdafx.h"\
1397 ".\Trayer.h"\
1398
1249 1399
@@ -1258,2 +1408,10 @@ DEP_CPP_TRAYE=\
1258 1408
1409DEP_CPP_TRAYE=\
1410 ".\pumpkin.h"\
1411 ".\PumpKINDlg.h"\
1412 ".\shared-code\BellsNWhistles.h"\
1413 ".\shared-code\kHelpers.h"\
1414 ".\stdafx.h"\
1415 ".\Trayer.h"\
1416
1259 1417
@@ -1290,5 +1448,8 @@ SOURCE=.\help\pumpkin.cnt
1290SOURCE=.\PropsSounds.cpp 1448SOURCE=.\PropsSounds.cpp
1449
1450!IF "$(CFG)" == "PumpKIN - Win32 Release"
1451
1291DEP_CPP_PROPSS=\ 1452DEP_CPP_PROPSS=\
1292 ".\PropsSounds.h"\ 1453 ".\PropsSounds.h"\
1293 ".\PumpKIN.h"\ 1454 ".\pumpkin.h"\
1294 ".\PumpKINDlg.h"\ 1455 ".\PumpKINDlg.h"\
@@ -1299,5 +1460,2 @@ DEP_CPP_PROPSS=\
1299 1460
1300!IF "$(CFG)" == "PumpKIN - Win32 Release"
1301
1302
1303"$(INTDIR)\PropsSounds.obj" : $(SOURCE) $(DEP_CPP_PROPSS) "$(INTDIR)"\ 1461"$(INTDIR)\PropsSounds.obj" : $(SOURCE) $(DEP_CPP_PROPSS) "$(INTDIR)"\
@@ -1308,2 +1466,9 @@ DEP_CPP_PROPSS=\
1308 1466
1467DEP_CPP_PROPSS=\
1468 ".\PropsSounds.h"\
1469 ".\pumpkin.h"\
1470 ".\PumpKINDlg.h"\
1471 ".\shared-code\kHelpers.h"\
1472 ".\stdafx.h"\
1473
1309 1474
@@ -1318,2 +1483,10 @@ DEP_CPP_PROPSS=\
1318 1483
1484DEP_CPP_PROPSS=\
1485 ".\PropsSounds.h"\
1486 ".\pumpkin.h"\
1487 ".\PumpKINDlg.h"\
1488 ".\shared-code\BellsNWhistles.h"\
1489 ".\shared-code\kHelpers.h"\
1490 ".\stdafx.h"\
1491
1319 1492
@@ -1326,2 +1499,115 @@ DEP_CPP_PROPSS=\
1326# End Source File 1499# End Source File
1500################################################################################
1501# Begin Source File
1502
1503SOURCE=.\PropsACL.cpp
1504
1505!IF "$(CFG)" == "PumpKIN - Win32 Release"
1506
1507DEP_CPP_PROPSA=\
1508 ".\ACLTargetCombo.h"\
1509 ".\PropsACL.h"\
1510 ".\pumpkin.h"\
1511 ".\PumpKINDlg.h"\
1512 ".\shared-code\BellsNWhistles.h"\
1513 ".\shared-code\kHelpers.h"\
1514 ".\stdafx.h"\
1515
1516
1517"$(INTDIR)\PropsACL.obj" : $(SOURCE) $(DEP_CPP_PROPSA) "$(INTDIR)"\
1518 "$(INTDIR)\pumpkin.pch"
1519
1520
1521!ELSEIF "$(CFG)" == "PumpKIN - Win32 Debug"
1522
1523DEP_CPP_PROPSA=\
1524 ".\ACLTargetCombo.h"\
1525 ".\PropsACL.h"\
1526 ".\pumpkin.h"\
1527 ".\PumpKINDlg.h"\
1528 ".\shared-code\kHelpers.h"\
1529 ".\stdafx.h"\
1530
1531
1532"$(INTDIR)\PropsACL.obj" : $(SOURCE) $(DEP_CPP_PROPSA) "$(INTDIR)"\
1533 "$(INTDIR)\pumpkin.pch"
1534
1535"$(INTDIR)\PropsACL.sbr" : $(SOURCE) $(DEP_CPP_PROPSA) "$(INTDIR)"\
1536 "$(INTDIR)\pumpkin.pch"
1537
1538
1539!ELSEIF "$(CFG)" == "PumpKIN - Win32 Static"
1540
1541DEP_CPP_PROPSA=\
1542 ".\ACLTargetCombo.h"\
1543 ".\PropsACL.h"\
1544 ".\pumpkin.h"\
1545 ".\PumpKINDlg.h"\
1546 ".\shared-code\BellsNWhistles.h"\
1547 ".\shared-code\kHelpers.h"\
1548 ".\stdafx.h"\
1549
1550
1551"$(INTDIR)\PropsACL.obj" : $(SOURCE) $(DEP_CPP_PROPSA) "$(INTDIR)"\
1552 "$(INTDIR)\pumpkin.pch"
1553
1554
1555!ENDIF
1556
1557# End Source File
1558################################################################################
1559# Begin Source File
1560
1561SOURCE=.\ACLTargetCombo.cpp
1562
1563!IF "$(CFG)" == "PumpKIN - Win32 Release"
1564
1565DEP_CPP_ACLTA=\
1566 ".\ACLTargetCombo.h"\
1567 ".\pumpkin.h"\
1568 ".\PumpKINDlg.h"\
1569 ".\shared-code\BellsNWhistles.h"\
1570 ".\shared-code\kHelpers.h"\
1571 ".\stdafx.h"\
1572
1573
1574"$(INTDIR)\ACLTargetCombo.obj" : $(SOURCE) $(DEP_CPP_ACLTA) "$(INTDIR)"\
1575 "$(INTDIR)\pumpkin.pch"
1576
1577
1578!ELSEIF "$(CFG)" == "PumpKIN - Win32 Debug"
1579
1580DEP_CPP_ACLTA=\
1581 ".\ACLTargetCombo.h"\
1582 ".\pumpkin.h"\
1583 ".\PumpKINDlg.h"\
1584 ".\shared-code\kHelpers.h"\
1585 ".\stdafx.h"\
1586
1587
1588"$(INTDIR)\ACLTargetCombo.obj" : $(SOURCE) $(DEP_CPP_ACLTA) "$(INTDIR)"\
1589 "$(INTDIR)\pumpkin.pch"
1590
1591"$(INTDIR)\ACLTargetCombo.sbr" : $(SOURCE) $(DEP_CPP_ACLTA) "$(INTDIR)"\
1592 "$(INTDIR)\pumpkin.pch"
1593
1594
1595!ELSEIF "$(CFG)" == "PumpKIN - Win32 Static"
1596
1597DEP_CPP_ACLTA=\
1598 ".\ACLTargetCombo.h"\
1599 ".\pumpkin.h"\
1600 ".\PumpKINDlg.h"\
1601 ".\shared-code\BellsNWhistles.h"\
1602 ".\shared-code\kHelpers.h"\
1603 ".\stdafx.h"\
1604
1605
1606"$(INTDIR)\ACLTargetCombo.obj" : $(SOURCE) $(DEP_CPP_ACLTA) "$(INTDIR)"\
1607 "$(INTDIR)\pumpkin.pch"
1608
1609
1610!ENDIF
1611
1612# End Source File
1327# End Target 1613# End Target
diff --git a/pumpkin.rc b/pumpkin.rc
index 7dafe04..87745db 100644
--- a/pumpkin.rc
+++ b/pumpkin.rc
@@ -72,2 +72,5 @@ IDR_MAINFRAME ICON DISCARDABLE "res\\pumpkin.ico"
72IDI_PLAY ICON DISCARDABLE "shared-data/play-icon.ico" 72IDI_PLAY ICON DISCARDABLE "shared-data/play-icon.ico"
73IDI_UP ICON DISCARDABLE "res\\up.ico"
74IDI_DOWN ICON DISCARDABLE "res\\down.ico"
75IDI_REMOVE ICON DISCARDABLE "res\\remove.ico"
73 76
@@ -84,5 +87,5 @@ BEGIN
84 ICON IDR_MAINFRAME,IDC_STATIC,7,17,18,20 87 ICON IDR_MAINFRAME,IDC_STATIC,7,17,18,20
85 LTEXT "PumpKIN, Version 2.6",IDC_STATIC,40,15,119,8, 88 LTEXT "PumpKIN, Version 2.7",IDC_STATIC,40,15,119,8,
86 SS_NOPREFIX 89 SS_NOPREFIX
87 LTEXT "Copyright © 1997-2005 Klever Group",IDC_STATIC,40,30, 90 LTEXT "Copyright © 1997-2006 Klever Group",IDC_STATIC,40,30,
88 170,8 91 170,8
@@ -92,3 +95,3 @@ END
92 95
93IDD_PUMPKIN_DIALOG DIALOGEX 0, 0, 362, 191 96IDD_PUMPKIN_DIALOG DIALOGEX 0, 0, 362, 193
94STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | 97STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION |
@@ -97,3 +100,3 @@ EXSTYLE WS_EX_ACCEPTFILES | WS_EX_APPWINDOW
97CAPTION " PumpKIN" 100CAPTION " PumpKIN"
98FONT 8, "MS Sans Serif", 0, 0, 0x1 101FONT 8, "MS Sans Serif"
99BEGIN 102BEGIN
@@ -112,8 +115,11 @@ BEGIN
112 PUSHBUTTON "&Help",ID_HELP,305,97,50,17,BS_NOTIFY,WS_EX_CLIENTEDGE 115 PUSHBUTTON "&Help",ID_HELP,305,97,50,17,BS_NOTIFY,WS_EX_CLIENTEDGE
113 LISTBOX IDC_LOG,7,115,348,69,LBS_USETABSTOPS | LBS_NOSEL | 116 LISTBOX IDC_LOG,7,115,348,65,LBS_USETABSTOPS | LBS_NOSEL |
114 WS_VSCROLL | WS_HSCROLL,WS_EX_DLGMODALFRAME 117 WS_VSCROLL | WS_HSCROLL,WS_EX_DLGMODALFRAME
115 PUSHBUTTON "..",IDCANCEL,0,183,6,7,NOT WS_VISIBLE | NOT WS_TABSTOP 118 PUSHBUTTON "..",IDCANCEL,0,183,6,7,NOT WS_VISIBLE | NOT WS_TABSTOP
119 CONTROL "&Server is running",IDC_LISTENING,"Button",
120 BS_AUTOCHECKBOX | BS_LEFTTEXT | BS_FLAT | WS_TABSTOP,286,
121 180,69,11,WS_EX_TRANSPARENT | WS_EX_STATICEDGE
116END 122END
117 123
118IDD_PROPS_SERVER DIALOG DISCARDABLE 0, 0, 210, 154 124IDD_PROPS_SERVER DIALOG DISCARDABLE 0, 0, 300, 201
119STYLE WS_CHILD | WS_DISABLED | WS_CAPTION 125STYLE WS_CHILD | WS_DISABLED | WS_CAPTION
@@ -123,32 +129,37 @@ BEGIN
123 GROUPBOX "TFTP filesystem &root (download path)",IDC_STATIC,7,7, 129 GROUPBOX "TFTP filesystem &root (download path)",IDC_STATIC,7,7,
124 196,38 130 286,38
125 EDITTEXT IDC_TFTPROOT,13,16,170,13,ES_AUTOHSCROLL 131 EDITTEXT IDC_TFTPROOT,13,16,256,13,ES_AUTOHSCROLL
126 PUSHBUTTON "&B",IDC_BROWSE,186,16,13,13,BS_ICON 132 PUSHBUTTON "&B",IDC_BROWSE,274,16,13,13,BS_ICON
127 CONTROL "Allow access to &subdirectories",IDC_TFTPSUBDIRS, 133 CONTROL "Allow access to &subdirectories",IDC_TFTPSUBDIRS,
128 "Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,31,111,10 134 "Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,31,111,10
129 GROUPBOX "Read Request Behavior",IDC_STATIC,7,48,153,42 135 GROUPBOX "Read Request Behavior",IDC_STATIC,7,48,243,56
130 CONTROL "Give &all files",IDC_RRQ_GIVEALL,"Button", 136 CONTROL "Give &all files",IDC_RRQ_GIVEALL,"Button",
131 BS_AUTORADIOBUTTON | BS_NOTIFY | WS_GROUP,13,57,53,10 137 BS_AUTORADIOBUTTON | BS_NOTIFY | WS_GROUP,13,63,53,10
132 CONTROL "&Prompt before giving file",IDC_RRQ_ALWAYSCONFIRM, 138 CONTROL "&Prompt before giving file",IDC_RRQ_ALWAYSCONFIRM,
133 "Button",BS_AUTORADIOBUTTON | BS_NOTIFY,23,67,91,10 139 "Button",BS_AUTORADIOBUTTON | BS_NOTIFY,43,75,91,10
134 CONTROL "&Deny all requests",IDC_RRQ_DENYALL,"Button", 140 CONTROL "&Deny all requests",IDC_RRQ_DENYALL,"Button",
135 BS_AUTORADIOBUTTON | BS_NOTIFY,33,77,70,10 141 BS_AUTORADIOBUTTON | BS_NOTIFY,73,87,70,10
136 GROUPBOX "Write Request Behavior",IDC_STATIC,7,93,172,54,WS_GROUP 142 GROUPBOX "Write Request Behavior",IDC_STATIC,7,106,243,56,
143 WS_GROUP
137 CONTROL "Take a&ll files",IDC_WRQ_TAKEALL,"Button", 144 CONTROL "Take a&ll files",IDC_WRQ_TAKEALL,"Button",
138 BS_AUTORADIOBUTTON | WS_GROUP,13,103,55,10 145 BS_AUTORADIOBUTTON | WS_GROUP,13,116,55,10
139 CONTROL "Prompt if file &exists",IDC_WRQ_PROMPTEXISTING,"Button", 146 CONTROL "Prompt if file &exists",IDC_WRQ_PROMPTEXISTING,"Button",
140 BS_AUTORADIOBUTTON,23,113,73,10 147 BS_AUTORADIOBUTTON,43,126,73,10
141 CONTROL "Always pro&mpt before accepting file", 148 CONTROL "Always pro&mpt before accepting file",
142 IDC_WRQ_ALWAYSCONFIRM,"Button",BS_AUTORADIOBUTTON,33,123, 149 IDC_WRQ_ALWAYSCONFIRM,"Button",BS_AUTORADIOBUTTON,73,136,
143 139,10 150 139,10
144 CONTROL "D&eny all requests",IDC_WRQ_DENYALL,"Button", 151 CONTROL "D&eny all requests",IDC_WRQ_DENYALL,"Button",
145 BS_AUTORADIOBUTTON,43,133,70,10 152 BS_AUTORADIOBUTTON,103,146,70,10
146 CTEXT "Confirmation &timeout",IDC_STATIC,163,52,40,19, 153 CTEXT "Confirmation &timeout",IDC_STATIC,253,52,40,19,
147 SS_NOTIFY 154 SS_NOTIFY
148 CONTROL "Slider1",IDC_PROMPTTIMEOUT,"msctls_trackbar32", 155 CONTROL "Slider1",IDC_PROMPTTIMEOUT,"msctls_trackbar32",
149 TBS_AUTOTICKS | TBS_VERT | TBS_TOP | WS_TABSTOP,182,73, 156 TBS_AUTOTICKS | TBS_VERT | TBS_TOP | WS_TABSTOP,272,72,
150 21,74 157 21,90
158 GROUPBOX "Log file (leave empty to disable logging to file)",
159 IDC_STATIC,7,165,286,29
160 EDITTEXT IDC_LOGFILE,13,175,256,13,ES_AUTOHSCROLL
161 PUSHBUTTON "",IDC_LOGFILE_BROWSE,274,175,13,13,BS_ICON
151END 162END
152 163
153IDD_PROPS_NETWORK DIALOG DISCARDABLE 0, 0, 210, 154 164IDD_PROPS_NETWORK DIALOG DISCARDABLE 0, 0, 300, 201
154STYLE WS_CHILD | WS_DISABLED | WS_CAPTION 165STYLE WS_CHILD | WS_DISABLED | WS_CAPTION
@@ -157,3 +168,3 @@ FONT 8, "MS Sans Serif"
157BEGIN 168BEGIN
158 GROUPBOX "UDP Ports",IDC_STATIC,7,7,196,40 169 GROUPBOX "UDP Ports",IDC_STATIC,7,7,286,40
159 RTEXT "Listen for &incoming requests on port:",IDC_STATIC,13, 170 RTEXT "Listen for &incoming requests on port:",IDC_STATIC,13,
@@ -259,3 +270,3 @@ END
259 270
260IDD_PROPS_SOUNDS DIALOG DISCARDABLE 0, 0, 210, 154 271IDD_PROPS_SOUNDS DIALOG DISCARDABLE 0, 0, 300, 201
261STYLE WS_CHILD | WS_DISABLED | WS_CAPTION 272STYLE WS_CHILD | WS_DISABLED | WS_CAPTION
@@ -265,16 +276,44 @@ BEGIN
265 LTEXT "&Incoming request:",IDC_STATIC,7,9,57,8 276 LTEXT "&Incoming request:",IDC_STATIC,7,9,57,8
266 COMBOBOX IDC_RING,70,7,103,100,CBS_DROPDOWN | CBS_AUTOHSCROLL | 277 COMBOBOX IDC_RING,70,7,188,100,CBS_DROPDOWN | CBS_AUTOHSCROLL |
267 CBS_SORT | WS_VSCROLL | WS_TABSTOP 278 CBS_SORT | WS_VSCROLL | WS_TABSTOP
268 PUSHBUTTON "browse",IDC_RING_BROWSE,175,7,13,13,BS_ICON 279 PUSHBUTTON "browse",IDC_RING_BROWSE,263,7,13,13,BS_ICON
269 PUSHBUTTON "play",IDC_RING_PLAY,190,7,13,13,BS_ICON 280 PUSHBUTTON "play",IDC_RING_PLAY,280,7,13,13,BS_ICON
270 LTEXT "xfer &finished:",IDC_STATIC,7,25,57,8 281 LTEXT "xfer &finished:",IDC_STATIC,7,25,57,8
271 COMBOBOX IDC_FINISHED,70,22,103,100,CBS_DROPDOWN | 282 COMBOBOX IDC_FINISHED,70,22,188,100,CBS_DROPDOWN |
272 CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP 283 CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP
273 PUSHBUTTON "browse",IDC_FINISHED_BROWSE,175,22,13,13,BS_ICON 284 PUSHBUTTON "browse",IDC_FINISHED_BROWSE,263,22,13,13,BS_ICON
274 PUSHBUTTON "play",IDC_FINISHED_PLAY,190,22,13,13,BS_ICON 285 PUSHBUTTON "play",IDC_FINISHED_PLAY,280,22,13,13,BS_ICON
275 LTEXT "xfer &aborted:",IDC_STATIC,7,40,57,8 286 LTEXT "xfer &aborted:",IDC_STATIC,7,40,57,8
276 COMBOBOX IDC_ABORTED,70,37,103,100,CBS_DROPDOWN | CBS_AUTOHSCROLL | 287 COMBOBOX IDC_ABORTED,70,37,188,100,CBS_DROPDOWN | CBS_AUTOHSCROLL |
277 CBS_SORT | WS_VSCROLL | WS_TABSTOP 288 CBS_SORT | WS_VSCROLL | WS_TABSTOP
278 PUSHBUTTON "browse",IDC_ABORTED_BROWSE,175,37,13,13,BS_ICON 289 PUSHBUTTON "browse",IDC_ABORTED_BROWSE,263,37,13,13,BS_ICON
279 PUSHBUTTON "play",IDC_ABORTED_PLAY,190,37,13,13,BS_ICON 290 PUSHBUTTON "play",IDC_ABORTED_PLAY,280,37,13,13,BS_ICON
291END
292
293IDD_PROPS_ACL DIALOG DISCARDABLE 0, 0, 300, 201
294STYLE WS_CHILD | WS_DISABLED | WS_CAPTION
295CAPTION "Access Lists"
296FONT 8, "MS Sans Serif"
297BEGIN
298 CONTROL "List1",IDC_ACL_LIST,"SysListView32",LVS_REPORT |
299 WS_BORDER | WS_TABSTOP,7,7,258,110
300 PUSHBUTTON "&Up",IDC_ACL_UP,273,7,20,30,BS_ICON | BS_CENTER |
301 BS_VCENTER
302 PUSHBUTTON "&Down",IDC_ACL_DOWN,273,87,20,30,BS_ICON | BS_CENTER |
303 BS_VCENTER
304 PUSHBUTTON "&Remove",IDC_ACL_REMOVE,273,47,20,30,BS_ICON |
305 BS_CENTER | BS_VCENTER
306 LTEXT "If",IDC_STATIC,13,128,8,8
307 COMBOBOX IDC_ACL_XFER,21,125,48,67,CBS_DROPDOWNLIST | WS_VSCROLL |
308 WS_TABSTOP
309 LTEXT "request comes from the address in the network",
310 IDC_STATIC,71,128,122,8
311 EDITTEXT IDC_ACL_ADDR,47,143,80,12,ES_AUTOHSCROLL
312 LTEXT "with netmask",IDC_STATIC,129,145,41,8
313 EDITTEXT IDC_ACL_NETMASK,173,143,80,12,ES_AUTOHSCROLL
314 LTEXT "then",IDC_STATIC,124,160,15,8
315 COMBOBOX IDC_ACL_RULE,143,158,123,117,CBS_DROPDOWNLIST |
316 WS_VSCROLL | WS_TABSTOP
317 PUSHBUTTON "&Add new rule",IDC_ACL_ADD,7,178,130,16
318 PUSHBUTTON "&Replace rule",IDC_ACL_REPLACE,152,178,130,16
280END 319END
@@ -289,4 +328,4 @@ END
289VS_VERSION_INFO VERSIONINFO 328VS_VERSION_INFO VERSIONINFO
290 FILEVERSION 2,6,0,0 329 FILEVERSION 2,7,0,0
291 PRODUCTVERSION 2,6,0,0 330 PRODUCTVERSION 2,7,0,0
292 FILEFLAGSMASK 0x3fL 331 FILEFLAGSMASK 0x3fL
@@ -307,5 +346,5 @@ BEGIN
307 VALUE "FileDescription", "PumpKIN, tftp client/daemon\0" 346 VALUE "FileDescription", "PumpKIN, tftp client/daemon\0"
308 VALUE "FileVersion", "2, 6, 0, 0\0" 347 VALUE "FileVersion", "2, 7, 0, 0\0"
309 VALUE "InternalName", "PUMPKIN\0" 348 VALUE "InternalName", "PUMPKIN\0"
310 VALUE "LegalCopyright", "Copyright © 1997-2005 Klever Group (http://www.klever.net)\0" 349 VALUE "LegalCopyright", "Copyright © 1997-2006 Klever Group (http://www.klever.net)\0"
311 VALUE "LegalTrademarks", "Klever Group (http://www.klever.net/)\0" 350 VALUE "LegalTrademarks", "Klever Group (http://www.klever.net/)\0"
@@ -313,3 +352,3 @@ BEGIN
313 VALUE "ProductName", "PumpKIN\0" 352 VALUE "ProductName", "PumpKIN\0"
314 VALUE "ProductVersion", "2, 6, 0, 0\0" 353 VALUE "ProductVersion", "2, 7, 0, 0\0"
315 END 354 END
@@ -346,3 +385,3 @@ BEGIN
346 TOPMARGIN, 7 385 TOPMARGIN, 7
347 BOTTOMMARGIN, 184 386 BOTTOMMARGIN, 186
348 HORZGUIDE, 115 387 HORZGUIDE, 115
@@ -353,5 +392,5 @@ BEGIN
353 LEFTMARGIN, 7 392 LEFTMARGIN, 7
354 RIGHTMARGIN, 203 393 RIGHTMARGIN, 293
355 TOPMARGIN, 7 394 TOPMARGIN, 7
356 BOTTOMMARGIN, 147 395 BOTTOMMARGIN, 194
357 END 396 END
@@ -361,5 +400,5 @@ BEGIN
361 LEFTMARGIN, 7 400 LEFTMARGIN, 7
362 RIGHTMARGIN, 203 401 RIGHTMARGIN, 293
363 TOPMARGIN, 7 402 TOPMARGIN, 7
364 BOTTOMMARGIN, 147 403 BOTTOMMARGIN, 194
365 END 404 END
@@ -393,5 +432,15 @@ BEGIN
393 LEFTMARGIN, 7 432 LEFTMARGIN, 7
394 RIGHTMARGIN, 203 433 RIGHTMARGIN, 293
434 TOPMARGIN, 7
435 BOTTOMMARGIN, 194
436 END
437
438 IDD_PROPS_ACL, DIALOG
439 BEGIN
440 LEFTMARGIN, 7
441 RIGHTMARGIN, 293
395 TOPMARGIN, 7 442 TOPMARGIN, 7
396 BOTTOMMARGIN, 147 443 BOTTOMMARGIN, 194
444 HORZGUIDE, 117
445 HORZGUIDE, 125
397 END 446 END
@@ -441,2 +490,21 @@ END
441 490
491IDD_PROPS_ACL DLGINIT
492BEGIN
493 IDC_ACL_XFER, 0x403, 5, 0
4940x6572, 0x6461, "\000"
495 IDC_ACL_XFER, 0x403, 6, 0
4960x7277, 0x7469, 0x0065,
497 IDC_ACL_RULE, 0x403, 12, 0
4980x6361, 0x6563, 0x7470, 0x6620, 0x6c69, 0x0065,
499 IDC_ACL_RULE, 0x403, 33, 0
5000x6361, 0x6563, 0x7470, 0x6120, 0x646e, 0x7220, 0x6e65, 0x6d61, 0x2065,
5010x6669, 0x6620, 0x6c69, 0x2065, 0x7865, 0x7369, 0x7374, "\000"
502 IDC_ACL_RULE, 0x403, 12, 0
5030x6572, 0x656a, 0x7463, 0x6620, 0x6c69, 0x0065,
504 IDC_ACL_RULE, 0x403, 31, 0
5050x6166, 0x6c6c, 0x6162, 0x6b63, 0x7420, 0x206f, 0x6874, 0x2065, 0x6c67,
5060x626f, 0x6c61, 0x7320, 0x7465, 0x6974, 0x676e, "\000"
507 0
508END
509
442 510
@@ -454,2 +522,3 @@ BEGIN
454 MENUITEM "&Options", ID_TRAY_OPTIONS 522 MENUITEM "&Options", ID_TRAY_OPTIONS
523 MENUITEM "&Listen to requests", ID_TRAY_LISTEN
455 MENUITEM "Show &PumpKIN Window", ID_TRAY_SHOWPUMPKINWINDOW 524 MENUITEM "Show &PumpKIN Window", ID_TRAY_SHOWPUMPKINWINDOW
@@ -535,2 +604,3 @@ BEGIN
535 ID_TRAY_OPENFILESFOLDER "Explore TFTP root folder" 604 ID_TRAY_OPENFILESFOLDER "Explore TFTP root folder"
605 ID_TRAY_LISTEN "Listen for incoming requests"
536END 606END
@@ -574,2 +644,5 @@ BEGIN
574 IDS_BOX_CANTBIND "Failed to create listening socket. The port may be in use by another application." 644 IDS_BOX_CANTBIND "Failed to create listening socket. The port may be in use by another application."
645 IDS_NO_XFER_OP "No request type specified."
646 IDS_INVALID_IP "Invalid IP address."
647 IDS_INVALID_NETMASK "Invalid netmask."
575END 648END
@@ -581,2 +654,8 @@ END
581 654
655STRINGTABLE DISCARDABLE
656BEGIN
657 IDS_INVALID_RULE "Invalid access rule."
658 IDS_LOG_LOGERROR "Error logging to '%s'"
659END
660
582#endif // English (U.S.) resources 661#endif // English (U.S.) resources
diff --git a/res/down.ico b/res/down.ico
new file mode 100644
index 0000000..433e718
--- a/dev/null
+++ b/res/down.ico
Binary files differ
diff --git a/res/remove.ico b/res/remove.ico
new file mode 100644
index 0000000..8e4473d
--- a/dev/null
+++ b/res/remove.ico
Binary files differ
diff --git a/res/up.ico b/res/up.ico
new file mode 100644
index 0000000..32f684b
--- a/dev/null
+++ b/res/up.ico
Binary files differ
diff --git a/resource.h b/resource.h
index 8755a55..1bdce59 100644
--- a/resource.h
+++ b/resource.h
@@ -75,8 +75,17 @@
75#define IDS_TFTP_ERROR_TSIZE 150 75#define IDS_TFTP_ERROR_TSIZE 150
76#define IDD_PROPS_ACL 150
76#define IDS_TFTP_ERROR_BSIZE 151 77#define IDS_TFTP_ERROR_BSIZE 151
77#define IDS_TFTP_ERROR_TOUT 152 78#define IDS_TFTP_ERROR_TOUT 152
79#define IDI_UP 152
78#define IDS_SELECT_TFTPROOT 153 80#define IDS_SELECT_TFTPROOT 153
81#define IDI_DOWN 153
79#define IDS_FILTER_WAV 154 82#define IDS_FILTER_WAV 154
83#define IDI_REMOVE 154
80#define IDS_TITLE_WAV 155 84#define IDS_TITLE_WAV 155
81#define IDS_BOX_CANTBIND 156 85#define IDS_BOX_CANTBIND 156
86#define IDS_NO_XFER_OP 157
87#define IDS_INVALID_IP 158
88#define IDS_INVALID_NETMASK 159
89#define IDS_INVALID_RULE 160
90#define IDS_LOG_LOGERROR 161
82#define IDC_KLEVERNET 1000 91#define IDC_KLEVERNET 1000
@@ -123,8 +132,21 @@
123#define IDC_RING_PLAY 1043 132#define IDC_RING_PLAY 1043
133#define IDC_ACL_LIST 1043
124#define IDC_FINISHED 1044 134#define IDC_FINISHED 1044
135#define IDC_ACL_UP 1044
125#define IDC_FINISHED_BROWSE 1045 136#define IDC_FINISHED_BROWSE 1045
137#define IDC_ACL_DOWN 1045
126#define IDC_FINISHED_PLAY 1046 138#define IDC_FINISHED_PLAY 1046
139#define IDC_ACL_REMOVE 1046
127#define IDC_ABORTED 1047 140#define IDC_ABORTED 1047
141#define IDC_ACL_ADDR 1047
128#define IDC_ABORTED_BROWSE 1048 142#define IDC_ABORTED_BROWSE 1048
143#define IDC_ACL_RULE 1048
129#define IDC_ABORTED_PLAY 1049 144#define IDC_ABORTED_PLAY 1049
145#define IDC_ACL_NETMASK 1049
146#define IDC_ACL_ADD 1050
147#define IDC_ACL_XFER 1051
148#define IDC_ACL_REPLACE 1052
149#define IDC_LISTENING 1052
150#define IDC_LOGFILE 1053
151#define IDC_LOGFILE_BROWSE 1054
130#define ID_TRAY_HELP 32771 152#define ID_TRAY_HELP 32771
@@ -137,2 +159,3 @@
137#define ID_TRAY_OPENFILESFOLDER 32778 159#define ID_TRAY_OPENFILESFOLDER 32778
160#define ID_TRAY_LISTEN 32780
138 161
@@ -142,5 +165,5 @@
142#ifndef APSTUDIO_READONLY_SYMBOLS 165#ifndef APSTUDIO_READONLY_SYMBOLS
143#define _APS_NEXT_RESOURCE_VALUE 150 166#define _APS_NEXT_RESOURCE_VALUE 155
144#define _APS_NEXT_COMMAND_VALUE 32780 167#define _APS_NEXT_COMMAND_VALUE 32781
145#define _APS_NEXT_CONTROL_VALUE 1043 168#define _APS_NEXT_CONTROL_VALUE 1055
146#define _APS_NEXT_SYMED_VALUE 102 169#define _APS_NEXT_SYMED_VALUE 102