summaryrefslogtreecommitdiffabout
authorMichael Krelin <hacker@klever.net>2006-02-02 23:07:50 (UTC)
committer Michael Krelin <hacker@klever.net>2006-02-02 23:07:50 (UTC)
commit39bb4331674cc77560a546f4f9b14b143603d4be (patch) (unidiff)
treefbbc1006c655888a5483ddd359c52b863e7a27ab
parentfedc32eb7d20e5278a2125ead3ed125dc63b5746 (diff)
downloadpumpkin-39bb4331674cc77560a546f4f9b14b143603d4be.zip
pumpkin-39bb4331674cc77560a546f4f9b14b143603d4be.tar.gz
pumpkin-39bb4331674cc77560a546f4f9b14b143603d4be.tar.bz2
- version bump to 2.7
- year bump to 2006 - ip-based access control - server switchable off - logging to file git-svn-id: http://svn.klever.net/kin/pumpkin/trunk@144 fe716a7a-6dde-0310-88d9-d003556173a8
Diffstat (more/less context) (ignore 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,4 +1,4 @@
1Copyright (c) 1997-2005 Klever Group (http://www.klever.net/) 1Copyright (c) 1997-2006 Klever Group (http://www.klever.net/)
2 2
3Permission is hereby granted, free of charge, to any person obtaining a copy of 3Permission is hereby granted, free of charge, to any person obtaining a copy of
4this software and associated documentation files (the "Software"), to deal in 4this software and associated documentation files (the "Software"), to deal in
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
@@ -23,6 +23,7 @@ CPropsServer::CPropsServer() : CPropertyPage(CPropsServer::IDD)
23 m_TFTPRoot = _T(""); 23 m_TFTPRoot = _T("");
24 m_TFTPSubdirs = FALSE; 24 m_TFTPSubdirs = FALSE;
25 m_WRQMode = -1; 25 m_WRQMode = -1;
26 m_LogFile = _T("");
26 //}}AFX_DATA_INIT 27 //}}AFX_DATA_INIT
27} 28}
28 29
@@ -34,12 +35,14 @@ void CPropsServer::DoDataExchange(CDataExchange* pDX)
34{ 35{
35 CPropertyPage::DoDataExchange(pDX); 36 CPropertyPage::DoDataExchange(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);
38 DDX_Control(pDX, IDC_PROMPTTIMEOUT, m_PromptTimeoutCtl); 40 DDX_Control(pDX, IDC_PROMPTTIMEOUT, m_PromptTimeoutCtl);
39 DDX_Radio(pDX, IDC_RRQ_GIVEALL, m_RRQMode); 41 DDX_Radio(pDX, IDC_RRQ_GIVEALL, m_RRQMode);
40 DDX_Text(pDX, IDC_TFTPROOT, m_TFTPRoot); 42 DDX_Text(pDX, IDC_TFTPROOT, m_TFTPRoot);
41 DDX_Check(pDX, IDC_TFTPSUBDIRS, m_TFTPSubdirs); 43 DDX_Check(pDX, IDC_TFTPSUBDIRS, m_TFTPSubdirs);
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
44 if(pDX->m_bSaveAndValidate) 47 if(pDX->m_bSaveAndValidate)
45 m_PromptTimeOut=m_PromptTimeoutCtl.GetPos(); 48 m_PromptTimeOut=m_PromptTimeoutCtl.GetPos();
@@ -51,6 +54,7 @@ void CPropsServer::DoDataExchange(CDataExchange* pDX)
51BEGIN_MESSAGE_MAP(CPropsServer, CPropertyPage) 54BEGIN_MESSAGE_MAP(CPropsServer, CPropertyPage)
52 //{{AFX_MSG_MAP(CPropsServer) 55 //{{AFX_MSG_MAP(CPropsServer)
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
55END_MESSAGE_MAP() 59END_MESSAGE_MAP()
56 60
@@ -63,6 +67,7 @@ BOOL CPropsServer::OnInitDialog()
63 67
64 m_PromptTimeoutCtl.SetRange(5,60); 68 m_PromptTimeoutCtl.SetRange(5,60);
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
67 return TRUE; // return TRUE unless you set the focus to a control 72 return TRUE; // return TRUE unless you set the focus to a control
68 // EXCEPTION: OCX Property Pages should return FALSE 73 // EXCEPTION: OCX Property Pages should return FALSE
@@ -77,3 +82,17 @@ CString nr = m_TFTPRoot;
77 UpdateData(FALSE); 82 UpdateData(FALSE);
78 } 83 }
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
@@ -17,12 +17,14 @@ public:
17// Dialog Data 17// Dialog Data
18 //{{AFX_DATA(CPropsServer) 18 //{{AFX_DATA(CPropsServer)
19 enum { IDD = IDD_PROPS_SERVER }; 19 enum { IDD = IDD_PROPS_SERVER };
20 CButtonm_LogBrowseCtl;
20 CButtonm_BrowseCtl; 21 CButtonm_BrowseCtl;
21 CSliderCtrlm_PromptTimeoutCtl; 22 CSliderCtrlm_PromptTimeoutCtl;
22 int m_RRQMode; 23 int m_RRQMode;
23 CStringm_TFTPRoot; 24 CStringm_TFTPRoot;
24 BOOLm_TFTPSubdirs; 25 BOOLm_TFTPSubdirs;
25 int m_WRQMode; 26 int m_WRQMode;
27 CStringm_LogFile;
26 //}}AFX_DATA 28 //}}AFX_DATA
27 29
28 30
@@ -39,6 +41,7 @@ protected:
39 //{{AFX_MSG(CPropsServer) 41 //{{AFX_MSG(CPropsServer)
40 virtual BOOL OnInitDialog(); 42 virtual BOOL OnInitDialog();
41 afx_msg void OnBrowse(); 43 afx_msg void OnBrowse();
44 afx_msg void OnLogfileBrowse();
42 //}}AFX_MSG 45 //}}AFX_MSG
43 DECLARE_MESSAGE_MAP() 46 DECLARE_MESSAGE_MAP()
44 47
diff --git a/PumpKINDlg.cpp b/PumpKINDlg.cpp
index b6b8a36..4cb1633 100644
--- a/PumpKINDlg.cpp
+++ b/PumpKINDlg.cpp
@@ -5,9 +5,11 @@
5#include "PumpKIN.h" 5#include "PumpKIN.h"
6#include "PumpKINDlg.h" 6#include "PumpKINDlg.h"
7 7
8#include "ACLTargetCombo.h"
8#include "PropsServer.h" 9#include "PropsServer.h"
9#include "PropsNetwork.h" 10#include "PropsNetwork.h"
10#include "PropsSounds.h" 11#include "PropsSounds.h"
12#include "PropsACL.h"
11#include "ConfirmRRQDlg.h" 13#include "ConfirmRRQDlg.h"
12#include "ConfirmWRQDlg.h" 14#include "ConfirmWRQDlg.h"
13#include "RequestDlg.h" 15#include "RequestDlg.h"
@@ -79,6 +81,10 @@ END_MESSAGE_MAP()
79CPumpKINDlg::CPumpKINDlg(CWnd* pParent /*=NULL*/) 81CPumpKINDlg::CPumpKINDlg(CWnd* pParent /*=NULL*/)
80 : CDialog(CPumpKINDlg::IDD, pParent) 82 : CDialog(CPumpKINDlg::IDD, pParent)
81{ 83{
84 m_Listener.m_Daddy = this;
85
86 m_bListen = TRUE;
87
82 m_ListenPort = 69; 88 m_ListenPort = 69;
83 m_bTFTPSubdirs = TRUE; 89 m_bTFTPSubdirs = TRUE;
84 m_RRQMode = rrqAlwaysConfirm; 90 m_RRQMode = rrqAlwaysConfirm;
@@ -107,6 +113,15 @@ CPumpKINDlg::CPumpKINDlg(CWnd* pParent /*=NULL*/)
107 ASSERT(m_Retrier); 113 ASSERT(m_Retrier);
108 m_Trayer = new CTrayer(this); 114 m_Trayer = new CTrayer(this);
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();
111} 126}
112 127
@@ -114,6 +129,7 @@ void CPumpKINDlg::DoDataExchange(CDataExchange* pDX)
114{ 129{
115 CDialog::DoDataExchange(pDX); 130 CDialog::DoDataExchange(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);
118 DDX_Control(pDX, IDC_OPTIONS, m_OptionsCtl); 134 DDX_Control(pDX, IDC_OPTIONS, m_OptionsCtl);
119 DDX_Control(pDX, IDC_LOG, m_Log); 135 DDX_Control(pDX, IDC_LOG, m_Log);
@@ -151,6 +167,8 @@ BEGIN_MESSAGE_MAP(CPumpKINDlg, CDialog)
151 ON_COMMAND(ID_TRAY_OPENFILESFOLDER, OnTrayOpenfilesfolder) 167 ON_COMMAND(ID_TRAY_OPENFILESFOLDER, OnTrayOpenfilesfolder)
152 ON_WM_DROPFILES() 168 ON_WM_DROPFILES()
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
155END_MESSAGE_MAP() 173END_MESSAGE_MAP()
156 174
@@ -217,6 +235,8 @@ CRect rc, drc;
217 else 235 else
218 ShowWindow(SW_HIDE); 236 ShowWindow(SW_HIDE);
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.
221 { 241 {
222 // Create the ToolTip control. 242 // Create the ToolTip control.
@@ -324,11 +344,10 @@ int CPumpKINDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
324 if (CDialog::OnCreate(lpCreateStruct) == -1) 344 if (CDialog::OnCreate(lpCreateStruct) == -1)
325 return -1; 345 return -1;
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 }
333 352
334 if(!m_Trayer->Create(NULL,"PumpKIN TrayIcon",WS_CHILD,CRect(0,0,0,0),this,0)){ 353 if(!m_Trayer->Create(NULL,"PumpKIN TrayIcon",WS_CHILD,CRect(0,0,0,0),this,0)){
@@ -664,17 +683,22 @@ BOOL CRRQSocket::Create(LPCTSTR localFile,LPCTSTR hostName)
664CString lFile = localFile?localFile:m_FileName; 683CString lFile = localFile?localFile:m_FileName;
665 TurnSlashes(lFile,TRUE); 684 TurnSlashes(lFile,TRUE);
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)){
669 Deny(tftp::errAccessViolation,IDS_TFTP_ERROR_ACCESS); 688 Deny(tftp::errAccessViolation,IDS_TFTP_ERROR_ACCESS);
670 return TRUE; 689 return TRUE;
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:
674 break; 696 break;
675 case CPumpKINDlg::rrqAlwaysConfirm: 697 case CPumpKINDlg::rrqAlwaysConfirm:
676 if(ConfirmRequest()) 698 if(ConfirmRequest())
677 break; 699 break;
700 default:
701 TRACE1("Unexpected access target: %d\n",atar);
678 case CPumpKINDlg::rrqDenyAll: 702 case CPumpKINDlg::rrqDenyAll:
679 Deny(tftp::errAccessViolation,IDS_TFTP_ERROR_ACCESS); 703 Deny(tftp::errAccessViolation,IDS_TFTP_ERROR_ACCESS);
680 return TRUE; 704 return TRUE;
@@ -1107,7 +1131,7 @@ int i = m_Daddy->m_List.FindItem(&lvf);
1107 delete this; 1131 delete this;
1108} 1132}
1109 1133
1110void CPumpKINDlg::LogLine(LPCTSTR str) 1134void CPumpKINDlg::LogLineToScreen(LPCTSTR str)
1111{ 1135{
1112 ASSERT(m_LogLength); 1136 ASSERT(m_LogLength);
1113 while(m_Log.GetCount()>m_LogLength && m_Log.GetCount()!=LB_ERR){ 1137 while(m_Log.GetCount()>m_LogLength && m_Log.GetCount()!=LB_ERR){
@@ -1163,12 +1187,14 @@ CPropertySheet cps(IDS_TITLE_OPTIONS,this);
1163CPropsServer server; 1187CPropsServer server;
1164CPropsNetwork network; 1188CPropsNetwork network;
1165CPropsSounds sounds; 1189CPropsSounds sounds;
1190CPropsACL acl;
1166 1191
1167 server.m_RRQMode=m_RRQMode; 1192 server.m_RRQMode=m_RRQMode;
1168 server.m_TFTPRoot=m_TFTPRoot; 1193 server.m_TFTPRoot=m_TFTPRoot;
1169 server.m_TFTPSubdirs=m_bTFTPSubdirs; 1194 server.m_TFTPSubdirs=m_bTFTPSubdirs;
1170 server.m_WRQMode=m_WRQMode; 1195 server.m_WRQMode=m_WRQMode;
1171 server.m_PromptTimeOut=m_PromptTimeOut; 1196 server.m_PromptTimeOut=m_PromptTimeOut;
1197 server.m_LogFile=m_LogFile;
1172 1198
1173 network.m_ListenPort=m_ListenPort; 1199 network.m_ListenPort=m_ListenPort;
1174 network.m_SpeakPort=m_SpeakPort; 1200 network.m_SpeakPort=m_SpeakPort;
@@ -1179,15 +1205,19 @@ CPropsSounds sounds;
1179 sounds.m_Success = m_bnwSuccess; 1205 sounds.m_Success = m_bnwSuccess;
1180 sounds.m_Abort = m_bnwAbort; 1206 sounds.m_Abort = m_bnwAbort;
1181 1207
1208 acl.m_rulist = m_aclRules;
1209
1182 cps.AddPage(&server); 1210 cps.AddPage(&server);
1183 cps.AddPage(&network); 1211 cps.AddPage(&network);
1184 cps.AddPage(&sounds); 1212 cps.AddPage(&sounds);
1213 cps.AddPage(&acl);
1185 if(cps.DoModal()==IDOK){ 1214 if(cps.DoModal()==IDOK){
1186 m_RRQMode=server.m_RRQMode; 1215 m_RRQMode=server.m_RRQMode;
1187 m_TFTPRoot=server.m_TFTPRoot; 1216 m_TFTPRoot=server.m_TFTPRoot;
1188 m_bTFTPSubdirs=server.m_TFTPSubdirs; 1217 m_bTFTPSubdirs=server.m_TFTPSubdirs;
1189 m_WRQMode=server.m_WRQMode; 1218 m_WRQMode=server.m_WRQMode;
1190 m_PromptTimeOut=server.m_PromptTimeOut; 1219 m_PromptTimeOut=server.m_PromptTimeOut;
1220 m_LogFile=server.m_LogFile;
1191 1221
1192 m_ListenPort=network.m_ListenPort; 1222 m_ListenPort=network.m_ListenPort;
1193 m_SpeakPort=network.m_SpeakPort; 1223 m_SpeakPort=network.m_SpeakPort;
@@ -1197,6 +1227,10 @@ CPropsSounds sounds;
1197 m_bnwRequest = sounds.m_Request; 1227 m_bnwRequest = sounds.m_Request;
1198 m_bnwSuccess = sounds.m_Success; 1228 m_bnwSuccess = sounds.m_Success;
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 }
1201} 1235}
1202 1236
@@ -1244,8 +1278,10 @@ CString fn = localFile?ApplyRootGently(localFile):ApplyRoot(lf);
1244 m_Rename=exists=TRUE; 1278 m_Rename=exists=TRUE;
1245 else 1279 else
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:
1250 if(exists){ 1286 if(exists){
1251 if(!RenameFile(fn)){ 1287 if(!RenameFile(fn)){
@@ -1268,6 +1304,8 @@ CString fn = localFile?ApplyRootGently(localFile):ApplyRoot(lf);
1268 }else 1304 }else
1269 break; 1305 break;
1270 } 1306 }
1307 default:
1308 TRACE1("Unexpected access target: %d\n",atar);
1271 case CPumpKINDlg::wrqDenyAll: 1309 case CPumpKINDlg::wrqDenyAll:
1272 Deny(tftp::errAccessViolation,IDS_TFTP_ERROR_ACCESS); 1310 Deny(tftp::errAccessViolation,IDS_TFTP_ERROR_ACCESS);
1273 return TRUE; 1311 return TRUE;
@@ -1795,6 +1833,7 @@ void CPumpKINDlg::LoadSettings()
1795{ 1833{
1796CWinApp *app = AfxGetApp(); 1834CWinApp *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);
1799 m_bnwSuccess=app->GetProfileString("BellsNWhistles","Success",m_bnwSuccess); 1838 m_bnwSuccess=app->GetProfileString("BellsNWhistles","Success",m_bnwSuccess);
1800 m_bnwAbort=app->GetProfileString("BellsNWhistles","Abort",m_bnwAbort); 1839 m_bnwAbort=app->GetProfileString("BellsNWhistles","Abort",m_bnwAbort);
@@ -1805,6 +1844,7 @@ CWinApp *app = AfxGetApp();
1805 m_RRQMode=app->GetProfileInt("TFTPSettings","RRQMode",m_RRQMode); 1844 m_RRQMode=app->GetProfileInt("TFTPSettings","RRQMode",m_RRQMode);
1806 m_SpeakPort=app->GetProfileInt("TFTPSettings","SpeakPort",m_SpeakPort); 1845 m_SpeakPort=app->GetProfileInt("TFTPSettings","SpeakPort",m_SpeakPort);
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()));
1809 m_BlockSize=app->GetProfileInt("TFTPSettings","TFTPBlockSize",m_BlockSize); 1849 m_BlockSize=app->GetProfileInt("TFTPSettings","TFTPBlockSize",m_BlockSize);
1810 m_RetryTimeOut=CTimeSpan(app->GetProfileInt("TFTPSettings","RetryTimeout",m_RetryTimeOut.GetTotalSeconds())); 1850 m_RetryTimeOut=CTimeSpan(app->GetProfileInt("TFTPSettings","RetryTimeout",m_RetryTimeOut.GetTotalSeconds()));
@@ -1816,12 +1856,14 @@ CWinApp *app = AfxGetApp();
1816 m_TFTPRoot.ReleaseBuffer(); 1856 m_TFTPRoot.ReleaseBuffer();
1817 } 1857 }
1818 ::SetCurrentDirectory(m_TFTPRoot); 1858 ::SetCurrentDirectory(m_TFTPRoot);
1859 m_aclRules.LoadProfile(app);
1819} 1860}
1820 1861
1821void CPumpKINDlg::SaveSettings() 1862void CPumpKINDlg::SaveSettings()
1822{ 1863{
1823CWinApp *app = AfxGetApp(); 1864CWinApp *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);
1826 app->WriteProfileString("BellsNWhistles","Success",m_bnwSuccess); 1868 app->WriteProfileString("BellsNWhistles","Success",m_bnwSuccess);
1827 app->WriteProfileString("BellsNWhistles","Abort",m_bnwAbort); 1869 app->WriteProfileString("BellsNWhistles","Abort",m_bnwAbort);
@@ -1832,11 +1874,13 @@ CWinApp *app = AfxGetApp();
1832 app->WriteProfileInt("TFTPSettings","RRQMode",m_RRQMode); 1874 app->WriteProfileInt("TFTPSettings","RRQMode",m_RRQMode);
1833 app->WriteProfileInt("TFTPSettings","SpeakPort",m_SpeakPort); 1875 app->WriteProfileInt("TFTPSettings","SpeakPort",m_SpeakPort);
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());
1836 app->WriteProfileInt("TFTPSettings","TFTPBlockSize",m_BlockSize); 1879 app->WriteProfileInt("TFTPSettings","TFTPBlockSize",m_BlockSize);
1837 app->WriteProfileInt("TFTPSettings","RetryTimeout",m_RetryTimeOut.GetTotalSeconds()); 1880 app->WriteProfileInt("TFTPSettings","RetryTimeout",m_RetryTimeOut.GetTotalSeconds());
1838 app->WriteProfileInt("TFTPSettings","WRQMode",m_WRQMode); 1881 app->WriteProfileInt("TFTPSettings","WRQMode",m_WRQMode);
1839 app->WriteProfileInt("UISettings","Visble",m_bShown); 1882 app->WriteProfileInt("UISettings","Visble",m_bShown);
1883 m_aclRules.SaveProfile(app);
1840} 1884}
1841 1885
1842void CPumpKINDlg::OnWindowPosChanging(WINDOWPOS FAR* lpwndpos) 1886void CPumpKINDlg::OnWindowPosChanging(WINDOWPOS FAR* lpwndpos)
@@ -1984,3 +2028,52 @@ void CPumpKINDlg::OnHelp()
1984{ 2028{
1985 AfxGetApp()->WinHelp(0,HELP_FINDER); 2029 AfxGetApp()->WinHelp(0,HELP_FINDER);
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
@@ -113,11 +113,158 @@ public:
113 #define tftpHdrSize(sizeof(tftp)-sizeof(tftp::tftpPacket)) 113 #define tftpHdrSize(sizeof(tftp)-sizeof(tftp::tftpPacket))
114 #definetftpSlackSize sizeof(tftp::tftpLength) 114 #definetftpSlackSize sizeof(tftp::tftpLength)
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;
117 class CListenSocket : public CAsyncSocket{ 258 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};
122 269
123 typedef CList<tftp*,tftp*>CTFTPList; 270 typedef CList<tftp*,tftp*>CTFTPList;
@@ -220,6 +367,11 @@ class CPumpKINDlg : public CDialog
220{ 367{
221// Construction 368// Construction
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;
224 CString m_bnwSuccess; 376 CString m_bnwSuccess;
225 CString m_bnwAbort; 377 CString m_bnwAbort;
@@ -240,7 +392,8 @@ public:
240 UINT m_SpeakPort; 392 UINT m_SpeakPort;
241 void LogLine(UINT msgID); 393 void LogLine(UINT msgID);
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;
245 enum{ 398 enum{
246 subitemFile=0, subitemType, subitemPeer, subitemBytes, subitemTSize 399 subitemFile=0, subitemType, subitemPeer, subitemBytes, subitemTSize
@@ -251,15 +404,19 @@ public:
251 CTIDMap m_Xfers; 404 CTIDMap m_Xfers;
252 CTimeSpan m_TFTPTimeOut; 405 CTimeSpan m_TFTPTimeOut;
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 };
264 UINT m_RRQMode; 421 UINT m_RRQMode;
265 UINT m_WRQMode; 422 UINT m_WRQMode;
@@ -273,6 +430,7 @@ public:
273// Dialog Data 430// Dialog Data
274 //{{AFX_DATA(CPumpKINDlg) 431 //{{AFX_DATA(CPumpKINDlg)
275 enum { IDD = IDD_PUMPKIN_DIALOG }; 432 enum { IDD = IDD_PUMPKIN_DIALOG };
433 CButtonm_ListenCtl;
276 CButtonm_AbortCtl; 434 CButtonm_AbortCtl;
277 CButtonm_OptionsCtl; 435 CButtonm_OptionsCtl;
278 CListBoxm_Log; 436 CListBoxm_Log;
@@ -310,6 +468,7 @@ protected:
310 afx_msg void OnAbort(); 468 afx_msg void OnAbort();
311 afx_msg void OnClose(); 469 afx_msg void OnClose();
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();
314 afx_msg void OnTrayAboutpumpkin(); 473 afx_msg void OnTrayAboutpumpkin();
315 afx_msg void OnTrayFetchfile(); 474 afx_msg void OnTrayFetchfile();
@@ -322,6 +481,7 @@ protected:
322 afx_msg void OnDropFiles(HDROP hDropInfo); 481 afx_msg void OnDropFiles(HDROP hDropInfo);
323 virtual void OnCancel(); 482 virtual void OnCancel();
324 afx_msg void OnHelp(); 483 afx_msg void OnHelp();
484 afx_msg void OnListening();
325 //}}AFX_MSG 485 //}}AFX_MSG
326 DECLARE_MESSAGE_MAP() 486 DECLARE_MESSAGE_MAP()
327}; 487};
diff --git a/Trayer.cpp b/Trayer.cpp
index 6e8c100..1e1ab3c 100644
--- a/Trayer.cpp
+++ b/Trayer.cpp
@@ -37,6 +37,7 @@ BEGIN_MESSAGE_MAP(CTrayer, CWnd)
37 ON_COMMAND(ID_TRAY_OPTIONS, OnTrayOptions) 37 ON_COMMAND(ID_TRAY_OPTIONS, OnTrayOptions)
38 ON_COMMAND(ID_TRAY_SENDFILE, OnTraySendfile) 38 ON_COMMAND(ID_TRAY_SENDFILE, OnTraySendfile)
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
41END_MESSAGE_MAP() 42END_MESSAGE_MAP()
42 43
@@ -65,6 +66,7 @@ LRESULT CTrayer::OnTray(WPARAM wP,LPARAM lP)
65 m_inMenu++; 66 m_inMenu++;
66 SetForegroundWindow(); 67 SetForegroundWindow();
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);
69 m_inMenu--; 71 m_inMenu--;
70 SendMessage(WM_NULL); 72 SendMessage(WM_NULL);
@@ -116,3 +118,8 @@ void CTrayer::OnTrayShowpumpkinwindow()
116{ 118{
117 m_Daddy->SendMessage(WM_COMMAND,ID_TRAY_SHOWPUMPKINWINDOW); 119 m_Daddy->SendMessage(WM_COMMAND,ID_TRAY_SHOWPUMPKINWINDOW);
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
@@ -41,6 +41,7 @@ protected:
41 afx_msg void OnTrayOptions(); 41 afx_msg void OnTrayOptions();
42 afx_msg void OnTraySendfile(); 42 afx_msg void OnTraySendfile();
43 afx_msg void OnTrayShowpumpkinwindow(); 43 afx_msg void OnTrayShowpumpkinwindow();
44 afx_msg void OnTrayListen();
44 //}}AFX_MSG 45 //}}AFX_MSG
45 DECLARE_MESSAGE_MAP() 46 DECLARE_MESSAGE_MAP()
46}; 47};
diff --git a/help/pumpkin.cnt b/help/pumpkin.cnt
index 0e09da3..dfe42e5 100644
--- a/help/pumpkin.cnt
+++ b/help/pumpkin.cnt
@@ -12,3 +12,4 @@
122 Server Options=ServerOptions 122 Server Options=ServerOptions
132 Network Options=NetworkOptions 132 Network Options=NetworkOptions
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
@@ -18,7 +18,7 @@ K{\footnote about}
18\par\sa120\sb120\qj\pard \f1\fs18\sb120 18\par\sa120\sb120\qj\pard \f1\fs18\sb120
19\par\sa120\sb120\qj\pard \f1\fs18\sb120 {\b {\i Enjoy!}} 19\par\sa120\sb120\qj\pard \f1\fs18\sb120 {\b {\i Enjoy!}}
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:
23\par The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 23\par The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
24\par \sa360 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 24\par \sa360 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -28,6 +28,9 @@ K{\footnote about}
28\pard\plain 28\pard\plain
29#{\footnote News} 29#{\footnote News}
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
32\par\pard\plain\fi0\li0\f1\fs18 \bullet more robust solution to the backslash/slash dilemma 35\par\pard\plain\fi0\li0\f1\fs18 \bullet more robust solution to the backslash/slash dilemma
33\par\pard\plain\fi0\li0\f1\fs18 \bullet A bit more elaborate error reporting 36\par\pard\plain\fi0\li0\f1\fs18 \bullet A bit more elaborate error reporting
@@ -112,10 +115,18 @@ ${\footnote Server Options}
112\page 115\page
113 116
114\pard\plain\keepn 117\pard\plain\keepn
115#{\footnote SoundsOptoins} 118#{\footnote SoundsOptions}
116${\footnote Sounds Options} 119${\footnote Sounds Options}
117{ \f1\fs18\b\sb120 Sounds} 120{ \f1\fs18\b\sb120 Sounds}
118\par\sa120\sb120\qj\pard \f1\fs18\sb120 You can customize {\b PumpKIN} sounds notifications here. There are three customizable sounds defined - {\b Incoming request}, which notifies you about incoming request prompt if you're set to be prompted whenever incoming request occurs. {\b xfer Aborted} - which happens to sound every time transfer is interrupted for whatever reason - time out, explicit kill, denied access, etc. {\b xfer Finished} means that your file was successfully transmitted. 121\par\sa120\sb120\qj\pard \f1\fs18\sb120 You can customize {\b PumpKIN} sounds notifications here. There are three customizable sounds defined - {\b Incoming request}, which notifies you about incoming request prompt if you're set to be prompted whenever incoming request occurs. {\b xfer Aborted} - which happens to sound every time transfer is interrupted for whatever reason - time out, explicit kill, denied access, etc. {\b xfer Finished} means that your file was successfully transmitted.
119\par\sa120\sb120\qj\pard \f1\fs18\sb120 You can select any {\b .wav} file or one of the predefined sounds from the dropdown list. 122\par\sa120\sb120\qj\pard \f1\fs18\sb120 You can select any {\b .wav} file or one of the predefined sounds from the dropdown list.
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
@@ -5,10 +5,14 @@
5 <p><kin>PumpKIN</kin> is a program designed to send and receive files over the net while having <kin href="http://kin.klever.net/T42/">T42</kin> or <product>Wintalk</product> session running using <term>TFTP</term> (<rfc num="1350"/>) protocol. It includes full-functional <term>TFTP</term> server/client so it may be useful for maintaining <a href="http://www.cisco.com/">CISCO</a> routers and other network equipment.</p> 5 <p><kin>PumpKIN</kin> is a program designed to send and receive files over the net while having <kin href="http://kin.klever.net/T42/">T42</kin> or <product>Wintalk</product> session running using <term>TFTP</term> (<rfc num="1350"/>) protocol. It includes full-functional <term>TFTP</term> server/client so it may be useful for maintaining <a href="http://www.cisco.com/">CISCO</a> routers and other network equipment.</p>
6 <p/> 6 <p/>
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/>
10 </topic> 10 </topic>
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">
13 <ni>more robust solution to the backslash/slash dilemma</ni> 17 <ni>more robust solution to the backslash/slash dilemma</ni>
14 <ni>A bit more elaborate error reporting</ni> 18 <ni>A bit more elaborate error reporting</ni>
@@ -36,6 +40,7 @@
36 <p>To Abort transfer(s) currently in progress - select transfer(s) you want to terminate in the list and click <b>Abort xfer</b> button.</p> 40 <p>To Abort transfer(s) currently in progress - select transfer(s) you want to terminate in the list and click <b>Abort xfer</b> button.</p>
37 <p>You may want to hide <kin>PumpKIN</kin> window and leave it as a tray icon only. Just click the <image source="pumpkin.bmp"/> icon in the tray or simply close the window.</p> 41 <p>You may want to hide <kin>PumpKIN</kin> window and leave it as a tray icon only. Just click the <image source="pumpkin.bmp"/> icon in the tray or simply close the window.</p>
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>
40 <topic id="ConfirmRRQ" title="Confirm Read Request Dialog"> 45 <topic id="ConfirmRRQ" title="Confirm Read Request Dialog">
41 <heading scroll="no">Confirm Read Request Dialog</heading> 46 <heading scroll="no">Confirm Read Request Dialog</heading>
@@ -83,9 +88,17 @@
83 <li><a name="ConfirmationTimeOut"/><b>Confirmation timeout</b> - this is the time <kin>PumpKIN</kin> will wait for you to accept or deny request before it will give up and take default action which is always deny.</li> 88 <li><a name="ConfirmationTimeOut"/><b>Confirmation timeout</b> - this is the time <kin>PumpKIN</kin> will wait for you to accept or deny request before it will give up and take default action which is always deny.</li>
84 </ul> 89 </ul>
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>
88 <p>You can customize <kin>PumpKIN</kin> sounds notifications here. There are three customizable sounds defined - <b>Incoming request</b>, which notifies you about incoming request prompt if you're set to be prompted whenever incoming request occurs. <b>xfer Aborted</b> - which happens to sound every time transfer is interrupted for whatever reason - time out, explicit kill, denied access, etc. <b>xfer Finished</b> means that your file was successfully transmitted.</p> 93 <p>You can customize <kin>PumpKIN</kin> sounds notifications here. There are three customizable sounds defined - <b>Incoming request</b>, which notifies you about incoming request prompt if you're set to be prompted whenever incoming request occurs. <b>xfer Aborted</b> - which happens to sound every time transfer is interrupted for whatever reason - time out, explicit kill, denied access, etc. <b>xfer Finished</b> means that your file was successfully transmitted.</p>
89 <p>You can select any <b>.wav</b> file or one of the predefined sounds from the dropdown list.</p> 94 <p>You can select any <b>.wav</b> file or one of the predefined sounds from the dropdown list.</p>
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
@@ -1,7 +1,7 @@
1#include "resource.h" 1#include "resource.h"
2#include "../shared-code/install.h" 2#include "../shared-code/install.h"
3 3
4#define VERSION "2.6" 4#define VERSION "2.7"
5 #defineKINAME "PumpKIN " VERSION 5 #defineKINAME "PumpKIN " VERSION
6#define SKINAME "PumpKIN" 6#define SKINAME "PumpKIN"
7 7
diff --git a/install/install.rc b/install/install.rc
index cc621ad..9a03edb 100644
--- a/install/install.rc
+++ b/install/install.rc
@@ -131,8 +131,8 @@ IDI_ICON ICON DISCARDABLE "../shared-data/install-icon.ico
131// 131//
132 132
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
137#ifdef _DEBUG 137#ifdef _DEBUG
138 FILEFLAGS 0x1L 138 FILEFLAGS 0x1L
@@ -149,13 +149,13 @@ BEGIN
149 BEGIN 149 BEGIN
150 VALUE "CompanyName", "Klever Group (http://www.klever.net/)\0" 150 VALUE "CompanyName", "Klever Group (http://www.klever.net/)\0"
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"
156 VALUE "OriginalFilename", "INSTALL.EXE\0" 156 VALUE "OriginalFilename", "INSTALL.EXE\0"
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
160 END 160 END
161 BLOCK "VarFileInfo" 161 BLOCK "VarFileInfo"
diff --git a/pumpkin.clw b/pumpkin.clw
index 4ae747b..5344bfd 100644
--- a/pumpkin.clw
+++ b/pumpkin.clw
@@ -2,25 +2,25 @@
2 2
3[General Info] 3[General Info]
4Version=1 4Version=1
5LastClass=CPropsSounds 5LastClass=CPropsServer
6LastTemplate=CPropertyPage 6LastTemplate=CComboBox
7NewFileInclude1=#include "stdafx.h" 7NewFileInclude1=#include "stdafx.h"
8NewFileInclude2=#include "PumpKIN.h" 8NewFileInclude2=#include "PumpKIN.h"
9 9
10ClassCount=12 10ClassCount=14
11Class1=CPumpKINApp 11Class1=CPumpKINApp
12Class2=CPumpKINDlg 12Class2=CPumpKINDlg
13Class3=CAboutDlg 13Class3=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
19Resource4=IDD_ABOUTBOX 19Resource4=IDD_ABOUTBOX
20Class4=CPropsServer 20Class4=CPropsServer
21Class5=CPropsNetwork 21Class5=CPropsNetwork
22Resource5=IDD_CONFIRM_WRQ 22Resource5=IDD_CONFIRM_WRQ
23Resource6=IDD_PROPS_NETWORK 23Resource6=IDD_PROPS_ACL
24Class6=CConfirmRRQDlg 24Class6=CConfirmRRQDlg
25Class7=CConfirmWRQDlg 25Class7=CConfirmWRQDlg
26Resource7=IDD_PUMPKIN_DIALOG 26Resource7=IDD_PUMPKIN_DIALOG
@@ -31,6 +31,9 @@ Class11=CTrayer
31Resource8=IDD_PROPS_SOUNDS 31Resource8=IDD_PROPS_SOUNDS
32Class12=CPropsSounds 32Class12=CPropsSounds
33Resource9=IDM_POPUPS 33Resource9=IDM_POPUPS
34Class13=CPropsACL
35Class14=CACLTargetCombo
36Resource10=IDD_PROPS_SERVER
34 37
35[CLS:CPumpKINApp] 38[CLS:CPumpKINApp]
36Type=0 39Type=0
@@ -45,7 +48,7 @@ ImplementationFile=PumpKINDlg.cpp
45Filter=W 48Filter=W
46BaseClass=CDialog 49BaseClass=CDialog
47VirtualFilter=dWC 50VirtualFilter=dWC
48LastObject=ID_HELP 51LastObject=CPumpKINDlg
49 52
50[CLS:CAboutDlg] 53[CLS:CAboutDlg]
51Type=0 54Type=0
@@ -69,7 +72,7 @@ Control5=IDC_KLEVERNET,button,1342242816
69[DLG:IDD_PUMPKIN_DIALOG] 72[DLG:IDD_PUMPKIN_DIALOG]
70Type=1 73Type=1
71Class=CPumpKINDlg 74Class=CPumpKINDlg
72ControlCount=9 75ControlCount=10
73Control1=IDC_CONNECTIONS,SysListView32,1350631681 76Control1=IDC_CONNECTIONS,SysListView32,1350631681
74Control2=IDC_GET,button,1342259200 77Control2=IDC_GET,button,1342259200
75Control3=IDC_PUT,button,1342259200 78Control3=IDC_PUT,button,1342259200
@@ -79,11 +82,12 @@ Control6=IDC_EXIT,button,1342259200
79Control7=ID_HELP,button,1342259200 82Control7=ID_HELP,button,1342259200
80Control8=IDC_LOG,listbox,1353728129 83Control8=IDC_LOG,listbox,1353728129
81Control9=IDCANCEL,button,1073741824 84Control9=IDCANCEL,button,1073741824
85Control10=IDC_LISTENING,button,1342275619
82 86
83[DLG:IDD_PROPS_SERVER] 87[DLG:IDD_PROPS_SERVER]
84Type=1 88Type=1
85Class=CPropsServer 89Class=CPropsServer
86ControlCount=15 90ControlCount=18
87Control1=IDC_STATIC,button,1342177287 91Control1=IDC_STATIC,button,1342177287
88Control2=IDC_TFTPROOT,edit,1350631552 92Control2=IDC_TFTPROOT,edit,1350631552
89Control3=IDC_BROWSE,button,1342242880 93Control3=IDC_BROWSE,button,1342242880
@@ -99,6 +103,9 @@ Control12=IDC_WRQ_ALWAYSCONFIRM,button,1342177289
99Control13=IDC_WRQ_DENYALL,button,1342177289 103Control13=IDC_WRQ_DENYALL,button,1342177289
100Control14=IDC_STATIC,static,1342308609 104Control14=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
103[DLG:IDD_PROPS_NETWORK] 110[DLG:IDD_PROPS_NETWORK]
104Type=1 111Type=1
@@ -127,7 +134,7 @@ ImplementationFile=PropsServer.cpp
127BaseClass=CPropertyPage 134BaseClass=CPropertyPage
128Filter=D 135Filter=D
129VirtualFilter=idWC 136VirtualFilter=idWC
130LastObject=CPropsServer 137LastObject=IDC_LOGFILE_BROWSE
131 138
132[CLS:CPropsNetwork] 139[CLS:CPropsNetwork]
133Type=0 140Type=0
@@ -136,7 +143,7 @@ ImplementationFile=PropsNetwork.cpp
136BaseClass=CPropertyPage 143BaseClass=CPropertyPage
137Filter=D 144Filter=D
138VirtualFilter=idWC 145VirtualFilter=idWC
139LastObject=CPropsNetwork 146LastObject=IDC_BLOCKSIZE
140 147
141[DLG:IDD_CONFIRM_RRQ] 148[DLG:IDD_CONFIRM_RRQ]
142Type=1 149Type=1
@@ -230,12 +237,13 @@ Class=CPumpKINDlg
230Command1=ID_TRAY_SENDFILE 237Command1=ID_TRAY_SENDFILE
231Command2=ID_TRAY_FETCHFILE 238Command2=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
240[CLS:CRetrier] 248[CLS:CRetrier]
241Type=0 249Type=0
@@ -281,3 +289,39 @@ Filter=D
281LastObject=CPropsSounds 289LastObject=CPropsSounds
282VirtualFilter=idWC 290VirtualFilter=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
@@ -66,8 +66,10 @@ ALL : "$(OUTDIR)\pumpkin.exe" "$(OUTDIR)\pumpkin.ex_" "$(OUTDIR)\pumpkin.hlp"\
66 "$(OUTDIR)\pumpkin.cnt" "$(OUTDIR)\pumpkin.hl_" "$(OUTDIR)\pumpkin.cn_" 66 "$(OUTDIR)\pumpkin.cnt" "$(OUTDIR)\pumpkin.hl_" "$(OUTDIR)\pumpkin.cn_"
67 67
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"
72 -@erase "$(INTDIR)\PropsServer.obj" 74 -@erase "$(INTDIR)\PropsServer.obj"
73 -@erase "$(INTDIR)\PropsSounds.obj" 75 -@erase "$(INTDIR)\PropsSounds.obj"
@@ -115,8 +117,10 @@ LINK32=link.exe
115LINK32_FLAGS=/nologo /subsystem:windows /incremental:no\ 117LINK32_FLAGS=/nologo /subsystem:windows /incremental:no\
116 /pdb:"$(OUTDIR)/pumpkin.pdb" /machine:I386 /out:"$(OUTDIR)/pumpkin.exe" 118 /pdb:"$(OUTDIR)/pumpkin.pdb" /machine:I386 /out:"$(OUTDIR)/pumpkin.exe"
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" \
121 "$(INTDIR)\PropsServer.obj" \ 125 "$(INTDIR)\PropsServer.obj" \
122 "$(INTDIR)\PropsSounds.obj" \ 126 "$(INTDIR)\PropsSounds.obj" \
@@ -169,10 +173,14 @@ ALL : "$(OUTDIR)\pumpkin.exe" "$(OUTDIR)\pumpkin.bsc" "$(OUTDIR)\pumpkin.ex_"\
169 "$(OUTDIR)\pumpkin.cn_" 173 "$(OUTDIR)\pumpkin.cn_"
170 174
171CLEAN : 175CLEAN :
176 -@erase "$(INTDIR)\ACLTargetCombo.obj"
177 -@erase "$(INTDIR)\ACLTargetCombo.sbr"
172 -@erase "$(INTDIR)\ConfirmRRQDlg.obj" 178 -@erase "$(INTDIR)\ConfirmRRQDlg.obj"
173 -@erase "$(INTDIR)\ConfirmRRQDlg.sbr" 179 -@erase "$(INTDIR)\ConfirmRRQDlg.sbr"
174 -@erase "$(INTDIR)\ConfirmWRQDlg.obj" 180 -@erase "$(INTDIR)\ConfirmWRQDlg.obj"
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"
177 -@erase "$(INTDIR)\PropsNetwork.sbr" 185 -@erase "$(INTDIR)\PropsNetwork.sbr"
178 -@erase "$(INTDIR)\PropsServer.obj" 186 -@erase "$(INTDIR)\PropsServer.obj"
@@ -228,8 +236,10 @@ BSC32=bscmake.exe
228# ADD BSC32 /nologo 236# ADD BSC32 /nologo
229BSC32_FLAGS=/nologo /o"$(OUTDIR)/pumpkin.bsc" 237BSC32_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" \
234 "$(INTDIR)\PropsServer.sbr" \ 244 "$(INTDIR)\PropsServer.sbr" \
235 "$(INTDIR)\PropsSounds.sbr" \ 245 "$(INTDIR)\PropsSounds.sbr" \
@@ -252,8 +262,10 @@ LINK32=link.exe
252LINK32_FLAGS=/nologo /subsystem:windows /incremental:yes\ 262LINK32_FLAGS=/nologo /subsystem:windows /incremental:yes\
253 /pdb:"$(OUTDIR)/pumpkin.pdb" /debug /machine:I386 /out:"$(OUTDIR)/pumpkin.exe" 263 /pdb:"$(OUTDIR)/pumpkin.pdb" /debug /machine:I386 /out:"$(OUTDIR)/pumpkin.exe"
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" \
258 "$(INTDIR)\PropsServer.obj" \ 270 "$(INTDIR)\PropsServer.obj" \
259 "$(INTDIR)\PropsSounds.obj" \ 271 "$(INTDIR)\PropsSounds.obj" \
@@ -305,8 +317,10 @@ ALL : "$(OUTDIR)\pumpkin.exe" "$(OUTDIR)\pumpkin.ex_" "$(OUTDIR)\pumpkin.hlp"\
305 "$(OUTDIR)\pumpkin.cnt" "$(OUTDIR)\pumpkin.hl_" "$(OUTDIR)\pumpkin.cn_" 317 "$(OUTDIR)\pumpkin.cnt" "$(OUTDIR)\pumpkin.hl_" "$(OUTDIR)\pumpkin.cn_"
306 318
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"
311 -@erase "$(INTDIR)\PropsServer.obj" 325 -@erase "$(INTDIR)\PropsServer.obj"
312 -@erase "$(INTDIR)\PropsSounds.obj" 326 -@erase "$(INTDIR)\PropsSounds.obj"
@@ -353,8 +367,10 @@ LINK32=link.exe
353LINK32_FLAGS=/nologo /subsystem:windows /incremental:no\ 367LINK32_FLAGS=/nologo /subsystem:windows /incremental:no\
354 /pdb:"$(OUTDIR)/pumpkin.pdb" /machine:I386 /out:"$(OUTDIR)/pumpkin.exe" 368 /pdb:"$(OUTDIR)/pumpkin.pdb" /machine:I386 /out:"$(OUTDIR)/pumpkin.exe"
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" \
359 "$(INTDIR)\PropsServer.obj" \ 375 "$(INTDIR)\PropsServer.obj" \
360 "$(INTDIR)\PropsSounds.obj" \ 376 "$(INTDIR)\PropsSounds.obj" \
@@ -670,23 +686,29 @@ LINK32_OBJS= \
670# Begin Source File 686# Begin Source File
671 687
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"\
676 ".\shared-code\BellsNWhistles.h"\ 695 ".\shared-code\BellsNWhistles.h"\
677 ".\shared-code\kHelpers.h"\ 696 ".\shared-code\kHelpers.h"\
678 ".\stdafx.h"\ 697 ".\stdafx.h"\
679 698
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)"\
685 "$(INTDIR)\pumpkin.pch" 701 "$(INTDIR)\pumpkin.pch"
686 702
687 703
688!ELSEIF "$(CFG)" == "PumpKIN - Win32 Debug" 704!ELSEIF "$(CFG)" == "PumpKIN - Win32 Debug"
689 705
706DEP_CPP_PUMPK=\
707 ".\pumpkin.h"\
708 ".\PumpKINDlg.h"\
709 ".\shared-code\kHelpers.h"\
710 ".\stdafx.h"\
711
690 712
691"$(INTDIR)\PumpKIN.obj" : $(SOURCE) $(DEP_CPP_PUMPK) "$(INTDIR)"\ 713"$(INTDIR)\PumpKIN.obj" : $(SOURCE) $(DEP_CPP_PUMPK) "$(INTDIR)"\
692 "$(INTDIR)\pumpkin.pch" 714 "$(INTDIR)\pumpkin.pch"
@@ -697,6 +719,13 @@ DEP_CPP_PUMPK=\
697 719
698!ELSEIF "$(CFG)" == "PumpKIN - Win32 Static" 720!ELSEIF "$(CFG)" == "PumpKIN - Win32 Static"
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
701"$(INTDIR)\PumpKIN.obj" : $(SOURCE) $(DEP_CPP_PUMPK) "$(INTDIR)"\ 730"$(INTDIR)\PumpKIN.obj" : $(SOURCE) $(DEP_CPP_PUMPK) "$(INTDIR)"\
702 "$(INTDIR)\pumpkin.pch" 731 "$(INTDIR)\pumpkin.pch"
@@ -709,13 +738,18 @@ DEP_CPP_PUMPK=\
709# Begin Source File 738# Begin Source File
710 739
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"\
716 ".\PropsServer.h"\ 750 ".\PropsServer.h"\
717 ".\PropsSounds.h"\ 751 ".\PropsSounds.h"\
718 ".\PumpKIN.h"\ 752 ".\pumpkin.h"\
719 ".\PumpKINDlg.h"\ 753 ".\PumpKINDlg.h"\
720 ".\RequestDlg.h"\ 754 ".\RequestDlg.h"\
721 ".\Resolver.h"\ 755 ".\Resolver.h"\
@@ -726,15 +760,30 @@ DEP_CPP_PUMPKI=\
726 ".\Trayer.h"\ 760 ".\Trayer.h"\
727 761
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)"\
733 "$(INTDIR)\pumpkin.pch" 764 "$(INTDIR)\pumpkin.pch"
734 765
735 766
736!ELSEIF "$(CFG)" == "PumpKIN - Win32 Debug" 767!ELSEIF "$(CFG)" == "PumpKIN - Win32 Debug"
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
739"$(INTDIR)\PumpKINDlg.obj" : $(SOURCE) $(DEP_CPP_PUMPKI) "$(INTDIR)"\ 788"$(INTDIR)\PumpKINDlg.obj" : $(SOURCE) $(DEP_CPP_PUMPKI) "$(INTDIR)"\
740 "$(INTDIR)\pumpkin.pch" 789 "$(INTDIR)\pumpkin.pch"
@@ -745,6 +794,24 @@ DEP_CPP_PUMPKI=\
745 794
746!ELSEIF "$(CFG)" == "PumpKIN - Win32 Static" 795!ELSEIF "$(CFG)" == "PumpKIN - Win32 Static"
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
749"$(INTDIR)\PumpKINDlg.obj" : $(SOURCE) $(DEP_CPP_PUMPKI) "$(INTDIR)"\ 816"$(INTDIR)\PumpKINDlg.obj" : $(SOURCE) $(DEP_CPP_PUMPKI) "$(INTDIR)"\
750 "$(INTDIR)\pumpkin.pch" 817 "$(INTDIR)\pumpkin.pch"
@@ -822,12 +889,15 @@ BuildCmds= \
822 889
823SOURCE=.\pumpkin.rc 890SOURCE=.\pumpkin.rc
824DEP_RSC_PUMPKIN=\ 891DEP_RSC_PUMPKIN=\
892 ".\res\down.ico"\
825 ".\res\failed.wav"\ 893 ".\res\failed.wav"\
826 ".\res\finished.wav"\ 894 ".\res\finished.wav"\
827 ".\res\PumpKIN.ico"\ 895 ".\res\PumpKIN.ico"\
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"\
832 ".\shared-data\browse-icon.ico"\ 902 ".\shared-data\browse-icon.ico"\
833 ".\shared-data\klever-background.bmp"\ 903 ".\shared-data\klever-background.bmp"\
@@ -951,23 +1021,29 @@ BuildCmds= \
951# Begin Source File 1021# Begin Source File
952 1022
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"\
958 ".\shared-code\kHelpers.h"\ 1031 ".\shared-code\kHelpers.h"\
959 ".\stdafx.h"\ 1032 ".\stdafx.h"\
960 1033
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)"\
966 "$(INTDIR)\pumpkin.pch" 1036 "$(INTDIR)\pumpkin.pch"
967 1037
968 1038
969!ELSEIF "$(CFG)" == "PumpKIN - Win32 Debug" 1039!ELSEIF "$(CFG)" == "PumpKIN - Win32 Debug"
970 1040
1041DEP_CPP_PROPS=\
1042 ".\PropsServer.h"\
1043 ".\pumpkin.h"\
1044 ".\shared-code\kHelpers.h"\
1045 ".\stdafx.h"\
1046
971 1047
972"$(INTDIR)\PropsServer.obj" : $(SOURCE) $(DEP_CPP_PROPS) "$(INTDIR)"\ 1048"$(INTDIR)\PropsServer.obj" : $(SOURCE) $(DEP_CPP_PROPS) "$(INTDIR)"\
973 "$(INTDIR)\pumpkin.pch" 1049 "$(INTDIR)\pumpkin.pch"
@@ -978,6 +1054,13 @@ DEP_CPP_PROPS=\
978 1054
979!ELSEIF "$(CFG)" == "PumpKIN - Win32 Static" 1055!ELSEIF "$(CFG)" == "PumpKIN - Win32 Static"
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
982"$(INTDIR)\PropsServer.obj" : $(SOURCE) $(DEP_CPP_PROPS) "$(INTDIR)"\ 1065"$(INTDIR)\PropsServer.obj" : $(SOURCE) $(DEP_CPP_PROPS) "$(INTDIR)"\
983 "$(INTDIR)\pumpkin.pch" 1066 "$(INTDIR)\pumpkin.pch"
@@ -992,7 +1075,7 @@ DEP_CPP_PROPS=\
992SOURCE=.\PropsNetwork.cpp 1075SOURCE=.\PropsNetwork.cpp
993DEP_CPP_PROPSN=\ 1076DEP_CPP_PROPSN=\
994 ".\PropsNetwork.h"\ 1077 ".\PropsNetwork.h"\
995 ".\PumpKIN.h"\ 1078 ".\pumpkin.h"\
996 ".\shared-code\BellsNWhistles.h"\ 1079 ".\shared-code\BellsNWhistles.h"\
997 ".\shared-code\kHelpers.h"\ 1080 ".\shared-code\kHelpers.h"\
998 ".\stdafx.h"\ 1081 ".\stdafx.h"\
@@ -1029,24 +1112,31 @@ DEP_CPP_PROPSN=\
1029# Begin Source File 1112# Begin Source File
1030 1113
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"\
1036 ".\shared-code\BellsNWhistles.h"\ 1122 ".\shared-code\BellsNWhistles.h"\
1037 ".\shared-code\kHelpers.h"\ 1123 ".\shared-code\kHelpers.h"\
1038 ".\stdafx.h"\ 1124 ".\stdafx.h"\
1039 1125
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)"\
1045 "$(INTDIR)\pumpkin.pch" 1128 "$(INTDIR)\pumpkin.pch"
1046 1129
1047 1130
1048!ELSEIF "$(CFG)" == "PumpKIN - Win32 Debug" 1131!ELSEIF "$(CFG)" == "PumpKIN - Win32 Debug"
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
1051"$(INTDIR)\ConfirmRRQDlg.obj" : $(SOURCE) $(DEP_CPP_CONFI) "$(INTDIR)"\ 1141"$(INTDIR)\ConfirmRRQDlg.obj" : $(SOURCE) $(DEP_CPP_CONFI) "$(INTDIR)"\
1052 "$(INTDIR)\pumpkin.pch" 1142 "$(INTDIR)\pumpkin.pch"
@@ -1057,6 +1147,14 @@ DEP_CPP_CONFI=\
1057 1147
1058!ELSEIF "$(CFG)" == "PumpKIN - Win32 Static" 1148!ELSEIF "$(CFG)" == "PumpKIN - Win32 Static"
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
1061"$(INTDIR)\ConfirmRRQDlg.obj" : $(SOURCE) $(DEP_CPP_CONFI) "$(INTDIR)"\ 1159"$(INTDIR)\ConfirmRRQDlg.obj" : $(SOURCE) $(DEP_CPP_CONFI) "$(INTDIR)"\
1062 "$(INTDIR)\pumpkin.pch" 1160 "$(INTDIR)\pumpkin.pch"
@@ -1069,24 +1167,31 @@ DEP_CPP_CONFI=\
1069# Begin Source File 1167# Begin Source File
1070 1168
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"\
1076 ".\shared-code\BellsNWhistles.h"\ 1177 ".\shared-code\BellsNWhistles.h"\
1077 ".\shared-code\kHelpers.h"\ 1178 ".\shared-code\kHelpers.h"\
1078 ".\stdafx.h"\ 1179 ".\stdafx.h"\
1079 1180
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)"\
1085 "$(INTDIR)\pumpkin.pch" 1183 "$(INTDIR)\pumpkin.pch"
1086 1184
1087 1185
1088!ELSEIF "$(CFG)" == "PumpKIN - Win32 Debug" 1186!ELSEIF "$(CFG)" == "PumpKIN - Win32 Debug"
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
1091"$(INTDIR)\ConfirmWRQDlg.obj" : $(SOURCE) $(DEP_CPP_CONFIR) "$(INTDIR)"\ 1196"$(INTDIR)\ConfirmWRQDlg.obj" : $(SOURCE) $(DEP_CPP_CONFIR) "$(INTDIR)"\
1092 "$(INTDIR)\pumpkin.pch" 1197 "$(INTDIR)\pumpkin.pch"
@@ -1097,6 +1202,14 @@ DEP_CPP_CONFIR=\
1097 1202
1098!ELSEIF "$(CFG)" == "PumpKIN - Win32 Static" 1203!ELSEIF "$(CFG)" == "PumpKIN - Win32 Static"
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
1101"$(INTDIR)\ConfirmWRQDlg.obj" : $(SOURCE) $(DEP_CPP_CONFIR) "$(INTDIR)"\ 1214"$(INTDIR)\ConfirmWRQDlg.obj" : $(SOURCE) $(DEP_CPP_CONFIR) "$(INTDIR)"\
1102 "$(INTDIR)\pumpkin.pch" 1215 "$(INTDIR)\pumpkin.pch"
@@ -1110,7 +1223,7 @@ DEP_CPP_CONFIR=\
1110 1223
1111SOURCE=.\RequestDlg.cpp 1224SOURCE=.\RequestDlg.cpp
1112DEP_CPP_REQUE=\ 1225DEP_CPP_REQUE=\
1113 ".\PumpKIN.h"\ 1226 ".\pumpkin.h"\
1114 ".\RequestDlg.h"\ 1227 ".\RequestDlg.h"\
1115 ".\shared-code\BellsNWhistles.h"\ 1228 ".\shared-code\BellsNWhistles.h"\
1116 ".\shared-code\kHelpers.h"\ 1229 ".\shared-code\kHelpers.h"\
@@ -1148,8 +1261,11 @@ DEP_CPP_REQUE=\
1148# Begin Source File 1261# Begin Source File
1149 1262
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"\
1154 ".\Resolver.h"\ 1270 ".\Resolver.h"\
1155 ".\shared-code\BellsNWhistles.h"\ 1271 ".\shared-code\BellsNWhistles.h"\
@@ -1157,15 +1273,19 @@ DEP_CPP_RESOL=\
1157 ".\stdafx.h"\ 1273 ".\stdafx.h"\
1158 1274
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)"\
1164 "$(INTDIR)\pumpkin.pch" 1277 "$(INTDIR)\pumpkin.pch"
1165 1278
1166 1279
1167!ELSEIF "$(CFG)" == "PumpKIN - Win32 Debug" 1280!ELSEIF "$(CFG)" == "PumpKIN - Win32 Debug"
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
1170"$(INTDIR)\Resolver.obj" : $(SOURCE) $(DEP_CPP_RESOL) "$(INTDIR)"\ 1290"$(INTDIR)\Resolver.obj" : $(SOURCE) $(DEP_CPP_RESOL) "$(INTDIR)"\
1171 "$(INTDIR)\pumpkin.pch" 1291 "$(INTDIR)\pumpkin.pch"
@@ -1176,6 +1296,14 @@ DEP_CPP_RESOL=\
1176 1296
1177!ELSEIF "$(CFG)" == "PumpKIN - Win32 Static" 1297!ELSEIF "$(CFG)" == "PumpKIN - Win32 Static"
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
1180"$(INTDIR)\Resolver.obj" : $(SOURCE) $(DEP_CPP_RESOL) "$(INTDIR)"\ 1308"$(INTDIR)\Resolver.obj" : $(SOURCE) $(DEP_CPP_RESOL) "$(INTDIR)"\
1181 "$(INTDIR)\pumpkin.pch" 1309 "$(INTDIR)\pumpkin.pch"
@@ -1188,8 +1316,11 @@ DEP_CPP_RESOL=\
1188# Begin Source File 1316# Begin Source File
1189 1317
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"\
1194 ".\Retrier.h"\ 1325 ".\Retrier.h"\
1195 ".\shared-code\BellsNWhistles.h"\ 1326 ".\shared-code\BellsNWhistles.h"\
@@ -1197,15 +1328,19 @@ DEP_CPP_RETRI=\
1197 ".\stdafx.h"\ 1328 ".\stdafx.h"\
1198 1329
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)"\
1204 "$(INTDIR)\pumpkin.pch" 1332 "$(INTDIR)\pumpkin.pch"
1205 1333
1206 1334
1207!ELSEIF "$(CFG)" == "PumpKIN - Win32 Debug" 1335!ELSEIF "$(CFG)" == "PumpKIN - Win32 Debug"
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
1210"$(INTDIR)\Retrier.obj" : $(SOURCE) $(DEP_CPP_RETRI) "$(INTDIR)"\ 1345"$(INTDIR)\Retrier.obj" : $(SOURCE) $(DEP_CPP_RETRI) "$(INTDIR)"\
1211 "$(INTDIR)\pumpkin.pch" 1346 "$(INTDIR)\pumpkin.pch"
@@ -1216,6 +1351,14 @@ DEP_CPP_RETRI=\
1216 1351
1217!ELSEIF "$(CFG)" == "PumpKIN - Win32 Static" 1352!ELSEIF "$(CFG)" == "PumpKIN - Win32 Static"
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
1220"$(INTDIR)\Retrier.obj" : $(SOURCE) $(DEP_CPP_RETRI) "$(INTDIR)"\ 1363"$(INTDIR)\Retrier.obj" : $(SOURCE) $(DEP_CPP_RETRI) "$(INTDIR)"\
1221 "$(INTDIR)\pumpkin.pch" 1364 "$(INTDIR)\pumpkin.pch"
@@ -1228,8 +1371,11 @@ DEP_CPP_RETRI=\
1228# Begin Source File 1371# Begin Source File
1229 1372
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"\
1234 ".\shared-code\BellsNWhistles.h"\ 1380 ".\shared-code\BellsNWhistles.h"\
1235 ".\shared-code\kHelpers.h"\ 1381 ".\shared-code\kHelpers.h"\
@@ -1237,15 +1383,19 @@ DEP_CPP_TRAYE=\
1237 ".\Trayer.h"\ 1383 ".\Trayer.h"\
1238 1384
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)"\
1244 "$(INTDIR)\pumpkin.pch" 1387 "$(INTDIR)\pumpkin.pch"
1245 1388
1246 1389
1247!ELSEIF "$(CFG)" == "PumpKIN - Win32 Debug" 1390!ELSEIF "$(CFG)" == "PumpKIN - Win32 Debug"
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
1250"$(INTDIR)\Trayer.obj" : $(SOURCE) $(DEP_CPP_TRAYE) "$(INTDIR)"\ 1400"$(INTDIR)\Trayer.obj" : $(SOURCE) $(DEP_CPP_TRAYE) "$(INTDIR)"\
1251 "$(INTDIR)\pumpkin.pch" 1401 "$(INTDIR)\pumpkin.pch"
@@ -1256,6 +1406,14 @@ DEP_CPP_TRAYE=\
1256 1406
1257!ELSEIF "$(CFG)" == "PumpKIN - Win32 Static" 1407!ELSEIF "$(CFG)" == "PumpKIN - Win32 Static"
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
1260"$(INTDIR)\Trayer.obj" : $(SOURCE) $(DEP_CPP_TRAYE) "$(INTDIR)"\ 1418"$(INTDIR)\Trayer.obj" : $(SOURCE) $(DEP_CPP_TRAYE) "$(INTDIR)"\
1261 "$(INTDIR)\pumpkin.pch" 1419 "$(INTDIR)\pumpkin.pch"
@@ -1288,24 +1446,31 @@ SOURCE=.\help\pumpkin.cnt
1288# Begin Source File 1446# Begin Source File
1289 1447
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"\
1295 ".\shared-code\BellsNWhistles.h"\ 1456 ".\shared-code\BellsNWhistles.h"\
1296 ".\shared-code\kHelpers.h"\ 1457 ".\shared-code\kHelpers.h"\
1297 ".\stdafx.h"\ 1458 ".\stdafx.h"\
1298 1459
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)"\
1304 "$(INTDIR)\pumpkin.pch" 1462 "$(INTDIR)\pumpkin.pch"
1305 1463
1306 1464
1307!ELSEIF "$(CFG)" == "PumpKIN - Win32 Debug" 1465!ELSEIF "$(CFG)" == "PumpKIN - Win32 Debug"
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
1310"$(INTDIR)\PropsSounds.obj" : $(SOURCE) $(DEP_CPP_PROPSS) "$(INTDIR)"\ 1475"$(INTDIR)\PropsSounds.obj" : $(SOURCE) $(DEP_CPP_PROPSS) "$(INTDIR)"\
1311 "$(INTDIR)\pumpkin.pch" 1476 "$(INTDIR)\pumpkin.pch"
@@ -1316,6 +1481,14 @@ DEP_CPP_PROPSS=\
1316 1481
1317!ELSEIF "$(CFG)" == "PumpKIN - Win32 Static" 1482!ELSEIF "$(CFG)" == "PumpKIN - Win32 Static"
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
1320"$(INTDIR)\PropsSounds.obj" : $(SOURCE) $(DEP_CPP_PROPSS) "$(INTDIR)"\ 1493"$(INTDIR)\PropsSounds.obj" : $(SOURCE) $(DEP_CPP_PROPSS) "$(INTDIR)"\
1321 "$(INTDIR)\pumpkin.pch" 1494 "$(INTDIR)\pumpkin.pch"
@@ -1324,6 +1497,119 @@ DEP_CPP_PROPSS=\
1324!ENDIF 1497!ENDIF
1325 1498
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
1328################################################################################ 1614################################################################################
1329# Begin Target 1615# Begin Target
diff --git a/pumpkin.rc b/pumpkin.rc
index 7dafe04..87745db 100644
--- a/pumpkin.rc
+++ b/pumpkin.rc
@@ -70,6 +70,9 @@ IDI_WRQ ICON DISCARDABLE "res\\rrq.ico"
70IDI_BROWSE ICON DISCARDABLE "shared-data/browse-icon.ico" 70IDI_BROWSE ICON DISCARDABLE "shared-data/browse-icon.ico"
71IDR_MAINFRAME ICON DISCARDABLE "res\\pumpkin.ico" 71IDR_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
74///////////////////////////////////////////////////////////////////////////// 77/////////////////////////////////////////////////////////////////////////////
75// 78//
@@ -82,20 +85,20 @@ CAPTION "About PumpKIN"
82FONT 8, "MS Sans Serif" 85FONT 8, "MS Sans Serif"
83BEGIN 86BEGIN
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
89 DEFPUSHBUTTON "OK",IDOK,178,7,32,14,WS_GROUP 92 DEFPUSHBUTTON "OK",IDOK,178,7,32,14,WS_GROUP
90 PUSHBUTTON "http://www.klever.net/",IDC_KLEVERNET,124,53,86,14 93 PUSHBUTTON "http://www.klever.net/",IDC_KLEVERNET,124,53,86,14
91END 94END
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 |
95 WS_SYSMENU 98 WS_SYSMENU
96EXSTYLE WS_EX_ACCEPTFILES | WS_EX_APPWINDOW 99EXSTYLE 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
100 CONTROL "List1",IDC_CONNECTIONS,"SysListView32",LVS_REPORT | 103 CONTROL "List1",IDC_CONNECTIONS,"SysListView32",LVS_REPORT |
101 LVS_AUTOARRANGE | WS_BORDER | WS_TABSTOP,7,7,295,108, 104 LVS_AUTOARRANGE | WS_BORDER | WS_TABSTOP,7,7,295,108,
@@ -110,52 +113,60 @@ BEGIN
110 WS_EX_CLIENTEDGE 113 WS_EX_CLIENTEDGE
111 PUSHBUTTON "E&xit",IDC_EXIT,305,79,50,17,BS_NOTIFY,WS_EX_CLIENTEDGE 114 PUSHBUTTON "E&xit",IDC_EXIT,305,79,50,17,BS_NOTIFY,WS_EX_CLIENTEDGE
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
120CAPTION "Server" 126CAPTION "Server"
121FONT 8, "MS Sans Serif" 127FONT 8, "MS Sans Serif"
122BEGIN 128BEGIN
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
155CAPTION "Network" 166CAPTION "Network"
156FONT 8, "MS Sans Serif" 167FONT 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,
160 18,135,8 171 18,135,8
161 EDITTEXT IDC_LISTENPORT,154,16,40,13,ES_AUTOHSCROLL 172 EDITTEXT IDC_LISTENPORT,154,16,40,13,ES_AUTOHSCROLL
@@ -257,26 +268,54 @@ BEGIN
257 CONTROL "",IDC_STATIC,"Static",SS_ETCHEDVERT,52,32,1,11 268 CONTROL "",IDC_STATIC,"Static",SS_ETCHEDVERT,52,32,1,11
258END 269END
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
262CAPTION "Sounds" 273CAPTION "Sounds"
263FONT 8, "MS Sans Serif" 274FONT 8, "MS Sans Serif"
264BEGIN 275BEGIN
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
281 320
282 321
@@ -287,8 +326,8 @@ END
287// 326//
288 327
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
293#ifdef _DEBUG 332#ifdef _DEBUG
294 FILEFLAGS 0x1L 333 FILEFLAGS 0x1L
@@ -305,13 +344,13 @@ BEGIN
305 BEGIN 344 BEGIN
306 VALUE "CompanyName", "Klever Group (http://www.klever.net/)\0" 345 VALUE "CompanyName", "Klever Group (http://www.klever.net/)\0"
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"
312 VALUE "OriginalFilename", "PUMPKIN.EXE\0" 351 VALUE "OriginalFilename", "PUMPKIN.EXE\0"
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
316 END 355 END
317 BLOCK "VarFileInfo" 356 BLOCK "VarFileInfo"
@@ -344,24 +383,24 @@ BEGIN
344 LEFTMARGIN, 7 383 LEFTMARGIN, 7
345 RIGHTMARGIN, 355 384 RIGHTMARGIN, 355
346 TOPMARGIN, 7 385 TOPMARGIN, 7
347 BOTTOMMARGIN, 184 386 BOTTOMMARGIN, 186
348 HORZGUIDE, 115 387 HORZGUIDE, 115
349 END 388 END
350 389
351 IDD_PROPS_SERVER, DIALOG 390 IDD_PROPS_SERVER, DIALOG
352 BEGIN 391 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
358 397
359 IDD_PROPS_NETWORK, DIALOG 398 IDD_PROPS_NETWORK, DIALOG
360 BEGIN 399 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
366 405
367 IDD_CONFIRM_RRQ, DIALOG 406 IDD_CONFIRM_RRQ, DIALOG
@@ -391,9 +430,19 @@ BEGIN
391 IDD_PROPS_SOUNDS, DIALOG 430 IDD_PROPS_SOUNDS, DIALOG
392 BEGIN 431 BEGIN
393 LEFTMARGIN, 7 432 LEFTMARGIN, 7
394 RIGHTMARGIN, 203 433 RIGHTMARGIN, 293
395 TOPMARGIN, 7 434 TOPMARGIN, 7
396 BOTTOMMARGIN, 147 435 BOTTOMMARGIN, 194
436 END
437
438 IDD_PROPS_ACL, DIALOG
439 BEGIN
440 LEFTMARGIN, 7
441 RIGHTMARGIN, 293
442 TOPMARGIN, 7
443 BOTTOMMARGIN, 194
444 HORZGUIDE, 117
445 HORZGUIDE, 125
397 END 446 END
398END 447END
399#endif // APSTUDIO_INVOKED 448#endif // APSTUDIO_INVOKED
@@ -439,6 +488,25 @@ BEGIN
439 0 488 0
440END 489END
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
443///////////////////////////////////////////////////////////////////////////// 511/////////////////////////////////////////////////////////////////////////////
444// 512//
@@ -452,6 +520,7 @@ BEGIN
452 MENUITEM "&Send File", ID_TRAY_SENDFILE 520 MENUITEM "&Send File", ID_TRAY_SENDFILE
453 MENUITEM "F&etch file", ID_TRAY_FETCHFILE 521 MENUITEM "F&etch file", ID_TRAY_FETCHFILE
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
456 MENUITEM "Open &Files Folder", ID_TRAY_OPENFILESFOLDER 525 MENUITEM "Open &Files Folder", ID_TRAY_OPENFILESFOLDER
457 MENUITEM SEPARATOR 526 MENUITEM SEPARATOR
@@ -533,6 +602,7 @@ BEGIN
533 ID_TRAY_OPTIONS "Set PumpKIN options" 602 ID_TRAY_OPTIONS "Set PumpKIN options"
534 ID_TRAY_SHOWPUMPKINWINDOW "Show main window" 603 ID_TRAY_SHOWPUMPKINWINDOW "Show main window"
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
537 607
538STRINGTABLE DISCARDABLE 608STRINGTABLE DISCARDABLE
@@ -572,6 +642,9 @@ BEGIN
572 IDS_FILTER_WAV "Sound Files (*.wav)|*.wav||" 642 IDS_FILTER_WAV "Sound Files (*.wav)|*.wav||"
573 IDS_TITLE_WAV "Select sound.." 643 IDS_TITLE_WAV "Select sound.."
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
576 649
577STRINGTABLE DISCARDABLE 650STRINGTABLE DISCARDABLE
@@ -579,6 +652,12 @@ BEGIN
579 AFX_IDS_APP_TITLE "PUMPKIN" 652 AFX_IDS_APP_TITLE "PUMPKIN"
580END 653END
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
583///////////////////////////////////////////////////////////////////////////// 662/////////////////////////////////////////////////////////////////////////////
584 663
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
@@ -73,12 +73,21 @@
73#define IDS_OTALXAT 149 73#define IDS_OTALXAT 149
74#define IDI_PLAY 149 74#define IDI_PLAY 149
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
83#define IDC_CONNECTIONS 1001 92#define IDC_CONNECTIONS 1001
84#define IDC_LOG 1003 93#define IDC_LOG 1003
@@ -121,12 +130,25 @@
121#define IDC_RING 1041 130#define IDC_RING 1041
122#define IDC_RING_BROWSE 1042 131#define IDC_RING_BROWSE 1042
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
131#define ID_TRAY_ABOUTPUMPKIN 32772 153#define ID_TRAY_ABOUTPUMPKIN 32772
132#define ID_TRAY_EXIT 32773 154#define ID_TRAY_EXIT 32773
@@ -135,14 +157,15 @@
135#define ID_TRAY_OPTIONS 32776 157#define ID_TRAY_OPTIONS 32776
136#define ID_TRAY_SHOWPUMPKINWINDOW 32777 158#define ID_TRAY_SHOWPUMPKINWINDOW 32777
137#define ID_TRAY_OPENFILESFOLDER 32778 159#define ID_TRAY_OPENFILESFOLDER 32778
160#define ID_TRAY_LISTEN 32780
138 161
139// Next default values for new objects 162// Next default values for new objects
140// 163//
141#ifdef APSTUDIO_INVOKED 164#ifdef APSTUDIO_INVOKED
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
147#endif 170#endif
148#endif 171#endif