-rw-r--r-- | PumpKINDlg.cpp | 109 |
1 files changed, 101 insertions, 8 deletions
diff --git a/PumpKINDlg.cpp b/PumpKINDlg.cpp index b6b8a36..4cb1633 100644 --- a/PumpKINDlg.cpp +++ b/PumpKINDlg.cpp | |||
@@ -1,26 +1,28 @@ | |||
1 | // PumpKINDlg.cpp : implementation file | 1 | // PumpKINDlg.cpp : implementation file |
2 | // | 2 | // |
3 | 3 | ||
4 | #include "stdafx.h" | 4 | #include "stdafx.h" |
5 | #include "PumpKIN.h" | 5 | #include "PumpKIN.h" |
6 | #include "PumpKINDlg.h" | 6 | #include "PumpKINDlg.h" |
7 | 7 | ||
8 | #include "ACLTargetCombo.h" | ||
8 | #include "PropsServer.h" | 9 | #include "PropsServer.h" |
9 | #include "PropsNetwork.h" | 10 | #include "PropsNetwork.h" |
10 | #include "PropsSounds.h" | 11 | #include "PropsSounds.h" |
12 | #include "PropsACL.h" | ||
11 | #include "ConfirmRRQDlg.h" | 13 | #include "ConfirmRRQDlg.h" |
12 | #include "ConfirmWRQDlg.h" | 14 | #include "ConfirmWRQDlg.h" |
13 | #include "RequestDlg.h" | 15 | #include "RequestDlg.h" |
14 | #include "Resolver.h" | 16 | #include "Resolver.h" |
15 | #include "Retrier.h" | 17 | #include "Retrier.h" |
16 | #include "Trayer.h" | 18 | #include "Trayer.h" |
17 | 19 | ||
18 | #include <io.h> | 20 | #include <io.h> |
19 | 21 | ||
20 | #ifdef _DEBUG | 22 | #ifdef _DEBUG |
21 | #define new DEBUG_NEW | 23 | #define new DEBUG_NEW |
22 | #undef THIS_FILE | 24 | #undef THIS_FILE |
23 | static char THIS_FILE[] = __FILE__; | 25 | static char THIS_FILE[] = __FILE__; |
24 | #endif | 26 | #endif |
25 | 27 | ||
26 | IMPLEMENT_DYNAMIC(CXferSocket, CAsyncSocket) | 28 | IMPLEMENT_DYNAMIC(CXferSocket, CAsyncSocket) |
@@ -66,67 +68,81 @@ void CAboutDlg::DoDataExchange(CDataExchange* pDX) | |||
66 | //{{AFX_DATA_MAP(CAboutDlg) | 68 | //{{AFX_DATA_MAP(CAboutDlg) |
67 | //}}AFX_DATA_MAP | 69 | //}}AFX_DATA_MAP |
68 | } | 70 | } |
69 | 71 | ||
70 | BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) | 72 | BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) |
71 | //{{AFX_MSG_MAP(CAboutDlg) | 73 | //{{AFX_MSG_MAP(CAboutDlg) |
72 | ON_BN_CLICKED(IDC_KLEVERNET, OnKlevernet) | 74 | ON_BN_CLICKED(IDC_KLEVERNET, OnKlevernet) |
73 | //}}AFX_MSG_MAP | 75 | //}}AFX_MSG_MAP |
74 | END_MESSAGE_MAP() | 76 | END_MESSAGE_MAP() |
75 | 77 | ||
76 | ///////////////////////////////////////////////////////////////////////////// | 78 | ///////////////////////////////////////////////////////////////////////////// |
77 | // CPumpKINDlg dialog | 79 | // CPumpKINDlg dialog |
78 | 80 | ||
79 | CPumpKINDlg::CPumpKINDlg(CWnd* pParent /*=NULL*/) | 81 | CPumpKINDlg::CPumpKINDlg(CWnd* pParent /*=NULL*/) |
80 | : CDialog(CPumpKINDlg::IDD, pParent) | 82 | : CDialog(CPumpKINDlg::IDD, pParent) |
81 | { | 83 | { |
84 | m_Listener.m_Daddy = this; | ||
85 | |||
86 | m_bListen = TRUE; | ||
87 | |||
82 | m_ListenPort = 69; | 88 | m_ListenPort = 69; |
83 | m_bTFTPSubdirs = TRUE; | 89 | m_bTFTPSubdirs = TRUE; |
84 | m_RRQMode = rrqAlwaysConfirm; | 90 | m_RRQMode = rrqAlwaysConfirm; |
85 | m_WRQMode = wrqAlwaysConfirm; | 91 | m_WRQMode = wrqAlwaysConfirm; |
86 | m_TFTPTimeOut = CTimeSpan(0,0,0,30); | 92 | m_TFTPTimeOut = CTimeSpan(0,0,0,30); |
87 | m_RetryTimeOut = CTimeSpan(0,0,0,10); | 93 | m_RetryTimeOut = CTimeSpan(0,0,0,10); |
88 | m_LogLength = 100; | 94 | m_LogLength = 100; |
89 | m_SpeakPort = 69; | 95 | m_SpeakPort = 69; |
90 | m_PromptTimeOut=30; | 96 | m_PromptTimeOut=30; |
91 | m_bShown=TRUE; | 97 | m_bShown=TRUE; |
92 | m_bExiting=FALSE; | 98 | m_bExiting=FALSE; |
93 | m_BlockSize=1024; | 99 | m_BlockSize=1024; |
94 | m_bnw.AssignSound("(bang)",IDR_WAVE_RING,CBellsNWhistles::CBang::bangResource); | 100 | m_bnw.AssignSound("(bang)",IDR_WAVE_RING,CBellsNWhistles::CBang::bangResource); |
95 | m_bnw.AssignSound("(done)",IDR_WAVE_FINISHED,CBellsNWhistles::CBang::bangResource); | 101 | m_bnw.AssignSound("(done)",IDR_WAVE_FINISHED,CBellsNWhistles::CBang::bangResource); |
96 | m_bnw.AssignSound("(oops)",IDR_WAVE_ABORTED,CBellsNWhistles::CBang::bangResource); | 102 | m_bnw.AssignSound("(oops)",IDR_WAVE_ABORTED,CBellsNWhistles::CBang::bangResource); |
97 | m_bnw.AssignSound("(none)",(int)0,CBellsNWhistles::CBang::bangNone); | 103 | m_bnw.AssignSound("(none)",(int)0,CBellsNWhistles::CBang::bangNone); |
98 | m_bnwRequest="(bang)"; m_bnwSuccess="(done)"; | 104 | m_bnwRequest="(bang)"; m_bnwSuccess="(done)"; |
99 | m_bnwAbort="(oops)"; | 105 | m_bnwAbort="(oops)"; |
100 | //{{AFX_DATA_INIT(CPumpKINDlg) | 106 | //{{AFX_DATA_INIT(CPumpKINDlg) |
101 | //}}AFX_DATA_INIT | 107 | //}}AFX_DATA_INIT |
102 | // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 | 108 | // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 |
103 | m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); | 109 | m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); |
104 | m_bmpBack.LoadBitmap(IDB_BACKGROUND); | 110 | m_bmpBack.LoadBitmap(IDB_BACKGROUND); |
105 | m_bmpBack.GetBitmap(&m_bitmapBack); | 111 | m_bmpBack.GetBitmap(&m_bitmapBack); |
106 | m_Retrier = new CRetrier(this); | 112 | m_Retrier = new CRetrier(this); |
107 | ASSERT(m_Retrier); | 113 | ASSERT(m_Retrier); |
108 | m_Trayer = new CTrayer(this); | 114 | m_Trayer = new CTrayer(this); |
109 | ASSERT(m_Trayer); | 115 | ASSERT(m_Trayer); |
116 | /* Ensure we're backwards compatible */ | ||
117 | ASSERT(CPumpKINDlg::rrqGiveAll==0); | ||
118 | ASSERT(CPumpKINDlg::rrqAlwaysConfirm==1); | ||
119 | ASSERT(CPumpKINDlg::rrqDenyAll==2); | ||
120 | ASSERT(CPumpKINDlg::wrqTakeAll==0); | ||
121 | ASSERT(CPumpKINDlg::wrqConfirmIfExists==1); | ||
122 | ASSERT(CPumpKINDlg::wrqAlwaysConfirm==2); | ||
123 | ASSERT(CPumpKINDlg::wrqDenyAll==3); | ||
124 | /* -- */ | ||
110 | LoadSettings(); | 125 | LoadSettings(); |
111 | } | 126 | } |
112 | 127 | ||
113 | void CPumpKINDlg::DoDataExchange(CDataExchange* pDX) | 128 | void CPumpKINDlg::DoDataExchange(CDataExchange* pDX) |
114 | { | 129 | { |
115 | CDialog::DoDataExchange(pDX); | 130 | CDialog::DoDataExchange(pDX); |
116 | //{{AFX_DATA_MAP(CPumpKINDlg) | 131 | //{{AFX_DATA_MAP(CPumpKINDlg) |
132 | DDX_Control(pDX, IDC_LISTENING, m_ListenCtl); | ||
117 | DDX_Control(pDX, IDC_ABORT, m_AbortCtl); | 133 | DDX_Control(pDX, IDC_ABORT, m_AbortCtl); |
118 | DDX_Control(pDX, IDC_OPTIONS, m_OptionsCtl); | 134 | DDX_Control(pDX, IDC_OPTIONS, m_OptionsCtl); |
119 | DDX_Control(pDX, IDC_LOG, m_Log); | 135 | DDX_Control(pDX, IDC_LOG, m_Log); |
120 | DDX_Control(pDX, IDC_CONNECTIONS, m_List); | 136 | DDX_Control(pDX, IDC_CONNECTIONS, m_List); |
121 | //}}AFX_DATA_MAP | 137 | //}}AFX_DATA_MAP |
122 | } | 138 | } |
123 | 139 | ||
124 | BEGIN_MESSAGE_MAP(CPumpKINDlg, CDialog) | 140 | BEGIN_MESSAGE_MAP(CPumpKINDlg, CDialog) |
125 | //{{AFX_MSG_MAP(CPumpKINDlg) | 141 | //{{AFX_MSG_MAP(CPumpKINDlg) |
126 | ON_WM_SYSCOMMAND() | 142 | ON_WM_SYSCOMMAND() |
127 | ON_WM_DESTROY() | 143 | ON_WM_DESTROY() |
128 | ON_WM_PAINT() | 144 | ON_WM_PAINT() |
129 | ON_WM_QUERYDRAGICON() | 145 | ON_WM_QUERYDRAGICON() |
130 | ON_WM_CREATE() | 146 | ON_WM_CREATE() |
131 | ON_BN_CLICKED(IDC_OPTIONS, OnOptions) | 147 | ON_BN_CLICKED(IDC_OPTIONS, OnOptions) |
132 | ON_WM_TIMER() | 148 | ON_WM_TIMER() |
@@ -138,32 +154,34 @@ BEGIN_MESSAGE_MAP(CPumpKINDlg, CDialog) | |||
138 | ON_NOTIFY(LVN_INSERTITEM, IDC_CONNECTIONS, OnInsertitemConnections) | 154 | ON_NOTIFY(LVN_INSERTITEM, IDC_CONNECTIONS, OnInsertitemConnections) |
139 | ON_NOTIFY(LVN_ITEMCHANGED, IDC_CONNECTIONS, OnItemchangedConnections) | 155 | ON_NOTIFY(LVN_ITEMCHANGED, IDC_CONNECTIONS, OnItemchangedConnections) |
140 | ON_BN_CLICKED(IDC_ABORT, OnAbort) | 156 | ON_BN_CLICKED(IDC_ABORT, OnAbort) |
141 | ON_WM_CLOSE() | 157 | ON_WM_CLOSE() |
142 | ON_COMMAND(ID_TRAY_SHOWPUMPKINWINDOW, OnTrayShowpumpkinwindow) | 158 | ON_COMMAND(ID_TRAY_SHOWPUMPKINWINDOW, OnTrayShowpumpkinwindow) |
143 | ON_COMMAND(ID_TRAY_EXIT, OnTrayExit) | 159 | ON_COMMAND(ID_TRAY_EXIT, OnTrayExit) |
144 | ON_COMMAND(ID_TRAY_ABOUTPUMPKIN, OnTrayAboutpumpkin) | 160 | ON_COMMAND(ID_TRAY_ABOUTPUMPKIN, OnTrayAboutpumpkin) |
145 | ON_COMMAND(ID_TRAY_FETCHFILE, OnTrayFetchfile) | 161 | ON_COMMAND(ID_TRAY_FETCHFILE, OnTrayFetchfile) |
146 | ON_COMMAND(ID_TRAY_HELP, OnTrayHelp) | 162 | ON_COMMAND(ID_TRAY_HELP, OnTrayHelp) |
147 | ON_COMMAND(ID_TRAY_OPTIONS, OnTrayOptions) | 163 | ON_COMMAND(ID_TRAY_OPTIONS, OnTrayOptions) |
148 | ON_COMMAND(ID_TRAY_SENDFILE, OnTraySendfile) | 164 | ON_COMMAND(ID_TRAY_SENDFILE, OnTraySendfile) |
149 | ON_WM_WINDOWPOSCHANGING() | 165 | ON_WM_WINDOWPOSCHANGING() |
150 | ON_LBN_SELCHANGE(IDC_LOG, OnSelchangeLog) | 166 | ON_LBN_SELCHANGE(IDC_LOG, OnSelchangeLog) |
151 | ON_COMMAND(ID_TRAY_OPENFILESFOLDER, OnTrayOpenfilesfolder) | 167 | ON_COMMAND(ID_TRAY_OPENFILESFOLDER, OnTrayOpenfilesfolder) |
152 | ON_WM_DROPFILES() | 168 | ON_WM_DROPFILES() |
153 | ON_BN_CLICKED(ID_HELP, OnHelp) | 169 | ON_BN_CLICKED(ID_HELP, OnHelp) |
170 | ON_BN_CLICKED(IDC_LISTENING, OnListening) | ||
171 | ON_COMMAND(ID_TRAY_LISTEN, OnTrayListen) | ||
154 | //}}AFX_MSG_MAP | 172 | //}}AFX_MSG_MAP |
155 | END_MESSAGE_MAP() | 173 | END_MESSAGE_MAP() |
156 | 174 | ||
157 | ///////////////////////////////////////////////////////////////////////////// | 175 | ///////////////////////////////////////////////////////////////////////////// |
158 | // CPumpKINDlg message handlers | 176 | // CPumpKINDlg message handlers |
159 | 177 | ||
160 | BOOL CPumpKINDlg::OnInitDialog() | 178 | BOOL CPumpKINDlg::OnInitDialog() |
161 | { | 179 | { |
162 | CDialog::OnInitDialog(); | 180 | CDialog::OnInitDialog(); |
163 | 181 | ||
164 | // Add "About..." menu item to system menu. | 182 | // Add "About..." menu item to system menu. |
165 | 183 | ||
166 | // IDM_ABOUTBOX must be in the system command range. | 184 | // IDM_ABOUTBOX must be in the system command range. |
167 | ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); | 185 | ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); |
168 | ASSERT(IDM_ABOUTBOX < 0xF000); | 186 | ASSERT(IDM_ABOUTBOX < 0xF000); |
169 | 187 | ||
@@ -204,32 +222,34 @@ CRect listrc; | |||
204 | m_List.InsertColumn(4,"tsize",LVCFMT_RIGHT,listrc.Width()/7,subitemTSize); | 222 | m_List.InsertColumn(4,"tsize",LVCFMT_RIGHT,listrc.Width()/7,subitemTSize); |
205 | 223 | ||
206 | LogLine(IDS_LOG_START); | 224 | LogLine(IDS_LOG_START); |
207 | 225 | ||
208 | SetupButtons(); | 226 | SetupButtons(); |
209 | 227 | ||
210 | CRect rc, drc; | 228 | CRect rc, drc; |
211 | GetWindowRect(rc); | 229 | GetWindowRect(rc); |
212 | GetDesktopWindow()->GetWindowRect(drc); | 230 | GetDesktopWindow()->GetWindowRect(drc); |
213 | SetWindowPos(NULL,drc.right-6-rc.Width(),6,0,0,SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOZORDER); | 231 | SetWindowPos(NULL,drc.right-6-rc.Width(),6,0,0,SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOZORDER); |
214 | 232 | ||
215 | if(m_bShown) | 233 | if(m_bShown) |
216 | ShowWindow(SW_SHOW); | 234 | ShowWindow(SW_SHOW); |
217 | else | 235 | else |
218 | ShowWindow(SW_HIDE); | 236 | ShowWindow(SW_HIDE); |
219 | 237 | ||
238 | m_ListenCtl.SetCheck(m_Listener.m_bListen?1:0); | ||
239 | |||
220 | // CG: The following block was added by the ToolTips component. | 240 | // CG: The following block was added by the ToolTips component. |
221 | { | 241 | { |
222 | // Create the ToolTip control. | 242 | // Create the ToolTip control. |
223 | m_tooltip.Create(this); | 243 | m_tooltip.Create(this); |
224 | m_tooltip.Activate(TRUE); | 244 | m_tooltip.Activate(TRUE); |
225 | 245 | ||
226 | m_tooltip.AddTool(&m_List,IDC_CONNECTIONS); | 246 | m_tooltip.AddTool(&m_List,IDC_CONNECTIONS); |
227 | m_tooltip.AddTool(GetDlgItem(IDC_PUT),IDC_PUT); | 247 | m_tooltip.AddTool(GetDlgItem(IDC_PUT),IDC_PUT); |
228 | m_tooltip.AddTool(GetDlgItem(IDC_GET),IDC_GET); | 248 | m_tooltip.AddTool(GetDlgItem(IDC_GET),IDC_GET); |
229 | m_tooltip.AddTool(&m_AbortCtl,IDC_ABORT); | 249 | m_tooltip.AddTool(&m_AbortCtl,IDC_ABORT); |
230 | m_tooltip.AddTool(GetDlgItem(IDC_OPTIONS),IDC_OPTIONS); | 250 | m_tooltip.AddTool(GetDlgItem(IDC_OPTIONS),IDC_OPTIONS); |
231 | m_tooltip.AddTool(GetDlgItem(IDC_EXIT),IDC_EXIT); | 251 | m_tooltip.AddTool(GetDlgItem(IDC_EXIT),IDC_EXIT); |
232 | m_tooltip.AddTool(GetDlgItem(ID_HELP),ID_HELP); | 252 | m_tooltip.AddTool(GetDlgItem(ID_HELP),ID_HELP); |
233 | m_tooltip.AddTool(GetDlgItem(IDC_LOG),IDC_LOG); | 253 | m_tooltip.AddTool(GetDlgItem(IDC_LOG),IDC_LOG); |
234 | } | 254 | } |
235 | return TRUE; // return TRUE unless you set the focus to a control | 255 | return TRUE; // return TRUE unless you set the focus to a control |
@@ -311,37 +331,36 @@ void CPumpKINDlg::OnPaint() | |||
311 | CDialog::OnPaint(); | 331 | CDialog::OnPaint(); |
312 | } | 332 | } |
313 | } | 333 | } |
314 | 334 | ||
315 | // The system calls this to obtain the cursor to display while the user drags | 335 | // The system calls this to obtain the cursor to display while the user drags |
316 | // the minimized window. | 336 | // the minimized window. |
317 | HCURSOR CPumpKINDlg::OnQueryDragIcon() | 337 | HCURSOR CPumpKINDlg::OnQueryDragIcon() |
318 | { | 338 | { |
319 | return (HCURSOR) m_hIcon; | 339 | return (HCURSOR) m_hIcon; |
320 | } | 340 | } |
321 | 341 | ||
322 | int CPumpKINDlg::OnCreate(LPCREATESTRUCT lpCreateStruct) | 342 | int CPumpKINDlg::OnCreate(LPCREATESTRUCT lpCreateStruct) |
323 | { | 343 | { |
324 | if (CDialog::OnCreate(lpCreateStruct) == -1) | 344 | if (CDialog::OnCreate(lpCreateStruct) == -1) |
325 | return -1; | 345 | return -1; |
326 | 346 | ||
327 | m_Listener.m_Daddy=this; | 347 | if(!m_Listener.SetListen(m_bListen)) { |
328 | if(!m_Listener.Create(m_ListenPort,SOCK_DGRAM)){ | 348 | m_bListen=FALSE; |
329 | TRACE0("Failed to create socket\n"); | 349 | TRACE0("Failed to create socket\n"); |
330 | AfxMessageBox(IDS_BOX_CANTBIND,MB_OK|MB_ICONEXCLAMATION); | 350 | AfxMessageBox(IDS_BOX_CANTBIND,MB_OK|MB_ICONEXCLAMATION); |
331 | return -1; | ||
332 | } | 351 | } |
333 | 352 | ||
334 | if(!m_Trayer->Create(NULL,"PumpKIN TrayIcon",WS_CHILD,CRect(0,0,0,0),this,0)){ | 353 | if(!m_Trayer->Create(NULL,"PumpKIN TrayIcon",WS_CHILD,CRect(0,0,0,0),this,0)){ |
335 | TRACE0("Failed to create trayer\n"); | 354 | TRACE0("Failed to create trayer\n"); |
336 | return -1; | 355 | return -1; |
337 | } | 356 | } |
338 | 357 | ||
339 | NOTIFYICONDATA nid; | 358 | NOTIFYICONDATA nid; |
340 | memset(&nid,0,sizeof(nid)); | 359 | memset(&nid,0,sizeof(nid)); |
341 | nid.cbSize=sizeof(nid); | 360 | nid.cbSize=sizeof(nid); |
342 | nid.hWnd=m_Trayer->m_hWnd; | 361 | nid.hWnd=m_Trayer->m_hWnd; |
343 | nid.uID=IDC_TRAYICON; | 362 | nid.uID=IDC_TRAYICON; |
344 | nid.uFlags=NIF_MESSAGE|NIF_ICON|NIF_TIP; | 363 | nid.uFlags=NIF_MESSAGE|NIF_ICON|NIF_TIP; |
345 | nid.uCallbackMessage=WM_TRAYICON; | 364 | nid.uCallbackMessage=WM_TRAYICON; |
346 | nid.hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME); | 365 | nid.hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME); |
347 | // *** Load from resource | 366 | // *** Load from resource |
@@ -651,43 +670,48 @@ CXferSocket::CXferSocket(CPumpKINDlg *daddy,LPCTSTR fileName,LPCTSTR type,SOCKAD | |||
651 | }else | 670 | }else |
652 | m_Peer.sin_addr.s_addr=INADDR_NONE; | 671 | m_Peer.sin_addr.s_addr=INADDR_NONE; |
653 | m_FileName=fileName; | 672 | m_FileName=fileName; |
654 | m_Type=type; | 673 | m_Type=type; |
655 | } | 674 | } |
656 | 675 | ||
657 | BOOL CRRQSocket::Create(LPCTSTR localFile,LPCTSTR hostName) | 676 | BOOL CRRQSocket::Create(LPCTSTR localFile,LPCTSTR hostName) |
658 | { | 677 | { |
659 | if(!CAsyncSocket::Create(0,SOCK_DGRAM)) | 678 | if(!CAsyncSocket::Create(0,SOCK_DGRAM)) |
660 | return FALSE; | 679 | return FALSE; |
661 | ASSERT(m_Daddy); | 680 | ASSERT(m_Daddy); |
662 | ASSERT(m_Peer.sin_addr.s_addr!=INADDR_NONE || hostName); | 681 | ASSERT(m_Peer.sin_addr.s_addr!=INADDR_NONE || hostName); |
663 | m_Daddy->m_Xfers[m_hSocket]=this; | 682 | m_Daddy->m_Xfers[m_hSocket]=this; |
664 | CString lFile = localFile?localFile:m_FileName; | 683 | CString lFile = localFile?localFile:m_FileName; |
665 | TurnSlashes(lFile,TRUE); | 684 | TurnSlashes(lFile,TRUE); |
666 | UpdateList(); | 685 | UpdateList(); |
667 | if(!localFile){// Check only if server | 686 | if(!localFile){// Check only for incoming requests |
668 | if(CheckBadRelativeness(m_FileName)){ | 687 | if(CheckBadRelativeness(m_FileName)){ |
669 | Deny(tftp::errAccessViolation,IDS_TFTP_ERROR_ACCESS); | 688 | Deny(tftp::errAccessViolation,IDS_TFTP_ERROR_ACCESS); |
670 | return TRUE; | 689 | return TRUE; |
671 | } | 690 | } |
672 | switch(m_Daddy->m_RRQMode){ | 691 | int atar=m_Daddy->m_aclRules.FindTarget(acl_rule::opRRQ,m_Peer.sin_addr.s_addr); |
692 | if(atar<0) | ||
693 | atar = m_Daddy->m_RRQMode; | ||
694 | switch(atar){ | ||
673 | case CPumpKINDlg::rrqGiveAll: | 695 | case CPumpKINDlg::rrqGiveAll: |
674 | break; | 696 | break; |
675 | case CPumpKINDlg::rrqAlwaysConfirm: | 697 | case CPumpKINDlg::rrqAlwaysConfirm: |
676 | if(ConfirmRequest()) | 698 | if(ConfirmRequest()) |
677 | break; | 699 | break; |
700 | default: | ||
701 | TRACE1("Unexpected access target: %d\n",atar); | ||
678 | case CPumpKINDlg::rrqDenyAll: | 702 | case CPumpKINDlg::rrqDenyAll: |
679 | Deny(tftp::errAccessViolation,IDS_TFTP_ERROR_ACCESS); | 703 | Deny(tftp::errAccessViolation,IDS_TFTP_ERROR_ACCESS); |
680 | return TRUE; | 704 | return TRUE; |
681 | } | 705 | } |
682 | } | 706 | } |
683 | CString fn = localFile?ApplyRootGently(lFile):ApplyRoot(lFile); | 707 | CString fn = localFile?ApplyRootGently(lFile):ApplyRoot(lFile); |
684 | CFileException e; | 708 | CFileException e; |
685 | if(!m_File.Open(fn,CFile::modeRead|CFile::shareDenyWrite,&e)){ | 709 | if(!m_File.Open(fn,CFile::modeRead|CFile::shareDenyWrite,&e)){ |
686 | if(localFile){ | 710 | if(localFile){ |
687 | CString tmp; | 711 | CString tmp; |
688 | tmp.Format(IDS_LOG_FAILEDLOCALFILE,fn); | 712 | tmp.Format(IDS_LOG_FAILEDLOCALFILE,fn); |
689 | m_Daddy->LogLine(tmp); | 713 | m_Daddy->LogLine(tmp); |
690 | return FALSE; | 714 | return FALSE; |
691 | } | 715 | } |
692 | Deny(&e); | 716 | Deny(&e); |
693 | return TRUE; | 717 | return TRUE; |
@@ -1094,33 +1118,33 @@ void CXferSocket::Destroy(BOOL success) | |||
1094 | TRACE0("Error closing file\n"); | 1118 | TRACE0("Error closing file\n"); |
1095 | }END_CATCH | 1119 | }END_CATCH |
1096 | } | 1120 | } |
1097 | ASSERT(m_Daddy); | 1121 | ASSERT(m_Daddy); |
1098 | m_Daddy->KillTimer(m_hSocket); | 1122 | m_Daddy->KillTimer(m_hSocket); |
1099 | m_Daddy->m_Xfers.RemoveKey(m_hSocket); | 1123 | m_Daddy->m_Xfers.RemoveKey(m_hSocket); |
1100 | LV_FINDINFO lvf; | 1124 | LV_FINDINFO lvf; |
1101 | memset(&lvf,0,sizeof(lvf)); | 1125 | memset(&lvf,0,sizeof(lvf)); |
1102 | lvf.flags=LVFI_PARAM; | 1126 | lvf.flags=LVFI_PARAM; |
1103 | lvf.lParam=(LPARAM)this; | 1127 | lvf.lParam=(LPARAM)this; |
1104 | int i = m_Daddy->m_List.FindItem(&lvf); | 1128 | int i = m_Daddy->m_List.FindItem(&lvf); |
1105 | if(i>=0) | 1129 | if(i>=0) |
1106 | m_Daddy->m_List.DeleteItem(i); | 1130 | m_Daddy->m_List.DeleteItem(i); |
1107 | delete this; | 1131 | delete this; |
1108 | } | 1132 | } |
1109 | 1133 | ||
1110 | void CPumpKINDlg::LogLine(LPCTSTR str) | 1134 | void CPumpKINDlg::LogLineToScreen(LPCTSTR str) |
1111 | { | 1135 | { |
1112 | ASSERT(m_LogLength); | 1136 | ASSERT(m_LogLength); |
1113 | while(m_Log.GetCount()>m_LogLength && m_Log.GetCount()!=LB_ERR){ | 1137 | while(m_Log.GetCount()>m_LogLength && m_Log.GetCount()!=LB_ERR){ |
1114 | CTime *t = (CTime*)m_Log.GetItemData(0); | 1138 | CTime *t = (CTime*)m_Log.GetItemData(0); |
1115 | if(((DWORD)t)!=LB_ERR){ | 1139 | if(((DWORD)t)!=LB_ERR){ |
1116 | ASSERT(t); | 1140 | ASSERT(t); |
1117 | m_LogTimes.RemoveKey(t); | 1141 | m_LogTimes.RemoveKey(t); |
1118 | delete t; | 1142 | delete t; |
1119 | } | 1143 | } |
1120 | m_Log.DeleteString(0); | 1144 | m_Log.DeleteString(0); |
1121 | } | 1145 | } |
1122 | int i = m_Log.AddString(str); | 1146 | int i = m_Log.AddString(str); |
1123 | ASSERT(i!=LB_ERR); | 1147 | ASSERT(i!=LB_ERR); |
1124 | CTime *t = new CTime(CTime::GetCurrentTime()); | 1148 | CTime *t = new CTime(CTime::GetCurrentTime()); |
1125 | m_Log.SetItemData(i,(DWORD)(m_LogTimes[t]=t)); | 1149 | m_Log.SetItemData(i,(DWORD)(m_LogTimes[t]=t)); |
1126 | m_Log.SetCurSel(i); | 1150 | m_Log.SetCurSel(i); |
@@ -1150,66 +1174,76 @@ CString rv = m_Daddy->m_TFTPRoot; | |||
1150 | if(rv.IsEmpty()) | 1174 | if(rv.IsEmpty()) |
1151 | rv = "."; | 1175 | rv = "."; |
1152 | if(rv[rv.GetLength()-1]!='\\') | 1176 | if(rv[rv.GetLength()-1]!='\\') |
1153 | rv+="\\"; | 1177 | rv+="\\"; |
1154 | while((!fn.IsEmpty()) && fn[0]=='\\') | 1178 | while((!fn.IsEmpty()) && fn[0]=='\\') |
1155 | fn=fn.Mid(1); | 1179 | fn=fn.Mid(1); |
1156 | rv+=fn; | 1180 | rv+=fn; |
1157 | return rv; | 1181 | return rv; |
1158 | } | 1182 | } |
1159 | 1183 | ||
1160 | void CPumpKINDlg::OnOptions() | 1184 | void CPumpKINDlg::OnOptions() |
1161 | { | 1185 | { |
1162 | CPropertySheet cps(IDS_TITLE_OPTIONS,this); | 1186 | CPropertySheet cps(IDS_TITLE_OPTIONS,this); |
1163 | CPropsServer server; | 1187 | CPropsServer server; |
1164 | CPropsNetwork network; | 1188 | CPropsNetwork network; |
1165 | CPropsSounds sounds; | 1189 | CPropsSounds sounds; |
1190 | CPropsACL acl; | ||
1166 | 1191 | ||
1167 | server.m_RRQMode=m_RRQMode; | 1192 | server.m_RRQMode=m_RRQMode; |
1168 | server.m_TFTPRoot=m_TFTPRoot; | 1193 | server.m_TFTPRoot=m_TFTPRoot; |
1169 | server.m_TFTPSubdirs=m_bTFTPSubdirs; | 1194 | server.m_TFTPSubdirs=m_bTFTPSubdirs; |
1170 | server.m_WRQMode=m_WRQMode; | 1195 | server.m_WRQMode=m_WRQMode; |
1171 | server.m_PromptTimeOut=m_PromptTimeOut; | 1196 | server.m_PromptTimeOut=m_PromptTimeOut; |
1197 | server.m_LogFile=m_LogFile; | ||
1172 | 1198 | ||
1173 | network.m_ListenPort=m_ListenPort; | 1199 | network.m_ListenPort=m_ListenPort; |
1174 | network.m_SpeakPort=m_SpeakPort; | 1200 | network.m_SpeakPort=m_SpeakPort; |
1175 | network.m_TimeOut=m_TFTPTimeOut.GetTotalSeconds(); | 1201 | network.m_TimeOut=m_TFTPTimeOut.GetTotalSeconds(); |
1176 | network.m_BlockSize=m_BlockSize; | 1202 | network.m_BlockSize=m_BlockSize; |
1177 | 1203 | ||
1178 | sounds.m_Request = m_bnwRequest; | 1204 | sounds.m_Request = m_bnwRequest; |
1179 | sounds.m_Success = m_bnwSuccess; | 1205 | sounds.m_Success = m_bnwSuccess; |
1180 | sounds.m_Abort = m_bnwAbort; | 1206 | sounds.m_Abort = m_bnwAbort; |
1181 | 1207 | ||
1208 | acl.m_rulist = m_aclRules; | ||
1209 | |||
1182 | cps.AddPage(&server); | 1210 | cps.AddPage(&server); |
1183 | cps.AddPage(&network); | 1211 | cps.AddPage(&network); |
1184 | cps.AddPage(&sounds); | 1212 | cps.AddPage(&sounds); |
1213 | cps.AddPage(&acl); | ||
1185 | if(cps.DoModal()==IDOK){ | 1214 | if(cps.DoModal()==IDOK){ |
1186 | m_RRQMode=server.m_RRQMode; | 1215 | m_RRQMode=server.m_RRQMode; |
1187 | m_TFTPRoot=server.m_TFTPRoot; | 1216 | m_TFTPRoot=server.m_TFTPRoot; |
1188 | m_bTFTPSubdirs=server.m_TFTPSubdirs; | 1217 | m_bTFTPSubdirs=server.m_TFTPSubdirs; |
1189 | m_WRQMode=server.m_WRQMode; | 1218 | m_WRQMode=server.m_WRQMode; |
1190 | m_PromptTimeOut=server.m_PromptTimeOut; | 1219 | m_PromptTimeOut=server.m_PromptTimeOut; |
1220 | m_LogFile=server.m_LogFile; | ||
1191 | 1221 | ||
1192 | m_ListenPort=network.m_ListenPort; | 1222 | m_ListenPort=network.m_ListenPort; |
1193 | m_SpeakPort=network.m_SpeakPort; | 1223 | m_SpeakPort=network.m_SpeakPort; |
1194 | m_TFTPTimeOut=CTimeSpan(network.m_TimeOut); | 1224 | m_TFTPTimeOut=CTimeSpan(network.m_TimeOut); |
1195 | m_BlockSize=network.m_BlockSize; | 1225 | m_BlockSize=network.m_BlockSize; |
1196 | 1226 | ||
1197 | m_bnwRequest = sounds.m_Request; | 1227 | m_bnwRequest = sounds.m_Request; |
1198 | m_bnwSuccess = sounds.m_Success; | 1228 | m_bnwSuccess = sounds.m_Success; |
1199 | m_bnwAbort = sounds.m_Abort; | 1229 | m_bnwAbort = sounds.m_Abort; |
1230 | |||
1231 | m_aclRules = acl.m_rulist; | ||
1232 | |||
1233 | m_lastlogerr.Empty(); | ||
1200 | } | 1234 | } |
1201 | } | 1235 | } |
1202 | 1236 | ||
1203 | BOOL CRRQSocket::ConfirmRequest() | 1237 | BOOL CRRQSocket::ConfirmRequest() |
1204 | { | 1238 | { |
1205 | CConfirmRRQDlg cd(NULL); | 1239 | CConfirmRRQDlg cd(NULL); |
1206 | cd.m_Daddy=this; | 1240 | cd.m_Daddy=this; |
1207 | cd.m_File=m_FileName; | 1241 | cd.m_File=m_FileName; |
1208 | cd.m_Host=inet_ntoa(m_Peer.sin_addr); | 1242 | cd.m_Host=inet_ntoa(m_Peer.sin_addr); |
1209 | if(cd.DoModal()==IDOK) | 1243 | if(cd.DoModal()==IDOK) |
1210 | return TRUE; | 1244 | return TRUE; |
1211 | return FALSE; | 1245 | return FALSE; |
1212 | } | 1246 | } |
1213 | 1247 | ||
1214 | CWRQSocket::CWRQSocket(CPumpKINDlg* daddy,LPCTSTR fileName,LPCTSTR type,SOCKADDR_IN *sin) | 1248 | CWRQSocket::CWRQSocket(CPumpKINDlg* daddy,LPCTSTR fileName,LPCTSTR type,SOCKADDR_IN *sin) |
1215 | : CXferSocket(daddy,fileName,type,sin) | 1249 | : CXferSocket(daddy,fileName,type,sin) |
@@ -1231,56 +1265,60 @@ BOOL CWRQSocket::Create(LPCTSTR localFile,LPCTSTR hostName) | |||
1231 | CString lf; | 1265 | CString lf; |
1232 | if(!localFile) { | 1266 | if(!localFile) { |
1233 | lf = m_FileName; | 1267 | lf = m_FileName; |
1234 | TurnSlashes(lf,TRUE); | 1268 | TurnSlashes(lf,TRUE); |
1235 | } | 1269 | } |
1236 | CString fn = localFile?ApplyRootGently(localFile):ApplyRoot(lf); | 1270 | CString fn = localFile?ApplyRootGently(localFile):ApplyRoot(lf); |
1237 | if(!localFile){// This is an incoming request.. | 1271 | if(!localFile){// This is an incoming request.. |
1238 | if(CheckBadRelativeness(m_FileName)){ | 1272 | if(CheckBadRelativeness(m_FileName)){ |
1239 | Deny(tftp::errAccessViolation,IDS_TFTP_ERROR_ACCESS); | 1273 | Deny(tftp::errAccessViolation,IDS_TFTP_ERROR_ACCESS); |
1240 | return TRUE; | 1274 | return TRUE; |
1241 | } | 1275 | } |
1242 | BOOL exists; | 1276 | BOOL exists; |
1243 | if(!_access((LPCTSTR)fn,0)) | 1277 | if(!_access((LPCTSTR)fn,0)) |
1244 | m_Rename=exists=TRUE; | 1278 | m_Rename=exists=TRUE; |
1245 | else | 1279 | else |
1246 | m_Rename=exists=FALSE; | 1280 | m_Rename=exists=FALSE; |
1247 | // *** m_WRQMode only if server transfer | 1281 | int atar=m_Daddy->m_aclRules.FindTarget(acl_rule::opWRQ,m_Peer.sin_addr.s_addr); |
1248 | switch(m_Daddy->m_WRQMode){ | 1282 | if(atar<0) |
1283 | atar=m_Daddy->m_WRQMode; | ||
1284 | switch(atar){ | ||
1249 | case CPumpKINDlg::wrqTakeAll: | 1285 | case CPumpKINDlg::wrqTakeAll: |
1250 | if(exists){ | 1286 | if(exists){ |
1251 | if(!RenameFile(fn)){ | 1287 | if(!RenameFile(fn)){ |
1252 | Deny(tftp::errDiskFull,IDS_TFTP_ERROR_FAILEDTORENAME); | 1288 | Deny(tftp::errDiskFull,IDS_TFTP_ERROR_FAILEDTORENAME); |
1253 | return TRUE; | 1289 | return TRUE; |
1254 | } | 1290 | } |
1255 | } | 1291 | } |
1256 | break; | 1292 | break; |
1257 | case CPumpKINDlg::wrqConfirmIfExists: | 1293 | case CPumpKINDlg::wrqConfirmIfExists: |
1258 | if(!exists) | 1294 | if(!exists) |
1259 | break; | 1295 | break; |
1260 | case CPumpKINDlg::wrqAlwaysConfirm: | 1296 | case CPumpKINDlg::wrqAlwaysConfirm: |
1261 | if(exists) | 1297 | if(exists) |
1262 | m_bResume=TRUE; | 1298 | m_bResume=TRUE; |
1263 | if(ConfirmRequest()){ | 1299 | if(ConfirmRequest()){ |
1264 | if(m_Rename){ | 1300 | if(m_Rename){ |
1265 | RenameFile(fn); | 1301 | RenameFile(fn); |
1266 | if(SaveAs(fn)) | 1302 | if(SaveAs(fn)) |
1267 | break; | 1303 | break; |
1268 | }else | 1304 | }else |
1269 | break; | 1305 | break; |
1270 | } | 1306 | } |
1307 | default: | ||
1308 | TRACE1("Unexpected access target: %d\n",atar); | ||
1271 | case CPumpKINDlg::wrqDenyAll: | 1309 | case CPumpKINDlg::wrqDenyAll: |
1272 | Deny(tftp::errAccessViolation,IDS_TFTP_ERROR_ACCESS); | 1310 | Deny(tftp::errAccessViolation,IDS_TFTP_ERROR_ACCESS); |
1273 | return TRUE; | 1311 | return TRUE; |
1274 | } | 1312 | } |
1275 | } | 1313 | } |
1276 | CFileException e; | 1314 | CFileException e; |
1277 | if(!m_File.Open( | 1315 | if(!m_File.Open( |
1278 | fn, | 1316 | fn, |
1279 | m_bResume | 1317 | m_bResume |
1280 | ?(CFile::modeWrite|CFile::shareDenyWrite) | 1318 | ?(CFile::modeWrite|CFile::shareDenyWrite) |
1281 | :(CFile::modeCreate|CFile::modeWrite|CFile::shareDenyWrite), | 1319 | :(CFile::modeCreate|CFile::modeWrite|CFile::shareDenyWrite), |
1282 | &e | 1320 | &e |
1283 | )){ | 1321 | )){ |
1284 | if(localFile){// Outgoing request | 1322 | if(localFile){// Outgoing request |
1285 | CString tmp; | 1323 | CString tmp; |
1286 | tmp.Format(IDS_LOG_FAILEDTOOPEN,fn); | 1324 | tmp.Format(IDS_LOG_FAILEDTOOPEN,fn); |
@@ -1782,74 +1820,80 @@ void CPumpKINDlg::OnTrayHelp() | |||
1782 | } | 1820 | } |
1783 | 1821 | ||
1784 | void CPumpKINDlg::OnTrayOptions() | 1822 | void CPumpKINDlg::OnTrayOptions() |
1785 | { | 1823 | { |
1786 | OnOptions(); | 1824 | OnOptions(); |
1787 | } | 1825 | } |
1788 | 1826 | ||
1789 | void CPumpKINDlg::OnTraySendfile() | 1827 | void CPumpKINDlg::OnTraySendfile() |
1790 | { | 1828 | { |
1791 | OnPut(); | 1829 | OnPut(); |
1792 | } | 1830 | } |
1793 | 1831 | ||
1794 | void CPumpKINDlg::LoadSettings() | 1832 | void CPumpKINDlg::LoadSettings() |
1795 | { | 1833 | { |
1796 | CWinApp *app = AfxGetApp(); | 1834 | CWinApp *app = AfxGetApp(); |
1797 | ASSERT(app); | 1835 | ASSERT(app); |
1836 | m_bListen=app->GetProfileInt("TFTPSettings","Listen",m_bListen); | ||
1798 | m_bnwRequest=app->GetProfileString("BellsNWhistles","Request",m_bnwRequest); | 1837 | m_bnwRequest=app->GetProfileString("BellsNWhistles","Request",m_bnwRequest); |
1799 | m_bnwSuccess=app->GetProfileString("BellsNWhistles","Success",m_bnwSuccess); | 1838 | m_bnwSuccess=app->GetProfileString("BellsNWhistles","Success",m_bnwSuccess); |
1800 | m_bnwAbort=app->GetProfileString("BellsNWhistles","Abort",m_bnwAbort); | 1839 | m_bnwAbort=app->GetProfileString("BellsNWhistles","Abort",m_bnwAbort); |
1801 | m_bTFTPSubdirs=app->GetProfileInt("TFTPSettings","Subdirs",m_bTFTPSubdirs); | 1840 | m_bTFTPSubdirs=app->GetProfileInt("TFTPSettings","Subdirs",m_bTFTPSubdirs); |
1802 | m_ListenPort=app->GetProfileInt("TFTPSettings","ListenPort",m_ListenPort); | 1841 | m_ListenPort=app->GetProfileInt("TFTPSettings","ListenPort",m_ListenPort); |
1803 | m_LogLength=app->GetProfileInt("UISettings","LogLength",m_LogLength); | 1842 | m_LogLength=app->GetProfileInt("UISettings","LogLength",m_LogLength); |
1804 | m_PromptTimeOut=app->GetProfileInt("UISettings","PromptTimeout",m_PromptTimeOut); | 1843 | m_PromptTimeOut=app->GetProfileInt("UISettings","PromptTimeout",m_PromptTimeOut); |
1805 | m_RRQMode=app->GetProfileInt("TFTPSettings","RRQMode",m_RRQMode); | 1844 | m_RRQMode=app->GetProfileInt("TFTPSettings","RRQMode",m_RRQMode); |
1806 | m_SpeakPort=app->GetProfileInt("TFTPSettings","SpeakPort",m_SpeakPort); | 1845 | m_SpeakPort=app->GetProfileInt("TFTPSettings","SpeakPort",m_SpeakPort); |
1807 | m_TFTPRoot=app->GetProfileString("TFTPSettings","TFTPRoot",m_TFTPRoot); | 1846 | m_TFTPRoot=app->GetProfileString("TFTPSettings","TFTPRoot",m_TFTPRoot); |
1847 | m_LogFile=app->GetProfileString("General","LogFile",m_LogFile); | ||
1808 | m_TFTPTimeOut=CTimeSpan(app->GetProfileInt("TFTPSettings","TFTPTimeout",m_TFTPTimeOut.GetTotalSeconds())); | 1848 | m_TFTPTimeOut=CTimeSpan(app->GetProfileInt("TFTPSettings","TFTPTimeout",m_TFTPTimeOut.GetTotalSeconds())); |
1809 | m_BlockSize=app->GetProfileInt("TFTPSettings","TFTPBlockSize",m_BlockSize); | 1849 | m_BlockSize=app->GetProfileInt("TFTPSettings","TFTPBlockSize",m_BlockSize); |
1810 | m_RetryTimeOut=CTimeSpan(app->GetProfileInt("TFTPSettings","RetryTimeout",m_RetryTimeOut.GetTotalSeconds())); | 1850 | m_RetryTimeOut=CTimeSpan(app->GetProfileInt("TFTPSettings","RetryTimeout",m_RetryTimeOut.GetTotalSeconds())); |
1811 | m_WRQMode=app->GetProfileInt("TFTPSettings","WRQMode",m_WRQMode); | 1851 | m_WRQMode=app->GetProfileInt("TFTPSettings","WRQMode",m_WRQMode); |
1812 | m_bShown=app->GetProfileInt("UISettings","Visble",m_bShown); | 1852 | m_bShown=app->GetProfileInt("UISettings","Visble",m_bShown); |
1813 | if(m_TFTPRoot.IsEmpty()){ | 1853 | if(m_TFTPRoot.IsEmpty()){ |
1814 | DWORD dL = ::GetCurrentDirectory(0,NULL); | 1854 | DWORD dL = ::GetCurrentDirectory(0,NULL); |
1815 | VERIFY(::GetCurrentDirectory(dL,m_TFTPRoot.GetBuffer(dL))); | 1855 | VERIFY(::GetCurrentDirectory(dL,m_TFTPRoot.GetBuffer(dL))); |
1816 | m_TFTPRoot.ReleaseBuffer(); | 1856 | m_TFTPRoot.ReleaseBuffer(); |
1817 | } | 1857 | } |
1818 | ::SetCurrentDirectory(m_TFTPRoot); | 1858 | ::SetCurrentDirectory(m_TFTPRoot); |
1859 | m_aclRules.LoadProfile(app); | ||
1819 | } | 1860 | } |
1820 | 1861 | ||
1821 | void CPumpKINDlg::SaveSettings() | 1862 | void CPumpKINDlg::SaveSettings() |
1822 | { | 1863 | { |
1823 | CWinApp *app = AfxGetApp(); | 1864 | CWinApp *app = AfxGetApp(); |
1824 | ASSERT(app); | 1865 | ASSERT(app); |
1866 | app->WriteProfileInt("TFTPSettings","Listen",m_bListen); | ||
1825 | app->WriteProfileString("BellsNWhistles","Request",m_bnwRequest); | 1867 | app->WriteProfileString("BellsNWhistles","Request",m_bnwRequest); |
1826 | app->WriteProfileString("BellsNWhistles","Success",m_bnwSuccess); | 1868 | app->WriteProfileString("BellsNWhistles","Success",m_bnwSuccess); |
1827 | app->WriteProfileString("BellsNWhistles","Abort",m_bnwAbort); | 1869 | app->WriteProfileString("BellsNWhistles","Abort",m_bnwAbort); |
1828 | app->WriteProfileInt("TFTPSettings","Subdirs",m_bTFTPSubdirs); | 1870 | app->WriteProfileInt("TFTPSettings","Subdirs",m_bTFTPSubdirs); |
1829 | app->WriteProfileInt("TFTPSettings","ListenPort",m_ListenPort); | 1871 | app->WriteProfileInt("TFTPSettings","ListenPort",m_ListenPort); |
1830 | app->WriteProfileInt("UISettings","LogLength",m_LogLength); | 1872 | app->WriteProfileInt("UISettings","LogLength",m_LogLength); |
1831 | app->WriteProfileInt("UISettings","PromptTimeout",m_PromptTimeOut); | 1873 | app->WriteProfileInt("UISettings","PromptTimeout",m_PromptTimeOut); |
1832 | app->WriteProfileInt("TFTPSettings","RRQMode",m_RRQMode); | 1874 | app->WriteProfileInt("TFTPSettings","RRQMode",m_RRQMode); |
1833 | app->WriteProfileInt("TFTPSettings","SpeakPort",m_SpeakPort); | 1875 | app->WriteProfileInt("TFTPSettings","SpeakPort",m_SpeakPort); |
1834 | app->WriteProfileString("TFTPSettings","TFTPRoot",m_TFTPRoot); | 1876 | app->WriteProfileString("TFTPSettings","TFTPRoot",m_TFTPRoot); |
1877 | app->WriteProfileString("General","LogFile",m_LogFile); | ||
1835 | app->WriteProfileInt("TFTPSettings","TFTPTimeout",m_TFTPTimeOut.GetTotalSeconds()); | 1878 | app->WriteProfileInt("TFTPSettings","TFTPTimeout",m_TFTPTimeOut.GetTotalSeconds()); |
1836 | app->WriteProfileInt("TFTPSettings","TFTPBlockSize",m_BlockSize); | 1879 | app->WriteProfileInt("TFTPSettings","TFTPBlockSize",m_BlockSize); |
1837 | app->WriteProfileInt("TFTPSettings","RetryTimeout",m_RetryTimeOut.GetTotalSeconds()); | 1880 | app->WriteProfileInt("TFTPSettings","RetryTimeout",m_RetryTimeOut.GetTotalSeconds()); |
1838 | app->WriteProfileInt("TFTPSettings","WRQMode",m_WRQMode); | 1881 | app->WriteProfileInt("TFTPSettings","WRQMode",m_WRQMode); |
1839 | app->WriteProfileInt("UISettings","Visble",m_bShown); | 1882 | app->WriteProfileInt("UISettings","Visble",m_bShown); |
1883 | m_aclRules.SaveProfile(app); | ||
1840 | } | 1884 | } |
1841 | 1885 | ||
1842 | void CPumpKINDlg::OnWindowPosChanging(WINDOWPOS FAR* lpwndpos) | 1886 | void CPumpKINDlg::OnWindowPosChanging(WINDOWPOS FAR* lpwndpos) |
1843 | { | 1887 | { |
1844 | CDialog::OnWindowPosChanging(lpwndpos); | 1888 | CDialog::OnWindowPosChanging(lpwndpos); |
1845 | if(!m_bExiting){ | 1889 | if(!m_bExiting){ |
1846 | if(m_bShown){ | 1890 | if(m_bShown){ |
1847 | lpwndpos->flags&=~SWP_HIDEWINDOW; | 1891 | lpwndpos->flags&=~SWP_HIDEWINDOW; |
1848 | lpwndpos->flags|=SWP_SHOWWINDOW; | 1892 | lpwndpos->flags|=SWP_SHOWWINDOW; |
1849 | }else{ | 1893 | }else{ |
1850 | lpwndpos->flags&=~SWP_SHOWWINDOW; | 1894 | lpwndpos->flags&=~SWP_SHOWWINDOW; |
1851 | lpwndpos->flags|=SWP_HIDEWINDOW; | 1895 | lpwndpos->flags|=SWP_HIDEWINDOW; |
1852 | if(::GetForegroundWindow()==m_hWnd && (m_Trayer && !m_Trayer->m_inMenu)) | 1896 | if(::GetForegroundWindow()==m_hWnd && (m_Trayer && !m_Trayer->m_inMenu)) |
1853 | GetDesktopWindow()->SetForegroundWindow(); | 1897 | GetDesktopWindow()->SetForegroundWindow(); |
1854 | } | 1898 | } |
1855 | } | 1899 | } |
@@ -1971,16 +2015,65 @@ tftp* rv = Allocate(src->length); | |||
1971 | ASSERT(rv); | 2015 | ASSERT(rv); |
1972 | memmove(rv,src,tftpSlackSize+src->length); | 2016 | memmove(rv,src,tftpSlackSize+src->length); |
1973 | return rv; | 2017 | return rv; |
1974 | } | 2018 | } |
1975 | 2019 | ||
1976 | void CXferSocket::SetTry(tftp *p) | 2020 | void CXferSocket::SetTry(tftp *p) |
1977 | { | 2021 | { |
1978 | if(m_Retry) | 2022 | if(m_Retry) |
1979 | delete m_Retry; | 2023 | delete m_Retry; |
1980 | m_Retry=p?tftp::Copy(p):NULL; | 2024 | m_Retry=p?tftp::Copy(p):NULL; |
1981 | } | 2025 | } |
1982 | 2026 | ||
1983 | void CPumpKINDlg::OnHelp() | 2027 | void CPumpKINDlg::OnHelp() |
1984 | { | 2028 | { |
1985 | AfxGetApp()->WinHelp(0,HELP_FINDER); | 2029 | AfxGetApp()->WinHelp(0,HELP_FINDER); |
1986 | } | 2030 | } |
2031 | |||
2032 | BOOL CListenSocket::SetListen(BOOL b) { | ||
2033 | ASSERT(m_Daddy); | ||
2034 | if(b==m_bListen) | ||
2035 | return TRUE; | ||
2036 | if(b) { | ||
2037 | if(!Create(m_Daddy->m_ListenPort,SOCK_DGRAM)) | ||
2038 | return FALSE; | ||
2039 | return m_bListen=TRUE; | ||
2040 | }else{ | ||
2041 | Close(); m_bListen=FALSE; | ||
2042 | return TRUE; | ||
2043 | } | ||
2044 | } | ||
2045 | |||
2046 | void CPumpKINDlg::OnListening() | ||
2047 | { | ||
2048 | if(!m_Listener.SetListen(m_ListenCtl.GetCheck()==1)) { | ||
2049 | TRACE0("Failed to create socket\n"); | ||
2050 | AfxMessageBox(IDS_BOX_CANTBIND,MB_OK|MB_ICONEXCLAMATION); | ||
2051 | } | ||
2052 | m_ListenCtl.SetCheck(m_Listener.m_bListen?1:0); | ||
2053 | m_bListen=m_Listener.m_bListen; | ||
2054 | } | ||
2055 | |||
2056 | void CPumpKINDlg::OnTrayListen() | ||
2057 | { | ||
2058 | if(!m_Listener.SetListen(!m_Listener.m_bListen)) { | ||
2059 | TRACE0("Failed to create socket\n"); | ||
2060 | AfxMessageBox(IDS_BOX_CANTBIND,MB_OK|MB_ICONEXCLAMATION); | ||
2061 | } | ||
2062 | m_ListenCtl.SetCheck(m_Listener.m_bListen?1:0); | ||
2063 | m_bListen=m_Listener.m_bListen; | ||
2064 | } | ||
2065 | |||
2066 | void CPumpKINDlg::LogLine(LPCTSTR str) | ||
2067 | { | ||
2068 | LogLineToScreen(str); | ||
2069 | if(!m_LogFile.IsEmpty()) { | ||
2070 | if(!Klever::LogRecord((LPCTSTR)m_LogFile,str)) { | ||
2071 | if(m_lastlogerr!=m_LogFile) { | ||
2072 | CString tmp; | ||
2073 | tmp.Format(IDS_LOG_LOGERROR,m_LogFile); | ||
2074 | LogLineToScreen(tmp); | ||
2075 | m_lastlogerr=m_LogFile; | ||
2076 | } | ||
2077 | } | ||
2078 | } | ||
2079 | } | ||