-rw-r--r-- | PumpKINDlg.cpp | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/PumpKINDlg.cpp b/PumpKINDlg.cpp index bb15211..f41b69f 100644 --- a/PumpKINDlg.cpp +++ b/PumpKINDlg.cpp | |||
@@ -83,33 +83,33 @@ CPumpKINDlg::CPumpKINDlg(CWnd* pParent /*=NULL*/) | |||
83 | { | 83 | { |
84 | m_Listener.m_Daddy = this; | 84 | m_Listener.m_Daddy = this; |
85 | 85 | ||
86 | m_bListen = TRUE; | 86 | m_bListen = TRUE; |
87 | 87 | ||
88 | m_ListenPort = 69; | 88 | m_ListenPort = 69; |
89 | m_bTFTPSubdirs = TRUE; | 89 | m_bTFTPSubdirs = TRUE; |
90 | m_RRQMode = rrqAlwaysConfirm; | 90 | m_RRQMode = rrqAlwaysConfirm; |
91 | m_WRQMode = wrqAlwaysConfirm; | 91 | m_WRQMode = wrqAlwaysConfirm; |
92 | m_TFTPTimeOut = CTimeSpan(0,0,0,30); | 92 | m_TFTPTimeOut = CTimeSpan(0,0,0,30); |
93 | m_RetryTimeOut = CTimeSpan(0,0,0,10); | 93 | m_RetryTimeOut = CTimeSpan(0,0,0,10); |
94 | m_LogLength = 100; | 94 | m_LogLength = 100; |
95 | m_SpeakPort = 69; | 95 | m_SpeakPort = 69; |
96 | m_PromptTimeOut=30; | 96 | m_PromptTimeOut=30; |
97 | m_bShown=TRUE; | 97 | m_bShown=TRUE; |
98 | m_bExiting=FALSE; | 98 | m_bExiting=FALSE; |
99 | m_BlockSize=1024; | 99 | m_BlockSize=2048; |
100 | m_bnw.AssignSound("(bang)",IDR_WAVE_RING,CBellsNWhistles::CBang::bangResource); | 100 | m_bnw.AssignSound("(bang)",IDR_WAVE_RING,CBellsNWhistles::CBang::bangResource); |
101 | m_bnw.AssignSound("(done)",IDR_WAVE_FINISHED,CBellsNWhistles::CBang::bangResource); | 101 | m_bnw.AssignSound("(done)",IDR_WAVE_FINISHED,CBellsNWhistles::CBang::bangResource); |
102 | m_bnw.AssignSound("(oops)",IDR_WAVE_ABORTED,CBellsNWhistles::CBang::bangResource); | 102 | m_bnw.AssignSound("(oops)",IDR_WAVE_ABORTED,CBellsNWhistles::CBang::bangResource); |
103 | m_bnw.AssignSound("(none)",(int)0,CBellsNWhistles::CBang::bangNone); | 103 | m_bnw.AssignSound("(none)",(int)0,CBellsNWhistles::CBang::bangNone); |
104 | m_bnwRequest="(bang)"; m_bnwSuccess="(done)"; | 104 | m_bnwRequest="(bang)"; m_bnwSuccess="(done)"; |
105 | m_bnwAbort="(oops)"; | 105 | m_bnwAbort="(oops)"; |
106 | //{{AFX_DATA_INIT(CPumpKINDlg) | 106 | //{{AFX_DATA_INIT(CPumpKINDlg) |
107 | //}}AFX_DATA_INIT | 107 | //}}AFX_DATA_INIT |
108 | // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 | 108 | // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 |
109 | m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); | 109 | m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); |
110 | m_bmpBack.LoadBitmap(IDB_BACKGROUND); | 110 | m_bmpBack.LoadBitmap(IDB_BACKGROUND); |
111 | m_bmpBack.GetBitmap(&m_bitmapBack); | 111 | m_bmpBack.GetBitmap(&m_bitmapBack); |
112 | m_Retrier = new CRetrier(this); | 112 | m_Retrier = new CRetrier(this); |
113 | ASSERT(m_Retrier); | 113 | ASSERT(m_Retrier); |
114 | m_Trayer = new CTrayer(this); | 114 | m_Trayer = new CTrayer(this); |
115 | ASSERT(m_Trayer); | 115 | ASSERT(m_Trayer); |
@@ -1020,32 +1020,36 @@ BOOL CWRQSocket::OnTFTP(tftp* p) | |||
1020 | m_blkSize=atoi(v); | 1020 | m_blkSize=atoi(v); |
1021 | if(!m_blkSize){// *** More sanity checks | 1021 | if(!m_blkSize){// *** More sanity checks |
1022 | Deny(tftp::errOption,IDS_TFTP_ERROR_BSIZE); | 1022 | Deny(tftp::errOption,IDS_TFTP_ERROR_BSIZE); |
1023 | return TRUE; | 1023 | return TRUE; |
1024 | } | 1024 | } |
1025 | } | 1025 | } |
1026 | if(o.Lookup(tftpoTOut,v)){ | 1026 | if(o.Lookup(tftpoTOut,v)){ |
1027 | m_timeOut=atoi(v); | 1027 | m_timeOut=atoi(v); |
1028 | if(!m_timeOut){// *** More sanity checks | 1028 | if(!m_timeOut){// *** More sanity checks |
1029 | Deny(tftp::errOption,IDS_TFTP_ERROR_TOUT); | 1029 | Deny(tftp::errOption,IDS_TFTP_ERROR_TOUT); |
1030 | return TRUE; | 1030 | return TRUE; |
1031 | } | 1031 | } |
1032 | } | 1032 | } |
1033 | if(o.Lookup(tftpoTSize,v)){ | 1033 | if(o.Lookup(tftpoTSize,v)){ |
1034 | m_xferSize=atoi(v); | 1034 | m_xferSize=atoi(v); |
1035 | } | 1035 | } |
1036 | if(m_xferSize>=0 && m_xferSize>=(m_blkSize<<16)) { | ||
1037 | Deny(tftp::errUndefined,IDS_TFTP_ERROR_TOOBIG); | ||
1038 | return TRUE; | ||
1039 | } | ||
1036 | } | 1040 | } |
1037 | UpdateList(); | 1041 | UpdateList(); |
1038 | DoXfer(); | 1042 | DoXfer(); |
1039 | } | 1043 | } |
1040 | break; | 1044 | break; |
1041 | case tftp::opDATA: | 1045 | case tftp::opDATA: |
1042 | { | 1046 | { |
1043 | UINTblock = p->data.m_DATA.Block(); | 1047 | UINTblock = p->data.m_DATA.Block(); |
1044 | TRY{ | 1048 | TRY{ |
1045 | m_File.Seek((block-1)*m_blkSize,CFile::begin); | 1049 | m_File.Seek((block-1)*m_blkSize,CFile::begin); |
1046 | int bytes = p->length-sizeof(p->data.m_DATA.block)-(tftpHdrSize-tftpSlackSize); | 1050 | int bytes = p->length-sizeof(p->data.m_DATA.block)-(tftpHdrSize-tftpSlackSize); |
1047 | if(bytes){ | 1051 | if(bytes){ |
1048 | m_File.Write(p->data.m_DATA.data,bytes); | 1052 | m_File.Write(p->data.m_DATA.data,bytes); |
1049 | // *** Move to the other place where we can do it not that often | 1053 | // *** Move to the other place where we can do it not that often |
1050 | m_File.SetLength(m_File.GetPosition()); | 1054 | m_File.SetLength(m_File.GetPosition()); |
1051 | } | 1055 | } |
@@ -1396,32 +1400,37 @@ tftp::tftpOptions oack; | |||
1396 | } | 1400 | } |
1397 | if(m_Options.Lookup(tftpoTOut,v)){ | 1401 | if(m_Options.Lookup(tftpoTOut,v)){ |
1398 | m_timeOut=atoi(v); | 1402 | m_timeOut=atoi(v); |
1399 | if(!m_timeOut){// *** Do more about sanity check | 1403 | if(!m_timeOut){// *** Do more about sanity check |
1400 | Deny(tftp::errOption,IDS_TFTP_ERROR_TOUT); | 1404 | Deny(tftp::errOption,IDS_TFTP_ERROR_TOUT); |
1401 | return TRUE; | 1405 | return TRUE; |
1402 | } | 1406 | } |
1403 | v.Format("%u",m_timeOut); | 1407 | v.Format("%u",m_timeOut); |
1404 | oack[tftpoTOut]=v; | 1408 | oack[tftpoTOut]=v; |
1405 | } | 1409 | } |
1406 | if(m_Options.Lookup(tftpoXResume,v) && m_bResume){ | 1410 | if(m_Options.Lookup(tftpoXResume,v) && m_bResume){ |
1407 | m_ACK=m_File.GetLength()/m_blkSize; | 1411 | m_ACK=m_File.GetLength()/m_blkSize; |
1408 | v.Format("%u",m_ACK); | 1412 | v.Format("%u",m_ACK); |
1409 | oack[tftpoXResume]=v; | 1413 | oack[tftpoXResume]=v; |
1410 | }else | 1414 | }else |
1411 | m_ACK=0; | 1415 | m_ACK=0; |
1416 | // XXX: see if we can negotiate the right block size somehow | ||
1417 | if(m_xferSize>=0 && m_xferSize>=(m_blkSize<<16)) { | ||
1418 | Deny(tftp::errUndefined,IDS_TFTP_ERROR_TOOBIG); | ||
1419 | return TRUE; | ||
1420 | } | ||
1412 | state=stateXfer; | 1421 | state=stateXfer; |
1413 | if(oack.GetCount()){ | 1422 | if(oack.GetCount()){ |
1414 | tftp *p = tftp::Allocate(tftp::tftpOACK::tftpSize(&oack)); | 1423 | tftp *p = tftp::Allocate(tftp::tftpOACK::tftpSize(&oack)); |
1415 | ASSERT(p); | 1424 | ASSERT(p); |
1416 | p->SetOpcode(tftp::opOACK); | 1425 | p->SetOpcode(tftp::opOACK); |
1417 | p->data.m_OACK.Set(&oack); | 1426 | p->data.m_OACK.Set(&oack); |
1418 | PostTFTP(p,TRUE); | 1427 | PostTFTP(p,TRUE); |
1419 | }else | 1428 | }else |
1420 | DoXfer(); | 1429 | DoXfer(); |
1421 | return TRUE; | 1430 | return TRUE; |
1422 | } | 1431 | } |
1423 | 1432 | ||
1424 | BOOL CWRQSocket::ConfirmRequest() | 1433 | BOOL CWRQSocket::ConfirmRequest() |
1425 | { | 1434 | { |
1426 | CConfirmWRQDlg cd(NULL); | 1435 | CConfirmWRQDlg cd(NULL); |
1427 | cd.m_Daddy=this; | 1436 | cd.m_Daddy=this; |