summaryrefslogtreecommitdiffabout
path: root/PumpKINDlg.cpp
Unidiff
Diffstat (limited to 'PumpKINDlg.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--PumpKINDlg.cpp20
1 files changed, 14 insertions, 6 deletions
diff --git a/PumpKINDlg.cpp b/PumpKINDlg.cpp
index fc24596..b6b8a36 100644
--- a/PumpKINDlg.cpp
+++ b/PumpKINDlg.cpp
@@ -816,339 +816,347 @@ tftp *p = tftp::Allocate(tftp::tftpDATA::tftpSize(m_blkSize));
816 CString tmp; 816 CString tmp;
817 tmp.Format(IDS_LOG_XFERRRQFINISHED,(LPCTSTR)m_FileName); 817 tmp.Format(IDS_LOG_XFERRRQFINISHED,(LPCTSTR)m_FileName);
818 m_Daddy->LogLine(tmp); 818 m_Daddy->LogLine(tmp);
819 } 819 }
820 }CATCH(CFileException,e){ 820 }CATCH(CFileException,e){
821 Deny(e); 821 Deny(e);
822 }END_CATCH 822 }END_CATCH
823} 823}
824 824
825UINT tftp::tftpDATA::tftpSize(UINT blkSize) 825UINT tftp::tftpDATA::tftpSize(UINT blkSize)
826{ 826{
827 return tftpHdrSize-tftpSlackSize+sizeof(tftp::tftpDATA) 827 return tftpHdrSize-tftpSlackSize+sizeof(tftp::tftpDATA)
828 -sizeof(BYTE)+blkSize; 828 -sizeof(BYTE)+blkSize;
829} 829}
830 830
831void CXferSocket::Deny(CFileException* e) 831void CXferSocket::Deny(CFileException* e)
832{ 832{
833 PostError(e); 833 PostError(e);
834 state=stateDeny; 834 state=stateDeny;
835} 835}
836 836
837void CXferSocket::PostError(UINT errCode,UINT errID) 837void CXferSocket::PostError(UINT errCode,UINT errID)
838{ 838{
839CString msg; 839CString msg;
840 msg.LoadString(errID); 840 msg.LoadString(errID);
841 ASSERT(m_Daddy); 841 ASSERT(m_Daddy);
842 /*// *** 842 /*// ***
843CString tmp; 843CString tmp;
844 tmp.Format(IDS_LOG_SENTTFTPERROR,errCode,(LPCTSTR)msg); 844 tmp.Format(IDS_LOG_SENTTFTPERROR,errCode,(LPCTSTR)msg);
845 m_Daddy->LogLine(tmp); 845 m_Daddy->LogLine(tmp);
846 */ 846 */
847tftp* err = tftp::Allocate(tftp::tftpERROR::tftpSize(msg)); 847tftp* err = tftp::Allocate(tftp::tftpERROR::tftpSize(msg));
848err->SetOpcode(tftp::opERROR); 848err->SetOpcode(tftp::opERROR);
849 err->errSet(errCode,msg); 849 err->errSet(errCode,msg);
850 PostTFTP(err); 850 PostTFTP(err);
851} 851}
852 852
853void CXferSocket::PostError(CFileException* e) 853void CXferSocket::PostError(CFileException* e)
854{ 854{
855UINT eCode; 855UINT eCode;
856UINT eMsgID; 856UINT eMsgID;
857 switch(e->m_cause){ 857 switch(e->m_cause){
858 case CFileException::fileNotFound: 858 case CFileException::fileNotFound:
859 eCode=tftp::errNotFound; 859 eCode=tftp::errNotFound;
860 eMsgID=IDS_TFTP_ERROR_NOTFOUND; 860 eMsgID=IDS_TFTP_ERROR_NOTFOUND;
861 break; 861 break;
862 case CFileException::accessDenied: 862 case CFileException::accessDenied:
863 eCode=tftp::errAccessViolation; 863 eCode=tftp::errAccessViolation;
864 eMsgID=IDS_TFTP_ERROR_ACCESS; 864 eMsgID=IDS_TFTP_ERROR_ACCESS;
865 break; 865 break;
866 case CFileException::directoryFull: 866 case CFileException::directoryFull:
867 eCode=tftp::errDiskFull; 867 eCode=tftp::errDiskFull;
868 eMsgID=IDS_TFTP_ERROR_DIRFULL; 868 eMsgID=IDS_TFTP_ERROR_DIRFULL;
869 break; 869 break;
870 case CFileException::sharingViolation: 870 case CFileException::sharingViolation:
871 eCode=tftp::errAccessViolation; 871 eCode=tftp::errAccessViolation;
872 eMsgID=IDS_TFTP_ERROR_SHARING; 872 eMsgID=IDS_TFTP_ERROR_SHARING;
873 break; 873 break;
874 case CFileException::diskFull: 874 case CFileException::diskFull:
875 eCode=tftp::errDiskFull; 875 eCode=tftp::errDiskFull;
876 eMsgID=IDS_TFTP_ERROR_DISKFULL; 876 eMsgID=IDS_TFTP_ERROR_DISKFULL;
877 break; 877 break;
878 default: 878 default:
879 eCode=tftp::errUndefined; 879 eCode=tftp::errUndefined;
880 eMsgID=IDS_TFTP_ERROR_UNDEFINED; 880 eMsgID=IDS_TFTP_ERROR_UNDEFINED;
881 break; 881 break;
882 } 882 }
883 PostError(eCode,eMsgID); 883 PostError(eCode,eMsgID);
884} 884}
885 885
886ULONG CRRQSocket::GetACK(void) 886ULONG CRRQSocket::GetACK(void)
887{ 887{
888 return (m_ACK*m_blkSize)-m_LastSlack; 888 return (m_ACK*m_blkSize)-m_LastSlack;
889} 889}
890 890
891BOOL CRRQSocket::OnTFTP(tftp* p) 891BOOL CRRQSocket::OnTFTP(tftp* p)
892{ 892{
893BOOL rv = TRUE; 893BOOL rv = TRUE;
894 switch(p->Opcode()){ 894 switch(p->Opcode()){
895 case tftp::opOACK: 895 case tftp::opOACK:
896 m_ACK=0; 896 m_ACK=0;
897 ASSERT(state!=stateFinish); 897 ASSERT(state!=stateFinish);
898 { 898 {
899 tftp::tftpOptions o; 899 tftp::tftpOptions o;
900 if(p->GetOptions(&o)){ 900 if(p->GetOptions(&o)){
901 CString v; 901 CString v;
902 if(o.Lookup(tftpoBSize,v)){ 902 if(o.Lookup(tftpoBSize,v)){
903 m_blkSize=atoi(v); 903 m_blkSize=atoi(v);
904 if(!m_blkSize){// *** More sanity checks 904 if(!m_blkSize){// *** More sanity checks
905 Deny(tftp::errOption,IDS_TFTP_ERROR_BSIZE); 905 Deny(tftp::errOption,IDS_TFTP_ERROR_BSIZE);
906 rv = TRUE; 906 rv = TRUE;
907 break; 907 break;
908 } 908 }
909 } 909 }
910 if(o.Lookup(tftpoTOut,v)){ 910 if(o.Lookup(tftpoTOut,v)){
911 m_timeOut=atoi(v); 911 m_timeOut=atoi(v);
912 if(!m_timeOut){// *** More sanity checks 912 if(!m_timeOut){// *** More sanity checks
913 Deny(tftp::errOption,IDS_TFTP_ERROR_TOUT); 913 Deny(tftp::errOption,IDS_TFTP_ERROR_TOUT);
914 rv = TRUE; 914 rv = TRUE;
915 break; 915 break;
916 } 916 }
917 } 917 }
918 if(o.Lookup(tftpoXResume,v)){ 918 if(o.Lookup(tftpoXResume,v)){
919 m_ACK=atoi(v); 919 m_ACK=atoi(v);
920 } 920 }
921 } 921 }
922 UpdateList(); 922 UpdateList();
923 DoXfer(); 923 DoXfer();
924 } 924 }
925 break; 925 break;
926 case tftp::opACK: 926 case tftp::opACK:
927 m_ACK=p->data.m_ACK.Block(); 927 m_ACK=p->data.m_ACK.Block();
928 if(state!=stateFinish){ 928 if(state!=stateFinish){
929 UpdateList(); 929 UpdateList();
930 DoXfer(); 930 DoXfer();
931 } 931 }
932 break; 932 break;
933 case tftp::opERROR: 933 case tftp::opERROR:
934 { 934 {
935 ASSERT(m_Daddy); 935 ASSERT(m_Daddy);
936 CString tmp; 936 CString tmp;
937 tmp.Format(IDS_LOG_GOTTFTPERROR,p->data.m_ERROR.Code(),(LPCTSTR)p->errMessage()); 937 tmp.Format(IDS_LOG_GOTTFTPERROR,p->data.m_ERROR.Code(),(LPCTSTR)p->errMessage());
938 m_Daddy->LogLine(tmp); 938 m_Daddy->LogLine(tmp);
939 } 939 }
940 Destroy(FALSE); 940 Destroy(FALSE);
941 rv = FALSE; 941 rv = FALSE;
942 break; 942 break;
943 default: 943 default:
944 ASSERT(m_Daddy); 944 {
945 m_Daddy->LogLine(IDS_LOG_XFEROPCODE); 945 ASSERT(m_Daddy);
946 // *** Self destruct maybe?? 946 CString tmp;
947 tmp.Format(IDS_LOG_XFEROPCODE,p->Opcode());
948 m_Daddy->LogLine(tmp);
949 // *** Self destruct maybe??
950 }
947 break; 951 break;
948 } 952 }
949 return rv; 953 return rv;
950} 954}
951 955
952BOOL CWRQSocket::OnTFTP(tftp* p) 956BOOL CWRQSocket::OnTFTP(tftp* p)
953{ 957{
954 switch(p->Opcode()){ 958 switch(p->Opcode()){
955 case tftp::opOACK: 959 case tftp::opOACK:
956 ASSERT(state!=stateFinish); 960 ASSERT(state!=stateFinish);
957 { 961 {
958 if(m_bResume) 962 if(m_bResume)
959 m_ACK=m_File.GetLength()/m_blkSize; 963 m_ACK=m_File.GetLength()/m_blkSize;
960 else 964 else
961 m_ACK=0; 965 m_ACK=0;
962 tftp::tftpOptions o; 966 tftp::tftpOptions o;
963 if(p->GetOptions(&o)){ 967 if(p->GetOptions(&o)){
964 CString v; 968 CString v;
965 if(o.Lookup(tftpoBSize,v)){ 969 if(o.Lookup(tftpoBSize,v)){
966 m_blkSize=atoi(v); 970 m_blkSize=atoi(v);
967 if(!m_blkSize){// *** More sanity checks 971 if(!m_blkSize){// *** More sanity checks
968 Deny(tftp::errOption,IDS_TFTP_ERROR_BSIZE); 972 Deny(tftp::errOption,IDS_TFTP_ERROR_BSIZE);
969 return TRUE; 973 return TRUE;
970 } 974 }
971 } 975 }
972 if(o.Lookup(tftpoTOut,v)){ 976 if(o.Lookup(tftpoTOut,v)){
973 m_timeOut=atoi(v); 977 m_timeOut=atoi(v);
974 if(!m_timeOut){// *** More sanity checks 978 if(!m_timeOut){// *** More sanity checks
975 Deny(tftp::errOption,IDS_TFTP_ERROR_TOUT); 979 Deny(tftp::errOption,IDS_TFTP_ERROR_TOUT);
976 return TRUE; 980 return TRUE;
977 } 981 }
978 } 982 }
979 if(o.Lookup(tftpoTSize,v)){ 983 if(o.Lookup(tftpoTSize,v)){
980 m_xferSize=atoi(v); 984 m_xferSize=atoi(v);
981 } 985 }
982 } 986 }
983 UpdateList(); 987 UpdateList();
984 DoXfer(); 988 DoXfer();
985 } 989 }
986 break; 990 break;
987 case tftp::opDATA: 991 case tftp::opDATA:
988 { 992 {
989 UINTblock = p->data.m_DATA.Block(); 993 UINTblock = p->data.m_DATA.Block();
990 TRY{ 994 TRY{
991 m_File.Seek((block-1)*m_blkSize,CFile::begin); 995 m_File.Seek((block-1)*m_blkSize,CFile::begin);
992 int bytes = p->length-sizeof(p->data.m_DATA.block)-(tftpHdrSize-tftpSlackSize); 996 int bytes = p->length-sizeof(p->data.m_DATA.block)-(tftpHdrSize-tftpSlackSize);
993 if(bytes){ 997 if(bytes){
994 m_File.Write(p->data.m_DATA.data,bytes); 998 m_File.Write(p->data.m_DATA.data,bytes);
995 // *** Move to the other place where we can do it not that often 999 // *** Move to the other place where we can do it not that often
996 m_File.SetLength(m_File.GetPosition()); 1000 m_File.SetLength(m_File.GetPosition());
997 } 1001 }
998 if(bytes<m_blkSize){ 1002 if(bytes<m_blkSize){
999 state=stateFinish; 1003 state=stateFinish;
1000 ASSERT(m_Daddy); 1004 ASSERT(m_Daddy);
1001 CString tmp; 1005 CString tmp;
1002 tmp.Format(IDS_LOG_XFERWRQFINISHED,(LPCTSTR)m_FileName); 1006 tmp.Format(IDS_LOG_XFERWRQFINISHED,(LPCTSTR)m_FileName);
1003 m_Daddy->LogLine(tmp); 1007 m_Daddy->LogLine(tmp);
1004 } 1008 }
1005 m_ACK=block; 1009 m_ACK=block;
1006 m_LastSlack=m_blkSize-bytes; 1010 m_LastSlack=m_blkSize-bytes;
1007 UpdateList(); 1011 UpdateList();
1008 DoXfer(); 1012 DoXfer();
1009 }CATCH(CFileException,e){ 1013 }CATCH(CFileException,e){
1010 Deny(e); 1014 Deny(e);
1011 }END_CATCH 1015 }END_CATCH
1012 } 1016 }
1013 break; 1017 break;
1014 case tftp::opERROR: 1018 case tftp::opERROR:
1015 { 1019 {
1016 ASSERT(m_Daddy); 1020 ASSERT(m_Daddy);
1017 CString tmp; 1021 CString tmp;
1018 tmp.Format(IDS_LOG_GOTTFTPERROR,p->data.m_ERROR.Code(),(LPCTSTR)p->errMessage()); 1022 tmp.Format(IDS_LOG_GOTTFTPERROR,p->data.m_ERROR.Code(),(LPCTSTR)p->errMessage());
1019 m_Daddy->LogLine(tmp); 1023 m_Daddy->LogLine(tmp);
1020 } 1024 }
1021 Destroy(FALSE); 1025 Destroy(FALSE);
1022 return FALSE; 1026 return FALSE;
1023 default: 1027 default:
1024 ASSERT(m_Daddy); 1028 {
1025 m_Daddy->LogLine(IDS_LOG_XFEROPCODE); 1029 ASSERT(m_Daddy);
1026 // *** Self destruct maybe?? 1030 CString tmp;
1031 tmp.Format(IDS_LOG_XFEROPCODE,p->Opcode());
1032 m_Daddy->LogLine(tmp);
1033 // *** Self destruct maybe??
1034 }
1027 break; 1035 break;
1028 } 1036 }
1029 return TRUE; 1037 return TRUE;
1030} 1038}
1031 1039
1032void tftp::SetOpcode(WORD op) 1040void tftp::SetOpcode(WORD op)
1033{ 1041{
1034 opcode = REVERSEBYTES(op); 1042 opcode = REVERSEBYTES(op);
1035} 1043}
1036void tftp::tftpDATA::SetBlock(WORD b) 1044void tftp::tftpDATA::SetBlock(WORD b)
1037{ 1045{
1038 block=REVERSEBYTES(b); 1046 block=REVERSEBYTES(b);
1039} 1047}
1040WORD tftp::tftpDATA::Block() 1048WORD tftp::tftpDATA::Block()
1041{ 1049{
1042 return REVERSEBYTES(block); 1050 return REVERSEBYTES(block);
1043} 1051}
1044WORD tftp::tftpACK::Block() 1052WORD tftp::tftpACK::Block()
1045{ 1053{
1046 return REVERSEBYTES(block); 1054 return REVERSEBYTES(block);
1047} 1055}
1048void tftp::tftpACK::SetBlock(WORD b) 1056void tftp::tftpACK::SetBlock(WORD b)
1049{ 1057{
1050 block = REVERSEBYTES(b); 1058 block = REVERSEBYTES(b);
1051} 1059}
1052WORD tftp::tftpERROR::Code() 1060WORD tftp::tftpERROR::Code()
1053{ 1061{
1054 return REVERSEBYTES(code); 1062 return REVERSEBYTES(code);
1055} 1063}
1056void tftp::tftpERROR::SetCode(WORD c) 1064void tftp::tftpERROR::SetCode(WORD c)
1057{ 1065{
1058 code = REVERSEBYTES(c); 1066 code = REVERSEBYTES(c);
1059} 1067}
1060 1068
1061 1069
1062CString tftp::errMessage() 1070CString tftp::errMessage()
1063{ 1071{
1064CString rv; 1072CString rv;
1065 if(memchr(data.m_ERROR.data,0,length-(tftpHdrSize-tftpSlackSize)-sizeof(data.m_ERROR.code))) 1073 if(memchr(data.m_ERROR.data,0,length-(tftpHdrSize-tftpSlackSize)-sizeof(data.m_ERROR.code)))
1066 rv = (LPCTSTR)data.m_ERROR.data; 1074 rv = (LPCTSTR)data.m_ERROR.data;
1067 return rv; 1075 return rv;
1068} 1076}
1069 1077
1070void CXferSocket::Destroy(BOOL success) 1078void CXferSocket::Destroy(BOOL success)
1071{ 1079{
1072 if(m_wndResolver){ 1080 if(m_wndResolver){
1073 delete m_wndResolver; 1081 delete m_wndResolver;
1074 m_wndResolver=NULL; 1082 m_wndResolver=NULL;
1075 } 1083 }
1076 SetTry(); 1084 SetTry();
1077 m_Daddy->m_bnw.StartSound( 1085 m_Daddy->m_bnw.StartSound(
1078 success 1086 success
1079 ? m_Daddy->m_bnwSuccess 1087 ? m_Daddy->m_bnwSuccess
1080 : m_Daddy->m_bnwAbort 1088 : m_Daddy->m_bnwAbort
1081 ); 1089 );
1082 if(m_File.m_hFile!=CFile::hFileNull){ 1090 if(m_File.m_hFile!=CFile::hFileNull){
1083 TRY{ 1091 TRY{
1084 m_File.Close(); 1092 m_File.Close();
1085 }CATCH(CFileException,e){ 1093 }CATCH(CFileException,e){
1086 TRACE0("Error closing file\n"); 1094 TRACE0("Error closing file\n");
1087 }END_CATCH 1095 }END_CATCH
1088 } 1096 }
1089 ASSERT(m_Daddy); 1097 ASSERT(m_Daddy);
1090 m_Daddy->KillTimer(m_hSocket); 1098 m_Daddy->KillTimer(m_hSocket);
1091 m_Daddy->m_Xfers.RemoveKey(m_hSocket); 1099 m_Daddy->m_Xfers.RemoveKey(m_hSocket);
1092LV_FINDINFO lvf; 1100LV_FINDINFO lvf;
1093 memset(&lvf,0,sizeof(lvf)); 1101 memset(&lvf,0,sizeof(lvf));
1094 lvf.flags=LVFI_PARAM; 1102 lvf.flags=LVFI_PARAM;
1095 lvf.lParam=(LPARAM)this; 1103 lvf.lParam=(LPARAM)this;
1096int i = m_Daddy->m_List.FindItem(&lvf); 1104int i = m_Daddy->m_List.FindItem(&lvf);
1097 if(i>=0) 1105 if(i>=0)
1098 m_Daddy->m_List.DeleteItem(i); 1106 m_Daddy->m_List.DeleteItem(i);
1099 delete this; 1107 delete this;
1100} 1108}
1101 1109
1102void CPumpKINDlg::LogLine(LPCTSTR str) 1110void CPumpKINDlg::LogLine(LPCTSTR str)
1103{ 1111{
1104 ASSERT(m_LogLength); 1112 ASSERT(m_LogLength);
1105 while(m_Log.GetCount()>m_LogLength && m_Log.GetCount()!=LB_ERR){ 1113 while(m_Log.GetCount()>m_LogLength && m_Log.GetCount()!=LB_ERR){
1106 CTime *t = (CTime*)m_Log.GetItemData(0); 1114 CTime *t = (CTime*)m_Log.GetItemData(0);
1107 if(((DWORD)t)!=LB_ERR){ 1115 if(((DWORD)t)!=LB_ERR){
1108 ASSERT(t); 1116 ASSERT(t);
1109 m_LogTimes.RemoveKey(t); 1117 m_LogTimes.RemoveKey(t);
1110 delete t; 1118 delete t;
1111 } 1119 }
1112 m_Log.DeleteString(0); 1120 m_Log.DeleteString(0);
1113 } 1121 }
1114int i = m_Log.AddString(str); 1122int i = m_Log.AddString(str);
1115 ASSERT(i!=LB_ERR); 1123 ASSERT(i!=LB_ERR);
1116CTime *t = new CTime(CTime::GetCurrentTime()); 1124CTime *t = new CTime(CTime::GetCurrentTime());
1117 m_Log.SetItemData(i,(DWORD)(m_LogTimes[t]=t)); 1125 m_Log.SetItemData(i,(DWORD)(m_LogTimes[t]=t));
1118 m_Log.SetCurSel(i); 1126 m_Log.SetCurSel(i);
1119} 1127}
1120 1128
1121void CPumpKINDlg::LogLine(UINT msgID) 1129void CPumpKINDlg::LogLine(UINT msgID)
1122{ 1130{
1123CString tmp; 1131CString tmp;
1124 tmp.Format(msgID); 1132 tmp.Format(msgID);
1125 LogLine(tmp); 1133 LogLine(tmp);
1126} 1134}
1127 1135
1128void CXferSocket::TurnSlashes(CString& fn,BOOL bBack) 1136void CXferSocket::TurnSlashes(CString& fn,BOOL bBack)
1129{ 1137{
1130 ints = fn.Find(bBack?'/':'\\'); 1138 ints = fn.Find(bBack?'/':'\\');
1131 while(s>=0){ 1139 while(s>=0){
1132 fn.SetAt(s,bBack?'\\':'/'); 1140 fn.SetAt(s,bBack?'\\':'/');
1133 s = fn.Find(bBack?'/':'\\'); 1141 s = fn.Find(bBack?'/':'\\');
1134 } 1142 }
1135} 1143}
1136 1144
1137CString CXferSocket::ApplyRoot(LPCTSTR fileName) 1145CString CXferSocket::ApplyRoot(LPCTSTR fileName)
1138{ 1146{
1139 ASSERT(m_Daddy); 1147 ASSERT(m_Daddy);
1140CString fn = fileName; 1148CString fn = fileName;
1141CString rv = m_Daddy->m_TFTPRoot; 1149CString rv = m_Daddy->m_TFTPRoot;
1142 if(rv.IsEmpty()) 1150 if(rv.IsEmpty())
1143 rv = "."; 1151 rv = ".";
1144 if(rv[rv.GetLength()-1]!='\\') 1152 if(rv[rv.GetLength()-1]!='\\')
1145 rv+="\\"; 1153 rv+="\\";
1146 while((!fn.IsEmpty()) && fn[0]=='\\') 1154 while((!fn.IsEmpty()) && fn[0]=='\\')
1147 fn=fn.Mid(1); 1155 fn=fn.Mid(1);
1148 rv+=fn; 1156 rv+=fn;
1149 return rv; 1157 return rv;
1150} 1158}
1151 1159
1152void CPumpKINDlg::OnOptions() 1160void CPumpKINDlg::OnOptions()
1153{ 1161{
1154CPropertySheet cps(IDS_TITLE_OPTIONS,this); 1162CPropertySheet cps(IDS_TITLE_OPTIONS,this);