summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--PumpKINDlg.cpp1
-rw-r--r--pumpkin.rc10
-rw-r--r--resource.h1
3 files changed, 8 insertions, 4 deletions
diff --git a/PumpKINDlg.cpp b/PumpKINDlg.cpp
index 0b3bf41..fc24596 100644
--- a/PumpKINDlg.cpp
+++ b/PumpKINDlg.cpp
@@ -1,841 +1,842 @@
1// PumpKINDlg.cpp : implementation file 1// PumpKINDlg.cpp : implementation file
2// 2//
3 3
4#include "stdafx.h" 4#include "stdafx.h"
5#include "PumpKIN.h" 5#include "PumpKIN.h"
6#include "PumpKINDlg.h" 6#include "PumpKINDlg.h"
7 7
8#include "PropsServer.h" 8#include "PropsServer.h"
9#include "PropsNetwork.h" 9#include "PropsNetwork.h"
10#include "PropsSounds.h" 10#include "PropsSounds.h"
11#include "ConfirmRRQDlg.h" 11#include "ConfirmRRQDlg.h"
12#include "ConfirmWRQDlg.h" 12#include "ConfirmWRQDlg.h"
13#include "RequestDlg.h" 13#include "RequestDlg.h"
14#include "Resolver.h" 14#include "Resolver.h"
15#include "Retrier.h" 15#include "Retrier.h"
16#include "Trayer.h" 16#include "Trayer.h"
17 17
18#include <io.h> 18#include <io.h>
19 19
20#ifdef _DEBUG 20#ifdef _DEBUG
21#define new DEBUG_NEW 21#define new DEBUG_NEW
22#undef THIS_FILE 22#undef THIS_FILE
23static char THIS_FILE[] = __FILE__; 23static char THIS_FILE[] = __FILE__;
24#endif 24#endif
25 25
26IMPLEMENT_DYNAMIC(CXferSocket, CAsyncSocket) 26IMPLEMENT_DYNAMIC(CXferSocket, CAsyncSocket)
27IMPLEMENT_DYNAMIC(CWRQSocket, CXferSocket) 27IMPLEMENT_DYNAMIC(CWRQSocket, CXferSocket)
28IMPLEMENT_DYNAMIC(CRRQSocket, CXferSocket) 28IMPLEMENT_DYNAMIC(CRRQSocket, CXferSocket)
29 29
30///////////////////////////////////////////////////////////////////////////// 30/////////////////////////////////////////////////////////////////////////////
31// CAboutDlg dialog used for App About 31// CAboutDlg dialog used for App About
32 32
33class CAboutDlg : public CDialog 33class CAboutDlg : public CDialog
34{ 34{
35public: 35public:
36 CAboutDlg(); 36 CAboutDlg();
37 37
38// Dialog Data 38// Dialog Data
39 //{{AFX_DATA(CAboutDlg) 39 //{{AFX_DATA(CAboutDlg)
40 enum { IDD = IDD_ABOUTBOX }; 40 enum { IDD = IDD_ABOUTBOX };
41 //}}AFX_DATA 41 //}}AFX_DATA
42 42
43 // ClassWizard generated virtual function overrides 43 // ClassWizard generated virtual function overrides
44 //{{AFX_VIRTUAL(CAboutDlg) 44 //{{AFX_VIRTUAL(CAboutDlg)
45 protected: 45 protected:
46 virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support 46 virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
47 //}}AFX_VIRTUAL 47 //}}AFX_VIRTUAL
48 48
49// Implementation 49// Implementation
50protected: 50protected:
51 //{{AFX_MSG(CAboutDlg) 51 //{{AFX_MSG(CAboutDlg)
52 afx_msg void OnKlevernet(); 52 afx_msg void OnKlevernet();
53 //}}AFX_MSG 53 //}}AFX_MSG
54 DECLARE_MESSAGE_MAP() 54 DECLARE_MESSAGE_MAP()
55}; 55};
56 56
57CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) 57CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
58{ 58{
59 //{{AFX_DATA_INIT(CAboutDlg) 59 //{{AFX_DATA_INIT(CAboutDlg)
60 //}}AFX_DATA_INIT 60 //}}AFX_DATA_INIT
61} 61}
62 62
63void CAboutDlg::DoDataExchange(CDataExchange* pDX) 63void CAboutDlg::DoDataExchange(CDataExchange* pDX)
64{ 64{
65 CDialog::DoDataExchange(pDX); 65 CDialog::DoDataExchange(pDX);
66 //{{AFX_DATA_MAP(CAboutDlg) 66 //{{AFX_DATA_MAP(CAboutDlg)
67 //}}AFX_DATA_MAP 67 //}}AFX_DATA_MAP
68} 68}
69 69
70BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) 70BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
71 //{{AFX_MSG_MAP(CAboutDlg) 71 //{{AFX_MSG_MAP(CAboutDlg)
72 ON_BN_CLICKED(IDC_KLEVERNET, OnKlevernet) 72 ON_BN_CLICKED(IDC_KLEVERNET, OnKlevernet)
73 //}}AFX_MSG_MAP 73 //}}AFX_MSG_MAP
74END_MESSAGE_MAP() 74END_MESSAGE_MAP()
75 75
76///////////////////////////////////////////////////////////////////////////// 76/////////////////////////////////////////////////////////////////////////////
77// CPumpKINDlg dialog 77// CPumpKINDlg dialog
78 78
79CPumpKINDlg::CPumpKINDlg(CWnd* pParent /*=NULL*/) 79CPumpKINDlg::CPumpKINDlg(CWnd* pParent /*=NULL*/)
80 : CDialog(CPumpKINDlg::IDD, pParent) 80 : CDialog(CPumpKINDlg::IDD, pParent)
81{ 81{
82 m_ListenPort = 69; 82 m_ListenPort = 69;
83 m_bTFTPSubdirs = TRUE; 83 m_bTFTPSubdirs = TRUE;
84 m_RRQMode = rrqAlwaysConfirm; 84 m_RRQMode = rrqAlwaysConfirm;
85 m_WRQMode = wrqAlwaysConfirm; 85 m_WRQMode = wrqAlwaysConfirm;
86 m_TFTPTimeOut = CTimeSpan(0,0,0,30); 86 m_TFTPTimeOut = CTimeSpan(0,0,0,30);
87 m_RetryTimeOut = CTimeSpan(0,0,0,10); 87 m_RetryTimeOut = CTimeSpan(0,0,0,10);
88 m_LogLength = 100; 88 m_LogLength = 100;
89 m_SpeakPort = 69; 89 m_SpeakPort = 69;
90 m_PromptTimeOut=30; 90 m_PromptTimeOut=30;
91 m_bShown=TRUE; 91 m_bShown=TRUE;
92 m_bExiting=FALSE; 92 m_bExiting=FALSE;
93 m_BlockSize=1024; 93 m_BlockSize=1024;
94 m_bnw.AssignSound("(bang)",IDR_WAVE_RING,CBellsNWhistles::CBang::bangResource); 94 m_bnw.AssignSound("(bang)",IDR_WAVE_RING,CBellsNWhistles::CBang::bangResource);
95 m_bnw.AssignSound("(done)",IDR_WAVE_FINISHED,CBellsNWhistles::CBang::bangResource); 95 m_bnw.AssignSound("(done)",IDR_WAVE_FINISHED,CBellsNWhistles::CBang::bangResource);
96 m_bnw.AssignSound("(oops)",IDR_WAVE_ABORTED,CBellsNWhistles::CBang::bangResource); 96 m_bnw.AssignSound("(oops)",IDR_WAVE_ABORTED,CBellsNWhistles::CBang::bangResource);
97 m_bnw.AssignSound("(none)",(int)0,CBellsNWhistles::CBang::bangNone); 97 m_bnw.AssignSound("(none)",(int)0,CBellsNWhistles::CBang::bangNone);
98 m_bnwRequest="(bang)"; m_bnwSuccess="(done)"; 98 m_bnwRequest="(bang)"; m_bnwSuccess="(done)";
99 m_bnwAbort="(oops)"; 99 m_bnwAbort="(oops)";
100 //{{AFX_DATA_INIT(CPumpKINDlg) 100 //{{AFX_DATA_INIT(CPumpKINDlg)
101 //}}AFX_DATA_INIT 101 //}}AFX_DATA_INIT
102 // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 102 // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
103 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); 103 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
104 m_bmpBack.LoadBitmap(IDB_BACKGROUND); 104 m_bmpBack.LoadBitmap(IDB_BACKGROUND);
105 m_bmpBack.GetBitmap(&m_bitmapBack); 105 m_bmpBack.GetBitmap(&m_bitmapBack);
106 m_Retrier = new CRetrier(this); 106 m_Retrier = new CRetrier(this);
107 ASSERT(m_Retrier); 107 ASSERT(m_Retrier);
108 m_Trayer = new CTrayer(this); 108 m_Trayer = new CTrayer(this);
109 ASSERT(m_Trayer); 109 ASSERT(m_Trayer);
110 LoadSettings(); 110 LoadSettings();
111} 111}
112 112
113void CPumpKINDlg::DoDataExchange(CDataExchange* pDX) 113void CPumpKINDlg::DoDataExchange(CDataExchange* pDX)
114{ 114{
115 CDialog::DoDataExchange(pDX); 115 CDialog::DoDataExchange(pDX);
116 //{{AFX_DATA_MAP(CPumpKINDlg) 116 //{{AFX_DATA_MAP(CPumpKINDlg)
117 DDX_Control(pDX, IDC_ABORT, m_AbortCtl); 117 DDX_Control(pDX, IDC_ABORT, m_AbortCtl);
118 DDX_Control(pDX, IDC_OPTIONS, m_OptionsCtl); 118 DDX_Control(pDX, IDC_OPTIONS, m_OptionsCtl);
119 DDX_Control(pDX, IDC_LOG, m_Log); 119 DDX_Control(pDX, IDC_LOG, m_Log);
120 DDX_Control(pDX, IDC_CONNECTIONS, m_List); 120 DDX_Control(pDX, IDC_CONNECTIONS, m_List);
121 //}}AFX_DATA_MAP 121 //}}AFX_DATA_MAP
122} 122}
123 123
124BEGIN_MESSAGE_MAP(CPumpKINDlg, CDialog) 124BEGIN_MESSAGE_MAP(CPumpKINDlg, CDialog)
125 //{{AFX_MSG_MAP(CPumpKINDlg) 125 //{{AFX_MSG_MAP(CPumpKINDlg)
126 ON_WM_SYSCOMMAND() 126 ON_WM_SYSCOMMAND()
127 ON_WM_DESTROY() 127 ON_WM_DESTROY()
128 ON_WM_PAINT() 128 ON_WM_PAINT()
129 ON_WM_QUERYDRAGICON() 129 ON_WM_QUERYDRAGICON()
130 ON_WM_CREATE() 130 ON_WM_CREATE()
131 ON_BN_CLICKED(IDC_OPTIONS, OnOptions) 131 ON_BN_CLICKED(IDC_OPTIONS, OnOptions)
132 ON_WM_TIMER() 132 ON_WM_TIMER()
133 ON_BN_CLICKED(IDC_EXIT, OnExit) 133 ON_BN_CLICKED(IDC_EXIT, OnExit)
134 ON_BN_CLICKED(IDC_PUT, OnPut) 134 ON_BN_CLICKED(IDC_PUT, OnPut)
135 ON_BN_CLICKED(IDC_GET, OnGet) 135 ON_BN_CLICKED(IDC_GET, OnGet)
136 ON_NOTIFY(LVN_DELETEALLITEMS, IDC_CONNECTIONS, OnDeleteallitemsConnections) 136 ON_NOTIFY(LVN_DELETEALLITEMS, IDC_CONNECTIONS, OnDeleteallitemsConnections)
137 ON_NOTIFY(LVN_DELETEITEM, IDC_CONNECTIONS, OnDeleteitemConnections) 137 ON_NOTIFY(LVN_DELETEITEM, IDC_CONNECTIONS, OnDeleteitemConnections)
138 ON_NOTIFY(LVN_INSERTITEM, IDC_CONNECTIONS, OnInsertitemConnections) 138 ON_NOTIFY(LVN_INSERTITEM, IDC_CONNECTIONS, OnInsertitemConnections)
139 ON_NOTIFY(LVN_ITEMCHANGED, IDC_CONNECTIONS, OnItemchangedConnections) 139 ON_NOTIFY(LVN_ITEMCHANGED, IDC_CONNECTIONS, OnItemchangedConnections)
140 ON_BN_CLICKED(IDC_ABORT, OnAbort) 140 ON_BN_CLICKED(IDC_ABORT, OnAbort)
141 ON_WM_CLOSE() 141 ON_WM_CLOSE()
142 ON_COMMAND(ID_TRAY_SHOWPUMPKINWINDOW, OnTrayShowpumpkinwindow) 142 ON_COMMAND(ID_TRAY_SHOWPUMPKINWINDOW, OnTrayShowpumpkinwindow)
143 ON_COMMAND(ID_TRAY_EXIT, OnTrayExit) 143 ON_COMMAND(ID_TRAY_EXIT, OnTrayExit)
144 ON_COMMAND(ID_TRAY_ABOUTPUMPKIN, OnTrayAboutpumpkin) 144 ON_COMMAND(ID_TRAY_ABOUTPUMPKIN, OnTrayAboutpumpkin)
145 ON_COMMAND(ID_TRAY_FETCHFILE, OnTrayFetchfile) 145 ON_COMMAND(ID_TRAY_FETCHFILE, OnTrayFetchfile)
146 ON_COMMAND(ID_TRAY_HELP, OnTrayHelp) 146 ON_COMMAND(ID_TRAY_HELP, OnTrayHelp)
147 ON_COMMAND(ID_TRAY_OPTIONS, OnTrayOptions) 147 ON_COMMAND(ID_TRAY_OPTIONS, OnTrayOptions)
148 ON_COMMAND(ID_TRAY_SENDFILE, OnTraySendfile) 148 ON_COMMAND(ID_TRAY_SENDFILE, OnTraySendfile)
149 ON_WM_WINDOWPOSCHANGING() 149 ON_WM_WINDOWPOSCHANGING()
150 ON_LBN_SELCHANGE(IDC_LOG, OnSelchangeLog) 150 ON_LBN_SELCHANGE(IDC_LOG, OnSelchangeLog)
151 ON_COMMAND(ID_TRAY_OPENFILESFOLDER, OnTrayOpenfilesfolder) 151 ON_COMMAND(ID_TRAY_OPENFILESFOLDER, OnTrayOpenfilesfolder)
152 ON_WM_DROPFILES() 152 ON_WM_DROPFILES()
153 ON_BN_CLICKED(ID_HELP, OnHelp) 153 ON_BN_CLICKED(ID_HELP, OnHelp)
154 //}}AFX_MSG_MAP 154 //}}AFX_MSG_MAP
155END_MESSAGE_MAP() 155END_MESSAGE_MAP()
156 156
157///////////////////////////////////////////////////////////////////////////// 157/////////////////////////////////////////////////////////////////////////////
158// CPumpKINDlg message handlers 158// CPumpKINDlg message handlers
159 159
160BOOL CPumpKINDlg::OnInitDialog() 160BOOL CPumpKINDlg::OnInitDialog()
161{ 161{
162 CDialog::OnInitDialog(); 162 CDialog::OnInitDialog();
163 163
164 // Add "About..." menu item to system menu. 164 // Add "About..." menu item to system menu.
165 165
166 // IDM_ABOUTBOX must be in the system command range. 166 // IDM_ABOUTBOX must be in the system command range.
167 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); 167 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
168 ASSERT(IDM_ABOUTBOX < 0xF000); 168 ASSERT(IDM_ABOUTBOX < 0xF000);
169 169
170 CMenu* pSysMenu = GetSystemMenu(FALSE); 170 CMenu* pSysMenu = GetSystemMenu(FALSE);
171 CString strAboutMenu; 171 CString strAboutMenu;
172 strAboutMenu.LoadString(IDS_ABOUTBOX); 172 strAboutMenu.LoadString(IDS_ABOUTBOX);
173 if (!strAboutMenu.IsEmpty()) 173 if (!strAboutMenu.IsEmpty())
174 { 174 {
175 pSysMenu->AppendMenu(MF_SEPARATOR); 175 pSysMenu->AppendMenu(MF_SEPARATOR);
176 pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); 176 pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
177 } 177 }
178 178
179 // Set the icon for this dialog. The framework does this automatically 179 // Set the icon for this dialog. The framework does this automatically
180 // when the application's main window is not a dialog 180 // when the application's main window is not a dialog
181 SetIcon(m_hIcon, TRUE); // Set big icon 181 SetIcon(m_hIcon, TRUE); // Set big icon
182 SetIcon(m_hIcon, FALSE); // Set small icon 182 SetIcon(m_hIcon, FALSE); // Set small icon
183 183
184 VERIFY(m_Retrier->Create(NULL,"PumpKIN-Retrier",WS_CHILD,CRect(0,0,0,0),this,0)); 184 VERIFY(m_Retrier->Create(NULL,"PumpKIN-Retrier",WS_CHILD,CRect(0,0,0,0),this,0));
185 185
186 186
187 m_Images.Create(16,16,TRUE,2,1); 187 m_Images.Create(16,16,TRUE,2,1);
188 m_iRRQ = m_Images.Add(AfxGetApp()->LoadIcon(IDI_RRQ)); 188 m_iRRQ = m_Images.Add(AfxGetApp()->LoadIcon(IDI_RRQ));
189 m_iWRQ = m_Images.Add(AfxGetApp()->LoadIcon(IDI_WRQ)); 189 m_iWRQ = m_Images.Add(AfxGetApp()->LoadIcon(IDI_WRQ));
190 ASSERT(m_iRRQ>=0); 190 ASSERT(m_iRRQ>=0);
191 ASSERT(m_iWRQ>=0); 191 ASSERT(m_iWRQ>=0);
192 m_List.SetImageList(&m_Images,LVSIL_NORMAL); 192 m_List.SetImageList(&m_Images,LVSIL_NORMAL);
193 m_List.SetImageList(&m_Images,LVSIL_SMALL); 193 m_List.SetImageList(&m_Images,LVSIL_SMALL);
194 m_List.SetImageList(&m_Images,LVSIL_STATE); 194 m_List.SetImageList(&m_Images,LVSIL_STATE);
195 m_List.SetTextColor(RGB(255,255,0));// Yellow 195 m_List.SetTextColor(RGB(255,255,0));// Yellow
196 m_List.SetTextBkColor(RGB(12,167,0));// Green 196 m_List.SetTextBkColor(RGB(12,167,0));// Green
197 m_List.SetBkColor(RGB(12,167,0));// Green 197 m_List.SetBkColor(RGB(12,167,0));// Green
198CRect listrc; 198CRect listrc;
199 m_List.GetClientRect(&listrc); 199 m_List.GetClientRect(&listrc);
200 m_List.InsertColumn(0,"File",LVCFMT_LEFT,listrc.Width()-((listrc.Width()/7)*3+listrc.Width()*2/7),subitemFile); 200 m_List.InsertColumn(0,"File",LVCFMT_LEFT,listrc.Width()-((listrc.Width()/7)*3+listrc.Width()*2/7),subitemFile);
201 m_List.InsertColumn(1,"type",LVCFMT_CENTER,listrc.Width()/7,subitemType); 201 m_List.InsertColumn(1,"type",LVCFMT_CENTER,listrc.Width()/7,subitemType);
202 m_List.InsertColumn(2,"peer",LVCFMT_LEFT,listrc.Width()*2/7,subitemPeer); 202 m_List.InsertColumn(2,"peer",LVCFMT_LEFT,listrc.Width()*2/7,subitemPeer);
203 m_List.InsertColumn(3,"ACK",LVCFMT_RIGHT,listrc.Width()/7,subitemBytes); 203 m_List.InsertColumn(3,"ACK",LVCFMT_RIGHT,listrc.Width()/7,subitemBytes);
204 m_List.InsertColumn(4,"tsize",LVCFMT_RIGHT,listrc.Width()/7,subitemTSize); 204 m_List.InsertColumn(4,"tsize",LVCFMT_RIGHT,listrc.Width()/7,subitemTSize);
205 205
206 LogLine(IDS_LOG_START); 206 LogLine(IDS_LOG_START);
207 207
208 SetupButtons(); 208 SetupButtons();
209 209
210CRect rc, drc; 210CRect rc, drc;
211 GetWindowRect(rc); 211 GetWindowRect(rc);
212 GetDesktopWindow()->GetWindowRect(drc); 212 GetDesktopWindow()->GetWindowRect(drc);
213 SetWindowPos(NULL,drc.right-6-rc.Width(),6,0,0,SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOZORDER); 213 SetWindowPos(NULL,drc.right-6-rc.Width(),6,0,0,SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOZORDER);
214 214
215 if(m_bShown) 215 if(m_bShown)
216 ShowWindow(SW_SHOW); 216 ShowWindow(SW_SHOW);
217 else 217 else
218 ShowWindow(SW_HIDE); 218 ShowWindow(SW_HIDE);
219 219
220 // CG: The following block was added by the ToolTips component. 220 // CG: The following block was added by the ToolTips component.
221 { 221 {
222 // Create the ToolTip control. 222 // Create the ToolTip control.
223 m_tooltip.Create(this); 223 m_tooltip.Create(this);
224 m_tooltip.Activate(TRUE); 224 m_tooltip.Activate(TRUE);
225 225
226 m_tooltip.AddTool(&m_List,IDC_CONNECTIONS); 226 m_tooltip.AddTool(&m_List,IDC_CONNECTIONS);
227 m_tooltip.AddTool(GetDlgItem(IDC_PUT),IDC_PUT); 227 m_tooltip.AddTool(GetDlgItem(IDC_PUT),IDC_PUT);
228 m_tooltip.AddTool(GetDlgItem(IDC_GET),IDC_GET); 228 m_tooltip.AddTool(GetDlgItem(IDC_GET),IDC_GET);
229 m_tooltip.AddTool(&m_AbortCtl,IDC_ABORT); 229 m_tooltip.AddTool(&m_AbortCtl,IDC_ABORT);
230 m_tooltip.AddTool(GetDlgItem(IDC_OPTIONS),IDC_OPTIONS); 230 m_tooltip.AddTool(GetDlgItem(IDC_OPTIONS),IDC_OPTIONS);
231 m_tooltip.AddTool(GetDlgItem(IDC_EXIT),IDC_EXIT); 231 m_tooltip.AddTool(GetDlgItem(IDC_EXIT),IDC_EXIT);
232 m_tooltip.AddTool(GetDlgItem(ID_HELP),ID_HELP); 232 m_tooltip.AddTool(GetDlgItem(ID_HELP),ID_HELP);
233 m_tooltip.AddTool(GetDlgItem(IDC_LOG),IDC_LOG); 233 m_tooltip.AddTool(GetDlgItem(IDC_LOG),IDC_LOG);
234 } 234 }
235 return TRUE; // return TRUE unless you set the focus to a control 235 return TRUE; // return TRUE unless you set the focus to a control
236} 236}
237 237
238void CPumpKINDlg::OnSysCommand(UINT nID, LPARAM lParam) 238void CPumpKINDlg::OnSysCommand(UINT nID, LPARAM lParam)
239{ 239{
240 if ((nID & 0xFFF0) == IDM_ABOUTBOX) 240 if ((nID & 0xFFF0) == IDM_ABOUTBOX)
241 { 241 {
242 CAboutDlg dlgAbout; 242 CAboutDlg dlgAbout;
243 dlgAbout.DoModal(); 243 dlgAbout.DoModal();
244 } 244 }
245 else 245 else
246 { 246 {
247 CDialog::OnSysCommand(nID, lParam); 247 CDialog::OnSysCommand(nID, lParam);
248 } 248 }
249} 249}
250 250
251void CPumpKINDlg::OnDestroy() 251void CPumpKINDlg::OnDestroy()
252{ 252{
253 SaveSettings(); 253 SaveSettings();
254 254
255NOTIFYICONDATA nid; 255NOTIFYICONDATA nid;
256 memset(&nid,0,sizeof(nid)); 256 memset(&nid,0,sizeof(nid));
257 nid.cbSize=sizeof(nid); 257 nid.cbSize=sizeof(nid);
258 nid.hWnd=m_Trayer->m_hWnd; 258 nid.hWnd=m_Trayer->m_hWnd;
259 nid.uID=IDC_TRAYICON; 259 nid.uID=IDC_TRAYICON;
260 nid.uFlags=0; 260 nid.uFlags=0;
261 VERIFY(Shell_NotifyIcon(NIM_DELETE,&nid)); 261 VERIFY(Shell_NotifyIcon(NIM_DELETE,&nid));
262 262
263 WinHelp(0L, HELP_QUIT); 263 WinHelp(0L, HELP_QUIT);
264 CDialog::OnDestroy(); 264 CDialog::OnDestroy();
265POSITION p = m_LogTimes.GetStartPosition(); 265POSITION p = m_LogTimes.GetStartPosition();
266 while(p){ 266 while(p){
267 CTime *t,*tt; 267 CTime *t,*tt;
268 m_LogTimes.GetNextAssoc(p,t,tt); 268 m_LogTimes.GetNextAssoc(p,t,tt);
269 ASSERT(t && tt && t==tt); 269 ASSERT(t && tt && t==tt);
270 delete t; 270 delete t;
271 } 271 }
272 // *** Abort and cleanup transfers 272 // *** Abort and cleanup transfers
273 m_LogTimes.RemoveAll(); 273 m_LogTimes.RemoveAll();
274} 274}
275 275
276// If you add a minimize button to your dialog, you will need the code below 276// If you add a minimize button to your dialog, you will need the code below
277// to draw the icon. For MFC applications using the document/view model, 277// to draw the icon. For MFC applications using the document/view model,
278// this is automatically done for you by the framework. 278// this is automatically done for you by the framework.
279 279
280void CPumpKINDlg::OnPaint() 280void CPumpKINDlg::OnPaint()
281{ 281{
282 if (IsIconic()) 282 if (IsIconic())
283 { 283 {
284 CPaintDC dc(this); // device context for painting 284 CPaintDC dc(this); // device context for painting
285 285
286 SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); 286 SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
287 287
288 // Center icon in client rectangle 288 // Center icon in client rectangle
289 int cxIcon = GetSystemMetrics(SM_CXICON); 289 int cxIcon = GetSystemMetrics(SM_CXICON);
290 int cyIcon = GetSystemMetrics(SM_CYICON); 290 int cyIcon = GetSystemMetrics(SM_CYICON);
291 CRect rect; 291 CRect rect;
292 GetClientRect(&rect); 292 GetClientRect(&rect);
293 int x = (rect.Width() - cxIcon + 1) / 2; 293 int x = (rect.Width() - cxIcon + 1) / 2;
294 int y = (rect.Height() - cyIcon + 1) / 2; 294 int y = (rect.Height() - cyIcon + 1) / 2;
295 295
296 // Draw the icon 296 // Draw the icon
297 dc.DrawIcon(x, y, m_hIcon); 297 dc.DrawIcon(x, y, m_hIcon);
298 } 298 }
299 else 299 else
300 { 300 {
301 CPaintDC pDC(this); 301 CPaintDC pDC(this);
302 CDC bmpDC; 302 CDC bmpDC;
303 bmpDC.CreateCompatibleDC(&pDC); 303 bmpDC.CreateCompatibleDC(&pDC);
304 bmpDC.SelectObject(&m_bmpBack); 304 bmpDC.SelectObject(&m_bmpBack);
305 CRect rc; 305 CRect rc;
306 GetClientRect(&rc); 306 GetClientRect(&rc);
307 for(int x=-m_bitmapBack.bmWidth*2/4;x<rc.Width();x+=m_bitmapBack.bmWidth) 307 for(int x=-m_bitmapBack.bmWidth*2/4;x<rc.Width();x+=m_bitmapBack.bmWidth)
308 for(int y=-m_bitmapBack.bmHeight*2/4;y<rc.Height();y+=m_bitmapBack.bmHeight) 308 for(int y=-m_bitmapBack.bmHeight*2/4;y<rc.Height();y+=m_bitmapBack.bmHeight)
309 pDC.BitBlt(x,y,m_bitmapBack.bmWidth,m_bitmapBack.bmHeight,&bmpDC,0,0,SRCCOPY); 309 pDC.BitBlt(x,y,m_bitmapBack.bmWidth,m_bitmapBack.bmHeight,&bmpDC,0,0,SRCCOPY);
310 bmpDC.DeleteDC(); 310 bmpDC.DeleteDC();
311 CDialog::OnPaint(); 311 CDialog::OnPaint();
312 } 312 }
313} 313}
314 314
315// The system calls this to obtain the cursor to display while the user drags 315// The system calls this to obtain the cursor to display while the user drags
316// the minimized window. 316// the minimized window.
317HCURSOR CPumpKINDlg::OnQueryDragIcon() 317HCURSOR CPumpKINDlg::OnQueryDragIcon()
318{ 318{
319 return (HCURSOR) m_hIcon; 319 return (HCURSOR) m_hIcon;
320} 320}
321 321
322int CPumpKINDlg::OnCreate(LPCREATESTRUCT lpCreateStruct) 322int CPumpKINDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
323{ 323{
324 if (CDialog::OnCreate(lpCreateStruct) == -1) 324 if (CDialog::OnCreate(lpCreateStruct) == -1)
325 return -1; 325 return -1;
326 326
327 m_Listener.m_Daddy=this; 327 m_Listener.m_Daddy=this;
328 if(!m_Listener.Create(m_ListenPort,SOCK_DGRAM)){ 328 if(!m_Listener.Create(m_ListenPort,SOCK_DGRAM)){
329 TRACE0("Failed to create socket\n"); 329 TRACE0("Failed to create socket\n");
330 AfxMessageBox(IDS_BOX_CANTBIND,MB_OK|MB_ICONEXCLAMATION);
330 return -1; 331 return -1;
331 } 332 }
332 333
333 if(!m_Trayer->Create(NULL,"PumpKIN TrayIcon",WS_CHILD,CRect(0,0,0,0),this,0)){ 334 if(!m_Trayer->Create(NULL,"PumpKIN TrayIcon",WS_CHILD,CRect(0,0,0,0),this,0)){
334 TRACE0("Failed to create trayer\n"); 335 TRACE0("Failed to create trayer\n");
335 return -1; 336 return -1;
336 } 337 }
337 338
338NOTIFYICONDATA nid; 339NOTIFYICONDATA nid;
339 memset(&nid,0,sizeof(nid)); 340 memset(&nid,0,sizeof(nid));
340 nid.cbSize=sizeof(nid); 341 nid.cbSize=sizeof(nid);
341 nid.hWnd=m_Trayer->m_hWnd; 342 nid.hWnd=m_Trayer->m_hWnd;
342 nid.uID=IDC_TRAYICON; 343 nid.uID=IDC_TRAYICON;
343 nid.uFlags=NIF_MESSAGE|NIF_ICON|NIF_TIP; 344 nid.uFlags=NIF_MESSAGE|NIF_ICON|NIF_TIP;
344 nid.uCallbackMessage=WM_TRAYICON; 345 nid.uCallbackMessage=WM_TRAYICON;
345 nid.hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME); 346 nid.hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);
346 // *** Load from resource 347 // *** Load from resource
347 strcpy(nid.szTip,"PumpKIN"); 348 strcpy(nid.szTip,"PumpKIN");
348 VERIFY(Shell_NotifyIcon(NIM_ADD,&nid)); 349 VERIFY(Shell_NotifyIcon(NIM_ADD,&nid));
349 350
350 return 0; 351 return 0;
351} 352}
352 353
353void CListenSocket::OnReceive(int nErrorCode) 354void CListenSocket::OnReceive(int nErrorCode)
354{ 355{
355 ASSERT(m_Daddy); 356 ASSERT(m_Daddy);
356 if(nErrorCode){ 357 if(nErrorCode){
357 m_Daddy->LogLine(IDS_LOG_LISTENRECEIVEERROR); 358 m_Daddy->LogLine(IDS_LOG_LISTENRECEIVEERROR);
358 return; 359 return;
359 } 360 }
360DWORD fionread = 0; 361DWORD fionread = 0;
361 VERIFY(IOCtl(FIONREAD,&fionread));// *** Do some checking on the value acquired 362 VERIFY(IOCtl(FIONREAD,&fionread));// *** Do some checking on the value acquired
362tftp *tftpRQ = tftp::Allocate(fionread); 363tftp *tftpRQ = tftp::Allocate(fionread);
363 ASSERT(tftpRQ); 364 ASSERT(tftpRQ);
364SOCKADDR_IN sin; 365SOCKADDR_IN sin;
365 if(!tftpRQ->Receive(this,fionread,&sin)){ 366 if(!tftpRQ->Receive(this,fionread,&sin)){
366 m_Daddy->LogLine(IDS_LOG_LISTENACCEPTERROR); 367 m_Daddy->LogLine(IDS_LOG_LISTENACCEPTERROR);
367 delete tftpRQ; 368 delete tftpRQ;
368 return; 369 return;
369 } 370 }
370 #ifndefNDEBUG 371 #ifndefNDEBUG
371CString tmp; 372CString tmp;
372 tmp.Format("%u - %s - %u\n",tftpRQ->Opcode(),inet_ntoa(sin.sin_addr),sin.sin_port); 373 tmp.Format("%u - %s - %u\n",tftpRQ->Opcode(),inet_ntoa(sin.sin_addr),sin.sin_port);
373 TRACE0(tmp); 374 TRACE0(tmp);
374#endif 375#endif
375POSITION p = m_Daddy->m_Xfers.GetStartPosition(); 376POSITION p = m_Daddy->m_Xfers.GetStartPosition();
376 while(p){ 377 while(p){
377 SOCKET key; 378 SOCKET key;
378 CXferSocket *sock; 379 CXferSocket *sock;
379 m_Daddy->m_Xfers.GetNextAssoc(p,key,sock); 380 m_Daddy->m_Xfers.GetNextAssoc(p,key,sock);
380 ASSERT(sock); 381 ASSERT(sock);
381 if(sock->m_Peer.sin_addr.s_addr==sin.sin_addr.s_addr && sock->m_Peer.sin_port==sin.sin_port){ 382 if(sock->m_Peer.sin_addr.s_addr==sin.sin_addr.s_addr && sock->m_Peer.sin_port==sin.sin_port){
382 TRACE0("Ignoring request which we are already processing\n"); 383 TRACE0("Ignoring request which we are already processing\n");
383 delete tftpRQ; 384 delete tftpRQ;
384 return; 385 return;
385 } 386 }
386 } 387 }
387 switch(tftpRQ->Opcode()){ 388 switch(tftpRQ->Opcode()){
388 case tftp::opRRQ: 389 case tftp::opRRQ:
389 // Read Request 390 // Read Request
390 { 391 {
391 CString tmp; 392 CString tmp;
392 tmp.Format(IDS_LOG_RRQSERVE,tftpRQ->rqFileName(),tftpRQ->rqType(),inet_ntoa(sin.sin_addr)); 393 tmp.Format(IDS_LOG_RRQSERVE,tftpRQ->rqFileName(),tftpRQ->rqType(),inet_ntoa(sin.sin_addr));
393 m_Daddy->LogLine(tmp); 394 m_Daddy->LogLine(tmp);
394 CRRQSocket *s = new CRRQSocket(m_Daddy,tftpRQ->rqFileName(),tftpRQ->rqType(),&sin); 395 CRRQSocket *s = new CRRQSocket(m_Daddy,tftpRQ->rqFileName(),tftpRQ->rqType(),&sin);
395 ASSERT(s); 396 ASSERT(s);
396 tftpRQ->GetOptions(&s->m_Options); 397 tftpRQ->GetOptions(&s->m_Options);
397 if(!s->Create()) 398 if(!s->Create())
398 s->Destroy(FALSE); 399 s->Destroy(FALSE);
399 } 400 }
400 break; 401 break;
401 case tftp::opWRQ: 402 case tftp::opWRQ:
402 // Write Request 403 // Write Request
403 { 404 {
404 CString tmp; 405 CString tmp;
405 tmp.Format(IDS_LOG_WRQSERVE,tftpRQ->rqFileName(),tftpRQ->rqType(),inet_ntoa(sin.sin_addr)); 406 tmp.Format(IDS_LOG_WRQSERVE,tftpRQ->rqFileName(),tftpRQ->rqType(),inet_ntoa(sin.sin_addr));
406 m_Daddy->LogLine(tmp); 407 m_Daddy->LogLine(tmp);
407 CWRQSocket *s = new CWRQSocket(m_Daddy,tftpRQ->rqFileName(),tftpRQ->rqType(),&sin); 408 CWRQSocket *s = new CWRQSocket(m_Daddy,tftpRQ->rqFileName(),tftpRQ->rqType(),&sin);
408 ASSERT(s); 409 ASSERT(s);
409 tftpRQ->GetOptions(&s->m_Options); 410 tftpRQ->GetOptions(&s->m_Options);
410 if(!s->Create(NULL,NULL)) 411 if(!s->Create(NULL,NULL))
411 s->Destroy(FALSE); 412 s->Destroy(FALSE);
412 } 413 }
413 break; 414 break;
414 default: 415 default:
415 m_Daddy->LogLine(IDS_LOG_LISTENOPCODE); 416 m_Daddy->LogLine(IDS_LOG_LISTENOPCODE);
416 delete tftpRQ; 417 delete tftpRQ;
417 return; 418 return;
418 } 419 }
419 delete tftpRQ; 420 delete tftpRQ;
420} 421}
421 422
422BOOL tftp::Receive(CAsyncSocket* socket,UINT maxLength,SOCKADDR_IN *sin) 423BOOL tftp::Receive(CAsyncSocket* socket,UINT maxLength,SOCKADDR_IN *sin)
423{ 424{
424 ASSERT(socket); 425 ASSERT(socket);
425int saddrLen = sizeof(SOCKADDR_IN); 426int saddrLen = sizeof(SOCKADDR_IN);
426 length = sin ? 427 length = sin ?
427 socket->ReceiveFrom(udpBase(),maxLength,(SOCKADDR*)sin,&saddrLen) 428 socket->ReceiveFrom(udpBase(),maxLength,(SOCKADDR*)sin,&saddrLen)
428 : 429 :
429 socket->Receive(udpBase(),maxLength) 430 socket->Receive(udpBase(),maxLength)
430 ; 431 ;
431 if(!length) 432 if(!length)
432 return FALSE; 433 return FALSE;
433 if(length==(tftpLength)SOCKET_ERROR) 434 if(length==(tftpLength)SOCKET_ERROR)
434 return FALSE; 435 return FALSE;
435 return TRUE; 436 return TRUE;
436} 437}
437 438
438UINT tftp::Opcode() 439UINT tftp::Opcode()
439{ 440{
440 return REVERSEBYTES(opcode); 441 return REVERSEBYTES(opcode);
441} 442}
442 443
443CString tftp::rqFileName() 444CString tftp::rqFileName()
444{ 445{
445 ASSERT(length); 446 ASSERT(length);
446 ASSERT(Opcode()==opRRQ || Opcode()==opWRQ); 447 ASSERT(Opcode()==opRRQ || Opcode()==opWRQ);
447CString rv; 448CString rv;
448 if(memchr(&data.m_RQ.data,0,length-sizeof(opcode))) 449 if(memchr(&data.m_RQ.data,0,length-sizeof(opcode)))
449 rv = (LPCTSTR)data.m_RQ.data; 450 rv = (LPCTSTR)data.m_RQ.data;
450 return rv; 451 return rv;
451} 452}
452 453
453CString tftp::rqType() 454CString tftp::rqType()
454{ 455{
455 ASSERT(length); 456 ASSERT(length);
456 ASSERT(Opcode()==opRRQ || Opcode()==opWRQ); 457 ASSERT(Opcode()==opRRQ || Opcode()==opWRQ);
457CString rv; 458CString rv;
458char *tmp = (char*)memchr(&data.m_RQ.data,0,length-sizeof(opcode)); 459char *tmp = (char*)memchr(&data.m_RQ.data,0,length-sizeof(opcode));
459 if(tmp++) 460 if(tmp++)
460 rv = (LPCTSTR)tmp; 461 rv = (LPCTSTR)tmp;
461 return rv; 462 return rv;
462} 463}
463 464
464UINT tftp::GetOptions(tftp::tftpOptions* ops) 465UINT tftp::GetOptions(tftp::tftpOptions* ops)
465{ 466{
466 ASSERT(length); 467 ASSERT(length);
467 ASSERT(Opcode()==opRRQ || Opcode()==opWRQ || Opcode()==opOACK); 468 ASSERT(Opcode()==opRRQ || Opcode()==opWRQ || Opcode()==opOACK);
468 ASSERT(ops); 469 ASSERT(ops);
469tftpOptions& o = *ops; 470tftpOptions& o = *ops;
470LPSTR base = (LPSTR)&data.m_RQ.data; 471LPSTR base = (LPSTR)&data.m_RQ.data;
471UINT basePtr = 0; 472UINT basePtr = 0;
472 if(Opcode()==opRRQ || Opcode()==opWRQ){ 473 if(Opcode()==opRRQ || Opcode()==opWRQ){
473 base = (LPSTR)memchr(&data.m_RQ.data,0,length-sizeof(opcode)); 474 base = (LPSTR)memchr(&data.m_RQ.data,0,length-sizeof(opcode));
474 if(!base) 475 if(!base)
475 return 0; 476 return 0;
476 base++; 477 base++;
477 basePtr = (base-(LPSTR)&data.m_RQ.data); 478 basePtr = (base-(LPSTR)&data.m_RQ.data);
478 base = (LPSTR)memchr(base,0,length-basePtr); 479 base = (LPSTR)memchr(base,0,length-basePtr);
479 if(!base) 480 if(!base)
480 return 0; 481 return 0;
481 base++; 482 base++;
482 basePtr = (base-(LPSTR)&data.m_RQ.data); 483 basePtr = (base-(LPSTR)&data.m_RQ.data);
483 } 484 }
484 ops->RemoveAll(); 485 ops->RemoveAll();
485UINT rv = 0; 486UINT rv = 0;
486 while(basePtr<(length-sizeof(opcode))){ 487 while(basePtr<(length-sizeof(opcode))){
487 CString onam = (LPSTR)&data.m_RQ.data[basePtr]; 488 CString onam = (LPSTR)&data.m_RQ.data[basePtr];
488 basePtr+=onam.GetLength()+1; 489 basePtr+=onam.GetLength()+1;
489 CString oval = (LPSTR)&data.m_RQ.data[basePtr]; 490 CString oval = (LPSTR)&data.m_RQ.data[basePtr];
490 basePtr+=oval.GetLength()+1; 491 basePtr+=oval.GetLength()+1;
491 onam.MakeLower(); 492 onam.MakeLower();
492 o[onam]=oval; 493 o[onam]=oval;
493 rv++; 494 rv++;
494 } 495 }
495 return rv; 496 return rv;
496} 497}
497 498
498tftp::tftp() 499tftp::tftp()
499{ 500{
500 length=0; 501 length=0;
501} 502}
502 503
503 504
504void CXferSocket::OnSend(int nErrorCode) 505void CXferSocket::OnSend(int nErrorCode)
505{ 506{
506 if(nErrorCode){ 507 if(nErrorCode){
507 ASSERT(m_Daddy); 508 ASSERT(m_Daddy);
508 m_Daddy->LogLine(IDS_LOG_XFERSEND); 509 m_Daddy->LogLine(IDS_LOG_XFERSEND);
509 return; 510 return;
510 } 511 }
511 if(!m_Queue.IsEmpty()){ 512 if(!m_Queue.IsEmpty()){
512 tftp *p = m_Queue.GetHead(); 513 tftp *p = m_Queue.GetHead();
513 ASSERT(p); 514 ASSERT(p);
514 m_Queue.RemoveHead(); 515 m_Queue.RemoveHead();
515 if(!p->Send(this,&m_Peer)){ 516 if(!p->Send(this,&m_Peer)){
516 ASSERT(m_Daddy); 517 ASSERT(m_Daddy);
517 m_Daddy->LogLine(IDS_LOG_XFERUDPSEND); 518 m_Daddy->LogLine(IDS_LOG_XFERUDPSEND);
518 } 519 }
519 delete p; 520 delete p;
520 } 521 }
521 DoSelect(); 522 DoSelect();
522 if(m_Queue.IsEmpty()){ 523 if(m_Queue.IsEmpty()){
523 switch(state){ 524 switch(state){
524 case stateDeny: 525 case stateDeny:
525 Destroy(FALSE); 526 Destroy(FALSE);
526 break; 527 break;
527 case stateFinish: 528 case stateFinish:
528 Destroy(TRUE); 529 Destroy(TRUE);
529 break; 530 break;
530 } 531 }
531 } 532 }
532} 533}
533 534
534BOOL tftp::Send(CAsyncSocket *socket,SOCKADDR_IN* saddr) 535BOOL tftp::Send(CAsyncSocket *socket,SOCKADDR_IN* saddr)
535{ 536{
536 ASSERT(socket); 537 ASSERT(socket);
537int rv = socket->SendTo(udpBase(),length,(SOCKADDR*)saddr,sizeof(SOCKADDR_IN)); 538int rv = socket->SendTo(udpBase(),length,(SOCKADDR*)saddr,sizeof(SOCKADDR_IN));
538 if(rv!=length) 539 if(rv!=length)
539 return FALSE; 540 return FALSE;
540 return TRUE; 541 return TRUE;
541} 542}
542 543
543void CXferSocket::DoSelect() 544void CXferSocket::DoSelect()
544{ 545{
545 if(m_Peer.sin_addr.s_addr!=INADDR_NONE) 546 if(m_Peer.sin_addr.s_addr!=INADDR_NONE)
546 AsyncSelect(FD_CLOSE|FD_READ|(m_Queue.IsEmpty()?0:FD_WRITE)); 547 AsyncSelect(FD_CLOSE|FD_READ|(m_Queue.IsEmpty()?0:FD_WRITE));
547} 548}
548 549
549void CXferSocket::OnReceive(int nErrorCode) 550void CXferSocket::OnReceive(int nErrorCode)
550{ 551{
551 if(nErrorCode){ 552 if(nErrorCode){
552 ASSERT(m_Daddy); 553 ASSERT(m_Daddy);
553 m_Daddy->LogLine(IDS_LOG_XFERRECEIVE); 554 m_Daddy->LogLine(IDS_LOG_XFERRECEIVE);
554 return; 555 return;
555 } 556 }
556 ASSERT(m_Daddy); 557 ASSERT(m_Daddy);
557DWORD fionread = 0; 558DWORD fionread = 0;
558 VERIFY(IOCtl(FIONREAD,&fionread)); 559 VERIFY(IOCtl(FIONREAD,&fionread));
559tftp *p = tftp::Allocate(fionread); 560tftp *p = tftp::Allocate(fionread);
560 ASSERT(p); 561 ASSERT(p);
561SOCKADDR_IN sin; 562SOCKADDR_IN sin;
562 if(!p->Receive(this,fionread,&sin)){ 563 if(!p->Receive(this,fionread,&sin)){
563 m_Daddy->LogLine(IDS_LOG_XFERUDPRECEIVE); 564 m_Daddy->LogLine(IDS_LOG_XFERUDPRECEIVE);
564 delete p; 565 delete p;
565 }else 566 }else
566 if(m_Peer.sin_addr.s_addr==INADDR_NONE){ 567 if(m_Peer.sin_addr.s_addr==INADDR_NONE){
567 m_Peer.sin_addr=sin.sin_addr; 568 m_Peer.sin_addr=sin.sin_addr;
568 m_Peer.sin_port=sin.sin_port; 569 m_Peer.sin_port=sin.sin_port;
569 } 570 }
570BOOL alive = TRUE; 571BOOL alive = TRUE;
571 if(state==stateInit){ 572 if(state==stateInit){
572 state=stateXfer; 573 state=stateXfer;
573 m_Peer.sin_port=sin.sin_port; 574 m_Peer.sin_port=sin.sin_port;
574 UpdateList(); 575 UpdateList();
575 } 576 }
576 if(sin.sin_addr.s_addr!=m_Peer.sin_addr.s_addr || sin.sin_port!=m_Peer.sin_port){ 577 if(sin.sin_addr.s_addr!=m_Peer.sin_addr.s_addr || sin.sin_port!=m_Peer.sin_port){
577 m_Daddy->LogLine(IDS_LOG_XFERSOURCETID); 578 m_Daddy->LogLine(IDS_LOG_XFERSOURCETID);
578 // *** Bounce it! 579 // *** Bounce it!
579 }else{ 580 }else{
580 alive = OnTFTP(p); 581 alive = OnTFTP(p);
581 } 582 }
582 delete p; 583 delete p;
583 if(alive){ 584 if(alive){
584 DoSelect(); 585 DoSelect();
585 ResetTimeout(); 586 ResetTimeout();
586 } 587 }
587} 588}
588 589
589void CXferSocket::SetPeer(SOCKADDR_IN *sin) 590void CXferSocket::SetPeer(SOCKADDR_IN *sin)
590{ 591{
591 ASSERT(sin); 592 ASSERT(sin);
592 memmove(&m_Peer,sin,sizeof(m_Peer)); 593 memmove(&m_Peer,sin,sizeof(m_Peer));
593} 594}
594 595
595void CXferSocket::UpdateList() 596void CXferSocket::UpdateList()
596{ 597{
597 ASSERT(m_Daddy); 598 ASSERT(m_Daddy);
598LV_FINDINFO lvf; 599LV_FINDINFO lvf;
599 memset(&lvf,0,sizeof(lvf)); 600 memset(&lvf,0,sizeof(lvf));
600 lvf.flags=LVFI_PARAM; 601 lvf.flags=LVFI_PARAM;
601 lvf.lParam=(LPARAM)this; 602 lvf.lParam=(LPARAM)this;
602int i = m_Daddy->m_List.FindItem(&lvf); 603int i = m_Daddy->m_List.FindItem(&lvf);
603 if(i<0){ 604 if(i<0){
604 ASSERT(IsKindOf(RUNTIME_CLASS(CRRQSocket)) || IsKindOf(RUNTIME_CLASS(CWRQSocket))); 605 ASSERT(IsKindOf(RUNTIME_CLASS(CRRQSocket)) || IsKindOf(RUNTIME_CLASS(CWRQSocket)));
605 i=m_Daddy->m_List.InsertItem(0,m_FileName,IsKindOf(RUNTIME_CLASS(CRRQSocket))?m_Daddy->m_iRRQ:m_Daddy->m_iWRQ); 606 i=m_Daddy->m_List.InsertItem(0,m_FileName,IsKindOf(RUNTIME_CLASS(CRRQSocket))?m_Daddy->m_iRRQ:m_Daddy->m_iWRQ);
606 ASSERT(!(i<0)); 607 ASSERT(!(i<0));
607 m_Daddy->m_List.SetItemData(i,(DWORD)this); 608 m_Daddy->m_List.SetItemData(i,(DWORD)this);
608 } 609 }
609 m_Daddy->m_List.SetItemText(i,CPumpKINDlg::subitemFile,m_FileName); 610 m_Daddy->m_List.SetItemText(i,CPumpKINDlg::subitemFile,m_FileName);
610 m_Daddy->m_List.SetItemText(i,CPumpKINDlg::subitemType,m_Type); 611 m_Daddy->m_List.SetItemText(i,CPumpKINDlg::subitemType,m_Type);
611 m_Daddy->m_List.SetItemText(i,CPumpKINDlg::subitemPeer,inet_ntoa(m_Peer.sin_addr)); 612 m_Daddy->m_List.SetItemText(i,CPumpKINDlg::subitemPeer,inet_ntoa(m_Peer.sin_addr));
612CString tmp; 613CString tmp;
613 tmp.Format(IDS_FMT_BYTES,GetACK()); 614 tmp.Format(IDS_FMT_BYTES,GetACK());
614 m_Daddy->m_List.SetItemText(i,CPumpKINDlg::subitemBytes,tmp); 615 m_Daddy->m_List.SetItemText(i,CPumpKINDlg::subitemBytes,tmp);
615 if(m_xferSize>=0){ 616 if(m_xferSize>=0){
616 tmp.Format(IDS_FMT_BYTES,m_xferSize); 617 tmp.Format(IDS_FMT_BYTES,m_xferSize);
617 m_Daddy->m_List.SetItemText(i,CPumpKINDlg::subitemTSize,tmp); 618 m_Daddy->m_List.SetItemText(i,CPumpKINDlg::subitemTSize,tmp);
618 } 619 }
619} 620}
620 621
621CXferSocket::CXferSocket() 622CXferSocket::CXferSocket()
622 : m_wndResolver(NULL), m_Retry(NULL), m_bRetry(FALSE), 623 : m_wndResolver(NULL), m_Retry(NULL), m_bRetry(FALSE),
623 m_blkSize(512), m_timeOut(30), m_xferSize(-1), 624 m_blkSize(512), m_timeOut(30), m_xferSize(-1),
624 m__blkSize(512), m__timeOut(30) 625 m__blkSize(512), m__timeOut(30)
625{ 626{
626 m_Daddy=NULL; 627 m_Daddy=NULL;
627 m_Peer.sin_addr.s_addr=INADDR_NONE; 628 m_Peer.sin_addr.s_addr=INADDR_NONE;
628 m_Peer.sin_family=AF_INET; 629 m_Peer.sin_family=AF_INET;
629 state=stateNone; 630 state=stateNone;
630} 631}
631 632
632ULONG CXferSocket::GetACK() 633ULONG CXferSocket::GetACK()
633{ 634{
634 return 0; 635 return 0;
635} 636}
636 637
637CXferSocket::CXferSocket(CPumpKINDlg *daddy,LPCTSTR fileName,LPCTSTR type,SOCKADDR_IN* sin) 638CXferSocket::CXferSocket(CPumpKINDlg *daddy,LPCTSTR fileName,LPCTSTR type,SOCKADDR_IN* sin)
638 : m_wndResolver(NULL), m_Retry(NULL), m_bRetry(FALSE), 639 : m_wndResolver(NULL), m_Retry(NULL), m_bRetry(FALSE),
639 m_blkSize(512), m_timeOut(30), m_xferSize(-1), 640 m_blkSize(512), m_timeOut(30), m_xferSize(-1),
640 m__blkSize(512), m__timeOut(30) 641 m__blkSize(512), m__timeOut(30)
641{ 642{
642 m_Peer.sin_family=AF_INET; 643 m_Peer.sin_family=AF_INET;
643 state=stateNone; 644 state=stateNone;
644 ASSERT(daddy); 645 ASSERT(daddy);
645 m_Daddy=daddy; 646 m_Daddy=daddy;
646 m_timeOut=m__timeOut=m_Daddy->m_TFTPTimeOut.GetTotalSeconds(); 647 m_timeOut=m__timeOut=m_Daddy->m_TFTPTimeOut.GetTotalSeconds();
647 if(sin){ 648 if(sin){
648 m_Peer.sin_addr.s_addr=sin->sin_addr.s_addr; 649 m_Peer.sin_addr.s_addr=sin->sin_addr.s_addr;
649 m_Peer.sin_port=sin->sin_port; 650 m_Peer.sin_port=sin->sin_port;
650 }else 651 }else
651 m_Peer.sin_addr.s_addr=INADDR_NONE; 652 m_Peer.sin_addr.s_addr=INADDR_NONE;
652 m_FileName=fileName; 653 m_FileName=fileName;
653 m_Type=type; 654 m_Type=type;
654} 655}
655 656
656BOOL CRRQSocket::Create(LPCTSTR localFile,LPCTSTR hostName) 657BOOL CRRQSocket::Create(LPCTSTR localFile,LPCTSTR hostName)
657{ 658{
658 if(!CAsyncSocket::Create(0,SOCK_DGRAM)) 659 if(!CAsyncSocket::Create(0,SOCK_DGRAM))
659 return FALSE; 660 return FALSE;
660 ASSERT(m_Daddy); 661 ASSERT(m_Daddy);
661 ASSERT(m_Peer.sin_addr.s_addr!=INADDR_NONE || hostName); 662 ASSERT(m_Peer.sin_addr.s_addr!=INADDR_NONE || hostName);
662 m_Daddy->m_Xfers[m_hSocket]=this; 663 m_Daddy->m_Xfers[m_hSocket]=this;
663CString lFile = localFile?localFile:m_FileName; 664CString lFile = localFile?localFile:m_FileName;
664 TurnSlashes(lFile,TRUE); 665 TurnSlashes(lFile,TRUE);
665 UpdateList(); 666 UpdateList();
666 if(!localFile){// Check only if server 667 if(!localFile){// Check only if server
667 if(CheckBadRelativeness(m_FileName)){ 668 if(CheckBadRelativeness(m_FileName)){
668 Deny(tftp::errAccessViolation,IDS_TFTP_ERROR_ACCESS); 669 Deny(tftp::errAccessViolation,IDS_TFTP_ERROR_ACCESS);
669 return TRUE; 670 return TRUE;
670 } 671 }
671 switch(m_Daddy->m_RRQMode){ 672 switch(m_Daddy->m_RRQMode){
672 case CPumpKINDlg::rrqGiveAll: 673 case CPumpKINDlg::rrqGiveAll:
673 break; 674 break;
674 case CPumpKINDlg::rrqAlwaysConfirm: 675 case CPumpKINDlg::rrqAlwaysConfirm:
675 if(ConfirmRequest()) 676 if(ConfirmRequest())
676 break; 677 break;
677 case CPumpKINDlg::rrqDenyAll: 678 case CPumpKINDlg::rrqDenyAll:
678 Deny(tftp::errAccessViolation,IDS_TFTP_ERROR_ACCESS); 679 Deny(tftp::errAccessViolation,IDS_TFTP_ERROR_ACCESS);
679 return TRUE; 680 return TRUE;
680 } 681 }
681 } 682 }
682CString fn = localFile?ApplyRootGently(lFile):ApplyRoot(lFile); 683CString fn = localFile?ApplyRootGently(lFile):ApplyRoot(lFile);
683CFileException e; 684CFileException e;
684 if(!m_File.Open(fn,CFile::modeRead|CFile::shareDenyWrite,&e)){ 685 if(!m_File.Open(fn,CFile::modeRead|CFile::shareDenyWrite,&e)){
685 if(localFile){ 686 if(localFile){
686 CString tmp; 687 CString tmp;
687 tmp.Format(IDS_LOG_FAILEDLOCALFILE,fn); 688 tmp.Format(IDS_LOG_FAILEDLOCALFILE,fn);
688 m_Daddy->LogLine(tmp); 689 m_Daddy->LogLine(tmp);
689 return FALSE; 690 return FALSE;
690 } 691 }
691 Deny(&e); 692 Deny(&e);
692 return TRUE; 693 return TRUE;
693 } 694 }
694 m_xferSize=m_File.GetLength();// *** HANDLE EXCEPTION 695 m_xferSize=m_File.GetLength();// *** HANDLE EXCEPTION
695 if(hostName){ 696 if(hostName){
696 m_HostName=hostName; 697 m_HostName=hostName;
697 698
698 CString tmp; 699 CString tmp;
699 tmp.Format(IDS_LOG_SENDING,m_FileName,m_HostName); 700 tmp.Format(IDS_LOG_SENDING,m_FileName,m_HostName);
700 m_Daddy->LogLine(tmp); 701 m_Daddy->LogLine(tmp);
701 702
702 CString inAddr = hostName; 703 CString inAddr = hostName;
703 int at = inAddr.Find('@'); 704 int at = inAddr.Find('@');
704 if(at>=0) 705 if(at>=0)
705 inAddr=inAddr.Mid(at+1); 706 inAddr=inAddr.Mid(at+1);
706 if((m_Peer.sin_addr.s_addr=inet_addr((LPCTSTR)inAddr))==INADDR_NONE){ 707 if((m_Peer.sin_addr.s_addr=inet_addr((LPCTSTR)inAddr))==INADDR_NONE){
707 ASSERT(!m_wndResolver); 708 ASSERT(!m_wndResolver);
708 m_wndResolver = new CResolver(this); 709 m_wndResolver = new CResolver(this);
709 ASSERT(m_wndResolver); 710 ASSERT(m_wndResolver);
710 return m_wndResolver->Resolve(); 711 return m_wndResolver->Resolve();
711 } 712 }
712 else 713 else
713 OnHostKnown(); 714 OnHostKnown();
714 }else{ 715 }else{
715 tftp::tftpOptions o; 716 tftp::tftpOptions o;
716 CString v; 717 CString v;
717 if(m_Options.Lookup(tftpoBSize,v)){ 718 if(m_Options.Lookup(tftpoBSize,v)){
718 m__blkSize=atoi(v); 719 m__blkSize=atoi(v);
719 if(m__blkSize){ 720 if(m__blkSize){
720 m_blkSize=m__blkSize; 721 m_blkSize=m__blkSize;
721 v.Format("%u",m_blkSize); 722 v.Format("%u",m_blkSize);
722 o[tftpoBSize]=v; 723 o[tftpoBSize]=v;
723 } 724 }
724 } 725 }
725 if(m_Options.Lookup(tftpoTSize,v)){ 726 if(m_Options.Lookup(tftpoTSize,v)){
726 v.Format("%lu",m_xferSize); 727 v.Format("%lu",m_xferSize);
727 o[tftpoTSize]=v; 728 o[tftpoTSize]=v;
728 } 729 }
729 if(m_Options.Lookup(tftpoTOut,v)){ 730 if(m_Options.Lookup(tftpoTOut,v)){
730 m__timeOut=atoi(v); 731 m__timeOut=atoi(v);
731 if(m__timeOut){ 732 if(m__timeOut){
732 m_timeOut=m__timeOut; 733 m_timeOut=m__timeOut;
733 v.Format("%u",m_timeOut); 734 v.Format("%u",m_timeOut);
734 o[tftpoTOut]=v; 735 o[tftpoTOut]=v;
735 } 736 }
736 } 737 }
737 state = stateXfer; 738 state = stateXfer;
738 m_ACK=0; 739 m_ACK=0;
739 if(o.GetCount()){ 740 if(o.GetCount()){
740 tftp *p = tftp::Allocate(tftp::tftpOACK::tftpSize(&o)); 741 tftp *p = tftp::Allocate(tftp::tftpOACK::tftpSize(&o));
741 ASSERT(p); 742 ASSERT(p);
742 p->SetOpcode(tftp::opOACK); 743 p->SetOpcode(tftp::opOACK);
743 p->data.m_OACK.Set(&o); 744 p->data.m_OACK.Set(&o);
744 PostTFTP(p,TRUE); 745 PostTFTP(p,TRUE);
745 }else 746 }else
746 DoXfer(); 747 DoXfer();
747 } 748 }
748 return TRUE; 749 return TRUE;
749} 750}
750 751
751CRRQSocket::CRRQSocket(CPumpKINDlg *daddy,LPCTSTR fileName,LPCTSTR type,SOCKADDR_IN *sin) 752CRRQSocket::CRRQSocket(CPumpKINDlg *daddy,LPCTSTR fileName,LPCTSTR type,SOCKADDR_IN *sin)
752 : CXferSocket(daddy,fileName,type,sin) 753 : CXferSocket(daddy,fileName,type,sin)
753{ 754{
754 m_ACK=0; 755 m_ACK=0;
755 m_LastSlack=0; 756 m_LastSlack=0;
756} 757}
757 758
758UINT tftp::tftpERROR::tftpSize(LPCTSTR msg) 759UINT tftp::tftpERROR::tftpSize(LPCTSTR msg)
759{ 760{
760 return tftpHdrSize-tftpSlackSize+sizeof(tftp::tftpERROR::tftpErrorCode)+strlen(msg)+1; 761 return tftpHdrSize-tftpSlackSize+sizeof(tftp::tftpERROR::tftpErrorCode)+strlen(msg)+1;
761} 762}
762 763
763tftp* tftp::Allocate(UINT tftpSize) 764tftp* tftp::Allocate(UINT tftpSize)
764{ 765{
765 ASSERT(tftpSize); 766 ASSERT(tftpSize);
766tftp* rv = (tftp*) new BYTE[tftpSlackSize+tftpSize]; 767tftp* rv = (tftp*) new BYTE[tftpSlackSize+tftpSize];
767 ASSERT(rv); 768 ASSERT(rv);
768 rv->length=tftpSize; 769 rv->length=tftpSize;
769 return rv; 770 return rv;
770} 771}
771 772
772void tftp::errSet(UINT code,LPCTSTR msg) 773void tftp::errSet(UINT code,LPCTSTR msg)
773{ 774{
774 ASSERT(this); 775 ASSERT(this);
775 ASSERT(length>=data.m_ERROR.tftpSize(msg)); 776 ASSERT(length>=data.m_ERROR.tftpSize(msg));
776 strcpy((char*)data.m_ERROR.data,msg); 777 strcpy((char*)data.m_ERROR.data,msg);
777 data.m_ERROR.SetCode(code); 778 data.m_ERROR.SetCode(code);
778} 779}
779 780
780void CXferSocket::PostTFTP(tftp* p,BOOL retryable) 781void CXferSocket::PostTFTP(tftp* p,BOOL retryable)
781{ 782{
782 ASSERT(p); 783 ASSERT(p);
783 m_Queue.AddTail(p); 784 m_Queue.AddTail(p);
784 DoSelect(); 785 DoSelect();
785 if(!m_bRetry){ 786 if(!m_bRetry){
786 if(retryable) 787 if(retryable)
787 SetTry(p); 788 SetTry(p);
788 else 789 else
789 SetTry(); 790 SetTry();
790 } 791 }
791 ResetTimeout(); 792 ResetTimeout();
792} 793}
793 794
794void CXferSocket::Deny(UINT errCode,UINT errID) 795void CXferSocket::Deny(UINT errCode,UINT errID)
795{ 796{
796 PostError(errCode,errID); 797 PostError(errCode,errID);
797 state=stateDeny; 798 state=stateDeny;
798} 799}
799 800
800void CRRQSocket::DoXfer() 801void CRRQSocket::DoXfer()
801{ 802{
802tftp *p = tftp::Allocate(tftp::tftpDATA::tftpSize(m_blkSize)); 803tftp *p = tftp::Allocate(tftp::tftpDATA::tftpSize(m_blkSize));
803 ASSERT(p); 804 ASSERT(p);
804 p->SetOpcode(tftp::opDATA); 805 p->SetOpcode(tftp::opDATA);
805 TRY{ 806 TRY{
806 m_File.Seek(m_ACK*m_blkSize,CFile::begin); 807 m_File.Seek(m_ACK*m_blkSize,CFile::begin);
807 int bytes = m_File.Read(p->data.m_DATA.data,m_blkSize); 808 int bytes = m_File.Read(p->data.m_DATA.data,m_blkSize);
808 p->data.m_DATA.SetBlock(m_ACK+1); 809 p->data.m_DATA.SetBlock(m_ACK+1);
809 p->length=p->length-m_blkSize+bytes; 810 p->length=p->length-m_blkSize+bytes;
810 m_LastSlack = m_blkSize-bytes; 811 m_LastSlack = m_blkSize-bytes;
811 PostTFTP(p); 812 PostTFTP(p);
812 if(bytes<m_blkSize){ 813 if(bytes<m_blkSize){
813 state=stateFinish; 814 state=stateFinish;
814 ASSERT(m_Daddy); 815 ASSERT(m_Daddy);
815 CString tmp; 816 CString tmp;
816 tmp.Format(IDS_LOG_XFERRRQFINISHED,(LPCTSTR)m_FileName); 817 tmp.Format(IDS_LOG_XFERRRQFINISHED,(LPCTSTR)m_FileName);
817 m_Daddy->LogLine(tmp); 818 m_Daddy->LogLine(tmp);
818 } 819 }
819 }CATCH(CFileException,e){ 820 }CATCH(CFileException,e){
820 Deny(e); 821 Deny(e);
821 }END_CATCH 822 }END_CATCH
822} 823}
823 824
824UINT tftp::tftpDATA::tftpSize(UINT blkSize) 825UINT tftp::tftpDATA::tftpSize(UINT blkSize)
825{ 826{
826 return tftpHdrSize-tftpSlackSize+sizeof(tftp::tftpDATA) 827 return tftpHdrSize-tftpSlackSize+sizeof(tftp::tftpDATA)
827 -sizeof(BYTE)+blkSize; 828 -sizeof(BYTE)+blkSize;
828} 829}
829 830
830void CXferSocket::Deny(CFileException* e) 831void CXferSocket::Deny(CFileException* e)
831{ 832{
832 PostError(e); 833 PostError(e);
833 state=stateDeny; 834 state=stateDeny;
834} 835}
835 836
836void CXferSocket::PostError(UINT errCode,UINT errID) 837void CXferSocket::PostError(UINT errCode,UINT errID)
837{ 838{
838CString msg; 839CString msg;
839 msg.LoadString(errID); 840 msg.LoadString(errID);
840 ASSERT(m_Daddy); 841 ASSERT(m_Daddy);
841 /*// *** 842 /*// ***
diff --git a/pumpkin.rc b/pumpkin.rc
index 7380e12..7f3bbde 100644
--- a/pumpkin.rc
+++ b/pumpkin.rc
@@ -1,605 +1,607 @@
1//Microsoft Developer Studio generated resource script. 1//Microsoft Developer Studio generated resource script.
2// 2//
3#include "resource.h" 3#include "resource.h"
4 4
5#define APSTUDIO_READONLY_SYMBOLS 5#define APSTUDIO_READONLY_SYMBOLS
6///////////////////////////////////////////////////////////////////////////// 6/////////////////////////////////////////////////////////////////////////////
7// 7//
8// Generated from the TEXTINCLUDE 2 resource. 8// Generated from the TEXTINCLUDE 2 resource.
9// 9//
10#include "afxres.h" 10#include "afxres.h"
11 11
12///////////////////////////////////////////////////////////////////////////// 12/////////////////////////////////////////////////////////////////////////////
13#undef APSTUDIO_READONLY_SYMBOLS 13#undef APSTUDIO_READONLY_SYMBOLS
14 14
15///////////////////////////////////////////////////////////////////////////// 15/////////////////////////////////////////////////////////////////////////////
16// English (U.S.) resources 16// English (U.S.) resources
17 17
18#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) 18#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
19#ifdef _WIN32 19#ifdef _WIN32
20LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US 20LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
21#pragma code_page(1252) 21#pragma code_page(1252)
22#endif //_WIN32 22#endif //_WIN32
23 23
24#ifdef APSTUDIO_INVOKED 24#ifdef APSTUDIO_INVOKED
25///////////////////////////////////////////////////////////////////////////// 25/////////////////////////////////////////////////////////////////////////////
26// 26//
27// TEXTINCLUDE 27// TEXTINCLUDE
28// 28//
29 29
301 TEXTINCLUDE DISCARDABLE 301 TEXTINCLUDE DISCARDABLE
31BEGIN 31BEGIN
32 "resource.h\0" 32 "resource.h\0"
33END 33END
34 34
352 TEXTINCLUDE DISCARDABLE 352 TEXTINCLUDE DISCARDABLE
36BEGIN 36BEGIN
37 "#include ""afxres.h""\r\n" 37 "#include ""afxres.h""\r\n"
38 "\0" 38 "\0"
39END 39END
40 40
413 TEXTINCLUDE DISCARDABLE 413 TEXTINCLUDE DISCARDABLE
42BEGIN 42BEGIN
43 "#define _AFX_NO_SPLITTER_RESOURCES\r\n" 43 "#define _AFX_NO_SPLITTER_RESOURCES\r\n"
44 "#define _AFX_NO_OLE_RESOURCES\r\n" 44 "#define _AFX_NO_OLE_RESOURCES\r\n"
45 "#define _AFX_NO_TRACKER_RESOURCES\r\n" 45 "#define _AFX_NO_TRACKER_RESOURCES\r\n"
46 "#define _AFX_NO_PROPERTY_RESOURCES\r\n" 46 "#define _AFX_NO_PROPERTY_RESOURCES\r\n"
47 "\r\n" 47 "\r\n"
48 "#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\r\n" 48 "#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\r\n"
49 "#ifdef _WIN32\r\n" 49 "#ifdef _WIN32\r\n"
50 "LANGUAGE 9, 1\r\n" 50 "LANGUAGE 9, 1\r\n"
51 "#pragma code_page(1252)\r\n" 51 "#pragma code_page(1252)\r\n"
52 "#endif\r\n" 52 "#endif\r\n"
53 "#include ""res\\PumpKIN.rc2"" // non-Microsoft Visual C++ edited resources\r\n" 53 "#include ""res\\PumpKIN.rc2"" // non-Microsoft Visual C++ edited resources\r\n"
54 "#include ""afxres.rc"" // Standard components\r\n" 54 "#include ""afxres.rc"" // Standard components\r\n"
55 "#endif\0" 55 "#endif\0"
56END 56END
57 57
58#endif // APSTUDIO_INVOKED 58#endif // APSTUDIO_INVOKED
59 59
60 60
61///////////////////////////////////////////////////////////////////////////// 61/////////////////////////////////////////////////////////////////////////////
62// 62//
63// Icon 63// Icon
64// 64//
65 65
66// Icon with lowest ID value placed first to ensure application icon 66// Icon with lowest ID value placed first to ensure application icon
67// remains consistent on all systems. 67// remains consistent on all systems.
68IDI_RRQ ICON DISCARDABLE "res\\wrq.ico" 68IDI_RRQ ICON DISCARDABLE "res\\wrq.ico"
69IDI_WRQ ICON DISCARDABLE "res\\rrq.ico" 69IDI_WRQ ICON DISCARDABLE "res\\rrq.ico"
70IDI_BROWSE ICON DISCARDABLE "shared-data/browse-icon.ico" 70IDI_BROWSE ICON DISCARDABLE "shared-data/browse-icon.ico"
71IDR_MAINFRAME ICON DISCARDABLE "res\\pumpkin.ico" 71IDR_MAINFRAME ICON DISCARDABLE "res\\pumpkin.ico"
72IDI_PLAY ICON DISCARDABLE "shared-data/play-icon.ico" 72IDI_PLAY ICON DISCARDABLE "shared-data/play-icon.ico"
73 73
74///////////////////////////////////////////////////////////////////////////// 74/////////////////////////////////////////////////////////////////////////////
75// 75//
76// Dialog 76// Dialog
77// 77//
78 78
79IDD_ABOUTBOX DIALOG DISCARDABLE 0, 0, 217, 74 79IDD_ABOUTBOX DIALOG DISCARDABLE 0, 0, 217, 74
80STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU 80STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
81CAPTION "About PumpKIN" 81CAPTION "About PumpKIN"
82FONT 8, "MS Sans Serif" 82FONT 8, "MS Sans Serif"
83BEGIN 83BEGIN
84 ICON IDR_MAINFRAME,IDC_STATIC,7,17,18,20 84 ICON IDR_MAINFRAME,IDC_STATIC,7,17,18,20
85 LTEXT "PumpKIN, Version 2.5.1-trunk",IDC_STATIC,40,15,119,8,SS_NOPREFIX 85 LTEXT "PumpKIN, Version 2.5.1-trunk",IDC_STATIC,40,15,119,8,
86 LTEXT "Copyright © 1997-2004 Klever Group",IDC_STATIC,40,30,170, 86 SS_NOPREFIX
87 8 87 LTEXT "Copyright © 1997-2004 Klever Group",IDC_STATIC,40,30,
88 170,8
88 DEFPUSHBUTTON "OK",IDOK,178,7,32,14,WS_GROUP 89 DEFPUSHBUTTON "OK",IDOK,178,7,32,14,WS_GROUP
89 PUSHBUTTON "http://www.klever.net/",IDC_KLEVERNET,124,53,86,14 90 PUSHBUTTON "http://www.klever.net/",IDC_KLEVERNET,124,53,86,14
90END 91END
91 92
92IDD_PUMPKIN_DIALOG DIALOGEX 0, 0, 362, 191 93IDD_PUMPKIN_DIALOG DIALOGEX 0, 0, 362, 191
93STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | 94STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION |
94 WS_SYSMENU 95 WS_SYSMENU
95EXSTYLE WS_EX_ACCEPTFILES | WS_EX_APPWINDOW 96EXSTYLE WS_EX_ACCEPTFILES | WS_EX_APPWINDOW
96CAPTION " PumpKIN" 97CAPTION " PumpKIN"
97FONT 8, "MS Sans Serif", 0, 0, 0x1 98FONT 8, "MS Sans Serif", 0, 0, 0x1
98BEGIN 99BEGIN
99 CONTROL "List1",IDC_CONNECTIONS,"SysListView32",LVS_REPORT | 100 CONTROL "List1",IDC_CONNECTIONS,"SysListView32",LVS_REPORT |
100 LVS_AUTOARRANGE | WS_BORDER | WS_TABSTOP,7,7,295,108, 101 LVS_AUTOARRANGE | WS_BORDER | WS_TABSTOP,7,7,295,108,
101 WS_EX_DLGMODALFRAME 102 WS_EX_DLGMODALFRAME
102 PUSHBUTTON "&Get File",IDC_GET,305,7,50,17,BS_NOTIFY, 103 PUSHBUTTON "&Get File",IDC_GET,305,7,50,17,BS_NOTIFY,
103 WS_EX_CLIENTEDGE 104 WS_EX_CLIENTEDGE
104 PUSHBUTTON "&Put File",IDC_PUT,305,25,50,17,BS_NOTIFY, 105 PUSHBUTTON "&Put File",IDC_PUT,305,25,50,17,BS_NOTIFY,
105 WS_EX_CLIENTEDGE 106 WS_EX_CLIENTEDGE
106 PUSHBUTTON "&Abort xfer",IDC_ABORT,305,43,50,17,BS_NOTIFY, 107 PUSHBUTTON "&Abort xfer",IDC_ABORT,305,43,50,17,BS_NOTIFY,
107 WS_EX_CLIENTEDGE 108 WS_EX_CLIENTEDGE
108 PUSHBUTTON "&Options",IDC_OPTIONS,305,61,50,17,BS_NOTIFY, 109 PUSHBUTTON "&Options",IDC_OPTIONS,305,61,50,17,BS_NOTIFY,
109 WS_EX_CLIENTEDGE 110 WS_EX_CLIENTEDGE
110 PUSHBUTTON "E&xit",IDC_EXIT,305,79,50,17,BS_NOTIFY,WS_EX_CLIENTEDGE 111 PUSHBUTTON "E&xit",IDC_EXIT,305,79,50,17,BS_NOTIFY,WS_EX_CLIENTEDGE
111 PUSHBUTTON "&Help",ID_HELP,305,97,50,17,BS_NOTIFY,WS_EX_CLIENTEDGE 112 PUSHBUTTON "&Help",ID_HELP,305,97,50,17,BS_NOTIFY,WS_EX_CLIENTEDGE
112 LISTBOX IDC_LOG,7,115,348,69,LBS_USETABSTOPS | LBS_NOSEL | 113 LISTBOX IDC_LOG,7,115,348,69,LBS_USETABSTOPS | LBS_NOSEL |
113 WS_VSCROLL | WS_HSCROLL,WS_EX_DLGMODALFRAME 114 WS_VSCROLL | WS_HSCROLL,WS_EX_DLGMODALFRAME
114 PUSHBUTTON "..",IDCANCEL,0,183,6,7,NOT WS_VISIBLE | NOT WS_TABSTOP 115 PUSHBUTTON "..",IDCANCEL,0,183,6,7,NOT WS_VISIBLE | NOT WS_TABSTOP
115END 116END
116 117
117IDD_PROPS_SERVER DIALOG DISCARDABLE 0, 0, 210, 154 118IDD_PROPS_SERVER DIALOG DISCARDABLE 0, 0, 210, 154
118STYLE WS_CHILD | WS_DISABLED | WS_CAPTION 119STYLE WS_CHILD | WS_DISABLED | WS_CAPTION
119CAPTION "Server" 120CAPTION "Server"
120FONT 8, "MS Sans Serif" 121FONT 8, "MS Sans Serif"
121BEGIN 122BEGIN
122 GROUPBOX "TFTP filesystem &root (download path)",IDC_STATIC,7,7, 123 GROUPBOX "TFTP filesystem &root (download path)",IDC_STATIC,7,7,
123 196,38 124 196,38
124 EDITTEXT IDC_TFTPROOT,13,16,170,13,ES_AUTOHSCROLL 125 EDITTEXT IDC_TFTPROOT,13,16,170,13,ES_AUTOHSCROLL
125 PUSHBUTTON "&B",IDC_BROWSE,186,16,13,13,BS_ICON 126 PUSHBUTTON "&B",IDC_BROWSE,186,16,13,13,BS_ICON
126 CONTROL "Allow access to &subdirectories",IDC_TFTPSUBDIRS, 127 CONTROL "Allow access to &subdirectories",IDC_TFTPSUBDIRS,
127 "Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,31,111,10 128 "Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,31,111,10
128 GROUPBOX "Read Request Behavior",IDC_STATIC,7,48,153,42 129 GROUPBOX "Read Request Behavior",IDC_STATIC,7,48,153,42
129 CONTROL "Give &all files",IDC_RRQ_GIVEALL,"Button", 130 CONTROL "Give &all files",IDC_RRQ_GIVEALL,"Button",
130 BS_AUTORADIOBUTTON | BS_NOTIFY | WS_GROUP,13,57,53,10 131 BS_AUTORADIOBUTTON | BS_NOTIFY | WS_GROUP,13,57,53,10
131 CONTROL "&Prompt before giving file",IDC_RRQ_ALWAYSCONFIRM, 132 CONTROL "&Prompt before giving file",IDC_RRQ_ALWAYSCONFIRM,
132 "Button",BS_AUTORADIOBUTTON | BS_NOTIFY,23,67,91,10 133 "Button",BS_AUTORADIOBUTTON | BS_NOTIFY,23,67,91,10
133 CONTROL "&Deny all requests",IDC_RRQ_DENYALL,"Button", 134 CONTROL "&Deny all requests",IDC_RRQ_DENYALL,"Button",
134 BS_AUTORADIOBUTTON | BS_NOTIFY,33,77,70,10 135 BS_AUTORADIOBUTTON | BS_NOTIFY,33,77,70,10
135 GROUPBOX "Write Request Behavior",IDC_STATIC,7,93,172,54,WS_GROUP 136 GROUPBOX "Write Request Behavior",IDC_STATIC,7,93,172,54,WS_GROUP
136 CONTROL "Take a&ll files",IDC_WRQ_TAKEALL,"Button", 137 CONTROL "Take a&ll files",IDC_WRQ_TAKEALL,"Button",
137 BS_AUTORADIOBUTTON | WS_GROUP,13,103,55,10 138 BS_AUTORADIOBUTTON | WS_GROUP,13,103,55,10
138 CONTROL "Prompt if file &exists",IDC_WRQ_PROMPTEXISTING,"Button", 139 CONTROL "Prompt if file &exists",IDC_WRQ_PROMPTEXISTING,"Button",
139 BS_AUTORADIOBUTTON,23,113,73,10 140 BS_AUTORADIOBUTTON,23,113,73,10
140 CONTROL "Always pro&mpt before accepting file", 141 CONTROL "Always pro&mpt before accepting file",
141 IDC_WRQ_ALWAYSCONFIRM,"Button",BS_AUTORADIOBUTTON,33,123, 142 IDC_WRQ_ALWAYSCONFIRM,"Button",BS_AUTORADIOBUTTON,33,123,
142 139,10 143 139,10
143 CONTROL "D&eny all requests",IDC_WRQ_DENYALL,"Button", 144 CONTROL "D&eny all requests",IDC_WRQ_DENYALL,"Button",
144 BS_AUTORADIOBUTTON,43,133,70,10 145 BS_AUTORADIOBUTTON,43,133,70,10
145 CTEXT "Confirmation &timeout",IDC_STATIC,163,52,40,19, 146 CTEXT "Confirmation &timeout",IDC_STATIC,163,52,40,19,
146 SS_NOTIFY 147 SS_NOTIFY
147 CONTROL "Slider1",IDC_PROMPTTIMEOUT,"msctls_trackbar32", 148 CONTROL "Slider1",IDC_PROMPTTIMEOUT,"msctls_trackbar32",
148 TBS_AUTOTICKS | TBS_VERT | TBS_TOP | WS_TABSTOP,182,73, 149 TBS_AUTOTICKS | TBS_VERT | TBS_TOP | WS_TABSTOP,182,73,
149 21,74 150 21,74
150END 151END
151 152
152IDD_PROPS_NETWORK DIALOG DISCARDABLE 0, 0, 210, 154 153IDD_PROPS_NETWORK DIALOG DISCARDABLE 0, 0, 210, 154
153STYLE WS_CHILD | WS_DISABLED | WS_CAPTION 154STYLE WS_CHILD | WS_DISABLED | WS_CAPTION
154CAPTION "Network" 155CAPTION "Network"
155FONT 8, "MS Sans Serif" 156FONT 8, "MS Sans Serif"
156BEGIN 157BEGIN
157 GROUPBOX "UDP Ports",IDC_STATIC,7,7,196,40 158 GROUPBOX "UDP Ports",IDC_STATIC,7,7,196,40
158 RTEXT "Listen for &incoming requests on port:",IDC_STATIC,13, 159 RTEXT "Listen for &incoming requests on port:",IDC_STATIC,13,
159 18,135,8 160 18,135,8
160 EDITTEXT IDC_LISTENPORT,154,16,40,13,ES_AUTOHSCROLL 161 EDITTEXT IDC_LISTENPORT,154,16,40,13,ES_AUTOHSCROLL
161 CONTROL "Spin1",IDC_LISTENSPIN,"msctls_updown32",UDS_WRAP | 162 CONTROL "Spin1",IDC_LISTENSPIN,"msctls_updown32",UDS_WRAP |
162 UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | 163 UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY |
163 UDS_ARROWKEYS | UDS_NOTHOUSANDS,183,16,11,13 164 UDS_ARROWKEYS | UDS_NOTHOUSANDS,183,16,11,13
164 RTEXT "Send &outging requests to port:",IDC_STATIC,13,31,135,8 165 RTEXT "Send &outging requests to port:",IDC_STATIC,13,31,135,8
165 EDITTEXT IDC_SPEAKPORT,154,29,40,13,ES_AUTOHSCROLL 166 EDITTEXT IDC_SPEAKPORT,154,29,40,13,ES_AUTOHSCROLL
166 CONTROL "Spin1",IDC_SPEAKSPIN,"msctls_updown32",UDS_WRAP | 167 CONTROL "Spin1",IDC_SPEAKSPIN,"msctls_updown32",UDS_WRAP |
167 UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | 168 UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY |
168 UDS_ARROWKEYS | UDS_NOTHOUSANDS,183,29,11,13 169 UDS_ARROWKEYS | UDS_NOTHOUSANDS,183,29,11,13
169 LTEXT "Default connection timeout:",IDC_STATIC,7,52,88,8 170 LTEXT "Default connection timeout:",IDC_STATIC,7,52,88,8
170 EDITTEXT IDC_TIMEOUT,110,50,40,13,ES_AUTOHSCROLL | ES_NUMBER 171 EDITTEXT IDC_TIMEOUT,110,50,40,13,ES_AUTOHSCROLL | ES_NUMBER
171 CONTROL "Spin3",IDC_TIMESPIN,"msctls_updown32",UDS_WRAP | 172 CONTROL "Spin3",IDC_TIMESPIN,"msctls_updown32",UDS_WRAP |
172 UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | 173 UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY |
173 UDS_ARROWKEYS | UDS_NOTHOUSANDS,140,50,11,13 174 UDS_ARROWKEYS | UDS_NOTHOUSANDS,140,50,11,13
174 LTEXT "Default block size:",IDC_STATIC,7,66,59,8 175 LTEXT "Default block size:",IDC_STATIC,7,66,59,8
175 LTEXT "seconds",IDC_STATIC,154,52,28,8 176 LTEXT "seconds",IDC_STATIC,154,52,28,8
176 LTEXT "bytes",IDC_STATIC,154,66,18,8 177 LTEXT "bytes",IDC_STATIC,154,66,18,8
177 EDITTEXT IDC_BLOCKSIZE,110,64,40,13,ES_AUTOHSCROLL | ES_NUMBER 178 EDITTEXT IDC_BLOCKSIZE,110,64,40,13,ES_AUTOHSCROLL | ES_NUMBER
178 CONTROL "Spin3",IDC_BSIZESPIN,"msctls_updown32",UDS_WRAP | 179 CONTROL "Spin3",IDC_BSIZESPIN,"msctls_updown32",UDS_WRAP |
179 UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | 180 UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY |
180 UDS_ARROWKEYS | UDS_NOTHOUSANDS,140,64,11,13 181 UDS_ARROWKEYS | UDS_NOTHOUSANDS,140,64,11,13
181END 182END
182 183
183IDD_CONFIRM_RRQ DIALOGEX 0, 0, 181, 79 184IDD_CONFIRM_RRQ DIALOGEX 0, 0, 181, 79
184STYLE DS_MODALFRAME | DS_NOIDLEMSG | DS_SETFOREGROUND | DS_3DLOOK | WS_POPUP | 185STYLE DS_MODALFRAME | DS_NOIDLEMSG | DS_SETFOREGROUND | DS_3DLOOK | WS_POPUP |
185 WS_CAPTION 186 WS_CAPTION
186EXSTYLE WS_EX_TOOLWINDOW | WS_EX_CLIENTEDGE 187EXSTYLE WS_EX_TOOLWINDOW | WS_EX_CLIENTEDGE
187CAPTION " PumpKIN - Confirm Read Request" 188CAPTION " PumpKIN - Confirm Read Request"
188FONT 8, "MS Sans Serif", 0, 0, 0x1 189FONT 8, "MS Sans Serif", 0, 0, 0x1
189BEGIN 190BEGIN
190 DEFPUSHBUTTON "&Grant Access",IDOK,27,58,54,14 191 DEFPUSHBUTTON "&Grant Access",IDOK,27,58,54,14
191 PUSHBUTTON "&Deny Access",IDCANCEL,97,58,54,14 192 PUSHBUTTON "&Deny Access",IDCANCEL,97,58,54,14
192 LTEXT "The host",IDC_STATIC,77,7,29,8 193 LTEXT "The host",IDC_STATIC,77,7,29,8
193 CTEXT "255.255.255.255",IDC_HOST,57,15,68,14,SS_NOTIFY | 194 CTEXT "255.255.255.255",IDC_HOST,57,15,68,14,SS_NOTIFY |
194 SS_SUNKEN | WS_BORDER,WS_EX_DLGMODALFRAME | 195 SS_SUNKEN | WS_BORDER,WS_EX_DLGMODALFRAME |
195 WS_EX_CLIENTEDGE 196 WS_EX_CLIENTEDGE
196 CTEXT "is requesting the file",IDC_STATIC,23,29,135,8 197 CTEXT "is requesting the file",IDC_STATIC,23,29,135,8
197 CTEXT "",IDC_FILE,23,37,135,14,SS_NOTIFY | SS_SUNKEN | 198 CTEXT "",IDC_FILE,23,37,135,14,SS_NOTIFY | SS_SUNKEN |
198 WS_BORDER,WS_EX_DLGMODALFRAME | WS_EX_CLIENTEDGE 199 WS_BORDER,WS_EX_DLGMODALFRAME | WS_EX_CLIENTEDGE
199 CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,7,54,167,1 200 CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,7,54,167,1
200 ICON IDR_MAINFRAME,IDC_STATIC,7,7,18,20 201 ICON IDR_MAINFRAME,IDC_STATIC,7,7,18,20
201 ICON IDR_MAINFRAME,IDC_STATIC,153,7,18,20 202 ICON IDR_MAINFRAME,IDC_STATIC,153,7,18,20
202END 203END
203 204
204IDD_CONFIRM_WRQ DIALOGEX 0, 0, 201, 95 205IDD_CONFIRM_WRQ DIALOGEX 0, 0, 201, 95
205STYLE DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | WS_POPUP | WS_CAPTION 206STYLE DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | WS_POPUP | WS_CAPTION
206EXSTYLE WS_EX_TOOLWINDOW | WS_EX_CLIENTEDGE 207EXSTYLE WS_EX_TOOLWINDOW | WS_EX_CLIENTEDGE
207CAPTION " PumpKIN - Confirm Write Request" 208CAPTION " PumpKIN - Confirm Write Request"
208FONT 8, "MS Sans Serif", 0, 0, 0x1 209FONT 8, "MS Sans Serif", 0, 0, 0x1
209BEGIN 210BEGIN
210 DEFPUSHBUTTON "&Accept",IDOK,7,58,59,14 211 DEFPUSHBUTTON "&Accept",IDOK,7,58,59,14
211 PUSHBUTTON "&Rename",IDC_RENAME,71,58,59,14 212 PUSHBUTTON "&Rename",IDC_RENAME,71,58,59,14
212 PUSHBUTTON "&Deny Access",IDCANCEL,135,58,59,14 213 PUSHBUTTON "&Deny Access",IDCANCEL,135,58,59,14
213 LTEXT "The host",IDC_STATIC,87,7,29,8 214 LTEXT "The host",IDC_STATIC,87,7,29,8
214 CTEXT "255.255.255.255",IDC_HOST,67,15,68,14,SS_NOTIFY | 215 CTEXT "255.255.255.255",IDC_HOST,67,15,68,14,SS_NOTIFY |
215 SS_SUNKEN | WS_BORDER,WS_EX_DLGMODALFRAME | 216 SS_SUNKEN | WS_BORDER,WS_EX_DLGMODALFRAME |
216 WS_EX_CLIENTEDGE 217 WS_EX_CLIENTEDGE
217 CTEXT "is attempting to send you a file",IDC_STATIC,33,29,135, 218 CTEXT "is attempting to send you a file",IDC_STATIC,33,29,135,
218 8 219 8
219 CTEXT "",IDC_FILE,33,37,135,14,SS_NOTIFY | SS_SUNKEN | 220 CTEXT "",IDC_FILE,33,37,135,14,SS_NOTIFY | SS_SUNKEN |
220 WS_BORDER,WS_EX_DLGMODALFRAME | WS_EX_CLIENTEDGE 221 WS_BORDER,WS_EX_DLGMODALFRAME | WS_EX_CLIENTEDGE
221 CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,7,54,187,1 222 CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,7,54,187,1
222 ICON IDR_MAINFRAME,IDC_STATIC,7,7,21,20 223 ICON IDR_MAINFRAME,IDC_STATIC,7,7,21,20
223 ICON IDR_MAINFRAME,IDC_STATIC,173,7,21,20 224 ICON IDR_MAINFRAME,IDC_STATIC,173,7,21,20
224 PUSHBUTTON "Res&ume",IDC_RESUME,71,74,59,14 225 PUSHBUTTON "Res&ume",IDC_RESUME,71,74,59,14
225END 226END
226 227
227IDD_REQUEST DIALOGEX 0, 0, 191, 161 228IDD_REQUEST DIALOGEX 0, 0, 191, 161
228STYLE DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | WS_POPUP | WS_CAPTION | 229STYLE DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | WS_POPUP | WS_CAPTION |
229 WS_SYSMENU 230 WS_SYSMENU
230EXSTYLE WS_EX_CLIENTEDGE 231EXSTYLE WS_EX_CLIENTEDGE
231CAPTION "Request" 232CAPTION "Request"
232FONT 8, "MS Sans Serif", 0, 0, 0x1 233FONT 8, "MS Sans Serif", 0, 0, 0x1
233BEGIN 234BEGIN
234 LTEXT "&Local file:",IDC_STATIC,7,7,31,8,SS_NOTIFY 235 LTEXT "&Local file:",IDC_STATIC,7,7,31,8,SS_NOTIFY
235 EDITTEXT IDC_LOCALFILE,7,16,157,14,ES_AUTOHSCROLL, 236 EDITTEXT IDC_LOCALFILE,7,16,157,14,ES_AUTOHSCROLL,
236 WS_EX_CLIENTEDGE | WS_EX_STATICEDGE 237 WS_EX_CLIENTEDGE | WS_EX_STATICEDGE
237 PUSHBUTTON "...",IDC_BROWSE,165,16,19,14,BS_ICON,WS_EX_STATICEDGE 238 PUSHBUTTON "...",IDC_BROWSE,165,16,19,14,BS_ICON,WS_EX_STATICEDGE
238 LTEXT "&Remote file:",IDC_STATIC,7,34,38,8,SS_NOTIFY 239 LTEXT "&Remote file:",IDC_STATIC,7,34,38,8,SS_NOTIFY
239 EDITTEXT IDC_REMOTEFILE,7,44,177,14,ES_AUTOHSCROLL, 240 EDITTEXT IDC_REMOTEFILE,7,44,177,14,ES_AUTOHSCROLL,
240 WS_EX_CLIENTEDGE | WS_EX_STATICEDGE 241 WS_EX_CLIENTEDGE | WS_EX_STATICEDGE
241 LTEXT "Remote &host:",IDC_STATIC,7,61,43,8,SS_NOTIFY 242 LTEXT "Remote &host:",IDC_STATIC,7,61,43,8,SS_NOTIFY
242 COMBOBOX IDC_TALKS,7,72,157,66,CBS_SIMPLE | CBS_AUTOHSCROLL | 243 COMBOBOX IDC_TALKS,7,72,157,66,CBS_SIMPLE | CBS_AUTOHSCROLL |
243 CBS_SORT | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | 244 CBS_SORT | CBS_NOINTEGRALHEIGHT | WS_VSCROLL |
244 WS_TABSTOP,WS_EX_CLIENTEDGE | WS_EX_STATICEDGE 245 WS_TABSTOP,WS_EX_CLIENTEDGE | WS_EX_STATICEDGE
245 PUSHBUTTON "R\nE\n&F\nR\nE\nS\nH",IDC_REFRESH,165,72,19,66, 246 PUSHBUTTON "R\nE\n&F\nR\nE\nS\nH",IDC_REFRESH,165,72,19,66,
246 BS_CENTER | BS_VCENTER | BS_MULTILINE | BS_NOTIFY, 247 BS_CENTER | BS_VCENTER | BS_MULTILINE | BS_NOTIFY,
247 WS_EX_CLIENTEDGE 248 WS_EX_CLIENTEDGE
248 LTEXT "&Type:",IDC_STATIC,58,34,19,8 249 LTEXT "&Type:",IDC_STATIC,58,34,19,8
249 COMBOBOX IDC_TYPE,80,31,43,41,CBS_DROPDOWN | CBS_AUTOHSCROLL | 250 COMBOBOX IDC_TYPE,80,31,43,41,CBS_DROPDOWN | CBS_AUTOHSCROLL |
250 CBS_LOWERCASE | WS_VSCROLL | WS_TABSTOP 251 CBS_LOWERCASE | WS_VSCROLL | WS_TABSTOP
251 LTEXT "&Block:",IDC_STATIC,127,34,21,8 252 LTEXT "&Block:",IDC_STATIC,127,34,21,8
252 COMBOBOX IDC_BSIZE,149,31,35,53,CBS_DROPDOWN | WS_VSCROLL | 253 COMBOBOX IDC_BSIZE,149,31,35,53,CBS_DROPDOWN | WS_VSCROLL |
253 WS_TABSTOP 254 WS_TABSTOP
254 DEFPUSHBUTTON "OK",IDOK,35,140,50,14 255 DEFPUSHBUTTON "OK",IDOK,35,140,50,14
255 PUSHBUTTON "Cancel",IDCANCEL,101,140,50,14 256 PUSHBUTTON "Cancel",IDCANCEL,101,140,50,14
256 CONTROL "",IDC_STATIC,"Static",SS_ETCHEDVERT,52,32,1,11 257 CONTROL "",IDC_STATIC,"Static",SS_ETCHEDVERT,52,32,1,11
257END 258END
258 259
259IDD_PROPS_SOUNDS DIALOG DISCARDABLE 0, 0, 210, 154 260IDD_PROPS_SOUNDS DIALOG DISCARDABLE 0, 0, 210, 154
260STYLE WS_CHILD | WS_DISABLED | WS_CAPTION 261STYLE WS_CHILD | WS_DISABLED | WS_CAPTION
261CAPTION "Sounds" 262CAPTION "Sounds"
262FONT 8, "MS Sans Serif" 263FONT 8, "MS Sans Serif"
263BEGIN 264BEGIN
264 LTEXT "&Incoming request:",IDC_STATIC,7,9,57,8 265 LTEXT "&Incoming request:",IDC_STATIC,7,9,57,8
265 COMBOBOX IDC_RING,70,7,103,100,CBS_DROPDOWN | CBS_AUTOHSCROLL | 266 COMBOBOX IDC_RING,70,7,103,100,CBS_DROPDOWN | CBS_AUTOHSCROLL |
266 CBS_SORT | WS_VSCROLL | WS_TABSTOP 267 CBS_SORT | WS_VSCROLL | WS_TABSTOP
267 PUSHBUTTON "browse",IDC_RING_BROWSE,175,7,13,13,BS_ICON 268 PUSHBUTTON "browse",IDC_RING_BROWSE,175,7,13,13,BS_ICON
268 PUSHBUTTON "play",IDC_RING_PLAY,190,7,13,13,BS_ICON 269 PUSHBUTTON "play",IDC_RING_PLAY,190,7,13,13,BS_ICON
269 LTEXT "xfer &finished:",IDC_STATIC,7,25,57,8 270 LTEXT "xfer &finished:",IDC_STATIC,7,25,57,8
270 COMBOBOX IDC_FINISHED,70,22,103,100,CBS_DROPDOWN | 271 COMBOBOX IDC_FINISHED,70,22,103,100,CBS_DROPDOWN |
271 CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP 272 CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP
272 PUSHBUTTON "browse",IDC_FINISHED_BROWSE,175,22,13,13,BS_ICON 273 PUSHBUTTON "browse",IDC_FINISHED_BROWSE,175,22,13,13,BS_ICON
273 PUSHBUTTON "play",IDC_FINISHED_PLAY,190,22,13,13,BS_ICON 274 PUSHBUTTON "play",IDC_FINISHED_PLAY,190,22,13,13,BS_ICON
274 LTEXT "xfer &aborted:",IDC_STATIC,7,40,57,8 275 LTEXT "xfer &aborted:",IDC_STATIC,7,40,57,8
275 COMBOBOX IDC_ABORTED,70,37,103,100,CBS_DROPDOWN | CBS_AUTOHSCROLL | 276 COMBOBOX IDC_ABORTED,70,37,103,100,CBS_DROPDOWN | CBS_AUTOHSCROLL |
276 CBS_SORT | WS_VSCROLL | WS_TABSTOP 277 CBS_SORT | WS_VSCROLL | WS_TABSTOP
277 PUSHBUTTON "browse",IDC_ABORTED_BROWSE,175,37,13,13,BS_ICON 278 PUSHBUTTON "browse",IDC_ABORTED_BROWSE,175,37,13,13,BS_ICON
278 PUSHBUTTON "play",IDC_ABORTED_PLAY,190,37,13,13,BS_ICON 279 PUSHBUTTON "play",IDC_ABORTED_PLAY,190,37,13,13,BS_ICON
279END 280END
280 281
281 282
282#ifndef _MAC 283#ifndef _MAC
283///////////////////////////////////////////////////////////////////////////// 284/////////////////////////////////////////////////////////////////////////////
284// 285//
285// Version 286// Version
286// 287//
287 288
288VS_VERSION_INFO VERSIONINFO 289VS_VERSION_INFO VERSIONINFO
289 FILEVERSION 2,5,1,0 290 FILEVERSION 2,5,1,0
290 PRODUCTVERSION 2,5,1,0 291 PRODUCTVERSION 2,5,1,0
291 FILEFLAGSMASK 0x3fL 292 FILEFLAGSMASK 0x3fL
292#ifdef _DEBUG 293#ifdef _DEBUG
293 FILEFLAGS 0x1L 294 FILEFLAGS 0x1L
294#else 295#else
295 FILEFLAGS 0x0L 296 FILEFLAGS 0x0L
296#endif 297#endif
297 FILEOS 0x4L 298 FILEOS 0x4L
298 FILETYPE 0x1L 299 FILETYPE 0x1L
299 FILESUBTYPE 0x0L 300 FILESUBTYPE 0x0L
300BEGIN 301BEGIN
301 BLOCK "StringFileInfo" 302 BLOCK "StringFileInfo"
302 BEGIN 303 BEGIN
303 BLOCK "040904b0" 304 BLOCK "040904b0"
304 BEGIN 305 BEGIN
305 VALUE "CompanyName", "Klever Group (http://www.klever.net/)\0" 306 VALUE "CompanyName", "Klever Group (http://www.klever.net/)\0"
306 VALUE "FileDescription", "PumpKIN, tftp client/daemon\0" 307 VALUE "FileDescription", "PumpKIN, tftp client/daemon\0"
307 VALUE "FileVersion", "2, 5, 1, 0\0" 308 VALUE "FileVersion", "2, 5, 1, 0\0"
308 VALUE "InternalName", "PUMPKIN\0" 309 VALUE "InternalName", "PUMPKIN\0"
309 VALUE "LegalCopyright", "Copyright © 1997-2004 Klever Group (http://www.klever.net)\0" 310 VALUE "LegalCopyright", "Copyright © 1997-2004 Klever Group (http://www.klever.net)\0"
310 VALUE "LegalTrademarks", "Klever Group (http://www.klever.net/)\0" 311 VALUE "LegalTrademarks", "Klever Group (http://www.klever.net/)\0"
311 VALUE "OriginalFilename", "PUMPKIN.EXE\0" 312 VALUE "OriginalFilename", "PUMPKIN.EXE\0"
312 VALUE "ProductName", "PumpKIN\0" 313 VALUE "ProductName", "PumpKIN\0"
313 VALUE "ProductVersion", "2, 5, 1, 0\0" 314 VALUE "ProductVersion", "2, 5, 1, 0\0"
314 END 315 END
315 END 316 END
316 BLOCK "VarFileInfo" 317 BLOCK "VarFileInfo"
317 BEGIN 318 BEGIN
318 VALUE "Translation", 0x409, 1200 319 VALUE "Translation", 0x409, 1200
319 END 320 END
320END 321END
321 322
322#endif // !_MAC 323#endif // !_MAC
323 324
324 325
325///////////////////////////////////////////////////////////////////////////// 326/////////////////////////////////////////////////////////////////////////////
326// 327//
327// DESIGNINFO 328// DESIGNINFO
328// 329//
329 330
330#ifdef APSTUDIO_INVOKED 331#ifdef APSTUDIO_INVOKED
331GUIDELINES DESIGNINFO DISCARDABLE 332GUIDELINES DESIGNINFO DISCARDABLE
332BEGIN 333BEGIN
333 IDD_ABOUTBOX, DIALOG 334 IDD_ABOUTBOX, DIALOG
334 BEGIN 335 BEGIN
335 LEFTMARGIN, 7 336 LEFTMARGIN, 7
336 RIGHTMARGIN, 210 337 RIGHTMARGIN, 210
337 TOPMARGIN, 7 338 TOPMARGIN, 7
338 BOTTOMMARGIN, 67 339 BOTTOMMARGIN, 67
339 END 340 END
340 341
341 IDD_PUMPKIN_DIALOG, DIALOG 342 IDD_PUMPKIN_DIALOG, DIALOG
342 BEGIN 343 BEGIN
343 LEFTMARGIN, 7 344 LEFTMARGIN, 7
344 RIGHTMARGIN, 355 345 RIGHTMARGIN, 355
345 TOPMARGIN, 7 346 TOPMARGIN, 7
346 BOTTOMMARGIN, 184 347 BOTTOMMARGIN, 184
347 HORZGUIDE, 115 348 HORZGUIDE, 115
348 END 349 END
349 350
350 IDD_PROPS_SERVER, DIALOG 351 IDD_PROPS_SERVER, DIALOG
351 BEGIN 352 BEGIN
352 LEFTMARGIN, 7 353 LEFTMARGIN, 7
353 RIGHTMARGIN, 203 354 RIGHTMARGIN, 203
354 TOPMARGIN, 7 355 TOPMARGIN, 7
355 BOTTOMMARGIN, 147 356 BOTTOMMARGIN, 147
356 END 357 END
357 358
358 IDD_PROPS_NETWORK, DIALOG 359 IDD_PROPS_NETWORK, DIALOG
359 BEGIN 360 BEGIN
360 LEFTMARGIN, 7 361 LEFTMARGIN, 7
361 RIGHTMARGIN, 203 362 RIGHTMARGIN, 203
362 TOPMARGIN, 7 363 TOPMARGIN, 7
363 BOTTOMMARGIN, 147 364 BOTTOMMARGIN, 147
364 END 365 END
365 366
366 IDD_CONFIRM_RRQ, DIALOG 367 IDD_CONFIRM_RRQ, DIALOG
367 BEGIN 368 BEGIN
368 LEFTMARGIN, 7 369 LEFTMARGIN, 7
369 RIGHTMARGIN, 174 370 RIGHTMARGIN, 174
370 TOPMARGIN, 7 371 TOPMARGIN, 7
371 BOTTOMMARGIN, 72 372 BOTTOMMARGIN, 72
372 END 373 END
373 374
374 IDD_CONFIRM_WRQ, DIALOG 375 IDD_CONFIRM_WRQ, DIALOG
375 BEGIN 376 BEGIN
376 LEFTMARGIN, 7 377 LEFTMARGIN, 7
377 RIGHTMARGIN, 194 378 RIGHTMARGIN, 194
378 TOPMARGIN, 7 379 TOPMARGIN, 7
379 BOTTOMMARGIN, 88 380 BOTTOMMARGIN, 88
380 END 381 END
381 382
382 IDD_REQUEST, DIALOG 383 IDD_REQUEST, DIALOG
383 BEGIN 384 BEGIN
384 LEFTMARGIN, 7 385 LEFTMARGIN, 7
385 RIGHTMARGIN, 184 386 RIGHTMARGIN, 184
386 TOPMARGIN, 7 387 TOPMARGIN, 7
387 BOTTOMMARGIN, 154 388 BOTTOMMARGIN, 154
388 END 389 END
389 390
390 IDD_PROPS_SOUNDS, DIALOG 391 IDD_PROPS_SOUNDS, DIALOG
391 BEGIN 392 BEGIN
392 LEFTMARGIN, 7 393 LEFTMARGIN, 7
393 RIGHTMARGIN, 203 394 RIGHTMARGIN, 203
394 TOPMARGIN, 7 395 TOPMARGIN, 7
395 BOTTOMMARGIN, 147 396 BOTTOMMARGIN, 147
396 END 397 END
397END 398END
398#endif // APSTUDIO_INVOKED 399#endif // APSTUDIO_INVOKED
399 400
400 401
401///////////////////////////////////////////////////////////////////////////// 402/////////////////////////////////////////////////////////////////////////////
402// 403//
403// Bitmap 404// Bitmap
404// 405//
405 406
406IDB_BACKGROUND BITMAP DISCARDABLE "shared-data/klever-background.bmp" 407IDB_BACKGROUND BITMAP DISCARDABLE "shared-data/klever-background.bmp"
407 408
408///////////////////////////////////////////////////////////////////////////// 409/////////////////////////////////////////////////////////////////////////////
409// 410//
410// WAVE 411// WAVE
411// 412//
412 413
413IDR_WAVE_RING WAVE DISCARDABLE "res\\ring.wav" 414IDR_WAVE_RING WAVE DISCARDABLE "res\\ring.wav"
414IDR_WAVE_FINISHED WAVE DISCARDABLE "res\\finished.wav" 415IDR_WAVE_FINISHED WAVE DISCARDABLE "res\\finished.wav"
415IDR_WAVE_ABORTED WAVE DISCARDABLE "res\\failed.wav" 416IDR_WAVE_ABORTED WAVE DISCARDABLE "res\\failed.wav"
416 417
417///////////////////////////////////////////////////////////////////////////// 418/////////////////////////////////////////////////////////////////////////////
418// 419//
419// Dialog Info 420// Dialog Info
420// 421//
421 422
422IDD_REQUEST DLGINIT 423IDD_REQUEST DLGINIT
423BEGIN 424BEGIN
424 IDC_TYPE, 0x403, 6, 0 425 IDC_TYPE, 0x403, 6, 0
4250x636f, 0x6574, 0x0074, 4260x636f, 0x6574, 0x0074,
426 IDC_TYPE, 0x403, 9, 0 427 IDC_TYPE, 0x403, 9, 0
4270x656e, 0x6174, 0x6373, 0x6969, "\000" 4280x656e, 0x6174, 0x6373, 0x6969, "\000"
428 IDC_BSIZE, 0x403, 4, 0 429 IDC_BSIZE, 0x403, 4, 0
4290x3135, 0x0032, 4300x3135, 0x0032,
430 IDC_BSIZE, 0x403, 5, 0 431 IDC_BSIZE, 0x403, 5, 0
4310x3031, 0x3432, "\000" 4320x3031, 0x3432, "\000"
432 IDC_BSIZE, 0x403, 5, 0 433 IDC_BSIZE, 0x403, 5, 0
4330x3032, 0x3834, "\000" 4340x3032, 0x3834, "\000"
434 IDC_BSIZE, 0x403, 5, 0 435 IDC_BSIZE, 0x403, 5, 0
4350x3034, 0x3639, "\000" 4360x3034, 0x3639, "\000"
436 IDC_BSIZE, 0x403, 5, 0 437 IDC_BSIZE, 0x403, 5, 0
4370x3138, 0x3239, "\000" 4380x3138, 0x3239, "\000"
438 0 439 0
439END 440END
440 441
441 442
442///////////////////////////////////////////////////////////////////////////// 443/////////////////////////////////////////////////////////////////////////////
443// 444//
444// Menu 445// Menu
445// 446//
446 447
447IDM_POPUPS MENU DISCARDABLE 448IDM_POPUPS MENU DISCARDABLE
448BEGIN 449BEGIN
449 POPUP "&Tray" 450 POPUP "&Tray"
450 BEGIN 451 BEGIN
451 MENUITEM "&Send File", ID_TRAY_SENDFILE 452 MENUITEM "&Send File", ID_TRAY_SENDFILE
452 MENUITEM "F&etch file", ID_TRAY_FETCHFILE 453 MENUITEM "F&etch file", ID_TRAY_FETCHFILE
453 MENUITEM "&Options", ID_TRAY_OPTIONS 454 MENUITEM "&Options", ID_TRAY_OPTIONS
454 MENUITEM "Show &PumpKIN Window", ID_TRAY_SHOWPUMPKINWINDOW 455 MENUITEM "Show &PumpKIN Window", ID_TRAY_SHOWPUMPKINWINDOW
455 MENUITEM "Open &Files Folder", ID_TRAY_OPENFILESFOLDER 456 MENUITEM "Open &Files Folder", ID_TRAY_OPENFILESFOLDER
456 MENUITEM SEPARATOR 457 MENUITEM SEPARATOR
457 MENUITEM "&Help Topics", ID_TRAY_HELP 458 MENUITEM "&Help Topics", ID_TRAY_HELP
458 MENUITEM "&About PumpKIN", ID_TRAY_ABOUTPUMPKIN 459 MENUITEM "&About PumpKIN", ID_TRAY_ABOUTPUMPKIN
459 MENUITEM SEPARATOR 460 MENUITEM SEPARATOR
460 MENUITEM "E&xit", ID_TRAY_EXIT 461 MENUITEM "E&xit", ID_TRAY_EXIT
461 END 462 END
462END 463END
463 464
464 465
465///////////////////////////////////////////////////////////////////////////// 466/////////////////////////////////////////////////////////////////////////////
466// 467//
467// String Table 468// String Table
468// 469//
469 470
470STRINGTABLE DISCARDABLE 471STRINGTABLE DISCARDABLE
471BEGIN 472BEGIN
472 IDS_ABOUTBOX "&About PumpKIN..." 473 IDS_ABOUTBOX "&About PumpKIN..."
473 IDS_FMT_BYTES "%lu" 474 IDS_FMT_BYTES "%lu"
474 IDP_SOCKETS_INIT_FAILED "Windows sockets initialization failed." 475 IDP_SOCKETS_INIT_FAILED "Windows sockets initialization failed."
475 IDS_TFTP_ERROR_ACCESS "Access violation" 476 IDS_TFTP_ERROR_ACCESS "Access violation"
476 IDS_TFTP_ERROR_NOTFOUND "File not found" 477 IDS_TFTP_ERROR_NOTFOUND "File not found"
477 IDS_TFTP_ERROR_DIRFULL "Directory is full" 478 IDS_TFTP_ERROR_DIRFULL "Directory is full"
478 IDS_TFTP_ERROR_SHARING "Sharing violation" 479 IDS_TFTP_ERROR_SHARING "Sharing violation"
479 IDS_TFTP_ERROR_DISKFULL "Disk full" 480 IDS_TFTP_ERROR_DISKFULL "Disk full"
480 IDS_TFTP_ERROR_UNDEFINED "Undefined error" 481 IDS_TFTP_ERROR_UNDEFINED "Undefined error"
481 IDS_LOG_START "PumpKIN started" 482 IDS_LOG_START "PumpKIN started"
482 IDS_LOG_LISTENRECEIVEERROR "Error listening for incoming connections" 483 IDS_LOG_LISTENRECEIVEERROR "Error listening for incoming connections"
483END 484END
484 485
485STRINGTABLE DISCARDABLE 486STRINGTABLE DISCARDABLE
486BEGIN 487BEGIN
487 IDS_LOG_LISTENACCEPTERROR "Error accepting incoming connection" 488 IDS_LOG_LISTENACCEPTERROR "Error accepting incoming connection"
488 IDS_LOG_RRQSERVE "'%s' of type '%s' is requested from %s" 489 IDS_LOG_RRQSERVE "'%s' of type '%s' is requested from %s"
489 IDS_LOG_LISTENOPCODE "Invalid opcode in initial connection request" 490 IDS_LOG_LISTENOPCODE "Invalid opcode in initial connection request"
490 IDS_LOG_XFERUDPSEND "UDP packet send failed" 491 IDS_LOG_XFERUDPSEND "UDP packet send failed"
491 IDS_LOG_XFERRECEIVE "Error on xfer socket" 492 IDS_LOG_XFERRECEIVE "Error on xfer socket"
492 IDS_LOG_XFERSEND "Error on xfer socket" 493 IDS_LOG_XFERSEND "Error on xfer socket"
493 IDS_LOG_XFERUDPRECEIVE "UDP packet receive failed" 494 IDS_LOG_XFERUDPRECEIVE "UDP packet receive failed"
494 IDS_LOG_XFERSOURCETID "Packet from unexpected source" 495 IDS_LOG_XFERSOURCETID "Packet from unexpected source"
495 IDS_LOG_SENTTFTPERROR ":%u: %s" 496 IDS_LOG_SENTTFTPERROR ":%u: %s"
496 IDS_LOG_GOTTFTPERROR "TFTP:%u: %s" 497 IDS_LOG_GOTTFTPERROR "TFTP:%u: %s"
497 IDS_LOG_XFEROPCODE "Invalid opcode during transfer received" 498 IDS_LOG_XFEROPCODE "Invalid opcode during transfer received"
498 IDS_LOG_XFERRRQFINISHED "Transfer of '%s' has successfully completed" 499 IDS_LOG_XFERRRQFINISHED "Transfer of '%s' has successfully completed"
499 IDS_TITLE_OPTIONS "Options" 500 IDS_TITLE_OPTIONS "Options"
500 IDS_LOG_WRQSERVE "Writing of '%s' of type '%s' is requested by %s" 501 IDS_LOG_WRQSERVE "Writing of '%s' of type '%s' is requested by %s"
501 IDS_TFTP_ERROR_FAILEDTORENAME "Too many clones of the file" 502 IDS_TFTP_ERROR_FAILEDTORENAME "Too many clones of the file"
502 IDS_RENAME_TITLE "Save As" 503 IDS_RENAME_TITLE "Save As"
503END 504END
504 505
505STRINGTABLE DISCARDABLE 506STRINGTABLE DISCARDABLE
506BEGIN 507BEGIN
507 IDS_LOG_TIMEDOUT "Transmission of '%s' is timed out" 508 IDS_LOG_TIMEDOUT "Transmission of '%s' is timed out"
508 IDS_CONFIRMEXIT_TITLE "Exit" 509 IDS_CONFIRMEXIT_TITLE "Exit"
509 IDS_CONFIRMEXIT_TEXT "File transmission is currently in progress. Are you sure you want to exit?" 510 IDS_CONFIRMEXIT_TEXT "File transmission is currently in progress. Are you sure you want to exit?"
510 IDS_LOG_XFERWRQFINISHED "Transfer of '%s' has successfully completed" 511 IDS_LOG_XFERWRQFINISHED "Transfer of '%s' has successfully completed"
511 IDS_LOG_XFERABORTED "Transfer of '%s' was aborted" 512 IDS_LOG_XFERABORTED "Transfer of '%s' was aborted"
512 IDS_TITLE_PUTREQUEST "Send file" 513 IDS_TITLE_PUTREQUEST "Send file"
513 IDS_TITLE_GETREQUEST "Fetch file" 514 IDS_TITLE_GETREQUEST "Fetch file"
514 IDS_WTALKHEADING "Talk with " 515 IDS_WTALKHEADING "Talk with "
515 IDS_TITLE_BROWSEFILE "Browse" 516 IDS_TITLE_BROWSEFILE "Browse"
516 IDS_LOG_RESOLVEFAILED "Failed to resolve host address for '%s'" 517 IDS_LOG_RESOLVEFAILED "Failed to resolve host address for '%s'"
517 IDS_LOG_FAILEDLOCALFILE "Failed to open local file '%s'" 518 IDS_LOG_FAILEDLOCALFILE "Failed to open local file '%s'"
518 IDS_LOG_FAILEDTOOPEN "Failed to open '%s'" 519 IDS_LOG_FAILEDTOOPEN "Failed to open '%s'"
519 IDS_OTALXHEADING "Open Talks: talking to " 520 IDS_OTALXHEADING "Open Talks: talking to "
520 IDS_REGISTRYKEY "Klever Group" 521 IDS_REGISTRYKEY "Klever Group"
521 IDS_KLEVERNET_URL "http://www.klever.net/" 522 IDS_KLEVERNET_URL "http://www.klever.net/"
522 IDS_LOGTIMEFORMAT "%H:%M:%S %B %d" 523 IDS_LOGTIMEFORMAT "%H:%M:%S %B %d"
523END 524END
524 525
525STRINGTABLE DISCARDABLE 526STRINGTABLE DISCARDABLE
526BEGIN 527BEGIN
527 ID_TRAY_HELP "Read the help on PumpKIN" 528 ID_TRAY_HELP "Read the help on PumpKIN"
528 ID_TRAY_ABOUTPUMPKIN "Learn about PumpKIN and it's creator" 529 ID_TRAY_ABOUTPUMPKIN "Learn about PumpKIN and it's creator"
529 ID_TRAY_EXIT "Close PumpKIN" 530 ID_TRAY_EXIT "Close PumpKIN"
530 ID_TRAY_SENDFILE "Send file over the network to your tete-a-tete" 531 ID_TRAY_SENDFILE "Send file over the network to your tete-a-tete"
531 ID_TRAY_FETCHFILE "Fetch file from remote computer" 532 ID_TRAY_FETCHFILE "Fetch file from remote computer"
532 ID_TRAY_OPTIONS "Set PumpKIN options" 533 ID_TRAY_OPTIONS "Set PumpKIN options"
533 ID_TRAY_SHOWPUMPKINWINDOW "Show main window" 534 ID_TRAY_SHOWPUMPKINWINDOW "Show main window"
534 ID_TRAY_OPENFILESFOLDER "Explore TFTP root folder" 535 ID_TRAY_OPENFILESFOLDER "Explore TFTP root folder"
535END 536END
536 537
537STRINGTABLE DISCARDABLE 538STRINGTABLE DISCARDABLE
538BEGIN 539BEGIN
539 IDC_CONNECTIONS "Active transfers" 540 IDC_CONNECTIONS "Active transfers"
540 IDC_LOG "PumpKIN Activity Log" 541 IDC_LOG "PumpKIN Activity Log"
541 IDC_GET "Fetch file from remote server" 542 IDC_GET "Fetch file from remote server"
542 IDC_PUT "Send file over the net" 543 IDC_PUT "Send file over the net"
543 IDC_ABORT "Abort transfer currently in progress" 544 IDC_ABORT "Abort transfer currently in progress"
544 IDC_EXIT "Close PumpKIN" 545 IDC_EXIT "Close PumpKIN"
545END 546END
546 547
547STRINGTABLE DISCARDABLE 548STRINGTABLE DISCARDABLE
548BEGIN 549BEGIN
549 IDC_OPTIONS "Set PumpKIN options" 550 IDC_OPTIONS "Set PumpKIN options"
550 IDC_REFRESH "Refresh talks list" 551 IDC_REFRESH "Refresh talks list"
551 IDC_BROWSE "Browse" 552 IDC_BROWSE "Browse"
552END 553END
553 554
554STRINGTABLE DISCARDABLE 555STRINGTABLE DISCARDABLE
555BEGIN 556BEGIN
556 ID_HELP "Read help on PumpKIN" 557 ID_HELP "Read help on PumpKIN"
557END 558END
558 559
559STRINGTABLE DISCARDABLE 560STRINGTABLE DISCARDABLE
560BEGIN 561BEGIN
561 IDS_DROPFILES_TITLE "Drop Files" 562 IDS_DROPFILES_TITLE "Drop Files"
562 IDS_NOMULTIPLEDROP_TEXT "You can't drop more than one file here. Only the first one will be accepted" 563 IDS_NOMULTIPLEDROP_TEXT "You can't drop more than one file here. Only the first one will be accepted"
563 IDS_LOG_REQUESTING "Requesting '%s' from '%s'" 564 IDS_LOG_REQUESTING "Requesting '%s' from '%s'"
564 IDS_LOG_SENDING "Sending '%s' to '%s'" 565 IDS_LOG_SENDING "Sending '%s' to '%s'"
565 IDS_WTALKAT "@" 566 IDS_WTALKAT "@"
566 IDS_OTALXAT " at " 567 IDS_OTALXAT " at "
567 IDS_TFTP_ERROR_TSIZE "Invalid transfer size" 568 IDS_TFTP_ERROR_TSIZE "Invalid transfer size"
568 IDS_TFTP_ERROR_BSIZE "Invalid block size" 569 IDS_TFTP_ERROR_BSIZE "Invalid block size"
569 IDS_TFTP_ERROR_TOUT "Invalid timeout" 570 IDS_TFTP_ERROR_TOUT "Invalid timeout"
570 IDS_SELECT_TFTPROOT "Select TFTP filesystem root.." 571 IDS_SELECT_TFTPROOT "Select TFTP filesystem root.."
571 IDS_FILTER_WAV "Sound Files (*.wav)|*.wav||" 572 IDS_FILTER_WAV "Sound Files (*.wav)|*.wav||"
572 IDS_TITLE_WAV "Select sound.." 573 IDS_TITLE_WAV "Select sound.."
574 IDS_BOX_CANTBIND "Failed to create listening socket. The port may be in use by another application."
573END 575END
574 576
575STRINGTABLE DISCARDABLE 577STRINGTABLE DISCARDABLE
576BEGIN 578BEGIN
577 AFX_IDS_APP_TITLE "PUMPKIN" 579 AFX_IDS_APP_TITLE "PUMPKIN"
578END 580END
579 581
580#endif // English (U.S.) resources 582#endif // English (U.S.) resources
581///////////////////////////////////////////////////////////////////////////// 583/////////////////////////////////////////////////////////////////////////////
582 584
583 585
584 586
585#ifndef APSTUDIO_INVOKED 587#ifndef APSTUDIO_INVOKED
586///////////////////////////////////////////////////////////////////////////// 588/////////////////////////////////////////////////////////////////////////////
587// 589//
588// Generated from the TEXTINCLUDE 3 resource. 590// Generated from the TEXTINCLUDE 3 resource.
589// 591//
590#define _AFX_NO_SPLITTER_RESOURCES 592#define _AFX_NO_SPLITTER_RESOURCES
591#define _AFX_NO_OLE_RESOURCES 593#define _AFX_NO_OLE_RESOURCES
592#define _AFX_NO_TRACKER_RESOURCES 594#define _AFX_NO_TRACKER_RESOURCES
593#define _AFX_NO_PROPERTY_RESOURCES 595#define _AFX_NO_PROPERTY_RESOURCES
594 596
595#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) 597#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
596#ifdef _WIN32 598#ifdef _WIN32
597LANGUAGE 9, 1 599LANGUAGE 9, 1
598#pragma code_page(1252) 600#pragma code_page(1252)
599#endif 601#endif
600#include "res\pumpkin.rc2" // non-Microsoft Visual C++ edited resources 602#include "res\PumpKIN.rc2" // non-Microsoft Visual C++ edited resources
601#include "afxres.rc" // Standard components 603#include "afxres.rc" // Standard components
602#endif 604#endif
603///////////////////////////////////////////////////////////////////////////// 605/////////////////////////////////////////////////////////////////////////////
604#endif // not APSTUDIO_INVOKED 606#endif // not APSTUDIO_INVOKED
605 607
diff --git a/resource.h b/resource.h
index fcdda9c..8755a55 100644
--- a/resource.h
+++ b/resource.h
@@ -1,147 +1,148 @@
1//{{NO_DEPENDENCIES}} 1//{{NO_DEPENDENCIES}}
2// Microsoft Developer Studio generated include file. 2// Microsoft Developer Studio generated include file.
3// Used by PumpKIN.rc 3// Used by PumpKIN.rc
4// 4//
5#define IDM_ABOUTBOX 0x0010 5#define IDM_ABOUTBOX 0x0010
6#define IDD_ABOUTBOX 100 6#define IDD_ABOUTBOX 100
7#define IDS_ABOUTBOX 101 7#define IDS_ABOUTBOX 101
8#define IDC_TRAYICON 101 8#define IDC_TRAYICON 101
9#define IDD_PUMPKIN_DIALOG 102 9#define IDD_PUMPKIN_DIALOG 102
10#define IDS_FMT_BYTES 102 10#define IDS_FMT_BYTES 102
11#define IDP_SOCKETS_INIT_FAILED 103 11#define IDP_SOCKETS_INIT_FAILED 103
12#define IDS_TFTP_ERROR_ACCESS 104 12#define IDS_TFTP_ERROR_ACCESS 104
13#define IDS_TFTP_ERROR_NOTFOUND 105 13#define IDS_TFTP_ERROR_NOTFOUND 105
14#define IDS_TFTP_ERROR_DIRFULL 106 14#define IDS_TFTP_ERROR_DIRFULL 106
15#define IDD_PROPS_SERVER 106 15#define IDD_PROPS_SERVER 106
16#define IDS_TFTP_ERROR_SHARING 107 16#define IDS_TFTP_ERROR_SHARING 107
17#define IDD_PROPS_NETWORK 107 17#define IDD_PROPS_NETWORK 107
18#define IDS_TFTP_ERROR_DISKFULL 108 18#define IDS_TFTP_ERROR_DISKFULL 108
19#define IDS_TFTP_ERROR_UNDEFINED 109 19#define IDS_TFTP_ERROR_UNDEFINED 109
20#define IDS_LOG_START 110 20#define IDS_LOG_START 110
21#define IDS_LOG_LISTENRECEIVEERROR 111 21#define IDS_LOG_LISTENRECEIVEERROR 111
22#define IDS_LOG_LISTENACCEPTERROR 112 22#define IDS_LOG_LISTENACCEPTERROR 112
23#define IDS_LOG_RRQSERVE 113 23#define IDS_LOG_RRQSERVE 113
24#define IDS_LOG_LISTENOPCODE 114 24#define IDS_LOG_LISTENOPCODE 114
25#define IDS_LOG_XFERUDPSEND 115 25#define IDS_LOG_XFERUDPSEND 115
26#define IDS_LOG_XFERRECEIVE 116 26#define IDS_LOG_XFERRECEIVE 116
27#define IDS_LOG_XFERSEND 117 27#define IDS_LOG_XFERSEND 117
28#define IDS_LOG_XFERUDPRECEIVE 118 28#define IDS_LOG_XFERUDPRECEIVE 118
29#define IDS_LOG_XFERSOURCETID 119 29#define IDS_LOG_XFERSOURCETID 119
30#define IDS_LOG_SENTTFTPERROR 120 30#define IDS_LOG_SENTTFTPERROR 120
31#define IDS_LOG_GOTTFTPERROR 121 31#define IDS_LOG_GOTTFTPERROR 121
32#define IDS_LOG_XFEROPCODE 122 32#define IDS_LOG_XFEROPCODE 122
33#define IDS_LOG_XFERRRQFINISHED 123 33#define IDS_LOG_XFERRRQFINISHED 123
34#define IDS_TITLE_OPTIONS 124 34#define IDS_TITLE_OPTIONS 124
35#define IDS_LOG_WRQSERVE 125 35#define IDS_LOG_WRQSERVE 125
36#define IDS_TFTP_ERROR_FAILEDTORENAME 126 36#define IDS_TFTP_ERROR_FAILEDTORENAME 126
37#define IDS_RENAME_TITLE 127 37#define IDS_RENAME_TITLE 127
38#define IDR_MAINFRAME 128 38#define IDR_MAINFRAME 128
39#define IDS_LOG_TIMEDOUT 128 39#define IDS_LOG_TIMEDOUT 128
40#define IDS_CONFIRMEXIT_TITLE 129 40#define IDS_CONFIRMEXIT_TITLE 129
41#define IDI_RRQ 129 41#define IDI_RRQ 129
42#define IDS_CONFIRMEXIT_TEXT 130 42#define IDS_CONFIRMEXIT_TEXT 130
43#define IDI_WRQ 130 43#define IDI_WRQ 130
44#define IDD_CONFIRM_RRQ 131 44#define IDD_CONFIRM_RRQ 131
45#define IDS_LOG_XFERWRQFINISHED 131 45#define IDS_LOG_XFERWRQFINISHED 131
46#define IDD_CONFIRM_WRQ 132 46#define IDD_CONFIRM_WRQ 132
47#define IDB_BACKGROUND 132 47#define IDB_BACKGROUND 132
48#define IDS_LOG_XFERABORTED 132 48#define IDS_LOG_XFERABORTED 132
49#define IDS_TITLE_PUTREQUEST 133 49#define IDS_TITLE_PUTREQUEST 133
50#define IDS_TITLE_GETREQUEST 134 50#define IDS_TITLE_GETREQUEST 134
51#define IDR_WAVE_RING 135 51#define IDR_WAVE_RING 135
52#define IDS_TALKHEADING 135 52#define IDS_TALKHEADING 135
53#define IDS_WTALKHEADING 135 53#define IDS_WTALKHEADING 135
54#define IDR_WAVE_FINISHED 136 54#define IDR_WAVE_FINISHED 136
55#define IDS_TITLE_BROWSEFILE 136 55#define IDS_TITLE_BROWSEFILE 136
56#define IDD_REQUEST 137 56#define IDD_REQUEST 137
57#define IDS_LOG_RESOLVEFAILED 137 57#define IDS_LOG_RESOLVEFAILED 137
58#define IDS_LOG_FAILEDLOCALFILE 138 58#define IDS_LOG_FAILEDLOCALFILE 138
59#define IDD_PROPS_SOUNDS 138 59#define IDD_PROPS_SOUNDS 138
60#define IDS_LOG_FAILEDTOOPEN 139 60#define IDS_LOG_FAILEDTOOPEN 139
61#define IDM_POPUPS 140 61#define IDM_POPUPS 140
62#define IDS_OTALXHEADING 140 62#define IDS_OTALXHEADING 140
63#define IDS_REGISTRYKEY 141 63#define IDS_REGISTRYKEY 141
64#define IDS_KLEVERNET_URL 142 64#define IDS_KLEVERNET_URL 142
65#define IDR_WAVE_ABORTED 142 65#define IDR_WAVE_ABORTED 142
66#define IDS_LOGTIMEFORMAT 143 66#define IDS_LOGTIMEFORMAT 143
67#define IDS_DROPFILES_TITLE 144 67#define IDS_DROPFILES_TITLE 144
68#define IDS_NOMULTIPLEDROP_TEXT 145 68#define IDS_NOMULTIPLEDROP_TEXT 145
69#define IDI_BROWSE 145 69#define IDI_BROWSE 145
70#define IDS_LOG_REQUESTING 146 70#define IDS_LOG_REQUESTING 146
71#define IDS_LOG_SENDING 147 71#define IDS_LOG_SENDING 147
72#define IDS_WTALKAT 148 72#define IDS_WTALKAT 148
73#define IDS_OTALXAT 149 73#define IDS_OTALXAT 149
74#define IDI_PLAY 149 74#define IDI_PLAY 149
75#define IDS_TFTP_ERROR_TSIZE 150 75#define IDS_TFTP_ERROR_TSIZE 150
76#define IDS_TFTP_ERROR_BSIZE 151 76#define IDS_TFTP_ERROR_BSIZE 151
77#define IDS_TFTP_ERROR_TOUT 152 77#define IDS_TFTP_ERROR_TOUT 152
78#define IDS_SELECT_TFTPROOT 153 78#define IDS_SELECT_TFTPROOT 153
79#define IDS_FILTER_WAV 154 79#define IDS_FILTER_WAV 154
80#define IDS_TITLE_WAV 155 80#define IDS_TITLE_WAV 155
81#define IDS_BOX_CANTBIND 156
81#define IDC_KLEVERNET 1000 82#define IDC_KLEVERNET 1000
82#define IDC_CONNECTIONS 1001 83#define IDC_CONNECTIONS 1001
83#define IDC_LOG 1003 84#define IDC_LOG 1003
84#define IDC_GET 1004 85#define IDC_GET 1004
85#define IDC_PUT 1005 86#define IDC_PUT 1005
86#define IDC_ABORT 1006 87#define IDC_ABORT 1006
87#define IDC_EXIT 1007 88#define IDC_EXIT 1007
88#define IDC_TFTPROOT 1008 89#define IDC_TFTPROOT 1008
89#define IDC_TFTPSUBDIRS 1009 90#define IDC_TFTPSUBDIRS 1009
90#define IDC_RRQ_GIVEALL 1010 91#define IDC_RRQ_GIVEALL 1010
91#define IDC_RRQ_ALWAYSCONFIRM 1011 92#define IDC_RRQ_ALWAYSCONFIRM 1011
92#define IDC_RRQ_DENYALL 1012 93#define IDC_RRQ_DENYALL 1012
93#define IDC_WRQ_TAKEALL 1013 94#define IDC_WRQ_TAKEALL 1013
94#define IDC_WRQ_PROMPTEXISTING 1014 95#define IDC_WRQ_PROMPTEXISTING 1014
95#define IDC_WRQ_ALWAYSCONFIRM 1015 96#define IDC_WRQ_ALWAYSCONFIRM 1015
96#define IDC_WRQ_DENYALL 1016 97#define IDC_WRQ_DENYALL 1016
97#define IDC_PROMPTTIMEOUT 1017 98#define IDC_PROMPTTIMEOUT 1017
98#define IDC_LISTENPORT 1018 99#define IDC_LISTENPORT 1018
99#define IDC_LISTENSPIN 1019 100#define IDC_LISTENSPIN 1019
100#define IDC_SPEAKPORT 1020 101#define IDC_SPEAKPORT 1020
101#define IDC_SPEAKSPIN 1021 102#define IDC_SPEAKSPIN 1021
102#define IDC_MAXUDPSIZE 1022 103#define IDC_MAXUDPSIZE 1022
103#define IDC_MAXUDPSPIN 1023 104#define IDC_MAXUDPSPIN 1023
104#define IDC_TIMEOUT 1024 105#define IDC_TIMEOUT 1024
105#define IDC_TIMESPIN 1025 106#define IDC_TIMESPIN 1025
106#define IDC_OPTIONS 1026 107#define IDC_OPTIONS 1026
107#define IDC_BLOCKSIZE 1026 108#define IDC_BLOCKSIZE 1026
108#define IDC_BSIZESPIN 1027 109#define IDC_BSIZESPIN 1027
109#define IDC_HOST 1028 110#define IDC_HOST 1028
110#define IDC_FILE 1029 111#define IDC_FILE 1029
111#define IDC_RENAME 1030 112#define IDC_RENAME 1030
112#define IDC_REMOTEFILE 1030 113#define IDC_REMOTEFILE 1030
113#define IDC_RESUME 1031 114#define IDC_RESUME 1031
114#define IDC_REFRESH 1032 115#define IDC_REFRESH 1032
115#define IDC_BROWSE 1034 116#define IDC_BROWSE 1034
116#define IDC_TALKS 1035 117#define IDC_TALKS 1035
117#define IDC_LOCALFILE 1036 118#define IDC_LOCALFILE 1036
118#define IDC_TYPE 1037 119#define IDC_TYPE 1037
119#define IDC_BSIZE 1039 120#define IDC_BSIZE 1039
120#define IDC_RING 1041 121#define IDC_RING 1041
121#define IDC_RING_BROWSE 1042 122#define IDC_RING_BROWSE 1042
122#define IDC_RING_PLAY 1043 123#define IDC_RING_PLAY 1043
123#define IDC_FINISHED 1044 124#define IDC_FINISHED 1044
124#define IDC_FINISHED_BROWSE 1045 125#define IDC_FINISHED_BROWSE 1045
125#define IDC_FINISHED_PLAY 1046 126#define IDC_FINISHED_PLAY 1046
126#define IDC_ABORTED 1047 127#define IDC_ABORTED 1047
127#define IDC_ABORTED_BROWSE 1048 128#define IDC_ABORTED_BROWSE 1048
128#define IDC_ABORTED_PLAY 1049 129#define IDC_ABORTED_PLAY 1049
129#define ID_TRAY_HELP 32771 130#define ID_TRAY_HELP 32771
130#define ID_TRAY_ABOUTPUMPKIN 32772 131#define ID_TRAY_ABOUTPUMPKIN 32772
131#define ID_TRAY_EXIT 32773 132#define ID_TRAY_EXIT 32773
132#define ID_TRAY_SENDFILE 32774 133#define ID_TRAY_SENDFILE 32774
133#define ID_TRAY_FETCHFILE 32775 134#define ID_TRAY_FETCHFILE 32775
134#define ID_TRAY_OPTIONS 32776 135#define ID_TRAY_OPTIONS 32776
135#define ID_TRAY_SHOWPUMPKINWINDOW 32777 136#define ID_TRAY_SHOWPUMPKINWINDOW 32777
136#define ID_TRAY_OPENFILESFOLDER 32778 137#define ID_TRAY_OPENFILESFOLDER 32778
137 138
138// Next default values for new objects 139// Next default values for new objects
139// 140//
140#ifdef APSTUDIO_INVOKED 141#ifdef APSTUDIO_INVOKED
141#ifndef APSTUDIO_READONLY_SYMBOLS 142#ifndef APSTUDIO_READONLY_SYMBOLS
142#define _APS_NEXT_RESOURCE_VALUE 150 143#define _APS_NEXT_RESOURCE_VALUE 150
143#define _APS_NEXT_COMMAND_VALUE 32780 144#define _APS_NEXT_COMMAND_VALUE 32780
144#define _APS_NEXT_CONTROL_VALUE 1043 145#define _APS_NEXT_CONTROL_VALUE 1043
145#define _APS_NEXT_SYMED_VALUE 102 146#define _APS_NEXT_SYMED_VALUE 102
146#endif 147#endif
147#endif 148#endif