summaryrefslogtreecommitdiffabout
path: root/PumpKINDlg.cpp
Unidiff
Diffstat (limited to 'PumpKINDlg.cpp') (more/less context) (show whitespace changes)
-rw-r--r--PumpKINDlg.cpp8
1 files changed, 6 insertions, 2 deletions
diff --git a/PumpKINDlg.cpp b/PumpKINDlg.cpp
index 1e6d03f..0b3bf41 100644
--- a/PumpKINDlg.cpp
+++ b/PumpKINDlg.cpp
@@ -1125,195 +1125,199 @@ CString tmp;
1125} 1125}
1126 1126
1127void CXferSocket::TurnSlashes(CString& fn,BOOL bBack) 1127void CXferSocket::TurnSlashes(CString& fn,BOOL bBack)
1128{ 1128{
1129 ints = fn.Find(bBack?'/':'\\'); 1129 ints = fn.Find(bBack?'/':'\\');
1130 while(s>=0){ 1130 while(s>=0){
1131 fn.SetAt(s,bBack?'\\':'/'); 1131 fn.SetAt(s,bBack?'\\':'/');
1132 s = fn.Find(bBack?'/':'\\'); 1132 s = fn.Find(bBack?'/':'\\');
1133 } 1133 }
1134} 1134}
1135 1135
1136CString CXferSocket::ApplyRoot(LPCTSTR fileName) 1136CString CXferSocket::ApplyRoot(LPCTSTR fileName)
1137{ 1137{
1138 ASSERT(m_Daddy); 1138 ASSERT(m_Daddy);
1139CString fn = fileName; 1139CString fn = fileName;
1140CString rv = m_Daddy->m_TFTPRoot; 1140CString rv = m_Daddy->m_TFTPRoot;
1141 if(rv.IsEmpty()) 1141 if(rv.IsEmpty())
1142 rv = "."; 1142 rv = ".";
1143 if(rv[rv.GetLength()-1]!='\\') 1143 if(rv[rv.GetLength()-1]!='\\')
1144 rv+="\\"; 1144 rv+="\\";
1145 while((!fn.IsEmpty()) && fn[0]=='\\') 1145 while((!fn.IsEmpty()) && fn[0]=='\\')
1146 fn=fn.Mid(1); 1146 fn=fn.Mid(1);
1147 rv+=fn; 1147 rv+=fn;
1148 return rv; 1148 return rv;
1149} 1149}
1150 1150
1151void CPumpKINDlg::OnOptions() 1151void CPumpKINDlg::OnOptions()
1152{ 1152{
1153CPropertySheet cps(IDS_TITLE_OPTIONS,this); 1153CPropertySheet cps(IDS_TITLE_OPTIONS,this);
1154CPropsServer server; 1154CPropsServer server;
1155CPropsNetwork network; 1155CPropsNetwork network;
1156CPropsSounds sounds; 1156CPropsSounds sounds;
1157 1157
1158 server.m_RRQMode=m_RRQMode; 1158 server.m_RRQMode=m_RRQMode;
1159 server.m_TFTPRoot=m_TFTPRoot; 1159 server.m_TFTPRoot=m_TFTPRoot;
1160 server.m_TFTPSubdirs=m_bTFTPSubdirs; 1160 server.m_TFTPSubdirs=m_bTFTPSubdirs;
1161 server.m_WRQMode=m_WRQMode; 1161 server.m_WRQMode=m_WRQMode;
1162 server.m_PromptTimeOut=m_PromptTimeOut; 1162 server.m_PromptTimeOut=m_PromptTimeOut;
1163 1163
1164 network.m_ListenPort=m_ListenPort; 1164 network.m_ListenPort=m_ListenPort;
1165 network.m_SpeakPort=m_SpeakPort; 1165 network.m_SpeakPort=m_SpeakPort;
1166 network.m_TimeOut=m_TFTPTimeOut.GetTotalSeconds(); 1166 network.m_TimeOut=m_TFTPTimeOut.GetTotalSeconds();
1167 network.m_BlockSize=m_BlockSize; 1167 network.m_BlockSize=m_BlockSize;
1168 1168
1169 sounds.m_Request = m_bnwRequest; 1169 sounds.m_Request = m_bnwRequest;
1170 sounds.m_Success = m_bnwSuccess; 1170 sounds.m_Success = m_bnwSuccess;
1171 sounds.m_Abort = m_bnwAbort; 1171 sounds.m_Abort = m_bnwAbort;
1172 1172
1173 cps.AddPage(&server); 1173 cps.AddPage(&server);
1174 cps.AddPage(&network); 1174 cps.AddPage(&network);
1175 cps.AddPage(&sounds); 1175 cps.AddPage(&sounds);
1176 if(cps.DoModal()==IDOK){ 1176 if(cps.DoModal()==IDOK){
1177 m_RRQMode=server.m_RRQMode; 1177 m_RRQMode=server.m_RRQMode;
1178 m_TFTPRoot=server.m_TFTPRoot; 1178 m_TFTPRoot=server.m_TFTPRoot;
1179 m_bTFTPSubdirs=server.m_TFTPSubdirs; 1179 m_bTFTPSubdirs=server.m_TFTPSubdirs;
1180 m_WRQMode=server.m_WRQMode; 1180 m_WRQMode=server.m_WRQMode;
1181 m_PromptTimeOut=server.m_PromptTimeOut; 1181 m_PromptTimeOut=server.m_PromptTimeOut;
1182 1182
1183 m_ListenPort=network.m_ListenPort; 1183 m_ListenPort=network.m_ListenPort;
1184 m_SpeakPort=network.m_SpeakPort; 1184 m_SpeakPort=network.m_SpeakPort;
1185 m_TFTPTimeOut=CTimeSpan(network.m_TimeOut); 1185 m_TFTPTimeOut=CTimeSpan(network.m_TimeOut);
1186 m_BlockSize=network.m_BlockSize; 1186 m_BlockSize=network.m_BlockSize;
1187 1187
1188 m_bnwRequest = sounds.m_Request; 1188 m_bnwRequest = sounds.m_Request;
1189 m_bnwSuccess = sounds.m_Success; 1189 m_bnwSuccess = sounds.m_Success;
1190 m_bnwAbort = sounds.m_Abort; 1190 m_bnwAbort = sounds.m_Abort;
1191 } 1191 }
1192} 1192}
1193 1193
1194BOOL CRRQSocket::ConfirmRequest() 1194BOOL CRRQSocket::ConfirmRequest()
1195{ 1195{
1196CConfirmRRQDlg cd(NULL); 1196CConfirmRRQDlg cd(NULL);
1197 cd.m_Daddy=this; 1197 cd.m_Daddy=this;
1198 cd.m_File=m_FileName; 1198 cd.m_File=m_FileName;
1199 cd.m_Host=inet_ntoa(m_Peer.sin_addr); 1199 cd.m_Host=inet_ntoa(m_Peer.sin_addr);
1200 if(cd.DoModal()==IDOK) 1200 if(cd.DoModal()==IDOK)
1201 return TRUE; 1201 return TRUE;
1202 return FALSE; 1202 return FALSE;
1203} 1203}
1204 1204
1205CWRQSocket::CWRQSocket(CPumpKINDlg* daddy,LPCTSTR fileName,LPCTSTR type,SOCKADDR_IN *sin) 1205CWRQSocket::CWRQSocket(CPumpKINDlg* daddy,LPCTSTR fileName,LPCTSTR type,SOCKADDR_IN *sin)
1206 : CXferSocket(daddy,fileName,type,sin) 1206 : CXferSocket(daddy,fileName,type,sin)
1207{ 1207{
1208 state=stateNone; 1208 state=stateNone;
1209 m_ACK=0; 1209 m_ACK=0;
1210 m_LastSlack=0; 1210 m_LastSlack=0;
1211 m_bResume=FALSE; 1211 m_bResume=FALSE;
1212} 1212}
1213 1213
1214BOOL CWRQSocket::Create(LPCTSTR localFile,LPCTSTR hostName) 1214BOOL CWRQSocket::Create(LPCTSTR localFile,LPCTSTR hostName)
1215{ 1215{
1216 if(!CAsyncSocket::Create(0,SOCK_DGRAM)) 1216 if(!CAsyncSocket::Create(0,SOCK_DGRAM))
1217 return FALSE; 1217 return FALSE;
1218 ASSERT(m_Daddy); 1218 ASSERT(m_Daddy);
1219 ASSERT(m_Peer.sin_addr.s_addr!=INADDR_NONE || hostName); 1219 ASSERT(m_Peer.sin_addr.s_addr!=INADDR_NONE || hostName);
1220 m_Daddy->m_Xfers[m_hSocket]=this; 1220 m_Daddy->m_Xfers[m_hSocket]=this;
1221 TurnSlashes(m_FileName,TRUE);
1222 UpdateList(); 1221 UpdateList();
1223CString fn = localFile?ApplyRootGently(localFile):ApplyRoot(m_FileName); 1222CString lf;
1223 if(!localFile) {
1224 lf = m_FileName;
1225 TurnSlashes(lf,TRUE);
1226 }
1227CString fn = localFile?ApplyRootGently(localFile):ApplyRoot(lf);
1224 if(!localFile){// This is an incoming request.. 1228 if(!localFile){// This is an incoming request..
1225 if(CheckBadRelativeness(m_FileName)){ 1229 if(CheckBadRelativeness(m_FileName)){
1226 Deny(tftp::errAccessViolation,IDS_TFTP_ERROR_ACCESS); 1230 Deny(tftp::errAccessViolation,IDS_TFTP_ERROR_ACCESS);
1227 return TRUE; 1231 return TRUE;
1228 } 1232 }
1229 BOOL exists; 1233 BOOL exists;
1230 if(!_access((LPCTSTR)fn,0)) 1234 if(!_access((LPCTSTR)fn,0))
1231 m_Rename=exists=TRUE; 1235 m_Rename=exists=TRUE;
1232 else 1236 else
1233 m_Rename=exists=FALSE; 1237 m_Rename=exists=FALSE;
1234 // *** m_WRQMode only if server transfer 1238 // *** m_WRQMode only if server transfer
1235 switch(m_Daddy->m_WRQMode){ 1239 switch(m_Daddy->m_WRQMode){
1236 case CPumpKINDlg::wrqTakeAll: 1240 case CPumpKINDlg::wrqTakeAll:
1237 if(exists){ 1241 if(exists){
1238 if(!RenameFile(fn)){ 1242 if(!RenameFile(fn)){
1239 Deny(tftp::errDiskFull,IDS_TFTP_ERROR_FAILEDTORENAME); 1243 Deny(tftp::errDiskFull,IDS_TFTP_ERROR_FAILEDTORENAME);
1240 return TRUE; 1244 return TRUE;
1241 } 1245 }
1242 } 1246 }
1243 break; 1247 break;
1244 case CPumpKINDlg::wrqConfirmIfExists: 1248 case CPumpKINDlg::wrqConfirmIfExists:
1245 if(!exists) 1249 if(!exists)
1246 break; 1250 break;
1247 case CPumpKINDlg::wrqAlwaysConfirm: 1251 case CPumpKINDlg::wrqAlwaysConfirm:
1248 if(exists) 1252 if(exists)
1249 m_bResume=TRUE; 1253 m_bResume=TRUE;
1250 if(ConfirmRequest()){ 1254 if(ConfirmRequest()){
1251 if(m_Rename){ 1255 if(m_Rename){
1252 RenameFile(fn); 1256 RenameFile(fn);
1253 if(SaveAs(fn)) 1257 if(SaveAs(fn))
1254 break; 1258 break;
1255 }else 1259 }else
1256 break; 1260 break;
1257 } 1261 }
1258 case CPumpKINDlg::wrqDenyAll: 1262 case CPumpKINDlg::wrqDenyAll:
1259 Deny(tftp::errAccessViolation,IDS_TFTP_ERROR_ACCESS); 1263 Deny(tftp::errAccessViolation,IDS_TFTP_ERROR_ACCESS);
1260 return TRUE; 1264 return TRUE;
1261 } 1265 }
1262 } 1266 }
1263CFileException e; 1267CFileException e;
1264 if(!m_File.Open( 1268 if(!m_File.Open(
1265 fn, 1269 fn,
1266 m_bResume 1270 m_bResume
1267 ?(CFile::modeWrite|CFile::shareDenyWrite) 1271 ?(CFile::modeWrite|CFile::shareDenyWrite)
1268 :(CFile::modeCreate|CFile::modeWrite|CFile::shareDenyWrite), 1272 :(CFile::modeCreate|CFile::modeWrite|CFile::shareDenyWrite),
1269 &e 1273 &e
1270 )){ 1274 )){
1271 if(localFile){// Outgoing request 1275 if(localFile){// Outgoing request
1272 CString tmp; 1276 CString tmp;
1273 tmp.Format(IDS_LOG_FAILEDTOOPEN,fn); 1277 tmp.Format(IDS_LOG_FAILEDTOOPEN,fn);
1274 m_Daddy->LogLine(tmp); 1278 m_Daddy->LogLine(tmp);
1275 return FALSE; 1279 return FALSE;
1276 }else{ 1280 }else{
1277 Deny(&e); 1281 Deny(&e);
1278 return TRUE; 1282 return TRUE;
1279 } 1283 }
1280 } 1284 }
1281 if(hostName){ 1285 if(hostName){
1282 m_HostName=hostName; 1286 m_HostName=hostName;
1283 1287
1284 CString tmp; 1288 CString tmp;
1285 tmp.Format(IDS_LOG_REQUESTING,m_FileName,m_HostName); 1289 tmp.Format(IDS_LOG_REQUESTING,m_FileName,m_HostName);
1286 m_Daddy->LogLine(tmp); 1290 m_Daddy->LogLine(tmp);
1287 1291
1288 CString inAddr = hostName; 1292 CString inAddr = hostName;
1289 int at = inAddr.Find('@'); 1293 int at = inAddr.Find('@');
1290 if(at>=0) 1294 if(at>=0)
1291 inAddr=inAddr.Mid(at+1); 1295 inAddr=inAddr.Mid(at+1);
1292 if((m_Peer.sin_addr.s_addr=inet_addr((LPCTSTR)inAddr))==INADDR_NONE){ 1296 if((m_Peer.sin_addr.s_addr=inet_addr((LPCTSTR)inAddr))==INADDR_NONE){
1293 ASSERT(!m_wndResolver); 1297 ASSERT(!m_wndResolver);
1294 m_wndResolver = new CResolver(this); 1298 m_wndResolver = new CResolver(this);
1295 ASSERT(m_wndResolver); 1299 ASSERT(m_wndResolver);
1296 return m_wndResolver->Resolve(); 1300 return m_wndResolver->Resolve();
1297 }else{ 1301 }else{
1298 OnHostKnown(); 1302 OnHostKnown();
1299 return TRUE; 1303 return TRUE;
1300 } 1304 }
1301 } 1305 }
1302CString v; 1306CString v;
1303tftp::tftpOptions oack; 1307tftp::tftpOptions oack;
1304 if(m_Options.Lookup(tftpoTSize,v)){ 1308 if(m_Options.Lookup(tftpoTSize,v)){
1305 m_xferSize=atol(v); 1309 m_xferSize=atol(v);
1306 if(!m_xferSize){ 1310 if(!m_xferSize){
1307 Deny(tftp::errOption,IDS_TFTP_ERROR_TSIZE); 1311 Deny(tftp::errOption,IDS_TFTP_ERROR_TSIZE);
1308 return TRUE; 1312 return TRUE;
1309 } 1313 }
1310 } 1314 }
1311 if(m_Options.Lookup(tftpoBSize,v)){ 1315 if(m_Options.Lookup(tftpoBSize,v)){
1312 m_blkSize=atoi(v); 1316 m_blkSize=atoi(v);
1313 if(!m_blkSize){// *** Do more about sanity check 1317 if(!m_blkSize){// *** Do more about sanity check
1314 Deny(tftp::errOption,IDS_TFTP_ERROR_BSIZE); 1318 Deny(tftp::errOption,IDS_TFTP_ERROR_BSIZE);
1315 return TRUE; 1319 return TRUE;
1316 } 1320 }
1317 v.Format("%u",m_blkSize); 1321 v.Format("%u",m_blkSize);
1318 oack[tftpoBSize]=v; 1322 oack[tftpoBSize]=v;
1319 } 1323 }