summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--PumpKINDlg.cpp8
-rw-r--r--install/install.cpp2
-rw-r--r--install/install.rc8
-rw-r--r--pumpkin.rc10
4 files changed, 16 insertions, 12 deletions
diff --git a/PumpKINDlg.cpp b/PumpKINDlg.cpp
index 1e6d03f..0b3bf41 100644
--- a/PumpKINDlg.cpp
+++ b/PumpKINDlg.cpp
@@ -1,1973 +1,1977 @@
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 return -1; 330 return -1;
331 } 331 }
332 332
333 if(!m_Trayer->Create(NULL,"PumpKIN TrayIcon",WS_CHILD,CRect(0,0,0,0),this,0)){ 333 if(!m_Trayer->Create(NULL,"PumpKIN TrayIcon",WS_CHILD,CRect(0,0,0,0),this,0)){
334 TRACE0("Failed to create trayer\n"); 334 TRACE0("Failed to create trayer\n");
335 return -1; 335 return -1;
336 } 336 }
337 337
338NOTIFYICONDATA nid; 338NOTIFYICONDATA nid;
339 memset(&nid,0,sizeof(nid)); 339 memset(&nid,0,sizeof(nid));
340 nid.cbSize=sizeof(nid); 340 nid.cbSize=sizeof(nid);
341 nid.hWnd=m_Trayer->m_hWnd; 341 nid.hWnd=m_Trayer->m_hWnd;
342 nid.uID=IDC_TRAYICON; 342 nid.uID=IDC_TRAYICON;
343 nid.uFlags=NIF_MESSAGE|NIF_ICON|NIF_TIP; 343 nid.uFlags=NIF_MESSAGE|NIF_ICON|NIF_TIP;
344 nid.uCallbackMessage=WM_TRAYICON; 344 nid.uCallbackMessage=WM_TRAYICON;
345 nid.hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME); 345 nid.hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);
346 // *** Load from resource 346 // *** Load from resource
347 strcpy(nid.szTip,"PumpKIN"); 347 strcpy(nid.szTip,"PumpKIN");
348 VERIFY(Shell_NotifyIcon(NIM_ADD,&nid)); 348 VERIFY(Shell_NotifyIcon(NIM_ADD,&nid));
349 349
350 return 0; 350 return 0;
351} 351}
352 352
353void CListenSocket::OnReceive(int nErrorCode) 353void CListenSocket::OnReceive(int nErrorCode)
354{ 354{
355 ASSERT(m_Daddy); 355 ASSERT(m_Daddy);
356 if(nErrorCode){ 356 if(nErrorCode){
357 m_Daddy->LogLine(IDS_LOG_LISTENRECEIVEERROR); 357 m_Daddy->LogLine(IDS_LOG_LISTENRECEIVEERROR);
358 return; 358 return;
359 } 359 }
360DWORD fionread = 0; 360DWORD fionread = 0;
361 VERIFY(IOCtl(FIONREAD,&fionread));// *** Do some checking on the value acquired 361 VERIFY(IOCtl(FIONREAD,&fionread));// *** Do some checking on the value acquired
362tftp *tftpRQ = tftp::Allocate(fionread); 362tftp *tftpRQ = tftp::Allocate(fionread);
363 ASSERT(tftpRQ); 363 ASSERT(tftpRQ);
364SOCKADDR_IN sin; 364SOCKADDR_IN sin;
365 if(!tftpRQ->Receive(this,fionread,&sin)){ 365 if(!tftpRQ->Receive(this,fionread,&sin)){
366 m_Daddy->LogLine(IDS_LOG_LISTENACCEPTERROR); 366 m_Daddy->LogLine(IDS_LOG_LISTENACCEPTERROR);
367 delete tftpRQ; 367 delete tftpRQ;
368 return; 368 return;
369 } 369 }
370 #ifndefNDEBUG 370 #ifndefNDEBUG
371CString tmp; 371CString tmp;
372 tmp.Format("%u - %s - %u\n",tftpRQ->Opcode(),inet_ntoa(sin.sin_addr),sin.sin_port); 372 tmp.Format("%u - %s - %u\n",tftpRQ->Opcode(),inet_ntoa(sin.sin_addr),sin.sin_port);
373 TRACE0(tmp); 373 TRACE0(tmp);
374#endif 374#endif
375POSITION p = m_Daddy->m_Xfers.GetStartPosition(); 375POSITION p = m_Daddy->m_Xfers.GetStartPosition();
376 while(p){ 376 while(p){
377 SOCKET key; 377 SOCKET key;
378 CXferSocket *sock; 378 CXferSocket *sock;
379 m_Daddy->m_Xfers.GetNextAssoc(p,key,sock); 379 m_Daddy->m_Xfers.GetNextAssoc(p,key,sock);
380 ASSERT(sock); 380 ASSERT(sock);
381 if(sock->m_Peer.sin_addr.s_addr==sin.sin_addr.s_addr && sock->m_Peer.sin_port==sin.sin_port){ 381 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"); 382 TRACE0("Ignoring request which we are already processing\n");
383 delete tftpRQ; 383 delete tftpRQ;
384 return; 384 return;
385 } 385 }
386 } 386 }
387 switch(tftpRQ->Opcode()){ 387 switch(tftpRQ->Opcode()){
388 case tftp::opRRQ: 388 case tftp::opRRQ:
389 // Read Request 389 // Read Request
390 { 390 {
391 CString tmp; 391 CString tmp;
392 tmp.Format(IDS_LOG_RRQSERVE,tftpRQ->rqFileName(),tftpRQ->rqType(),inet_ntoa(sin.sin_addr)); 392 tmp.Format(IDS_LOG_RRQSERVE,tftpRQ->rqFileName(),tftpRQ->rqType(),inet_ntoa(sin.sin_addr));
393 m_Daddy->LogLine(tmp); 393 m_Daddy->LogLine(tmp);
394 CRRQSocket *s = new CRRQSocket(m_Daddy,tftpRQ->rqFileName(),tftpRQ->rqType(),&sin); 394 CRRQSocket *s = new CRRQSocket(m_Daddy,tftpRQ->rqFileName(),tftpRQ->rqType(),&sin);
395 ASSERT(s); 395 ASSERT(s);
396 tftpRQ->GetOptions(&s->m_Options); 396 tftpRQ->GetOptions(&s->m_Options);
397 if(!s->Create()) 397 if(!s->Create())
398 s->Destroy(FALSE); 398 s->Destroy(FALSE);
399 } 399 }
400 break; 400 break;
401 case tftp::opWRQ: 401 case tftp::opWRQ:
402 // Write Request 402 // Write Request
403 { 403 {
404 CString tmp; 404 CString tmp;
405 tmp.Format(IDS_LOG_WRQSERVE,tftpRQ->rqFileName(),tftpRQ->rqType(),inet_ntoa(sin.sin_addr)); 405 tmp.Format(IDS_LOG_WRQSERVE,tftpRQ->rqFileName(),tftpRQ->rqType(),inet_ntoa(sin.sin_addr));
406 m_Daddy->LogLine(tmp); 406 m_Daddy->LogLine(tmp);
407 CWRQSocket *s = new CWRQSocket(m_Daddy,tftpRQ->rqFileName(),tftpRQ->rqType(),&sin); 407 CWRQSocket *s = new CWRQSocket(m_Daddy,tftpRQ->rqFileName(),tftpRQ->rqType(),&sin);
408 ASSERT(s); 408 ASSERT(s);
409 tftpRQ->GetOptions(&s->m_Options); 409 tftpRQ->GetOptions(&s->m_Options);
410 if(!s->Create(NULL,NULL)) 410 if(!s->Create(NULL,NULL))
411 s->Destroy(FALSE); 411 s->Destroy(FALSE);
412 } 412 }
413 break; 413 break;
414 default: 414 default:
415 m_Daddy->LogLine(IDS_LOG_LISTENOPCODE); 415 m_Daddy->LogLine(IDS_LOG_LISTENOPCODE);
416 delete tftpRQ; 416 delete tftpRQ;
417 return; 417 return;
418 } 418 }
419 delete tftpRQ; 419 delete tftpRQ;
420} 420}
421 421
422BOOL tftp::Receive(CAsyncSocket* socket,UINT maxLength,SOCKADDR_IN *sin) 422BOOL tftp::Receive(CAsyncSocket* socket,UINT maxLength,SOCKADDR_IN *sin)
423{ 423{
424 ASSERT(socket); 424 ASSERT(socket);
425int saddrLen = sizeof(SOCKADDR_IN); 425int saddrLen = sizeof(SOCKADDR_IN);
426 length = sin ? 426 length = sin ?
427 socket->ReceiveFrom(udpBase(),maxLength,(SOCKADDR*)sin,&saddrLen) 427 socket->ReceiveFrom(udpBase(),maxLength,(SOCKADDR*)sin,&saddrLen)
428 : 428 :
429 socket->Receive(udpBase(),maxLength) 429 socket->Receive(udpBase(),maxLength)
430 ; 430 ;
431 if(!length) 431 if(!length)
432 return FALSE; 432 return FALSE;
433 if(length==(tftpLength)SOCKET_ERROR) 433 if(length==(tftpLength)SOCKET_ERROR)
434 return FALSE; 434 return FALSE;
435 return TRUE; 435 return TRUE;
436} 436}
437 437
438UINT tftp::Opcode() 438UINT tftp::Opcode()
439{ 439{
440 return REVERSEBYTES(opcode); 440 return REVERSEBYTES(opcode);
441} 441}
442 442
443CString tftp::rqFileName() 443CString tftp::rqFileName()
444{ 444{
445 ASSERT(length); 445 ASSERT(length);
446 ASSERT(Opcode()==opRRQ || Opcode()==opWRQ); 446 ASSERT(Opcode()==opRRQ || Opcode()==opWRQ);
447CString rv; 447CString rv;
448 if(memchr(&data.m_RQ.data,0,length-sizeof(opcode))) 448 if(memchr(&data.m_RQ.data,0,length-sizeof(opcode)))
449 rv = (LPCTSTR)data.m_RQ.data; 449 rv = (LPCTSTR)data.m_RQ.data;
450 return rv; 450 return rv;
451} 451}
452 452
453CString tftp::rqType() 453CString tftp::rqType()
454{ 454{
455 ASSERT(length); 455 ASSERT(length);
456 ASSERT(Opcode()==opRRQ || Opcode()==opWRQ); 456 ASSERT(Opcode()==opRRQ || Opcode()==opWRQ);
457CString rv; 457CString rv;
458char *tmp = (char*)memchr(&data.m_RQ.data,0,length-sizeof(opcode)); 458char *tmp = (char*)memchr(&data.m_RQ.data,0,length-sizeof(opcode));
459 if(tmp++) 459 if(tmp++)
460 rv = (LPCTSTR)tmp; 460 rv = (LPCTSTR)tmp;
461 return rv; 461 return rv;
462} 462}
463 463
464UINT tftp::GetOptions(tftp::tftpOptions* ops) 464UINT tftp::GetOptions(tftp::tftpOptions* ops)
465{ 465{
466 ASSERT(length); 466 ASSERT(length);
467 ASSERT(Opcode()==opRRQ || Opcode()==opWRQ || Opcode()==opOACK); 467 ASSERT(Opcode()==opRRQ || Opcode()==opWRQ || Opcode()==opOACK);
468 ASSERT(ops); 468 ASSERT(ops);
469tftpOptions& o = *ops; 469tftpOptions& o = *ops;
470LPSTR base = (LPSTR)&data.m_RQ.data; 470LPSTR base = (LPSTR)&data.m_RQ.data;
471UINT basePtr = 0; 471UINT basePtr = 0;
472 if(Opcode()==opRRQ || Opcode()==opWRQ){ 472 if(Opcode()==opRRQ || Opcode()==opWRQ){
473 base = (LPSTR)memchr(&data.m_RQ.data,0,length-sizeof(opcode)); 473 base = (LPSTR)memchr(&data.m_RQ.data,0,length-sizeof(opcode));
474 if(!base) 474 if(!base)
475 return 0; 475 return 0;
476 base++; 476 base++;
477 basePtr = (base-(LPSTR)&data.m_RQ.data); 477 basePtr = (base-(LPSTR)&data.m_RQ.data);
478 base = (LPSTR)memchr(base,0,length-basePtr); 478 base = (LPSTR)memchr(base,0,length-basePtr);
479 if(!base) 479 if(!base)
480 return 0; 480 return 0;
481 base++; 481 base++;
482 basePtr = (base-(LPSTR)&data.m_RQ.data); 482 basePtr = (base-(LPSTR)&data.m_RQ.data);
483 } 483 }
484 ops->RemoveAll(); 484 ops->RemoveAll();
485UINT rv = 0; 485UINT rv = 0;
486 while(basePtr<(length-sizeof(opcode))){ 486 while(basePtr<(length-sizeof(opcode))){
487 CString onam = (LPSTR)&data.m_RQ.data[basePtr]; 487 CString onam = (LPSTR)&data.m_RQ.data[basePtr];
488 basePtr+=onam.GetLength()+1; 488 basePtr+=onam.GetLength()+1;
489 CString oval = (LPSTR)&data.m_RQ.data[basePtr]; 489 CString oval = (LPSTR)&data.m_RQ.data[basePtr];
490 basePtr+=oval.GetLength()+1; 490 basePtr+=oval.GetLength()+1;
491 onam.MakeLower(); 491 onam.MakeLower();
492 o[onam]=oval; 492 o[onam]=oval;
493 rv++; 493 rv++;
494 } 494 }
495 return rv; 495 return rv;
496} 496}
497 497
498tftp::tftp() 498tftp::tftp()
499{ 499{
500 length=0; 500 length=0;
501} 501}
502 502
503 503
504void CXferSocket::OnSend(int nErrorCode) 504void CXferSocket::OnSend(int nErrorCode)
505{ 505{
506 if(nErrorCode){ 506 if(nErrorCode){
507 ASSERT(m_Daddy); 507 ASSERT(m_Daddy);
508 m_Daddy->LogLine(IDS_LOG_XFERSEND); 508 m_Daddy->LogLine(IDS_LOG_XFERSEND);
509 return; 509 return;
510 } 510 }
511 if(!m_Queue.IsEmpty()){ 511 if(!m_Queue.IsEmpty()){
512 tftp *p = m_Queue.GetHead(); 512 tftp *p = m_Queue.GetHead();
513 ASSERT(p); 513 ASSERT(p);
514 m_Queue.RemoveHead(); 514 m_Queue.RemoveHead();
515 if(!p->Send(this,&m_Peer)){ 515 if(!p->Send(this,&m_Peer)){
516 ASSERT(m_Daddy); 516 ASSERT(m_Daddy);
517 m_Daddy->LogLine(IDS_LOG_XFERUDPSEND); 517 m_Daddy->LogLine(IDS_LOG_XFERUDPSEND);
518 } 518 }
519 delete p; 519 delete p;
520 } 520 }
521 DoSelect(); 521 DoSelect();
522 if(m_Queue.IsEmpty()){ 522 if(m_Queue.IsEmpty()){
523 switch(state){ 523 switch(state){
524 case stateDeny: 524 case stateDeny:
525 Destroy(FALSE); 525 Destroy(FALSE);
526 break; 526 break;
527 case stateFinish: 527 case stateFinish:
528 Destroy(TRUE); 528 Destroy(TRUE);
529 break; 529 break;
530 } 530 }
531 } 531 }
532} 532}
533 533
534BOOL tftp::Send(CAsyncSocket *socket,SOCKADDR_IN* saddr) 534BOOL tftp::Send(CAsyncSocket *socket,SOCKADDR_IN* saddr)
535{ 535{
536 ASSERT(socket); 536 ASSERT(socket);
537int rv = socket->SendTo(udpBase(),length,(SOCKADDR*)saddr,sizeof(SOCKADDR_IN)); 537int rv = socket->SendTo(udpBase(),length,(SOCKADDR*)saddr,sizeof(SOCKADDR_IN));
538 if(rv!=length) 538 if(rv!=length)
539 return FALSE; 539 return FALSE;
540 return TRUE; 540 return TRUE;
541} 541}
542 542
543void CXferSocket::DoSelect() 543void CXferSocket::DoSelect()
544{ 544{
545 if(m_Peer.sin_addr.s_addr!=INADDR_NONE) 545 if(m_Peer.sin_addr.s_addr!=INADDR_NONE)
546 AsyncSelect(FD_CLOSE|FD_READ|(m_Queue.IsEmpty()?0:FD_WRITE)); 546 AsyncSelect(FD_CLOSE|FD_READ|(m_Queue.IsEmpty()?0:FD_WRITE));
547} 547}
548 548
549void CXferSocket::OnReceive(int nErrorCode) 549void CXferSocket::OnReceive(int nErrorCode)
550{ 550{
551 if(nErrorCode){ 551 if(nErrorCode){
552 ASSERT(m_Daddy); 552 ASSERT(m_Daddy);
553 m_Daddy->LogLine(IDS_LOG_XFERRECEIVE); 553 m_Daddy->LogLine(IDS_LOG_XFERRECEIVE);
554 return; 554 return;
555 } 555 }
556 ASSERT(m_Daddy); 556 ASSERT(m_Daddy);
557DWORD fionread = 0; 557DWORD fionread = 0;
558 VERIFY(IOCtl(FIONREAD,&fionread)); 558 VERIFY(IOCtl(FIONREAD,&fionread));
559tftp *p = tftp::Allocate(fionread); 559tftp *p = tftp::Allocate(fionread);
560 ASSERT(p); 560 ASSERT(p);
561SOCKADDR_IN sin; 561SOCKADDR_IN sin;
562 if(!p->Receive(this,fionread,&sin)){ 562 if(!p->Receive(this,fionread,&sin)){
563 m_Daddy->LogLine(IDS_LOG_XFERUDPRECEIVE); 563 m_Daddy->LogLine(IDS_LOG_XFERUDPRECEIVE);
564 delete p; 564 delete p;
565 }else 565 }else
566 if(m_Peer.sin_addr.s_addr==INADDR_NONE){ 566 if(m_Peer.sin_addr.s_addr==INADDR_NONE){
567 m_Peer.sin_addr=sin.sin_addr; 567 m_Peer.sin_addr=sin.sin_addr;
568 m_Peer.sin_port=sin.sin_port; 568 m_Peer.sin_port=sin.sin_port;
569 } 569 }
570BOOL alive = TRUE; 570BOOL alive = TRUE;
571 if(state==stateInit){ 571 if(state==stateInit){
572 state=stateXfer; 572 state=stateXfer;
573 m_Peer.sin_port=sin.sin_port; 573 m_Peer.sin_port=sin.sin_port;
574 UpdateList(); 574 UpdateList();
575 } 575 }
576 if(sin.sin_addr.s_addr!=m_Peer.sin_addr.s_addr || sin.sin_port!=m_Peer.sin_port){ 576 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); 577 m_Daddy->LogLine(IDS_LOG_XFERSOURCETID);
578 // *** Bounce it! 578 // *** Bounce it!
579 }else{ 579 }else{
580 alive = OnTFTP(p); 580 alive = OnTFTP(p);
581 } 581 }
582 delete p; 582 delete p;
583 if(alive){ 583 if(alive){
584 DoSelect(); 584 DoSelect();
585 ResetTimeout(); 585 ResetTimeout();
586 } 586 }
587} 587}
588 588
589void CXferSocket::SetPeer(SOCKADDR_IN *sin) 589void CXferSocket::SetPeer(SOCKADDR_IN *sin)
590{ 590{
591 ASSERT(sin); 591 ASSERT(sin);
592 memmove(&m_Peer,sin,sizeof(m_Peer)); 592 memmove(&m_Peer,sin,sizeof(m_Peer));
593} 593}
594 594
595void CXferSocket::UpdateList() 595void CXferSocket::UpdateList()
596{ 596{
597 ASSERT(m_Daddy); 597 ASSERT(m_Daddy);
598LV_FINDINFO lvf; 598LV_FINDINFO lvf;
599 memset(&lvf,0,sizeof(lvf)); 599 memset(&lvf,0,sizeof(lvf));
600 lvf.flags=LVFI_PARAM; 600 lvf.flags=LVFI_PARAM;
601 lvf.lParam=(LPARAM)this; 601 lvf.lParam=(LPARAM)this;
602int i = m_Daddy->m_List.FindItem(&lvf); 602int i = m_Daddy->m_List.FindItem(&lvf);
603 if(i<0){ 603 if(i<0){
604 ASSERT(IsKindOf(RUNTIME_CLASS(CRRQSocket)) || IsKindOf(RUNTIME_CLASS(CWRQSocket))); 604 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); 605 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)); 606 ASSERT(!(i<0));
607 m_Daddy->m_List.SetItemData(i,(DWORD)this); 607 m_Daddy->m_List.SetItemData(i,(DWORD)this);
608 } 608 }
609 m_Daddy->m_List.SetItemText(i,CPumpKINDlg::subitemFile,m_FileName); 609 m_Daddy->m_List.SetItemText(i,CPumpKINDlg::subitemFile,m_FileName);
610 m_Daddy->m_List.SetItemText(i,CPumpKINDlg::subitemType,m_Type); 610 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)); 611 m_Daddy->m_List.SetItemText(i,CPumpKINDlg::subitemPeer,inet_ntoa(m_Peer.sin_addr));
612CString tmp; 612CString tmp;
613 tmp.Format(IDS_FMT_BYTES,GetACK()); 613 tmp.Format(IDS_FMT_BYTES,GetACK());
614 m_Daddy->m_List.SetItemText(i,CPumpKINDlg::subitemBytes,tmp); 614 m_Daddy->m_List.SetItemText(i,CPumpKINDlg::subitemBytes,tmp);
615 if(m_xferSize>=0){ 615 if(m_xferSize>=0){
616 tmp.Format(IDS_FMT_BYTES,m_xferSize); 616 tmp.Format(IDS_FMT_BYTES,m_xferSize);
617 m_Daddy->m_List.SetItemText(i,CPumpKINDlg::subitemTSize,tmp); 617 m_Daddy->m_List.SetItemText(i,CPumpKINDlg::subitemTSize,tmp);
618 } 618 }
619} 619}
620 620
621CXferSocket::CXferSocket() 621CXferSocket::CXferSocket()
622 : m_wndResolver(NULL), m_Retry(NULL), m_bRetry(FALSE), 622 : m_wndResolver(NULL), m_Retry(NULL), m_bRetry(FALSE),
623 m_blkSize(512), m_timeOut(30), m_xferSize(-1), 623 m_blkSize(512), m_timeOut(30), m_xferSize(-1),
624 m__blkSize(512), m__timeOut(30) 624 m__blkSize(512), m__timeOut(30)
625{ 625{
626 m_Daddy=NULL; 626 m_Daddy=NULL;
627 m_Peer.sin_addr.s_addr=INADDR_NONE; 627 m_Peer.sin_addr.s_addr=INADDR_NONE;
628 m_Peer.sin_family=AF_INET; 628 m_Peer.sin_family=AF_INET;
629 state=stateNone; 629 state=stateNone;
630} 630}
631 631
632ULONG CXferSocket::GetACK() 632ULONG CXferSocket::GetACK()
633{ 633{
634 return 0; 634 return 0;
635} 635}
636 636
637CXferSocket::CXferSocket(CPumpKINDlg *daddy,LPCTSTR fileName,LPCTSTR type,SOCKADDR_IN* sin) 637CXferSocket::CXferSocket(CPumpKINDlg *daddy,LPCTSTR fileName,LPCTSTR type,SOCKADDR_IN* sin)
638 : m_wndResolver(NULL), m_Retry(NULL), m_bRetry(FALSE), 638 : m_wndResolver(NULL), m_Retry(NULL), m_bRetry(FALSE),
639 m_blkSize(512), m_timeOut(30), m_xferSize(-1), 639 m_blkSize(512), m_timeOut(30), m_xferSize(-1),
640 m__blkSize(512), m__timeOut(30) 640 m__blkSize(512), m__timeOut(30)
641{ 641{
642 m_Peer.sin_family=AF_INET; 642 m_Peer.sin_family=AF_INET;
643 state=stateNone; 643 state=stateNone;
644 ASSERT(daddy); 644 ASSERT(daddy);
645 m_Daddy=daddy; 645 m_Daddy=daddy;
646 m_timeOut=m__timeOut=m_Daddy->m_TFTPTimeOut.GetTotalSeconds(); 646 m_timeOut=m__timeOut=m_Daddy->m_TFTPTimeOut.GetTotalSeconds();
647 if(sin){ 647 if(sin){
648 m_Peer.sin_addr.s_addr=sin->sin_addr.s_addr; 648 m_Peer.sin_addr.s_addr=sin->sin_addr.s_addr;
649 m_Peer.sin_port=sin->sin_port; 649 m_Peer.sin_port=sin->sin_port;
650 }else 650 }else
651 m_Peer.sin_addr.s_addr=INADDR_NONE; 651 m_Peer.sin_addr.s_addr=INADDR_NONE;
652 m_FileName=fileName; 652 m_FileName=fileName;
653 m_Type=type; 653 m_Type=type;
654} 654}
655 655
656BOOL CRRQSocket::Create(LPCTSTR localFile,LPCTSTR hostName) 656BOOL CRRQSocket::Create(LPCTSTR localFile,LPCTSTR hostName)
657{ 657{
658 if(!CAsyncSocket::Create(0,SOCK_DGRAM)) 658 if(!CAsyncSocket::Create(0,SOCK_DGRAM))
659 return FALSE; 659 return FALSE;
660 ASSERT(m_Daddy); 660 ASSERT(m_Daddy);
661 ASSERT(m_Peer.sin_addr.s_addr!=INADDR_NONE || hostName); 661 ASSERT(m_Peer.sin_addr.s_addr!=INADDR_NONE || hostName);
662 m_Daddy->m_Xfers[m_hSocket]=this; 662 m_Daddy->m_Xfers[m_hSocket]=this;
663CString lFile = localFile?localFile:m_FileName; 663CString lFile = localFile?localFile:m_FileName;
664 TurnSlashes(lFile,TRUE); 664 TurnSlashes(lFile,TRUE);
665 UpdateList(); 665 UpdateList();
666 if(!localFile){// Check only if server 666 if(!localFile){// Check only if server
667 if(CheckBadRelativeness(m_FileName)){ 667 if(CheckBadRelativeness(m_FileName)){
668 Deny(tftp::errAccessViolation,IDS_TFTP_ERROR_ACCESS); 668 Deny(tftp::errAccessViolation,IDS_TFTP_ERROR_ACCESS);
669 return TRUE; 669 return TRUE;
670 } 670 }
671 switch(m_Daddy->m_RRQMode){ 671 switch(m_Daddy->m_RRQMode){
672 case CPumpKINDlg::rrqGiveAll: 672 case CPumpKINDlg::rrqGiveAll:
673 break; 673 break;
674 case CPumpKINDlg::rrqAlwaysConfirm: 674 case CPumpKINDlg::rrqAlwaysConfirm:
675 if(ConfirmRequest()) 675 if(ConfirmRequest())
676 break; 676 break;
677 case CPumpKINDlg::rrqDenyAll: 677 case CPumpKINDlg::rrqDenyAll:
678 Deny(tftp::errAccessViolation,IDS_TFTP_ERROR_ACCESS); 678 Deny(tftp::errAccessViolation,IDS_TFTP_ERROR_ACCESS);
679 return TRUE; 679 return TRUE;
680 } 680 }
681 } 681 }
682CString fn = localFile?ApplyRootGently(lFile):ApplyRoot(lFile); 682CString fn = localFile?ApplyRootGently(lFile):ApplyRoot(lFile);
683CFileException e; 683CFileException e;
684 if(!m_File.Open(fn,CFile::modeRead|CFile::shareDenyWrite,&e)){ 684 if(!m_File.Open(fn,CFile::modeRead|CFile::shareDenyWrite,&e)){
685 if(localFile){ 685 if(localFile){
686 CString tmp; 686 CString tmp;
687 tmp.Format(IDS_LOG_FAILEDLOCALFILE,fn); 687 tmp.Format(IDS_LOG_FAILEDLOCALFILE,fn);
688 m_Daddy->LogLine(tmp); 688 m_Daddy->LogLine(tmp);
689 return FALSE; 689 return FALSE;
690 } 690 }
691 Deny(&e); 691 Deny(&e);
692 return TRUE; 692 return TRUE;
693 } 693 }
694 m_xferSize=m_File.GetLength();// *** HANDLE EXCEPTION 694 m_xferSize=m_File.GetLength();// *** HANDLE EXCEPTION
695 if(hostName){ 695 if(hostName){
696 m_HostName=hostName; 696 m_HostName=hostName;
697 697
698 CString tmp; 698 CString tmp;
699 tmp.Format(IDS_LOG_SENDING,m_FileName,m_HostName); 699 tmp.Format(IDS_LOG_SENDING,m_FileName,m_HostName);
700 m_Daddy->LogLine(tmp); 700 m_Daddy->LogLine(tmp);
701 701
702 CString inAddr = hostName; 702 CString inAddr = hostName;
703 int at = inAddr.Find('@'); 703 int at = inAddr.Find('@');
704 if(at>=0) 704 if(at>=0)
705 inAddr=inAddr.Mid(at+1); 705 inAddr=inAddr.Mid(at+1);
706 if((m_Peer.sin_addr.s_addr=inet_addr((LPCTSTR)inAddr))==INADDR_NONE){ 706 if((m_Peer.sin_addr.s_addr=inet_addr((LPCTSTR)inAddr))==INADDR_NONE){
707 ASSERT(!m_wndResolver); 707 ASSERT(!m_wndResolver);
708 m_wndResolver = new CResolver(this); 708 m_wndResolver = new CResolver(this);
709 ASSERT(m_wndResolver); 709 ASSERT(m_wndResolver);
710 return m_wndResolver->Resolve(); 710 return m_wndResolver->Resolve();
711 } 711 }
712 else 712 else
713 OnHostKnown(); 713 OnHostKnown();
714 }else{ 714 }else{
715 tftp::tftpOptions o; 715 tftp::tftpOptions o;
716 CString v; 716 CString v;
717 if(m_Options.Lookup(tftpoBSize,v)){ 717 if(m_Options.Lookup(tftpoBSize,v)){
718 m__blkSize=atoi(v); 718 m__blkSize=atoi(v);
719 if(m__blkSize){ 719 if(m__blkSize){
720 m_blkSize=m__blkSize; 720 m_blkSize=m__blkSize;
721 v.Format("%u",m_blkSize); 721 v.Format("%u",m_blkSize);
722 o[tftpoBSize]=v; 722 o[tftpoBSize]=v;
723 } 723 }
724 } 724 }
725 if(m_Options.Lookup(tftpoTSize,v)){ 725 if(m_Options.Lookup(tftpoTSize,v)){
726 v.Format("%lu",m_xferSize); 726 v.Format("%lu",m_xferSize);
727 o[tftpoTSize]=v; 727 o[tftpoTSize]=v;
728 } 728 }
729 if(m_Options.Lookup(tftpoTOut,v)){ 729 if(m_Options.Lookup(tftpoTOut,v)){
730 m__timeOut=atoi(v); 730 m__timeOut=atoi(v);
731 if(m__timeOut){ 731 if(m__timeOut){
732 m_timeOut=m__timeOut; 732 m_timeOut=m__timeOut;
733 v.Format("%u",m_timeOut); 733 v.Format("%u",m_timeOut);
734 o[tftpoTOut]=v; 734 o[tftpoTOut]=v;
735 } 735 }
736 } 736 }
737 state = stateXfer; 737 state = stateXfer;
738 m_ACK=0; 738 m_ACK=0;
739 if(o.GetCount()){ 739 if(o.GetCount()){
740 tftp *p = tftp::Allocate(tftp::tftpOACK::tftpSize(&o)); 740 tftp *p = tftp::Allocate(tftp::tftpOACK::tftpSize(&o));
741 ASSERT(p); 741 ASSERT(p);
742 p->SetOpcode(tftp::opOACK); 742 p->SetOpcode(tftp::opOACK);
743 p->data.m_OACK.Set(&o); 743 p->data.m_OACK.Set(&o);
744 PostTFTP(p,TRUE); 744 PostTFTP(p,TRUE);
745 }else 745 }else
746 DoXfer(); 746 DoXfer();
747 } 747 }
748 return TRUE; 748 return TRUE;
749} 749}
750 750
751CRRQSocket::CRRQSocket(CPumpKINDlg *daddy,LPCTSTR fileName,LPCTSTR type,SOCKADDR_IN *sin) 751CRRQSocket::CRRQSocket(CPumpKINDlg *daddy,LPCTSTR fileName,LPCTSTR type,SOCKADDR_IN *sin)
752 : CXferSocket(daddy,fileName,type,sin) 752 : CXferSocket(daddy,fileName,type,sin)
753{ 753{
754 m_ACK=0; 754 m_ACK=0;
755 m_LastSlack=0; 755 m_LastSlack=0;
756} 756}
757 757
758UINT tftp::tftpERROR::tftpSize(LPCTSTR msg) 758UINT tftp::tftpERROR::tftpSize(LPCTSTR msg)
759{ 759{
760 return tftpHdrSize-tftpSlackSize+sizeof(tftp::tftpERROR::tftpErrorCode)+strlen(msg)+1; 760 return tftpHdrSize-tftpSlackSize+sizeof(tftp::tftpERROR::tftpErrorCode)+strlen(msg)+1;
761} 761}
762 762
763tftp* tftp::Allocate(UINT tftpSize) 763tftp* tftp::Allocate(UINT tftpSize)
764{ 764{
765 ASSERT(tftpSize); 765 ASSERT(tftpSize);
766tftp* rv = (tftp*) new BYTE[tftpSlackSize+tftpSize]; 766tftp* rv = (tftp*) new BYTE[tftpSlackSize+tftpSize];
767 ASSERT(rv); 767 ASSERT(rv);
768 rv->length=tftpSize; 768 rv->length=tftpSize;
769 return rv; 769 return rv;
770} 770}
771 771
772void tftp::errSet(UINT code,LPCTSTR msg) 772void tftp::errSet(UINT code,LPCTSTR msg)
773{ 773{
774 ASSERT(this); 774 ASSERT(this);
775 ASSERT(length>=data.m_ERROR.tftpSize(msg)); 775 ASSERT(length>=data.m_ERROR.tftpSize(msg));
776 strcpy((char*)data.m_ERROR.data,msg); 776 strcpy((char*)data.m_ERROR.data,msg);
777 data.m_ERROR.SetCode(code); 777 data.m_ERROR.SetCode(code);
778} 778}
779 779
780void CXferSocket::PostTFTP(tftp* p,BOOL retryable) 780void CXferSocket::PostTFTP(tftp* p,BOOL retryable)
781{ 781{
782 ASSERT(p); 782 ASSERT(p);
783 m_Queue.AddTail(p); 783 m_Queue.AddTail(p);
784 DoSelect(); 784 DoSelect();
785 if(!m_bRetry){ 785 if(!m_bRetry){
786 if(retryable) 786 if(retryable)
787 SetTry(p); 787 SetTry(p);
788 else 788 else
789 SetTry(); 789 SetTry();
790 } 790 }
791 ResetTimeout(); 791 ResetTimeout();
792} 792}
793 793
794void CXferSocket::Deny(UINT errCode,UINT errID) 794void CXferSocket::Deny(UINT errCode,UINT errID)
795{ 795{
796 PostError(errCode,errID); 796 PostError(errCode,errID);
797 state=stateDeny; 797 state=stateDeny;
798} 798}
799 799
800void CRRQSocket::DoXfer() 800void CRRQSocket::DoXfer()
801{ 801{
802tftp *p = tftp::Allocate(tftp::tftpDATA::tftpSize(m_blkSize)); 802tftp *p = tftp::Allocate(tftp::tftpDATA::tftpSize(m_blkSize));
803 ASSERT(p); 803 ASSERT(p);
804 p->SetOpcode(tftp::opDATA); 804 p->SetOpcode(tftp::opDATA);
805 TRY{ 805 TRY{
806 m_File.Seek(m_ACK*m_blkSize,CFile::begin); 806 m_File.Seek(m_ACK*m_blkSize,CFile::begin);
807 int bytes = m_File.Read(p->data.m_DATA.data,m_blkSize); 807 int bytes = m_File.Read(p->data.m_DATA.data,m_blkSize);
808 p->data.m_DATA.SetBlock(m_ACK+1); 808 p->data.m_DATA.SetBlock(m_ACK+1);
809 p->length=p->length-m_blkSize+bytes; 809 p->length=p->length-m_blkSize+bytes;
810 m_LastSlack = m_blkSize-bytes; 810 m_LastSlack = m_blkSize-bytes;
811 PostTFTP(p); 811 PostTFTP(p);
812 if(bytes<m_blkSize){ 812 if(bytes<m_blkSize){
813 state=stateFinish; 813 state=stateFinish;
814 ASSERT(m_Daddy); 814 ASSERT(m_Daddy);
815 CString tmp; 815 CString tmp;
816 tmp.Format(IDS_LOG_XFERRRQFINISHED,(LPCTSTR)m_FileName); 816 tmp.Format(IDS_LOG_XFERRRQFINISHED,(LPCTSTR)m_FileName);
817 m_Daddy->LogLine(tmp); 817 m_Daddy->LogLine(tmp);
818 } 818 }
819 }CATCH(CFileException,e){ 819 }CATCH(CFileException,e){
820 Deny(e); 820 Deny(e);
821 }END_CATCH 821 }END_CATCH
822} 822}
823 823
824UINT tftp::tftpDATA::tftpSize(UINT blkSize) 824UINT tftp::tftpDATA::tftpSize(UINT blkSize)
825{ 825{
826 return tftpHdrSize-tftpSlackSize+sizeof(tftp::tftpDATA) 826 return tftpHdrSize-tftpSlackSize+sizeof(tftp::tftpDATA)
827 -sizeof(BYTE)+blkSize; 827 -sizeof(BYTE)+blkSize;
828} 828}
829 829
830void CXferSocket::Deny(CFileException* e) 830void CXferSocket::Deny(CFileException* e)
831{ 831{
832 PostError(e); 832 PostError(e);
833 state=stateDeny; 833 state=stateDeny;
834} 834}
835 835
836void CXferSocket::PostError(UINT errCode,UINT errID) 836void CXferSocket::PostError(UINT errCode,UINT errID)
837{ 837{
838CString msg; 838CString msg;
839 msg.LoadString(errID); 839 msg.LoadString(errID);
840 ASSERT(m_Daddy); 840 ASSERT(m_Daddy);
841 /*// *** 841 /*// ***
842CString tmp; 842CString tmp;
843 tmp.Format(IDS_LOG_SENTTFTPERROR,errCode,(LPCTSTR)msg); 843 tmp.Format(IDS_LOG_SENTTFTPERROR,errCode,(LPCTSTR)msg);
844 m_Daddy->LogLine(tmp); 844 m_Daddy->LogLine(tmp);
845 */ 845 */
846tftp* err = tftp::Allocate(tftp::tftpERROR::tftpSize(msg)); 846tftp* err = tftp::Allocate(tftp::tftpERROR::tftpSize(msg));
847err->SetOpcode(tftp::opERROR); 847err->SetOpcode(tftp::opERROR);
848 err->errSet(errCode,msg); 848 err->errSet(errCode,msg);
849 PostTFTP(err); 849 PostTFTP(err);
850} 850}
851 851
852void CXferSocket::PostError(CFileException* e) 852void CXferSocket::PostError(CFileException* e)
853{ 853{
854UINT eCode; 854UINT eCode;
855UINT eMsgID; 855UINT eMsgID;
856 switch(e->m_cause){ 856 switch(e->m_cause){
857 case CFileException::fileNotFound: 857 case CFileException::fileNotFound:
858 eCode=tftp::errNotFound; 858 eCode=tftp::errNotFound;
859 eMsgID=IDS_TFTP_ERROR_NOTFOUND; 859 eMsgID=IDS_TFTP_ERROR_NOTFOUND;
860 break; 860 break;
861 case CFileException::accessDenied: 861 case CFileException::accessDenied:
862 eCode=tftp::errAccessViolation; 862 eCode=tftp::errAccessViolation;
863 eMsgID=IDS_TFTP_ERROR_ACCESS; 863 eMsgID=IDS_TFTP_ERROR_ACCESS;
864 break; 864 break;
865 case CFileException::directoryFull: 865 case CFileException::directoryFull:
866 eCode=tftp::errDiskFull; 866 eCode=tftp::errDiskFull;
867 eMsgID=IDS_TFTP_ERROR_DIRFULL; 867 eMsgID=IDS_TFTP_ERROR_DIRFULL;
868 break; 868 break;
869 case CFileException::sharingViolation: 869 case CFileException::sharingViolation:
870 eCode=tftp::errAccessViolation; 870 eCode=tftp::errAccessViolation;
871 eMsgID=IDS_TFTP_ERROR_SHARING; 871 eMsgID=IDS_TFTP_ERROR_SHARING;
872 break; 872 break;
873 case CFileException::diskFull: 873 case CFileException::diskFull:
874 eCode=tftp::errDiskFull; 874 eCode=tftp::errDiskFull;
875 eMsgID=IDS_TFTP_ERROR_DISKFULL; 875 eMsgID=IDS_TFTP_ERROR_DISKFULL;
876 break; 876 break;
877 default: 877 default:
878 eCode=tftp::errUndefined; 878 eCode=tftp::errUndefined;
879 eMsgID=IDS_TFTP_ERROR_UNDEFINED; 879 eMsgID=IDS_TFTP_ERROR_UNDEFINED;
880 break; 880 break;
881 } 881 }
882 PostError(eCode,eMsgID); 882 PostError(eCode,eMsgID);
883} 883}
884 884
885ULONG CRRQSocket::GetACK(void) 885ULONG CRRQSocket::GetACK(void)
886{ 886{
887 return (m_ACK*m_blkSize)-m_LastSlack; 887 return (m_ACK*m_blkSize)-m_LastSlack;
888} 888}
889 889
890BOOL CRRQSocket::OnTFTP(tftp* p) 890BOOL CRRQSocket::OnTFTP(tftp* p)
891{ 891{
892BOOL rv = TRUE; 892BOOL rv = TRUE;
893 switch(p->Opcode()){ 893 switch(p->Opcode()){
894 case tftp::opOACK: 894 case tftp::opOACK:
895 m_ACK=0; 895 m_ACK=0;
896 ASSERT(state!=stateFinish); 896 ASSERT(state!=stateFinish);
897 { 897 {
898 tftp::tftpOptions o; 898 tftp::tftpOptions o;
899 if(p->GetOptions(&o)){ 899 if(p->GetOptions(&o)){
900 CString v; 900 CString v;
901 if(o.Lookup(tftpoBSize,v)){ 901 if(o.Lookup(tftpoBSize,v)){
902 m_blkSize=atoi(v); 902 m_blkSize=atoi(v);
903 if(!m_blkSize){// *** More sanity checks 903 if(!m_blkSize){// *** More sanity checks
904 Deny(tftp::errOption,IDS_TFTP_ERROR_BSIZE); 904 Deny(tftp::errOption,IDS_TFTP_ERROR_BSIZE);
905 rv = TRUE; 905 rv = TRUE;
906 break; 906 break;
907 } 907 }
908 } 908 }
909 if(o.Lookup(tftpoTOut,v)){ 909 if(o.Lookup(tftpoTOut,v)){
910 m_timeOut=atoi(v); 910 m_timeOut=atoi(v);
911 if(!m_timeOut){// *** More sanity checks 911 if(!m_timeOut){// *** More sanity checks
912 Deny(tftp::errOption,IDS_TFTP_ERROR_TOUT); 912 Deny(tftp::errOption,IDS_TFTP_ERROR_TOUT);
913 rv = TRUE; 913 rv = TRUE;
914 break; 914 break;
915 } 915 }
916 } 916 }
917 if(o.Lookup(tftpoXResume,v)){ 917 if(o.Lookup(tftpoXResume,v)){
918 m_ACK=atoi(v); 918 m_ACK=atoi(v);
919 } 919 }
920 } 920 }
921 UpdateList(); 921 UpdateList();
922 DoXfer(); 922 DoXfer();
923 } 923 }
924 break; 924 break;
925 case tftp::opACK: 925 case tftp::opACK:
926 m_ACK=p->data.m_ACK.Block(); 926 m_ACK=p->data.m_ACK.Block();
927 if(state!=stateFinish){ 927 if(state!=stateFinish){
928 UpdateList(); 928 UpdateList();
929 DoXfer(); 929 DoXfer();
930 } 930 }
931 break; 931 break;
932 case tftp::opERROR: 932 case tftp::opERROR:
933 { 933 {
934 ASSERT(m_Daddy); 934 ASSERT(m_Daddy);
935 CString tmp; 935 CString tmp;
936 tmp.Format(IDS_LOG_GOTTFTPERROR,p->data.m_ERROR.Code(),(LPCTSTR)p->errMessage()); 936 tmp.Format(IDS_LOG_GOTTFTPERROR,p->data.m_ERROR.Code(),(LPCTSTR)p->errMessage());
937 m_Daddy->LogLine(tmp); 937 m_Daddy->LogLine(tmp);
938 } 938 }
939 Destroy(FALSE); 939 Destroy(FALSE);
940 rv = FALSE; 940 rv = FALSE;
941 break; 941 break;
942 default: 942 default:
943 ASSERT(m_Daddy); 943 ASSERT(m_Daddy);
944 m_Daddy->LogLine(IDS_LOG_XFEROPCODE); 944 m_Daddy->LogLine(IDS_LOG_XFEROPCODE);
945 // *** Self destruct maybe?? 945 // *** Self destruct maybe??
946 break; 946 break;
947 } 947 }
948 return rv; 948 return rv;
949} 949}
950 950
951BOOL CWRQSocket::OnTFTP(tftp* p) 951BOOL CWRQSocket::OnTFTP(tftp* p)
952{ 952{
953 switch(p->Opcode()){ 953 switch(p->Opcode()){
954 case tftp::opOACK: 954 case tftp::opOACK:
955 ASSERT(state!=stateFinish); 955 ASSERT(state!=stateFinish);
956 { 956 {
957 if(m_bResume) 957 if(m_bResume)
958 m_ACK=m_File.GetLength()/m_blkSize; 958 m_ACK=m_File.GetLength()/m_blkSize;
959 else 959 else
960 m_ACK=0; 960 m_ACK=0;
961 tftp::tftpOptions o; 961 tftp::tftpOptions o;
962 if(p->GetOptions(&o)){ 962 if(p->GetOptions(&o)){
963 CString v; 963 CString v;
964 if(o.Lookup(tftpoBSize,v)){ 964 if(o.Lookup(tftpoBSize,v)){
965 m_blkSize=atoi(v); 965 m_blkSize=atoi(v);
966 if(!m_blkSize){// *** More sanity checks 966 if(!m_blkSize){// *** More sanity checks
967 Deny(tftp::errOption,IDS_TFTP_ERROR_BSIZE); 967 Deny(tftp::errOption,IDS_TFTP_ERROR_BSIZE);
968 return TRUE; 968 return TRUE;
969 } 969 }
970 } 970 }
971 if(o.Lookup(tftpoTOut,v)){ 971 if(o.Lookup(tftpoTOut,v)){
972 m_timeOut=atoi(v); 972 m_timeOut=atoi(v);
973 if(!m_timeOut){// *** More sanity checks 973 if(!m_timeOut){// *** More sanity checks
974 Deny(tftp::errOption,IDS_TFTP_ERROR_TOUT); 974 Deny(tftp::errOption,IDS_TFTP_ERROR_TOUT);
975 return TRUE; 975 return TRUE;
976 } 976 }
977 } 977 }
978 if(o.Lookup(tftpoTSize,v)){ 978 if(o.Lookup(tftpoTSize,v)){
979 m_xferSize=atoi(v); 979 m_xferSize=atoi(v);
980 } 980 }
981 } 981 }
982 UpdateList(); 982 UpdateList();
983 DoXfer(); 983 DoXfer();
984 } 984 }
985 break; 985 break;
986 case tftp::opDATA: 986 case tftp::opDATA:
987 { 987 {
988 UINTblock = p->data.m_DATA.Block(); 988 UINTblock = p->data.m_DATA.Block();
989 TRY{ 989 TRY{
990 m_File.Seek((block-1)*m_blkSize,CFile::begin); 990 m_File.Seek((block-1)*m_blkSize,CFile::begin);
991 int bytes = p->length-sizeof(p->data.m_DATA.block)-(tftpHdrSize-tftpSlackSize); 991 int bytes = p->length-sizeof(p->data.m_DATA.block)-(tftpHdrSize-tftpSlackSize);
992 if(bytes){ 992 if(bytes){
993 m_File.Write(p->data.m_DATA.data,bytes); 993 m_File.Write(p->data.m_DATA.data,bytes);
994 // *** Move to the other place where we can do it not that often 994 // *** Move to the other place where we can do it not that often
995 m_File.SetLength(m_File.GetPosition()); 995 m_File.SetLength(m_File.GetPosition());
996 } 996 }
997 if(bytes<m_blkSize){ 997 if(bytes<m_blkSize){
998 state=stateFinish; 998 state=stateFinish;
999 ASSERT(m_Daddy); 999 ASSERT(m_Daddy);
1000 CString tmp; 1000 CString tmp;
1001 tmp.Format(IDS_LOG_XFERWRQFINISHED,(LPCTSTR)m_FileName); 1001 tmp.Format(IDS_LOG_XFERWRQFINISHED,(LPCTSTR)m_FileName);
1002 m_Daddy->LogLine(tmp); 1002 m_Daddy->LogLine(tmp);
1003 } 1003 }
1004 m_ACK=block; 1004 m_ACK=block;
1005 m_LastSlack=m_blkSize-bytes; 1005 m_LastSlack=m_blkSize-bytes;
1006 UpdateList(); 1006 UpdateList();
1007 DoXfer(); 1007 DoXfer();
1008 }CATCH(CFileException,e){ 1008 }CATCH(CFileException,e){
1009 Deny(e); 1009 Deny(e);
1010 }END_CATCH 1010 }END_CATCH
1011 } 1011 }
1012 break; 1012 break;
1013 case tftp::opERROR: 1013 case tftp::opERROR:
1014 { 1014 {
1015 ASSERT(m_Daddy); 1015 ASSERT(m_Daddy);
1016 CString tmp; 1016 CString tmp;
1017 tmp.Format(IDS_LOG_GOTTFTPERROR,p->data.m_ERROR.Code(),(LPCTSTR)p->errMessage()); 1017 tmp.Format(IDS_LOG_GOTTFTPERROR,p->data.m_ERROR.Code(),(LPCTSTR)p->errMessage());
1018 m_Daddy->LogLine(tmp); 1018 m_Daddy->LogLine(tmp);
1019 } 1019 }
1020 Destroy(FALSE); 1020 Destroy(FALSE);
1021 return FALSE; 1021 return FALSE;
1022 default: 1022 default:
1023 ASSERT(m_Daddy); 1023 ASSERT(m_Daddy);
1024 m_Daddy->LogLine(IDS_LOG_XFEROPCODE); 1024 m_Daddy->LogLine(IDS_LOG_XFEROPCODE);
1025 // *** Self destruct maybe?? 1025 // *** Self destruct maybe??
1026 break; 1026 break;
1027 } 1027 }
1028 return TRUE; 1028 return TRUE;
1029} 1029}
1030 1030
1031void tftp::SetOpcode(WORD op) 1031void tftp::SetOpcode(WORD op)
1032{ 1032{
1033 opcode = REVERSEBYTES(op); 1033 opcode = REVERSEBYTES(op);
1034} 1034}
1035void tftp::tftpDATA::SetBlock(WORD b) 1035void tftp::tftpDATA::SetBlock(WORD b)
1036{ 1036{
1037 block=REVERSEBYTES(b); 1037 block=REVERSEBYTES(b);
1038} 1038}
1039WORD tftp::tftpDATA::Block() 1039WORD tftp::tftpDATA::Block()
1040{ 1040{
1041 return REVERSEBYTES(block); 1041 return REVERSEBYTES(block);
1042} 1042}
1043WORD tftp::tftpACK::Block() 1043WORD tftp::tftpACK::Block()
1044{ 1044{
1045 return REVERSEBYTES(block); 1045 return REVERSEBYTES(block);
1046} 1046}
1047void tftp::tftpACK::SetBlock(WORD b) 1047void tftp::tftpACK::SetBlock(WORD b)
1048{ 1048{
1049 block = REVERSEBYTES(b); 1049 block = REVERSEBYTES(b);
1050} 1050}
1051WORD tftp::tftpERROR::Code() 1051WORD tftp::tftpERROR::Code()
1052{ 1052{
1053 return REVERSEBYTES(code); 1053 return REVERSEBYTES(code);
1054} 1054}
1055void tftp::tftpERROR::SetCode(WORD c) 1055void tftp::tftpERROR::SetCode(WORD c)
1056{ 1056{
1057 code = REVERSEBYTES(c); 1057 code = REVERSEBYTES(c);
1058} 1058}
1059 1059
1060 1060
1061CString tftp::errMessage() 1061CString tftp::errMessage()
1062{ 1062{
1063CString rv; 1063CString rv;
1064 if(memchr(data.m_ERROR.data,0,length-(tftpHdrSize-tftpSlackSize)-sizeof(data.m_ERROR.code))) 1064 if(memchr(data.m_ERROR.data,0,length-(tftpHdrSize-tftpSlackSize)-sizeof(data.m_ERROR.code)))
1065 rv = (LPCTSTR)data.m_ERROR.data; 1065 rv = (LPCTSTR)data.m_ERROR.data;
1066 return rv; 1066 return rv;
1067} 1067}
1068 1068
1069void CXferSocket::Destroy(BOOL success) 1069void CXferSocket::Destroy(BOOL success)
1070{ 1070{
1071 if(m_wndResolver){ 1071 if(m_wndResolver){
1072 delete m_wndResolver; 1072 delete m_wndResolver;
1073 m_wndResolver=NULL; 1073 m_wndResolver=NULL;
1074 } 1074 }
1075 SetTry(); 1075 SetTry();
1076 m_Daddy->m_bnw.StartSound( 1076 m_Daddy->m_bnw.StartSound(
1077 success 1077 success
1078 ? m_Daddy->m_bnwSuccess 1078 ? m_Daddy->m_bnwSuccess
1079 : m_Daddy->m_bnwAbort 1079 : m_Daddy->m_bnwAbort
1080 ); 1080 );
1081 if(m_File.m_hFile!=CFile::hFileNull){ 1081 if(m_File.m_hFile!=CFile::hFileNull){
1082 TRY{ 1082 TRY{
1083 m_File.Close(); 1083 m_File.Close();
1084 }CATCH(CFileException,e){ 1084 }CATCH(CFileException,e){
1085 TRACE0("Error closing file\n"); 1085 TRACE0("Error closing file\n");
1086 }END_CATCH 1086 }END_CATCH
1087 } 1087 }
1088 ASSERT(m_Daddy); 1088 ASSERT(m_Daddy);
1089 m_Daddy->KillTimer(m_hSocket); 1089 m_Daddy->KillTimer(m_hSocket);
1090 m_Daddy->m_Xfers.RemoveKey(m_hSocket); 1090 m_Daddy->m_Xfers.RemoveKey(m_hSocket);
1091LV_FINDINFO lvf; 1091LV_FINDINFO lvf;
1092 memset(&lvf,0,sizeof(lvf)); 1092 memset(&lvf,0,sizeof(lvf));
1093 lvf.flags=LVFI_PARAM; 1093 lvf.flags=LVFI_PARAM;
1094 lvf.lParam=(LPARAM)this; 1094 lvf.lParam=(LPARAM)this;
1095int i = m_Daddy->m_List.FindItem(&lvf); 1095int i = m_Daddy->m_List.FindItem(&lvf);
1096 if(i>=0) 1096 if(i>=0)
1097 m_Daddy->m_List.DeleteItem(i); 1097 m_Daddy->m_List.DeleteItem(i);
1098 delete this; 1098 delete this;
1099} 1099}
1100 1100
1101void CPumpKINDlg::LogLine(LPCTSTR str) 1101void CPumpKINDlg::LogLine(LPCTSTR str)
1102{ 1102{
1103 ASSERT(m_LogLength); 1103 ASSERT(m_LogLength);
1104 while(m_Log.GetCount()>m_LogLength && m_Log.GetCount()!=LB_ERR){ 1104 while(m_Log.GetCount()>m_LogLength && m_Log.GetCount()!=LB_ERR){
1105 CTime *t = (CTime*)m_Log.GetItemData(0); 1105 CTime *t = (CTime*)m_Log.GetItemData(0);
1106 if(((DWORD)t)!=LB_ERR){ 1106 if(((DWORD)t)!=LB_ERR){
1107 ASSERT(t); 1107 ASSERT(t);
1108 m_LogTimes.RemoveKey(t); 1108 m_LogTimes.RemoveKey(t);
1109 delete t; 1109 delete t;
1110 } 1110 }
1111 m_Log.DeleteString(0); 1111 m_Log.DeleteString(0);
1112 } 1112 }
1113int i = m_Log.AddString(str); 1113int i = m_Log.AddString(str);
1114 ASSERT(i!=LB_ERR); 1114 ASSERT(i!=LB_ERR);
1115CTime *t = new CTime(CTime::GetCurrentTime()); 1115CTime *t = new CTime(CTime::GetCurrentTime());
1116 m_Log.SetItemData(i,(DWORD)(m_LogTimes[t]=t)); 1116 m_Log.SetItemData(i,(DWORD)(m_LogTimes[t]=t));
1117 m_Log.SetCurSel(i); 1117 m_Log.SetCurSel(i);
1118} 1118}
1119 1119
1120void CPumpKINDlg::LogLine(UINT msgID) 1120void CPumpKINDlg::LogLine(UINT msgID)
1121{ 1121{
1122CString tmp; 1122CString tmp;
1123 tmp.Format(msgID); 1123 tmp.Format(msgID);
1124 LogLine(tmp); 1124 LogLine(tmp);
1125} 1125}
1126 1126
1127void CXferSocket::TurnSlashes(CString& fn,BOOL bBack) 1127void CXferSocket::TurnSlashes(CString& fn,BOOL bBack)
1128{ 1128{
1129 ints = fn.Find(bBack?'/':'\\'); 1129 ints = fn.Find(bBack?'/':'\\');
1130 while(s>=0){ 1130 while(s>=0){
1131 fn.SetAt(s,bBack?'\\':'/'); 1131 fn.SetAt(s,bBack?'\\':'/');
1132 s = fn.Find(bBack?'/':'\\'); 1132 s = fn.Find(bBack?'/':'\\');
1133 } 1133 }
1134} 1134}
1135 1135
1136CString CXferSocket::ApplyRoot(LPCTSTR fileName) 1136CString CXferSocket::ApplyRoot(LPCTSTR fileName)
1137{ 1137{
1138 ASSERT(m_Daddy); 1138 ASSERT(m_Daddy);
1139CString fn = fileName; 1139CString fn = fileName;
1140CString rv = m_Daddy->m_TFTPRoot; 1140CString rv = m_Daddy->m_TFTPRoot;
1141 if(rv.IsEmpty()) 1141 if(rv.IsEmpty())
1142 rv = "."; 1142 rv = ".";
1143 if(rv[rv.GetLength()-1]!='\\') 1143 if(rv[rv.GetLength()-1]!='\\')
1144 rv+="\\"; 1144 rv+="\\";
1145 while((!fn.IsEmpty()) && fn[0]=='\\') 1145 while((!fn.IsEmpty()) && fn[0]=='\\')
1146 fn=fn.Mid(1); 1146 fn=fn.Mid(1);
1147 rv+=fn; 1147 rv+=fn;
1148 return rv; 1148 return rv;
1149} 1149}
1150 1150
1151void CPumpKINDlg::OnOptions() 1151void CPumpKINDlg::OnOptions()
1152{ 1152{
1153CPropertySheet cps(IDS_TITLE_OPTIONS,this); 1153CPropertySheet cps(IDS_TITLE_OPTIONS,this);
1154CPropsServer server; 1154CPropsServer server;
1155CPropsNetwork network; 1155CPropsNetwork network;
1156CPropsSounds sounds; 1156CPropsSounds sounds;
1157 1157
1158 server.m_RRQMode=m_RRQMode; 1158 server.m_RRQMode=m_RRQMode;
1159 server.m_TFTPRoot=m_TFTPRoot; 1159 server.m_TFTPRoot=m_TFTPRoot;
1160 server.m_TFTPSubdirs=m_bTFTPSubdirs; 1160 server.m_TFTPSubdirs=m_bTFTPSubdirs;
1161 server.m_WRQMode=m_WRQMode; 1161 server.m_WRQMode=m_WRQMode;
1162 server.m_PromptTimeOut=m_PromptTimeOut; 1162 server.m_PromptTimeOut=m_PromptTimeOut;
1163 1163
1164 network.m_ListenPort=m_ListenPort; 1164 network.m_ListenPort=m_ListenPort;
1165 network.m_SpeakPort=m_SpeakPort; 1165 network.m_SpeakPort=m_SpeakPort;
1166 network.m_TimeOut=m_TFTPTimeOut.GetTotalSeconds(); 1166 network.m_TimeOut=m_TFTPTimeOut.GetTotalSeconds();
1167 network.m_BlockSize=m_BlockSize; 1167 network.m_BlockSize=m_BlockSize;
1168 1168
1169 sounds.m_Request = m_bnwRequest; 1169 sounds.m_Request = m_bnwRequest;
1170 sounds.m_Success = m_bnwSuccess; 1170 sounds.m_Success = m_bnwSuccess;
1171 sounds.m_Abort = m_bnwAbort; 1171 sounds.m_Abort = m_bnwAbort;
1172 1172
1173 cps.AddPage(&server); 1173 cps.AddPage(&server);
1174 cps.AddPage(&network); 1174 cps.AddPage(&network);
1175 cps.AddPage(&sounds); 1175 cps.AddPage(&sounds);
1176 if(cps.DoModal()==IDOK){ 1176 if(cps.DoModal()==IDOK){
1177 m_RRQMode=server.m_RRQMode; 1177 m_RRQMode=server.m_RRQMode;
1178 m_TFTPRoot=server.m_TFTPRoot; 1178 m_TFTPRoot=server.m_TFTPRoot;
1179 m_bTFTPSubdirs=server.m_TFTPSubdirs; 1179 m_bTFTPSubdirs=server.m_TFTPSubdirs;
1180 m_WRQMode=server.m_WRQMode; 1180 m_WRQMode=server.m_WRQMode;
1181 m_PromptTimeOut=server.m_PromptTimeOut; 1181 m_PromptTimeOut=server.m_PromptTimeOut;
1182 1182
1183 m_ListenPort=network.m_ListenPort; 1183 m_ListenPort=network.m_ListenPort;
1184 m_SpeakPort=network.m_SpeakPort; 1184 m_SpeakPort=network.m_SpeakPort;
1185 m_TFTPTimeOut=CTimeSpan(network.m_TimeOut); 1185 m_TFTPTimeOut=CTimeSpan(network.m_TimeOut);
1186 m_BlockSize=network.m_BlockSize; 1186 m_BlockSize=network.m_BlockSize;
1187 1187
1188 m_bnwRequest = sounds.m_Request; 1188 m_bnwRequest = sounds.m_Request;
1189 m_bnwSuccess = sounds.m_Success; 1189 m_bnwSuccess = sounds.m_Success;
1190 m_bnwAbort = sounds.m_Abort; 1190 m_bnwAbort = sounds.m_Abort;
1191 } 1191 }
1192} 1192}
1193 1193
1194BOOL CRRQSocket::ConfirmRequest() 1194BOOL CRRQSocket::ConfirmRequest()
1195{ 1195{
1196CConfirmRRQDlg cd(NULL); 1196CConfirmRRQDlg cd(NULL);
1197 cd.m_Daddy=this; 1197 cd.m_Daddy=this;
1198 cd.m_File=m_FileName; 1198 cd.m_File=m_FileName;
1199 cd.m_Host=inet_ntoa(m_Peer.sin_addr); 1199 cd.m_Host=inet_ntoa(m_Peer.sin_addr);
1200 if(cd.DoModal()==IDOK) 1200 if(cd.DoModal()==IDOK)
1201 return TRUE; 1201 return TRUE;
1202 return FALSE; 1202 return FALSE;
1203} 1203}
1204 1204
1205CWRQSocket::CWRQSocket(CPumpKINDlg* daddy,LPCTSTR fileName,LPCTSTR type,SOCKADDR_IN *sin) 1205CWRQSocket::CWRQSocket(CPumpKINDlg* daddy,LPCTSTR fileName,LPCTSTR type,SOCKADDR_IN *sin)
1206 : CXferSocket(daddy,fileName,type,sin) 1206 : CXferSocket(daddy,fileName,type,sin)
1207{ 1207{
1208 state=stateNone; 1208 state=stateNone;
1209 m_ACK=0; 1209 m_ACK=0;
1210 m_LastSlack=0; 1210 m_LastSlack=0;
1211 m_bResume=FALSE; 1211 m_bResume=FALSE;
1212} 1212}
1213 1213
1214BOOL CWRQSocket::Create(LPCTSTR localFile,LPCTSTR hostName) 1214BOOL CWRQSocket::Create(LPCTSTR localFile,LPCTSTR hostName)
1215{ 1215{
1216 if(!CAsyncSocket::Create(0,SOCK_DGRAM)) 1216 if(!CAsyncSocket::Create(0,SOCK_DGRAM))
1217 return FALSE; 1217 return FALSE;
1218 ASSERT(m_Daddy); 1218 ASSERT(m_Daddy);
1219 ASSERT(m_Peer.sin_addr.s_addr!=INADDR_NONE || hostName); 1219 ASSERT(m_Peer.sin_addr.s_addr!=INADDR_NONE || hostName);
1220 m_Daddy->m_Xfers[m_hSocket]=this; 1220 m_Daddy->m_Xfers[m_hSocket]=this;
1221 TurnSlashes(m_FileName,TRUE);
1222 UpdateList(); 1221 UpdateList();
1223CString fn = localFile?ApplyRootGently(localFile):ApplyRoot(m_FileName); 1222CString lf;
1223 if(!localFile) {
1224 lf = m_FileName;
1225 TurnSlashes(lf,TRUE);
1226 }
1227CString fn = localFile?ApplyRootGently(localFile):ApplyRoot(lf);
1224 if(!localFile){// This is an incoming request.. 1228 if(!localFile){// This is an incoming request..
1225 if(CheckBadRelativeness(m_FileName)){ 1229 if(CheckBadRelativeness(m_FileName)){
1226 Deny(tftp::errAccessViolation,IDS_TFTP_ERROR_ACCESS); 1230 Deny(tftp::errAccessViolation,IDS_TFTP_ERROR_ACCESS);
1227 return TRUE; 1231 return TRUE;
1228 } 1232 }
1229 BOOL exists; 1233 BOOL exists;
1230 if(!_access((LPCTSTR)fn,0)) 1234 if(!_access((LPCTSTR)fn,0))
1231 m_Rename=exists=TRUE; 1235 m_Rename=exists=TRUE;
1232 else 1236 else
1233 m_Rename=exists=FALSE; 1237 m_Rename=exists=FALSE;
1234 // *** m_WRQMode only if server transfer 1238 // *** m_WRQMode only if server transfer
1235 switch(m_Daddy->m_WRQMode){ 1239 switch(m_Daddy->m_WRQMode){
1236 case CPumpKINDlg::wrqTakeAll: 1240 case CPumpKINDlg::wrqTakeAll:
1237 if(exists){ 1241 if(exists){
1238 if(!RenameFile(fn)){ 1242 if(!RenameFile(fn)){
1239 Deny(tftp::errDiskFull,IDS_TFTP_ERROR_FAILEDTORENAME); 1243 Deny(tftp::errDiskFull,IDS_TFTP_ERROR_FAILEDTORENAME);
1240 return TRUE; 1244 return TRUE;
1241 } 1245 }
1242 } 1246 }
1243 break; 1247 break;
1244 case CPumpKINDlg::wrqConfirmIfExists: 1248 case CPumpKINDlg::wrqConfirmIfExists:
1245 if(!exists) 1249 if(!exists)
1246 break; 1250 break;
1247 case CPumpKINDlg::wrqAlwaysConfirm: 1251 case CPumpKINDlg::wrqAlwaysConfirm:
1248 if(exists) 1252 if(exists)
1249 m_bResume=TRUE; 1253 m_bResume=TRUE;
1250 if(ConfirmRequest()){ 1254 if(ConfirmRequest()){
1251 if(m_Rename){ 1255 if(m_Rename){
1252 RenameFile(fn); 1256 RenameFile(fn);
1253 if(SaveAs(fn)) 1257 if(SaveAs(fn))
1254 break; 1258 break;
1255 }else 1259 }else
1256 break; 1260 break;
1257 } 1261 }
1258 case CPumpKINDlg::wrqDenyAll: 1262 case CPumpKINDlg::wrqDenyAll:
1259 Deny(tftp::errAccessViolation,IDS_TFTP_ERROR_ACCESS); 1263 Deny(tftp::errAccessViolation,IDS_TFTP_ERROR_ACCESS);
1260 return TRUE; 1264 return TRUE;
1261 } 1265 }
1262 } 1266 }
1263CFileException e; 1267CFileException e;
1264 if(!m_File.Open( 1268 if(!m_File.Open(
1265 fn, 1269 fn,
1266 m_bResume 1270 m_bResume
1267 ?(CFile::modeWrite|CFile::shareDenyWrite) 1271 ?(CFile::modeWrite|CFile::shareDenyWrite)
1268 :(CFile::modeCreate|CFile::modeWrite|CFile::shareDenyWrite), 1272 :(CFile::modeCreate|CFile::modeWrite|CFile::shareDenyWrite),
1269 &e 1273 &e
1270 )){ 1274 )){
1271 if(localFile){// Outgoing request 1275 if(localFile){// Outgoing request
1272 CString tmp; 1276 CString tmp;
1273 tmp.Format(IDS_LOG_FAILEDTOOPEN,fn); 1277 tmp.Format(IDS_LOG_FAILEDTOOPEN,fn);
1274 m_Daddy->LogLine(tmp); 1278 m_Daddy->LogLine(tmp);
1275 return FALSE; 1279 return FALSE;
1276 }else{ 1280 }else{
1277 Deny(&e); 1281 Deny(&e);
1278 return TRUE; 1282 return TRUE;
1279 } 1283 }
1280 } 1284 }
1281 if(hostName){ 1285 if(hostName){
1282 m_HostName=hostName; 1286 m_HostName=hostName;
1283 1287
1284 CString tmp; 1288 CString tmp;
1285 tmp.Format(IDS_LOG_REQUESTING,m_FileName,m_HostName); 1289 tmp.Format(IDS_LOG_REQUESTING,m_FileName,m_HostName);
1286 m_Daddy->LogLine(tmp); 1290 m_Daddy->LogLine(tmp);
1287 1291
1288 CString inAddr = hostName; 1292 CString inAddr = hostName;
1289 int at = inAddr.Find('@'); 1293 int at = inAddr.Find('@');
1290 if(at>=0) 1294 if(at>=0)
1291 inAddr=inAddr.Mid(at+1); 1295 inAddr=inAddr.Mid(at+1);
1292 if((m_Peer.sin_addr.s_addr=inet_addr((LPCTSTR)inAddr))==INADDR_NONE){ 1296 if((m_Peer.sin_addr.s_addr=inet_addr((LPCTSTR)inAddr))==INADDR_NONE){
1293 ASSERT(!m_wndResolver); 1297 ASSERT(!m_wndResolver);
1294 m_wndResolver = new CResolver(this); 1298 m_wndResolver = new CResolver(this);
1295 ASSERT(m_wndResolver); 1299 ASSERT(m_wndResolver);
1296 return m_wndResolver->Resolve(); 1300 return m_wndResolver->Resolve();
1297 }else{ 1301 }else{
1298 OnHostKnown(); 1302 OnHostKnown();
1299 return TRUE; 1303 return TRUE;
1300 } 1304 }
1301 } 1305 }
1302CString v; 1306CString v;
1303tftp::tftpOptions oack; 1307tftp::tftpOptions oack;
1304 if(m_Options.Lookup(tftpoTSize,v)){ 1308 if(m_Options.Lookup(tftpoTSize,v)){
1305 m_xferSize=atol(v); 1309 m_xferSize=atol(v);
1306 if(!m_xferSize){ 1310 if(!m_xferSize){
1307 Deny(tftp::errOption,IDS_TFTP_ERROR_TSIZE); 1311 Deny(tftp::errOption,IDS_TFTP_ERROR_TSIZE);
1308 return TRUE; 1312 return TRUE;
1309 } 1313 }
1310 } 1314 }
1311 if(m_Options.Lookup(tftpoBSize,v)){ 1315 if(m_Options.Lookup(tftpoBSize,v)){
1312 m_blkSize=atoi(v); 1316 m_blkSize=atoi(v);
1313 if(!m_blkSize){// *** Do more about sanity check 1317 if(!m_blkSize){// *** Do more about sanity check
1314 Deny(tftp::errOption,IDS_TFTP_ERROR_BSIZE); 1318 Deny(tftp::errOption,IDS_TFTP_ERROR_BSIZE);
1315 return TRUE; 1319 return TRUE;
1316 } 1320 }
1317 v.Format("%u",m_blkSize); 1321 v.Format("%u",m_blkSize);
1318 oack[tftpoBSize]=v; 1322 oack[tftpoBSize]=v;
1319 } 1323 }
1320 if(m_Options.Lookup(tftpoTOut,v)){ 1324 if(m_Options.Lookup(tftpoTOut,v)){
1321 m_timeOut=atoi(v); 1325 m_timeOut=atoi(v);
1322 if(!m_timeOut){// *** Do more about sanity check 1326 if(!m_timeOut){// *** Do more about sanity check
1323 Deny(tftp::errOption,IDS_TFTP_ERROR_TOUT); 1327 Deny(tftp::errOption,IDS_TFTP_ERROR_TOUT);
1324 return TRUE; 1328 return TRUE;
1325 } 1329 }
1326 v.Format("%u",m_timeOut); 1330 v.Format("%u",m_timeOut);
1327 oack[tftpoTOut]=v; 1331 oack[tftpoTOut]=v;
1328 } 1332 }
1329 if(m_Options.Lookup(tftpoXResume,v) && m_bResume){ 1333 if(m_Options.Lookup(tftpoXResume,v) && m_bResume){
1330 m_ACK=m_File.GetLength()/m_blkSize; 1334 m_ACK=m_File.GetLength()/m_blkSize;
1331 v.Format("%u",m_ACK); 1335 v.Format("%u",m_ACK);
1332 oack[tftpoXResume]=v; 1336 oack[tftpoXResume]=v;
1333 }else 1337 }else
1334 m_ACK=0; 1338 m_ACK=0;
1335 state=stateXfer; 1339 state=stateXfer;
1336 if(oack.GetCount()){ 1340 if(oack.GetCount()){
1337 tftp *p = tftp::Allocate(tftp::tftpOACK::tftpSize(&oack)); 1341 tftp *p = tftp::Allocate(tftp::tftpOACK::tftpSize(&oack));
1338 ASSERT(p); 1342 ASSERT(p);
1339 p->SetOpcode(tftp::opOACK); 1343 p->SetOpcode(tftp::opOACK);
1340 p->data.m_OACK.Set(&oack); 1344 p->data.m_OACK.Set(&oack);
1341 PostTFTP(p,TRUE); 1345 PostTFTP(p,TRUE);
1342 }else 1346 }else
1343 DoXfer(); 1347 DoXfer();
1344 return TRUE; 1348 return TRUE;
1345} 1349}
1346 1350
1347BOOL CWRQSocket::ConfirmRequest() 1351BOOL CWRQSocket::ConfirmRequest()
1348{ 1352{
1349CConfirmWRQDlg cd(NULL); 1353CConfirmWRQDlg cd(NULL);
1350 cd.m_Daddy=this; 1354 cd.m_Daddy=this;
1351 cd.m_File=m_FileName; 1355 cd.m_File=m_FileName;
1352 cd.m_Host=inet_ntoa(m_Peer.sin_addr); 1356 cd.m_Host=inet_ntoa(m_Peer.sin_addr);
1353 switch(cd.DoModal()){ 1357 switch(cd.DoModal()){
1354 case IDOK: 1358 case IDOK:
1355 m_Rename=FALSE; 1359 m_Rename=FALSE;
1356 m_bResume=FALSE; 1360 m_bResume=FALSE;
1357 return TRUE; 1361 return TRUE;
1358 case IDC_RENAME: 1362 case IDC_RENAME:
1359 m_bResume=FALSE; 1363 m_bResume=FALSE;
1360 m_Rename=TRUE; 1364 m_Rename=TRUE;
1361 return TRUE; 1365 return TRUE;
1362 case IDC_RESUME: 1366 case IDC_RESUME:
1363 m_Rename=FALSE; 1367 m_Rename=FALSE;
1364 m_bResume=TRUE; 1368 m_bResume=TRUE;
1365 return TRUE; 1369 return TRUE;
1366 case IDCANCEL: 1370 case IDCANCEL:
1367 return FALSE; 1371 return FALSE;
1368 } 1372 }
1369 return FALSE; 1373 return FALSE;
1370} 1374}
1371 1375
1372BOOL CWRQSocket::RenameFile(CString& fn) 1376BOOL CWRQSocket::RenameFile(CString& fn)
1373{ 1377{
1374CString renamed = fn; 1378CString renamed = fn;
1375 if(fn.IsEmpty()) 1379 if(fn.IsEmpty())
1376 return FALSE; 1380 return FALSE;
1377 if(fn[fn.GetLength()-1]==')'){ 1381 if(fn[fn.GetLength()-1]==')'){
1378 int op = fn.ReverseFind('('); 1382 int op = fn.ReverseFind('(');
1379 if(op>0 && fn[op-1]==' '){ 1383 if(op>0 && fn[op-1]==' '){
1380 if(fn.Mid(op+1,fn.GetLength()-op-2).SpanExcluding("0123456789").IsEmpty()) 1384 if(fn.Mid(op+1,fn.GetLength()-op-2).SpanExcluding("0123456789").IsEmpty())
1381 renamed = renamed.Left(op-1); 1385 renamed = renamed.Left(op-1);
1382 } 1386 }
1383 } 1387 }
1384CString testFN; 1388CString testFN;
1385 for(UINT tmp=0;tmp<32768;tmp++){ 1389 for(UINT tmp=0;tmp<32768;tmp++){
1386 testFN.Format("%s (%u)",(LPCTSTR)renamed,tmp); 1390 testFN.Format("%s (%u)",(LPCTSTR)renamed,tmp);
1387 if(!_access((LPCTSTR)testFN,0)) 1391 if(!_access((LPCTSTR)testFN,0))
1388 continue; 1392 continue;
1389 fn=testFN; 1393 fn=testFN;
1390 return TRUE; 1394 return TRUE;
1391 } 1395 }
1392 return FALSE; 1396 return FALSE;
1393} 1397}
1394 1398
1395BOOL CWRQSocket::SaveAs(CString& fn) 1399BOOL CWRQSocket::SaveAs(CString& fn)
1396{ 1400{
1397CFileDialog cfd(FALSE,NULL,fn,OFN_EXPLORER|OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_PATHMUSTEXIST,NULL,m_Daddy); 1401CFileDialog cfd(FALSE,NULL,fn,OFN_EXPLORER|OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_PATHMUSTEXIST,NULL,m_Daddy);
1398CString title; 1402CString title;
1399 title.LoadString(IDS_RENAME_TITLE); 1403 title.LoadString(IDS_RENAME_TITLE);
1400 cfd.m_ofn.lpstrTitle=(LPCTSTR)title; 1404 cfd.m_ofn.lpstrTitle=(LPCTSTR)title;
1401 if(cfd.DoModal()!=IDOK) 1405 if(cfd.DoModal()!=IDOK)
1402 return FALSE; 1406 return FALSE;
1403 fn = cfd.GetPathName(); 1407 fn = cfd.GetPathName();
1404 return TRUE; 1408 return TRUE;
1405} 1409}
1406 1410
1407void CWRQSocket::DoXfer() 1411void CWRQSocket::DoXfer()
1408{ 1412{
1409tftp *p = tftp::Allocate(tftp::tftpACK::tftpSize()); 1413tftp *p = tftp::Allocate(tftp::tftpACK::tftpSize());
1410 ASSERT(p); 1414 ASSERT(p);
1411 p->SetOpcode(tftp::opACK); 1415 p->SetOpcode(tftp::opACK);
1412 p->data.m_ACK.SetBlock(m_ACK); 1416 p->data.m_ACK.SetBlock(m_ACK);
1413 TRACE1("WRQ-ACK-%u\n",m_ACK); 1417 TRACE1("WRQ-ACK-%u\n",m_ACK);
1414 PostTFTP(p,TRUE);// *** ??? Hope this is right 1418 PostTFTP(p,TRUE);// *** ??? Hope this is right
1415} 1419}
1416 1420
1417UINT tftp::tftpACK::tftpSize() 1421UINT tftp::tftpACK::tftpSize()
1418{ 1422{
1419 return tftpHdrSize-tftpSlackSize+sizeof(tftp::tftpACK); 1423 return tftpHdrSize-tftpSlackSize+sizeof(tftp::tftpACK);
1420} 1424}
1421 1425
1422ULONG CWRQSocket::GetACK() 1426ULONG CWRQSocket::GetACK()
1423{ 1427{
1424 return (m_ACK*m_blkSize)-m_LastSlack; 1428 return (m_ACK*m_blkSize)-m_LastSlack;
1425} 1429}
1426 1430
1427void CXferSocket::ResetTimeout() 1431void CXferSocket::ResetTimeout()
1428{ 1432{
1429 ASSERT(m_Daddy); 1433 ASSERT(m_Daddy);
1430 m_Daddy->m_Retrier->KillTimer(m_hSocket); 1434 m_Daddy->m_Retrier->KillTimer(m_hSocket);
1431 if(m_Retry) 1435 if(m_Retry)
1432 m_Daddy->m_Retrier->SetTimer(m_hSocket,min(60,m_Daddy->m_RetryTimeOut.GetTotalSeconds())*1000,NULL); 1436 m_Daddy->m_Retrier->SetTimer(m_hSocket,min(60,m_Daddy->m_RetryTimeOut.GetTotalSeconds())*1000,NULL);
1433 if(!m_bRetry){ 1437 if(!m_bRetry){
1434 m_Daddy->KillTimer(m_hSocket); 1438 m_Daddy->KillTimer(m_hSocket);
1435 m_Daddy->SetTimer(m_hSocket,min(60,m_timeOut)*1000,NULL); 1439 m_Daddy->SetTimer(m_hSocket,min(60,m_timeOut)*1000,NULL);
1436 } 1440 }
1437} 1441}
1438 1442
1439void CXferSocket::Abort() 1443void CXferSocket::Abort()
1440{ 1444{
1441 ASSERT(m_Daddy); 1445 ASSERT(m_Daddy);
1442CString tmp; 1446CString tmp;
1443 tmp.Format(IDS_LOG_XFERABORTED,(LPCTSTR)m_FileName); 1447 tmp.Format(IDS_LOG_XFERABORTED,(LPCTSTR)m_FileName);
1444 m_Daddy->LogLine(tmp); 1448 m_Daddy->LogLine(tmp);
1445 Destroy(FALSE); 1449 Destroy(FALSE);
1446} 1450}
1447 1451
1448void CPumpKINDlg::OnTimer(UINT nIDEvent) 1452void CPumpKINDlg::OnTimer(UINT nIDEvent)
1449{ 1453{
1450CXferSocket *socket; 1454CXferSocket *socket;
1451 if(m_Xfers.Lookup(nIDEvent,socket)){ 1455 if(m_Xfers.Lookup(nIDEvent,socket)){
1452 CString tmp; 1456 CString tmp;
1453 tmp.Format(IDS_LOG_TIMEDOUT,socket->m_FileName); 1457 tmp.Format(IDS_LOG_TIMEDOUT,socket->m_FileName);
1454 LogLine(tmp); 1458 LogLine(tmp);
1455 socket->Abort(); 1459 socket->Abort();
1456 }else{ 1460 }else{
1457 TRACE0("Failed to find timed out socket!\n"); 1461 TRACE0("Failed to find timed out socket!\n");
1458 } 1462 }
1459 CDialog::OnTimer(nIDEvent); 1463 CDialog::OnTimer(nIDEvent);
1460} 1464}
1461 1465
1462void CPumpKINDlg::OnExit() 1466void CPumpKINDlg::OnExit()
1463{ 1467{
1464 if(!m_Xfers.IsEmpty()){ 1468 if(!m_Xfers.IsEmpty()){
1465 CString title,text; 1469 CString title,text;
1466 title.LoadString(IDS_CONFIRMEXIT_TITLE); 1470 title.LoadString(IDS_CONFIRMEXIT_TITLE);
1467 text.LoadString(IDS_CONFIRMEXIT_TEXT); 1471 text.LoadString(IDS_CONFIRMEXIT_TEXT);
1468 if(MessageBox(text,title,MB_ICONQUESTION|MB_YESNO)!=IDYES) 1472 if(MessageBox(text,title,MB_ICONQUESTION|MB_YESNO)!=IDYES)
1469 return; 1473 return;
1470 } 1474 }
1471 m_bExiting=TRUE; 1475 m_bExiting=TRUE;
1472 EndDialog(IDOK); 1476 EndDialog(IDOK);
1473} 1477}
1474 1478
1475void CPumpKINDlg::OnPut() 1479void CPumpKINDlg::OnPut()
1476{ 1480{
1477CRequestDlg crd(NULL); 1481CRequestDlg crd(NULL);
1478 crd.m_Put=TRUE; 1482 crd.m_Put=TRUE;
1479 crd.m_BSize=m_BlockSize; 1483 crd.m_BSize=m_BlockSize;
1480 if(crd.DoModal()==IDOK){ 1484 if(crd.DoModal()==IDOK){
1481 CRRQSocket *socket = new CRRQSocket(this,crd.m_RemoteFile,crd.m_Type,NULL); 1485 CRRQSocket *socket = new CRRQSocket(this,crd.m_RemoteFile,crd.m_Type,NULL);
1482 if(crd.m_BSize) 1486 if(crd.m_BSize)
1483 socket->m__blkSize=crd.m_BSize; 1487 socket->m__blkSize=crd.m_BSize;
1484 if(!socket->Create(crd.m_LocalFile,crd.m_Host)) 1488 if(!socket->Create(crd.m_LocalFile,crd.m_Host))
1485 socket->Destroy(); 1489 socket->Destroy();
1486 } 1490 }
1487} 1491}
1488 1492
1489void CPumpKINDlg::OnGet() 1493void CPumpKINDlg::OnGet()
1490{ 1494{
1491CRequestDlg crd(NULL); 1495CRequestDlg crd(NULL);
1492 crd.m_Put=FALSE; 1496 crd.m_Put=FALSE;
1493 crd.m_BSize=m_BlockSize; 1497 crd.m_BSize=m_BlockSize;
1494 if(crd.DoModal()==IDOK){ 1498 if(crd.DoModal()==IDOK){
1495 CWRQSocket *socket = new CWRQSocket(this,crd.m_RemoteFile,crd.m_Type,NULL); 1499 CWRQSocket *socket = new CWRQSocket(this,crd.m_RemoteFile,crd.m_Type,NULL);
1496 if(crd.m_BSize) 1500 if(crd.m_BSize)
1497 socket->m__blkSize=crd.m_BSize; 1501 socket->m__blkSize=crd.m_BSize;
1498 if(!socket->Create(crd.m_LocalFile,crd.m_Host)) 1502 if(!socket->Create(crd.m_LocalFile,crd.m_Host))
1499 socket->Destroy(); 1503 socket->Destroy();
1500 } 1504 }
1501} 1505}
1502 1506
1503void CPumpKINDlg::SetupButtons() 1507void CPumpKINDlg::SetupButtons()
1504{ 1508{
1505 m_AbortCtl.EnableWindow(m_List.GetSelectedCount()>0); 1509 m_AbortCtl.EnableWindow(m_List.GetSelectedCount()>0);
1506} 1510}
1507 1511
1508void CPumpKINDlg::OnDeleteallitemsConnections(NMHDR* pNMHDR, LRESULT* pResult) 1512void CPumpKINDlg::OnDeleteallitemsConnections(NMHDR* pNMHDR, LRESULT* pResult)
1509{ 1513{
1510 NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; 1514 NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
1511 SetupButtons(); 1515 SetupButtons();
1512 *pResult = 0; 1516 *pResult = 0;
1513} 1517}
1514 1518
1515void CPumpKINDlg::OnDeleteitemConnections(NMHDR* pNMHDR, LRESULT* pResult) 1519void CPumpKINDlg::OnDeleteitemConnections(NMHDR* pNMHDR, LRESULT* pResult)
1516{ 1520{
1517 NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; 1521 NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
1518 SetupButtons(); 1522 SetupButtons();
1519 *pResult = 0; 1523 *pResult = 0;
1520} 1524}
1521 1525
1522void CPumpKINDlg::OnInsertitemConnections(NMHDR* pNMHDR, LRESULT* pResult) 1526void CPumpKINDlg::OnInsertitemConnections(NMHDR* pNMHDR, LRESULT* pResult)
1523{ 1527{
1524 NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; 1528 NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
1525 SetupButtons(); 1529 SetupButtons();
1526 *pResult = 0; 1530 *pResult = 0;
1527} 1531}
1528 1532
1529void CPumpKINDlg::OnItemchangedConnections(NMHDR* pNMHDR, LRESULT* pResult) 1533void CPumpKINDlg::OnItemchangedConnections(NMHDR* pNMHDR, LRESULT* pResult)
1530{ 1534{
1531 NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; 1535 NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
1532 SetupButtons(); 1536 SetupButtons();
1533 *pResult = 0; 1537 *pResult = 0;
1534} 1538}
1535 1539
1536void CPumpKINDlg::OnAbort() 1540void CPumpKINDlg::OnAbort()
1537{ 1541{
1538 if(!m_List.GetSelectedCount()) 1542 if(!m_List.GetSelectedCount())
1539 return; 1543 return;
1540 intitems = m_List.GetItemCount(); 1544 intitems = m_List.GetItemCount();
1541 for(int tmp=0;tmp<items;tmp++){ 1545 for(int tmp=0;tmp<items;tmp++){
1542 if(!(m_List.GetItemState(tmp,LVIS_SELECTED)&LVIS_SELECTED)) 1546 if(!(m_List.GetItemState(tmp,LVIS_SELECTED)&LVIS_SELECTED))
1543 continue; 1547 continue;
1544 CXferSocket *xfer = (CXferSocket*) m_List.GetItemData(tmp); 1548 CXferSocket *xfer = (CXferSocket*) m_List.GetItemData(tmp);
1545 ASSERT(xfer); 1549 ASSERT(xfer);
1546 xfer->Abort(); 1550 xfer->Abort();
1547 } 1551 }
1548} 1552}
1549 1553
1550void CXferSocket::OnFailedToResolve() 1554void CXferSocket::OnFailedToResolve()
1551{ 1555{
1552 TRACE0("Resolve failed\n"); 1556 TRACE0("Resolve failed\n");
1553 delete m_wndResolver; 1557 delete m_wndResolver;
1554 m_wndResolver=NULL; 1558 m_wndResolver=NULL;
1555 ASSERT(m_Daddy); 1559 ASSERT(m_Daddy);
1556CString tmp; 1560CString tmp;
1557 tmp.Format(IDS_LOG_RESOLVEFAILED,m_HostName); 1561 tmp.Format(IDS_LOG_RESOLVEFAILED,m_HostName);
1558 m_Daddy->LogLine(tmp); 1562 m_Daddy->LogLine(tmp);
1559 Abort(); 1563 Abort();
1560} 1564}
1561 1565
1562void CXferSocket::OnResolved() 1566void CXferSocket::OnResolved()
1563{ 1567{
1564 delete m_wndResolver; 1568 delete m_wndResolver;
1565 m_wndResolver=NULL; 1569 m_wndResolver=NULL;
1566 TRACE0("Resolved\n"); 1570 TRACE0("Resolved\n");
1567 m_Peer.sin_addr.s_addr = *(DWORD*)(((hostent*)m_ResolveBuff)->h_addr); 1571 m_Peer.sin_addr.s_addr = *(DWORD*)(((hostent*)m_ResolveBuff)->h_addr);
1568} 1572}
1569 1573
1570void CRRQSocket::OnResolved() 1574void CRRQSocket::OnResolved()
1571{ 1575{
1572 CXferSocket::OnResolved(); 1576 CXferSocket::OnResolved();
1573 OnHostKnown(); 1577 OnHostKnown();
1574} 1578}
1575 1579
1576void CRRQSocket::OnHostKnown() 1580void CRRQSocket::OnHostKnown()
1577{ 1581{
1578 ASSERT(m_Daddy); 1582 ASSERT(m_Daddy);
1579 m_Peer.sin_port=htons(m_Daddy->m_SpeakPort); 1583 m_Peer.sin_port=htons(m_Daddy->m_SpeakPort);
1580tftp::tftpOptions o; 1584tftp::tftpOptions o;
1581CString v; 1585CString v;
1582 ASSERT(m_xferSize>=0); 1586 ASSERT(m_xferSize>=0);
1583 v.Format("%lu",m_xferSize); 1587 v.Format("%lu",m_xferSize);
1584 o[tftpoTSize] = v; 1588 o[tftpoTSize] = v;
1585 ASSERT(m__blkSize); 1589 ASSERT(m__blkSize);
1586 v.Format("%u",m__blkSize); 1590 v.Format("%u",m__blkSize);
1587 o[tftpoBSize] = v; 1591 o[tftpoBSize] = v;
1588 ASSERT(m__timeOut); 1592 ASSERT(m__timeOut);
1589 v.Format("%u",m__timeOut); 1593 v.Format("%u",m__timeOut);
1590 o[tftpoTOut] = v; 1594 o[tftpoTOut] = v;
1591 o[tftpoXResume] = "0"; 1595 o[tftpoXResume] = "0";
1592 tftp*p = tftp::Allocate(tftp::tftpWRQ::tftpSize(m_FileName,m_Type,&o)); 1596 tftp*p = tftp::Allocate(tftp::tftpWRQ::tftpSize(m_FileName,m_Type,&o));
1593 ASSERT(p); 1597 ASSERT(p);
1594 p->SetOpcode(tftp::opWRQ); 1598 p->SetOpcode(tftp::opWRQ);
1595 p->data.m_WRQ.Set(m_FileName,m_Type,&o); 1599 p->data.m_WRQ.Set(m_FileName,m_Type,&o);
1596 PostTFTP(p,TRUE); 1600 PostTFTP(p,TRUE);
1597 state=stateInit; 1601 state=stateInit;
1598 UpdateList(); 1602 UpdateList();
1599} 1603}
1600 1604
1601UINT tftp::tftpRQ::tftpSize(LPCTSTR file,LPCTSTR type,tftp::tftpOptions* ops) 1605UINT tftp::tftpRQ::tftpSize(LPCTSTR file,LPCTSTR type,tftp::tftpOptions* ops)
1602{ 1606{
1603UINT rv = tftpHdrSize-tftpSlackSize+strlen(file)+1+strlen(type)+1; 1607UINT rv = tftpHdrSize-tftpSlackSize+strlen(file)+1+strlen(type)+1;
1604 if(ops){ 1608 if(ops){
1605 tftpOptions& o = *ops; 1609 tftpOptions& o = *ops;
1606 POSITION p = o.GetStartPosition(); 1610 POSITION p = o.GetStartPosition();
1607 while(p){ 1611 while(p){
1608 CString n,v; 1612 CString n,v;
1609 o.GetNextAssoc(p,n,v); 1613 o.GetNextAssoc(p,n,v);
1610 rv+=n.GetLength()+1+v.GetLength()+1; 1614 rv+=n.GetLength()+1+v.GetLength()+1;
1611 } 1615 }
1612 } 1616 }
1613 return rv; 1617 return rv;
1614} 1618}
1615UINT tftp::tftpRRQ::tftpSize(LPCTSTR file,LPCTSTR type,tftp::tftpOptions* ops) 1619UINT tftp::tftpRRQ::tftpSize(LPCTSTR file,LPCTSTR type,tftp::tftpOptions* ops)
1616{ 1620{
1617 return tftp::tftpRQ::tftpSize(file,type,ops); 1621 return tftp::tftpRQ::tftpSize(file,type,ops);
1618} 1622}
1619UINT tftp::tftpWRQ::tftpSize(LPCTSTR file,LPCTSTR type,tftp::tftpOptions* ops) 1623UINT tftp::tftpWRQ::tftpSize(LPCTSTR file,LPCTSTR type,tftp::tftpOptions* ops)
1620{ 1624{
1621 return tftp::tftpRQ::tftpSize(file,type,ops); 1625 return tftp::tftpRQ::tftpSize(file,type,ops);
1622} 1626}
1623UINT tftp::tftpOACK::tftpSize(tftp::tftpOptions* ops) 1627UINT tftp::tftpOACK::tftpSize(tftp::tftpOptions* ops)
1624{ 1628{
1625UINT rv = tftpHdrSize-tftpSlackSize; 1629UINT rv = tftpHdrSize-tftpSlackSize;
1626 if(ops){ 1630 if(ops){
1627 tftpOptions& o = *ops; 1631 tftpOptions& o = *ops;
1628 POSITION p = o.GetStartPosition(); 1632 POSITION p = o.GetStartPosition();
1629 while(p){ 1633 while(p){
1630 CString n,v; 1634 CString n,v;
1631 o.GetNextAssoc(p,n,v); 1635 o.GetNextAssoc(p,n,v);
1632 rv+=n.GetLength()+1+v.GetLength()+1; 1636 rv+=n.GetLength()+1+v.GetLength()+1;
1633 } 1637 }
1634 } 1638 }
1635 return rv; 1639 return rv;
1636} 1640}
1637void tftp::tftpRQ::Set(LPCTSTR file,LPCTSTR type,tftp::tftpOptions* ops) 1641void tftp::tftpRQ::Set(LPCTSTR file,LPCTSTR type,tftp::tftpOptions* ops)
1638{ 1642{
1639 // MAY BE DANGEROUS! 1643 // MAY BE DANGEROUS!
1640UINT ptr = 0; 1644UINT ptr = 0;
1641 strcpy((LPTSTR)&data[ptr],file); ptr+=strlen(file)+1; 1645 strcpy((LPTSTR)&data[ptr],file); ptr+=strlen(file)+1;
1642 strcpy((LPTSTR)&data[ptr],type); ptr+=strlen(type)+1; 1646 strcpy((LPTSTR)&data[ptr],type); ptr+=strlen(type)+1;
1643 if(ops){ 1647 if(ops){
1644 tftpOptions& o = *ops; 1648 tftpOptions& o = *ops;
1645 POSITION p = o.GetStartPosition(); 1649 POSITION p = o.GetStartPosition();
1646 while(p){ 1650 while(p){
1647 CString n,v; 1651 CString n,v;
1648 o.GetNextAssoc(p,n,v); 1652 o.GetNextAssoc(p,n,v);
1649 strcpy((LPTSTR)&data[ptr],(LPCTSTR)n); ptr+=n.GetLength()+1; 1653 strcpy((LPTSTR)&data[ptr],(LPCTSTR)n); ptr+=n.GetLength()+1;
1650 strcpy((LPTSTR)&data[ptr],(LPCTSTR)v); ptr+=v.GetLength()+1; 1654 strcpy((LPTSTR)&data[ptr],(LPCTSTR)v); ptr+=v.GetLength()+1;
1651 } 1655 }
1652 } 1656 }
1653} 1657}
1654void tftp::tftpRRQ::Set(LPCTSTR file,LPCTSTR type,tftp::tftpOptions* ops) 1658void tftp::tftpRRQ::Set(LPCTSTR file,LPCTSTR type,tftp::tftpOptions* ops)
1655{ 1659{
1656 // MAY BE DANGEROUS! 1660 // MAY BE DANGEROUS!
1657UINT ptr = 0; 1661UINT ptr = 0;
1658 strcpy((LPTSTR)&data[ptr],file); ptr+=strlen(file)+1; 1662 strcpy((LPTSTR)&data[ptr],file); ptr+=strlen(file)+1;
1659 strcpy((LPTSTR)&data[ptr],type); ptr+=strlen(type)+1; 1663 strcpy((LPTSTR)&data[ptr],type); ptr+=strlen(type)+1;
1660 if(ops){ 1664 if(ops){
1661 tftpOptions& o = *ops; 1665 tftpOptions& o = *ops;
1662 POSITION p = o.GetStartPosition(); 1666 POSITION p = o.GetStartPosition();
1663 while(p){ 1667 while(p){
1664 CString n,v; 1668 CString n,v;
1665 o.GetNextAssoc(p,n,v); 1669 o.GetNextAssoc(p,n,v);
1666 strcpy((LPTSTR)&data[ptr],(LPCTSTR)n); ptr+=n.GetLength()+1; 1670 strcpy((LPTSTR)&data[ptr],(LPCTSTR)n); ptr+=n.GetLength()+1;
1667 strcpy((LPTSTR)&data[ptr],(LPCTSTR)v); ptr+=v.GetLength()+1; 1671 strcpy((LPTSTR)&data[ptr],(LPCTSTR)v); ptr+=v.GetLength()+1;
1668 } 1672 }
1669 } 1673 }
1670} 1674}
1671void tftp::tftpWRQ::Set(LPCTSTR file,LPCTSTR type,tftp::tftpOptions* ops) 1675void tftp::tftpWRQ::Set(LPCTSTR file,LPCTSTR type,tftp::tftpOptions* ops)
1672{ 1676{
1673 // MAY BE DANGEROUS! 1677 // MAY BE DANGEROUS!
1674UINT ptr = 0; 1678UINT ptr = 0;
1675 strcpy((LPTSTR)&data[ptr],file); ptr+=strlen(file)+1; 1679 strcpy((LPTSTR)&data[ptr],file); ptr+=strlen(file)+1;
1676 strcpy((LPTSTR)&data[ptr],type); ptr+=strlen(type)+1; 1680 strcpy((LPTSTR)&data[ptr],type); ptr+=strlen(type)+1;
1677 if(ops){ 1681 if(ops){
1678 tftpOptions& o = *ops; 1682 tftpOptions& o = *ops;
1679 POSITION p = o.GetStartPosition(); 1683 POSITION p = o.GetStartPosition();
1680 while(p){ 1684 while(p){
1681 CString n,v; 1685 CString n,v;
1682 o.GetNextAssoc(p,n,v); 1686 o.GetNextAssoc(p,n,v);
1683 strcpy((LPTSTR)&data[ptr],(LPCTSTR)n); ptr+=n.GetLength()+1; 1687 strcpy((LPTSTR)&data[ptr],(LPCTSTR)n); ptr+=n.GetLength()+1;
1684 strcpy((LPTSTR)&data[ptr],(LPCTSTR)v); ptr+=v.GetLength()+1; 1688 strcpy((LPTSTR)&data[ptr],(LPCTSTR)v); ptr+=v.GetLength()+1;
1685 } 1689 }
1686 } 1690 }
1687} 1691}
1688void tftp::tftpOACK::Set(tftpOptions* ops) 1692void tftp::tftpOACK::Set(tftpOptions* ops)
1689{ 1693{
1690 ASSERT(ops); 1694 ASSERT(ops);
1691UINT ptr = 0; 1695UINT ptr = 0;
1692tftpOptions& o = *ops; 1696tftpOptions& o = *ops;
1693POSITION p = o.GetStartPosition(); 1697POSITION p = o.GetStartPosition();
1694 while(p){ 1698 while(p){
1695 CString n,v; 1699 CString n,v;
1696 o.GetNextAssoc(p,n,v); 1700 o.GetNextAssoc(p,n,v);
1697 strcpy((LPTSTR)&data[ptr],(LPCTSTR)n); ptr+=n.GetLength()+1; 1701 strcpy((LPTSTR)&data[ptr],(LPCTSTR)n); ptr+=n.GetLength()+1;
1698 strcpy((LPTSTR)&data[ptr],(LPCTSTR)v); ptr+=v.GetLength()+1; 1702 strcpy((LPTSTR)&data[ptr],(LPCTSTR)v); ptr+=v.GetLength()+1;
1699 } 1703 }
1700} 1704}
1701 1705
1702void CWRQSocket::OnResolved() 1706void CWRQSocket::OnResolved()
1703{ 1707{
1704 CXferSocket::OnResolved(); 1708 CXferSocket::OnResolved();
1705 OnHostKnown(); 1709 OnHostKnown();
1706} 1710}
1707 1711
1708void CWRQSocket::OnHostKnown() 1712void CWRQSocket::OnHostKnown()
1709{ 1713{
1710 ASSERT(m_Daddy); 1714 ASSERT(m_Daddy);
1711 m_Peer.sin_port=htons(m_Daddy->m_SpeakPort); 1715 m_Peer.sin_port=htons(m_Daddy->m_SpeakPort);
1712tftp::tftpOptions o; 1716tftp::tftpOptions o;
1713CString v; 1717CString v;
1714 o[tftpoTSize]="0"; 1718 o[tftpoTSize]="0";
1715 if(m__blkSize){ 1719 if(m__blkSize){
1716 v.Format("%u",m__blkSize); 1720 v.Format("%u",m__blkSize);
1717 o[tftpoBSize]=v; 1721 o[tftpoBSize]=v;
1718 } 1722 }
1719 if(m__timeOut){ 1723 if(m__timeOut){
1720 v.Format("%u",m__timeOut); 1724 v.Format("%u",m__timeOut);
1721 o[tftpoTOut]=v; 1725 o[tftpoTOut]=v;
1722 } 1726 }
1723 tftp*p = tftp::Allocate(tftp::tftpRRQ::tftpSize(m_FileName,m_Type,&o)); 1727 tftp*p = tftp::Allocate(tftp::tftpRRQ::tftpSize(m_FileName,m_Type,&o));
1724 ASSERT(p); 1728 ASSERT(p);
1725 p->SetOpcode(tftp::opRRQ); 1729 p->SetOpcode(tftp::opRRQ);
1726 p->data.m_RRQ.Set(m_FileName,m_Type,&o); 1730 p->data.m_RRQ.Set(m_FileName,m_Type,&o);
1727 PostTFTP(p,TRUE); 1731 PostTFTP(p,TRUE);
1728 state=stateInit; 1732 state=stateInit;
1729 UpdateList(); 1733 UpdateList();
1730} 1734}
1731 1735
1732void CPumpKINDlg::OnClose() 1736void CPumpKINDlg::OnClose()
1733{ 1737{
1734 OnTrayShowpumpkinwindow(); 1738 OnTrayShowpumpkinwindow();
1735} 1739}
1736 1740
1737void CPumpKINDlg::OnTrayShowpumpkinwindow() 1741void CPumpKINDlg::OnTrayShowpumpkinwindow()
1738{ 1742{
1739 if(IsWindowVisible()){ 1743 if(IsWindowVisible()){
1740 m_bShown=FALSE; 1744 m_bShown=FALSE;
1741 ShowWindow(SW_HIDE); 1745 ShowWindow(SW_HIDE);
1742 }else{ 1746 }else{
1743 m_bShown=TRUE; 1747 m_bShown=TRUE;
1744 ShowWindow(SW_SHOW); 1748 ShowWindow(SW_SHOW);
1745 SetForegroundWindow(); 1749 SetForegroundWindow();
1746 SetFocus(); 1750 SetFocus();
1747 } 1751 }
1748} 1752}
1749 1753
1750void CPumpKINDlg::OnTrayExit() 1754void CPumpKINDlg::OnTrayExit()
1751{ 1755{
1752 OnExit(); 1756 OnExit();
1753} 1757}
1754 1758
1755void CPumpKINDlg::OnTrayAboutpumpkin() 1759void CPumpKINDlg::OnTrayAboutpumpkin()
1756{ 1760{
1757CAboutDlg dlgAbout; 1761CAboutDlg dlgAbout;
1758 dlgAbout.DoModal(); 1762 dlgAbout.DoModal();
1759} 1763}
1760 1764
1761void CPumpKINDlg::OnTrayFetchfile() 1765void CPumpKINDlg::OnTrayFetchfile()
1762{ 1766{
1763 OnGet(); 1767 OnGet();
1764} 1768}
1765 1769
1766void CPumpKINDlg::OnTrayHelp() 1770void CPumpKINDlg::OnTrayHelp()
1767{ 1771{
1768 OnHelp(); 1772 OnHelp();
1769} 1773}
1770 1774
1771void CPumpKINDlg::OnTrayOptions() 1775void CPumpKINDlg::OnTrayOptions()
1772{ 1776{
1773 OnOptions(); 1777 OnOptions();
1774} 1778}
1775 1779
1776void CPumpKINDlg::OnTraySendfile() 1780void CPumpKINDlg::OnTraySendfile()
1777{ 1781{
1778 OnPut(); 1782 OnPut();
1779} 1783}
1780 1784
1781void CPumpKINDlg::LoadSettings() 1785void CPumpKINDlg::LoadSettings()
1782{ 1786{
1783CWinApp *app = AfxGetApp(); 1787CWinApp *app = AfxGetApp();
1784 ASSERT(app); 1788 ASSERT(app);
1785 m_bnwRequest=app->GetProfileString("BellsNWhistles","Request",m_bnwRequest); 1789 m_bnwRequest=app->GetProfileString("BellsNWhistles","Request",m_bnwRequest);
1786 m_bnwSuccess=app->GetProfileString("BellsNWhistles","Success",m_bnwSuccess); 1790 m_bnwSuccess=app->GetProfileString("BellsNWhistles","Success",m_bnwSuccess);
1787 m_bnwAbort=app->GetProfileString("BellsNWhistles","Abort",m_bnwAbort); 1791 m_bnwAbort=app->GetProfileString("BellsNWhistles","Abort",m_bnwAbort);
1788 m_bTFTPSubdirs=app->GetProfileInt("TFTPSettings","Subdirs",m_bTFTPSubdirs); 1792 m_bTFTPSubdirs=app->GetProfileInt("TFTPSettings","Subdirs",m_bTFTPSubdirs);
1789 m_ListenPort=app->GetProfileInt("TFTPSettings","ListenPort",m_ListenPort); 1793 m_ListenPort=app->GetProfileInt("TFTPSettings","ListenPort",m_ListenPort);
1790 m_LogLength=app->GetProfileInt("UISettings","LogLength",m_LogLength); 1794 m_LogLength=app->GetProfileInt("UISettings","LogLength",m_LogLength);
1791 m_PromptTimeOut=app->GetProfileInt("UISettings","PromptTimeout",m_PromptTimeOut); 1795 m_PromptTimeOut=app->GetProfileInt("UISettings","PromptTimeout",m_PromptTimeOut);
1792 m_RRQMode=app->GetProfileInt("TFTPSettings","RRQMode",m_RRQMode); 1796 m_RRQMode=app->GetProfileInt("TFTPSettings","RRQMode",m_RRQMode);
1793 m_SpeakPort=app->GetProfileInt("TFTPSettings","SpeakPort",m_SpeakPort); 1797 m_SpeakPort=app->GetProfileInt("TFTPSettings","SpeakPort",m_SpeakPort);
1794 m_TFTPRoot=app->GetProfileString("TFTPSettings","TFTPRoot",m_TFTPRoot); 1798 m_TFTPRoot=app->GetProfileString("TFTPSettings","TFTPRoot",m_TFTPRoot);
1795 m_TFTPTimeOut=CTimeSpan(app->GetProfileInt("TFTPSettings","TFTPTimeout",m_TFTPTimeOut.GetTotalSeconds())); 1799 m_TFTPTimeOut=CTimeSpan(app->GetProfileInt("TFTPSettings","TFTPTimeout",m_TFTPTimeOut.GetTotalSeconds()));
1796 m_BlockSize=app->GetProfileInt("TFTPSettings","TFTPBlockSize",m_BlockSize); 1800 m_BlockSize=app->GetProfileInt("TFTPSettings","TFTPBlockSize",m_BlockSize);
1797 m_RetryTimeOut=CTimeSpan(app->GetProfileInt("TFTPSettings","RetryTimeout",m_RetryTimeOut.GetTotalSeconds())); 1801 m_RetryTimeOut=CTimeSpan(app->GetProfileInt("TFTPSettings","RetryTimeout",m_RetryTimeOut.GetTotalSeconds()));
1798 m_WRQMode=app->GetProfileInt("TFTPSettings","WRQMode",m_WRQMode); 1802 m_WRQMode=app->GetProfileInt("TFTPSettings","WRQMode",m_WRQMode);
1799 m_bShown=app->GetProfileInt("UISettings","Visble",m_bShown); 1803 m_bShown=app->GetProfileInt("UISettings","Visble",m_bShown);
1800 if(m_TFTPRoot.IsEmpty()){ 1804 if(m_TFTPRoot.IsEmpty()){
1801 DWORD dL = ::GetCurrentDirectory(0,NULL); 1805 DWORD dL = ::GetCurrentDirectory(0,NULL);
1802 VERIFY(::GetCurrentDirectory(dL,m_TFTPRoot.GetBuffer(dL))); 1806 VERIFY(::GetCurrentDirectory(dL,m_TFTPRoot.GetBuffer(dL)));
1803 m_TFTPRoot.ReleaseBuffer(); 1807 m_TFTPRoot.ReleaseBuffer();
1804 } 1808 }
1805 ::SetCurrentDirectory(m_TFTPRoot); 1809 ::SetCurrentDirectory(m_TFTPRoot);
1806} 1810}
1807 1811
1808void CPumpKINDlg::SaveSettings() 1812void CPumpKINDlg::SaveSettings()
1809{ 1813{
1810CWinApp *app = AfxGetApp(); 1814CWinApp *app = AfxGetApp();
1811 ASSERT(app); 1815 ASSERT(app);
1812 app->WriteProfileString("BellsNWhistles","Request",m_bnwRequest); 1816 app->WriteProfileString("BellsNWhistles","Request",m_bnwRequest);
1813 app->WriteProfileString("BellsNWhistles","Success",m_bnwSuccess); 1817 app->WriteProfileString("BellsNWhistles","Success",m_bnwSuccess);
1814 app->WriteProfileString("BellsNWhistles","Abort",m_bnwAbort); 1818 app->WriteProfileString("BellsNWhistles","Abort",m_bnwAbort);
1815 app->WriteProfileInt("TFTPSettings","Subdirs",m_bTFTPSubdirs); 1819 app->WriteProfileInt("TFTPSettings","Subdirs",m_bTFTPSubdirs);
1816 app->WriteProfileInt("TFTPSettings","ListenPort",m_ListenPort); 1820 app->WriteProfileInt("TFTPSettings","ListenPort",m_ListenPort);
1817 app->WriteProfileInt("UISettings","LogLength",m_LogLength); 1821 app->WriteProfileInt("UISettings","LogLength",m_LogLength);
1818 app->WriteProfileInt("UISettings","PromptTimeout",m_PromptTimeOut); 1822 app->WriteProfileInt("UISettings","PromptTimeout",m_PromptTimeOut);
1819 app->WriteProfileInt("TFTPSettings","RRQMode",m_RRQMode); 1823 app->WriteProfileInt("TFTPSettings","RRQMode",m_RRQMode);
1820 app->WriteProfileInt("TFTPSettings","SpeakPort",m_SpeakPort); 1824 app->WriteProfileInt("TFTPSettings","SpeakPort",m_SpeakPort);
1821 app->WriteProfileString("TFTPSettings","TFTPRoot",m_TFTPRoot); 1825 app->WriteProfileString("TFTPSettings","TFTPRoot",m_TFTPRoot);
1822 app->WriteProfileInt("TFTPSettings","TFTPTimeout",m_TFTPTimeOut.GetTotalSeconds()); 1826 app->WriteProfileInt("TFTPSettings","TFTPTimeout",m_TFTPTimeOut.GetTotalSeconds());
1823 app->WriteProfileInt("TFTPSettings","TFTPBlockSize",m_BlockSize); 1827 app->WriteProfileInt("TFTPSettings","TFTPBlockSize",m_BlockSize);
1824 app->WriteProfileInt("TFTPSettings","RetryTimeout",m_RetryTimeOut.GetTotalSeconds()); 1828 app->WriteProfileInt("TFTPSettings","RetryTimeout",m_RetryTimeOut.GetTotalSeconds());
1825 app->WriteProfileInt("TFTPSettings","WRQMode",m_WRQMode); 1829 app->WriteProfileInt("TFTPSettings","WRQMode",m_WRQMode);
1826 app->WriteProfileInt("UISettings","Visble",m_bShown); 1830 app->WriteProfileInt("UISettings","Visble",m_bShown);
1827} 1831}
1828 1832
1829void CPumpKINDlg::OnWindowPosChanging(WINDOWPOS FAR* lpwndpos) 1833void CPumpKINDlg::OnWindowPosChanging(WINDOWPOS FAR* lpwndpos)
1830{ 1834{
1831 CDialog::OnWindowPosChanging(lpwndpos); 1835 CDialog::OnWindowPosChanging(lpwndpos);
1832 if(!m_bExiting){ 1836 if(!m_bExiting){
1833 if(m_bShown){ 1837 if(m_bShown){
1834 lpwndpos->flags&=~SWP_HIDEWINDOW; 1838 lpwndpos->flags&=~SWP_HIDEWINDOW;
1835 lpwndpos->flags|=SWP_SHOWWINDOW; 1839 lpwndpos->flags|=SWP_SHOWWINDOW;
1836 }else{ 1840 }else{
1837 lpwndpos->flags&=~SWP_SHOWWINDOW; 1841 lpwndpos->flags&=~SWP_SHOWWINDOW;
1838 lpwndpos->flags|=SWP_HIDEWINDOW; 1842 lpwndpos->flags|=SWP_HIDEWINDOW;
1839 if(::GetForegroundWindow()==m_hWnd && (m_Trayer && !m_Trayer->m_inMenu)) 1843 if(::GetForegroundWindow()==m_hWnd && (m_Trayer && !m_Trayer->m_inMenu))
1840 GetDesktopWindow()->SetForegroundWindow(); 1844 GetDesktopWindow()->SetForegroundWindow();
1841 } 1845 }
1842 } 1846 }
1843} 1847}
1844 1848
1845CString CXferSocket::ApplyRootGently(LPCTSTR fn) 1849CString CXferSocket::ApplyRootGently(LPCTSTR fn)
1846{ 1850{
1847CString f = fn; 1851CString f = fn;
1848CString rv = f; 1852CString rv = f;
1849 if((!f.IsEmpty()) && f[0]!='\\' && f.Find(":")<0 && f.Find("\\")<0) 1853 if((!f.IsEmpty()) && f[0]!='\\' && f.Find(":")<0 && f.Find("\\")<0)
1850 rv = ApplyRoot(f); 1854 rv = ApplyRoot(f);
1851 return rv; 1855 return rv;
1852} 1856}
1853 1857
1854BOOL CXferSocket::CheckBadRelativeness(LPCTSTR file) 1858BOOL CXferSocket::CheckBadRelativeness(LPCTSTR file)
1855{ 1859{
1856CString tmp = file; 1860CString tmp = file;
1857 if(tmp.IsEmpty()) 1861 if(tmp.IsEmpty())
1858 return FALSE; 1862 return FALSE;
1859 if(tmp.Find("..")>=0) 1863 if(tmp.Find("..")>=0)
1860 return TRUE; 1864 return TRUE;
1861 if(tmp.Find(":")>=0) 1865 if(tmp.Find(":")>=0)
1862 return TRUE; 1866 return TRUE;
1863 if((!m_Daddy->m_bTFTPSubdirs) && m_FileName.Find('\\')>=0) 1867 if((!m_Daddy->m_bTFTPSubdirs) && m_FileName.Find('\\')>=0)
1864 return TRUE; 1868 return TRUE;
1865 return FALSE; 1869 return FALSE;
1866} 1870}
1867 1871
1868void CAboutDlg::OnKlevernet() 1872void CAboutDlg::OnKlevernet()
1869{ 1873{
1870CString url; 1874CString url;
1871 url.LoadString(IDS_KLEVERNET_URL); 1875 url.LoadString(IDS_KLEVERNET_URL);
1872 ShellExecute(::GetDesktopWindow(),"open",url,NULL,NULL,SW_SHOWMAXIMIZED); 1876 ShellExecute(::GetDesktopWindow(),"open",url,NULL,NULL,SW_SHOWMAXIMIZED);
1873} 1877}
1874 1878
1875BOOL CPumpKINDlg::PreTranslateMessage(MSG* pMsg) 1879BOOL CPumpKINDlg::PreTranslateMessage(MSG* pMsg)
1876{ 1880{
1877 // CG: The following block was added by the ToolTips component. 1881 // CG: The following block was added by the ToolTips component.
1878 { 1882 {
1879 // Let the ToolTip process this message. 1883 // Let the ToolTip process this message.
1880 m_tooltip.RelayEvent(pMsg); 1884 m_tooltip.RelayEvent(pMsg);
1881 1885
1882 return CDialog::PreTranslateMessage(pMsg); 1886 return CDialog::PreTranslateMessage(pMsg);
1883 } 1887 }
1884} 1888}
1885 1889
1886void CPumpKINDlg::OnSelchangeLog() 1890void CPumpKINDlg::OnSelchangeLog()
1887{ 1891{
1888int sel = m_Log.GetCurSel(); 1892int sel = m_Log.GetCurSel();
1889 if(sel==LB_ERR){ 1893 if(sel==LB_ERR){
1890 TRACE0("Error retrieving selection\n"); 1894 TRACE0("Error retrieving selection\n");
1891 }else{ 1895 }else{
1892 CTime *t = (CTime*)m_Log.GetItemData(sel); 1896 CTime *t = (CTime*)m_Log.GetItemData(sel);
1893 ASSERT(t); 1897 ASSERT(t);
1894 m_tooltip.UpdateTipText(t->Format(IDS_LOGTIMEFORMAT),&m_Log); 1898 m_tooltip.UpdateTipText(t->Format(IDS_LOGTIMEFORMAT),&m_Log);
1895 } 1899 }
1896} 1900}
1897 1901
1898void CPumpKINDlg::OnTrayOpenfilesfolder() 1902void CPumpKINDlg::OnTrayOpenfilesfolder()
1899{ 1903{
1900 ShellExecute(::GetDesktopWindow(),NULL,m_TFTPRoot,NULL,NULL,SW_SHOWDEFAULT); 1904 ShellExecute(::GetDesktopWindow(),NULL,m_TFTPRoot,NULL,NULL,SW_SHOWDEFAULT);
1901} 1905}
1902 1906
1903void CPumpKINDlg::OnDropFiles(HDROP hDropInfo) 1907void CPumpKINDlg::OnDropFiles(HDROP hDropInfo)
1904{ 1908{
1905UINT files = ::DragQueryFile(hDropInfo,0xFFFFFFFF,NULL,0); 1909UINT files = ::DragQueryFile(hDropInfo,0xFFFFFFFF,NULL,0);
1906 ASSERT(files); 1910 ASSERT(files);
1907 for(UINT file=0;file<files;file++){ 1911 for(UINT file=0;file<files;file++){
1908 CString theFile; 1912 CString theFile;
1909 UINT fileNameLength = ::DragQueryFile(hDropInfo,file,NULL,0); 1913 UINT fileNameLength = ::DragQueryFile(hDropInfo,file,NULL,0);
1910 ASSERT(fileNameLength); 1914 ASSERT(fileNameLength);
1911 VERIFY(::DragQueryFile(hDropInfo,file,theFile.GetBuffer(fileNameLength+5),fileNameLength+4)<=fileNameLength); 1915 VERIFY(::DragQueryFile(hDropInfo,file,theFile.GetBuffer(fileNameLength+5),fileNameLength+4)<=fileNameLength);
1912 theFile.ReleaseBuffer(); 1916 theFile.ReleaseBuffer();
1913 // Send it over! 1917 // Send it over!
1914 CRequestDlg crd(NULL); 1918 CRequestDlg crd(NULL);
1915 crd.m_Drop=TRUE; 1919 crd.m_Drop=TRUE;
1916 crd.m_Put=TRUE; 1920 crd.m_Put=TRUE;
1917 crd.m_BSize=m_BlockSize; 1921 crd.m_BSize=m_BlockSize;
1918 crd.m_LocalFile=theFile; 1922 crd.m_LocalFile=theFile;
1919 if(crd.DoModal()==IDOK){ 1923 if(crd.DoModal()==IDOK){
1920 CRRQSocket *socket = new CRRQSocket(this,crd.m_RemoteFile,crd.m_Type,NULL); 1924 CRRQSocket *socket = new CRRQSocket(this,crd.m_RemoteFile,crd.m_Type,NULL);
1921 if(crd.m_BSize) 1925 if(crd.m_BSize)
1922 socket->m__blkSize=crd.m_BSize; 1926 socket->m__blkSize=crd.m_BSize;
1923 if(!socket->Create(crd.m_LocalFile,crd.m_Host)) 1927 if(!socket->Create(crd.m_LocalFile,crd.m_Host))
1924 socket->Destroy(); 1928 socket->Destroy();
1925 } 1929 }
1926 } 1930 }
1927 ::DragFinish(hDropInfo); 1931 ::DragFinish(hDropInfo);
1928} 1932}
1929 1933
1930void CPumpKINDlg::OnCancel() 1934void CPumpKINDlg::OnCancel()
1931{ 1935{
1932 OnClose(); 1936 OnClose();
1933} 1937}
1934 1938
1935CPumpKINDlg::~CPumpKINDlg() 1939CPumpKINDlg::~CPumpKINDlg()
1936{ 1940{
1937 delete m_Trayer; 1941 delete m_Trayer;
1938 delete m_Retrier; 1942 delete m_Retrier;
1939} 1943}
1940 1944
1941void CXferSocket::OnRetry() 1945void CXferSocket::OnRetry()
1942{ 1946{
1943 if(!m_Retry){ 1947 if(!m_Retry){
1944 TRACE("Retrying unretriable..\n"); 1948 TRACE("Retrying unretriable..\n");
1945 return; 1949 return;
1946 } 1950 }
1947 TRACE0("Retrying..\n"); 1951 TRACE0("Retrying..\n");
1948 m_bRetry=TRUE; 1952 m_bRetry=TRUE;
1949 PostTFTP(tftp::Copy(m_Retry)); 1953 PostTFTP(tftp::Copy(m_Retry));
1950 m_bRetry=FALSE; 1954 m_bRetry=FALSE;
1951} 1955}
1952 1956
1953tftp* tftp::Copy(tftp *src) 1957tftp* tftp::Copy(tftp *src)
1954{ 1958{
1955 ASSERT(src); 1959 ASSERT(src);
1956 ASSERT(src->length); 1960 ASSERT(src->length);
1957tftp* rv = Allocate(src->length); 1961tftp* rv = Allocate(src->length);
1958 ASSERT(rv); 1962 ASSERT(rv);
1959 memmove(rv,src,tftpSlackSize+src->length); 1963 memmove(rv,src,tftpSlackSize+src->length);
1960 return rv; 1964 return rv;
1961} 1965}
1962 1966
1963void CXferSocket::SetTry(tftp *p) 1967void CXferSocket::SetTry(tftp *p)
1964{ 1968{
1965 if(m_Retry) 1969 if(m_Retry)
1966 delete m_Retry; 1970 delete m_Retry;
1967 m_Retry=p?tftp::Copy(p):NULL; 1971 m_Retry=p?tftp::Copy(p):NULL;
1968} 1972}
1969 1973
1970void CPumpKINDlg::OnHelp() 1974void CPumpKINDlg::OnHelp()
1971{ 1975{
1972 AfxGetApp()->WinHelp(0,HELP_FINDER); 1976 AfxGetApp()->WinHelp(0,HELP_FINDER);
1973} 1977}
diff --git a/install/install.cpp b/install/install.cpp
index 62f1e20..6fa4ae4 100644
--- a/install/install.cpp
+++ b/install/install.cpp
@@ -1,67 +1,67 @@
1#include "resource.h" 1#include "resource.h"
2#include "../shared-code/install.h" 2#include "../shared-code/install.h"
3 3
4 #defineKINAME "PumpKIN 2.5" 4 #defineKINAME "PumpKIN 2.5.1-trunk"
5#define SKINAME "PumpKIN" 5#define SKINAME "PumpKIN"
6 6
7BOOL Install(void) 7BOOL Install(void)
8{ 8{
9STRING dPath = strFETCH_REG_KEY(HKEY_LOCAL_MACHINE,"Software\\Klever Group",SKINAME "Path"); 9STRING dPath = strFETCH_REG_KEY(HKEY_LOCAL_MACHINE,"Software\\Klever Group",SKINAME "Path");
10STRING kPath = strFETCH_REG_KEY(HKEY_LOCAL_MACHINE,"Software\\Klever Group","KINPath"); 10STRING kPath = strFETCH_REG_KEY(HKEY_LOCAL_MACHINE,"Software\\Klever Group","KINPath");
11LPCSTR qPath = ((LPCSTR)dPath)?(LPCSTR)dPath:(((LPCSTR)kPath)?(LPSTR)kPath:"C:\\Program Files\\Klever\\Nothings"); 11LPCSTR qPath = ((LPCSTR)dPath)?(LPCSTR)dPath:(((LPCSTR)kPath)?(LPSTR)kPath:"C:\\Program Files\\Klever\\Nothings");
12STRING path = REQUESTPATH(" " KINAME,"\nEnter destination path:",qPath); 12STRING path = REQUESTPATH(" " KINAME,"\nEnter destination path:",qPath);
13 if(!path) 13 if(!path)
14 return NULL; 14 return NULL;
15 15
16 #ifdefK_ANNED 16 #ifdefK_ANNED
17STRING sysDir(_MAX_PATH); 17STRING sysDir(_MAX_PATH);
18 GetSystemDirectory(sysDir,_MAX_PATH); 18 GetSystemDirectory(sysDir,_MAX_PATH);
19 INSTALLFILE("mfc42.dl_",sysDir,"mfc42.dll"); 19 INSTALLFILE("mfc42.dl_",sysDir,"mfc42.dll");
20#endif 20#endif
21 21
22 MAKE_PATH(path); 22 MAKE_PATH(path);
23STRING shortPath = GET_SHORT_PATH(path); 23STRING shortPath = GET_SHORT_PATH(path);
24 if(!shortPath){ 24 if(!shortPath){
25 MessageBox(NULL,"Failed to install " KINAME " in specified directory",NULL,MB_ICONERROR|MB_OK); 25 MessageBox(NULL,"Failed to install " KINAME " in specified directory",NULL,MB_ICONERROR|MB_OK);
26 return FALSE; 26 return FALSE;
27 } 27 }
28 28
29 if(!( 29 if(!(
30 INSTALLFILE(SKINAME ".ex_",path,SKINAME ".exe") && 30 INSTALLFILE(SKINAME ".ex_",path,SKINAME ".exe") &&
31 INSTALLFILE(SKINAME ".hl_",path,SKINAME ".hlp") && 31 INSTALLFILE(SKINAME ".hl_",path,SKINAME ".hlp") &&
32 INSTALLFILE(SKINAME ".cn_",path,SKINAME ".cnt") 32 INSTALLFILE(SKINAME ".cn_",path,SKINAME ".cnt")
33 )){ 33 )){
34 MessageBox(NULL,"Failed to install " KINAME " in specified directory",NULL,MB_ICONERROR|MB_OK); 34 MessageBox(NULL,"Failed to install " KINAME " in specified directory",NULL,MB_ICONERROR|MB_OK);
35 return FALSE; 35 return FALSE;
36 } 36 }
37 ADDMENU("Klever Group",SKINAME,path, SKINAME ".exe"); 37 ADDMENU("Klever Group",SKINAME,path, SKINAME ".exe");
38 38
39 strSET_REG_KEY(HKEY_LOCAL_MACHINE,"Software\\Klever Group",SKINAME "Path",path); 39 strSET_REG_KEY(HKEY_LOCAL_MACHINE,"Software\\Klever Group",SKINAME "Path",path);
40 strSET_REG_KEY(HKEY_LOCAL_MACHINE,"Software\\Klever Group","KINPath",path); 40 strSET_REG_KEY(HKEY_LOCAL_MACHINE,"Software\\Klever Group","KINPath",path);
41 41
42FILE* inf=CREATE_INF_FILE(path,SKINAME ".INF"); 42FILE* inf=CREATE_INF_FILE(path,SKINAME ".INF");
43 if(!inf){ 43 if(!inf){
44 MessageBox(NULL,"Failed to install " KINAME,NULL,MB_ICONERROR|MB_OK); 44 MessageBox(NULL,"Failed to install " KINAME,NULL,MB_ICONERROR|MB_OK);
45 return FALSE; 45 return FALSE;
46 } 46 }
47 INF_FILE_HEADER(inf); 47 INF_FILE_HEADER(inf);
48 INF_FILE_SECTION(inf,"Uninstall"); 48 INF_FILE_SECTION(inf,"Uninstall");
49 fprintf(inf,"AddReg=kFiles\nDelReg=kReg\nUpdateInis=kMenu\n"); 49 fprintf(inf,"AddReg=kFiles\nDelReg=kReg\nUpdateInis=kMenu\n");
50 INF_FILE_SECTION(inf,"kFiles"); 50 INF_FILE_SECTION(inf,"kFiles");
51 INF_REMOVE_ROOT(inf,SKINAME "Files",shortPath); 51 INF_REMOVE_ROOT(inf,SKINAME "Files",shortPath);
52 INF_REMOVE_FILE(inf,SKINAME "Files",SKINAME ".exe"); 52 INF_REMOVE_FILE(inf,SKINAME "Files",SKINAME ".exe");
53 INF_REMOVE_HELP_FILE(inf,SKINAME "Files",SKINAME); 53 INF_REMOVE_HELP_FILE(inf,SKINAME "Files",SKINAME);
54 INF_REMOVE_FILE(inf,SKINAME "Files",SKINAME ".inf"); 54 INF_REMOVE_FILE(inf,SKINAME "Files",SKINAME ".inf");
55 INF_FILE_SECTION(inf,"kReg"); 55 INF_FILE_SECTION(inf,"kReg");
56 INF_UNINSTALL_REG(inf,SKINAME); 56 INF_UNINSTALL_REG(inf,SKINAME);
57 INF_FILE_SECTION(inf,"kMenu"); 57 INF_FILE_SECTION(inf,"kMenu");
58 INF_MENU_GROUP(inf,1,"Klever Group"); 58 INF_MENU_GROUP(inf,1,"Klever Group");
59 INF_MENU_ITEM(inf,1,SKINAME); 59 INF_MENU_ITEM(inf,1,SKINAME);
60 fclose(inf); 60 fclose(inf);
61 61
62 REG_UNINSTALL_COMMAND(SKINAME,"Klever " KINAME,shortPath,SKINAME ".INF","Uninstall"); 62 REG_UNINSTALL_COMMAND(SKINAME,"Klever " KINAME,shortPath,SKINAME ".INF","Uninstall");
63 63
64 MessageBox(NULL,KINAME " installed successfully, you may now run it from 'Programs/Klever Group' menu or remove it using Control Panel Add/Remove Programs applet."," Rejoice!",MB_ICONINFORMATION|MB_OK); 64 MessageBox(NULL,KINAME " installed successfully, you may now run it from 'Programs/Klever Group' menu or remove it using Control Panel Add/Remove Programs applet."," Rejoice!",MB_ICONINFORMATION|MB_OK);
65 65
66 return TRUE; 66 return TRUE;
67} 67}
diff --git a/install/install.rc b/install/install.rc
index b1a3037..30907ad 100644
--- a/install/install.rc
+++ b/install/install.rc
@@ -1,182 +1,182 @@
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///////////////////////////////////////////////////////////////////////////// 24/////////////////////////////////////////////////////////////////////////////
25// 25//
26// Dialog 26// Dialog
27// 27//
28 28
29#if defined(APSTUDIO_INVOKED) || defined(FALSE) 29#if defined(APSTUDIO_INVOKED) || defined(FALSE)
30#if defined(APSTUDIO_INVOKED) 30#if defined(APSTUDIO_INVOKED)
31IDD_INSTALLING$(FALSE) DIALOGEX 0, 0, 200, 74 31IDD_INSTALLING$(FALSE) DIALOGEX 0, 0, 200, 74
32#else 32#else
33IDD_INSTALLING DIALOGEX 0, 0, 200, 74 33IDD_INSTALLING DIALOGEX 0, 0, 200, 74
34#endif 34#endif
35STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP 35STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP
36FONT 8, "MS Sans Serif", 0, 0, 0x1 36FONT 8, "MS Sans Serif", 0, 0, 0x1
37BEGIN 37BEGIN
38 PUSHBUTTON "Cancel",IDCANCEL,143,53,50,14,BS_CENTER | BS_VCENTER | 38 PUSHBUTTON "Cancel",IDCANCEL,143,53,50,14,BS_CENTER | BS_VCENTER |
39 BS_NOTIFY | BS_FLAT,WS_EX_DLGMODALFRAME 39 BS_NOTIFY | BS_FLAT,WS_EX_DLGMODALFRAME
40 CONTROL "Animate1",IDC_DISKS,"SysAnimate32",ACS_TRANSPARENT | 40 CONTROL "Animate1",IDC_DISKS,"SysAnimate32",ACS_TRANSPARENT |
41 ACS_AUTOPLAY | WS_TABSTOP,161,7,32,32 41 ACS_AUTOPLAY | WS_TABSTOP,161,7,32,32
42 LTEXT "",IDC_STATE,7,7,150,32,SS_NOPREFIX | SS_NOTIFY 42 LTEXT "",IDC_STATE,7,7,150,32,SS_NOPREFIX | SS_NOTIFY
43 CONTROL "Progress1",IDC_PROGRESS,"msctls_progress32",0x0,7,45, 43 CONTROL "Progress1",IDC_PROGRESS,"msctls_progress32",0x0,7,45,
44 186,7,WS_EX_DLGMODALFRAME 44 186,7,WS_EX_DLGMODALFRAME
45END 45END
46#endif 46#endif
47 47
48IDD_PATH DIALOGEX 0, 0, 255, 73 48IDD_PATH DIALOGEX 0, 0, 255, 73
49STYLE DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | DS_CENTER | WS_POPUP | 49STYLE DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | DS_CENTER | WS_POPUP |
50 WS_VISIBLE | WS_CAPTION 50 WS_VISIBLE | WS_CAPTION
51EXSTYLE WS_EX_TOOLWINDOW | WS_EX_CLIENTEDGE 51EXSTYLE WS_EX_TOOLWINDOW | WS_EX_CLIENTEDGE
52FONT 8, "MS Sans Serif", 0, 0, 0x1 52FONT 8, "MS Sans Serif", 0, 0, 0x1
53BEGIN 53BEGIN
54 LTEXT "",IDC_PROMPT,7,7,241,30 54 LTEXT "",IDC_PROMPT,7,7,241,30
55 EDITTEXT IDC_PATH,7,37,195,12,ES_AUTOHSCROLL 55 EDITTEXT IDC_PATH,7,37,195,12,ES_AUTOHSCROLL
56 PUSHBUTTON "B&rowse..",IDC_BROWSE,208,37,40,12 56 PUSHBUTTON "B&rowse..",IDC_BROWSE,208,37,40,12
57 DEFPUSHBUTTON "OK",IDOK,69,52,50,14 57 DEFPUSHBUTTON "OK",IDOK,69,52,50,14
58 PUSHBUTTON "Cancel",IDCANCEL,135,52,50,14 58 PUSHBUTTON "Cancel",IDCANCEL,135,52,50,14
59END 59END
60 60
61 61
62///////////////////////////////////////////////////////////////////////////// 62/////////////////////////////////////////////////////////////////////////////
63// 63//
64// DESIGNINFO 64// DESIGNINFO
65// 65//
66 66
67#ifdef APSTUDIO_INVOKED 67#ifdef APSTUDIO_INVOKED
68GUIDELINES DESIGNINFO DISCARDABLE 68GUIDELINES DESIGNINFO DISCARDABLE
69BEGIN 69BEGIN
70 "IDD_INSTALLING$(FALSE)", DIALOG 70 "IDD_INSTALLING$(FALSE)", DIALOG
71 BEGIN 71 BEGIN
72 LEFTMARGIN, 7 72 LEFTMARGIN, 7
73 RIGHTMARGIN, 193 73 RIGHTMARGIN, 193
74 TOPMARGIN, 7 74 TOPMARGIN, 7
75 BOTTOMMARGIN, 67 75 BOTTOMMARGIN, 67
76 HORZGUIDE, 39 76 HORZGUIDE, 39
77 END 77 END
78 78
79 IDD_PATH, DIALOG 79 IDD_PATH, DIALOG
80 BEGIN 80 BEGIN
81 LEFTMARGIN, 7 81 LEFTMARGIN, 7
82 RIGHTMARGIN, 248 82 RIGHTMARGIN, 248
83 VERTGUIDE, 202 83 VERTGUIDE, 202
84 VERTGUIDE, 208 84 VERTGUIDE, 208
85 TOPMARGIN, 7 85 TOPMARGIN, 7
86 BOTTOMMARGIN, 66 86 BOTTOMMARGIN, 66
87 HORZGUIDE, 37 87 HORZGUIDE, 37
88 END 88 END
89END 89END
90#endif // APSTUDIO_INVOKED 90#endif // APSTUDIO_INVOKED
91 91
92 92
93#ifdef APSTUDIO_INVOKED 93#ifdef APSTUDIO_INVOKED
94///////////////////////////////////////////////////////////////////////////// 94/////////////////////////////////////////////////////////////////////////////
95// 95//
96// TEXTINCLUDE 96// TEXTINCLUDE
97// 97//
98 98
991 TEXTINCLUDE DISCARDABLE 991 TEXTINCLUDE DISCARDABLE
100BEGIN 100BEGIN
101 "resource.h\0" 101 "resource.h\0"
102END 102END
103 103
1042 TEXTINCLUDE DISCARDABLE 1042 TEXTINCLUDE DISCARDABLE
105BEGIN 105BEGIN
106 "#include ""afxres.h""\r\n" 106 "#include ""afxres.h""\r\n"
107 "\0" 107 "\0"
108END 108END
109 109
1103 TEXTINCLUDE DISCARDABLE 1103 TEXTINCLUDE DISCARDABLE
111BEGIN 111BEGIN
112 "#include ""custom.rch""\0" 112 "#include ""custom.rch""\0"
113END 113END
114 114
115#endif // APSTUDIO_INVOKED 115#endif // APSTUDIO_INVOKED
116 116
117 117
118///////////////////////////////////////////////////////////////////////////// 118/////////////////////////////////////////////////////////////////////////////
119// 119//
120// Icon 120// Icon
121// 121//
122 122
123// Icon with lowest ID value placed first to ensure application icon 123// Icon with lowest ID value placed first to ensure application icon
124// remains consistent on all systems. 124// remains consistent on all systems.
125IDI_ICON ICON DISCARDABLE "../shared-data/install-icon.ico" 125IDI_ICON ICON DISCARDABLE "../shared-data/install-icon.ico"
126 126
127#ifndef _MAC 127#ifndef _MAC
128///////////////////////////////////////////////////////////////////////////// 128/////////////////////////////////////////////////////////////////////////////
129// 129//
130// Version 130// Version
131// 131//
132 132
133VS_VERSION_INFO VERSIONINFO 133VS_VERSION_INFO VERSIONINFO
134 FILEVERSION 2,5,0,0 134 FILEVERSION 2,5,1,0
135 PRODUCTVERSION 2,5,0,0 135 PRODUCTVERSION 2,5,1,0
136 FILEFLAGSMASK 0x3fL 136 FILEFLAGSMASK 0x3fL
137#ifdef _DEBUG 137#ifdef _DEBUG
138 FILEFLAGS 0x1L 138 FILEFLAGS 0x1L
139#else 139#else
140 FILEFLAGS 0x0L 140 FILEFLAGS 0x0L
141#endif 141#endif
142 FILEOS 0x40004L 142 FILEOS 0x40004L
143 FILETYPE 0x1L 143 FILETYPE 0x1L
144 FILESUBTYPE 0x0L 144 FILESUBTYPE 0x0L
145BEGIN 145BEGIN
146 BLOCK "StringFileInfo" 146 BLOCK "StringFileInfo"
147 BEGIN 147 BEGIN
148 BLOCK "040904b0" 148 BLOCK "040904b0"
149 BEGIN 149 BEGIN
150 VALUE "CompanyName", "Klever Group (http://www.klever.net/)\0" 150 VALUE "CompanyName", "Klever Group (http://www.klever.net/)\0"
151 VALUE "FileDescription", "INSTALL: PumpKIN, tftp client/daemon\0" 151 VALUE "FileDescription", "INSTALL: PumpKIN, tftp client/daemon\0"
152 VALUE "FileVersion", "2, 5, 0, 0\0" 152 VALUE "FileVersion", "2, 5, 1, 0\0"
153 VALUE "InternalName", "INSTALL\0" 153 VALUE "InternalName", "INSTALL\0"
154 VALUE "LegalCopyright", "Copyright © 1997-2004 Klever Group (http://www.klever.net/)\0" 154 VALUE "LegalCopyright", "Copyright © 1997-2004 Klever Group (http://www.klever.net/)\0"
155 VALUE "LegalTrademarks", "Klever Group (http://www.klever.net/)\0" 155 VALUE "LegalTrademarks", "Klever Group (http://www.klever.net/)\0"
156 VALUE "OriginalFilename", "INSTALL.EXE\0" 156 VALUE "OriginalFilename", "INSTALL.EXE\0"
157 VALUE "ProductName", "PumpKIN\0" 157 VALUE "ProductName", "PumpKIN\0"
158 VALUE "ProductVersion", "2, 5, 0, 0\0" 158 VALUE "ProductVersion", "2, 5, 1, 0\0"
159 END 159 END
160 END 160 END
161 BLOCK "VarFileInfo" 161 BLOCK "VarFileInfo"
162 BEGIN 162 BEGIN
163 VALUE "Translation", 0x409, 1200 163 VALUE "Translation", 0x409, 1200
164 END 164 END
165END 165END
166 166
167#endif // !_MAC 167#endif // !_MAC
168 168
169#endif // English (U.S.) resources 169#endif // English (U.S.) resources
170///////////////////////////////////////////////////////////////////////////// 170/////////////////////////////////////////////////////////////////////////////
171 171
172 172
173 173
174#ifndef APSTUDIO_INVOKED 174#ifndef APSTUDIO_INVOKED
175///////////////////////////////////////////////////////////////////////////// 175/////////////////////////////////////////////////////////////////////////////
176// 176//
177// Generated from the TEXTINCLUDE 3 resource. 177// Generated from the TEXTINCLUDE 3 resource.
178// 178//
179#include "custom.rch" 179#include "custom.rch"
180///////////////////////////////////////////////////////////////////////////// 180/////////////////////////////////////////////////////////////////////////////
181#endif // not APSTUDIO_INVOKED 181#endif // not APSTUDIO_INVOKED
182 182
diff --git a/pumpkin.rc b/pumpkin.rc
index 67e5b24..7380e12 100644
--- a/pumpkin.rc
+++ b/pumpkin.rc
@@ -1,605 +1,605 @@
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",IDC_STATIC,40,15,119,8,SS_NOPREFIX 85 LTEXT "PumpKIN, Version 2.5.1-trunk",IDC_STATIC,40,15,119,8,SS_NOPREFIX
86 LTEXT "Copyright © 1997-2004 Klever Group",IDC_STATIC,40,30,170, 86 LTEXT "Copyright © 1997-2004 Klever Group",IDC_STATIC,40,30,170,
87 8 87 8
88 DEFPUSHBUTTON "OK",IDOK,178,7,32,14,WS_GROUP 88 DEFPUSHBUTTON "OK",IDOK,178,7,32,14,WS_GROUP
89 PUSHBUTTON "http://www.klever.net/",IDC_KLEVERNET,124,53,86,14 89 PUSHBUTTON "http://www.klever.net/",IDC_KLEVERNET,124,53,86,14
90END 90END
91 91
92IDD_PUMPKIN_DIALOG DIALOGEX 0, 0, 362, 191 92IDD_PUMPKIN_DIALOG DIALOGEX 0, 0, 362, 191
93STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION | 93STYLE DS_MODALFRAME | DS_3DLOOK | WS_POPUP | WS_VISIBLE | WS_CAPTION |
94 WS_SYSMENU 94 WS_SYSMENU
95EXSTYLE WS_EX_ACCEPTFILES | WS_EX_APPWINDOW 95EXSTYLE WS_EX_ACCEPTFILES | WS_EX_APPWINDOW
96CAPTION " PumpKIN" 96CAPTION " PumpKIN"
97FONT 8, "MS Sans Serif", 0, 0, 0x1 97FONT 8, "MS Sans Serif", 0, 0, 0x1
98BEGIN 98BEGIN
99 CONTROL "List1",IDC_CONNECTIONS,"SysListView32",LVS_REPORT | 99 CONTROL "List1",IDC_CONNECTIONS,"SysListView32",LVS_REPORT |
100 LVS_AUTOARRANGE | WS_BORDER | WS_TABSTOP,7,7,295,108, 100 LVS_AUTOARRANGE | WS_BORDER | WS_TABSTOP,7,7,295,108,
101 WS_EX_DLGMODALFRAME 101 WS_EX_DLGMODALFRAME
102 PUSHBUTTON "&Get File",IDC_GET,305,7,50,17,BS_NOTIFY, 102 PUSHBUTTON "&Get File",IDC_GET,305,7,50,17,BS_NOTIFY,
103 WS_EX_CLIENTEDGE 103 WS_EX_CLIENTEDGE
104 PUSHBUTTON "&Put File",IDC_PUT,305,25,50,17,BS_NOTIFY, 104 PUSHBUTTON "&Put File",IDC_PUT,305,25,50,17,BS_NOTIFY,
105 WS_EX_CLIENTEDGE 105 WS_EX_CLIENTEDGE
106 PUSHBUTTON "&Abort xfer",IDC_ABORT,305,43,50,17,BS_NOTIFY, 106 PUSHBUTTON "&Abort xfer",IDC_ABORT,305,43,50,17,BS_NOTIFY,
107 WS_EX_CLIENTEDGE 107 WS_EX_CLIENTEDGE
108 PUSHBUTTON "&Options",IDC_OPTIONS,305,61,50,17,BS_NOTIFY, 108 PUSHBUTTON "&Options",IDC_OPTIONS,305,61,50,17,BS_NOTIFY,
109 WS_EX_CLIENTEDGE 109 WS_EX_CLIENTEDGE
110 PUSHBUTTON "E&xit",IDC_EXIT,305,79,50,17,BS_NOTIFY,WS_EX_CLIENTEDGE 110 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 111 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 | 112 LISTBOX IDC_LOG,7,115,348,69,LBS_USETABSTOPS | LBS_NOSEL |
113 WS_VSCROLL | WS_HSCROLL,WS_EX_DLGMODALFRAME 113 WS_VSCROLL | WS_HSCROLL,WS_EX_DLGMODALFRAME
114 PUSHBUTTON "..",IDCANCEL,0,183,6,7,NOT WS_VISIBLE | NOT WS_TABSTOP 114 PUSHBUTTON "..",IDCANCEL,0,183,6,7,NOT WS_VISIBLE | NOT WS_TABSTOP
115END 115END
116 116
117IDD_PROPS_SERVER DIALOG DISCARDABLE 0, 0, 210, 154 117IDD_PROPS_SERVER DIALOG DISCARDABLE 0, 0, 210, 154
118STYLE WS_CHILD | WS_DISABLED | WS_CAPTION 118STYLE WS_CHILD | WS_DISABLED | WS_CAPTION
119CAPTION "Server" 119CAPTION "Server"
120FONT 8, "MS Sans Serif" 120FONT 8, "MS Sans Serif"
121BEGIN 121BEGIN
122 GROUPBOX "TFTP filesystem &root (download path)",IDC_STATIC,7,7, 122 GROUPBOX "TFTP filesystem &root (download path)",IDC_STATIC,7,7,
123 196,38 123 196,38
124 EDITTEXT IDC_TFTPROOT,13,16,170,13,ES_AUTOHSCROLL 124 EDITTEXT IDC_TFTPROOT,13,16,170,13,ES_AUTOHSCROLL
125 PUSHBUTTON "&B",IDC_BROWSE,186,16,13,13,BS_ICON 125 PUSHBUTTON "&B",IDC_BROWSE,186,16,13,13,BS_ICON
126 CONTROL "Allow access to &subdirectories",IDC_TFTPSUBDIRS, 126 CONTROL "Allow access to &subdirectories",IDC_TFTPSUBDIRS,
127 "Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,31,111,10 127 "Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,31,111,10
128 GROUPBOX "Read Request Behavior",IDC_STATIC,7,48,153,42 128 GROUPBOX "Read Request Behavior",IDC_STATIC,7,48,153,42
129 CONTROL "Give &all files",IDC_RRQ_GIVEALL,"Button", 129 CONTROL "Give &all files",IDC_RRQ_GIVEALL,"Button",
130 BS_AUTORADIOBUTTON | BS_NOTIFY | WS_GROUP,13,57,53,10 130 BS_AUTORADIOBUTTON | BS_NOTIFY | WS_GROUP,13,57,53,10
131 CONTROL "&Prompt before giving file",IDC_RRQ_ALWAYSCONFIRM, 131 CONTROL "&Prompt before giving file",IDC_RRQ_ALWAYSCONFIRM,
132 "Button",BS_AUTORADIOBUTTON | BS_NOTIFY,23,67,91,10 132 "Button",BS_AUTORADIOBUTTON | BS_NOTIFY,23,67,91,10
133 CONTROL "&Deny all requests",IDC_RRQ_DENYALL,"Button", 133 CONTROL "&Deny all requests",IDC_RRQ_DENYALL,"Button",
134 BS_AUTORADIOBUTTON | BS_NOTIFY,33,77,70,10 134 BS_AUTORADIOBUTTON | BS_NOTIFY,33,77,70,10
135 GROUPBOX "Write Request Behavior",IDC_STATIC,7,93,172,54,WS_GROUP 135 GROUPBOX "Write Request Behavior",IDC_STATIC,7,93,172,54,WS_GROUP
136 CONTROL "Take a&ll files",IDC_WRQ_TAKEALL,"Button", 136 CONTROL "Take a&ll files",IDC_WRQ_TAKEALL,"Button",
137 BS_AUTORADIOBUTTON | WS_GROUP,13,103,55,10 137 BS_AUTORADIOBUTTON | WS_GROUP,13,103,55,10
138 CONTROL "Prompt if file &exists",IDC_WRQ_PROMPTEXISTING,"Button", 138 CONTROL "Prompt if file &exists",IDC_WRQ_PROMPTEXISTING,"Button",
139 BS_AUTORADIOBUTTON,23,113,73,10 139 BS_AUTORADIOBUTTON,23,113,73,10
140 CONTROL "Always pro&mpt before accepting file", 140 CONTROL "Always pro&mpt before accepting file",
141 IDC_WRQ_ALWAYSCONFIRM,"Button",BS_AUTORADIOBUTTON,33,123, 141 IDC_WRQ_ALWAYSCONFIRM,"Button",BS_AUTORADIOBUTTON,33,123,
142 139,10 142 139,10
143 CONTROL "D&eny all requests",IDC_WRQ_DENYALL,"Button", 143 CONTROL "D&eny all requests",IDC_WRQ_DENYALL,"Button",
144 BS_AUTORADIOBUTTON,43,133,70,10 144 BS_AUTORADIOBUTTON,43,133,70,10
145 CTEXT "Confirmation &timeout",IDC_STATIC,163,52,40,19, 145 CTEXT "Confirmation &timeout",IDC_STATIC,163,52,40,19,
146 SS_NOTIFY 146 SS_NOTIFY
147 CONTROL "Slider1",IDC_PROMPTTIMEOUT,"msctls_trackbar32", 147 CONTROL "Slider1",IDC_PROMPTTIMEOUT,"msctls_trackbar32",
148 TBS_AUTOTICKS | TBS_VERT | TBS_TOP | WS_TABSTOP,182,73, 148 TBS_AUTOTICKS | TBS_VERT | TBS_TOP | WS_TABSTOP,182,73,
149 21,74 149 21,74
150END 150END
151 151
152IDD_PROPS_NETWORK DIALOG DISCARDABLE 0, 0, 210, 154 152IDD_PROPS_NETWORK DIALOG DISCARDABLE 0, 0, 210, 154
153STYLE WS_CHILD | WS_DISABLED | WS_CAPTION 153STYLE WS_CHILD | WS_DISABLED | WS_CAPTION
154CAPTION "Network" 154CAPTION "Network"
155FONT 8, "MS Sans Serif" 155FONT 8, "MS Sans Serif"
156BEGIN 156BEGIN
157 GROUPBOX "UDP Ports",IDC_STATIC,7,7,196,40 157 GROUPBOX "UDP Ports",IDC_STATIC,7,7,196,40
158 RTEXT "Listen for &incoming requests on port:",IDC_STATIC,13, 158 RTEXT "Listen for &incoming requests on port:",IDC_STATIC,13,
159 18,135,8 159 18,135,8
160 EDITTEXT IDC_LISTENPORT,154,16,40,13,ES_AUTOHSCROLL 160 EDITTEXT IDC_LISTENPORT,154,16,40,13,ES_AUTOHSCROLL
161 CONTROL "Spin1",IDC_LISTENSPIN,"msctls_updown32",UDS_WRAP | 161 CONTROL "Spin1",IDC_LISTENSPIN,"msctls_updown32",UDS_WRAP |
162 UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | 162 UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY |
163 UDS_ARROWKEYS | UDS_NOTHOUSANDS,183,16,11,13 163 UDS_ARROWKEYS | UDS_NOTHOUSANDS,183,16,11,13
164 RTEXT "Send &outging requests to port:",IDC_STATIC,13,31,135,8 164 RTEXT "Send &outging requests to port:",IDC_STATIC,13,31,135,8
165 EDITTEXT IDC_SPEAKPORT,154,29,40,13,ES_AUTOHSCROLL 165 EDITTEXT IDC_SPEAKPORT,154,29,40,13,ES_AUTOHSCROLL
166 CONTROL "Spin1",IDC_SPEAKSPIN,"msctls_updown32",UDS_WRAP | 166 CONTROL "Spin1",IDC_SPEAKSPIN,"msctls_updown32",UDS_WRAP |
167 UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | 167 UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY |
168 UDS_ARROWKEYS | UDS_NOTHOUSANDS,183,29,11,13 168 UDS_ARROWKEYS | UDS_NOTHOUSANDS,183,29,11,13
169 LTEXT "Default connection timeout:",IDC_STATIC,7,52,88,8 169 LTEXT "Default connection timeout:",IDC_STATIC,7,52,88,8
170 EDITTEXT IDC_TIMEOUT,110,50,40,13,ES_AUTOHSCROLL | ES_NUMBER 170 EDITTEXT IDC_TIMEOUT,110,50,40,13,ES_AUTOHSCROLL | ES_NUMBER
171 CONTROL "Spin3",IDC_TIMESPIN,"msctls_updown32",UDS_WRAP | 171 CONTROL "Spin3",IDC_TIMESPIN,"msctls_updown32",UDS_WRAP |
172 UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | 172 UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY |
173 UDS_ARROWKEYS | UDS_NOTHOUSANDS,140,50,11,13 173 UDS_ARROWKEYS | UDS_NOTHOUSANDS,140,50,11,13
174 LTEXT "Default block size:",IDC_STATIC,7,66,59,8 174 LTEXT "Default block size:",IDC_STATIC,7,66,59,8
175 LTEXT "seconds",IDC_STATIC,154,52,28,8 175 LTEXT "seconds",IDC_STATIC,154,52,28,8
176 LTEXT "bytes",IDC_STATIC,154,66,18,8 176 LTEXT "bytes",IDC_STATIC,154,66,18,8
177 EDITTEXT IDC_BLOCKSIZE,110,64,40,13,ES_AUTOHSCROLL | ES_NUMBER 177 EDITTEXT IDC_BLOCKSIZE,110,64,40,13,ES_AUTOHSCROLL | ES_NUMBER
178 CONTROL "Spin3",IDC_BSIZESPIN,"msctls_updown32",UDS_WRAP | 178 CONTROL "Spin3",IDC_BSIZESPIN,"msctls_updown32",UDS_WRAP |
179 UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | 179 UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY |
180 UDS_ARROWKEYS | UDS_NOTHOUSANDS,140,64,11,13 180 UDS_ARROWKEYS | UDS_NOTHOUSANDS,140,64,11,13
181END 181END
182 182
183IDD_CONFIRM_RRQ DIALOGEX 0, 0, 181, 79 183IDD_CONFIRM_RRQ DIALOGEX 0, 0, 181, 79
184STYLE DS_MODALFRAME | DS_NOIDLEMSG | DS_SETFOREGROUND | DS_3DLOOK | WS_POPUP | 184STYLE DS_MODALFRAME | DS_NOIDLEMSG | DS_SETFOREGROUND | DS_3DLOOK | WS_POPUP |
185 WS_CAPTION 185 WS_CAPTION
186EXSTYLE WS_EX_TOOLWINDOW | WS_EX_CLIENTEDGE 186EXSTYLE WS_EX_TOOLWINDOW | WS_EX_CLIENTEDGE
187CAPTION " PumpKIN - Confirm Read Request" 187CAPTION " PumpKIN - Confirm Read Request"
188FONT 8, "MS Sans Serif", 0, 0, 0x1 188FONT 8, "MS Sans Serif", 0, 0, 0x1
189BEGIN 189BEGIN
190 DEFPUSHBUTTON "&Grant Access",IDOK,27,58,54,14 190 DEFPUSHBUTTON "&Grant Access",IDOK,27,58,54,14
191 PUSHBUTTON "&Deny Access",IDCANCEL,97,58,54,14 191 PUSHBUTTON "&Deny Access",IDCANCEL,97,58,54,14
192 LTEXT "The host",IDC_STATIC,77,7,29,8 192 LTEXT "The host",IDC_STATIC,77,7,29,8
193 CTEXT "255.255.255.255",IDC_HOST,57,15,68,14,SS_NOTIFY | 193 CTEXT "255.255.255.255",IDC_HOST,57,15,68,14,SS_NOTIFY |
194 SS_SUNKEN | WS_BORDER,WS_EX_DLGMODALFRAME | 194 SS_SUNKEN | WS_BORDER,WS_EX_DLGMODALFRAME |
195 WS_EX_CLIENTEDGE 195 WS_EX_CLIENTEDGE
196 CTEXT "is requesting the file",IDC_STATIC,23,29,135,8 196 CTEXT "is requesting the file",IDC_STATIC,23,29,135,8
197 CTEXT "",IDC_FILE,23,37,135,14,SS_NOTIFY | SS_SUNKEN | 197 CTEXT "",IDC_FILE,23,37,135,14,SS_NOTIFY | SS_SUNKEN |
198 WS_BORDER,WS_EX_DLGMODALFRAME | WS_EX_CLIENTEDGE 198 WS_BORDER,WS_EX_DLGMODALFRAME | WS_EX_CLIENTEDGE
199 CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,7,54,167,1 199 CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,7,54,167,1
200 ICON IDR_MAINFRAME,IDC_STATIC,7,7,18,20 200 ICON IDR_MAINFRAME,IDC_STATIC,7,7,18,20
201 ICON IDR_MAINFRAME,IDC_STATIC,153,7,18,20 201 ICON IDR_MAINFRAME,IDC_STATIC,153,7,18,20
202END 202END
203 203
204IDD_CONFIRM_WRQ DIALOGEX 0, 0, 201, 95 204IDD_CONFIRM_WRQ DIALOGEX 0, 0, 201, 95
205STYLE DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | WS_POPUP | WS_CAPTION 205STYLE DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | WS_POPUP | WS_CAPTION
206EXSTYLE WS_EX_TOOLWINDOW | WS_EX_CLIENTEDGE 206EXSTYLE WS_EX_TOOLWINDOW | WS_EX_CLIENTEDGE
207CAPTION " PumpKIN - Confirm Write Request" 207CAPTION " PumpKIN - Confirm Write Request"
208FONT 8, "MS Sans Serif", 0, 0, 0x1 208FONT 8, "MS Sans Serif", 0, 0, 0x1
209BEGIN 209BEGIN
210 DEFPUSHBUTTON "&Accept",IDOK,7,58,59,14 210 DEFPUSHBUTTON "&Accept",IDOK,7,58,59,14
211 PUSHBUTTON "&Rename",IDC_RENAME,71,58,59,14 211 PUSHBUTTON "&Rename",IDC_RENAME,71,58,59,14
212 PUSHBUTTON "&Deny Access",IDCANCEL,135,58,59,14 212 PUSHBUTTON "&Deny Access",IDCANCEL,135,58,59,14
213 LTEXT "The host",IDC_STATIC,87,7,29,8 213 LTEXT "The host",IDC_STATIC,87,7,29,8
214 CTEXT "255.255.255.255",IDC_HOST,67,15,68,14,SS_NOTIFY | 214 CTEXT "255.255.255.255",IDC_HOST,67,15,68,14,SS_NOTIFY |
215 SS_SUNKEN | WS_BORDER,WS_EX_DLGMODALFRAME | 215 SS_SUNKEN | WS_BORDER,WS_EX_DLGMODALFRAME |
216 WS_EX_CLIENTEDGE 216 WS_EX_CLIENTEDGE
217 CTEXT "is attempting to send you a file",IDC_STATIC,33,29,135, 217 CTEXT "is attempting to send you a file",IDC_STATIC,33,29,135,
218 8 218 8
219 CTEXT "",IDC_FILE,33,37,135,14,SS_NOTIFY | SS_SUNKEN | 219 CTEXT "",IDC_FILE,33,37,135,14,SS_NOTIFY | SS_SUNKEN |
220 WS_BORDER,WS_EX_DLGMODALFRAME | WS_EX_CLIENTEDGE 220 WS_BORDER,WS_EX_DLGMODALFRAME | WS_EX_CLIENTEDGE
221 CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,7,54,187,1 221 CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,7,54,187,1
222 ICON IDR_MAINFRAME,IDC_STATIC,7,7,21,20 222 ICON IDR_MAINFRAME,IDC_STATIC,7,7,21,20
223 ICON IDR_MAINFRAME,IDC_STATIC,173,7,21,20 223 ICON IDR_MAINFRAME,IDC_STATIC,173,7,21,20
224 PUSHBUTTON "Res&ume",IDC_RESUME,71,74,59,14 224 PUSHBUTTON "Res&ume",IDC_RESUME,71,74,59,14
225END 225END
226 226
227IDD_REQUEST DIALOGEX 0, 0, 191, 161 227IDD_REQUEST DIALOGEX 0, 0, 191, 161
228STYLE DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | WS_POPUP | WS_CAPTION | 228STYLE DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | WS_POPUP | WS_CAPTION |
229 WS_SYSMENU 229 WS_SYSMENU
230EXSTYLE WS_EX_CLIENTEDGE 230EXSTYLE WS_EX_CLIENTEDGE
231CAPTION "Request" 231CAPTION "Request"
232FONT 8, "MS Sans Serif", 0, 0, 0x1 232FONT 8, "MS Sans Serif", 0, 0, 0x1
233BEGIN 233BEGIN
234 LTEXT "&Local file:",IDC_STATIC,7,7,31,8,SS_NOTIFY 234 LTEXT "&Local file:",IDC_STATIC,7,7,31,8,SS_NOTIFY
235 EDITTEXT IDC_LOCALFILE,7,16,157,14,ES_AUTOHSCROLL, 235 EDITTEXT IDC_LOCALFILE,7,16,157,14,ES_AUTOHSCROLL,
236 WS_EX_CLIENTEDGE | WS_EX_STATICEDGE 236 WS_EX_CLIENTEDGE | WS_EX_STATICEDGE
237 PUSHBUTTON "...",IDC_BROWSE,165,16,19,14,BS_ICON,WS_EX_STATICEDGE 237 PUSHBUTTON "...",IDC_BROWSE,165,16,19,14,BS_ICON,WS_EX_STATICEDGE
238 LTEXT "&Remote file:",IDC_STATIC,7,34,38,8,SS_NOTIFY 238 LTEXT "&Remote file:",IDC_STATIC,7,34,38,8,SS_NOTIFY
239 EDITTEXT IDC_REMOTEFILE,7,44,177,14,ES_AUTOHSCROLL, 239 EDITTEXT IDC_REMOTEFILE,7,44,177,14,ES_AUTOHSCROLL,
240 WS_EX_CLIENTEDGE | WS_EX_STATICEDGE 240 WS_EX_CLIENTEDGE | WS_EX_STATICEDGE
241 LTEXT "Remote &host:",IDC_STATIC,7,61,43,8,SS_NOTIFY 241 LTEXT "Remote &host:",IDC_STATIC,7,61,43,8,SS_NOTIFY
242 COMBOBOX IDC_TALKS,7,72,157,66,CBS_SIMPLE | CBS_AUTOHSCROLL | 242 COMBOBOX IDC_TALKS,7,72,157,66,CBS_SIMPLE | CBS_AUTOHSCROLL |
243 CBS_SORT | CBS_NOINTEGRALHEIGHT | WS_VSCROLL | 243 CBS_SORT | CBS_NOINTEGRALHEIGHT | WS_VSCROLL |
244 WS_TABSTOP,WS_EX_CLIENTEDGE | WS_EX_STATICEDGE 244 WS_TABSTOP,WS_EX_CLIENTEDGE | WS_EX_STATICEDGE
245 PUSHBUTTON "R\nE\n&F\nR\nE\nS\nH",IDC_REFRESH,165,72,19,66, 245 PUSHBUTTON "R\nE\n&F\nR\nE\nS\nH",IDC_REFRESH,165,72,19,66,
246 BS_CENTER | BS_VCENTER | BS_MULTILINE | BS_NOTIFY, 246 BS_CENTER | BS_VCENTER | BS_MULTILINE | BS_NOTIFY,
247 WS_EX_CLIENTEDGE 247 WS_EX_CLIENTEDGE
248 LTEXT "&Type:",IDC_STATIC,58,34,19,8 248 LTEXT "&Type:",IDC_STATIC,58,34,19,8
249 COMBOBOX IDC_TYPE,80,31,43,41,CBS_DROPDOWN | CBS_AUTOHSCROLL | 249 COMBOBOX IDC_TYPE,80,31,43,41,CBS_DROPDOWN | CBS_AUTOHSCROLL |
250 CBS_LOWERCASE | WS_VSCROLL | WS_TABSTOP 250 CBS_LOWERCASE | WS_VSCROLL | WS_TABSTOP
251 LTEXT "&Block:",IDC_STATIC,127,34,21,8 251 LTEXT "&Block:",IDC_STATIC,127,34,21,8
252 COMBOBOX IDC_BSIZE,149,31,35,53,CBS_DROPDOWN | WS_VSCROLL | 252 COMBOBOX IDC_BSIZE,149,31,35,53,CBS_DROPDOWN | WS_VSCROLL |
253 WS_TABSTOP 253 WS_TABSTOP
254 DEFPUSHBUTTON "OK",IDOK,35,140,50,14 254 DEFPUSHBUTTON "OK",IDOK,35,140,50,14
255 PUSHBUTTON "Cancel",IDCANCEL,101,140,50,14 255 PUSHBUTTON "Cancel",IDCANCEL,101,140,50,14
256 CONTROL "",IDC_STATIC,"Static",SS_ETCHEDVERT,52,32,1,11 256 CONTROL "",IDC_STATIC,"Static",SS_ETCHEDVERT,52,32,1,11
257END 257END
258 258
259IDD_PROPS_SOUNDS DIALOG DISCARDABLE 0, 0, 210, 154 259IDD_PROPS_SOUNDS DIALOG DISCARDABLE 0, 0, 210, 154
260STYLE WS_CHILD | WS_DISABLED | WS_CAPTION 260STYLE WS_CHILD | WS_DISABLED | WS_CAPTION
261CAPTION "Sounds" 261CAPTION "Sounds"
262FONT 8, "MS Sans Serif" 262FONT 8, "MS Sans Serif"
263BEGIN 263BEGIN
264 LTEXT "&Incoming request:",IDC_STATIC,7,9,57,8 264 LTEXT "&Incoming request:",IDC_STATIC,7,9,57,8
265 COMBOBOX IDC_RING,70,7,103,100,CBS_DROPDOWN | CBS_AUTOHSCROLL | 265 COMBOBOX IDC_RING,70,7,103,100,CBS_DROPDOWN | CBS_AUTOHSCROLL |
266 CBS_SORT | WS_VSCROLL | WS_TABSTOP 266 CBS_SORT | WS_VSCROLL | WS_TABSTOP
267 PUSHBUTTON "browse",IDC_RING_BROWSE,175,7,13,13,BS_ICON 267 PUSHBUTTON "browse",IDC_RING_BROWSE,175,7,13,13,BS_ICON
268 PUSHBUTTON "play",IDC_RING_PLAY,190,7,13,13,BS_ICON 268 PUSHBUTTON "play",IDC_RING_PLAY,190,7,13,13,BS_ICON
269 LTEXT "xfer &finished:",IDC_STATIC,7,25,57,8 269 LTEXT "xfer &finished:",IDC_STATIC,7,25,57,8
270 COMBOBOX IDC_FINISHED,70,22,103,100,CBS_DROPDOWN | 270 COMBOBOX IDC_FINISHED,70,22,103,100,CBS_DROPDOWN |
271 CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP 271 CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP
272 PUSHBUTTON "browse",IDC_FINISHED_BROWSE,175,22,13,13,BS_ICON 272 PUSHBUTTON "browse",IDC_FINISHED_BROWSE,175,22,13,13,BS_ICON
273 PUSHBUTTON "play",IDC_FINISHED_PLAY,190,22,13,13,BS_ICON 273 PUSHBUTTON "play",IDC_FINISHED_PLAY,190,22,13,13,BS_ICON
274 LTEXT "xfer &aborted:",IDC_STATIC,7,40,57,8 274 LTEXT "xfer &aborted:",IDC_STATIC,7,40,57,8
275 COMBOBOX IDC_ABORTED,70,37,103,100,CBS_DROPDOWN | CBS_AUTOHSCROLL | 275 COMBOBOX IDC_ABORTED,70,37,103,100,CBS_DROPDOWN | CBS_AUTOHSCROLL |
276 CBS_SORT | WS_VSCROLL | WS_TABSTOP 276 CBS_SORT | WS_VSCROLL | WS_TABSTOP
277 PUSHBUTTON "browse",IDC_ABORTED_BROWSE,175,37,13,13,BS_ICON 277 PUSHBUTTON "browse",IDC_ABORTED_BROWSE,175,37,13,13,BS_ICON
278 PUSHBUTTON "play",IDC_ABORTED_PLAY,190,37,13,13,BS_ICON 278 PUSHBUTTON "play",IDC_ABORTED_PLAY,190,37,13,13,BS_ICON
279END 279END
280 280
281 281
282#ifndef _MAC 282#ifndef _MAC
283///////////////////////////////////////////////////////////////////////////// 283/////////////////////////////////////////////////////////////////////////////
284// 284//
285// Version 285// Version
286// 286//
287 287
288VS_VERSION_INFO VERSIONINFO 288VS_VERSION_INFO VERSIONINFO
289 FILEVERSION 2,5,0,0 289 FILEVERSION 2,5,1,0
290 PRODUCTVERSION 2,5,0,0 290 PRODUCTVERSION 2,5,1,0
291 FILEFLAGSMASK 0x3fL 291 FILEFLAGSMASK 0x3fL
292#ifdef _DEBUG 292#ifdef _DEBUG
293 FILEFLAGS 0x1L 293 FILEFLAGS 0x1L
294#else 294#else
295 FILEFLAGS 0x0L 295 FILEFLAGS 0x0L
296#endif 296#endif
297 FILEOS 0x4L 297 FILEOS 0x4L
298 FILETYPE 0x1L 298 FILETYPE 0x1L
299 FILESUBTYPE 0x0L 299 FILESUBTYPE 0x0L
300BEGIN 300BEGIN
301 BLOCK "StringFileInfo" 301 BLOCK "StringFileInfo"
302 BEGIN 302 BEGIN
303 BLOCK "040904b0" 303 BLOCK "040904b0"
304 BEGIN 304 BEGIN
305 VALUE "CompanyName", "Klever Group (http://www.klever.net/)\0" 305 VALUE "CompanyName", "Klever Group (http://www.klever.net/)\0"
306 VALUE "FileDescription", "PumpKIN, tftp client/daemon\0" 306 VALUE "FileDescription", "PumpKIN, tftp client/daemon\0"
307 VALUE "FileVersion", "2, 5, 0, 0\0" 307 VALUE "FileVersion", "2, 5, 1, 0\0"
308 VALUE "InternalName", "PUMPKIN\0" 308 VALUE "InternalName", "PUMPKIN\0"
309 VALUE "LegalCopyright", "Copyright © 1997-2004 Klever Group (http://www.klever.net)\0" 309 VALUE "LegalCopyright", "Copyright © 1997-2004 Klever Group (http://www.klever.net)\0"
310 VALUE "LegalTrademarks", "Klever Group (http://www.klever.net/)\0" 310 VALUE "LegalTrademarks", "Klever Group (http://www.klever.net/)\0"
311 VALUE "OriginalFilename", "PUMPKIN.EXE\0" 311 VALUE "OriginalFilename", "PUMPKIN.EXE\0"
312 VALUE "ProductName", "PumpKIN\0" 312 VALUE "ProductName", "PumpKIN\0"
313 VALUE "ProductVersion", "2, 5, 0, 0\0" 313 VALUE "ProductVersion", "2, 5, 1, 0\0"
314 END 314 END
315 END 315 END
316 BLOCK "VarFileInfo" 316 BLOCK "VarFileInfo"
317 BEGIN 317 BEGIN
318 VALUE "Translation", 0x409, 1200 318 VALUE "Translation", 0x409, 1200
319 END 319 END
320END 320END
321 321
322#endif // !_MAC 322#endif // !_MAC
323 323
324 324
325///////////////////////////////////////////////////////////////////////////// 325/////////////////////////////////////////////////////////////////////////////
326// 326//
327// DESIGNINFO 327// DESIGNINFO
328// 328//
329 329
330#ifdef APSTUDIO_INVOKED 330#ifdef APSTUDIO_INVOKED
331GUIDELINES DESIGNINFO DISCARDABLE 331GUIDELINES DESIGNINFO DISCARDABLE
332BEGIN 332BEGIN
333 IDD_ABOUTBOX, DIALOG 333 IDD_ABOUTBOX, DIALOG
334 BEGIN 334 BEGIN
335 LEFTMARGIN, 7 335 LEFTMARGIN, 7
336 RIGHTMARGIN, 210 336 RIGHTMARGIN, 210
337 TOPMARGIN, 7 337 TOPMARGIN, 7
338 BOTTOMMARGIN, 67 338 BOTTOMMARGIN, 67
339 END 339 END
340 340
341 IDD_PUMPKIN_DIALOG, DIALOG 341 IDD_PUMPKIN_DIALOG, DIALOG
342 BEGIN 342 BEGIN
343 LEFTMARGIN, 7 343 LEFTMARGIN, 7
344 RIGHTMARGIN, 355 344 RIGHTMARGIN, 355
345 TOPMARGIN, 7 345 TOPMARGIN, 7
346 BOTTOMMARGIN, 184 346 BOTTOMMARGIN, 184
347 HORZGUIDE, 115 347 HORZGUIDE, 115
348 END 348 END
349 349
350 IDD_PROPS_SERVER, DIALOG 350 IDD_PROPS_SERVER, DIALOG
351 BEGIN 351 BEGIN
352 LEFTMARGIN, 7 352 LEFTMARGIN, 7
353 RIGHTMARGIN, 203 353 RIGHTMARGIN, 203
354 TOPMARGIN, 7 354 TOPMARGIN, 7
355 BOTTOMMARGIN, 147 355 BOTTOMMARGIN, 147
356 END 356 END
357 357
358 IDD_PROPS_NETWORK, DIALOG 358 IDD_PROPS_NETWORK, DIALOG
359 BEGIN 359 BEGIN
360 LEFTMARGIN, 7 360 LEFTMARGIN, 7
361 RIGHTMARGIN, 203 361 RIGHTMARGIN, 203
362 TOPMARGIN, 7 362 TOPMARGIN, 7
363 BOTTOMMARGIN, 147 363 BOTTOMMARGIN, 147
364 END 364 END
365 365
366 IDD_CONFIRM_RRQ, DIALOG 366 IDD_CONFIRM_RRQ, DIALOG
367 BEGIN 367 BEGIN
368 LEFTMARGIN, 7 368 LEFTMARGIN, 7
369 RIGHTMARGIN, 174 369 RIGHTMARGIN, 174
370 TOPMARGIN, 7 370 TOPMARGIN, 7
371 BOTTOMMARGIN, 72 371 BOTTOMMARGIN, 72
372 END 372 END
373 373
374 IDD_CONFIRM_WRQ, DIALOG 374 IDD_CONFIRM_WRQ, DIALOG
375 BEGIN 375 BEGIN
376 LEFTMARGIN, 7 376 LEFTMARGIN, 7
377 RIGHTMARGIN, 194 377 RIGHTMARGIN, 194
378 TOPMARGIN, 7 378 TOPMARGIN, 7
379 BOTTOMMARGIN, 88 379 BOTTOMMARGIN, 88
380 END 380 END
381 381
382 IDD_REQUEST, DIALOG 382 IDD_REQUEST, DIALOG
383 BEGIN 383 BEGIN
384 LEFTMARGIN, 7 384 LEFTMARGIN, 7
385 RIGHTMARGIN, 184 385 RIGHTMARGIN, 184
386 TOPMARGIN, 7 386 TOPMARGIN, 7
387 BOTTOMMARGIN, 154 387 BOTTOMMARGIN, 154
388 END 388 END
389 389
390 IDD_PROPS_SOUNDS, DIALOG 390 IDD_PROPS_SOUNDS, DIALOG
391 BEGIN 391 BEGIN
392 LEFTMARGIN, 7 392 LEFTMARGIN, 7
393 RIGHTMARGIN, 203 393 RIGHTMARGIN, 203
394 TOPMARGIN, 7 394 TOPMARGIN, 7
395 BOTTOMMARGIN, 147 395 BOTTOMMARGIN, 147
396 END 396 END
397END 397END
398#endif // APSTUDIO_INVOKED 398#endif // APSTUDIO_INVOKED
399 399
400 400
401///////////////////////////////////////////////////////////////////////////// 401/////////////////////////////////////////////////////////////////////////////
402// 402//
403// Bitmap 403// Bitmap
404// 404//
405 405
406IDB_BACKGROUND BITMAP DISCARDABLE "shared-data/klever-background.bmp" 406IDB_BACKGROUND BITMAP DISCARDABLE "shared-data/klever-background.bmp"
407 407
408///////////////////////////////////////////////////////////////////////////// 408/////////////////////////////////////////////////////////////////////////////
409// 409//
410// WAVE 410// WAVE
411// 411//
412 412
413IDR_WAVE_RING WAVE DISCARDABLE "res\\ring.wav" 413IDR_WAVE_RING WAVE DISCARDABLE "res\\ring.wav"
414IDR_WAVE_FINISHED WAVE DISCARDABLE "res\\finished.wav" 414IDR_WAVE_FINISHED WAVE DISCARDABLE "res\\finished.wav"
415IDR_WAVE_ABORTED WAVE DISCARDABLE "res\\failed.wav" 415IDR_WAVE_ABORTED WAVE DISCARDABLE "res\\failed.wav"
416 416
417///////////////////////////////////////////////////////////////////////////// 417/////////////////////////////////////////////////////////////////////////////
418// 418//
419// Dialog Info 419// Dialog Info
420// 420//
421 421
422IDD_REQUEST DLGINIT 422IDD_REQUEST DLGINIT
423BEGIN 423BEGIN
424 IDC_TYPE, 0x403, 6, 0 424 IDC_TYPE, 0x403, 6, 0
4250x636f, 0x6574, 0x0074, 4250x636f, 0x6574, 0x0074,
426 IDC_TYPE, 0x403, 9, 0 426 IDC_TYPE, 0x403, 9, 0
4270x656e, 0x6174, 0x6373, 0x6969, "\000" 4270x656e, 0x6174, 0x6373, 0x6969, "\000"
428 IDC_BSIZE, 0x403, 4, 0 428 IDC_BSIZE, 0x403, 4, 0
4290x3135, 0x0032, 4290x3135, 0x0032,
430 IDC_BSIZE, 0x403, 5, 0 430 IDC_BSIZE, 0x403, 5, 0
4310x3031, 0x3432, "\000" 4310x3031, 0x3432, "\000"
432 IDC_BSIZE, 0x403, 5, 0 432 IDC_BSIZE, 0x403, 5, 0
4330x3032, 0x3834, "\000" 4330x3032, 0x3834, "\000"
434 IDC_BSIZE, 0x403, 5, 0 434 IDC_BSIZE, 0x403, 5, 0
4350x3034, 0x3639, "\000" 4350x3034, 0x3639, "\000"
436 IDC_BSIZE, 0x403, 5, 0 436 IDC_BSIZE, 0x403, 5, 0
4370x3138, 0x3239, "\000" 4370x3138, 0x3239, "\000"
438 0 438 0
439END 439END
440 440
441 441
442///////////////////////////////////////////////////////////////////////////// 442/////////////////////////////////////////////////////////////////////////////
443// 443//
444// Menu 444// Menu
445// 445//
446 446
447IDM_POPUPS MENU DISCARDABLE 447IDM_POPUPS MENU DISCARDABLE
448BEGIN 448BEGIN
449 POPUP "&Tray" 449 POPUP "&Tray"
450 BEGIN 450 BEGIN
451 MENUITEM "&Send File", ID_TRAY_SENDFILE 451 MENUITEM "&Send File", ID_TRAY_SENDFILE
452 MENUITEM "F&etch file", ID_TRAY_FETCHFILE 452 MENUITEM "F&etch file", ID_TRAY_FETCHFILE
453 MENUITEM "&Options", ID_TRAY_OPTIONS 453 MENUITEM "&Options", ID_TRAY_OPTIONS
454 MENUITEM "Show &PumpKIN Window", ID_TRAY_SHOWPUMPKINWINDOW 454 MENUITEM "Show &PumpKIN Window", ID_TRAY_SHOWPUMPKINWINDOW
455 MENUITEM "Open &Files Folder", ID_TRAY_OPENFILESFOLDER 455 MENUITEM "Open &Files Folder", ID_TRAY_OPENFILESFOLDER
456 MENUITEM SEPARATOR 456 MENUITEM SEPARATOR
457 MENUITEM "&Help Topics", ID_TRAY_HELP 457 MENUITEM "&Help Topics", ID_TRAY_HELP
458 MENUITEM "&About PumpKIN", ID_TRAY_ABOUTPUMPKIN 458 MENUITEM "&About PumpKIN", ID_TRAY_ABOUTPUMPKIN
459 MENUITEM SEPARATOR 459 MENUITEM SEPARATOR
460 MENUITEM "E&xit", ID_TRAY_EXIT 460 MENUITEM "E&xit", ID_TRAY_EXIT
461 END 461 END
462END 462END
463 463
464 464
465///////////////////////////////////////////////////////////////////////////// 465/////////////////////////////////////////////////////////////////////////////
466// 466//
467// String Table 467// String Table
468// 468//
469 469
470STRINGTABLE DISCARDABLE 470STRINGTABLE DISCARDABLE
471BEGIN 471BEGIN
472 IDS_ABOUTBOX "&About PumpKIN..." 472 IDS_ABOUTBOX "&About PumpKIN..."
473 IDS_FMT_BYTES "%lu" 473 IDS_FMT_BYTES "%lu"
474 IDP_SOCKETS_INIT_FAILED "Windows sockets initialization failed." 474 IDP_SOCKETS_INIT_FAILED "Windows sockets initialization failed."
475 IDS_TFTP_ERROR_ACCESS "Access violation" 475 IDS_TFTP_ERROR_ACCESS "Access violation"
476 IDS_TFTP_ERROR_NOTFOUND "File not found" 476 IDS_TFTP_ERROR_NOTFOUND "File not found"
477 IDS_TFTP_ERROR_DIRFULL "Directory is full" 477 IDS_TFTP_ERROR_DIRFULL "Directory is full"
478 IDS_TFTP_ERROR_SHARING "Sharing violation" 478 IDS_TFTP_ERROR_SHARING "Sharing violation"
479 IDS_TFTP_ERROR_DISKFULL "Disk full" 479 IDS_TFTP_ERROR_DISKFULL "Disk full"
480 IDS_TFTP_ERROR_UNDEFINED "Undefined error" 480 IDS_TFTP_ERROR_UNDEFINED "Undefined error"
481 IDS_LOG_START "PumpKIN started" 481 IDS_LOG_START "PumpKIN started"
482 IDS_LOG_LISTENRECEIVEERROR "Error listening for incoming connections" 482 IDS_LOG_LISTENRECEIVEERROR "Error listening for incoming connections"
483END 483END
484 484
485STRINGTABLE DISCARDABLE 485STRINGTABLE DISCARDABLE
486BEGIN 486BEGIN
487 IDS_LOG_LISTENACCEPTERROR "Error accepting incoming connection" 487 IDS_LOG_LISTENACCEPTERROR "Error accepting incoming connection"
488 IDS_LOG_RRQSERVE "'%s' of type '%s' is requested from %s" 488 IDS_LOG_RRQSERVE "'%s' of type '%s' is requested from %s"
489 IDS_LOG_LISTENOPCODE "Invalid opcode in initial connection request" 489 IDS_LOG_LISTENOPCODE "Invalid opcode in initial connection request"
490 IDS_LOG_XFERUDPSEND "UDP packet send failed" 490 IDS_LOG_XFERUDPSEND "UDP packet send failed"
491 IDS_LOG_XFERRECEIVE "Error on xfer socket" 491 IDS_LOG_XFERRECEIVE "Error on xfer socket"
492 IDS_LOG_XFERSEND "Error on xfer socket" 492 IDS_LOG_XFERSEND "Error on xfer socket"
493 IDS_LOG_XFERUDPRECEIVE "UDP packet receive failed" 493 IDS_LOG_XFERUDPRECEIVE "UDP packet receive failed"
494 IDS_LOG_XFERSOURCETID "Packet from unexpected source" 494 IDS_LOG_XFERSOURCETID "Packet from unexpected source"
495 IDS_LOG_SENTTFTPERROR ":%u: %s" 495 IDS_LOG_SENTTFTPERROR ":%u: %s"
496 IDS_LOG_GOTTFTPERROR "TFTP:%u: %s" 496 IDS_LOG_GOTTFTPERROR "TFTP:%u: %s"
497 IDS_LOG_XFEROPCODE "Invalid opcode during transfer received" 497 IDS_LOG_XFEROPCODE "Invalid opcode during transfer received"
498 IDS_LOG_XFERRRQFINISHED "Transfer of '%s' has successfully completed" 498 IDS_LOG_XFERRRQFINISHED "Transfer of '%s' has successfully completed"
499 IDS_TITLE_OPTIONS "Options" 499 IDS_TITLE_OPTIONS "Options"
500 IDS_LOG_WRQSERVE "Writing of '%s' of type '%s' is requested by %s" 500 IDS_LOG_WRQSERVE "Writing of '%s' of type '%s' is requested by %s"
501 IDS_TFTP_ERROR_FAILEDTORENAME "Too many clones of the file" 501 IDS_TFTP_ERROR_FAILEDTORENAME "Too many clones of the file"
502 IDS_RENAME_TITLE "Save As" 502 IDS_RENAME_TITLE "Save As"
503END 503END
504 504
505STRINGTABLE DISCARDABLE 505STRINGTABLE DISCARDABLE
506BEGIN 506BEGIN
507 IDS_LOG_TIMEDOUT "Transmission of '%s' is timed out" 507 IDS_LOG_TIMEDOUT "Transmission of '%s' is timed out"
508 IDS_CONFIRMEXIT_TITLE "Exit" 508 IDS_CONFIRMEXIT_TITLE "Exit"
509 IDS_CONFIRMEXIT_TEXT "File transmission is currently in progress. Are you sure you want to exit?" 509 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" 510 IDS_LOG_XFERWRQFINISHED "Transfer of '%s' has successfully completed"
511 IDS_LOG_XFERABORTED "Transfer of '%s' was aborted" 511 IDS_LOG_XFERABORTED "Transfer of '%s' was aborted"
512 IDS_TITLE_PUTREQUEST "Send file" 512 IDS_TITLE_PUTREQUEST "Send file"
513 IDS_TITLE_GETREQUEST "Fetch file" 513 IDS_TITLE_GETREQUEST "Fetch file"
514 IDS_WTALKHEADING "Talk with " 514 IDS_WTALKHEADING "Talk with "
515 IDS_TITLE_BROWSEFILE "Browse" 515 IDS_TITLE_BROWSEFILE "Browse"
516 IDS_LOG_RESOLVEFAILED "Failed to resolve host address for '%s'" 516 IDS_LOG_RESOLVEFAILED "Failed to resolve host address for '%s'"
517 IDS_LOG_FAILEDLOCALFILE "Failed to open local file '%s'" 517 IDS_LOG_FAILEDLOCALFILE "Failed to open local file '%s'"
518 IDS_LOG_FAILEDTOOPEN "Failed to open '%s'" 518 IDS_LOG_FAILEDTOOPEN "Failed to open '%s'"
519 IDS_OTALXHEADING "Open Talks: talking to " 519 IDS_OTALXHEADING "Open Talks: talking to "
520 IDS_REGISTRYKEY "Klever Group" 520 IDS_REGISTRYKEY "Klever Group"
521 IDS_KLEVERNET_URL "http://www.klever.net/" 521 IDS_KLEVERNET_URL "http://www.klever.net/"
522 IDS_LOGTIMEFORMAT "%H:%M:%S %B %d" 522 IDS_LOGTIMEFORMAT "%H:%M:%S %B %d"
523END 523END
524 524
525STRINGTABLE DISCARDABLE 525STRINGTABLE DISCARDABLE
526BEGIN 526BEGIN
527 ID_TRAY_HELP "Read the help on PumpKIN" 527 ID_TRAY_HELP "Read the help on PumpKIN"
528 ID_TRAY_ABOUTPUMPKIN "Learn about PumpKIN and it's creator" 528 ID_TRAY_ABOUTPUMPKIN "Learn about PumpKIN and it's creator"
529 ID_TRAY_EXIT "Close PumpKIN" 529 ID_TRAY_EXIT "Close PumpKIN"
530 ID_TRAY_SENDFILE "Send file over the network to your tete-a-tete" 530 ID_TRAY_SENDFILE "Send file over the network to your tete-a-tete"
531 ID_TRAY_FETCHFILE "Fetch file from remote computer" 531 ID_TRAY_FETCHFILE "Fetch file from remote computer"
532 ID_TRAY_OPTIONS "Set PumpKIN options" 532 ID_TRAY_OPTIONS "Set PumpKIN options"
533 ID_TRAY_SHOWPUMPKINWINDOW "Show main window" 533 ID_TRAY_SHOWPUMPKINWINDOW "Show main window"
534 ID_TRAY_OPENFILESFOLDER "Explore TFTP root folder" 534 ID_TRAY_OPENFILESFOLDER "Explore TFTP root folder"
535END 535END
536 536
537STRINGTABLE DISCARDABLE 537STRINGTABLE DISCARDABLE
538BEGIN 538BEGIN
539 IDC_CONNECTIONS "Active transfers" 539 IDC_CONNECTIONS "Active transfers"
540 IDC_LOG "PumpKIN Activity Log" 540 IDC_LOG "PumpKIN Activity Log"
541 IDC_GET "Fetch file from remote server" 541 IDC_GET "Fetch file from remote server"
542 IDC_PUT "Send file over the net" 542 IDC_PUT "Send file over the net"
543 IDC_ABORT "Abort transfer currently in progress" 543 IDC_ABORT "Abort transfer currently in progress"
544 IDC_EXIT "Close PumpKIN" 544 IDC_EXIT "Close PumpKIN"
545END 545END
546 546
547STRINGTABLE DISCARDABLE 547STRINGTABLE DISCARDABLE
548BEGIN 548BEGIN
549 IDC_OPTIONS "Set PumpKIN options" 549 IDC_OPTIONS "Set PumpKIN options"
550 IDC_REFRESH "Refresh talks list" 550 IDC_REFRESH "Refresh talks list"
551 IDC_BROWSE "Browse" 551 IDC_BROWSE "Browse"
552END 552END
553 553
554STRINGTABLE DISCARDABLE 554STRINGTABLE DISCARDABLE
555BEGIN 555BEGIN
556 ID_HELP "Read help on PumpKIN" 556 ID_HELP "Read help on PumpKIN"
557END 557END
558 558
559STRINGTABLE DISCARDABLE 559STRINGTABLE DISCARDABLE
560BEGIN 560BEGIN
561 IDS_DROPFILES_TITLE "Drop Files" 561 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" 562 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'" 563 IDS_LOG_REQUESTING "Requesting '%s' from '%s'"
564 IDS_LOG_SENDING "Sending '%s' to '%s'" 564 IDS_LOG_SENDING "Sending '%s' to '%s'"
565 IDS_WTALKAT "@" 565 IDS_WTALKAT "@"
566 IDS_OTALXAT " at " 566 IDS_OTALXAT " at "
567 IDS_TFTP_ERROR_TSIZE "Invalid transfer size" 567 IDS_TFTP_ERROR_TSIZE "Invalid transfer size"
568 IDS_TFTP_ERROR_BSIZE "Invalid block size" 568 IDS_TFTP_ERROR_BSIZE "Invalid block size"
569 IDS_TFTP_ERROR_TOUT "Invalid timeout" 569 IDS_TFTP_ERROR_TOUT "Invalid timeout"
570 IDS_SELECT_TFTPROOT "Select TFTP filesystem root.." 570 IDS_SELECT_TFTPROOT "Select TFTP filesystem root.."
571 IDS_FILTER_WAV "Sound Files (*.wav)|*.wav||" 571 IDS_FILTER_WAV "Sound Files (*.wav)|*.wav||"
572 IDS_TITLE_WAV "Select sound.." 572 IDS_TITLE_WAV "Select sound.."
573END 573END
574 574
575STRINGTABLE DISCARDABLE 575STRINGTABLE DISCARDABLE
576BEGIN 576BEGIN
577 AFX_IDS_APP_TITLE "PUMPKIN" 577 AFX_IDS_APP_TITLE "PUMPKIN"
578END 578END
579 579
580#endif // English (U.S.) resources 580#endif // English (U.S.) resources
581///////////////////////////////////////////////////////////////////////////// 581/////////////////////////////////////////////////////////////////////////////
582 582
583 583
584 584
585#ifndef APSTUDIO_INVOKED 585#ifndef APSTUDIO_INVOKED
586///////////////////////////////////////////////////////////////////////////// 586/////////////////////////////////////////////////////////////////////////////
587// 587//
588// Generated from the TEXTINCLUDE 3 resource. 588// Generated from the TEXTINCLUDE 3 resource.
589// 589//
590#define _AFX_NO_SPLITTER_RESOURCES 590#define _AFX_NO_SPLITTER_RESOURCES
591#define _AFX_NO_OLE_RESOURCES 591#define _AFX_NO_OLE_RESOURCES
592#define _AFX_NO_TRACKER_RESOURCES 592#define _AFX_NO_TRACKER_RESOURCES
593#define _AFX_NO_PROPERTY_RESOURCES 593#define _AFX_NO_PROPERTY_RESOURCES
594 594
595#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) 595#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
596#ifdef _WIN32 596#ifdef _WIN32
597LANGUAGE 9, 1 597LANGUAGE 9, 1
598#pragma code_page(1252) 598#pragma code_page(1252)
599#endif 599#endif
600#include "res\pumpkin.rc2" // non-Microsoft Visual C++ edited resources 600#include "res\pumpkin.rc2" // non-Microsoft Visual C++ edited resources
601#include "afxres.rc" // Standard components 601#include "afxres.rc" // Standard components
602#endif 602#endif
603///////////////////////////////////////////////////////////////////////////// 603/////////////////////////////////////////////////////////////////////////////
604#endif // not APSTUDIO_INVOKED 604#endif // not APSTUDIO_INVOKED
605 605