summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (show whitespace changes)
-rwxr-xr-x[-rw-r--r--]PropsNetwork.cpp3
-rwxr-xr-x[-rw-r--r--]PropsNetwork.h1
-rwxr-xr-xPumpKINDlg.cpp16
-rwxr-xr-x[-rw-r--r--]PumpKINDlg.h1
-rw-r--r--help/pumpkin.rtf43
-rw-r--r--help/pumpkin.xml1
-rw-r--r--pumpkin.clw12
-rwxr-xr-x[-rw-r--r--]pumpkin.rc30
-rwxr-xr-x[-rw-r--r--]resource.h5
9 files changed, 64 insertions, 48 deletions
diff --git a/PropsNetwork.cpp b/PropsNetwork.cpp
index b5585d7..2dd5913 100644..100755
--- a/PropsNetwork.cpp
+++ b/PropsNetwork.cpp
@@ -1,71 +1,74 @@
1// PropsNetwork.cpp : implementation file 1// PropsNetwork.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 "PropsNetwork.h" 6#include "PropsNetwork.h"
7 7
8#ifdef _DEBUG 8#ifdef _DEBUG
9#define new DEBUG_NEW 9#define new DEBUG_NEW
10#undef THIS_FILE 10#undef THIS_FILE
11static char THIS_FILE[] = __FILE__; 11static char THIS_FILE[] = __FILE__;
12#endif 12#endif
13 13
14///////////////////////////////////////////////////////////////////////////// 14/////////////////////////////////////////////////////////////////////////////
15// CPropsNetwork property page 15// CPropsNetwork property page
16 16
17IMPLEMENT_DYNCREATE(CPropsNetwork, CPropertyPage) 17IMPLEMENT_DYNCREATE(CPropsNetwork, CPropertyPage)
18 18
19CPropsNetwork::CPropsNetwork() : CPropertyPage(CPropsNetwork::IDD) 19CPropsNetwork::CPropsNetwork() : CPropertyPage(CPropsNetwork::IDD)
20{ 20{
21 //{{AFX_DATA_INIT(CPropsNetwork) 21 //{{AFX_DATA_INIT(CPropsNetwork)
22 m_ListenPort = 0; 22 m_ListenPort = 0;
23 m_SpeakPort = 0; 23 m_SpeakPort = 0;
24 m_TimeOut = 0; 24 m_TimeOut = 0;
25 m_BlockSize = 0; 25 m_BlockSize = 0;
26 m_ListenAddress = _T("");
26 //}}AFX_DATA_INIT 27 //}}AFX_DATA_INIT
27} 28}
28 29
29CPropsNetwork::~CPropsNetwork() 30CPropsNetwork::~CPropsNetwork()
30{ 31{
31} 32}
32 33
33void CPropsNetwork::DoDataExchange(CDataExchange* pDX) 34void CPropsNetwork::DoDataExchange(CDataExchange* pDX)
34{ 35{
35 CPropertyPage::DoDataExchange(pDX); 36 CPropertyPage::DoDataExchange(pDX);
36 //{{AFX_DATA_MAP(CPropsNetwork) 37 //{{AFX_DATA_MAP(CPropsNetwork)
37 DDX_Control(pDX, IDC_BSIZESPIN, m_BSizeSpinCtl); 38 DDX_Control(pDX, IDC_BSIZESPIN, m_BSizeSpinCtl);
38 DDX_Control(pDX, IDC_TIMESPIN, m_TimeSpinCtl); 39 DDX_Control(pDX, IDC_TIMESPIN, m_TimeSpinCtl);
39 DDX_Control(pDX, IDC_SPEAKSPIN, m_SpeakSpinCtl); 40 DDX_Control(pDX, IDC_SPEAKSPIN, m_SpeakSpinCtl);
40 DDX_Control(pDX, IDC_LISTENSPIN, m_ListenSpinCtl); 41 DDX_Control(pDX, IDC_LISTENSPIN, m_ListenSpinCtl);
41 DDX_Text(pDX, IDC_LISTENPORT, m_ListenPort); 42 DDX_Text(pDX, IDC_LISTENPORT, m_ListenPort);
42 DDX_Text(pDX, IDC_SPEAKPORT, m_SpeakPort); 43 DDX_Text(pDX, IDC_SPEAKPORT, m_SpeakPort);
43 DDX_Text(pDX, IDC_TIMEOUT, m_TimeOut); 44 DDX_Text(pDX, IDC_TIMEOUT, m_TimeOut);
44 DDV_MinMaxUInt(pDX, m_TimeOut, 5, 60); 45 DDV_MinMaxUInt(pDX, m_TimeOut, 5, 60);
45 DDX_Text(pDX, IDC_BLOCKSIZE, m_BlockSize); 46 DDX_Text(pDX, IDC_BLOCKSIZE, m_BlockSize);
47 DDX_Text(pDX, IDC_LISTENADDRESS, m_ListenAddress);
48 DDV_MaxChars(pDX, m_ListenAddress, 15);
46 //}}AFX_DATA_MAP 49 //}}AFX_DATA_MAP
47} 50}
48 51
49 52
50BEGIN_MESSAGE_MAP(CPropsNetwork, CPropertyPage) 53BEGIN_MESSAGE_MAP(CPropsNetwork, CPropertyPage)
51 //{{AFX_MSG_MAP(CPropsNetwork) 54 //{{AFX_MSG_MAP(CPropsNetwork)
52 //}}AFX_MSG_MAP 55 //}}AFX_MSG_MAP
53END_MESSAGE_MAP() 56END_MESSAGE_MAP()
54 57
55///////////////////////////////////////////////////////////////////////////// 58/////////////////////////////////////////////////////////////////////////////
56// CPropsNetwork message handlers 59// CPropsNetwork message handlers
57 60
58BOOL CPropsNetwork::OnInitDialog() 61BOOL CPropsNetwork::OnInitDialog()
59{ 62{
60 CPropertyPage::OnInitDialog(); 63 CPropertyPage::OnInitDialog();
61 64
62 m_ListenSpinCtl.SetRange(0,32767); 65 m_ListenSpinCtl.SetRange(0,32767);
63 m_SpeakSpinCtl.SetRange(0,32767); 66 m_SpeakSpinCtl.SetRange(0,32767);
64 m_TimeSpinCtl.SetRange(5,60); 67 m_TimeSpinCtl.SetRange(5,60);
65 m_BSizeSpinCtl.SetRange(512,16384); 68 m_BSizeSpinCtl.SetRange(512,16384);
66UDACCEL uda = {0,512}; 69UDACCEL uda = {0,512};
67 m_BSizeSpinCtl.SetAccel(1,&uda); 70 m_BSizeSpinCtl.SetAccel(1,&uda);
68 71
69 return TRUE; // return TRUE unless you set the focus to a control 72 return TRUE; // return TRUE unless you set the focus to a control
70 // EXCEPTION: OCX Property Pages should return FALSE 73 // EXCEPTION: OCX Property Pages should return FALSE
71} 74}
diff --git a/PropsNetwork.h b/PropsNetwork.h
index 67d0b53..565b090 100644..100755
--- a/PropsNetwork.h
+++ b/PropsNetwork.h
@@ -1,45 +1,46 @@
1// PropsNetwork.h : header file 1// PropsNetwork.h : header file
2// 2//
3 3
4///////////////////////////////////////////////////////////////////////////// 4/////////////////////////////////////////////////////////////////////////////
5// CPropsNetwork dialog 5// CPropsNetwork dialog
6 6
7class CPropsNetwork : public CPropertyPage 7class CPropsNetwork : public CPropertyPage
8{ 8{
9 DECLARE_DYNCREATE(CPropsNetwork) 9 DECLARE_DYNCREATE(CPropsNetwork)
10 10
11// Construction 11// Construction
12public: 12public:
13 CPropsNetwork(); 13 CPropsNetwork();
14 ~CPropsNetwork(); 14 ~CPropsNetwork();
15 15
16// Dialog Data 16// Dialog Data
17 //{{AFX_DATA(CPropsNetwork) 17 //{{AFX_DATA(CPropsNetwork)
18 enum { IDD = IDD_PROPS_NETWORK }; 18 enum { IDD = IDD_PROPS_NETWORK };
19 CSpinButtonCtrlm_BSizeSpinCtl; 19 CSpinButtonCtrlm_BSizeSpinCtl;
20 CSpinButtonCtrlm_TimeSpinCtl; 20 CSpinButtonCtrlm_TimeSpinCtl;
21 CSpinButtonCtrlm_SpeakSpinCtl; 21 CSpinButtonCtrlm_SpeakSpinCtl;
22 CSpinButtonCtrlm_ListenSpinCtl; 22 CSpinButtonCtrlm_ListenSpinCtl;
23 UINTm_ListenPort; 23 UINTm_ListenPort;
24 UINTm_SpeakPort; 24 UINTm_SpeakPort;
25 UINTm_TimeOut; 25 UINTm_TimeOut;
26 UINTm_BlockSize; 26 UINTm_BlockSize;
27 CStringm_ListenAddress;
27 //}}AFX_DATA 28 //}}AFX_DATA
28 29
29 30
30// Overrides 31// Overrides
31 // ClassWizard generate virtual function overrides 32 // ClassWizard generate virtual function overrides
32 //{{AFX_VIRTUAL(CPropsNetwork) 33 //{{AFX_VIRTUAL(CPropsNetwork)
33 protected: 34 protected:
34 virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support 35 virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
35 //}}AFX_VIRTUAL 36 //}}AFX_VIRTUAL
36 37
37// Implementation 38// Implementation
38protected: 39protected:
39 // Generated message map functions 40 // Generated message map functions
40 //{{AFX_MSG(CPropsNetwork) 41 //{{AFX_MSG(CPropsNetwork)
41 virtual BOOL OnInitDialog(); 42 virtual BOOL OnInitDialog();
42 //}}AFX_MSG 43 //}}AFX_MSG
43 DECLARE_MESSAGE_MAP() 44 DECLARE_MESSAGE_MAP()
44 45
45}; 46};
diff --git a/PumpKINDlg.cpp b/PumpKINDlg.cpp
index 3ff1500..0c5c19b 100755
--- a/PumpKINDlg.cpp
+++ b/PumpKINDlg.cpp
@@ -1183,119 +1183,121 @@ CTime *t = new CTime(CTime::GetCurrentTime());
1183 1183
1184void CPumpKINDlg::LogLine(UINT msgID) 1184void CPumpKINDlg::LogLine(UINT msgID)
1185{ 1185{
1186CString tmp; 1186CString tmp;
1187 tmp.Format(msgID); 1187 tmp.Format(msgID);
1188 LogLine(tmp); 1188 LogLine(tmp);
1189} 1189}
1190 1190
1191void CXferSocket::TurnSlashes(CString& fn,BOOL bBack) 1191void CXferSocket::TurnSlashes(CString& fn,BOOL bBack)
1192{ 1192{
1193 ints = fn.Find(bBack?'/':'\\'); 1193 ints = fn.Find(bBack?'/':'\\');
1194 while(s>=0){ 1194 while(s>=0){
1195 fn.SetAt(s,bBack?'\\':'/'); 1195 fn.SetAt(s,bBack?'\\':'/');
1196 s = fn.Find(bBack?'/':'\\'); 1196 s = fn.Find(bBack?'/':'\\');
1197 } 1197 }
1198} 1198}
1199 1199
1200CString CXferSocket::ApplyRoot(LPCTSTR fileName) 1200CString CXferSocket::ApplyRoot(LPCTSTR fileName)
1201{ 1201{
1202 ASSERT(m_Daddy); 1202 ASSERT(m_Daddy);
1203CString fn = fileName; 1203CString fn = fileName;
1204CString rv = m_Daddy->m_TFTPRoot; 1204CString rv = m_Daddy->m_TFTPRoot;
1205 if(rv.IsEmpty()) 1205 if(rv.IsEmpty())
1206 rv = "."; 1206 rv = ".";
1207 if(rv[rv.GetLength()-1]!='\\') 1207 if(rv[rv.GetLength()-1]!='\\')
1208 rv+="\\"; 1208 rv+="\\";
1209 while((!fn.IsEmpty()) && fn[0]=='\\') 1209 while((!fn.IsEmpty()) && fn[0]=='\\')
1210 fn=fn.Mid(1); 1210 fn=fn.Mid(1);
1211 rv+=fn; 1211 rv+=fn;
1212 return rv; 1212 return rv;
1213} 1213}
1214 1214
1215void CPumpKINDlg::OnOptions() 1215void CPumpKINDlg::OnOptions()
1216{ 1216{
1217CPropertySheet cps(IDS_TITLE_OPTIONS,this); 1217CPropertySheet cps(IDS_TITLE_OPTIONS,this);
1218CPropsServer server; 1218CPropsServer server;
1219CPropsNetwork network; 1219CPropsNetwork network;
1220CPropsSounds sounds; 1220CPropsSounds sounds;
1221CPropsACL acl; 1221CPropsACL acl;
1222 1222
1223 server.m_RRQMode=m_RRQMode; 1223 server.m_RRQMode=m_RRQMode;
1224 server.m_TFTPRoot=m_TFTPRoot; 1224 server.m_TFTPRoot=m_TFTPRoot;
1225 server.m_TFTPSubdirs=m_bTFTPSubdirs; 1225 server.m_TFTPSubdirs=m_bTFTPSubdirs;
1226 server.m_WRQMode=m_WRQMode; 1226 server.m_WRQMode=m_WRQMode;
1227 server.m_PromptTimeOut=m_PromptTimeOut; 1227 server.m_PromptTimeOut=m_PromptTimeOut;
1228 server.m_LogFile=m_LogFile; 1228 server.m_LogFile=m_LogFile;
1229 1229
1230 network.m_ListenPort=m_ListenPort; 1230 network.m_ListenPort=m_ListenPort;
1231 network.m_ListenAddress=m_ListenAddress;
1231 network.m_SpeakPort=m_SpeakPort; 1232 network.m_SpeakPort=m_SpeakPort;
1232 network.m_TimeOut=m_TFTPTimeOut.GetTotalSeconds(); 1233 network.m_TimeOut=m_TFTPTimeOut.GetTotalSeconds();
1233 network.m_BlockSize=m_BlockSize; 1234 network.m_BlockSize=m_BlockSize;
1234 1235
1235 sounds.m_Request = m_bnwRequest; 1236 sounds.m_Request = m_bnwRequest;
1236 sounds.m_Success = m_bnwSuccess; 1237 sounds.m_Success = m_bnwSuccess;
1237 sounds.m_Abort = m_bnwAbort; 1238 sounds.m_Abort = m_bnwAbort;
1238 1239
1239 acl.m_rulist = m_aclRules; 1240 acl.m_rulist = m_aclRules;
1240 1241
1241 cps.AddPage(&server); 1242 cps.AddPage(&server);
1242 cps.AddPage(&network); 1243 cps.AddPage(&network);
1243 cps.AddPage(&sounds); 1244 cps.AddPage(&sounds);
1244 cps.AddPage(&acl); 1245 cps.AddPage(&acl);
1245 if(cps.DoModal()==IDOK){ 1246 if(cps.DoModal()==IDOK){
1246 m_RRQMode=server.m_RRQMode; 1247 m_RRQMode=server.m_RRQMode;
1247 m_TFTPRoot=server.m_TFTPRoot; 1248 m_TFTPRoot=server.m_TFTPRoot;
1248 m_bTFTPSubdirs=server.m_TFTPSubdirs; 1249 m_bTFTPSubdirs=server.m_TFTPSubdirs;
1249 m_WRQMode=server.m_WRQMode; 1250 m_WRQMode=server.m_WRQMode;
1250 m_PromptTimeOut=server.m_PromptTimeOut; 1251 m_PromptTimeOut=server.m_PromptTimeOut;
1251 m_LogFile=server.m_LogFile; 1252 m_LogFile=server.m_LogFile;
1252 1253
1253 m_ListenPort=network.m_ListenPort; 1254 m_ListenPort=network.m_ListenPort;
1255 m_ListenAddress=network.m_ListenAddress;
1254 m_SpeakPort=network.m_SpeakPort; 1256 m_SpeakPort=network.m_SpeakPort;
1255 m_TFTPTimeOut=CTimeSpan(network.m_TimeOut); 1257 m_TFTPTimeOut=CTimeSpan(network.m_TimeOut);
1256 m_BlockSize=network.m_BlockSize; 1258 m_BlockSize=network.m_BlockSize;
1257 1259
1258 m_bnwRequest = sounds.m_Request; 1260 m_bnwRequest = sounds.m_Request;
1259 m_bnwSuccess = sounds.m_Success; 1261 m_bnwSuccess = sounds.m_Success;
1260 m_bnwAbort = sounds.m_Abort; 1262 m_bnwAbort = sounds.m_Abort;
1261 1263
1262 m_aclRules = acl.m_rulist; 1264 m_aclRules = acl.m_rulist;
1263 1265
1264 m_lastlogerr.Empty(); 1266 m_lastlogerr.Empty();
1265 } 1267 }
1266} 1268}
1267 1269
1268BOOL CRRQSocket::ConfirmRequest() 1270BOOL CRRQSocket::ConfirmRequest()
1269{ 1271{
1270CConfirmRRQDlg cd(NULL); 1272CConfirmRRQDlg cd(NULL);
1271 cd.m_Daddy=this; 1273 cd.m_Daddy=this;
1272 cd.m_File=m_FileName; 1274 cd.m_File=m_FileName;
1273 cd.m_Host=inet_ntoa(m_Peer.sin_addr); 1275 cd.m_Host=inet_ntoa(m_Peer.sin_addr);
1274 if(cd.DoModal()==IDOK) 1276 if(cd.DoModal()==IDOK)
1275 return TRUE; 1277 return TRUE;
1276 return FALSE; 1278 return FALSE;
1277} 1279}
1278 1280
1279CWRQSocket::CWRQSocket(CPumpKINDlg* daddy,LPCTSTR fileName,LPCTSTR type,SOCKADDR_IN *sin) 1281CWRQSocket::CWRQSocket(CPumpKINDlg* daddy,LPCTSTR fileName,LPCTSTR type,SOCKADDR_IN *sin)
1280 : CXferSocket(daddy,fileName,type,sin) 1282 : CXferSocket(daddy,fileName,type,sin)
1281{ 1283{
1282 state=stateNone; 1284 state=stateNone;
1283 m_ACK=0; 1285 m_ACK=0;
1284 m_LastSlack=0; 1286 m_LastSlack=0;
1285 m_bResume=FALSE; 1287 m_bResume=FALSE;
1286} 1288}
1287 1289
1288BOOL CWRQSocket::Create(LPCTSTR localFile,LPCTSTR hostName) 1290BOOL CWRQSocket::Create(LPCTSTR localFile,LPCTSTR hostName)
1289{ 1291{
1290 if(!CAsyncSocket::Create(0,SOCK_DGRAM)) 1292 if(!CAsyncSocket::Create(0,SOCK_DGRAM))
1291 return FALSE; 1293 return FALSE;
1292 ASSERT(m_Daddy); 1294 ASSERT(m_Daddy);
1293 ASSERT(m_Peer.sin_addr.s_addr!=INADDR_NONE || hostName); 1295 ASSERT(m_Peer.sin_addr.s_addr!=INADDR_NONE || hostName);
1294 m_Daddy->m_Xfers[m_hSocket]=this; 1296 m_Daddy->m_Xfers[m_hSocket]=this;
1295 UpdateList(); 1297 UpdateList();
1296CString lf; 1298CString lf;
1297 if(!localFile) { 1299 if(!localFile) {
1298 lf = m_FileName; 1300 lf = m_FileName;
1299 TurnSlashes(lf,TRUE); 1301 TurnSlashes(lf,TRUE);
1300 } 1302 }
1301CString fn = localFile?ApplyRootGently(localFile):ApplyRoot(lf); 1303CString fn = localFile?ApplyRootGently(localFile):ApplyRoot(lf);
@@ -1830,126 +1832,128 @@ void CPumpKINDlg::OnTrayShowpumpkinwindow()
1830 m_bShown=TRUE; 1832 m_bShown=TRUE;
1831 ShowWindow(SW_SHOW); 1833 ShowWindow(SW_SHOW);
1832 SetForegroundWindow(); 1834 SetForegroundWindow();
1833 SetFocus(); 1835 SetFocus();
1834 } 1836 }
1835} 1837}
1836 1838
1837void CPumpKINDlg::OnTrayExit() 1839void CPumpKINDlg::OnTrayExit()
1838{ 1840{
1839 OnExit(); 1841 OnExit();
1840} 1842}
1841 1843
1842void CPumpKINDlg::OnTrayAboutpumpkin() 1844void CPumpKINDlg::OnTrayAboutpumpkin()
1843{ 1845{
1844CAboutDlg dlgAbout; 1846CAboutDlg dlgAbout;
1845 dlgAbout.DoModal(); 1847 dlgAbout.DoModal();
1846} 1848}
1847 1849
1848void CPumpKINDlg::OnTrayFetchfile() 1850void CPumpKINDlg::OnTrayFetchfile()
1849{ 1851{
1850 OnGet(); 1852 OnGet();
1851} 1853}
1852 1854
1853void CPumpKINDlg::OnTrayHelp() 1855void CPumpKINDlg::OnTrayHelp()
1854{ 1856{
1855 OnHelp(); 1857 OnHelp();
1856} 1858}
1857 1859
1858void CPumpKINDlg::OnTrayOptions() 1860void CPumpKINDlg::OnTrayOptions()
1859{ 1861{
1860 OnOptions(); 1862 OnOptions();
1861} 1863}
1862 1864
1863void CPumpKINDlg::OnTraySendfile() 1865void CPumpKINDlg::OnTraySendfile()
1864{ 1866{
1865 OnPut(); 1867 OnPut();
1866} 1868}
1867 1869
1868void CPumpKINDlg::LoadSettings() 1870void CPumpKINDlg::LoadSettings()
1869{ 1871{
1870CWinApp *app = AfxGetApp(); 1872CWinApp *app = AfxGetApp();
1871 ASSERT(app); 1873 ASSERT(app);
1872 m_bListen=app->GetProfileInt("TFTPSettings","Listen",m_bListen); 1874 m_bListen=app->GetProfileInt("TFTPSettings","Listen",m_bListen);
1873 m_bnwRequest=app->GetProfileString("BellsNWhistles","Request",m_bnwRequest); 1875 m_bnwRequest=app->GetProfileString("BellsNWhistles","Request",m_bnwRequest);
1874 m_bnwSuccess=app->GetProfileString("BellsNWhistles","Success",m_bnwSuccess); 1876 m_bnwSuccess=app->GetProfileString("BellsNWhistles","Success",m_bnwSuccess);
1875 m_bnwAbort=app->GetProfileString("BellsNWhistles","Abort",m_bnwAbort); 1877 m_bnwAbort=app->GetProfileString("BellsNWhistles","Abort",m_bnwAbort);
1876 m_bTFTPSubdirs=app->GetProfileInt("TFTPSettings","Subdirs",m_bTFTPSubdirs); 1878 m_bTFTPSubdirs=app->GetProfileInt("TFTPSettings","Subdirs",m_bTFTPSubdirs);
1877 m_ListenPort=app->GetProfileInt("TFTPSettings","ListenPort",m_ListenPort); 1879 m_ListenPort=app->GetProfileInt("TFTPSettings","ListenPort",m_ListenPort);
1880 m_ListenAddress=app->GetProfileString("TFTPSettings","ListenAddress",m_ListenAddress);
1878 m_LogLength=app->GetProfileInt("UISettings","LogLength",m_LogLength); 1881 m_LogLength=app->GetProfileInt("UISettings","LogLength",m_LogLength);
1879 m_PromptTimeOut=app->GetProfileInt("UISettings","PromptTimeout",m_PromptTimeOut); 1882 m_PromptTimeOut=app->GetProfileInt("UISettings","PromptTimeout",m_PromptTimeOut);
1880 m_RRQMode=app->GetProfileInt("TFTPSettings","RRQMode",m_RRQMode); 1883 m_RRQMode=app->GetProfileInt("TFTPSettings","RRQMode",m_RRQMode);
1881 m_SpeakPort=app->GetProfileInt("TFTPSettings","SpeakPort",m_SpeakPort); 1884 m_SpeakPort=app->GetProfileInt("TFTPSettings","SpeakPort",m_SpeakPort);
1882 m_TFTPRoot=app->GetProfileString("TFTPSettings","TFTPRoot",m_TFTPRoot); 1885 m_TFTPRoot=app->GetProfileString("TFTPSettings","TFTPRoot",m_TFTPRoot);
1883 m_LogFile=app->GetProfileString("General","LogFile",m_LogFile); 1886 m_LogFile=app->GetProfileString("General","LogFile",m_LogFile);
1884 m_TFTPTimeOut=CTimeSpan(app->GetProfileInt("TFTPSettings","TFTPTimeout",m_TFTPTimeOut.GetTotalSeconds())); 1887 m_TFTPTimeOut=CTimeSpan(app->GetProfileInt("TFTPSettings","TFTPTimeout",m_TFTPTimeOut.GetTotalSeconds()));
1885 m_BlockSize=app->GetProfileInt("TFTPSettings","TFTPBlockSize",m_BlockSize); 1888 m_BlockSize=app->GetProfileInt("TFTPSettings","TFTPBlockSize",m_BlockSize);
1886 m_RetryTimeOut=CTimeSpan(app->GetProfileInt("TFTPSettings","RetryTimeout",m_RetryTimeOut.GetTotalSeconds())); 1889 m_RetryTimeOut=CTimeSpan(app->GetProfileInt("TFTPSettings","RetryTimeout",m_RetryTimeOut.GetTotalSeconds()));
1887 m_WRQMode=app->GetProfileInt("TFTPSettings","WRQMode",m_WRQMode); 1890 m_WRQMode=app->GetProfileInt("TFTPSettings","WRQMode",m_WRQMode);
1888 m_bShown=app->GetProfileInt("UISettings","Visble",m_bShown); 1891 m_bShown=app->GetProfileInt("UISettings","Visble",m_bShown);
1889 if(m_TFTPRoot.IsEmpty()){ 1892 if(m_TFTPRoot.IsEmpty()){
1890 DWORD dL = ::GetCurrentDirectory(0,NULL); 1893 DWORD dL = ::GetCurrentDirectory(0,NULL);
1891 VERIFY(::GetCurrentDirectory(dL,m_TFTPRoot.GetBuffer(dL))); 1894 VERIFY(::GetCurrentDirectory(dL,m_TFTPRoot.GetBuffer(dL)));
1892 m_TFTPRoot.ReleaseBuffer(); 1895 m_TFTPRoot.ReleaseBuffer();
1893 } 1896 }
1894 ::SetCurrentDirectory(m_TFTPRoot); 1897 ::SetCurrentDirectory(m_TFTPRoot);
1895 m_aclRules.LoadProfile(app); 1898 m_aclRules.LoadProfile(app);
1896} 1899}
1897 1900
1898void CPumpKINDlg::SaveSettings() 1901void CPumpKINDlg::SaveSettings()
1899{ 1902{
1900CWinApp *app = AfxGetApp(); 1903CWinApp *app = AfxGetApp();
1901 ASSERT(app); 1904 ASSERT(app);
1902 app->WriteProfileInt("TFTPSettings","Listen",m_bListen); 1905 app->WriteProfileInt("TFTPSettings","Listen",m_bListen);
1903 app->WriteProfileString("BellsNWhistles","Request",m_bnwRequest); 1906 app->WriteProfileString("BellsNWhistles","Request",m_bnwRequest);
1904 app->WriteProfileString("BellsNWhistles","Success",m_bnwSuccess); 1907 app->WriteProfileString("BellsNWhistles","Success",m_bnwSuccess);
1905 app->WriteProfileString("BellsNWhistles","Abort",m_bnwAbort); 1908 app->WriteProfileString("BellsNWhistles","Abort",m_bnwAbort);
1906 app->WriteProfileInt("TFTPSettings","Subdirs",m_bTFTPSubdirs); 1909 app->WriteProfileInt("TFTPSettings","Subdirs",m_bTFTPSubdirs);
1907 app->WriteProfileInt("TFTPSettings","ListenPort",m_ListenPort); 1910 app->WriteProfileInt("TFTPSettings","ListenPort",m_ListenPort);
1911 app->WriteProfileString("TFTPSettings","ListenAddress",m_ListenAddress);
1908 app->WriteProfileInt("UISettings","LogLength",m_LogLength); 1912 app->WriteProfileInt("UISettings","LogLength",m_LogLength);
1909 app->WriteProfileInt("UISettings","PromptTimeout",m_PromptTimeOut); 1913 app->WriteProfileInt("UISettings","PromptTimeout",m_PromptTimeOut);
1910 app->WriteProfileInt("TFTPSettings","RRQMode",m_RRQMode); 1914 app->WriteProfileInt("TFTPSettings","RRQMode",m_RRQMode);
1911 app->WriteProfileInt("TFTPSettings","SpeakPort",m_SpeakPort); 1915 app->WriteProfileInt("TFTPSettings","SpeakPort",m_SpeakPort);
1912 app->WriteProfileString("TFTPSettings","TFTPRoot",m_TFTPRoot); 1916 app->WriteProfileString("TFTPSettings","TFTPRoot",m_TFTPRoot);
1913 app->WriteProfileString("General","LogFile",m_LogFile); 1917 app->WriteProfileString("General","LogFile",m_LogFile);
1914 app->WriteProfileInt("TFTPSettings","TFTPTimeout",m_TFTPTimeOut.GetTotalSeconds()); 1918 app->WriteProfileInt("TFTPSettings","TFTPTimeout",m_TFTPTimeOut.GetTotalSeconds());
1915 app->WriteProfileInt("TFTPSettings","TFTPBlockSize",m_BlockSize); 1919 app->WriteProfileInt("TFTPSettings","TFTPBlockSize",m_BlockSize);
1916 app->WriteProfileInt("TFTPSettings","RetryTimeout",m_RetryTimeOut.GetTotalSeconds()); 1920 app->WriteProfileInt("TFTPSettings","RetryTimeout",m_RetryTimeOut.GetTotalSeconds());
1917 app->WriteProfileInt("TFTPSettings","WRQMode",m_WRQMode); 1921 app->WriteProfileInt("TFTPSettings","WRQMode",m_WRQMode);
1918 app->WriteProfileInt("UISettings","Visble",m_bShown); 1922 app->WriteProfileInt("UISettings","Visble",m_bShown);
1919 m_aclRules.SaveProfile(app); 1923 m_aclRules.SaveProfile(app);
1920} 1924}
1921 1925
1922void CPumpKINDlg::OnWindowPosChanging(WINDOWPOS FAR* lpwndpos) 1926void CPumpKINDlg::OnWindowPosChanging(WINDOWPOS FAR* lpwndpos)
1923{ 1927{
1924 CDialog::OnWindowPosChanging(lpwndpos); 1928 CDialog::OnWindowPosChanging(lpwndpos);
1925 if(!m_bExiting){ 1929 if(!m_bExiting){
1926 if(m_bShown){ 1930 if(m_bShown){
1927 lpwndpos->flags&=~SWP_HIDEWINDOW; 1931 lpwndpos->flags&=~SWP_HIDEWINDOW;
1928 lpwndpos->flags|=SWP_SHOWWINDOW; 1932 lpwndpos->flags|=SWP_SHOWWINDOW;
1929 }else{ 1933 }else{
1930 lpwndpos->flags&=~SWP_SHOWWINDOW; 1934 lpwndpos->flags&=~SWP_SHOWWINDOW;
1931 lpwndpos->flags|=SWP_HIDEWINDOW; 1935 lpwndpos->flags|=SWP_HIDEWINDOW;
1932 if(::GetForegroundWindow()==m_hWnd && (m_Trayer && !m_Trayer->m_inMenu)) 1936 if(::GetForegroundWindow()==m_hWnd && (m_Trayer && !m_Trayer->m_inMenu))
1933 GetDesktopWindow()->SetForegroundWindow(); 1937 GetDesktopWindow()->SetForegroundWindow();
1934 } 1938 }
1935 } 1939 }
1936} 1940}
1937 1941
1938CString CXferSocket::ApplyRootGently(LPCTSTR fn) 1942CString CXferSocket::ApplyRootGently(LPCTSTR fn)
1939{ 1943{
1940CString f = fn; 1944CString f = fn;
1941CString rv = f; 1945CString rv = f;
1942 if((!f.IsEmpty()) && f[0]!='\\' && f.Find(":")<0 && f.Find("\\")<0) 1946 if((!f.IsEmpty()) && f[0]!='\\' && f.Find(":")<0 && f.Find("\\")<0)
1943 rv = ApplyRoot(f); 1947 rv = ApplyRoot(f);
1944 return rv; 1948 return rv;
1945} 1949}
1946 1950
1947BOOL CXferSocket::CheckBadRelativeness(LPCTSTR file) 1951BOOL CXferSocket::CheckBadRelativeness(LPCTSTR file)
1948{ 1952{
1949CString tmp = file; 1953CString tmp = file;
1950 if(tmp.IsEmpty()) 1954 if(tmp.IsEmpty())
1951 return FALSE; 1955 return FALSE;
1952 if(tmp.Find("..")>=0) 1956 if(tmp.Find("..")>=0)
1953 return TRUE; 1957 return TRUE;
1954 if(tmp.Find(":")>=0) 1958 if(tmp.Find(":")>=0)
1955 return TRUE; 1959 return TRUE;
@@ -2022,106 +2026,104 @@ UINT files = ::DragQueryFile(hDropInfo,0xFFFFFFFF,NULL,0);
2022 2026
2023void CPumpKINDlg::OnCancel() 2027void CPumpKINDlg::OnCancel()
2024{ 2028{
2025 OnClose(); 2029 OnClose();
2026} 2030}
2027 2031
2028CPumpKINDlg::~CPumpKINDlg() 2032CPumpKINDlg::~CPumpKINDlg()
2029{ 2033{
2030 delete m_Trayer; 2034 delete m_Trayer;
2031 delete m_Retrier; 2035 delete m_Retrier;
2032} 2036}
2033 2037
2034void CXferSocket::OnRetry() 2038void CXferSocket::OnRetry()
2035{ 2039{
2036 if(!m_Retry){ 2040 if(!m_Retry){
2037 TRACE("Retrying unretriable..\n"); 2041 TRACE("Retrying unretriable..\n");
2038 return; 2042 return;
2039 } 2043 }
2040 TRACE0("Retrying..\n"); 2044 TRACE0("Retrying..\n");
2041 m_bRetry=TRUE; 2045 m_bRetry=TRUE;
2042 PostTFTP(tftp::Copy(m_Retry)); 2046 PostTFTP(tftp::Copy(m_Retry));
2043 m_bRetry=FALSE; 2047 m_bRetry=FALSE;
2044} 2048}
2045 2049
2046tftp* tftp::Copy(tftp *src) 2050tftp* tftp::Copy(tftp *src)
2047{ 2051{
2048 ASSERT(src); 2052 ASSERT(src);
2049 ASSERT(src->length); 2053 ASSERT(src->length);
2050tftp* rv = Allocate(src->length); 2054tftp* rv = Allocate(src->length);
2051 ASSERT(rv); 2055 ASSERT(rv);
2052 memmove(rv,src,tftpSlackSize+src->length); 2056 memmove(rv,src,tftpSlackSize+src->length);
2053 return rv; 2057 return rv;
2054} 2058}
2055 2059
2056void CXferSocket::SetTry(tftp *p) 2060void CXferSocket::SetTry(tftp *p)
2057{ 2061{
2058 if(m_Retry) 2062 if(m_Retry)
2059 delete m_Retry; 2063 delete m_Retry;
2060 m_Retry=p?tftp::Copy(p):NULL; 2064 m_Retry=p?tftp::Copy(p):NULL;
2061} 2065}
2062 2066
2063void CPumpKINDlg::OnHelp() 2067void CPumpKINDlg::OnHelp()
2064{ 2068{
2065 AfxGetApp()->WinHelp(0,HELP_FINDER); 2069 AfxGetApp()->WinHelp(0,HELP_FINDER);
2066} 2070}
2067 2071
2068BOOL CListenSocket::SetListen(BOOL b) { 2072BOOL CListenSocket::SetListen(BOOL b) {
2069 ASSERT(m_Daddy); 2073 ASSERT(m_Daddy);
2070 if(b==m_bListen) 2074 if(b==m_bListen) return TRUE;
2071 return TRUE; 2075 if(!b) {
2072 if(b) {
2073 if(!Create(m_Daddy->m_ListenPort,SOCK_DGRAM))
2074 return FALSE;
2075 return m_bListen=TRUE;
2076 }else{
2077 Close(); m_bListen=FALSE; 2076 Close(); m_bListen=FALSE;
2078 return TRUE; 2077 return TRUE;
2079 } 2078 }
2079 return m_bListen=Create(m_Daddy->m_ListenPort,SOCK_DGRAM,
2080 FD_READ|FD_WRITE|FD_OOB|FD_ACCEPT|FD_CONNECT|FD_CLOSE,
2081 m_Daddy->m_ListenAddress.IsEmpty()?NULL:(LPCTSTR)m_Daddy->m_ListenAddress);
2080} 2082}
2081 2083
2082void CPumpKINDlg::OnListening() 2084void CPumpKINDlg::OnListening()
2083{ 2085{
2084 if(!m_Listener.SetListen(m_ListenCtl.GetCheck()==1)) { 2086 if(!m_Listener.SetListen(m_ListenCtl.GetCheck()==1)) {
2085 TRACE0("Failed to create socket\n"); 2087 TRACE0("Failed to create socket\n");
2086 AfxMessageBox(IDS_BOX_CANTBIND,MB_OK|MB_ICONEXCLAMATION); 2088 AfxMessageBox(IDS_BOX_CANTBIND,MB_OK|MB_ICONEXCLAMATION);
2087 } 2089 }
2088 m_ListenCtl.SetCheck(m_Listener.m_bListen?1:0); 2090 m_ListenCtl.SetCheck(m_Listener.m_bListen?1:0);
2089 m_bListen=m_Listener.m_bListen; 2091 m_bListen=m_Listener.m_bListen;
2090} 2092}
2091 2093
2092void CPumpKINDlg::OnTrayListen() 2094void CPumpKINDlg::OnTrayListen()
2093{ 2095{
2094 if(!m_Listener.SetListen(!m_Listener.m_bListen)) { 2096 if(!m_Listener.SetListen(!m_Listener.m_bListen)) {
2095 TRACE0("Failed to create socket\n"); 2097 TRACE0("Failed to create socket\n");
2096 AfxMessageBox(IDS_BOX_CANTBIND,MB_OK|MB_ICONEXCLAMATION); 2098 AfxMessageBox(IDS_BOX_CANTBIND,MB_OK|MB_ICONEXCLAMATION);
2097 } 2099 }
2098 m_ListenCtl.SetCheck(m_Listener.m_bListen?1:0); 2100 m_ListenCtl.SetCheck(m_Listener.m_bListen?1:0);
2099 m_bListen=m_Listener.m_bListen; 2101 m_bListen=m_Listener.m_bListen;
2100} 2102}
2101 2103
2102void CPumpKINDlg::LogLine(LPCTSTR str) 2104void CPumpKINDlg::LogLine(LPCTSTR str)
2103{ 2105{
2104 LogLineToScreen(str); 2106 LogLineToScreen(str);
2105 if(!m_LogFile.IsEmpty()) { 2107 if(!m_LogFile.IsEmpty()) {
2106 if(!Klever::LogRecord((LPCTSTR)m_LogFile,str)) { 2108 if(!Klever::LogRecord((LPCTSTR)m_LogFile,str)) {
2107 if(m_lastlogerr!=m_LogFile) { 2109 if(m_lastlogerr!=m_LogFile) {
2108 CString tmp; 2110 CString tmp;
2109 tmp.Format(IDS_LOG_LOGERROR,m_LogFile); 2111 tmp.Format(IDS_LOG_LOGERROR,m_LogFile);
2110 LogLineToScreen(tmp); 2112 LogLineToScreen(tmp);
2111 m_lastlogerr=m_LogFile; 2113 m_lastlogerr=m_LogFile;
2112 } 2114 }
2113 } 2115 }
2114 } 2116 }
2115} 2117}
2116 2118
2117void CPumpKINDlg::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI) 2119void CPumpKINDlg::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
2118{ 2120{
2119 CDialog::OnGetMinMaxInfo(lpMMI); 2121 CDialog::OnGetMinMaxInfo(lpMMI);
2120 if(m_MinSize.cx>0 && m_MinSize.cy>0){ 2122 if(m_MinSize.cx>0 && m_MinSize.cy>0){
2121 lpMMI->ptMinTrackSize.x = m_MinSize.cx; 2123 lpMMI->ptMinTrackSize.x = m_MinSize.cx;
2122 lpMMI->ptMinTrackSize.y = m_MinSize.cy; 2124 lpMMI->ptMinTrackSize.y = m_MinSize.cy;
2123 } 2125 }
2124} 2126}
2125 2127
2126void CPumpKINDlg::OnSize(UINT nType, int cx, int cy) 2128void CPumpKINDlg::OnSize(UINT nType, int cx, int cy)
2127{ 2129{
diff --git a/PumpKINDlg.h b/PumpKINDlg.h
index 23c2657..9077292 100644..100755
--- a/PumpKINDlg.h
+++ b/PumpKINDlg.h
@@ -386,96 +386,97 @@ public:
386 CBellsNWhistles m_bnw; 386 CBellsNWhistles m_bnw;
387 CTrayer *m_Trayer; 387 CTrayer *m_Trayer;
388 CTimeSpan m_RetryTimeOut; 388 CTimeSpan m_RetryTimeOut;
389 virtual ~CPumpKINDlg(); 389 virtual ~CPumpKINDlg();
390 CRetrier* m_Retrier; 390 CRetrier* m_Retrier;
391 virtual BOOL PreTranslateMessage(MSG* pMsg); 391 virtual BOOL PreTranslateMessage(MSG* pMsg);
392 BOOL m_bShown; 392 BOOL m_bShown;
393 BOOL m_bExiting; 393 BOOL m_bExiting;
394 void SaveSettings(); 394 void SaveSettings();
395 void LoadSettings(); 395 void LoadSettings();
396 void SetupButtons(); 396 void SetupButtons();
397 BITMAP m_bitmapBack; 397 BITMAP m_bitmapBack;
398 CBitmap m_bmpBack; 398 CBitmap m_bmpBack;
399 UINT m_PromptTimeOut; 399 UINT m_PromptTimeOut;
400 UINT m_SpeakPort; 400 UINT m_SpeakPort;
401 void LogLine(UINT msgID); 401 void LogLine(UINT msgID);
402 CTimeMap m_LogTimes; 402 CTimeMap m_LogTimes;
403 void LogLineToFile(LPCTSTR str); 403 void LogLineToFile(LPCTSTR str);
404 void LogLineToScreen(LPCTSTR str); 404 void LogLineToScreen(LPCTSTR str);
405 int m_LogLength; 405 int m_LogLength;
406 enum{ 406 enum{
407 subitemFile=0, subitemType, subitemPeer, subitemBytes, subitemTSize 407 subitemFile=0, subitemType, subitemPeer, subitemBytes, subitemTSize
408 }; 408 };
409 int m_iWRQ; 409 int m_iWRQ;
410 int m_iRRQ; 410 int m_iRRQ;
411 CImageList m_Images; 411 CImageList m_Images;
412 CTIDMap m_Xfers; 412 CTIDMap m_Xfers;
413 CTimeSpan m_TFTPTimeOut; 413 CTimeSpan m_TFTPTimeOut;
414 enum{ 414 enum{
415 rrqGiveAll=acl_rule::rrqGrant, 415 rrqGiveAll=acl_rule::rrqGrant,
416 rrqAlwaysConfirm=acl_rule::rrqPrompt, 416 rrqAlwaysConfirm=acl_rule::rrqPrompt,
417 rrqDenyAll=acl_rule::rrqDeny, 417 rrqDenyAll=acl_rule::rrqDeny,
418 rrqFallback=acl_rule::rrqNone, 418 rrqFallback=acl_rule::rrqNone,
419 rrqGrant=rrqGiveAll, rrqDeny=rrqDenyAll, rrqPrompt=rrqAlwaysConfirm 419 rrqGrant=rrqGiveAll, rrqDeny=rrqDenyAll, rrqPrompt=rrqAlwaysConfirm
420 }; 420 };
421 enum{ 421 enum{
422 wrqTakeAll=acl_rule::wrqGrant, 422 wrqTakeAll=acl_rule::wrqGrant,
423 wrqConfirmIfExists=acl_rule::wrqPromptIfExists, 423 wrqConfirmIfExists=acl_rule::wrqPromptIfExists,
424 wrqAlwaysConfirm=acl_rule::wrqPrompt, 424 wrqAlwaysConfirm=acl_rule::wrqPrompt,
425 wrqDenyAll=acl_rule::wrqDeny, 425 wrqDenyAll=acl_rule::wrqDeny,
426 wrqFallback=acl_rule::wrqNone, 426 wrqFallback=acl_rule::wrqNone,
427 wrqGrant=wrqTakeAll,wrqDeny=wrqDenyAll, wrqPrompt=wrqAlwaysConfirm 427 wrqGrant=wrqTakeAll,wrqDeny=wrqDenyAll, wrqPrompt=wrqAlwaysConfirm
428 }; 428 };
429 UINT m_RRQMode; 429 UINT m_RRQMode;
430 UINT m_WRQMode; 430 UINT m_WRQMode;
431 BOOL m_bTFTPSubdirs; 431 BOOL m_bTFTPSubdirs;
432 CString m_TFTPRoot; 432 CString m_TFTPRoot;
433 UINT m_ListenPort; 433 UINT m_ListenPort;
434 CString m_ListenAddress;
434 UINT m_BlockSize; 435 UINT m_BlockSize;
435 CListenSocket m_Listener; 436 CListenSocket m_Listener;
436 CPumpKINDlg(CWnd* pParent = NULL);// standard constructor 437 CPumpKINDlg(CWnd* pParent = NULL);// standard constructor
437 438
438// Dialog Data 439// Dialog Data
439 //{{AFX_DATA(CPumpKINDlg) 440 //{{AFX_DATA(CPumpKINDlg)
440 enum { IDD = IDD_PUMPKIN_DIALOG }; 441 enum { IDD = IDD_PUMPKIN_DIALOG };
441 CButtonm_HelpCtl; 442 CButtonm_HelpCtl;
442 CButtonm_PutCtl; 443 CButtonm_PutCtl;
443 CButtonm_GetCtl; 444 CButtonm_GetCtl;
444 CButtonm_ExitCtl; 445 CButtonm_ExitCtl;
445 CButtonm_ListenCtl; 446 CButtonm_ListenCtl;
446 CButtonm_AbortCtl; 447 CButtonm_AbortCtl;
447 CButtonm_OptionsCtl; 448 CButtonm_OptionsCtl;
448 CListBoxm_Log; 449 CListBoxm_Log;
449 CListCtrlm_List; 450 CListCtrlm_List;
450 //}}AFX_DATA 451 //}}AFX_DATA
451 452
452 // ClassWizard generated virtual function overrides 453 // ClassWizard generated virtual function overrides
453 //{{AFX_VIRTUAL(CPumpKINDlg) 454 //{{AFX_VIRTUAL(CPumpKINDlg)
454 protected: 455 protected:
455 virtual void DoDataExchange(CDataExchange* pDX);// DDX/DDV support 456 virtual void DoDataExchange(CDataExchange* pDX);// DDX/DDV support
456 //}}AFX_VIRTUAL 457 //}}AFX_VIRTUAL
457 458
458// Implementation 459// Implementation
459protected: 460protected:
460 CToolTipCtrl m_tooltip; 461 CToolTipCtrl m_tooltip;
461 HICON m_hIcon; 462 HICON m_hIcon;
462 463
463 // Generated message map functions 464 // Generated message map functions
464 //{{AFX_MSG(CPumpKINDlg) 465 //{{AFX_MSG(CPumpKINDlg)
465 virtual BOOL OnInitDialog(); 466 virtual BOOL OnInitDialog();
466 afx_msg void OnSysCommand(UINT nID, LPARAM lParam); 467 afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
467 afx_msg void OnDestroy(); 468 afx_msg void OnDestroy();
468 afx_msg void OnPaint(); 469 afx_msg void OnPaint();
469 afx_msg HCURSOR OnQueryDragIcon(); 470 afx_msg HCURSOR OnQueryDragIcon();
470 afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); 471 afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
471 afx_msg void OnOptions(); 472 afx_msg void OnOptions();
472 afx_msg void OnTimer(UINT nIDEvent); 473 afx_msg void OnTimer(UINT nIDEvent);
473 afx_msg void OnExit(); 474 afx_msg void OnExit();
474 afx_msg void OnPut(); 475 afx_msg void OnPut();
475 afx_msg void OnGet(); 476 afx_msg void OnGet();
476 afx_msg void OnDeleteallitemsConnections(NMHDR* pNMHDR, LRESULT* pResult); 477 afx_msg void OnDeleteallitemsConnections(NMHDR* pNMHDR, LRESULT* pResult);
477 afx_msg void OnDeleteitemConnections(NMHDR* pNMHDR, LRESULT* pResult); 478 afx_msg void OnDeleteitemConnections(NMHDR* pNMHDR, LRESULT* pResult);
478 afx_msg void OnInsertitemConnections(NMHDR* pNMHDR, LRESULT* pResult); 479 afx_msg void OnInsertitemConnections(NMHDR* pNMHDR, LRESULT* pResult);
479 afx_msg void OnItemchangedConnections(NMHDR* pNMHDR, LRESULT* pResult); 480 afx_msg void OnItemchangedConnections(NMHDR* pNMHDR, LRESULT* pResult);
480 afx_msg void OnAbort(); 481 afx_msg void OnAbort();
481 afx_msg void OnClose(); 482 afx_msg void OnClose();
diff --git a/help/pumpkin.rtf b/help/pumpkin.rtf
index 8358490..39fc02a 100644
--- a/help/pumpkin.rtf
+++ b/help/pumpkin.rtf
@@ -1,145 +1,148 @@
1{\rtf1\ansi 1{\rtf1\ansi
2@{\footnote 2@{\footnote
3THIS FILE WAS AUTOMATICALLY GENERATED FROM XML DOCUMENT. 3THIS FILE WAS AUTOMATICALLY GENERATED FROM XML DOCUMENT.
4DO NOT MODIFY THIS FILE DIRECTLY. EDIT XML DOCUMENT INSTEAD 4DO NOT MODIFY THIS FILE DIRECTLY. EDIT XML DOCUMENT INSTEAD
5} 5}
6{\fonttbl{\f0\froman Times New Roman;}{\f1\fswiss Arial;}{\f3\froman Symbol;}}{\colortbl; 6{\fonttbl{\f0\froman Times New Roman;}{\f1\fswiss Arial;}{\f3\froman Symbol;}}{\colortbl;
7 \red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0; 7 \red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;
8 \red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255; 8 \red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;
9 \red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128; 9 \red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;
10 \red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;} 10 \red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}
11 11
12\pard\plain\keepn 12\pard\plain\keepn
13#{\footnote About} 13#{\footnote About}
14${\footnote About PumpKIN} 14${\footnote About PumpKIN}
15K{\footnote about} 15K{\footnote about}
16{ \f1\fs18\b\sb120 About {\b PumpKIN}} 16{ \f1\fs18\b\sb120 About {\b PumpKIN}}
17\par\sa120\sb120\qj\pard \f1\fs18\sb120 {\b PumpKIN} is a program designed to send and receive files over the net while having {\uldb {\b T42}}{\v %!ExecFile("http://kin.klever.net/T42/")} or {\b\cf6 Wintalk} session running using {\i TFTP} ({\uldb {\b RFC1350}}{\v %!ExecFile("http://www.rfc-editor.org/rfc/rfc1350.txt")}) protocol. It includes full-functional {\i TFTP} server/client so it may be useful for maintaining {\uldb CISCO}{\v %!ExecFile("http://www.cisco.com/")} routers and other network equipment. 17\par\sa120\sb120\qj \f1\fs18\sb120 {\b PumpKIN} is a program designed to send and receive files over the net while having {\uldb {\b T42}}{\v %!ExecFile("http://kin.klever.net/T42/")} or {\b\cf6 Wintalk} session running using {\i TFTP} ({\uldb {\b RFC1350}}{\v %!ExecFile("http://www.rfc-editor.org/rfc/rfc1350.txt")}) protocol. It includes full-functional {\i TFTP} server/client so it may be useful for maintaining {\uldb CISCO}{\v %!ExecFile("http://www.cisco.com/")} routers and other network equipment.
18\par\sa120\sb120\qj\pard \f1\fs18\sb120 18\par\sa120\sb120\qj \f1\fs18\sb120
19\par\sa120\sb120\qj\pard \f1\fs18\sb120 {\b {\i Enjoy!}} 19\par\sa120\sb120\qj \f1\fs18\sb120 {\b {\i Enjoy!}}
20{ 20{
21\par\pard\plain\sb360\sa120 \f1\fs16 Copyright (c) 1997-2006 {\uldb\cf0 Klever Group (http://www.klever.net/)}{\v %!ExecFile("http://www.klever.net/")} 21\par\pard\plain\sb360\sa120 \f1\fs16 Copyright (c) 1997-2011 {\uldb\cf0 Klever Group (http://www.klever.net/)}{\v %!ExecFile("http://www.klever.net/")}
22\par\qj\sb120\sa120Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 22\par\qj\sb120\sa120Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
23\par The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 23\par The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
24\par \sa360 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 24\par \sa360 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25} 25}
26\page 26\page
27 27
28\pard\plain 28\pard\plain
29#{\footnote News} 29#{\footnote News}
30${\footnote What's New} 30${\footnote What's New}
31\par\pard\plain\f1\fs24\qc\cf2\b 2.7.2.1 - Apr 27th, 2011
32\par\pard\plain\fi0\li0\f1\fs18 \bullet Fixed a minor bug that lead to misdiagnosis of the packet from unexpected source
31\par\pard\plain\f1\fs24\qc\cf2\b 2.7.2 - October 18th, 2006 33\par\pard\plain\f1\fs24\qc\cf2\b 2.7.2 - October 18th, 2006
32\par\pard\plain\fi0\li0\f1\fs18 \bullet Added rejecting of too large file requests with explicit error message about the block size 34\par\pard\plain\fi0\li0\f1\fs18 \bullet Added rejecting of too large file requests with explicit error message about the block size
33\par\pard\plain\fi0\li0\f1\fs18 \bullet A bit more elaborate logging 35\par\pard\plain\fi0\li0\f1\fs18 \bullet A bit more elaborate logging
34\par\pard\plain\fi0\li0\f1\fs18 \bullet Not closing receive socket until the last ACK receved now 36\par\pard\plain\fi0\li0\f1\fs18 \bullet Not closing receive socket until the last ACK receved now
35\par\pard\plain\f1\fs24\qc\cf2\b 2.7.1 - March 13th, 2006 37\par\pard\plain\f1\fs24\qc\cf2\b 2.7.1 - March 13th, 2006
36\par\pard\plain\fi0\li0\f1\fs18 \bullet Bugfix release 38\par\pard\plain\fi0\li0\f1\fs18 \bullet Bugfix release
37\par\pard\plain\f1\fs24\qc\cf2\b 2.7 - February 28th, 2006 39\par\pard\plain\f1\fs24\qc\cf2\b 2.7 - February 28th, 2006
38\par\pard\plain\fi0\li0\f1\fs18 \bullet Access lists based on request IP address and TFTP opcode for automating access policy 40\par\pard\plain\fi0\li0\f1\fs18 \bullet Access lists based on request IP address and TFTP opcode for automating access policy
39\par\pard\plain\fi0\li0\f1\fs18 \bullet Possibility to start/stop TFTP server, while keeping client functionality intact 41\par\pard\plain\fi0\li0\f1\fs18 \bullet Possibility to start/stop TFTP server, while keeping client functionality intact
40\par\pard\plain\fi0\li0\f1\fs18 \bullet Logging to file 42\par\pard\plain\fi0\li0\f1\fs18 \bullet Logging to file
41\par\pard\plain\fi0\li0\f1\fs18 \bullet Resizable main window 43\par\pard\plain\fi0\li0\f1\fs18 \bullet Resizable main window
42\par\pard\plain\f1\fs24\qc\cf2\b 2.6 - August 6th, 2005 44\par\pard\plain\f1\fs24\qc\cf2\b 2.6 - August 6th, 2005
43\par\pard\plain\fi0\li0\f1\fs18 \bullet more robust solution to the backslash/slash dilemma 45\par\pard\plain\fi0\li0\f1\fs18 \bullet more robust solution to the backslash/slash dilemma
44\par\pard\plain\fi0\li0\f1\fs18 \bullet A bit more elaborate error reporting 46\par\pard\plain\fi0\li0\f1\fs18 \bullet A bit more elaborate error reporting
45\par\pard\plain\fi0\li0\f1\fs18 \bullet Fixed uninstall procedure so that it works on XP 47\par\pard\plain\fi0\li0\f1\fs18 \bullet Fixed uninstall procedure so that it works on XP
46\par\pard\plain\f1\fs24\qc\cf2\b 2.5 - July 11th, 2004 48\par\pard\plain\f1\fs24\qc\cf2\b 2.5 - July 11th, 2004
47\par\pard\plain\fi0\li0\f1\fs18 \bullet Change of {\uldb license}{\v About} and opening the source. 49\par\pard\plain\fi0\li0\f1\fs18 \bullet Change of {\uldb license}{\v About} and opening the source.
48\par\pard\plain\fi0\li0\f1\fs18 \bullet Minor cosmetic changes 50\par\pard\plain\fi0\li0\f1\fs18 \bullet Minor cosmetic changes
49\par\pard\plain\f1\fs24\qc\cf2\b 2.0 - June 13th, 1998 51\par\pard\plain\f1\fs24\qc\cf2\b 2.0 - June 13th, 1998
50\par\pard\plain\fi0\li0\f1\fs18 \bullet Sounds customization. Now you can customize {\b PumpKIN} bells and whistles or turn them off completely. 52\par\pard\plain\fi0\li0\f1\fs18 \bullet Sounds customization. Now you can customize {\b PumpKIN} bells and whistles or turn them off completely.
51\par\pard\plain\fi0\li0\f1\fs18 \bullet Previous version of {\b PumpKIN} had a bug causing it to misbehave when you're requesting file from remote {\i tftp} server using {\b IP Address} (as opposed to {\b hostname}). 53\par\pard\plain\fi0\li0\f1\fs18 \bullet Previous version of {\b PumpKIN} had a bug causing it to misbehave when you're requesting file from remote {\i tftp} server using {\b IP Address} (as opposed to {\b hostname}).
52\par\pard\plain\fi0\li0\f1\fs18 \bullet Typo causing {\b PumpKIN} to log outgoing request in reverse (i.e. {\i Requesting 'hostname' from 'filename'}) fixed. 54\par\pard\plain\fi0\li0\f1\fs18 \bullet Typo causing {\b PumpKIN} to log outgoing request in reverse (i.e. {\i Requesting 'hostname' from 'filename'}) fixed.
53\par\pard\plain\fi0\li0\f1\fs18 \bullet Something else that you may not notice and I can not remember. 55\par\pard\plain\fi0\li0\f1\fs18 \bullet Something else that you may not notice and I can not remember.
54\par\pard\plain\f1\fs24\qc\cf2\b 1.5 - February 12th, 1998 56\par\pard\plain\f1\fs24\qc\cf2\b 1.5 - February 12th, 1998
55\par\pard\plain\fi0\li0\f1\fs18 \bullet Transfer resumes. No checking on file contents is done, so it's up to you to decide whether you want to start transmission from the beginning or resume unfinished transfer. 57\par\pard\plain\fi0\li0\f1\fs18 \bullet Transfer resumes. No checking on file contents is done, so it's up to you to decide whether you want to start transmission from the beginning or resume unfinished transfer.
56\par\pard\plain\fi0\li0\f1\fs18 \bullet Support for {\b block size}, {\b trasnfer size} and {\b transfer timeout} options as described in {\uldb {\b RFC1782}}{\v %!ExecFile("http://www.rfc-editor.org/rfc/rfc1782.txt")}, {\uldb {\b RFC1783}}{\v %!ExecFile("http://www.rfc-editor.org/rfc/rfc1783.txt")} and {\uldb {\b RFC1784}}{\v %!ExecFile("http://www.rfc-editor.org/rfc/rfc1784.txt")}. I'm not sure if there are any other {\i TFTP} implementations supporting this, but at least it makes sense if you use {\b PumpKIN} on both ends. 58\par\pard\plain\fi0\li0\f1\fs18 \bullet Support for {\b block size}, {\b trasnfer size} and {\b transfer timeout} options as described in {\uldb {\b RFC1782}}{\v %!ExecFile("http://www.rfc-editor.org/rfc/rfc1782.txt")}, {\uldb {\b RFC1783}}{\v %!ExecFile("http://www.rfc-editor.org/rfc/rfc1783.txt")} and {\uldb {\b RFC1784}}{\v %!ExecFile("http://www.rfc-editor.org/rfc/rfc1784.txt")}. I'm not sure if there are any other {\i TFTP} implementations supporting this, but at least it makes sense if you use {\b PumpKIN} on both ends.
57\par\pard\plain\fi0\li0\f1\fs18 \bullet New Install program 59\par\pard\plain\fi0\li0\f1\fs18 \bullet New Install program
58\page 60\page
59 61
60\pard\plain\keepn 62\pard\plain\keepn
61#{\footnote Using} 63#{\footnote Using}
62${\footnote Using PumpKIN} 64${\footnote Using PumpKIN}
63{ \f1\fs18\b\sb120 Using {\b PumpKIN}} 65{ \f1\fs18\b\sb120 Using {\b PumpKIN}}
64\par\sa120\sb120\qj\pard \f1\fs18\sb120 This is a simple program for file exchange between two parties. It allows you to send files over the network to your party while having a {\uldb {\b T42}}{\v %!ExecFile("http://kin.klever.net/T42/")} or {\b\cf6 Wintalk} conversation. It uses open sessions to determine IP address of your party. Also you may use it as a {\i TFTP} client/server by itself. To get/put files from/to {\i TFTP} server you need to enter host name/IP address manually in the {\uldb Request Dialog}{\v Request}. 66\par\sa120\sb120\qj \f1\fs18\sb120 This is a simple program for file exchange between two parties. It allows you to send files over the network to your party while having a {\uldb {\b T42}}{\v %!ExecFile("http://kin.klever.net/T42/")} or {\b\cf6 Wintalk} conversation. It uses open sessions to determine IP address of your party. Also you may use it as a {\i TFTP} client/server by itself. To get/put files from/to {\i TFTP} server you need to enter host name/IP address manually in the {\uldb Request Dialog}{\v Request}.
65\par\sa120\sb120\qj\pard \f1\fs18\sb120 To Abort transfer(s) currently in progress - select transfer(s) you want to terminate in the list and click {\b Abort xfer} button. 67\par\sa120\sb120\qj \f1\fs18\sb120 To Abort transfer(s) currently in progress - select transfer(s) you want to terminate in the list and click {\b Abort xfer} button.
66\par\sa120\sb120\qj\pard \f1\fs18\sb120 You may want to hide {\b PumpKIN} window and leave it as a tray icon only. Just click the \{bmct pumpkin.bmp\} icon in the tray or simply close the window. 68\par\sa120\sb120\qj \f1\fs18\sb120 You may want to hide {\b PumpKIN} window and leave it as a tray icon only. Just click the \{bmct pumpkin.bmp\} icon in the tray or simply close the window.
67\par\sa120\sb120\qj\pard \f1\fs18\sb120 Use {\uldb Options}{\v Options} button to set {\b PumpKIN} options. 69\par\sa120\sb120\qj \f1\fs18\sb120 Use {\uldb Options}{\v Options} button to set {\b PumpKIN} options.
68\par\sa120\sb120\qj\pard \f1\fs18\sb120 You can start and stop {\b PumpKIN}'s {\i TFTP} server by checking and unchecking the {\b Server is running} checkbox in the lower right corner of main {\b PumpKIN} window. 70\par\sa120\sb120\qj \f1\fs18\sb120 You can start and stop {\b PumpKIN}'s {\i TFTP} server by checking and unchecking the {\b Server is running} checkbox in the lower right corner of main {\b PumpKIN} window.
69\page 71\page
70 72
71\pard\plain\keepn 73\pard\plain\keepn
72#{\footnote ConfirmRRQ} 74#{\footnote ConfirmRRQ}
73${\footnote Confirm Read Request Dialog} 75${\footnote Confirm Read Request Dialog}
74{ \f1\fs18\b\sb120 Confirm Read Request Dialog} 76{ \f1\fs18\b\sb120 Confirm Read Request Dialog}
75\par\sa120\sb120\qj\pard \f1\fs18\sb120 When the file is requested from your {\i TFTP} server you may choose to {\b Grant Access} to this file or to {\b Deny Access}. If you hesitate to answer for {\uldb {\b Confirmation timeout}}{\v ConfirmationTimeout} ({\i default - 30 seconds}) {\b PumpKIN} defaults to denial of all requests. 77\par\sa120\sb120\qj \f1\fs18\sb120 When the file is requested from your {\i TFTP} server you may choose to {\b Grant Access} to this file or to {\b Deny Access}. If you hesitate to answer for {\uldb {\b Confirmation timeout}}{\v ConfirmationTimeout} ({\i default - 30 seconds}) {\b PumpKIN} defaults to denial of all requests.
76\page 78\page
77 79
78\pard\plain\keepn 80\pard\plain\keepn
79#{\footnote ConfirmWRQ} 81#{\footnote ConfirmWRQ}
80${\footnote Confirm Write Request Dialog} 82${\footnote Confirm Write Request Dialog}
81{ \f1\fs18\b\sb120 Confirm Write Request Dialog} 83{ \f1\fs18\b\sb120 Confirm Write Request Dialog}
82\par\sa120\sb120\qj\pard \f1\fs18\sb120 Whenever your party sends you a file you have always a choice to accept it or not. You can also save the file under a different name by choosing the {\b Rename} option. If you already have file with such name you may chose to {\b resume} transfer. No checking on file contents is done. This option may or may not work depending on remote implementation of protocol. It does work if you use {\b PumpKIN} on both ends. If you are still unsure for {\uldb {\b Confirmation timeout}}{\v ConfirmationTimeOut} ({\i default - 30 seconds}) {\b PumpKIN} will make safe decision for you (deny). 84\par\sa120\sb120\qj \f1\fs18\sb120 Whenever your party sends you a file you have always a choice to accept it or not. You can also save the file under a different name by choosing the {\b Rename} option. If you already have file with such name you may chose to {\b resume} transfer. No checking on file contents is done. This option may or may not work depending on remote implementation of protocol. It does work if you use {\b PumpKIN} on both ends. If you are still unsure for {\uldb {\b Confirmation timeout}}{\v ConfirmationTimeOut} ({\i default - 30 seconds}) {\b PumpKIN} will make safe decision for you (deny).
83\page 85\page
84 86
85\pard\plain\keepn 87\pard\plain\keepn
86#{\footnote Request} 88#{\footnote Request}
87${\footnote Request Dialog} 89${\footnote Request Dialog}
88{ \f1\fs18\b\sb120 Request Dialog} 90{ \f1\fs18\b\sb120 Request Dialog}
89\par\sa120\sb120\qj\pard \f1\fs18\sb120 Request dialog is aimed to let you form read or write request. You may set the following options:\pard 91\par\sa120\sb120\qj \f1\fs18\sb120 Request dialog is aimed to let you form read or write request. You may set the following options:\pard
90\par \fi0\li0 \bullet {\b Local File} - You can change the name of the file you're sending (or destination in case you're receiving) right here. You may also use {\b Browse} button to select the file. 92\par \fi0\li0 \bullet {\b Local File} - You can change the name of the file you're sending (or destination in case you're receiving) right here. You may also use {\b Browse} button to select the file.
91\par \fi0\li0 \bullet {\b Remote File} Specifies the name of file on the remote host you're requesting (in case of read request) or the name of file you want your file to appear as (in case of write request). 93\par \fi0\li0 \bullet {\b Remote File} Specifies the name of file on the remote host you're requesting (in case of read request) or the name of file you want your file to appear as (in case of write request).
92\par \fi0\li0 \bullet {\b Remote Host} is your party's host or {\i TFTP} server you're requesting file from/sending file to. To refresh the list of your talk windows use {\b REFRESH} button. 94\par \fi0\li0 \bullet {\b Remote Host} is your party's host or {\i TFTP} server you're requesting file from/sending file to. To refresh the list of your talk windows use {\b REFRESH} button.
93\par \fi0\li0 \bullet {\b Type} is the type of transfer as defined in {\uldb {\b RFC1350}}{\v %!ExecFile("http://www.rfc-editor.org/rfc/rfc1350.txt")}. Doesn't mean much, really. Defined types are '{\i octet}' or '{\i netascii}'. Default is '{\i octet}'. 95\par \fi0\li0 \bullet {\b Type} is the type of transfer as defined in {\uldb {\b RFC1350}}{\v %!ExecFile("http://www.rfc-editor.org/rfc/rfc1350.txt")}. Doesn't mean much, really. Defined types are '{\i octet}' or '{\i netascii}'. Default is '{\i octet}'.
94\par \fi0\li0 \bullet {\b Block Size} - Use this block size if remote is {\uldb {\b RFC1783}}{\v %!ExecFile("http://www.rfc-editor.org/rfc/rfc1783.txt")}-compliant. If remote doesn't support this option {\b PumpKIN} will fallback to 512 bytes per block.\pard 96\par \fi0\li0 \bullet {\b Block Size} - Use this block size if remote is {\uldb {\b RFC1783}}{\v %!ExecFile("http://www.rfc-editor.org/rfc/rfc1783.txt")}-compliant. If remote doesn't support this option {\b PumpKIN} will fallback to 512 bytes per block.\pard
95\page 97\page
96 98
97\pard\plain\keepn 99\pard\plain\keepn
98#{\footnote Options} 100#{\footnote Options}
99${\footnote Options} 101${\footnote Options}
100{ \f1\fs18\b\sb120 Options} 102{ \f1\fs18\b\sb120 Options}
101\par\sa120\sb120\qj\pard \f1\fs18\sb120 {\b PumpKIN} options property sheet consists of two tabs. For more information see {\uldb {\b Network}}{\v NetworkOptions} and {\b Server} options. 103\par\sa120\sb120\qj \f1\fs18\sb120 {\b PumpKIN} options property sheet consists of two tabs. For more information see {\uldb {\b Network}}{\v NetworkOptions} and {\b Server} options.
102\page 104\page
103 105
104\pard\plain\keepn 106\pard\plain\keepn
105#{\footnote NetworkOptions} 107#{\footnote NetworkOptions}
106${\footnote Network Options} 108${\footnote Network Options}
107{ \f1\fs18\b\sb120 Network Options}\pard 109{ \f1\fs18\b\sb120 Network Options}\pard
108\par \fi0\li0 \bullet {\b UDP Ports}\pard 110\par \fi0\li0 \bullet {\b UDP Ports}\pard
109\par \fi0\li0 \bullet {\b Listen for incoming connections on port} - specifies the port we're listening to. The default as defined in {\uldb {\b RFC1350}}{\v %!ExecFile("http://www.rfc-editor.org/rfc/rfc1350.txt")} is 69. 111\par \fi0\li0 \bullet {\b Listen for incoming connections on port} - specifies the port we're listening to. The default as defined in {\uldb {\b RFC1350}}{\v %!ExecFile("http://www.rfc-editor.org/rfc/rfc1350.txt")} is 69.
112\par \fi0\li0 \bullet {\b ip address} - ip address to listen to.
110\par \fi0\li0 \bullet {\b Send outgoing requests to port} - specifies the port we're going to send all requests to.\pard 113\par \fi0\li0 \bullet {\b Send outgoing requests to port} - specifies the port we're going to send all requests to.\pard
111\par \fi0\li0 \bullet {\b Default Connection timeout} - if there's no activity for specified time, transfer is considered to be dead and terminated. {\b PumpKIN} tries to propagate this value to remote as described in {\uldb {\b RFC1782}}{\v %!ExecFile("http://www.rfc-editor.org/rfc/rfc1782.txt")} and {\uldb {\b RFC1784}}{\v %!ExecFile("http://www.rfc-editor.org/rfc/rfc1784.txt")} if possible. 114\par \fi0\li0 \bullet {\b Default Connection timeout} - if there's no activity for specified time, transfer is considered to be dead and terminated. {\b PumpKIN} tries to propagate this value to remote as described in {\uldb {\b RFC1782}}{\v %!ExecFile("http://www.rfc-editor.org/rfc/rfc1782.txt")} and {\uldb {\b RFC1784}}{\v %!ExecFile("http://www.rfc-editor.org/rfc/rfc1784.txt")} if possible.
112\par \fi0\li0 \bullet {\b Default Block Size} - {\b PumpKIN} tries to negotiate block size with remote using this value unless specified explicitly in request. If remote doesn't support {\uldb {\b RFC1782}}{\v %!ExecFile("http://www.rfc-editor.org/rfc/rfc1782.txt")} and {\uldb {\b RFC1783}}{\v %!ExecFile("http://www.rfc-editor.org/rfc/rfc1783.txt")}{\b PumpKIN} falls back to 512 bytes per block.\pard 115\par \fi0\li0 \bullet {\b Default Block Size} - {\b PumpKIN} tries to negotiate block size with remote using this value unless specified explicitly in request. If remote doesn't support {\uldb {\b RFC1782}}{\v %!ExecFile("http://www.rfc-editor.org/rfc/rfc1782.txt")} and {\uldb {\b RFC1783}}{\v %!ExecFile("http://www.rfc-editor.org/rfc/rfc1783.txt")}{\b PumpKIN} falls back to 512 bytes per block.\pard
113\page 116\page
114 117
115\pard\plain\keepn 118\pard\plain\keepn
116#{\footnote ServerOptions} 119#{\footnote ServerOptions}
117${\footnote Server Options} 120${\footnote Server Options}
118{ \f1\fs18\b\sb120 Server Options}\pard 121{ \f1\fs18\b\sb120 Server Options}\pard
119\par \fi0\li0 \bullet {\b TFTP Filesystem root} - Specifies the location of files you're transmitting or where to start looking for them from. Defaults to the directory you start {\b PumpKIN} for the first time from. 122\par \fi0\li0 \bullet {\b TFTP Filesystem root} - Specifies the location of files you're transmitting or where to start looking for them from. Defaults to the directory you start {\b PumpKIN} for the first time from.
120\par \fi0\li0 \bullet {\b Allow access to subdirectories} - specifies whether you want allow access to the whole subtree of {\b TFTP Root} or only to the directory itself. 123\par \fi0\li0 \bullet {\b Allow access to subdirectories} - specifies whether you want allow access to the whole subtree of {\b TFTP Root} or only to the directory itself.
121\par \fi0\li0 \bullet {\b Read Request Behavior} - You may choose to automatically agree to give all files requested, to be prompted to confirm these operations, or to deny all requests as if you're not even here. 124\par \fi0\li0 \bullet {\b Read Request Behavior} - You may choose to automatically agree to give all files requested, to be prompted to confirm these operations, or to deny all requests as if you're not even here.
122\par \fi0\li0 \bullet {\b Write Request Behavior} - You may chose to {\b take all files} ({\i not recommended}), to {\b prompt only if file exists already}, {\b Always prompt} or {\b Deny all requests}. 125\par \fi0\li0 \bullet {\b Write Request Behavior} - You may chose to {\b take all files} ({\i not recommended}), to {\b prompt only if file exists already}, {\b Always prompt} or {\b Deny all requests}.
123\par \fi0\li0 \bullet {#{\footnote ConfirmationTimeOut}}{\b Confirmation timeout} - this is the time {\b PumpKIN} will wait for you to accept or deny request before it will give up and take default action which is always deny. 126\par \fi0\li0 \bullet {#{\footnote ConfirmationTimeOut}}{\b Confirmation timeout} - this is the time {\b PumpKIN} will wait for you to accept or deny request before it will give up and take default action which is always deny.
124\par \fi0\li0 \bullet {\b Log file} - If you want to enable logging to file, set the destination file here.\pard 127\par \fi0\li0 \bullet {\b Log file} - If you want to enable logging to file, set the destination file here.\pard
125\page 128\page
126 129
127\pard\plain\keepn 130\pard\plain\keepn
128#{\footnote SoundsOptions} 131#{\footnote SoundsOptions}
129${\footnote Sounds Options} 132${\footnote Sounds Options}
130{ \f1\fs18\b\sb120 Sounds} 133{ \f1\fs18\b\sb120 Sounds}
131\par\sa120\sb120\qj\pard \f1\fs18\sb120 You can customize {\b PumpKIN} sounds notifications here. There are three customizable sounds defined - {\b Incoming request}, which notifies you about incoming request prompt if you're set to be prompted whenever incoming request occurs. {\b xfer Aborted} - which happens to sound every time transfer is interrupted for whatever reason - time out, explicit kill, denied access, etc. {\b xfer Finished} means that your file was successfully transmitted. 134\par\sa120\sb120\qj \f1\fs18\sb120 You can customize {\b PumpKIN} sounds notifications here. There are three customizable sounds defined - {\b Incoming request}, which notifies you about incoming request prompt if you're set to be prompted whenever incoming request occurs. {\b xfer Aborted} - which happens to sound every time transfer is interrupted for whatever reason - time out, explicit kill, denied access, etc. {\b xfer Finished} means that your file was successfully transmitted.
132\par\sa120\sb120\qj\pard \f1\fs18\sb120 You can select any {\b .wav} file or one of the predefined sounds from the dropdown list. 135\par\sa120\sb120\qj \f1\fs18\sb120 You can select any {\b .wav} file or one of the predefined sounds from the dropdown list.
133\page 136\page
134 137
135\pard\plain\keepn 138\pard\plain\keepn
136#{\footnote ACL} 139#{\footnote ACL}
137${\footnote Access Lists} 140${\footnote Access Lists}
138{ \f1\fs18\b\sb120 Access Lists} 141{ \f1\fs18\b\sb120 Access Lists}
139\par\sa120\sb120\qj\pard \f1\fs18\sb120 You can slightly automate your access policies by setting up read/write request behavior for different incoming requests. 142\par\sa120\sb120\qj \f1\fs18\sb120 You can slightly automate your access policies by setting up read/write request behavior for different incoming requests.
140\par\sa120\sb120\qj\pard \f1\fs18\sb120 The rule consists of {\b request type}, source network ({\b ip} and {\b netmask}) and {\b action} to take (see also {\uldb Server Options}{\v ServerOptions}). 143\par\sa120\sb120\qj \f1\fs18\sb120 The rule consists of {\b request type}, source network ({\b ip} and {\b netmask}) and {\b action} to take (see also {\uldb Server Options}{\v ServerOptions}).
141\par\sa120\sb120\qj\pard \f1\fs18\sb120 When {\b PumpKIN} receives request it goes through the list of rules and bases its decision on the first matching rule. To rearrange order of rules, select the rule you wish to move and use up and down arrows buttons on the right. To remove rule, use the cross button. 144\par\sa120\sb120\qj \f1\fs18\sb120 When {\b PumpKIN} receives request it goes through the list of rules and bases its decision on the first matching rule. To rearrange order of rules, select the rule you wish to move and use up and down arrows buttons on the right. To remove rule, use the cross button.
142\par\sa120\sb120\qj\pard \f1\fs18\sb120 To add a new rule fill in the information about {\b request type}, source {\b address} and {\b netmask} and desired action. Then click on the 'Add new rule' button. 145\par\sa120\sb120\qj \f1\fs18\sb120 To add a new rule fill in the information about {\b request type}, source {\b address} and {\b netmask} and desired action. Then click on the 'Add new rule' button.
143\par\sa120\sb120\qj\pard \f1\fs18\sb120 If you wish to amend the rule, select it in the rules list, change parameters below and click the 'Replace rule' button. 146\par\sa120\sb120\qj \f1\fs18\sb120 If you wish to amend the rule, select it in the rules list, change parameters below and click the 'Replace rule' button.
144\page 147\page
145} \ No newline at end of file 148} \ No newline at end of file
diff --git a/help/pumpkin.xml b/help/pumpkin.xml
index 2e53edd..153219a 100644
--- a/help/pumpkin.xml
+++ b/help/pumpkin.xml
@@ -36,80 +36,81 @@
36 <ni>Sounds customization. Now you can customize <kin>PumpKIN</kin> bells and whistles or turn them off completely.</ni> 36 <ni>Sounds customization. Now you can customize <kin>PumpKIN</kin> bells and whistles or turn them off completely.</ni>
37 <ni>Previous version of <kin>PumpKIN</kin> had a bug causing it to misbehave when you're requesting file from remote <term>tftp</term> server using <b>IP Address</b> (as opposed to <b>hostname</b>).</ni> 37 <ni>Previous version of <kin>PumpKIN</kin> had a bug causing it to misbehave when you're requesting file from remote <term>tftp</term> server using <b>IP Address</b> (as opposed to <b>hostname</b>).</ni>
38 <ni>Typo causing <kin>PumpKIN</kin> to log outgoing request in reverse (i.e. <i>Requesting 'hostname' from 'filename'</i>) fixed.</ni> 38 <ni>Typo causing <kin>PumpKIN</kin> to log outgoing request in reverse (i.e. <i>Requesting 'hostname' from 'filename'</i>) fixed.</ni>
39 <ni>Something else that you may not notice and I can not remember.</ni> 39 <ni>Something else that you may not notice and I can not remember.</ni>
40 </newsfor> 40 </newsfor>
41 <newsfor version="1.5" date="February 12th, 1998"> 41 <newsfor version="1.5" date="February 12th, 1998">
42 <ni>Transfer resumes. No checking on file contents is done, so it's up to you to decide whether you want to start transmission from the beginning or resume unfinished transfer.</ni> 42 <ni>Transfer resumes. No checking on file contents is done, so it's up to you to decide whether you want to start transmission from the beginning or resume unfinished transfer.</ni>
43 <ni>Support for <b>block size</b>, <b>trasnfer size</b> and <b>transfer timeout</b> options as described in <rfc num="1782"/>, <rfc num="1783"/> and <rfc num="1784"/>. I'm not sure if there are any other <term>TFTP</term> implementations supporting this, but at least it makes sense if you use <kin>PumpKIN</kin> on both ends.</ni> 43 <ni>Support for <b>block size</b>, <b>trasnfer size</b> and <b>transfer timeout</b> options as described in <rfc num="1782"/>, <rfc num="1783"/> and <rfc num="1784"/>. I'm not sure if there are any other <term>TFTP</term> implementations supporting this, but at least it makes sense if you use <kin>PumpKIN</kin> on both ends.</ni>
44 <ni>New Install program</ni> 44 <ni>New Install program</ni>
45 </newsfor> 45 </newsfor>
46 </topic> 46 </topic>
47 <topic id="Using" title="Using PumpKIN"> 47 <topic id="Using" title="Using PumpKIN">
48 <heading scroll="no">Using <kin>PumpKIN</kin></heading> 48 <heading scroll="no">Using <kin>PumpKIN</kin></heading>
49 <p>This is a simple program for file exchange between two parties. It allows you to send files over the network to your party while having a <kin href="http://kin.klever.net/T42/">T42</kin> or <product>Wintalk</product> conversation. It uses open sessions to determine IP address of your party. Also you may use it as a <term>TFTP</term> client/server by itself. To get/put files from/to <term>TFTP</term> server you need to enter host name/IP address manually in the <a href="#Request">Request Dialog</a>.</p> 49 <p>This is a simple program for file exchange between two parties. It allows you to send files over the network to your party while having a <kin href="http://kin.klever.net/T42/">T42</kin> or <product>Wintalk</product> conversation. It uses open sessions to determine IP address of your party. Also you may use it as a <term>TFTP</term> client/server by itself. To get/put files from/to <term>TFTP</term> server you need to enter host name/IP address manually in the <a href="#Request">Request Dialog</a>.</p>
50 <p>To Abort transfer(s) currently in progress - select transfer(s) you want to terminate in the list and click <b>Abort xfer</b> button.</p> 50 <p>To Abort transfer(s) currently in progress - select transfer(s) you want to terminate in the list and click <b>Abort xfer</b> button.</p>
51 <p>You may want to hide <kin>PumpKIN</kin> window and leave it as a tray icon only. Just click the <image source="pumpkin.bmp"/> icon in the tray or simply close the window.</p> 51 <p>You may want to hide <kin>PumpKIN</kin> window and leave it as a tray icon only. Just click the <image source="pumpkin.bmp"/> icon in the tray or simply close the window.</p>
52 <p>Use <a href="#Options">Options</a> button to set <kin>PumpKIN</kin> options.</p> 52 <p>Use <a href="#Options">Options</a> button to set <kin>PumpKIN</kin> options.</p>
53 <p>You can start and stop <kin>PumpKIN</kin>'s <term>TFTP</term> server by checking and unchecking the <b>Server is running</b> checkbox in the lower right corner of main <kin>PumpKIN</kin> window.</p> 53 <p>You can start and stop <kin>PumpKIN</kin>'s <term>TFTP</term> server by checking and unchecking the <b>Server is running</b> checkbox in the lower right corner of main <kin>PumpKIN</kin> window.</p>
54 </topic> 54 </topic>
55 <topic id="ConfirmRRQ" title="Confirm Read Request Dialog"> 55 <topic id="ConfirmRRQ" title="Confirm Read Request Dialog">
56 <heading scroll="no">Confirm Read Request Dialog</heading> 56 <heading scroll="no">Confirm Read Request Dialog</heading>
57 <p>When the file is requested from your <term>TFTP</term> server you may choose to <b>Grant Access</b> to this file or to <b>Deny Access</b>. If you hesitate to answer for <a href="#ConfirmationTimeout"><b>Confirmation timeout</b></a> (<i>default - 30 seconds</i>) <kin>PumpKIN</kin> defaults to denial of all requests.</p> 57 <p>When the file is requested from your <term>TFTP</term> server you may choose to <b>Grant Access</b> to this file or to <b>Deny Access</b>. If you hesitate to answer for <a href="#ConfirmationTimeout"><b>Confirmation timeout</b></a> (<i>default - 30 seconds</i>) <kin>PumpKIN</kin> defaults to denial of all requests.</p>
58 </topic> 58 </topic>
59 <topic id="ConfirmWRQ" title="Confirm Write Request Dialog"> 59 <topic id="ConfirmWRQ" title="Confirm Write Request Dialog">
60 <heading scroll="no">Confirm Write Request Dialog</heading> 60 <heading scroll="no">Confirm Write Request Dialog</heading>
61 <p>Whenever your party sends you a file you have always a choice to accept it or not. You can also save the file under a different name by choosing the <b>Rename</b> option. If you already have file with such name you may chose to <b>resume</b> transfer. No checking on file contents is done. This option may or may not work depending on remote implementation of protocol. It does work if you use <kin>PumpKIN</kin> on both ends. If you are still unsure for <a href="#ConfirmationTimeOut"><b>Confirmation timeout</b></a> (<i>default - 30 seconds</i>) <kin>PumpKIN</kin> will make safe decision for you (deny).</p> 61 <p>Whenever your party sends you a file you have always a choice to accept it or not. You can also save the file under a different name by choosing the <b>Rename</b> option. If you already have file with such name you may chose to <b>resume</b> transfer. No checking on file contents is done. This option may or may not work depending on remote implementation of protocol. It does work if you use <kin>PumpKIN</kin> on both ends. If you are still unsure for <a href="#ConfirmationTimeOut"><b>Confirmation timeout</b></a> (<i>default - 30 seconds</i>) <kin>PumpKIN</kin> will make safe decision for you (deny).</p>
62 </topic> 62 </topic>
63 <topic id="Request" title="Request Dialog"> 63 <topic id="Request" title="Request Dialog">
64 <heading scroll="no">Request Dialog</heading> 64 <heading scroll="no">Request Dialog</heading>
65 <p>Request dialog is aimed to let you form read or write request. You may set the following options:</p> 65 <p>Request dialog is aimed to let you form read or write request. You may set the following options:</p>
66 <ul> 66 <ul>
67 <li><b>Local File</b> - You can change the name of the file you're sending (or destination in case you're receiving) right here. You may also use <b>Browse</b> button to select the file.</li> 67 <li><b>Local File</b> - You can change the name of the file you're sending (or destination in case you're receiving) right here. You may also use <b>Browse</b> button to select the file.</li>
68 <li><b>Remote File</b> Specifies the name of file on the remote host you're requesting (in case of read request) or the name of file you want your file to appear as (in case of write request).</li> 68 <li><b>Remote File</b> Specifies the name of file on the remote host you're requesting (in case of read request) or the name of file you want your file to appear as (in case of write request).</li>
69 <li><b>Remote Host</b> is your party's host or <term>TFTP</term> server you're requesting file from/sending file to. To refresh the list of your talk windows use <b>REFRESH</b> button.</li> 69 <li><b>Remote Host</b> is your party's host or <term>TFTP</term> server you're requesting file from/sending file to. To refresh the list of your talk windows use <b>REFRESH</b> button.</li>
70 <li><b>Type</b> is the type of transfer as defined in <rfc num="1350"/>. Doesn't mean much, really. Defined types are '<i>octet</i>' or '<i>netascii</i>'. Default is '<i>octet</i>'.</li> 70 <li><b>Type</b> is the type of transfer as defined in <rfc num="1350"/>. Doesn't mean much, really. Defined types are '<i>octet</i>' or '<i>netascii</i>'. Default is '<i>octet</i>'.</li>
71 <li><b>Block Size</b> - Use this block size if remote is <rfc num="1783"/>-compliant. If remote doesn't support this option <kin>PumpKIN</kin> will fallback to 512 bytes per block.</li> 71 <li><b>Block Size</b> - Use this block size if remote is <rfc num="1783"/>-compliant. If remote doesn't support this option <kin>PumpKIN</kin> will fallback to 512 bytes per block.</li>
72 </ul> 72 </ul>
73 </topic> 73 </topic>
74 <topic id="Options" title="Options"> 74 <topic id="Options" title="Options">
75 <heading scroll="no">Options</heading> 75 <heading scroll="no">Options</heading>
76 <p><kin>PumpKIN</kin> options property sheet consists of two tabs. For more information see <a href="#NetworkOptions"><b>Network</b></a> and <a herf="#ServerOptions"><b>Server</b></a> options.</p> 76 <p><kin>PumpKIN</kin> options property sheet consists of two tabs. For more information see <a href="#NetworkOptions"><b>Network</b></a> and <a herf="#ServerOptions"><b>Server</b></a> options.</p>
77 </topic> 77 </topic>
78 <topic id="NetworkOptions" title="Network Options"> 78 <topic id="NetworkOptions" title="Network Options">
79 <heading scroll="no">Network Options</heading> 79 <heading scroll="no">Network Options</heading>
80 <ul> 80 <ul>
81 <li><b>UDP Ports</b> 81 <li><b>UDP Ports</b>
82 <ul> 82 <ul>
83 <li><b>Listen for incoming connections on port</b> - specifies the port we're listening to. The default as defined in <rfc num="1350"/> is 69.</li> 83 <li><b>Listen for incoming connections on port</b> - specifies the port we're listening to. The default as defined in <rfc num="1350"/> is 69.</li>
84 <li><b>ip address</b> - ip address to listen to.</li>
84 <li><b>Send outgoing requests to port</b> - specifies the port we're going to send all requests to.</li> 85 <li><b>Send outgoing requests to port</b> - specifies the port we're going to send all requests to.</li>
85 </ul> 86 </ul>
86 </li> 87 </li>
87 <li><b>Default Connection timeout</b> - if there's no activity for specified time, transfer is considered to be dead and terminated. <kin>PumpKIN</kin> tries to propagate this value to remote as described in <rfc num="1782"/> and <rfc num="1784"/> if possible.</li> 88 <li><b>Default Connection timeout</b> - if there's no activity for specified time, transfer is considered to be dead and terminated. <kin>PumpKIN</kin> tries to propagate this value to remote as described in <rfc num="1782"/> and <rfc num="1784"/> if possible.</li>
88 <li><b>Default Block Size</b> - <kin>PumpKIN</kin> tries to negotiate block size with remote using this value unless specified explicitly in request. If remote doesn't support <rfc num="1782"/> and <rfc num="1783"/> <kin>PumpKIN</kin> falls back to 512 bytes per block.</li> 89 <li><b>Default Block Size</b> - <kin>PumpKIN</kin> tries to negotiate block size with remote using this value unless specified explicitly in request. If remote doesn't support <rfc num="1782"/> and <rfc num="1783"/> <kin>PumpKIN</kin> falls back to 512 bytes per block.</li>
89 </ul> 90 </ul>
90 </topic> 91 </topic>
91 <topic id="ServerOptions" title="Server Options"> 92 <topic id="ServerOptions" title="Server Options">
92 <heading scroll="no">Server Options</heading> 93 <heading scroll="no">Server Options</heading>
93 <ul> 94 <ul>
94 <li><b>TFTP Filesystem root</b> - Specifies the location of files you're transmitting or where to start looking for them from. Defaults to the directory you start <kin>PumpKIN</kin> for the first time from.</li> 95 <li><b>TFTP Filesystem root</b> - Specifies the location of files you're transmitting or where to start looking for them from. Defaults to the directory you start <kin>PumpKIN</kin> for the first time from.</li>
95 <li><b>Allow access to subdirectories</b> - specifies whether you want allow access to the whole subtree of <b>TFTP Root</b> or only to the directory itself.</li> 96 <li><b>Allow access to subdirectories</b> - specifies whether you want allow access to the whole subtree of <b>TFTP Root</b> or only to the directory itself.</li>
96 <li><b>Read Request Behavior</b> - You may choose to automatically agree to give all files requested, to be prompted to confirm these operations, or to deny all requests as if you're not even here.</li> 97 <li><b>Read Request Behavior</b> - You may choose to automatically agree to give all files requested, to be prompted to confirm these operations, or to deny all requests as if you're not even here.</li>
97 <li><b>Write Request Behavior</b> - You may chose to <b>take all files</b> (<i>not recommended</i>), to <b>prompt only if file exists already</b>, <b>Always prompt</b> or <b>Deny all requests</b>.</li> 98 <li><b>Write Request Behavior</b> - You may chose to <b>take all files</b> (<i>not recommended</i>), to <b>prompt only if file exists already</b>, <b>Always prompt</b> or <b>Deny all requests</b>.</li>
98 <li><a name="ConfirmationTimeOut"/><b>Confirmation timeout</b> - this is the time <kin>PumpKIN</kin> will wait for you to accept or deny request before it will give up and take default action which is always deny.</li> 99 <li><a name="ConfirmationTimeOut"/><b>Confirmation timeout</b> - this is the time <kin>PumpKIN</kin> will wait for you to accept or deny request before it will give up and take default action which is always deny.</li>
99 <li><b>Log file</b> - If you want to enable logging to file, set the destination file here.</li> 100 <li><b>Log file</b> - If you want to enable logging to file, set the destination file here.</li>
100 </ul> 101 </ul>
101 </topic> 102 </topic>
102 <topic id="SoundsOptions" title="Sounds Options"> 103 <topic id="SoundsOptions" title="Sounds Options">
103 <heading scroll="no">Sounds</heading> 104 <heading scroll="no">Sounds</heading>
104 <p>You can customize <kin>PumpKIN</kin> sounds notifications here. There are three customizable sounds defined - <b>Incoming request</b>, which notifies you about incoming request prompt if you're set to be prompted whenever incoming request occurs. <b>xfer Aborted</b> - which happens to sound every time transfer is interrupted for whatever reason - time out, explicit kill, denied access, etc. <b>xfer Finished</b> means that your file was successfully transmitted.</p> 105 <p>You can customize <kin>PumpKIN</kin> sounds notifications here. There are three customizable sounds defined - <b>Incoming request</b>, which notifies you about incoming request prompt if you're set to be prompted whenever incoming request occurs. <b>xfer Aborted</b> - which happens to sound every time transfer is interrupted for whatever reason - time out, explicit kill, denied access, etc. <b>xfer Finished</b> means that your file was successfully transmitted.</p>
105 <p>You can select any <b>.wav</b> file or one of the predefined sounds from the dropdown list.</p> 106 <p>You can select any <b>.wav</b> file or one of the predefined sounds from the dropdown list.</p>
106 </topic> 107 </topic>
107 <topic id="ACL" title="Access Lists"> 108 <topic id="ACL" title="Access Lists">
108 <heading scroll="no">Access Lists</heading> 109 <heading scroll="no">Access Lists</heading>
109 <p>You can slightly automate your access policies by setting up read/write request behavior for different incoming requests.</p> 110 <p>You can slightly automate your access policies by setting up read/write request behavior for different incoming requests.</p>
110 <p>The rule consists of <b>request type</b>, source network (<b>ip</b> and <b>netmask</b>) and <b>action</b> to take (see also <a href="#ServerOptions">Server Options</a>).</p> 111 <p>The rule consists of <b>request type</b>, source network (<b>ip</b> and <b>netmask</b>) and <b>action</b> to take (see also <a href="#ServerOptions">Server Options</a>).</p>
111 <p>When <kin>PumpKIN</kin> receives request it goes through the list of rules and bases its decision on the first matching rule. To rearrange order of rules, select the rule you wish to move and use up and down arrows buttons on the right. To remove rule, use the cross button.</p> 112 <p>When <kin>PumpKIN</kin> receives request it goes through the list of rules and bases its decision on the first matching rule. To rearrange order of rules, select the rule you wish to move and use up and down arrows buttons on the right. To remove rule, use the cross button.</p>
112 <p>To add a new rule fill in the information about <b>request type</b>, source <b>address</b> and <b>netmask</b> and desired action. Then click on the 'Add new rule' button.</p> 113 <p>To add a new rule fill in the information about <b>request type</b>, source <b>address</b> and <b>netmask</b> and desired action. Then click on the 'Add new rule' button.</p>
113 <p>If you wish to amend the rule, select it in the rules list, change parameters below and click the 'Replace rule' button.</p> 114 <p>If you wish to amend the rule, select it in the rules list, change parameters below and click the 'Replace rule' button.</p>
114 </topic> 115 </topic>
115</winhelp> 116</winhelp>
diff --git a/pumpkin.clw b/pumpkin.clw
index 213d8c1..7fa927b 100644
--- a/pumpkin.clw
+++ b/pumpkin.clw
@@ -1,194 +1,196 @@
1; CLW file contains information for the MFC ClassWizard 1; CLW file contains information for the MFC ClassWizard
2 2
3[General Info] 3[General Info]
4Version=1 4Version=1
5LastClass=CPumpKINDlg 5LastClass=CPropsNetwork
6LastTemplate=CComboBox 6LastTemplate=CComboBox
7NewFileInclude1=#include "stdafx.h" 7NewFileInclude1=#include "stdafx.h"
8NewFileInclude2=#include "PumpKIN.h" 8NewFileInclude2=#include "PumpKIN.h"
9 9
10ClassCount=14 10ClassCount=14
11Class1=CPumpKINApp 11Class1=CPumpKINApp
12Class2=CPumpKINDlg 12Class2=CPumpKINDlg
13Class3=CAboutDlg 13Class3=CAboutDlg
14 14
15ResourceCount=10 15ResourceCount=10
16Resource1=IDD_REQUEST 16Resource1=IDD_REQUEST
17Resource2=IDD_PROPS_NETWORK 17Resource2=IDD_PUMPKIN_DIALOG
18Resource3=IDD_CONFIRM_RRQ 18Resource3=IDD_CONFIRM_RRQ
19Resource4=IDD_PROPS_SERVER 19Resource4=IDD_PROPS_SERVER
20Class4=CPropsServer 20Class4=CPropsServer
21Class5=CPropsNetwork 21Class5=CPropsNetwork
22Resource5=IDD_CONFIRM_WRQ 22Resource5=IDD_CONFIRM_WRQ
23Resource6=IDD_PROPS_ACL 23Resource6=IDD_PROPS_ACL
24Class6=CConfirmRRQDlg 24Class6=CConfirmRRQDlg
25Class7=CConfirmWRQDlg 25Class7=CConfirmWRQDlg
26Resource7=IDD_ABOUTBOX 26Resource7=IDD_ABOUTBOX
27Class8=CRequestDlg 27Class8=CRequestDlg
28Class9=CResolver 28Class9=CResolver
29Class10=CRetrier 29Class10=CRetrier
30Class11=CTrayer 30Class11=CTrayer
31Resource8=IDD_PROPS_SOUNDS 31Resource8=IDD_PROPS_SOUNDS
32Class12=CPropsSounds 32Class12=CPropsSounds
33Resource9=IDM_POPUPS 33Resource9=IDM_POPUPS
34Class13=CPropsACL 34Class13=CPropsACL
35Class14=CACLTargetCombo 35Class14=CACLTargetCombo
36Resource10=IDD_PUMPKIN_DIALOG 36Resource10=IDD_PROPS_NETWORK
37 37
38[CLS:CPumpKINApp] 38[CLS:CPumpKINApp]
39Type=0 39Type=0
40HeaderFile=PumpKIN.h 40HeaderFile=PumpKIN.h
41ImplementationFile=PumpKIN.cpp 41ImplementationFile=PumpKIN.cpp
42Filter=N 42Filter=N
43 43
44[CLS:CPumpKINDlg] 44[CLS:CPumpKINDlg]
45Type=0 45Type=0
46HeaderFile=PumpKINDlg.h 46HeaderFile=PumpKINDlg.h
47ImplementationFile=PumpKINDlg.cpp 47ImplementationFile=PumpKINDlg.cpp
48Filter=W 48Filter=W
49BaseClass=CDialog 49BaseClass=CDialog
50VirtualFilter=dWC 50VirtualFilter=dWC
51LastObject=CPumpKINDlg 51LastObject=CPumpKINDlg
52 52
53[CLS:CAboutDlg] 53[CLS:CAboutDlg]
54Type=0 54Type=0
55HeaderFile=PumpKINDlg.h 55HeaderFile=PumpKINDlg.h
56ImplementationFile=PumpKINDlg.cpp 56ImplementationFile=PumpKINDlg.cpp
57Filter=D 57Filter=D
58BaseClass=CDialog 58BaseClass=CDialog
59VirtualFilter=dWC 59VirtualFilter=dWC
60LastObject=CAboutDlg 60LastObject=CAboutDlg
61 61
62[DLG:IDD_ABOUTBOX] 62[DLG:IDD_ABOUTBOX]
63Type=1 63Type=1
64Class=CAboutDlg 64Class=CAboutDlg
65ControlCount=5 65ControlCount=5
66Control1=IDC_STATIC,static,1342177283 66Control1=IDC_STATIC,static,1342177283
67Control2=IDC_STATIC,static,1342308480 67Control2=IDC_STATIC,static,1342308480
68Control3=IDC_STATIC,static,1342308352 68Control3=IDC_STATIC,static,1342308352
69Control4=IDOK,button,1342373889 69Control4=IDOK,button,1342373889
70Control5=IDC_KLEVERNET,button,1342242816 70Control5=IDC_KLEVERNET,button,1342242816
71 71
72[DLG:IDD_PUMPKIN_DIALOG] 72[DLG:IDD_PUMPKIN_DIALOG]
73Type=1 73Type=1
74Class=CPumpKINDlg 74Class=CPumpKINDlg
75ControlCount=10 75ControlCount=10
76Control1=IDC_CONNECTIONS,SysListView32,1350631681 76Control1=IDC_CONNECTIONS,SysListView32,1350631681
77Control2=IDC_GET,button,1342259200 77Control2=IDC_GET,button,1342259200
78Control3=IDC_PUT,button,1342259200 78Control3=IDC_PUT,button,1342259200
79Control4=IDC_ABORT,button,1342259200 79Control4=IDC_ABORT,button,1342259200
80Control5=IDC_OPTIONS,button,1342259200 80Control5=IDC_OPTIONS,button,1342259200
81Control6=IDC_EXIT,button,1342259200 81Control6=IDC_EXIT,button,1342259200
82Control7=ID_HELP,button,1342259200 82Control7=ID_HELP,button,1342259200
83Control8=IDC_LOG,listbox,1353728385 83Control8=IDC_LOG,listbox,1353728385
84Control9=IDCANCEL,button,1073741824 84Control9=IDCANCEL,button,1073741824
85Control10=IDC_LISTENING,button,1342275619 85Control10=IDC_LISTENING,button,1342275619
86 86
87[DLG:IDD_PROPS_SERVER] 87[DLG:IDD_PROPS_SERVER]
88Type=1 88Type=1
89Class=CPropsServer 89Class=CPropsServer
90ControlCount=18 90ControlCount=18
91Control1=IDC_STATIC,button,1342177287 91Control1=IDC_STATIC,button,1342177287
92Control2=IDC_TFTPROOT,edit,1350631552 92Control2=IDC_TFTPROOT,edit,1350631552
93Control3=IDC_BROWSE,button,1342242880 93Control3=IDC_BROWSE,button,1342242880
94Control4=IDC_TFTPSUBDIRS,button,1342242819 94Control4=IDC_TFTPSUBDIRS,button,1342242819
95Control5=IDC_STATIC,button,1342177287 95Control5=IDC_STATIC,button,1342177287
96Control6=IDC_RRQ_GIVEALL,button,1342324745 96Control6=IDC_RRQ_GIVEALL,button,1342324745
97Control7=IDC_RRQ_ALWAYSCONFIRM,button,1342193673 97Control7=IDC_RRQ_ALWAYSCONFIRM,button,1342193673
98Control8=IDC_RRQ_DENYALL,button,1342193673 98Control8=IDC_RRQ_DENYALL,button,1342193673
99Control9=IDC_STATIC,button,1342308359 99Control9=IDC_STATIC,button,1342308359
100Control10=IDC_WRQ_TAKEALL,button,1342308361 100Control10=IDC_WRQ_TAKEALL,button,1342308361
101Control11=IDC_WRQ_PROMPTEXISTING,button,1342177289 101Control11=IDC_WRQ_PROMPTEXISTING,button,1342177289
102Control12=IDC_WRQ_ALWAYSCONFIRM,button,1342177289 102Control12=IDC_WRQ_ALWAYSCONFIRM,button,1342177289
103Control13=IDC_WRQ_DENYALL,button,1342177289 103Control13=IDC_WRQ_DENYALL,button,1342177289
104Control14=IDC_STATIC,static,1342308609 104Control14=IDC_STATIC,static,1342308609
105Control15=IDC_PROMPTTIMEOUT,msctls_trackbar32,1342242823 105Control15=IDC_PROMPTTIMEOUT,msctls_trackbar32,1342242823
106Control16=IDC_STATIC,button,1342177287 106Control16=IDC_STATIC,button,1342177287
107Control17=IDC_LOGFILE,edit,1350631552 107Control17=IDC_LOGFILE,edit,1350631552
108Control18=IDC_LOGFILE_BROWSE,button,1342242880 108Control18=IDC_LOGFILE_BROWSE,button,1342242880
109 109
110[DLG:IDD_PROPS_NETWORK] 110[DLG:IDD_PROPS_NETWORK]
111Type=1 111Type=1
112Class=CPropsNetwork 112Class=CPropsNetwork
113ControlCount=15 113ControlCount=17
114Control1=IDC_STATIC,button,1342177287 114Control1=IDC_STATIC,button,1342177287
115Control2=IDC_STATIC,static,1342308354 115Control2=IDC_STATIC,static,1342308354
116Control3=IDC_LISTENPORT,edit,1350631552 116Control3=IDC_LISTENPORT,edit,1350631552
117Control4=IDC_LISTENSPIN,msctls_updown32,1342177463 117Control4=IDC_LISTENSPIN,msctls_updown32,1342177463
118Control5=IDC_STATIC,static,1342308354 118Control5=IDC_STATIC,static,1342308354
119Control6=IDC_SPEAKPORT,edit,1350631552 119Control6=IDC_SPEAKPORT,edit,1350631552
120Control7=IDC_SPEAKSPIN,msctls_updown32,1342177463 120Control7=IDC_SPEAKSPIN,msctls_updown32,1342177463
121Control8=IDC_STATIC,static,1342308352 121Control8=IDC_STATIC,static,1342308352
122Control9=IDC_TIMEOUT,edit,1350639744 122Control9=IDC_TIMEOUT,edit,1350639744
123Control10=IDC_TIMESPIN,msctls_updown32,1342177463 123Control10=IDC_TIMESPIN,msctls_updown32,1342177463
124Control11=IDC_STATIC,static,1342308352 124Control11=IDC_STATIC,static,1342308352
125Control12=IDC_STATIC,static,1342308352 125Control12=IDC_STATIC,static,1342308352
126Control13=IDC_STATIC,static,1342308352 126Control13=IDC_STATIC,static,1342308352
127Control14=IDC_BLOCKSIZE,edit,1350639744 127Control14=IDC_BLOCKSIZE,edit,1350639744
128Control15=IDC_BSIZESPIN,msctls_updown32,1342177463 128Control15=IDC_BSIZESPIN,msctls_updown32,1342177463
129Control16=IDC_STATIC,static,1342308354
130Control17=IDC_LISTENADDRESS,edit,1350631552
129 131
130[CLS:CPropsServer] 132[CLS:CPropsServer]
131Type=0 133Type=0
132HeaderFile=PropsServer.h 134HeaderFile=PropsServer.h
133ImplementationFile=PropsServer.cpp 135ImplementationFile=PropsServer.cpp
134BaseClass=CPropertyPage 136BaseClass=CPropertyPage
135Filter=D 137Filter=D
136VirtualFilter=idWC 138VirtualFilter=idWC
137LastObject=CPropsServer 139LastObject=CPropsServer
138 140
139[CLS:CPropsNetwork] 141[CLS:CPropsNetwork]
140Type=0 142Type=0
141HeaderFile=PropsNetwork.h 143HeaderFile=PropsNetwork.h
142ImplementationFile=PropsNetwork.cpp 144ImplementationFile=PropsNetwork.cpp
143BaseClass=CPropertyPage 145BaseClass=CPropertyPage
144Filter=D 146Filter=D
145VirtualFilter=idWC 147VirtualFilter=idWC
146LastObject=IDC_BLOCKSIZE 148LastObject=IDC_LISTENADDRESS
147 149
148[DLG:IDD_CONFIRM_RRQ] 150[DLG:IDD_CONFIRM_RRQ]
149Type=1 151Type=1
150Class=CConfirmRRQDlg 152Class=CConfirmRRQDlg
151ControlCount=9 153ControlCount=9
152Control1=IDOK,button,1342242817 154Control1=IDOK,button,1342242817
153Control2=IDCANCEL,button,1342242816 155Control2=IDCANCEL,button,1342242816
154Control3=IDC_STATIC,static,1342308352 156Control3=IDC_STATIC,static,1342308352
155Control4=IDC_HOST,static,1350701313 157Control4=IDC_HOST,static,1350701313
156Control5=IDC_STATIC,static,1342308353 158Control5=IDC_STATIC,static,1342308353
157Control6=IDC_FILE,static,1350701313 159Control6=IDC_FILE,static,1350701313
158Control7=IDC_STATIC,static,1342177296 160Control7=IDC_STATIC,static,1342177296
159Control8=IDC_STATIC,static,1342177283 161Control8=IDC_STATIC,static,1342177283
160Control9=IDC_STATIC,static,1342177283 162Control9=IDC_STATIC,static,1342177283
161 163
162[DLG:IDD_CONFIRM_WRQ] 164[DLG:IDD_CONFIRM_WRQ]
163Type=1 165Type=1
164Class=CConfirmWRQDlg 166Class=CConfirmWRQDlg
165ControlCount=11 167ControlCount=11
166Control1=IDOK,button,1342242817 168Control1=IDOK,button,1342242817
167Control2=IDC_RENAME,button,1342242816 169Control2=IDC_RENAME,button,1342242816
168Control3=IDCANCEL,button,1342242816 170Control3=IDCANCEL,button,1342242816
169Control4=IDC_STATIC,static,1342308352 171Control4=IDC_STATIC,static,1342308352
170Control5=IDC_HOST,static,1350701313 172Control5=IDC_HOST,static,1350701313
171Control6=IDC_STATIC,static,1342308353 173Control6=IDC_STATIC,static,1342308353
172Control7=IDC_FILE,static,1350701313 174Control7=IDC_FILE,static,1350701313
173Control8=IDC_STATIC,static,1342177296 175Control8=IDC_STATIC,static,1342177296
174Control9=IDC_STATIC,static,1342177283 176Control9=IDC_STATIC,static,1342177283
175Control10=IDC_STATIC,static,1342177283 177Control10=IDC_STATIC,static,1342177283
176Control11=IDC_RESUME,button,1342242816 178Control11=IDC_RESUME,button,1342242816
177 179
178[CLS:CConfirmRRQDlg] 180[CLS:CConfirmRRQDlg]
179Type=0 181Type=0
180HeaderFile=ConfirmRRQDlg.h 182HeaderFile=ConfirmRRQDlg.h
181ImplementationFile=ConfirmRRQDlg.cpp 183ImplementationFile=ConfirmRRQDlg.cpp
182BaseClass=CDialog 184BaseClass=CDialog
183Filter=D 185Filter=D
184VirtualFilter=dWC 186VirtualFilter=dWC
185LastObject=CConfirmRRQDlg 187LastObject=CConfirmRRQDlg
186 188
187[CLS:CConfirmWRQDlg] 189[CLS:CConfirmWRQDlg]
188Type=0 190Type=0
189HeaderFile=ConfirmWRQDlg.h 191HeaderFile=ConfirmWRQDlg.h
190ImplementationFile=ConfirmWRQDlg.cpp 192ImplementationFile=ConfirmWRQDlg.cpp
191BaseClass=CDialog 193BaseClass=CDialog
192Filter=D 194Filter=D
193VirtualFilter=dWC 195VirtualFilter=dWC
194LastObject=IDC_RESUME 196LastObject=IDC_RESUME
diff --git a/pumpkin.rc b/pumpkin.rc
index f52c4bd..babd066 100644..100755
--- a/pumpkin.rc
+++ b/pumpkin.rc
@@ -121,120 +121,122 @@ BEGIN
121 181,69,11,WS_EX_TRANSPARENT | WS_EX_STATICEDGE 121 181,69,11,WS_EX_TRANSPARENT | WS_EX_STATICEDGE
122END 122END
123 123
124IDD_PROPS_SERVER DIALOG DISCARDABLE 0, 0, 300, 201 124IDD_PROPS_SERVER DIALOG DISCARDABLE 0, 0, 300, 201
125STYLE WS_CHILD | WS_DISABLED | WS_CAPTION 125STYLE WS_CHILD | WS_DISABLED | WS_CAPTION
126CAPTION "Server" 126CAPTION "Server"
127FONT 8, "MS Sans Serif" 127FONT 8, "MS Sans Serif"
128BEGIN 128BEGIN
129 GROUPBOX "TFTP filesystem &root (download path)",IDC_STATIC,7,7, 129 GROUPBOX "TFTP filesystem &root (download path)",IDC_STATIC,7,7,
130 286,38 130 286,38
131 EDITTEXT IDC_TFTPROOT,13,16,256,13,ES_AUTOHSCROLL 131 EDITTEXT IDC_TFTPROOT,13,16,256,13,ES_AUTOHSCROLL
132 PUSHBUTTON "&B",IDC_BROWSE,274,16,13,13,BS_ICON 132 PUSHBUTTON "&B",IDC_BROWSE,274,16,13,13,BS_ICON
133 CONTROL "Allow access to &subdirectories",IDC_TFTPSUBDIRS, 133 CONTROL "Allow access to &subdirectories",IDC_TFTPSUBDIRS,
134 "Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,31,111,10 134 "Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,31,111,10
135 GROUPBOX "Read Request Behavior",IDC_STATIC,7,48,243,56 135 GROUPBOX "Read Request Behavior",IDC_STATIC,7,48,243,56
136 CONTROL "Give &all files",IDC_RRQ_GIVEALL,"Button", 136 CONTROL "Give &all files",IDC_RRQ_GIVEALL,"Button",
137 BS_AUTORADIOBUTTON | BS_NOTIFY | WS_GROUP,13,63,53,10 137 BS_AUTORADIOBUTTON | BS_NOTIFY | WS_GROUP,13,63,53,10
138 CONTROL "&Prompt before giving file",IDC_RRQ_ALWAYSCONFIRM, 138 CONTROL "&Prompt before giving file",IDC_RRQ_ALWAYSCONFIRM,
139 "Button",BS_AUTORADIOBUTTON | BS_NOTIFY,43,75,91,10 139 "Button",BS_AUTORADIOBUTTON | BS_NOTIFY,43,75,91,10
140 CONTROL "&Deny all requests",IDC_RRQ_DENYALL,"Button", 140 CONTROL "&Deny all requests",IDC_RRQ_DENYALL,"Button",
141 BS_AUTORADIOBUTTON | BS_NOTIFY,73,87,70,10 141 BS_AUTORADIOBUTTON | BS_NOTIFY,73,87,70,10
142 GROUPBOX "Write Request Behavior",IDC_STATIC,7,106,243,56, 142 GROUPBOX "Write Request Behavior",IDC_STATIC,7,106,243,56,
143 WS_GROUP 143 WS_GROUP
144 CONTROL "Take a&ll files",IDC_WRQ_TAKEALL,"Button", 144 CONTROL "Take a&ll files",IDC_WRQ_TAKEALL,"Button",
145 BS_AUTORADIOBUTTON | WS_GROUP,13,116,55,10 145 BS_AUTORADIOBUTTON | WS_GROUP,13,116,55,10
146 CONTROL "Prompt if file &exists",IDC_WRQ_PROMPTEXISTING,"Button", 146 CONTROL "Prompt if file &exists",IDC_WRQ_PROMPTEXISTING,"Button",
147 BS_AUTORADIOBUTTON,43,126,73,10 147 BS_AUTORADIOBUTTON,43,126,73,10
148 CONTROL "Always pro&mpt before accepting file", 148 CONTROL "Always pro&mpt before accepting file",
149 IDC_WRQ_ALWAYSCONFIRM,"Button",BS_AUTORADIOBUTTON,73,136, 149 IDC_WRQ_ALWAYSCONFIRM,"Button",BS_AUTORADIOBUTTON,73,136,
150 139,10 150 139,10
151 CONTROL "D&eny all requests",IDC_WRQ_DENYALL,"Button", 151 CONTROL "D&eny all requests",IDC_WRQ_DENYALL,"Button",
152 BS_AUTORADIOBUTTON,103,146,70,10 152 BS_AUTORADIOBUTTON,103,146,70,10
153 CTEXT "Confirmation &timeout",IDC_STATIC,253,52,40,19, 153 CTEXT "Confirmation &timeout",IDC_STATIC,253,52,40,19,
154 SS_NOTIFY 154 SS_NOTIFY
155 CONTROL "Slider1",IDC_PROMPTTIMEOUT,"msctls_trackbar32", 155 CONTROL "Slider1",IDC_PROMPTTIMEOUT,"msctls_trackbar32",
156 TBS_AUTOTICKS | TBS_VERT | TBS_TOP | WS_TABSTOP,272,72, 156 TBS_AUTOTICKS | TBS_VERT | TBS_TOP | WS_TABSTOP,272,72,
157 21,90 157 21,90
158 GROUPBOX "Log file (leave empty to disable logging to file)", 158 GROUPBOX "Log file (leave empty to disable logging to file)",
159 IDC_STATIC,7,165,286,29 159 IDC_STATIC,7,165,286,29
160 EDITTEXT IDC_LOGFILE,13,175,256,13,ES_AUTOHSCROLL 160 EDITTEXT IDC_LOGFILE,13,175,256,13,ES_AUTOHSCROLL
161 PUSHBUTTON "",IDC_LOGFILE_BROWSE,274,175,13,13,BS_ICON 161 PUSHBUTTON "",IDC_LOGFILE_BROWSE,274,175,13,13,BS_ICON
162END 162END
163 163
164IDD_PROPS_NETWORK DIALOG DISCARDABLE 0, 0, 300, 201 164IDD_PROPS_NETWORK DIALOG DISCARDABLE 0, 0, 300, 201
165STYLE WS_CHILD | WS_DISABLED | WS_CAPTION 165STYLE WS_CHILD | WS_DISABLED | WS_CAPTION
166CAPTION "Network" 166CAPTION "Network"
167FONT 8, "MS Sans Serif" 167FONT 8, "MS Sans Serif"
168BEGIN 168BEGIN
169 GROUPBOX "UDP Ports",IDC_STATIC,7,7,286,40 169 GROUPBOX "UDP Ports",IDC_STATIC,7,7,286,55
170 RTEXT "Listen for &incoming requests on port:",IDC_STATIC,13, 170 RTEXT "Listen for &incoming requests on port:",IDC_STATIC,13,
171 18,135,8 171 18,135,8
172 EDITTEXT IDC_LISTENPORT,154,16,40,13,ES_AUTOHSCROLL 172 EDITTEXT IDC_LISTENPORT,154,16,61,13,ES_AUTOHSCROLL
173 CONTROL "Spin1",IDC_LISTENSPIN,"msctls_updown32",UDS_WRAP | 173 CONTROL "Spin1",IDC_LISTENSPIN,"msctls_updown32",UDS_WRAP |
174 UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | 174 UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY |
175 UDS_ARROWKEYS | UDS_NOTHOUSANDS,183,16,11,13 175 UDS_ARROWKEYS | UDS_NOTHOUSANDS,204,16,11,13
176 RTEXT "Send &outging requests to port:",IDC_STATIC,13,31,135,8 176 RTEXT "Send &outging requests to port:",IDC_STATIC,13,46,135,8
177 EDITTEXT IDC_SPEAKPORT,154,29,40,13,ES_AUTOHSCROLL 177 EDITTEXT IDC_SPEAKPORT,154,44,61,13,ES_AUTOHSCROLL
178 CONTROL "Spin1",IDC_SPEAKSPIN,"msctls_updown32",UDS_WRAP | 178 CONTROL "Spin1",IDC_SPEAKSPIN,"msctls_updown32",UDS_WRAP |
179 UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | 179 UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY |
180 UDS_ARROWKEYS | UDS_NOTHOUSANDS,183,29,11,13 180 UDS_ARROWKEYS | UDS_NOTHOUSANDS,204,43,11,13
181 LTEXT "Default connection timeout:",IDC_STATIC,7,52,88,8 181 LTEXT "Default connection timeout:",IDC_STATIC,7,66,88,8
182 EDITTEXT IDC_TIMEOUT,110,50,40,13,ES_AUTOHSCROLL | ES_NUMBER 182 EDITTEXT IDC_TIMEOUT,110,64,40,13,ES_AUTOHSCROLL | ES_NUMBER
183 CONTROL "Spin3",IDC_TIMESPIN,"msctls_updown32",UDS_WRAP | 183 CONTROL "Spin3",IDC_TIMESPIN,"msctls_updown32",UDS_WRAP |
184 UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | 184 UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY |
185 UDS_ARROWKEYS | UDS_NOTHOUSANDS,140,50,11,13 185 UDS_ARROWKEYS | UDS_NOTHOUSANDS,140,64,11,13
186 LTEXT "Default block size:",IDC_STATIC,7,66,59,8 186 LTEXT "Default block size:",IDC_STATIC,7,80,59,8
187 LTEXT "seconds",IDC_STATIC,154,52,28,8 187 LTEXT "seconds",IDC_STATIC,154,66,28,8
188 LTEXT "bytes",IDC_STATIC,154,66,18,8 188 LTEXT "bytes",IDC_STATIC,154,80,18,8
189 EDITTEXT IDC_BLOCKSIZE,110,64,40,13,ES_AUTOHSCROLL | ES_NUMBER 189 EDITTEXT IDC_BLOCKSIZE,110,78,40,13,ES_AUTOHSCROLL | ES_NUMBER
190 CONTROL "Spin3",IDC_BSIZESPIN,"msctls_updown32",UDS_WRAP | 190 CONTROL "Spin3",IDC_BSIZESPIN,"msctls_updown32",UDS_WRAP |
191 UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | 191 UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY |
192 UDS_ARROWKEYS | UDS_NOTHOUSANDS,140,64,11,13 192 UDS_ARROWKEYS | UDS_NOTHOUSANDS,140,78,11,13
193 RTEXT "ip address:",IDC_STATIC,13,32,135,8
194 EDITTEXT IDC_LISTENADDRESS,154,28,61,14,ES_AUTOHSCROLL
193END 195END
194 196
195IDD_CONFIRM_RRQ DIALOGEX 0, 0, 181, 79 197IDD_CONFIRM_RRQ DIALOGEX 0, 0, 181, 79
196STYLE DS_MODALFRAME | DS_NOIDLEMSG | DS_SETFOREGROUND | DS_3DLOOK | WS_POPUP | 198STYLE DS_MODALFRAME | DS_NOIDLEMSG | DS_SETFOREGROUND | DS_3DLOOK | WS_POPUP |
197 WS_CAPTION 199 WS_CAPTION
198EXSTYLE WS_EX_TOOLWINDOW | WS_EX_CLIENTEDGE 200EXSTYLE WS_EX_TOOLWINDOW | WS_EX_CLIENTEDGE
199CAPTION " PumpKIN - Confirm Read Request" 201CAPTION " PumpKIN - Confirm Read Request"
200FONT 8, "MS Sans Serif", 0, 0, 0x1 202FONT 8, "MS Sans Serif", 0, 0, 0x1
201BEGIN 203BEGIN
202 DEFPUSHBUTTON "&Grant Access",IDOK,27,58,54,14 204 DEFPUSHBUTTON "&Grant Access",IDOK,27,58,54,14
203 PUSHBUTTON "&Deny Access",IDCANCEL,97,58,54,14 205 PUSHBUTTON "&Deny Access",IDCANCEL,97,58,54,14
204 LTEXT "The host",IDC_STATIC,77,7,29,8 206 LTEXT "The host",IDC_STATIC,77,7,29,8
205 CTEXT "255.255.255.255",IDC_HOST,57,15,68,14,SS_NOTIFY | 207 CTEXT "255.255.255.255",IDC_HOST,57,15,68,14,SS_NOTIFY |
206 SS_SUNKEN | WS_BORDER,WS_EX_DLGMODALFRAME | 208 SS_SUNKEN | WS_BORDER,WS_EX_DLGMODALFRAME |
207 WS_EX_CLIENTEDGE 209 WS_EX_CLIENTEDGE
208 CTEXT "is requesting the file",IDC_STATIC,23,29,135,8 210 CTEXT "is requesting the file",IDC_STATIC,23,29,135,8
209 CTEXT "",IDC_FILE,23,37,135,14,SS_NOTIFY | SS_SUNKEN | 211 CTEXT "",IDC_FILE,23,37,135,14,SS_NOTIFY | SS_SUNKEN |
210 WS_BORDER,WS_EX_DLGMODALFRAME | WS_EX_CLIENTEDGE 212 WS_BORDER,WS_EX_DLGMODALFRAME | WS_EX_CLIENTEDGE
211 CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,7,54,167,1 213 CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,7,54,167,1
212 ICON IDR_MAINFRAME,IDC_STATIC,7,7,18,20 214 ICON IDR_MAINFRAME,IDC_STATIC,7,7,18,20
213 ICON IDR_MAINFRAME,IDC_STATIC,153,7,18,20 215 ICON IDR_MAINFRAME,IDC_STATIC,153,7,18,20
214END 216END
215 217
216IDD_CONFIRM_WRQ DIALOGEX 0, 0, 201, 95 218IDD_CONFIRM_WRQ DIALOGEX 0, 0, 201, 95
217STYLE DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | WS_POPUP | WS_CAPTION 219STYLE DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | WS_POPUP | WS_CAPTION
218EXSTYLE WS_EX_TOOLWINDOW | WS_EX_CLIENTEDGE 220EXSTYLE WS_EX_TOOLWINDOW | WS_EX_CLIENTEDGE
219CAPTION " PumpKIN - Confirm Write Request" 221CAPTION " PumpKIN - Confirm Write Request"
220FONT 8, "MS Sans Serif", 0, 0, 0x1 222FONT 8, "MS Sans Serif", 0, 0, 0x1
221BEGIN 223BEGIN
222 DEFPUSHBUTTON "&Accept",IDOK,7,58,59,14 224 DEFPUSHBUTTON "&Accept",IDOK,7,58,59,14
223 PUSHBUTTON "&Rename",IDC_RENAME,71,58,59,14 225 PUSHBUTTON "&Rename",IDC_RENAME,71,58,59,14
224 PUSHBUTTON "&Deny Access",IDCANCEL,135,58,59,14 226 PUSHBUTTON "&Deny Access",IDCANCEL,135,58,59,14
225 LTEXT "The host",IDC_STATIC,87,7,29,8 227 LTEXT "The host",IDC_STATIC,87,7,29,8
226 CTEXT "255.255.255.255",IDC_HOST,67,15,68,14,SS_NOTIFY | 228 CTEXT "255.255.255.255",IDC_HOST,67,15,68,14,SS_NOTIFY |
227 SS_SUNKEN | WS_BORDER,WS_EX_DLGMODALFRAME | 229 SS_SUNKEN | WS_BORDER,WS_EX_DLGMODALFRAME |
228 WS_EX_CLIENTEDGE 230 WS_EX_CLIENTEDGE
229 CTEXT "is attempting to send you a file",IDC_STATIC,33,29,135, 231 CTEXT "is attempting to send you a file",IDC_STATIC,33,29,135,
230 8 232 8
231 CTEXT "",IDC_FILE,33,37,135,14,SS_NOTIFY | SS_SUNKEN | 233 CTEXT "",IDC_FILE,33,37,135,14,SS_NOTIFY | SS_SUNKEN |
232 WS_BORDER,WS_EX_DLGMODALFRAME | WS_EX_CLIENTEDGE 234 WS_BORDER,WS_EX_DLGMODALFRAME | WS_EX_CLIENTEDGE
233 CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,7,54,187,1 235 CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,7,54,187,1
234 ICON IDR_MAINFRAME,IDC_STATIC,7,7,21,20 236 ICON IDR_MAINFRAME,IDC_STATIC,7,7,21,20
235 ICON IDR_MAINFRAME,IDC_STATIC,173,7,21,20 237 ICON IDR_MAINFRAME,IDC_STATIC,173,7,21,20
236 PUSHBUTTON "Res&ume",IDC_RESUME,71,74,59,14 238 PUSHBUTTON "Res&ume",IDC_RESUME,71,74,59,14
237END 239END
238 240
239IDD_REQUEST DIALOGEX 0, 0, 191, 161 241IDD_REQUEST DIALOGEX 0, 0, 191, 161
240STYLE DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | WS_POPUP | WS_CAPTION | 242STYLE DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | WS_POPUP | WS_CAPTION |
diff --git a/resource.h b/resource.h
index 7961e5e..2c2fa02 100644..100755
--- a/resource.h
+++ b/resource.h
@@ -106,68 +106,69 @@
106#define IDC_WRQ_PROMPTEXISTING 1014 106#define IDC_WRQ_PROMPTEXISTING 1014
107#define IDC_WRQ_ALWAYSCONFIRM 1015 107#define IDC_WRQ_ALWAYSCONFIRM 1015
108#define IDC_WRQ_DENYALL 1016 108#define IDC_WRQ_DENYALL 1016
109#define IDC_PROMPTTIMEOUT 1017 109#define IDC_PROMPTTIMEOUT 1017
110#define IDC_LISTENPORT 1018 110#define IDC_LISTENPORT 1018
111#define IDC_LISTENSPIN 1019 111#define IDC_LISTENSPIN 1019
112#define IDC_SPEAKPORT 1020 112#define IDC_SPEAKPORT 1020
113#define IDC_SPEAKSPIN 1021 113#define IDC_SPEAKSPIN 1021
114#define IDC_MAXUDPSIZE 1022 114#define IDC_MAXUDPSIZE 1022
115#define IDC_MAXUDPSPIN 1023 115#define IDC_MAXUDPSPIN 1023
116#define IDC_TIMEOUT 1024 116#define IDC_TIMEOUT 1024
117#define IDC_TIMESPIN 1025 117#define IDC_TIMESPIN 1025
118#define IDC_OPTIONS 1026 118#define IDC_OPTIONS 1026
119#define IDC_BLOCKSIZE 1026 119#define IDC_BLOCKSIZE 1026
120#define IDC_BSIZESPIN 1027 120#define IDC_BSIZESPIN 1027
121#define IDC_HOST 1028 121#define IDC_HOST 1028
122#define IDC_FILE 1029 122#define IDC_FILE 1029
123#define IDC_RENAME 1030 123#define IDC_RENAME 1030
124#define IDC_REMOTEFILE 1030 124#define IDC_REMOTEFILE 1030
125#define IDC_RESUME 1031 125#define IDC_RESUME 1031
126#define IDC_REFRESH 1032 126#define IDC_REFRESH 1032
127#define IDC_BROWSE 1034 127#define IDC_BROWSE 1034
128#define IDC_TALKS 1035 128#define IDC_TALKS 1035
129#define IDC_LOCALFILE 1036 129#define IDC_LOCALFILE 1036
130#define IDC_TYPE 1037 130#define IDC_TYPE 1037
131#define IDC_BSIZE 1039 131#define IDC_BSIZE 1039
132#define IDC_RING 1041 132#define IDC_RING 1041
133#define IDC_RING_BROWSE 1042 133#define IDC_RING_BROWSE 1042
134#define IDC_RING_PLAY 1043 134#define IDC_RING_PLAY 1043
135#define IDC_ACL_LIST 1043 135#define IDC_ACL_LIST 1043
136#define IDC_FINISHED 1044 136#define IDC_FINISHED 1044
137#define IDC_ACL_UP 1044 137#define IDC_ACL_UP 1044
138#define IDC_FINISHED_BROWSE 1045 138#define IDC_FINISHED_BROWSE 1045
139#define IDC_ACL_DOWN 1045 139#define IDC_ACL_DOWN 1045
140#define IDC_FINISHED_PLAY 1046 140#define IDC_FINISHED_PLAY 1046
141#define IDC_ACL_REMOVE 1046 141#define IDC_ACL_REMOVE 1046
142#define IDC_ABORTED 1047 142#define IDC_ABORTED 1047
143#define IDC_ACL_ADDR 1047 143#define IDC_ACL_ADDR 1047
144#define IDC_ABORTED_BROWSE 1048 144#define IDC_ABORTED_BROWSE 1048
145#define IDC_ACL_RULE 1048 145#define IDC_ACL_RULE 1048
146#define IDC_ABORTED_PLAY 1049 146#define IDC_ABORTED_PLAY 1049
147#define IDC_ACL_NETMASK 1049 147#define IDC_ACL_NETMASK 1049
148#define IDC_ACL_ADD 1050 148#define IDC_ACL_ADD 1050
149#define IDC_ACL_XFER 1051 149#define IDC_ACL_XFER 1051
150#define IDC_ACL_REPLACE 1052 150#define IDC_ACL_REPLACE 1052
151#define IDC_LISTENING 1052 151#define IDC_LISTENING 1052
152#define IDC_LOGFILE 1053 152#define IDC_LOGFILE 1053
153#define IDC_LOGFILE_BROWSE 1054 153#define IDC_LOGFILE_BROWSE 1054
154#define IDC_LISTENADDRESS 1055
154#define ID_TRAY_HELP 32771 155#define ID_TRAY_HELP 32771
155#define ID_TRAY_ABOUTPUMPKIN 32772 156#define ID_TRAY_ABOUTPUMPKIN 32772
156#define ID_TRAY_EXIT 32773 157#define ID_TRAY_EXIT 32773
157#define ID_TRAY_SENDFILE 32774 158#define ID_TRAY_SENDFILE 32774
158#define ID_TRAY_FETCHFILE 32775 159#define ID_TRAY_FETCHFILE 32775
159#define ID_TRAY_OPTIONS 32776 160#define ID_TRAY_OPTIONS 32776
160#define ID_TRAY_SHOWPUMPKINWINDOW 32777 161#define ID_TRAY_SHOWPUMPKINWINDOW 32777
161#define ID_TRAY_OPENFILESFOLDER 32778 162#define ID_TRAY_OPENFILESFOLDER 32778
162#define ID_TRAY_LISTEN 32780 163#define ID_TRAY_LISTEN 32780
163 164
164// Next default values for new objects 165// Next default values for new objects
165// 166//
166#ifdef APSTUDIO_INVOKED 167#ifdef APSTUDIO_INVOKED
167#ifndef APSTUDIO_READONLY_SYMBOLS 168#ifndef APSTUDIO_READONLY_SYMBOLS
168#define _APS_NEXT_RESOURCE_VALUE 155 169#define _APS_NEXT_RESOURCE_VALUE 156
169#define _APS_NEXT_COMMAND_VALUE 32781 170#define _APS_NEXT_COMMAND_VALUE 32781
170#define _APS_NEXT_CONTROL_VALUE 1055 171#define _APS_NEXT_CONTROL_VALUE 1056
171#define _APS_NEXT_SYMED_VALUE 102 172#define _APS_NEXT_SYMED_VALUE 102
172#endif 173#endif
173#endif 174#endif