📄 main.cpp
字号:
int bytes=pktsize-13-namelen;
int endpos=pos+bytes-1;
found=false;
if(fil_data.size()>=2)
for(unsigned int i=1;i<(fil_data.size()-1);i+=2)
{
//Display((AnsiString)"fil_pos="+fil_data[i]+"\r");
//if(fil_data[i]==pos)
if(((pos>=fil_data[i])&&(pos<=fil_data[i+1]))||((endpos>=fil_data[i])&&(endpos<=fil_data[i+1]))) //if overlap
{
// Display((AnsiString)"fil_pos["+i+"]="+fil_data[i]+" fil_pos["+(i+1)+"]="+fil_data[i+1]+"\r");
//if(bytes!=fil_data[i+1])
if((pos!=fil_data[i])||(endpos!=fil_data[i+1]))
{
//Display("Packet Size Has Changed, deleteing met and fil files\r");
if(webmetfilerec>=0)FileClose(webmetfilerec);webmetfilerec=-2;
if(webfilfilerec>=0)FileClose(webfilfilerec);webfilfilerec=-2;
DeleteFile(SaveDirectory+"\\"+name+".met");
DeleteFile(SaveDirectory+"\\"+name+".fil");
webmetfilenamerec="";
UpDateSaveDirectoryList();
}
found=true;
break;
}
}
if(found)
{
//Display((AnsiString)"Already Written This Packet To Met File, Skiping bytes so far="+fil_data[0]+"/"+size+"\r");
}
else
{
fil_data[0]+=bytes;
fil_data.push_back(pos);
fil_data.push_back(endpos);
// Display("Writeing To Met File\r");
if(FileSeek(webmetfilerec,pos,0)==-1)Display("Error Seeking\r");
if(FileWrite(webmetfilerec,((unsigned char*)&file_pkt_buffer[file_pkt_buffer_ptr_r+namelen+13]),bytes)==-1)Display("Error Writing\r");
// Display((AnsiString)"name="+name+" fil_data[0]="+fil_data[0]+" size="+size+"\r");
if(fil_data[0]>size)
{
//Display("File size mismatch, deleteing met and fil files\r");
if(webmetfilerec>=0)FileClose(webmetfilerec);webmetfilerec=-2;
if(webfilfilerec>=0)FileClose(webfilfilerec);webfilfilerec=-2;
DeleteFile(SaveDirectory+"\\"+name+".met");
DeleteFile(SaveDirectory+"\\"+name+".fil");
webmetfilenamerec="";
UpDateSaveDirectoryList();
}
if(fil_data[0]==size)
{
// Display("Written all Packets To Met File, Closing Met And Fil Files, Renaming Met File, deleteing fil file\r");
// Display("finished=="+name+"\r");displayfildata();
if(webmetfilerec>=0)FileClose(webmetfilerec);webmetfilerec=-2;
if(webfilfilerec>=0)FileClose(webfilfilerec);webfilfilerec=-2;
if(!RenameFile(SaveDirectory+"\\"+name+".met",SaveDirectory+"\\"+name))Display("Error Renameing Met File\r");//webmetfilenamerec,SaveDirectory+"\\"+name))Display("Error Renameing Met File\r");
DeleteFile(SaveDirectory+"\\"+name+".fil");
webmetfilenamerec="";
UpDateSaveDirectoryList();
}
}
}
}
file_pkt_buffer_ptr_r+=pktsize;
}
//------------------------------------------------------------------------
void __fastcall TQAMForm::UpDateSaveDirectoryList()
{
NameSizeDate nsd;
File_name_size_date.resize(0);
File_name_size_date.reserve(10);
int iAttributes = faReadOnly | faHidden | faSysFile | faArchive;//faReadOnly | faHidden | faSysFile | faVolumeID | faDirectory | faArchive | faAnyFile;
TSearchRec sr;
if (FindFirst(SaveDirectory+"\\*.*", iAttributes, sr) == 0)
{
do
{
if ((sr.Attr & iAttributes) == sr.Attr)
{
nsd.Filename=sr.Name;
nsd.FileDate=FileAge(SaveDirectory+"\\"+nsd.Filename);
nsd.FileSize = sr.Size;
File_name_size_date.push_back(nsd);
//Display((AnsiString)"name="+sr.Name+" size="+sr.Size+"\r");
}
Sleep(0);
} while (FindNext(sr) == 0);
FindClose(sr);
}
File_name_size_date.reserve(File_name_size_date.size()+10);
}
//-------------------------------------------------------------
//---------------------------------------------------------------
// web sending section
//---------------------------------------------------------------
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
AnsiString __fastcall TQAMForm::GetNextFileNameToSend()
{
if(SettingsForm->Showing)return ("");
if(file_selector_pos_step.size()==0)return ("");
int biggestpos=-1;
int biggestval=-1;
for(unsigned int i=0;i<file_selector_pos_step.size();i++)
{
bool inuse=false;
for(int j=0;j<ftp_clients->Count;j++)
{
if(((FTPClient_PutFile*)ftp_clients->Items[j])->PutName==SettingsForm->ValueListEditorFiles->Cells[0][i+1])
{
inuse=true;
break;
}
}
if((!inuse)&&(file_selector_pos_step[i].Pos>biggestval)&&(file_selector_pos_step[i].Step>0))//&&(ValueListEditorFiles->Cells[0][i+1]!=ftp_using_file_name))
{
biggestval=file_selector_pos_step[i].Pos;
biggestpos=i;
}
}
if(biggestpos<0)return ("");
for(unsigned int i=0;i<file_selector_pos_step.size();i++)
{
// Display((AnsiString)file_pos_step.Pos[i]+" ");
file_selector_pos_step[i].Pos+=file_selector_pos_step[i].Step;
}
// Display("\r");
file_selector_pos_step[biggestpos].Pos=0;
//Display((AnsiString)biggestpos+": "+ValueListEditorFiles->Cells[0][biggestpos+1]+" (sending) step="+file_selector_pos_step[biggestpos].Step+" \r");
return SettingsForm->ValueListEditorFiles->Cells[0][biggestpos+1];
}
//---------------------------------------------------------------------------
void __fastcall TQAMForm::SendNextWebPkt(TMessage &Msg)
{
if(webfile<-1)
{
webfilename=GetNextFileNameToSend();
if(webfilename=="")
{
gSettings.ModMinor.CM_SENDNEXTWEBPACKET_is_handled=true;
return;
}
webfile=FileOpen(SettingsForm->JvDirectoryEditWebDir->Text+"\\"+webfilename, fmOpenRead | fmShareDenyNone);
if(webfile<0){Display("ERROR opening file\r");webfile=-2;gSettings.ModMinor.CM_SENDNEXTWEBPACKET_is_handled=true;return;}
webfilelen = FileSeek(webfile,0,2);
webfilepos=FileSeek(webfile,0,0);
webfileage=FileAge(SettingsForm->JvDirectoryEditWebDir->Text+"\\"+webfilename);
webpktsize=webfilename.Length();
webpkt.resize(webpktsize+17+webpktdatasize);
char* tp=webfilename.c_str();
for(int i=0;i<webpktsize;i++)webpkt[i]=((unsigned char*)tp)[i];
webpkt[webpktsize]=0;
*((int*)&webpkt[webpktsize+1])=webfilelen;
*((int*)&webpkt[webpktsize+5])=webfileage;
*((int*)&webpkt[webpktsize+9])=webfilepos;
//Display((AnsiString)"Opened file:\rName="+Directory+"\\"+webfilename+"\rage="+webfileage+"\rsize="+webfilelen+"\r");
}
if(webfile>=0)
{
webpktsize=webfilename.Length();
*((int*)&webpkt[webpktsize+9])=webfilepos;
int BytesRead = FileRead(webfile,&webpkt[webpktsize+13],webpktdatasize);
webfilepos+=BytesRead;
if(BytesRead>0)
{
webpktsize+=13+BytesRead;
AddCRC32(&webpkt[0],&webpktsize);
mod->dataformatter->LoadNextBufferPacket(&webpkt[0],webpktsize,ptWeb);
// Display((AnsiString)"name="+(char*)webpkt+"\rfilesize="+*((int*)&webpkt[webfilename.Length()+1])+"\rage="+*((int*)&webpkt[webfilename.Length()+5])+"\rpos="+*((int*)&webpkt[webfilename.Length()+9])+"\rwebpktsize="+webpktsize+"\rCrc32="+*((unsigned int*)&webpkt[webpktsize-4])+"\r");
}
if(BytesRead<webpktdatasize)
{
FileClose(webfile);
webfile=-2;
//Display("Closed File\r");
}
}
gSettings.ModMinor.CM_SENDNEXTWEBPACKET_is_handled=true;
}
//---------------------------------------------------------------------------
void __fastcall TQAMForm::CMDirContentsChanged(TMessage &Msg)
{
FileListBoxApplyPath(SettingsForm->JvDirectoryEditWebDir->Text);
LoadSendingFileNames();
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
// ftp section
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
void __fastcall TQAMForm::FtpServer1Authenticate(TObject *Sender,
TFtpCtrlSocket *Client, TFtpString &UserName, TFtpString &Password,
bool &Authenticated)
{
Authenticated=false;
if(((AnsiString)UserName==SettingsForm->JvEditFTPUserName->Text)&&((AnsiString)Password==SettingsForm->JvEditFTPPassWord->Text))Authenticated=true;
}
//---------------------------------------------------------------------------
void __fastcall TQAMForm::FtpServer1ChangeDirectory(TObject *Sender,
TFtpCtrlSocket *Client, TFtpString &Directory, bool &Allowed)
{
Allowed=false;
if((AnsiString)Directory==Client->HomeDir)Allowed=true;
}
//---------------------------------------------------------------------------
void __fastcall TQAMForm::FtpServer1ClientConnect(TObject *Sender,
TFtpCtrlSocket *Client, WORD AError)
{
Client->HomeDir=SettingsForm->JvDirectoryEditWebDir->Text;
int Itm=ftp_clients->Add(new FTPClient_PutFile);
((FTPClient_PutFile*)ftp_clients->Items[Itm])->Client=Client;
((FTPClient_PutFile*)ftp_clients->Items[Itm])->PutName="";
((FTPClient_PutFile*)ftp_clients->Items[Itm])->Storeing=false;
}
//---------------------------------------------------------------------------
void __fastcall TQAMForm::FtpServer1MakeDirectory(TObject *Sender,
TFtpCtrlSocket *Client, TFtpString &Directory, bool &Allowed)
{
Allowed=false;
}
//---------------------------------------------------------------------------
void __fastcall TQAMForm::FtpServer1ValidateRnTo(TObject *Sender,
TFtpCtrlSocket *Client, TFtpString &FilePath, bool &Allowed)
{
GainFileAccess(Client,Client->FromFileName,false);
}
//---------------------------------------------------------------------------
void __fastcall TQAMForm::FtpServer1ValidateRmd(TObject *Sender,
TFtpCtrlSocket *Client, TFtpString &FilePath, bool &Allowed)
{
Allowed=false;
}
//---------------------------------------------------------------------------
void __fastcall TQAMForm::FtpServer1AnswerToClient(TObject *Sender,
TFtpCtrlSocket *Client, TFtpString &Answer)
{
FTPClient_PutFile *ftpclient_pufile;
ftpclient_pufile=GetFTPClient_PutFile(Client);
if((ftpclient_pufile)&&(!ftpclient_pufile->Storeing))ftpclient_pufile->PutName="";
}
//---------------------------------------------------------------------------
int __fastcall TQAMForm::FindFTPClient(TFtpCtrlSocket *Client)
{
int Itm = -1;
for(int i=0;i<ftp_clients->Count;i++)
{
if(((FTPClient_PutFile*)ftp_clients->Items[i])->Client==Client)
{
Itm=i;
break;
}
}
return Itm;
}
//---------------------------------------------------------------------------
void __fastcall TQAMForm::FtpServer1ClientDisconnect(TObject *Sender,
TFtpCtrlSocket *Client, WORD AError)
{
int Itm = FindFTPClient(Client);
if(Itm>=0)
{
delete ((FTPClient_PutFile*)ftp_clients->Items[Itm]);
ftp_clients->Delete(Itm);
}
}
//---------------------------------------------------------------------------
void __fastcall TQAMForm::FtpServer1ValidateDele(TObject *Sender,
TFtpCtrlSocket *Client, TFtpString &FilePath, bool &Allowed)
{
GainFileAccess(Client,(AnsiString)FilePath,false);
}
//---------------------------------------------------------------------------
void __fastcall TQAMForm::GainFileAccess(TFtpCtrlSocket *Client,AnsiString FilePath,bool Storeing)
{
int Itm = FindFTPClient(Client);
if(Itm<0) return;
if(Storeing)((FTPClient_PutFile*)ftp_clients->Items[Itm])->Storeing=true;
else ((FTPClient_PutFile*)ftp_clients->Items[Itm])->Storeing=false;
((FTPClient_PutFile*)ftp_clients->Items[Itm])->PutName=ExtractFileName(FilePath);
if((((FTPClient_PutFile*)ftp_clients->Items[Itm])->PutName==webfilename)&&(webfile>=0))
{
FileClose(webfile);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -