summaryrefslogtreecommitdiffabout
authorMichael Krelin <hacker@klever.net>2011-04-27 10:10:00 (UTC)
committer Michael Krelin <hacker@klever.net>2011-04-27 10:10:00 (UTC)
commitd097b824b7fcad001c9581fb2e322bf3e3e5961d (patch) (unidiff)
tree5a1c55e82c4b0ff4acca276b8e1122547530cc0b
parent65981784977659461f08b48f537be9f9f77a2112 (diff)
downloadpumpkin-d097b824b7fcad001c9581fb2e322bf3e3e5961d.zip
pumpkin-d097b824b7fcad001c9581fb2e322bf3e3e5961d.tar.gz
pumpkin-d097b824b7fcad001c9581fb2e322bf3e3e5961d.tar.bz2
fix for misleading error message about unexpected source
along with a double-freeing offense. When I fail to receive packet not only I diagnose this unfortunate development, but also start talking about packet from unexpected source which is kinda weird considering there's no packet at all. Signed-off-by: Michael Krelin <hacker@klever.net>
Diffstat (more/less context) (show whitespace changes)
-rwxr-xr-x[-rw-r--r--]PumpKINDlg.cpp1
1 files changed, 1 insertions, 0 deletions
diff --git a/PumpKINDlg.cpp b/PumpKINDlg.cpp
index f41b69f..3ff1500 100644..100755
--- a/PumpKINDlg.cpp
+++ b/PumpKINDlg.cpp
@@ -556,96 +556,97 @@ void CXferSocket::OnSend(int nErrorCode)
556 m_Daddy->LogLine(IDS_LOG_XFERUDPSEND); 556 m_Daddy->LogLine(IDS_LOG_XFERUDPSEND);
557 } 557 }
558 delete p; 558 delete p;
559 } 559 }
560 DoSelect(); 560 DoSelect();
561 if(m_Queue.IsEmpty()){ 561 if(m_Queue.IsEmpty()){
562 switch(state){ 562 switch(state){
563 case stateDeny: 563 case stateDeny:
564 Destroy(FALSE); 564 Destroy(FALSE);
565 break; 565 break;
566 case stateFinish: 566 case stateFinish:
567 Destroy(TRUE); 567 Destroy(TRUE);
568 break; 568 break;
569 } 569 }
570 } 570 }
571} 571}
572 572
573BOOL tftp::Send(CAsyncSocket *socket,SOCKADDR_IN* saddr) 573BOOL tftp::Send(CAsyncSocket *socket,SOCKADDR_IN* saddr)
574{ 574{
575 ASSERT(socket); 575 ASSERT(socket);
576int rv = socket->SendTo(udpBase(),length,(SOCKADDR*)saddr,sizeof(SOCKADDR_IN)); 576int rv = socket->SendTo(udpBase(),length,(SOCKADDR*)saddr,sizeof(SOCKADDR_IN));
577 if(rv!=length) 577 if(rv!=length)
578 return FALSE; 578 return FALSE;
579 return TRUE; 579 return TRUE;
580} 580}
581 581
582void CXferSocket::DoSelect(BOOL do_select) 582void CXferSocket::DoSelect(BOOL do_select)
583{ 583{
584 if(m_Peer.sin_addr.s_addr!=INADDR_NONE) 584 if(m_Peer.sin_addr.s_addr!=INADDR_NONE)
585 AsyncSelect(FD_CLOSE|FD_READ|((m_Queue.IsEmpty()&&!do_select)?0:FD_WRITE)); 585 AsyncSelect(FD_CLOSE|FD_READ|((m_Queue.IsEmpty()&&!do_select)?0:FD_WRITE));
586} 586}
587 587
588void CXferSocket::OnReceive(int nErrorCode) 588void CXferSocket::OnReceive(int nErrorCode)
589{ 589{
590 if(nErrorCode){ 590 if(nErrorCode){
591 ASSERT(m_Daddy); 591 ASSERT(m_Daddy);
592 m_Daddy->LogLine(IDS_LOG_XFERRECEIVE); 592 m_Daddy->LogLine(IDS_LOG_XFERRECEIVE);
593 return; 593 return;
594 } 594 }
595 ASSERT(m_Daddy); 595 ASSERT(m_Daddy);
596DWORD fionread = 0; 596DWORD fionread = 0;
597 VERIFY(IOCtl(FIONREAD,&fionread)); 597 VERIFY(IOCtl(FIONREAD,&fionread));
598tftp *p = tftp::Allocate(fionread); 598tftp *p = tftp::Allocate(fionread);
599 ASSERT(p); 599 ASSERT(p);
600SOCKADDR_IN sin; 600SOCKADDR_IN sin;
601 if(!p->Receive(this,fionread,&sin)){ 601 if(!p->Receive(this,fionread,&sin)){
602 m_Daddy->LogLine(IDS_LOG_XFERUDPRECEIVE); 602 m_Daddy->LogLine(IDS_LOG_XFERUDPRECEIVE);
603 delete p; 603 delete p;
604 return;
604 }else 605 }else
605 if(m_Peer.sin_addr.s_addr==INADDR_NONE){ 606 if(m_Peer.sin_addr.s_addr==INADDR_NONE){
606 m_Peer.sin_addr=sin.sin_addr; 607 m_Peer.sin_addr=sin.sin_addr;
607 m_Peer.sin_port=sin.sin_port; 608 m_Peer.sin_port=sin.sin_port;
608 } 609 }
609BOOL alive = TRUE; 610BOOL alive = TRUE;
610 if(state==stateInit){ 611 if(state==stateInit){
611 state=stateXfer; 612 state=stateXfer;
612 m_Peer.sin_port=sin.sin_port; 613 m_Peer.sin_port=sin.sin_port;
613 UpdateList(); 614 UpdateList();
614 } 615 }
615 if(sin.sin_addr.s_addr!=m_Peer.sin_addr.s_addr || sin.sin_port!=m_Peer.sin_port){ 616 if(sin.sin_addr.s_addr!=m_Peer.sin_addr.s_addr || sin.sin_port!=m_Peer.sin_port){
616 m_Daddy->LogLine(IDS_LOG_XFERSOURCETID); 617 m_Daddy->LogLine(IDS_LOG_XFERSOURCETID);
617 // *** Bounce it! 618 // *** Bounce it!
618 }else{ 619 }else{
619 alive = OnTFTP(p); 620 alive = OnTFTP(p);
620 } 621 }
621 delete p; 622 delete p;
622 if(alive){ 623 if(alive){
623 DoSelect(); 624 DoSelect();
624 ResetTimeout(); 625 ResetTimeout();
625 } 626 }
626} 627}
627 628
628void CXferSocket::SetPeer(SOCKADDR_IN *sin) 629void CXferSocket::SetPeer(SOCKADDR_IN *sin)
629{ 630{
630 ASSERT(sin); 631 ASSERT(sin);
631 memmove(&m_Peer,sin,sizeof(m_Peer)); 632 memmove(&m_Peer,sin,sizeof(m_Peer));
632} 633}
633 634
634void CXferSocket::UpdateList() 635void CXferSocket::UpdateList()
635{ 636{
636 ASSERT(m_Daddy); 637 ASSERT(m_Daddy);
637LV_FINDINFO lvf; 638LV_FINDINFO lvf;
638 memset(&lvf,0,sizeof(lvf)); 639 memset(&lvf,0,sizeof(lvf));
639 lvf.flags=LVFI_PARAM; 640 lvf.flags=LVFI_PARAM;
640 lvf.lParam=(LPARAM)this; 641 lvf.lParam=(LPARAM)this;
641int i = m_Daddy->m_List.FindItem(&lvf); 642int i = m_Daddy->m_List.FindItem(&lvf);
642 if(i<0){ 643 if(i<0){
643 ASSERT(IsKindOf(RUNTIME_CLASS(CRRQSocket)) || IsKindOf(RUNTIME_CLASS(CWRQSocket))); 644 ASSERT(IsKindOf(RUNTIME_CLASS(CRRQSocket)) || IsKindOf(RUNTIME_CLASS(CWRQSocket)));
644 i=m_Daddy->m_List.InsertItem(0,m_FileName,IsKindOf(RUNTIME_CLASS(CRRQSocket))?m_Daddy->m_iRRQ:m_Daddy->m_iWRQ); 645 i=m_Daddy->m_List.InsertItem(0,m_FileName,IsKindOf(RUNTIME_CLASS(CRRQSocket))?m_Daddy->m_iRRQ:m_Daddy->m_iWRQ);
645 ASSERT(!(i<0)); 646 ASSERT(!(i<0));
646 m_Daddy->m_List.SetItemData(i,(DWORD)this); 647 m_Daddy->m_List.SetItemData(i,(DWORD)this);
647 } 648 }
648 m_Daddy->m_List.SetItemText(i,CPumpKINDlg::subitemFile,m_FileName); 649 m_Daddy->m_List.SetItemText(i,CPumpKINDlg::subitemFile,m_FileName);
649 m_Daddy->m_List.SetItemText(i,CPumpKINDlg::subitemType,m_Type); 650 m_Daddy->m_List.SetItemText(i,CPumpKINDlg::subitemType,m_Type);
650 m_Daddy->m_List.SetItemText(i,CPumpKINDlg::subitemPeer,inet_ntoa(m_Peer.sin_addr)); 651 m_Daddy->m_List.SetItemText(i,CPumpKINDlg::subitemPeer,inet_ntoa(m_Peer.sin_addr));
651CString tmp; 652CString tmp;