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