summaryrefslogtreecommitdiffabout
path: root/PumpKINDlg.h
authorMichael Krelin <hacker@klever.net>2011-04-27 14:18:48 (UTC)
committer Michael Krelin <hacker@klever.net>2011-04-27 14:18:48 (UTC)
commitc3b240e06bae3b663505e2b1c52eb67c34ddd3ea (patch) (unidiff)
tree06793f5d56a8129bfdaaee441fc34fbb361ddb13 /PumpKINDlg.h
parentd097b824b7fcad001c9581fb2e322bf3e3e5961d (diff)
downloadpumpkin-c3b240e06bae3b663505e2b1c52eb67c34ddd3ea.zip
pumpkin-c3b240e06bae3b663505e2b1c52eb67c34ddd3ea.tar.gz
pumpkin-c3b240e06bae3b663505e2b1c52eb67c34ddd3ea.tar.bz2
network settings: bind to specific ip address
Signed-off-by: Michael Krelin <hacker@klever.net>
Diffstat (limited to 'PumpKINDlg.h') (more/less context) (ignore whitespace changes)
-rwxr-xr-x[-rw-r--r--]PumpKINDlg.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/PumpKINDlg.h b/PumpKINDlg.h
index 23c2657..9077292 100644..100755
--- a/PumpKINDlg.h
+++ b/PumpKINDlg.h
@@ -1,501 +1,502 @@
1// PumpKINDlg.h : header file 1// PumpKINDlg.h : header file
2// 2//
3 3
4 //#define REVERSEBYTES(w)MAKEWORD(HIBYTE(w),LOBYTE(w)); 4 //#define REVERSEBYTES(w)MAKEWORD(HIBYTE(w),LOBYTE(w));
5 #defineREVERSEBYTES(w) (htons((WORD)w)) 5 #defineREVERSEBYTES(w) (htons((WORD)w))
6 #define tftpoBSize"blksize" 6 #define tftpoBSize"blksize"
7 #define tftpoTSize"tsize" 7 #define tftpoTSize"tsize"
8 #define tftpoTOut"timeout" 8 #define tftpoTOut"timeout"
9 9
10 #define tftpoXResume"x-resume" 10 #define tftpoXResume"x-resume"
11 11
12 struct tftp{ 12 struct tftp{
13 typedef CMapStringToString tftpOptions; 13 typedef CMapStringToString tftpOptions;
14 typedef WORD tftpLength; 14 typedef WORD tftpLength;
15 typedef WORD tftpOpcode; 15 typedef WORD tftpOpcode;
16 tftpLengthlength; 16 tftpLengthlength;
17 tftpOpcode opcode; 17 tftpOpcode opcode;
18 enum{ 18 enum{
19 opRRQ = 1, 19 opRRQ = 1,
20 opWRQ = 2, 20 opWRQ = 2,
21 opDATA = 3, 21 opDATA = 3,
22 opACK = 4, 22 opACK = 4,
23 opERROR = 5, 23 opERROR = 5,
24 opOACK = 6, 24 opOACK = 6,
25 25
26 errUndefined = 0, 26 errUndefined = 0,
27 errNotFound = 1, 27 errNotFound = 1,
28 errAccessViolation = 2, 28 errAccessViolation = 2,
29 errDiskFull = 3, 29 errDiskFull = 3,
30 errIllegalOp = 4, 30 errIllegalOp = 4,
31 errUnknownTID = 5, 31 errUnknownTID = 5,
32 errFileExists = 6, 32 errFileExists = 6,
33 errNoUser = 7, 33 errNoUser = 7,
34 errOption = 8 34 errOption = 8
35 }; 35 };
36 structtftpUNKNOWN { 36 structtftpUNKNOWN {
37 BYTE data[1]; 37 BYTE data[1];
38 }; 38 };
39 structtftpRQ { 39 structtftpRQ {
40 BYTE data[1]; 40 BYTE data[1];
41public: 41public:
42 void Set(LPCTSTR file,LPCTSTR type,tftpOptions* ops=NULL); 42 void Set(LPCTSTR file,LPCTSTR type,tftpOptions* ops=NULL);
43 static UINT tftpSize(LPCTSTR file,LPCTSTR type,tftpOptions* ops=NULL); 43 static UINT tftpSize(LPCTSTR file,LPCTSTR type,tftpOptions* ops=NULL);
44 }; 44 };
45 structtftpRRQ { 45 structtftpRRQ {
46 BYTE data[1]; 46 BYTE data[1];
47public: 47public:
48 void Set(LPCTSTR file,LPCTSTR type,tftpOptions* ops=NULL); 48 void Set(LPCTSTR file,LPCTSTR type,tftpOptions* ops=NULL);
49 static UINT tftpSize(LPCTSTR file,LPCTSTR type,tftpOptions* ops=NULL); 49 static UINT tftpSize(LPCTSTR file,LPCTSTR type,tftpOptions* ops=NULL);
50 }; 50 };
51 structtftpWRQ { 51 structtftpWRQ {
52 BYTE data[1]; 52 BYTE data[1];
53public: 53public:
54 void Set(LPCTSTR file,LPCTSTR type,tftpOptions* ops=NULL); 54 void Set(LPCTSTR file,LPCTSTR type,tftpOptions* ops=NULL);
55 static UINT tftpSize(LPCTSTR file,LPCTSTR type,tftpOptions* ops=NULL); 55 static UINT tftpSize(LPCTSTR file,LPCTSTR type,tftpOptions* ops=NULL);
56 }; 56 };
57 structtftpDATA { 57 structtftpDATA {
58 WORD block; 58 WORD block;
59 BYTE data[1]; 59 BYTE data[1];
60 public: 60 public:
61 WORD Block(); 61 WORD Block();
62 void SetBlock(WORD b); 62 void SetBlock(WORD b);
63 static UINT tftpSize(UINT blkSize=512); 63 static UINT tftpSize(UINT blkSize=512);
64 }; 64 };
65 struct tftpACK { 65 struct tftpACK {
66 WORD block; 66 WORD block;
67 public: 67 public:
68 static UINT tftpSize(); 68 static UINT tftpSize();
69 void SetBlock(WORD b); 69 void SetBlock(WORD b);
70 WORD Block(); 70 WORD Block();
71 }; 71 };
72 structtftpERROR { 72 structtftpERROR {
73 typedef WORD tftpErrorCode; 73 typedef WORD tftpErrorCode;
74 tftpErrorCode code; 74 tftpErrorCode code;
75 BYTE data[1]; 75 BYTE data[1];
76 public: 76 public:
77 void SetCode(WORD c); 77 void SetCode(WORD c);
78 WORD Code(); 78 WORD Code();
79 static UINT tftpSize(LPCTSTR msg); 79 static UINT tftpSize(LPCTSTR msg);
80 }; 80 };
81 struct tftpOACK { 81 struct tftpOACK {
82 BYTE data[1]; 82 BYTE data[1];
83 public: 83 public:
84 void Set(tftpOptions* ops); 84 void Set(tftpOptions* ops);
85 static UINT tftpSize(tftpOptions* ops); 85 static UINT tftpSize(tftpOptions* ops);
86 }; 86 };
87 uniontftpPacket { 87 uniontftpPacket {
88 tftpUNKNOWN m_UNKNOWN; 88 tftpUNKNOWN m_UNKNOWN;
89 tftpRQ m_RQ; 89 tftpRQ m_RQ;
90 tftpRRQ m_RRQ; 90 tftpRRQ m_RRQ;
91 tftpWRQ m_WRQ; 91 tftpWRQ m_WRQ;
92 tftpDATA m_DATA; 92 tftpDATA m_DATA;
93 tftpACK m_ACK; 93 tftpACK m_ACK;
94 tftpERROR m_ERROR; 94 tftpERROR m_ERROR;
95 tftpOACK m_OACK; 95 tftpOACK m_OACK;
96 }data; 96 }data;
97 97
98 void *udpBase(void){ return &opcode; } 98 void *udpBase(void){ return &opcode; }
99public: 99public:
100 static tftp* Copy(tftp *src); 100 static tftp* Copy(tftp *src);
101 CString errMessage(); 101 CString errMessage();
102 void SetOpcode(WORD op); 102 void SetOpcode(WORD op);
103 void errSet(UINT code,LPCTSTR msg); 103 void errSet(UINT code,LPCTSTR msg);
104 static tftp* Allocate(UINT tftpSize=0); 104 static tftp* Allocate(UINT tftpSize=0);
105 BOOL Send(CAsyncSocket *socket,SOCKADDR_IN* saddr); 105 BOOL Send(CAsyncSocket *socket,SOCKADDR_IN* saddr);
106 CString rqType(); 106 CString rqType();
107 CString rqFileName(); 107 CString rqFileName();
108 UINT GetOptions(tftpOptions* ops); 108 UINT GetOptions(tftpOptions* ops);
109 tftp(); 109 tftp();
110 UINT Opcode(); 110 UINT Opcode();
111 BOOL Receive(CAsyncSocket* socket,UINT maxLength,SOCKADDR_IN *sin=NULL); 111 BOOL Receive(CAsyncSocket* socket,UINT maxLength,SOCKADDR_IN *sin=NULL);
112}; 112};
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 { 116struct acl_rule {
117 enum { 117 enum {
118 opRRQ=tftp::opRRQ, opWRQ=tftp::opWRQ 118 opRRQ=tftp::opRRQ, opWRQ=tftp::opWRQ
119 }; 119 };
120 int op; 120 int op;
121 DWORD addr, mask; 121 DWORD addr, mask;
122 enum { 122 enum {
123 rrqGrant=0, rrqPrompt, rrqDeny, 123 rrqGrant=0, rrqPrompt, rrqDeny,
124 rrqRules, 124 rrqRules,
125 rrqNone=-1 125 rrqNone=-1
126 }; 126 };
127 enum { 127 enum {
128 wrqGrant=0, wrqPromptIfExists, wrqPrompt, wrqDeny, 128 wrqGrant=0, wrqPromptIfExists, wrqPrompt, wrqDeny,
129 wrqRules, 129 wrqRules,
130 wrqNone=-1 130 wrqNone=-1
131 }; 131 };
132 int target; 132 int target;
133 133
134 acl_rule() 134 acl_rule()
135 : op(-1), addr(0), mask(0), target(-1) { } 135 : op(-1), addr(0), mask(0), target(-1) { }
136 acl_rule(int o,DWORD a,DWORD m,int t) 136 acl_rule(int o,DWORD a,DWORD m,int t)
137 : op(o), addr(a), mask(m), target(t) { } 137 : op(o), addr(a), mask(m), target(t) { }
138 acl_rule(const acl_rule& s) 138 acl_rule(const acl_rule& s)
139 : op(s.op), addr(s.addr), mask(s.mask), target(s.target) { } 139 : op(s.op), addr(s.addr), mask(s.mask), target(s.target) { }
140 140
141 BOOL IsValid() { 141 BOOL IsValid() {
142 if(op==opRRQ) { 142 if(op==opRRQ) {
143 if(target<rrqNone || target>=rrqRules) 143 if(target<rrqNone || target>=rrqRules)
144 return FALSE; 144 return FALSE;
145 }else if(op==opWRQ) { 145 }else if(op==opWRQ) {
146 if(target<wrqNone || target>=wrqRules) 146 if(target<wrqNone || target>=wrqRules)
147 return FALSE; 147 return FALSE;
148 }else 148 }else
149 return FALSE; 149 return FALSE;
150 return TRUE; 150 return TRUE;
151 } 151 }
152 152
153 BOOL IsMatch(int o,DWORD a) { 153 BOOL IsMatch(int o,DWORD a) {
154 if(o!=op) return FALSE; 154 if(o!=op) return FALSE;
155 if( (a&mask) != (addr&mask)) return FALSE; 155 if( (a&mask) != (addr&mask)) return FALSE;
156 return TRUE; 156 return TRUE;
157 } 157 }
158 158
159 CString str_addr() { 159 CString str_addr() {
160 return inet_ntoa(*(struct in_addr*)&addr); 160 return inet_ntoa(*(struct in_addr*)&addr);
161 } 161 }
162 CString str_mask() { 162 CString str_mask() {
163 return inet_ntoa(*(struct in_addr*)&mask); 163 return inet_ntoa(*(struct in_addr*)&mask);
164 } 164 }
165 CString str_target() { 165 CString str_target() {
166 if(op==opRRQ) { 166 if(op==opRRQ) {
167 switch(target) { 167 switch(target) {
168 case rrqNone: return "fallback"; 168 case rrqNone: return "fallback";
169 case rrqGrant: return "grant"; 169 case rrqGrant: return "grant";
170 case rrqPrompt: return "prompt"; 170 case rrqPrompt: return "prompt";
171 case rrqDeny: return "deny"; 171 case rrqDeny: return "deny";
172 default: return "?"; 172 default: return "?";
173 } 173 }
174 }else if(op==opWRQ) { 174 }else if(op==opWRQ) {
175 switch(target) { 175 switch(target) {
176 case wrqNone: return "fallback"; 176 case wrqNone: return "fallback";
177 case wrqGrant: return "grant"; 177 case wrqGrant: return "grant";
178 case wrqPromptIfExists: return "prompt if exists"; 178 case wrqPromptIfExists: return "prompt if exists";
179 case wrqPrompt: return "prompt"; 179 case wrqPrompt: return "prompt";
180 case wrqDeny: return "deny"; 180 case wrqDeny: return "deny";
181 default: return "?"; 181 default: return "?";
182 } 182 }
183 }else 183 }else
184 return "?"; 184 return "?";
185 } 185 }
186 186
187 void SaveProfile(CWinApp* app,int i) { 187 void SaveProfile(CWinApp* app,int i) {
188 CString n; n.Format("%d",i); 188 CString n; n.Format("%d",i);
189 app->WriteProfileInt("ACL","op_"+n,op); 189 app->WriteProfileInt("ACL","op_"+n,op);
190 app->WriteProfileString("ACL","addr_"+n,str_addr()); 190 app->WriteProfileString("ACL","addr_"+n,str_addr());
191 app->WriteProfileString("ACL","mask_"+n,str_mask()); 191 app->WriteProfileString("ACL","mask_"+n,str_mask());
192 app->WriteProfileInt("ACL","target_"+n,target); 192 app->WriteProfileInt("ACL","target_"+n,target);
193 } 193 }
194 194
195 void LoadProfile(CWinApp* app,int i) { 195 void LoadProfile(CWinApp* app,int i) {
196 CString n; n.Format("%d",i); 196 CString n; n.Format("%d",i);
197 op=app->GetProfileInt("ACL","op_"+n,-1); 197 op=app->GetProfileInt("ACL","op_"+n,-1);
198 addr=inet_addr(app->GetProfileString("ACL","addr_"+n)); 198 addr=inet_addr(app->GetProfileString("ACL","addr_"+n));
199 mask=inet_addr(app->GetProfileString("ACL","mask_"+n)); 199 mask=inet_addr(app->GetProfileString("ACL","mask_"+n));
200 target=app->GetProfileInt("ACL","target_"+n,-1); 200 target=app->GetProfileInt("ACL","target_"+n,-1);
201 } 201 }
202 202
203}; 203};
204 204
205class acl_rules_t : public CArray<acl_rule,acl_rule&> { 205class acl_rules_t : public CArray<acl_rule,acl_rule&> {
206public: 206public:
207 207
208 acl_rules_t& operator=(const acl_rules_t& s) { 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) 209 // Copy(s); XXX: unsuprisingly, there's a bug in MFC Copy, *pDst++=*pSrc (no ++ for Src)
210 RemoveAll(); 210 RemoveAll();
211 int ns = s.GetSize(); 211 int ns = s.GetSize();
212 SetSize(ns); 212 SetSize(ns);
213 for(int i=0;i<ns;++i) 213 for(int i=0;i<ns;++i)
214 m_pData[i]=s.m_pData[i]; 214 m_pData[i]=s.m_pData[i];
215 return *this; 215 return *this;
216 } 216 }
217 217
218 int AppendRule(acl_rule& r) { 218 int AppendRule(acl_rule& r) {
219 return Add(r); 219 return Add(r);
220 } 220 }
221 221
222 void DeleteRule(int r) { 222 void DeleteRule(int r) {
223 RemoveAt(r); 223 RemoveAt(r);
224 } 224 }
225 225
226 int FindRule(int op,DWORD ip) { 226 int FindRule(int op,DWORD ip) {
227 for(int i=0;i<GetSize();++i) 227 for(int i=0;i<GetSize();++i)
228 if(m_pData[i].IsMatch(op,ip)) 228 if(m_pData[i].IsMatch(op,ip))
229 return i; 229 return i;
230 return -1; 230 return -1;
231 } 231 }
232 232
233 int FindTarget(int op,DWORD ip) { 233 int FindTarget(int op,DWORD ip) {
234 int r=FindRule(op,ip); 234 int r=FindRule(op,ip);
235 if(r<0) return -1; 235 if(r<0) return -1;
236 return m_pData[r].target; 236 return m_pData[r].target;
237 } 237 }
238 238
239 void SaveProfile(CWinApp* app) { 239 void SaveProfile(CWinApp* app) {
240 int s=GetSize(); 240 int s=GetSize();
241 for(int i=0;i<s;++i) 241 for(int i=0;i<s;++i)
242 m_pData[i].SaveProfile(app,i); 242 m_pData[i].SaveProfile(app,i);
243 app->WriteProfileInt("ACL","rules",s); 243 app->WriteProfileInt("ACL","rules",s);
244 } 244 }
245 void LoadProfile(CWinApp* app) { 245 void LoadProfile(CWinApp* app) {
246 RemoveAll(); 246 RemoveAll();
247 int s=app->GetProfileInt("ACL","rules",0); 247 int s=app->GetProfileInt("ACL","rules",0);
248 for(int i=0;i<s;++i) { 248 for(int i=0;i<s;++i) {
249 acl_rule r; 249 acl_rule r;
250 r.LoadProfile(app,i); 250 r.LoadProfile(app,i);
251 if(r.IsValid()) 251 if(r.IsValid())
252 Add(r); 252 Add(r);
253 } 253 }
254 } 254 }
255}; 255};
256 256
257class CPumpKINDlg; 257class CPumpKINDlg;
258 class CListenSocket : public CAsyncSocket{ 258 class CListenSocket : public CAsyncSocket{
259public: 259public:
260 CPumpKINDlg* m_Daddy; 260 CPumpKINDlg* m_Daddy;
261 BOOL m_bListen; 261 BOOL m_bListen;
262 262
263 CListenSocket() 263 CListenSocket()
264 : m_bListen(FALSE), m_Daddy(0) { } 264 : m_bListen(FALSE), m_Daddy(0) { }
265 265
266 BOOL SetListen(BOOL b); 266 BOOL SetListen(BOOL b);
267 virtual void OnReceive(int nErrorCode); 267 virtual void OnReceive(int nErrorCode);
268}; 268};
269 269
270 typedef CList<tftp*,tftp*>CTFTPList; 270 typedef CList<tftp*,tftp*>CTFTPList;
271class CResolver; 271class CResolver;
272 class CXferSocket : public CAsyncSocket{ 272 class CXferSocket : public CAsyncSocket{
273public: 273public:
274 UINT m__timeOut; 274 UINT m__timeOut;
275 UINT m__blkSize; 275 UINT m__blkSize;
276 tftp::tftpOptions m_Options; 276 tftp::tftpOptions m_Options;
277 LONG m_xferSize; 277 LONG m_xferSize;
278 UINT m_timeOut; 278 UINT m_timeOut;
279 UINT m_blkSize; 279 UINT m_blkSize;
280 BOOL m_bRetry; 280 BOOL m_bRetry;
281 void SetTry(tftp *p=NULL); 281 void SetTry(tftp *p=NULL);
282 tftp* m_Retry; 282 tftp* m_Retry;
283 void OnRetry(); 283 void OnRetry();
284 BOOL CheckBadRelativeness(LPCTSTR file); 284 BOOL CheckBadRelativeness(LPCTSTR file);
285 CString ApplyRootGently(LPCTSTR fn); 285 CString ApplyRootGently(LPCTSTR fn);
286 CString m_HostName; 286 CString m_HostName;
287 virtual void OnResolved(); 287 virtual void OnResolved();
288 virtual void OnFailedToResolve(); 288 virtual void OnFailedToResolve();
289 CResolver *m_wndResolver; 289 CResolver *m_wndResolver;
290 BYTE m_ResolveBuff[MAXGETHOSTSTRUCT]; 290 BYTE m_ResolveBuff[MAXGETHOSTSTRUCT];
291 virtual void Abort(); 291 virtual void Abort();
292 void ResetTimeout(); 292 void ResetTimeout();
293 enum{ 293 enum{
294 stateNone, stateDeny, stateInit, stateOACK, stateXfer, stateFinish, stateClosing 294 stateNone, stateDeny, stateInit, stateOACK, stateXfer, stateFinish, stateClosing
295 }; 295 };
296 int state; 296 int state;
297 void Deny(UINT errCode,UINT errID); 297 void Deny(UINT errCode,UINT errID);
298 void Deny(CFileException* e); 298 void Deny(CFileException* e);
299 CString ApplyRoot(LPCTSTR fileName); 299 CString ApplyRoot(LPCTSTR fileName);
300 void TurnSlashes(CString& fn,BOOL bBack=TRUE); 300 void TurnSlashes(CString& fn,BOOL bBack=TRUE);
301 virtual void Destroy(BOOL success=TRUE); 301 virtual void Destroy(BOOL success=TRUE);
302 void PostError(CFileException* e); 302 void PostError(CFileException* e);
303 void PostError(UINT errCode,UINT errID); 303 void PostError(UINT errCode,UINT errID);
304 void PostTFTP(tftp* p,BOOL retryable=FALSE); 304 void PostTFTP(tftp* p,BOOL retryable=FALSE);
305 CXferSocket(CPumpKINDlg *daddy,LPCTSTR fileName,LPCTSTR type,SOCKADDR_IN* sin); 305 CXferSocket(CPumpKINDlg *daddy,LPCTSTR fileName,LPCTSTR type,SOCKADDR_IN* sin);
306 CFile m_File; 306 CFile m_File;
307 virtual ULONG GetACK(); 307 virtual ULONG GetACK();
308 CString m_Type; 308 CString m_Type;
309 CString m_FileName; 309 CString m_FileName;
310 CXferSocket(); 310 CXferSocket();
311 void UpdateList(); 311 void UpdateList();
312 void SetPeer(SOCKADDR_IN *sin); 312 void SetPeer(SOCKADDR_IN *sin);
313 virtual BOOL OnTFTP(tftp* p) = 0; 313 virtual BOOL OnTFTP(tftp* p) = 0;
314 virtual void OnReceive(int nErrorCode); 314 virtual void OnReceive(int nErrorCode);
315 void DoSelect(BOOL do_select=FALSE); 315 void DoSelect(BOOL do_select=FALSE);
316 SOCKADDR_IN m_Peer; 316 SOCKADDR_IN m_Peer;
317 virtual void OnSend(int nErrorCode); 317 virtual void OnSend(int nErrorCode);
318 CPumpKINDlg* m_Daddy; 318 CPumpKINDlg* m_Daddy;
319 CTFTPList m_Queue; 319 CTFTPList m_Queue;
320 320
321 DECLARE_DYNAMIC(CXferSocket) 321 DECLARE_DYNAMIC(CXferSocket)
322}; 322};
323class CWRQSocket : public CXferSocket { 323class CWRQSocket : public CXferSocket {
324public: 324public:
325 BOOL m_bResume; 325 BOOL m_bResume;
326 void OnHostKnown(); 326 void OnHostKnown();
327 virtual void OnResolved(); 327 virtual void OnResolved();
328 UINT m_LastSlack; 328 UINT m_LastSlack;
329 ULONG GetACK(); 329 ULONG GetACK();
330 void DoXfer(); 330 void DoXfer();
331 UINT m_ACK; 331 UINT m_ACK;
332 BOOL SaveAs(CString& fn); 332 BOOL SaveAs(CString& fn);
333 BOOL RenameFile(CString& fn); 333 BOOL RenameFile(CString& fn);
334 BOOL m_Rename; 334 BOOL m_Rename;
335 BOOL ConfirmRequest(); 335 BOOL ConfirmRequest();
336 BOOL Create(LPCTSTR localFile=NULL,LPCTSTR hostName=NULL); 336 BOOL Create(LPCTSTR localFile=NULL,LPCTSTR hostName=NULL);
337 CWRQSocket(CPumpKINDlg* daddy,LPCTSTR fileName,LPCTSTR type,SOCKADDR_IN *sin); 337 CWRQSocket(CPumpKINDlg* daddy,LPCTSTR fileName,LPCTSTR type,SOCKADDR_IN *sin);
338 BOOL OnTFTP(tftp* p); 338 BOOL OnTFTP(tftp* p);
339 339
340 DECLARE_DYNAMIC(CWRQSocket) 340 DECLARE_DYNAMIC(CWRQSocket)
341}; 341};
342class CRRQSocket : public CXferSocket { 342class CRRQSocket : public CXferSocket {
343public: 343public:
344 UINT m_ACKtoClose; 344 UINT m_ACKtoClose;
345 void OnHostKnown(); 345 void OnHostKnown();
346 virtual void OnResolved(); 346 virtual void OnResolved();
347 BOOL ConfirmRequest(); 347 BOOL ConfirmRequest();
348 WORD m_LastSlack; 348 WORD m_LastSlack;
349 UINT m_ACK; 349 UINT m_ACK;
350 BOOL OnTFTP(tftp* p); 350 BOOL OnTFTP(tftp* p);
351 ULONG GetACK(void); 351 ULONG GetACK(void);
352 void DoXfer(); 352 void DoXfer();
353 CRRQSocket(CPumpKINDlg *daddy,LPCTSTR fileName,LPCTSTR type,SOCKADDR_IN *sin); 353 CRRQSocket(CPumpKINDlg *daddy,LPCTSTR fileName,LPCTSTR type,SOCKADDR_IN *sin);
354 BOOL Create(LPCTSTR localFile=NULL,LPCTSTR hostName=NULL); 354 BOOL Create(LPCTSTR localFile=NULL,LPCTSTR hostName=NULL);
355 355
356 DECLARE_DYNAMIC(CRRQSocket) 356 DECLARE_DYNAMIC(CRRQSocket)
357}; 357};
358 358
359 typedef CMap<SOCKET,SOCKET,CXferSocket*,CXferSocket*>CTIDMap; 359 typedef CMap<SOCKET,SOCKET,CXferSocket*,CXferSocket*>CTIDMap;
360typedef CMap<CTime*,CTime*,CTime*,CTime*> CTimeMap; 360typedef CMap<CTime*,CTime*,CTime*,CTime*> CTimeMap;
361 361
362///////////////////////////////////////////////////////////////////////////// 362/////////////////////////////////////////////////////////////////////////////
363// CPumpKINDlg dialog 363// CPumpKINDlg dialog
364 364
365class CTrayer; 365class CTrayer;
366class CRetrier; 366class CRetrier;
367class CPumpKINDlg : public CDialog 367class CPumpKINDlg : public CDialog
368{ 368{
369// Construction 369// Construction
370public: 370public:
371 void AdjustButton(CWnd& w,CRect& wrc); 371 void AdjustButton(CWnd& w,CRect& wrc);
372 void RecalcLayout(int,int); 372 void RecalcLayout(int,int);
373 CSize m_MinSize; 373 CSize m_MinSize;
374 UINT m_bottomGapLog; 374 UINT m_bottomGapLog;
375 UINT m_bottomGapListen; 375 UINT m_bottomGapListen;
376 UINT m_rightGapList; 376 UINT m_rightGapList;
377 UINT m_rightGapButtons; 377 UINT m_rightGapButtons;
378 CString m_lastlogerr; 378 CString m_lastlogerr;
379 void LogLine(LPCTSTR str); 379 void LogLine(LPCTSTR str);
380 CString m_LogFile; 380 CString m_LogFile;
381 BOOL m_bListen; 381 BOOL m_bListen;
382 acl_rules_t m_aclRules; 382 acl_rules_t m_aclRules;
383 CString m_bnwRequest; 383 CString m_bnwRequest;
384 CString m_bnwSuccess; 384 CString m_bnwSuccess;
385 CString m_bnwAbort; 385 CString m_bnwAbort;
386 CBellsNWhistles m_bnw; 386 CBellsNWhistles m_bnw;
387 CTrayer *m_Trayer; 387 CTrayer *m_Trayer;
388 CTimeSpan m_RetryTimeOut; 388 CTimeSpan m_RetryTimeOut;
389 virtual ~CPumpKINDlg(); 389 virtual ~CPumpKINDlg();
390 CRetrier* m_Retrier; 390 CRetrier* m_Retrier;
391 virtual BOOL PreTranslateMessage(MSG* pMsg); 391 virtual BOOL PreTranslateMessage(MSG* pMsg);
392 BOOL m_bShown; 392 BOOL m_bShown;
393 BOOL m_bExiting; 393 BOOL m_bExiting;
394 void SaveSettings(); 394 void SaveSettings();
395 void LoadSettings(); 395 void LoadSettings();
396 void SetupButtons(); 396 void SetupButtons();
397 BITMAP m_bitmapBack; 397 BITMAP m_bitmapBack;
398 CBitmap m_bmpBack; 398 CBitmap m_bmpBack;
399 UINT m_PromptTimeOut; 399 UINT m_PromptTimeOut;
400 UINT m_SpeakPort; 400 UINT m_SpeakPort;
401 void LogLine(UINT msgID); 401 void LogLine(UINT msgID);
402 CTimeMap m_LogTimes; 402 CTimeMap m_LogTimes;
403 void LogLineToFile(LPCTSTR str); 403 void LogLineToFile(LPCTSTR str);
404 void LogLineToScreen(LPCTSTR str); 404 void LogLineToScreen(LPCTSTR str);
405 int m_LogLength; 405 int m_LogLength;
406 enum{ 406 enum{
407 subitemFile=0, subitemType, subitemPeer, subitemBytes, subitemTSize 407 subitemFile=0, subitemType, subitemPeer, subitemBytes, subitemTSize
408 }; 408 };
409 int m_iWRQ; 409 int m_iWRQ;
410 int m_iRRQ; 410 int m_iRRQ;
411 CImageList m_Images; 411 CImageList m_Images;
412 CTIDMap m_Xfers; 412 CTIDMap m_Xfers;
413 CTimeSpan m_TFTPTimeOut; 413 CTimeSpan m_TFTPTimeOut;
414 enum{ 414 enum{
415 rrqGiveAll=acl_rule::rrqGrant, 415 rrqGiveAll=acl_rule::rrqGrant,
416 rrqAlwaysConfirm=acl_rule::rrqPrompt, 416 rrqAlwaysConfirm=acl_rule::rrqPrompt,
417 rrqDenyAll=acl_rule::rrqDeny, 417 rrqDenyAll=acl_rule::rrqDeny,
418 rrqFallback=acl_rule::rrqNone, 418 rrqFallback=acl_rule::rrqNone,
419 rrqGrant=rrqGiveAll, rrqDeny=rrqDenyAll, rrqPrompt=rrqAlwaysConfirm 419 rrqGrant=rrqGiveAll, rrqDeny=rrqDenyAll, rrqPrompt=rrqAlwaysConfirm
420 }; 420 };
421 enum{ 421 enum{
422 wrqTakeAll=acl_rule::wrqGrant, 422 wrqTakeAll=acl_rule::wrqGrant,
423 wrqConfirmIfExists=acl_rule::wrqPromptIfExists, 423 wrqConfirmIfExists=acl_rule::wrqPromptIfExists,
424 wrqAlwaysConfirm=acl_rule::wrqPrompt, 424 wrqAlwaysConfirm=acl_rule::wrqPrompt,
425 wrqDenyAll=acl_rule::wrqDeny, 425 wrqDenyAll=acl_rule::wrqDeny,
426 wrqFallback=acl_rule::wrqNone, 426 wrqFallback=acl_rule::wrqNone,
427 wrqGrant=wrqTakeAll,wrqDeny=wrqDenyAll, wrqPrompt=wrqAlwaysConfirm 427 wrqGrant=wrqTakeAll,wrqDeny=wrqDenyAll, wrqPrompt=wrqAlwaysConfirm
428 }; 428 };
429 UINT m_RRQMode; 429 UINT m_RRQMode;
430 UINT m_WRQMode; 430 UINT m_WRQMode;
431 BOOL m_bTFTPSubdirs; 431 BOOL m_bTFTPSubdirs;
432 CString m_TFTPRoot; 432 CString m_TFTPRoot;
433 UINT m_ListenPort; 433 UINT m_ListenPort;
434 CString m_ListenAddress;
434 UINT m_BlockSize; 435 UINT m_BlockSize;
435 CListenSocket m_Listener; 436 CListenSocket m_Listener;
436 CPumpKINDlg(CWnd* pParent = NULL);// standard constructor 437 CPumpKINDlg(CWnd* pParent = NULL);// standard constructor
437 438
438// Dialog Data 439// Dialog Data
439 //{{AFX_DATA(CPumpKINDlg) 440 //{{AFX_DATA(CPumpKINDlg)
440 enum { IDD = IDD_PUMPKIN_DIALOG }; 441 enum { IDD = IDD_PUMPKIN_DIALOG };
441 CButtonm_HelpCtl; 442 CButtonm_HelpCtl;
442 CButtonm_PutCtl; 443 CButtonm_PutCtl;
443 CButtonm_GetCtl; 444 CButtonm_GetCtl;
444 CButtonm_ExitCtl; 445 CButtonm_ExitCtl;
445 CButtonm_ListenCtl; 446 CButtonm_ListenCtl;
446 CButtonm_AbortCtl; 447 CButtonm_AbortCtl;
447 CButtonm_OptionsCtl; 448 CButtonm_OptionsCtl;
448 CListBoxm_Log; 449 CListBoxm_Log;
449 CListCtrlm_List; 450 CListCtrlm_List;
450 //}}AFX_DATA 451 //}}AFX_DATA
451 452
452 // ClassWizard generated virtual function overrides 453 // ClassWizard generated virtual function overrides
453 //{{AFX_VIRTUAL(CPumpKINDlg) 454 //{{AFX_VIRTUAL(CPumpKINDlg)
454 protected: 455 protected:
455 virtual void DoDataExchange(CDataExchange* pDX);// DDX/DDV support 456 virtual void DoDataExchange(CDataExchange* pDX);// DDX/DDV support
456 //}}AFX_VIRTUAL 457 //}}AFX_VIRTUAL
457 458
458// Implementation 459// Implementation
459protected: 460protected:
460 CToolTipCtrl m_tooltip; 461 CToolTipCtrl m_tooltip;
461 HICON m_hIcon; 462 HICON m_hIcon;
462 463
463 // Generated message map functions 464 // Generated message map functions
464 //{{AFX_MSG(CPumpKINDlg) 465 //{{AFX_MSG(CPumpKINDlg)
465 virtual BOOL OnInitDialog(); 466 virtual BOOL OnInitDialog();
466 afx_msg void OnSysCommand(UINT nID, LPARAM lParam); 467 afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
467 afx_msg void OnDestroy(); 468 afx_msg void OnDestroy();
468 afx_msg void OnPaint(); 469 afx_msg void OnPaint();
469 afx_msg HCURSOR OnQueryDragIcon(); 470 afx_msg HCURSOR OnQueryDragIcon();
470 afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); 471 afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
471 afx_msg void OnOptions(); 472 afx_msg void OnOptions();
472 afx_msg void OnTimer(UINT nIDEvent); 473 afx_msg void OnTimer(UINT nIDEvent);
473 afx_msg void OnExit(); 474 afx_msg void OnExit();
474 afx_msg void OnPut(); 475 afx_msg void OnPut();
475 afx_msg void OnGet(); 476 afx_msg void OnGet();
476 afx_msg void OnDeleteallitemsConnections(NMHDR* pNMHDR, LRESULT* pResult); 477 afx_msg void OnDeleteallitemsConnections(NMHDR* pNMHDR, LRESULT* pResult);
477 afx_msg void OnDeleteitemConnections(NMHDR* pNMHDR, LRESULT* pResult); 478 afx_msg void OnDeleteitemConnections(NMHDR* pNMHDR, LRESULT* pResult);
478 afx_msg void OnInsertitemConnections(NMHDR* pNMHDR, LRESULT* pResult); 479 afx_msg void OnInsertitemConnections(NMHDR* pNMHDR, LRESULT* pResult);
479 afx_msg void OnItemchangedConnections(NMHDR* pNMHDR, LRESULT* pResult); 480 afx_msg void OnItemchangedConnections(NMHDR* pNMHDR, LRESULT* pResult);
480 afx_msg void OnAbort(); 481 afx_msg void OnAbort();
481 afx_msg void OnClose(); 482 afx_msg void OnClose();
482 afx_msg void OnTrayShowpumpkinwindow(); 483 afx_msg void OnTrayShowpumpkinwindow();
483 afx_msg void OnTrayListen(); 484 afx_msg void OnTrayListen();
484 afx_msg void OnTrayExit(); 485 afx_msg void OnTrayExit();
485 afx_msg void OnTrayAboutpumpkin(); 486 afx_msg void OnTrayAboutpumpkin();
486 afx_msg void OnTrayFetchfile(); 487 afx_msg void OnTrayFetchfile();
487 afx_msg void OnTrayHelp(); 488 afx_msg void OnTrayHelp();
488 afx_msg void OnTrayOptions(); 489 afx_msg void OnTrayOptions();
489 afx_msg void OnTraySendfile(); 490 afx_msg void OnTraySendfile();
490 afx_msg void OnWindowPosChanging(WINDOWPOS FAR* lpwndpos); 491 afx_msg void OnWindowPosChanging(WINDOWPOS FAR* lpwndpos);
491 afx_msg void OnSelchangeLog(); 492 afx_msg void OnSelchangeLog();
492 afx_msg void OnTrayOpenfilesfolder(); 493 afx_msg void OnTrayOpenfilesfolder();
493 afx_msg void OnDropFiles(HDROP hDropInfo); 494 afx_msg void OnDropFiles(HDROP hDropInfo);
494 virtual void OnCancel(); 495 virtual void OnCancel();
495 afx_msg void OnHelp(); 496 afx_msg void OnHelp();
496 afx_msg void OnListening(); 497 afx_msg void OnListening();
497 afx_msg void OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI); 498 afx_msg void OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI);
498 afx_msg void OnSize(UINT nType, int cx, int cy); 499 afx_msg void OnSize(UINT nType, int cx, int cy);
499 //}}AFX_MSG 500 //}}AFX_MSG
500 DECLARE_MESSAGE_MAP() 501 DECLARE_MESSAGE_MAP()
501}; 502};