unit _uc_ExoSeeKerneL;
// be cafull of VCL interaction !!! , only read !!! , synchronize when write !!!!
interface
uses windows,SysUtils,classes,scktcomp,Forms,ComCtrls,_uf_rcvFile,FileCtrl;
type
TEXOSEE_KERNEL_THREAD = class(TServerClientThread)
private
_X_PROTO_CODE : String[8];
_SS_THREAD_ACTIVE_TASK : String[20];
_SS_STR_LOG : String;
_UpLoad_Item :TListItem;
_Active_file :string;
_SS_FX_DATA_FILE :TFileStream;
_SS_IS_PANIK_ERROR :Boolean;
_SS_IS_CANCELED :boolean;
_vSS__FILE_UPLOAD_DEC_SIZA : Int64;
_vSS__FILE_RCV_DONE_OK : Boolean;
_vSS__FILE_RCV_IS_OTO_ACCEPT : Boolean;
_vSS__FILE_RCV_FILENAME : String;
_vSS__FILE_RCV_FILESIZE : Int64;
_vSS__FILE_RCV_READEN : Int64;
_vSS__FILE_RCV_LOCAL_SAVA_FILENAME : String;
sDebug : string;
FRcvForm : T_FRcvFile;
procedure _ssGo_IncominBuilder_MAIN;
procedure _ssGo_ExpLorer_MAIN;
function _ssGo_ExpLorer_TheLocalPATH(_FullPath: string): string;
function _ssGo_ExpLorer_TheMainROOTS(okPrivs, okXtra: boolean; xtra,_nik: string): string;
procedure _ssGo_FileUpload_MAIN;
procedure _ssGo_FileUpload_INITIALIZATION;
procedure _ssGo_FileUpload_SHAWA_BB;
procedure ssGo_FileRcv_MAIN;
procedure ssGo_FileRcv_RcvACCEPT;
procedure ssGo_FileRcv_OkACCEPTED;
procedure ssGo_FileRcv_SHAWA;
procedure ssGo_FileRcv_TERMINATED;
protected
procedure ClientExecute; override;
procedure _DoInstantLoG;
public
_Wsk :TWinSocketStream;
_SS_REMOTE_USER_SOCKET_IP : String[15];
_SS_REMOTE_USER_NICKNAME : String[16];
_SS_REMOTE_USER_PC_ID : String[10];
_SS_STATUS_CODE : Byte;
_sData:String;
nComNode:TTreeNode;
procedure _Syn2LoG(sss: String);
procedure On_terminated(Sender: TObject);
end;
implementation
uses Unit1,_uc_funcs,_uc_refs_consts,_uc_refs_vars,_uc_crypto,_uc_cs_new1ini,_uc_GuiLanG;
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
procedure TEXOSEE_KERNEL_THREAD._Syn2LoG(sss: String);
begin
_SS_STR_LOG:=sss;
Synchronize(_DoInstantLoG);
end;
//------------------------------------------------------------------------------
procedure TEXOSEE_KERNEL_THREAD._DoInstantLoG;
begin
_FXOC_MAIN.TheLOGGER.Log(_SS_STR_LOG,0);
//Application.ProcessMessages;
end;
//------------------------------------------------------------------------------
procedure TEXOSEE_KERNEL_THREAD.On_terminated(Sender: TObject);
begin
//dec(_ACTIVE_TOTAL_THREADS_COUNT);
if (_FXOC_MAIN.izDebugerON.Checked) then _FXOC_MAIN.TheLOGGER.Log('sDebug:'+sDebug);
//TLogger.Log(ret+sep+ret+'TEXOSEE_KERNEL_terminated_:'+IntToStr(_SS_STATUS_CODE)+' >> '+_SS_ACTIVE_TASK+ret+_sData);
(* *)
case _SS_STATUS_CODE of // add user + reason
//1 : _do_LoG('1/NoComInHome',1,false);
2 : _FXOC_MAIN.TheLOGGER.Log(format(___ccc__0102__LanUserRejected,[_SS_REMOTE_USER_NICKNAME]),1);
3 : _FXOC_MAIN.TheLOGGER.Log(format(___ccc__0101__BannedRejected,[_SS_REMOTE_USER_NICKNAME]),1);
10 : set_newUser_ini_DataNode(_SS_REMOTE_USER_SOCKET_IP,_sData,nComNode); // new1boyaNode is OK ( found )
//11 : _log('1xpNotInisDDkrK',1,false);
// 12 : _log('1xp_roots_ok',1,false);
13,15 : _FXOC_MAIN.TheLOGGER.Log(format(___ccc__0103__XtraFolder4UserNotSet,[_SS_REMOTE_USER_NICKNAME]),1); // folder not set
16 : _FXOC_MAIN.TheLOGGER.Log(___ccc__0104__XtraFolderNotAllowed4+_SS_REMOTE_USER_NICKNAME,1); // not allowed
// 20 : _do_LoG('xpL_..',1,false); // IN ADVANCED ADD USER browsing path
// 30 : _log(_XData,0); // cs_filter ok ini
99 : if (_SS_THREAD_ACTIVE_TASK<>'') then _FXOC_MAIN.TheLOGGER.Log('_T_THREADS_MANAGER_ERROR_['+_SS_THREAD_ACTIVE_TASK+']',1); // +_ActiveERROR
end;
// Application.ProcessMessages;
end;
//------------------------------------------------------------------------------
procedure TEXOSEE_KERNEL_THREAD.ClientExecute;
begin
inc(_SERVER_ACTIVE_TOTAL_THREADS_COUNT);
try //--------1
_Wsk := TWinSocketStream.Create(ClientSocket, 10000);
try //--------2
_SS_REMOTE_USER_SOCKET_IP:=ClientSocket.RemoteAddress;
if _Wsk.WaitForData(10000) then
begin
_X_PROTO_CODE:=TCrypto._SimSim(ClientSocket.ReceiveText); // 10sec to begin
if (_X_PROTO_CODE[1]=#0)and(_X_PROTO_CODE[4]='ë') then // #9=ë !!! for tab9 be in packets
begin
case _X_PROTO_CODE[2] of
'A' : _ssGo_IncominBuilder_MAIN;
'B' : _ssGo_ExpLorer_MAIN;
'G' : _ssGo_FileUpload_MAIN;
'I' : ssGo_FileRcv_MAIN;
else _Syn2LoG('x[?]. REJECTED! ->'+_X_PROTO_CODE);
end;
end
else
begin
_Syn2LoG('Unknown_cmd_from_('+_SS_REMOTE_USER_SOCKET_IP+') REJECTED!');
end;
end
else begin //
_Syn2LoG('Unknown_('+_SS_REMOTE_USER_SOCKET_IP+') REJECTED!');
end;
finally
// no !! DO_LING here >>> it cuts last bytes
ClientSocket.Close; // will charge after all sent
_Wsk.Free;
end; //--------2
Except
_SS_STATUS_CODE :=99;
(*
on E: Exception do
begin
if not(ExceptObject is EAbort) then
begin
//_Syn2LoG('TXCEPT : '+E.Message);
_SS_STATUS_CODE :=99;
end;
end;
*)
end;
end;
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//----------------------------------------_ssGo_IncominBuilder_MAIN-------------
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
procedure TEXOSEE_KERNEL_THREAD._ssGo_IncominBuilder_MAIN;
var
sIncomComADR:string;
begin
_SS_THREAD_ACTIVE_TASK:='_builder_ini0'; // a must to catch kk maker
ClientSocket.SendText(#0+'A'+#0+'a'); // direct no barzat '
_SS_THREAD_ACTIVE_TASK:='_builder_ini1'; // a must to catch kk maker
if _Wsk.WaitForData(5000) then // user loging... data coming
begin
_sData:=TCrypto._SimSim(ClientSocket.ReceiveText);
// if ok >> send mySdata else >> send reject code...its waiting there !
_SS_THREAD_ACTIVE_TASK:='_builder_ini2'; // a must to catch kk maker
// check if user com is in my home by IDX ( com full url )
sIncomComADR:=copy(_sData,pos(':G',_sData)+2,(pos('G;',_sData)-pos(':G',_sData))-2);
nComNode:=is_COMMUNITY_in_HOME(sIncomComADR);
_SS_THREAD_ACTIVE_TASK:='_builder_ini3'; // a must to catch kk maker
if (nComNode=nil)or(nComNode._EXO_NODE_IS_STOPING) then // fixed is com stopping
begin
ClientSocket.SendText(TCrypto.kozkozo('1NoComInHome')); // no coded
_SS_STATUS_CODE:=1;
exit;
end;
// ignore if lan & i dont want them
if (_VV_LOCAL_CONFIG_I_ACCEPT_NO_LAN) and (_sData[3]='L') then //1+2(:A)
begin
ClientSocket.SendText(TCrypto.kozkozo('2NoAxLAN')); // coded ! kozkozo
_SS_STATUS_CODE:=2;
end;
_SS_THREAD_ACTIVE_TASK:='_builder_ini4'; // a must to catch kk maker
// ignore if userID in black list
if (pos(copy(_sData,pos(':F',_sData)+2,(pos('F;',_sData)-pos(':F',_sData))-2), _VV_LOCAL_CONFIG_BANNED_USERS_LIST)>0)then
begin
ClientSocket.SendText(TCrypto.kozkozo('3Banned')); // coded ! kozkozo
_SS_STATUS_CODE:=3;
end;
_SS_THREAD_ACTIVE_TASK:='_builder_ini5'; // a must to catch kk maker
if (_SS_STATUS_CODE in [2,3])then //grab nik for log and EXIT
begin
_SS_REMOTE_USER_NICKNAME:=copy(_sData,pos(':B',_sData)+2,(pos('B;',_sData)-pos(':B',_sData))-2);
exit;
end;
_SS_THREAD_ACTIVE_TASK:='_builder_ini6'; // a must to catch kk maker
//--------is ok till here .... give my info too (kozkoz here)
ClientSocket.SendText(TCrypto.kozkozo(':A'+_VV_LOCAL_USER_MY8_BOOLEANS+'A;'+ // all my bools , lan/wan...status....etc
':B'+_VV_LOCAL_USER_NIKO+'B;'+
':C'+_VV_LOCAL_USER_COUNTRY_CODE+'C;'+
':D'+_VV_LOCAL_USER_MESSAGE+'D;'+
':E_E;'+
':F'+_VV_LOCAL_USER_PC_ID+'F;' // com is as needed
//':G'+_comADRiDX+'G;' // com no need to send , i only accepted
)); // send my data
_SS_THREAD_ACTIVE_TASK:='_builder_ini7'; // a must to catch kk maker
_SS_STATUS_CODE:=10;
// wait while he'll recive what sent above
//_Wsk.WaitForData(5000); hmmmm no need
end;
end;
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//----------------------------------------------_ssGo_ExpLorer_MAIN-------------
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
procedure TEXOSEE_KERNEL_THREAD._ssGo_ExpLorer_MAIN;
var
_xRcvData:String;
_s,_z,_uID,_SekReq,_ReqfullPath,_xtraPath:string;
_nBB:byte;
_typ:char;
_xStRm:TMemoryStream;
Buf: PByteArray;
SIZA,i:integer;
_XpUser_Node :TTreeNode;
BufSize,poz, SndLen: Integer;
_canPrivs,_canXtra:boolean;
begin
_SS_THREAD_ACTIVE_TASK:='_explorer'; // a must to catch kk maker
ClientSocket.SendText(#0+'B'+#0+'b'); // direct no barzat '
if _Wsk.WaitForData(5000) then // user log ing...
begin
_canPrivs :=false;
_canXtra :=false;
_xRcvData:=TCrypto._SimSim(ClientSocket.ReceiveText);
//'<I'+_XpNode._EXO_NODE_USER_ID+'I>'+
//'<N'+_XpNode._EXO_NODE_PATH_NB+'N>'+
//'<P'+_XpNode._EXO_NODE_PATH_TX+'P>'+
//TLogger.Log('_xRcvData('+_xRcvData+')');
// check if user id first
_uID:=copy(_xRcvData,pos('<I',_xRcvData)+2,(pos('I>',_xRcvData)-pos('<I',_xRcvData))-2);
_XpUser_Node :=_is_UserID_in_The_NETWORKS_Tree(_uID); // added fix com stopping
if (_XpUser_Node=nil) then begin
ClientSocket.SendText(TCrypto.kozkozo('1NotInisDDkrK')); // no coded
_SS_STATUS_CODE:=11;
exit;
end;
_nBB :=strtointdef('$'+copy(_xRcvData,pos('<N',_xRcvData)+2,(pos('N>',_xRcvData)-pos('<N',_xRcvData))-2),-1);
_SekReq :=copy(_xRcvData,pos('<P',_xRcvData)+2,(pos('P>',_xRcvData)-pos('<P',_xRcvData))-2);
_typ :=copy(_xRcvData,pos('<T',_xRcvData)+2,(pos('T>',_xRcvData)-pos('<T',_xRcvData))-2)[1];
_SS_REMOTE_USER_NICKNAME:=_XpUser_Node.Text;//grab nikname , node till he its ok
case _nBB of
0 : begin // 00 = shared_roots kozkozo
if pos(_uID,_VV_LOCAL_USER_FAVORITES_LIST)>0 then //check if fav+++
begin
for i:=0 to _TV_NODE_OF_FAVORITES.Count-1 do
begin
_z:=_TV_NODE_OF_FAVORITES.Item[i]._EXO_NODE_COM_IDX; // 1C080B2CD3xxA01000000%1Ismail%2F:\_Pc-Set\_Drivers%3
if copy(_z,1,10)=_uID then begin
_canPrivs :=_z[13+1]='1';
_canXtra :=_z[13+3]='1';
//_z:=_FMAIN._favies.Items[i]._Str; // re-use _z
if _canXtra then
_xtraPath:=copy(_z,pos('%2',_z)+2,pos('%3',_z)-pos('%2',_z)-2);
break;
end;
end;
end;
_s:=_ssGo_ExpLorer_TheMainROOTS(_canPrivs,_canXtra,_xtraPath,_SS_REMOTE_USER_NICKNAME);
SIZA :=length(_s);
_Wsk.Write(SIZA, SizeOf(SIZA)); // it sends size - offset !!! ,
ClientSocket.SendText(_s);
_SS_STATUS_CODE:=12;
end;
1..255 : begin
case _typ of
'0' : _ReqfullPath:=EXPLORER_PUBLIC_ROOTS[_nBB-1]+_SekReq; // pub
'1' : _ReqfullPath:=EXPLORER_PRIVATE_ROOTS[_nBB-1]+_SekReq; // priv
'2' : begin // xtra
_xtraPath:=_GimeFavUserXtraFolder(_uID);
if _xtraPath<>'' then _ReqfullPath:=_xtraPath+_SekReq
else begin
_SS_STATUS_CODE:=13;
ClientSocket.SendText(TCrypto.kozkozo('2xtraNotSet')); //
exit;
end;
end;
end;
_ReqfullPath:=stringreplace(_ReqfullPath,'\\','\',[rfReplaceAll]); // clean here
// if folder exist
// _log(ret+'_ReqfullPath >> '+_ReqfullPath,0);
// !!!!! 8KB bug !!!!! >> reUse _uID for stream
_s:=_ssGo_ExpLorer_TheLocalPATH(_ReqfullPath);
_xStRm:=TMemoryStream.Create;
_xStRm.Write(pointer(_s)^,length(_s));
_xStRm.Position:=0;
SIZA :=_xStRm.Size;
_Wsk.Write(SIZA, SizeOf(SIZA)); // it sends size - offset !!! , waitng there
if SIZA < MAX_BUFFER_EXPLOLRER_BROWSING then BufSize := SIZA
else BufSize := MAX_BUFFER_EXPLOLRER_BROWSING;
GetMem(Buf, BufSize);
Try //--------4
while (SIZA>0) and (ClientSocket.Connected) do
begin
if SIZA > BufSize then SndLen := BufSize else SndLen := SIZA;
_xStRm.Read(Buf^, SndLen);
poz := 0;
while (poz < SndLen) do
begin
Inc(poz, _Wsk.Write(Buf^[poz],SndLen) );
end;
Dec(SIZA, SndLen);
if _THE_EXOSEE_APPLICATION_IS_TERMINATED then break;
end;
finally FreeMem(Buf); end; //--------4 freemem(...,BufSize) was in >=17-pr3
_xStRm.Free;
end;
end;
end;
(**)
end;
//------------------------------------------------------------------------------
function TEXOSEE_KERNEL_THREAD._ssGo_ExpLorer_TheMainROOTS(okPrivs,okXtra:boolean;xtra,_nik:string):string;
var
i:integer;
begin
(* *)
// 0 pubs
// 1 pub+privs
// 2 pub+xtra
// 3 pubs+privs+xtra
for i:=0 to EXPLORER_PUBLIC_ROOTS.Count-1 do
begin
result:=result+'<R>'+inttohex(i+1,2)+_folder_lastName(EXPLORER_PUBLIC_ROOTS[i])+ret;
end;
if okPrivs then // pub + privs
begin
for i:=0 to EXPLORER_PRIVATE_ROOTS.Count-1 do
begin
result:=result+'<V>'+inttohex(i+1,2)+_folder_lastName(EXPLORER_PRIVATE_ROOTS[i])+ret;
end;
end;
if okXtra then // pub + xtra
begin
if DirectoryExists(xtra) then
result:=result+'<X>77'+_folder_lastName(xtra)+ret // 77 = any>0 to be accepted there , it will be detected by 'T'
else _Syn2LoG(format(___ccc__0103__XtraFolder4UserNotSet,[_nik]));
end;
result:=result+'<Z>'+ret;
end;
//------------------------------------------------------------------------------
function TEXOSEE_KERNEL_THREAD._ssGo_ExpLorer_TheLocalPATH(_FullPath:string):string; // no nik needed here
var
i:integer;
zz:TSearchRec;
_fSiZe64:Int64;
begin
if not DirectoryExists(_FullPath) then
begin
Result:='<!>'+ret; // ADD FOLDER + mark
_Syn2LoG(format(___ccc__0046__CheckPubFolder,[_FullPath]));
exit;
end;
i:= FindFirst(_FullPath+'*.*',faanyfile,zz);
while i = 0 do
begin
if (zz.Name <> '.') and (zz.Name <> '..')then
begin
if (zz.attr and fadirectory >0 ) then
Result:=Result+'<d>'+zz.name+ret // ADD FOLDER + mark
else
begin // a file
_fSiZe64 :=Int64(zz.FindData.nFileSizeHigh) shl 32 + Int64(zz.FindData.nFileSizeLow);
Result:=Result+format('<f>%s?%d',[zz.name,_fSiZe64])+ret;// !!!!! no octos to speed // add file + mark
end;
end;
// Application.processmessages;
i:= FindNext(zz);
end;
FindClose(zz);
result:=result+'<Z>'; // 'Z' to be sorted last '<' is a must to accept there even for 0 files or 0 folders !!
//_log(format('%d folders - %d files',[d,f]),0);
//_log(result,0);
end;
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
procedure TEXOSEE_KERNEL_THREAD._ssGo_FileUpload_MAIN;
var
c:char;
s,rooty:string;
RN:Byte;
t:TTreeNode;
ofs,BuffSizo,sentL,pozo:Int64;
pBuf: PByteArray;
_Is_it_OK : boolean;
begin
_SS_THREAD_ACTIVE_TASK:='_DlvExplorer'; // a must to catch kk maker
if _VV_LOCAL_CONFIG_ACTIVE_UPLOADS>=(_VV_LOCAL_CONFIG_MAX_UPLOADS) then c:='0' else c:='1';
ClientSocket.SendText(#0+'G'+c+'g'); // direct no barzat '
// was above in beta02-A ( the bug )
inc(_VV_LOCAL_CONFIG_ACTIVE_UPLOADS); // >> ++
//inc(_ACTIVE_TOTAL_UPLOADS_COUNT);
//Synchronize(_total_Uploads_Show);
if c='1' then
begin
_Is_it_OK:=True;
if _Wsk.WaitForData(5000) then // user loging...
begin
s:=TCrypto._SimSim(ClientSocket.ReceiveText);
// '_DW_A_00_0000000000_1111111111111111_%s',[_tp,_pn,_VV_LOCAL_USER_PC_ID,_data_file.Size,_full_file]);
_SS_REMOTE_USER_PC_ID:=copy(s,10,10);
t:=_is_UserID_in_The_NETWORKS_Tree(_SS_REMOTE_USER_PC_ID); // read id ( fixed com stopping )
_SS_THREAD_ACTIVE_TASK:=_SS_THREAD_ACTIVE_TASK+'_01'; // BugDetection
if (t<>nil)then
begin //--------adding----------------
if t.ImageIndex=3 then // direct kik
begin
_vSS__FILE_UPLOAD_DEC_SIZA:=-777; //(-777) >> send no fw-access >> go to end
_Wsk.Write(_vSS__FILE_UPLOAD_DEC_SIZA, SizeOf(_vSS__FILE_UPLOAD_DEC_SIZA)); // it sends NO-ACCESS !!! , waitng there >> then go to end
end
else
begin
_SS_REMOTE_USER_NICKNAME:=t.Text; // set nik
RN:=StrToIntDef('$'+copy(s,7,2),0); // pn
if RN>0 then dec(RN);
_SS_THREAD_ACTIVE_TASK:=_SS_THREAD_ACTIVE_TASK+'_02'; // BugDetection
case s[5] of
'0' : rooty:=EXPLORER_PUBLIC_ROOTS[RN]; //pub
'1' : rooty:=EXPLORER_PRIVATE_ROOTS[RN]; //priv
'2' : begin //xtra 2 fix
if pos(_SS_REMOTE_USER_PC_ID,_VV_LOCAL_USER_FAVORITES_LIST)=0 then _Is_it_OK:=false
else begin
rooty:=_GimeFavUserXtraFolder(_SS_REMOTE_USER_PC_ID);
if (rooty<>'') and (is_fav_allowed_2_do(_SS_REMOTE_USER_PC_ID,3))
then _Is_it_OK:=true;
end;
end;
end;
_SS_THREAD_ACTIVE_TASK:=_SS_THREAD_ACTIVE_TASK+'_03'; // BugDetection
if not _Is_it_OK then begin // we exit !!!
if _VV_LOCAL_CONFIG_MAX_UPLOADS>0 then dec(_VV_LOCAL_CONFIG_ACTIVE_UPLOADS); // >> --
//dec(_ACTIVE_TOTAL_UPLOADS_COUNT);
//Synchronize(_total_Uploads_Show);
if rooty='' then _SS_STATUS_CODE:=15 // folder not set
else _SS_STATUS_CODE:=16; // not allowed
exit;
end;
// '_DW_A_00_0000000000_1111111111111111_%s',[_tp,_pn,_VV_LOCAL_USER_PC_ID,_data_file.Size,_full_file]);
// _DW_0_03_1E45355311_0000000000000000_\[Movie DVD] - Assault on Precinct 13 (2005) R [Action].rar
_Active_file :=copy(s,38,length(s)-37); // file
ofs :=StrToIntDef('$'+copy(s,21,16),0); //ofs
_Active_file:=rooty+_Active_file;// full file_name_now
_Active_file:=stringreplace(_Active_file,'\\','\',[rfReplaceAll]); // a must clean here
//_log('>>>>'+_Active_file,0);
_SS_THREAD_ACTIVE_TASK:=_SS_THREAD_ACTIVE_TASK+'_04'; // BugDetection
if FileExists(_Active_file) then // // file exists here
begin
_SS_FX_DATA_FILE:=TFileStream.Create(_Active_file,fmOpenRead or fmShareDenyWrite);
Try //--------3
_SS_FX_DATA_FILE.Position := ofs; // resume
_vSS__FILE_UPLOAD_DEC_SIZA:= _SS_FX_DATA_FILE.Size-ofs;
//* error -1
sDebug:='ofs:'+IntToStr(ofs)+ret+
'_SS_FX_DATA_FILE.Size:'+IntToStr(_SS_FX_DATA_FILE.Size)+ret+
IntToStr(_vSS__FILE_UPLOAD_DEC_SIZA);
Synchronize(_ssGo_FileUpload_INITIALIZATION); // creation of timer KBS in it
_UpLoad_Item.itm_int1:=_vSS__FILE_UPLOAD_DEC_SIZA; // a must for upload %
_Wsk.Write(_vSS__FILE_UPLOAD_DEC_SIZA, SizeOf(_vSS__FILE_UPLOAD_DEC_SIZA)); // it sends size - offset !!! , waitng there
if (_vSS__FILE_UPLOAD_DEC_SIZA < MAX_BUFFER_EXPLOLRER_DOWNLOADING) then BuffSizo := _vSS__FILE_UPLOAD_DEC_SIZA
else BuffSizo := MAX_BUFFER_EXPLOLRER_DOWNLOADING;
GetMem(pBuf, BuffSizo);
Try //--------4
while (_vSS__FILE_UPLOAD_DEC_SIZA>0) and (ClientSocket.Connected) do
begin
if (_vSS__FILE_UPLOAD_DEC_SIZA>BuffSizo) then sentL := BuffSizo else sentL := _vSS__FILE_UPLOAD_DEC_SIZA;
_SS_FX_DATA_FILE.Read(pBuf^, sentL);
pozo := 0;
while (pozo < sentL) do
begin
try
Inc(pozo, _Wsk.Write(pBuf^[pozo],sentL));
Except pozo:=0; end; // kk detected !! >> confirm 0
// if writing 0 then exit soon !
if (pozo=0) then begin _SS_IS_PANIK_ERROR:=true; break; end;
//Write error 64, Le nom réseau spécifié n'est plus disponible
end;
Dec(_vSS__FILE_UPLOAD_DEC_SIZA, sentL);
Synchronize(_ssGo_FileUpload_SHAWA_BB);
if (_SS_IS_CANCELED) or (_SS_IS_PANIK_ERROR) or (_THE_EXOSEE_APPLICATION_IS_TERMINATED) then break;
end;
finally FreeMem(pBuf); end; //--------4 freemem(...,BufSize) bugs!!! was in >=17-pr3
finally _SS_FX_DATA_FILE.Free; end; //--------3
end;// end of file ok
if (_UpLoad_Item<>nil)and(_SS_IS_PANIK_ERROR) then _UpLoad_Item._Pozo:=44; // aborted
//Synchronize(_upload_item_terminated);
end; // ok
end; // node no nil
end; // 5000 ok
end; // c=1 ok
if _VV_LOCAL_CONFIG_ACTIVE_UPLOADS>0 then dec(_VV_LOCAL_CONFIG_ACTIVE_UPLOADS); // >> --
dec(_VV_LOCAL_CONFIG_MAX_UPLOADS);
//Synchronize(_total_Uploads_Show);
end;
//------------------------------------------------------------------------------
procedure TEXOSEE_KERNEL_THREAD._ssGo_FileUpload_INITIALIZATION;
//var
//e:string;
begin
// add direct , the Uplod timer direct kiks when error
_UpLoad_Item:=_FXOC_MAIN.AA_0516_vTraffic.Items.Add;
_UpLoad_Item.Caption:=ExtractFileName(_Active_file);
_UpLoad_Item.ImageIndex :=14;
_UpLoad_Item.SubItems.Add(_octos(_SS_FX_DATA_FILE.Size)); //size
_UpLoad_Item.SubItems.Add('0'); // sent
_UpLoad_Item.SubItems.Add('0,00'); // speed
_UpLoad_Item.SubItems.Add('0'); //%
_UpLoad_Item.SubItems.Add(_SS_REMOTE_USER_NICKNAME);
_UpLoad_Item.SubItems.Add(___ccc__0071__Uploading);
_UpLoad_Item._Pozo :=41;
_UpLoad_Item.set_cancel :=false; // to cancel
_UpLoad_Item.itm_int2 :=0; //percent
_UpLoad_Item.uzr_id :=_SS_REMOTE_USER_PC_ID; // stok id
_UpLoad_Item.ITM_F_SIZE :=_SS_FX_DATA_FILE.Size;
end;
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
procedure TEXOSEE_KERNEL_THREAD._ssGo_FileUpload_SHAWA_BB;
begin
_UpLoad_Item.itm3 :=_vSS__FILE_UPLOAD_DEC_SIZA;
_UpLoad_Item.ITM_SENT :=(_SS_FX_DATA_FILE.Size-_vSS__FILE_UPLOAD_DEC_SIZA);
// direct here to show speed and exo works
_UpLoad_Item.SubItems[1]:=_octos(_UpLoad_Item.ITM_SENT); //sent
if (_vSS__FILE_UPLOAD_DEC_SIZA=0) then
begin // UL completed
_UpLoad_Item.SubItems[5] :=___ccc__0015__Completed;
_UpLoad_Item.itm_int2 :=_percenty(_UpLoad_Item.ITM_SENT,_UpLoad_Item.ITM_F_SIZE); // % ok
_UpLoad_Item.SubItems[3] :=IntToStr(_UpLoad_Item.itm_int2)+'%'; // to update progress
_UpLoad_Item._Pozo:=42; //done
end;
if (_UpLoad_Item.set_cancel) then // or (APP_CLOSING)
begin
_UpLoad_Item.set_cancel :=false;
_UpLoad_Item._Pozo :=45; // ?? was 43 !!!
_SS_IS_CANCELED :=true;
end;
Application.ProcessMessages;
end;
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//---------------------------------------------------------ssGo_FileRcv_MAIN----
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
procedure TEXOSEE_KERNEL_THREAD.ssGo_FileRcv_MAIN;
var
s:string;
SIZIN,BufSize,rcv: Int64;
PBuf: PByteArray;
begin
(* *)
_SS_THREAD_ACTIVE_TASK:='_FileRcv'; // a must to catch kk maker
ClientSocket.SendText(#0+'I'+#0+'i'); // direct no barzat '
if _Wsk.WaitForData(5000) then // user loging...
begin
s:=TCrypto._SimSim(ClientSocket.ReceiveText); // recieve
try
//local_id+a_niko+';[f:'+ExtractFileName(_F_ZEND.file_full)+':f][z:'+inttostr(fx.Size)+':z]';
_SS_REMOTE_USER_PC_ID :=copy(s,1,10); //
_SS_REMOTE_USER_NICKNAME :=copy(s,11,pos(';',s)-11);
_vSS__FILE_RCV_FILENAME :=copy(s,pos('[f:',s)+3,(pos(':f]',s)-pos('[f:',s))-3);
_vSS__FILE_RCV_FILESIZE :=StrToInt64Def(copy(s,pos('[z:',s)+3,(pos(':z]',s)-pos('[z:',s))-3),-1);
_vSS__FILE_RCV_LOCAL_SAVA_FILENAME:=_VV_LOCAL_CONFIG_THE_DOWNLOADS_FOLDER+'_$_'+_vSS__FILE_RCV_FILENAME;
Synchronize(ssGo_FileRcv_RcvACCEPT); // go load form accept
_vSS__FILE_RCV_READEN:=0;
repeat
Application.ProcessMessages; // no need , thread separated !!!
until not FRcvForm.tm_accept.Enabled;
if FRcvForm.Permission_OK then
begin
if FileExists(_vSS__FILE_RCV_LOCAL_SAVA_FILENAME) then
_SS_FX_DATA_FILE :=TFileStream.Create(_vSS__FILE_RCV_LOCAL_SAVA_FILENAME,fmOpenWrite or fmShareDenyWrite)else //
_SS_FX_DATA_FILE :=TFileStream.Create(_vSS__FILE_RCV_LOCAL_SAVA_FILENAME,fmCreate or fmShareDenyWrite); //
_SS_FX_DATA_FILE.Position :=_SS_FX_DATA_FILE.Size;
_vSS__FILE_RCV_READEN :=_SS_FX_DATA_FILE.Size;
Synchronize(ssGo_FileRcv_OkACCEPTED); // go close timer form and init others
try
// send permision ok + ofs
//'PRM:OK:00000000'
s:='PRM:OK:'+inttohex(_SS_FX_DATA_FILE.Size,16); // int64 (16)!!!
s:=TCrypto._BarzaToon(s); //:)
_Wsk.Write(s[1], Length(s));
if _Wsk.WaitForData(10000) then // wait
begin
_Wsk.Read(SIZIN, SizeOf(SIZIN)); // read size offseted !!! ( the incoming size )
FRcvForm.TMkbs.Enabled:=true;
if SIZIN < MAX_BUFFER_FILE_SEND then BufSize := SIZIN else BufSize := MAX_BUFFER_FILE_SEND;
GetMem(PBuf, BufSize);
try //------------4
while ( SIZIN >0 ) do
begin
if (SIZIN > BufSize) then rcv := BufSize else rcv := SIZIN;
if _Wsk.WaitForData(20000)then
begin
rcv := _Wsk.Read(PBuf^, rcv);
_SS_FX_DATA_FILE.Write(PBuf^, rcv);
Dec(SIZIN, rcv);
inc(_vSS__FILE_RCV_READEN,rcv); // bytes read
_SS_IS_PANIK_ERROR:=(rcv=0);
end;
Synchronize(ssGo_FileRcv_SHAWA);
if (_SS_IS_CANCELED) or (_SS_IS_PANIK_ERROR) or (_THE_EXOSEE_APPLICATION_IS_TERMINATED) then break;
end;
_vSS__FILE_RCV_DONE_OK:=(SIZIN=0);
FRcvForm.TMkbs.Enabled:=false;
finally
FreeMem(PBuf); // no size !!!!
end; //------------4
end;
finally
_SS_FX_DATA_FILE.Free;
end;
end;// permission ok
// force own terminated here
finally
Synchronize(ssGo_FileRcv_TERMINATED);
end;
end; //sk.WaitForData(5000)
end;
//------------------------------------------------------------------------------
procedure TEXOSEE_KERNEL_THREAD.ssGo_FileRcv_RcvACCEPT; // go_init_form_creation__rcv
begin
(* *)
FRcvForm :=T_FRcvFile.Create(Application);
FRcvForm.Show;
FRcvForm._otodw_timeA:=DateTimeToStr(now);
FRcvForm.ee1.Caption :=_vSS__FILE_RCV_FILENAME;
FRcvForm.ee2.Caption :=_SS_REMOTE_USER_NICKNAME;
FRcvForm.ee3.Caption :=_octos(_vSS__FILE_RCV_FILESIZE);
FRcvForm.AA_0584_eCapFromUser.Caption :=FRcvForm.AA_0584_eCapFromUser.Caption+_SS_REMOTE_USER_NICKNAME;
if (pos(_SS_REMOTE_USER_PC_ID,_VV_LOCAL_USER_FAVORITES_LIST)>0) and (is_fav_allowed_2_do(_SS_REMOTE_USER_PC_ID,2)) then
begin
FRcvForm._Panel_CONFIRM.Visible :=false; // hide_panel
FRcvForm.Permission_OK :=true;
_vSS__FILE_RCV_IS_OTO_ACCEPT :=true;
FRcvForm.tm_accept.Enabled :=false;
end
else
FRcvForm.tm_accept.Enabled := true;
end;
//------------------------------------------------------------------------------
procedure TEXOSEE_KERNEL_THREAD.ssGo_FileRcv_OkACCEPTED; //go_to_main_panel_filling_data_its_starting...
begin
FRcvForm.gress.Max :=_vSS__FILE_RCV_FILESIZE;
FRcvForm.BytesRCV :=_SS_FX_DATA_FILE.Position;
FRcvForm.gress.Position:=_vSS__FILE_RCV_READEN;
FRcvForm.csiz.Caption :=_octos(_vSS__FILE_RCV_FILESIZE);
FRcvForm.cread.Caption :=_octos(_SS_FX_DATA_FILE.Position);
FRcvForm.ckbs.Caption :='0,00 Kbs';
FRcvForm.zzRemoteFileName.Caption :=_vSS__FILE_RCV_FILENAME;
FRcvForm.cpStat.Caption :=___ccc__0092__Downloading;
//FRcvForm.tm_kbs.enabled:=true;
end;
//------------------------------------------------------------------------------
procedure TEXOSEE_KERNEL_THREAD.ssGo_FileRcv_SHAWA;
begin
FRcvForm.BytesRCV :=_vSS__FILE_RCV_READEN;
FRcvForm.cread.Caption :=_octos(_vSS__FILE_RCV_READEN);
FRcvForm.gress.Position :=_vSS__FILE_RCV_READEN;
FRcvForm.pers.Caption :=inttostr(_percenty(FRcvForm.gress.Position,FRcvForm.gress.Max))+'%';
FRcvForm.Caption :=FRcvForm.pers.Caption;
Application.ProcessMessages;
if FRcvForm._set_cancel then _SS_IS_CANCELED:=true;
end;
//------------------------------------------------------------------------------
procedure TEXOSEE_KERNEL_THREAD.ssGo_FileRcv_TERMINATED;
var
_Stp,_sL:string;
begin
FRcvForm.Tag:=5; // enable closing
FRcvForm.AA_0569_canz.Tag:=1;
// if not allow_rcv then exit; // imprtant !!!!
//safe , no need syncronize !
// FRcivForm.tm_kbs.enabled:=false;
// if _FileRcv_done_ok then FRcvForm.dl_stat:='COMPLETED' else FRcvForm.dl_stat:='Disconnection/File_not_ompleted';
if (_SS_IS_CANCELED) or (_SS_IS_PANIK_ERROR) then
begin
if (_SS_IS_CANCELED) then FRcvForm.cpStat.Caption :=___ccc__0019__Canceled
else begin // then its cc_kk
FRcvForm.cpStat.Caption :=___ccc__0011__Error;
FRcvForm.AA_0569_canz.Caption :=___ccc__0072__Close; // close caption
end;
end
else
begin
if (FRcvForm.gress.Max=FRcvForm.gress.Position) then
begin
FRcvForm.cpStat.Caption:=___ccc__0015__Completed;
// FRcvForm.d2.Font.Style:=[fsBold];
while FileExists(_VV_LOCAL_CONFIG_THE_DOWNLOADS_FOLDER+'Completed\'+_vSS__FILE_RCV_FILENAME) do
begin
_vSS__FILE_RCV_FILENAME:='_'+_vSS__FILE_RCV_FILENAME;
end;
_Stp:=_VV_LOCAL_CONFIG_THE_DOWNLOADS_FOLDER+'Completed\'+_vSS__FILE_RCV_FILENAME;
MoveFile(pchar(_vSS__FILE_RCV_LOCAL_SAVA_FILENAME),pchar(_Stp));
FRcvForm.AA_0581_ww1.Hint:=_Stp;
//FRcvForm.d1.Caption :=remote_fil;
FRcvForm.AA_0581_ww1.Visible :=true;
FRcvForm.AA_0582_ww2.Visible :=true;
FRcvForm.AA_0569_canz.Caption :=___ccc__0072__Close; // close caption
end
else
FRcvForm.cpStat.Caption:='.';
end;
FRcvForm.Caption:=FRcvForm.cpStat.Caption;
FRcvForm.tmrest.Caption:='00:00:00';
if (not FRcvForm.Permission_OK) or (_SS_IS_CANCELED) then
begin
FRcvForm.Close;
if (_SS_IS_CANCELED) then DeleteFile(_vSS__FILE_RCV_LOCAL_SAVA_FILENAME);
exit;
end;
// add to completed box
if (not _SS_IS_PANIK_ERROR) then
begin
_sL :=format(___ccc__0105__FileAutoAccepted,[FRcvForm.ee1.Caption,FRcvForm.ee2.Caption]);
_add_2completed(FRcvForm.ee1.Caption,_Stp,FRcvForm.ee2.Caption,_octos(_vSS__FILE_RCV_FILESIZE));
end;
if (_vSS__FILE_RCV_IS_OTO_ACCEPT) then _FXOC_MAIN.TheLOGGER.Log(_sL,1);
// if (_vSS__FILE_RCV_IS_AUTO_ACCEPT)and(_V_MY_20_BOOLEANS[2]<>'A') then FRcvForm.close; // oto was on !!!
end;
end.
// be cafull of VCL interaction !!! , only read !!! , synchronize when write !!!!
interface
uses windows,SysUtils,classes,scktcomp,Forms,ComCtrls,_uf_rcvFile,FileCtrl;
type
TEXOSEE_KERNEL_THREAD = class(TServerClientThread)
private
_X_PROTO_CODE : String[8];
_SS_THREAD_ACTIVE_TASK : String[20];
_SS_STR_LOG : String;
_UpLoad_Item :TListItem;
_Active_file :string;
_SS_FX_DATA_FILE :TFileStream;
_SS_IS_PANIK_ERROR :Boolean;
_SS_IS_CANCELED :boolean;
_vSS__FILE_UPLOAD_DEC_SIZA : Int64;
_vSS__FILE_RCV_DONE_OK : Boolean;
_vSS__FILE_RCV_IS_OTO_ACCEPT : Boolean;
_vSS__FILE_RCV_FILENAME : String;
_vSS__FILE_RCV_FILESIZE : Int64;
_vSS__FILE_RCV_READEN : Int64;
_vSS__FILE_RCV_LOCAL_SAVA_FILENAME : String;
sDebug : string;
FRcvForm : T_FRcvFile;
procedure _ssGo_IncominBuilder_MAIN;
procedure _ssGo_ExpLorer_MAIN;
function _ssGo_ExpLorer_TheLocalPATH(_FullPath: string): string;
function _ssGo_ExpLorer_TheMainROOTS(okPrivs, okXtra: boolean; xtra,_nik: string): string;
procedure _ssGo_FileUpload_MAIN;
procedure _ssGo_FileUpload_INITIALIZATION;
procedure _ssGo_FileUpload_SHAWA_BB;
procedure ssGo_FileRcv_MAIN;
procedure ssGo_FileRcv_RcvACCEPT;
procedure ssGo_FileRcv_OkACCEPTED;
procedure ssGo_FileRcv_SHAWA;
procedure ssGo_FileRcv_TERMINATED;
protected
procedure ClientExecute; override;
procedure _DoInstantLoG;
public
_Wsk :TWinSocketStream;
_SS_REMOTE_USER_SOCKET_IP : String[15];
_SS_REMOTE_USER_NICKNAME : String[16];
_SS_REMOTE_USER_PC_ID : String[10];
_SS_STATUS_CODE : Byte;
_sData:String;
nComNode:TTreeNode;
procedure _Syn2LoG(sss: String);
procedure On_terminated(Sender: TObject);
end;
implementation
uses Unit1,_uc_funcs,_uc_refs_consts,_uc_refs_vars,_uc_crypto,_uc_cs_new1ini,_uc_GuiLanG;
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
procedure TEXOSEE_KERNEL_THREAD._Syn2LoG(sss: String);
begin
_SS_STR_LOG:=sss;
Synchronize(_DoInstantLoG);
end;
//------------------------------------------------------------------------------
procedure TEXOSEE_KERNEL_THREAD._DoInstantLoG;
begin
_FXOC_MAIN.TheLOGGER.Log(_SS_STR_LOG,0);
//Application.ProcessMessages;
end;
//------------------------------------------------------------------------------
procedure TEXOSEE_KERNEL_THREAD.On_terminated(Sender: TObject);
begin
//dec(_ACTIVE_TOTAL_THREADS_COUNT);
if (_FXOC_MAIN.izDebugerON.Checked) then _FXOC_MAIN.TheLOGGER.Log('sDebug:'+sDebug);
//TLogger.Log(ret+sep+ret+'TEXOSEE_KERNEL_terminated_:'+IntToStr(_SS_STATUS_CODE)+' >> '+_SS_ACTIVE_TASK+ret+_sData);
(* *)
case _SS_STATUS_CODE of // add user + reason
//1 : _do_LoG('1/NoComInHome',1,false);
2 : _FXOC_MAIN.TheLOGGER.Log(format(___ccc__0102__LanUserRejected,[_SS_REMOTE_USER_NICKNAME]),1);
3 : _FXOC_MAIN.TheLOGGER.Log(format(___ccc__0101__BannedRejected,[_SS_REMOTE_USER_NICKNAME]),1);
10 : set_newUser_ini_DataNode(_SS_REMOTE_USER_SOCKET_IP,_sData,nComNode); // new1boyaNode is OK ( found )
//11 : _log('1xpNotInisDDkrK',1,false);
// 12 : _log('1xp_roots_ok',1,false);
13,15 : _FXOC_MAIN.TheLOGGER.Log(format(___ccc__0103__XtraFolder4UserNotSet,[_SS_REMOTE_USER_NICKNAME]),1); // folder not set
16 : _FXOC_MAIN.TheLOGGER.Log(___ccc__0104__XtraFolderNotAllowed4+_SS_REMOTE_USER_NICKNAME,1); // not allowed
// 20 : _do_LoG('xpL_..',1,false); // IN ADVANCED ADD USER browsing path
// 30 : _log(_XData,0); // cs_filter ok ini
99 : if (_SS_THREAD_ACTIVE_TASK<>'') then _FXOC_MAIN.TheLOGGER.Log('_T_THREADS_MANAGER_ERROR_['+_SS_THREAD_ACTIVE_TASK+']',1); // +_ActiveERROR
end;
// Application.ProcessMessages;
end;
//------------------------------------------------------------------------------
procedure TEXOSEE_KERNEL_THREAD.ClientExecute;
begin
inc(_SERVER_ACTIVE_TOTAL_THREADS_COUNT);
try //--------1
_Wsk := TWinSocketStream.Create(ClientSocket, 10000);
try //--------2
_SS_REMOTE_USER_SOCKET_IP:=ClientSocket.RemoteAddress;
if _Wsk.WaitForData(10000) then
begin
_X_PROTO_CODE:=TCrypto._SimSim(ClientSocket.ReceiveText); // 10sec to begin
if (_X_PROTO_CODE[1]=#0)and(_X_PROTO_CODE[4]='ë') then // #9=ë !!! for tab9 be in packets
begin
case _X_PROTO_CODE[2] of
'A' : _ssGo_IncominBuilder_MAIN;
'B' : _ssGo_ExpLorer_MAIN;
'G' : _ssGo_FileUpload_MAIN;
'I' : ssGo_FileRcv_MAIN;
else _Syn2LoG('x[?]. REJECTED! ->'+_X_PROTO_CODE);
end;
end
else
begin
_Syn2LoG('Unknown_cmd_from_('+_SS_REMOTE_USER_SOCKET_IP+') REJECTED!');
end;
end
else begin //
_Syn2LoG('Unknown_('+_SS_REMOTE_USER_SOCKET_IP+') REJECTED!');
end;
finally
// no !! DO_LING here >>> it cuts last bytes
ClientSocket.Close; // will charge after all sent
_Wsk.Free;
end; //--------2
Except
_SS_STATUS_CODE :=99;
(*
on E: Exception do
begin
if not(ExceptObject is EAbort) then
begin
//_Syn2LoG('TXCEPT : '+E.Message);
_SS_STATUS_CODE :=99;
end;
end;
*)
end;
end;
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//----------------------------------------_ssGo_IncominBuilder_MAIN-------------
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
procedure TEXOSEE_KERNEL_THREAD._ssGo_IncominBuilder_MAIN;
var
sIncomComADR:string;
begin
_SS_THREAD_ACTIVE_TASK:='_builder_ini0'; // a must to catch kk maker
ClientSocket.SendText(#0+'A'+#0+'a'); // direct no barzat '
_SS_THREAD_ACTIVE_TASK:='_builder_ini1'; // a must to catch kk maker
if _Wsk.WaitForData(5000) then // user loging... data coming
begin
_sData:=TCrypto._SimSim(ClientSocket.ReceiveText);
// if ok >> send mySdata else >> send reject code...its waiting there !
_SS_THREAD_ACTIVE_TASK:='_builder_ini2'; // a must to catch kk maker
// check if user com is in my home by IDX ( com full url )
sIncomComADR:=copy(_sData,pos(':G',_sData)+2,(pos('G;',_sData)-pos(':G',_sData))-2);
nComNode:=is_COMMUNITY_in_HOME(sIncomComADR);
_SS_THREAD_ACTIVE_TASK:='_builder_ini3'; // a must to catch kk maker
if (nComNode=nil)or(nComNode._EXO_NODE_IS_STOPING) then // fixed is com stopping
begin
ClientSocket.SendText(TCrypto.kozkozo('1NoComInHome')); // no coded
_SS_STATUS_CODE:=1;
exit;
end;
// ignore if lan & i dont want them
if (_VV_LOCAL_CONFIG_I_ACCEPT_NO_LAN) and (_sData[3]='L') then //1+2(:A)
begin
ClientSocket.SendText(TCrypto.kozkozo('2NoAxLAN')); // coded ! kozkozo
_SS_STATUS_CODE:=2;
end;
_SS_THREAD_ACTIVE_TASK:='_builder_ini4'; // a must to catch kk maker
// ignore if userID in black list
if (pos(copy(_sData,pos(':F',_sData)+2,(pos('F;',_sData)-pos(':F',_sData))-2), _VV_LOCAL_CONFIG_BANNED_USERS_LIST)>0)then
begin
ClientSocket.SendText(TCrypto.kozkozo('3Banned')); // coded ! kozkozo
_SS_STATUS_CODE:=3;
end;
_SS_THREAD_ACTIVE_TASK:='_builder_ini5'; // a must to catch kk maker
if (_SS_STATUS_CODE in [2,3])then //grab nik for log and EXIT
begin
_SS_REMOTE_USER_NICKNAME:=copy(_sData,pos(':B',_sData)+2,(pos('B;',_sData)-pos(':B',_sData))-2);
exit;
end;
_SS_THREAD_ACTIVE_TASK:='_builder_ini6'; // a must to catch kk maker
//--------is ok till here .... give my info too (kozkoz here)
ClientSocket.SendText(TCrypto.kozkozo(':A'+_VV_LOCAL_USER_MY8_BOOLEANS+'A;'+ // all my bools , lan/wan...status....etc
':B'+_VV_LOCAL_USER_NIKO+'B;'+
':C'+_VV_LOCAL_USER_COUNTRY_CODE+'C;'+
':D'+_VV_LOCAL_USER_MESSAGE+'D;'+
':E_E;'+
':F'+_VV_LOCAL_USER_PC_ID+'F;' // com is as needed
//':G'+_comADRiDX+'G;' // com no need to send , i only accepted
)); // send my data
_SS_THREAD_ACTIVE_TASK:='_builder_ini7'; // a must to catch kk maker
_SS_STATUS_CODE:=10;
// wait while he'll recive what sent above
//_Wsk.WaitForData(5000); hmmmm no need
end;
end;
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//----------------------------------------------_ssGo_ExpLorer_MAIN-------------
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
procedure TEXOSEE_KERNEL_THREAD._ssGo_ExpLorer_MAIN;
var
_xRcvData:String;
_s,_z,_uID,_SekReq,_ReqfullPath,_xtraPath:string;
_nBB:byte;
_typ:char;
_xStRm:TMemoryStream;
Buf: PByteArray;
SIZA,i:integer;
_XpUser_Node :TTreeNode;
BufSize,poz, SndLen: Integer;
_canPrivs,_canXtra:boolean;
begin
_SS_THREAD_ACTIVE_TASK:='_explorer'; // a must to catch kk maker
ClientSocket.SendText(#0+'B'+#0+'b'); // direct no barzat '
if _Wsk.WaitForData(5000) then // user log ing...
begin
_canPrivs :=false;
_canXtra :=false;
_xRcvData:=TCrypto._SimSim(ClientSocket.ReceiveText);
//'<I'+_XpNode._EXO_NODE_USER_ID+'I>'+
//'<N'+_XpNode._EXO_NODE_PATH_NB+'N>'+
//'<P'+_XpNode._EXO_NODE_PATH_TX+'P>'+
//TLogger.Log('_xRcvData('+_xRcvData+')');
// check if user id first
_uID:=copy(_xRcvData,pos('<I',_xRcvData)+2,(pos('I>',_xRcvData)-pos('<I',_xRcvData))-2);
_XpUser_Node :=_is_UserID_in_The_NETWORKS_Tree(_uID); // added fix com stopping
if (_XpUser_Node=nil) then begin
ClientSocket.SendText(TCrypto.kozkozo('1NotInisDDkrK')); // no coded
_SS_STATUS_CODE:=11;
exit;
end;
_nBB :=strtointdef('$'+copy(_xRcvData,pos('<N',_xRcvData)+2,(pos('N>',_xRcvData)-pos('<N',_xRcvData))-2),-1);
_SekReq :=copy(_xRcvData,pos('<P',_xRcvData)+2,(pos('P>',_xRcvData)-pos('<P',_xRcvData))-2);
_typ :=copy(_xRcvData,pos('<T',_xRcvData)+2,(pos('T>',_xRcvData)-pos('<T',_xRcvData))-2)[1];
_SS_REMOTE_USER_NICKNAME:=_XpUser_Node.Text;//grab nikname , node till he its ok
case _nBB of
0 : begin // 00 = shared_roots kozkozo
if pos(_uID,_VV_LOCAL_USER_FAVORITES_LIST)>0 then //check if fav+++
begin
for i:=0 to _TV_NODE_OF_FAVORITES.Count-1 do
begin
_z:=_TV_NODE_OF_FAVORITES.Item[i]._EXO_NODE_COM_IDX; // 1C080B2CD3xxA01000000%1Ismail%2F:\_Pc-Set\_Drivers%3
if copy(_z,1,10)=_uID then begin
_canPrivs :=_z[13+1]='1';
_canXtra :=_z[13+3]='1';
//_z:=_FMAIN._favies.Items[i]._Str; // re-use _z
if _canXtra then
_xtraPath:=copy(_z,pos('%2',_z)+2,pos('%3',_z)-pos('%2',_z)-2);
break;
end;
end;
end;
_s:=_ssGo_ExpLorer_TheMainROOTS(_canPrivs,_canXtra,_xtraPath,_SS_REMOTE_USER_NICKNAME);
SIZA :=length(_s);
_Wsk.Write(SIZA, SizeOf(SIZA)); // it sends size - offset !!! ,
ClientSocket.SendText(_s);
_SS_STATUS_CODE:=12;
end;
1..255 : begin
case _typ of
'0' : _ReqfullPath:=EXPLORER_PUBLIC_ROOTS[_nBB-1]+_SekReq; // pub
'1' : _ReqfullPath:=EXPLORER_PRIVATE_ROOTS[_nBB-1]+_SekReq; // priv
'2' : begin // xtra
_xtraPath:=_GimeFavUserXtraFolder(_uID);
if _xtraPath<>'' then _ReqfullPath:=_xtraPath+_SekReq
else begin
_SS_STATUS_CODE:=13;
ClientSocket.SendText(TCrypto.kozkozo('2xtraNotSet')); //
exit;
end;
end;
end;
_ReqfullPath:=stringreplace(_ReqfullPath,'\\','\',[rfReplaceAll]); // clean here
// if folder exist
// _log(ret+'_ReqfullPath >> '+_ReqfullPath,0);
// !!!!! 8KB bug !!!!! >> reUse _uID for stream
_s:=_ssGo_ExpLorer_TheLocalPATH(_ReqfullPath);
_xStRm:=TMemoryStream.Create;
_xStRm.Write(pointer(_s)^,length(_s));
_xStRm.Position:=0;
SIZA :=_xStRm.Size;
_Wsk.Write(SIZA, SizeOf(SIZA)); // it sends size - offset !!! , waitng there
if SIZA < MAX_BUFFER_EXPLOLRER_BROWSING then BufSize := SIZA
else BufSize := MAX_BUFFER_EXPLOLRER_BROWSING;
GetMem(Buf, BufSize);
Try //--------4
while (SIZA>0) and (ClientSocket.Connected) do
begin
if SIZA > BufSize then SndLen := BufSize else SndLen := SIZA;
_xStRm.Read(Buf^, SndLen);
poz := 0;
while (poz < SndLen) do
begin
Inc(poz, _Wsk.Write(Buf^[poz],SndLen) );
end;
Dec(SIZA, SndLen);
if _THE_EXOSEE_APPLICATION_IS_TERMINATED then break;
end;
finally FreeMem(Buf); end; //--------4 freemem(...,BufSize) was in >=17-pr3
_xStRm.Free;
end;
end;
end;
(**)
end;
//------------------------------------------------------------------------------
function TEXOSEE_KERNEL_THREAD._ssGo_ExpLorer_TheMainROOTS(okPrivs,okXtra:boolean;xtra,_nik:string):string;
var
i:integer;
begin
(* *)
// 0 pubs
// 1 pub+privs
// 2 pub+xtra
// 3 pubs+privs+xtra
for i:=0 to EXPLORER_PUBLIC_ROOTS.Count-1 do
begin
result:=result+'<R>'+inttohex(i+1,2)+_folder_lastName(EXPLORER_PUBLIC_ROOTS[i])+ret;
end;
if okPrivs then // pub + privs
begin
for i:=0 to EXPLORER_PRIVATE_ROOTS.Count-1 do
begin
result:=result+'<V>'+inttohex(i+1,2)+_folder_lastName(EXPLORER_PRIVATE_ROOTS[i])+ret;
end;
end;
if okXtra then // pub + xtra
begin
if DirectoryExists(xtra) then
result:=result+'<X>77'+_folder_lastName(xtra)+ret // 77 = any>0 to be accepted there , it will be detected by 'T'
else _Syn2LoG(format(___ccc__0103__XtraFolder4UserNotSet,[_nik]));
end;
result:=result+'<Z>'+ret;
end;
//------------------------------------------------------------------------------
function TEXOSEE_KERNEL_THREAD._ssGo_ExpLorer_TheLocalPATH(_FullPath:string):string; // no nik needed here
var
i:integer;
zz:TSearchRec;
_fSiZe64:Int64;
begin
if not DirectoryExists(_FullPath) then
begin
Result:='<!>'+ret; // ADD FOLDER + mark
_Syn2LoG(format(___ccc__0046__CheckPubFolder,[_FullPath]));
exit;
end;
i:= FindFirst(_FullPath+'*.*',faanyfile,zz);
while i = 0 do
begin
if (zz.Name <> '.') and (zz.Name <> '..')then
begin
if (zz.attr and fadirectory >0 ) then
Result:=Result+'<d>'+zz.name+ret // ADD FOLDER + mark
else
begin // a file
_fSiZe64 :=Int64(zz.FindData.nFileSizeHigh) shl 32 + Int64(zz.FindData.nFileSizeLow);
Result:=Result+format('<f>%s?%d',[zz.name,_fSiZe64])+ret;// !!!!! no octos to speed // add file + mark
end;
end;
// Application.processmessages;
i:= FindNext(zz);
end;
FindClose(zz);
result:=result+'<Z>'; // 'Z' to be sorted last '<' is a must to accept there even for 0 files or 0 folders !!
//_log(format('%d folders - %d files',[d,f]),0);
//_log(result,0);
end;
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
procedure TEXOSEE_KERNEL_THREAD._ssGo_FileUpload_MAIN;
var
c:char;
s,rooty:string;
RN:Byte;
t:TTreeNode;
ofs,BuffSizo,sentL,pozo:Int64;
pBuf: PByteArray;
_Is_it_OK : boolean;
begin
_SS_THREAD_ACTIVE_TASK:='_DlvExplorer'; // a must to catch kk maker
if _VV_LOCAL_CONFIG_ACTIVE_UPLOADS>=(_VV_LOCAL_CONFIG_MAX_UPLOADS) then c:='0' else c:='1';
ClientSocket.SendText(#0+'G'+c+'g'); // direct no barzat '
// was above in beta02-A ( the bug )
inc(_VV_LOCAL_CONFIG_ACTIVE_UPLOADS); // >> ++
//inc(_ACTIVE_TOTAL_UPLOADS_COUNT);
//Synchronize(_total_Uploads_Show);
if c='1' then
begin
_Is_it_OK:=True;
if _Wsk.WaitForData(5000) then // user loging...
begin
s:=TCrypto._SimSim(ClientSocket.ReceiveText);
// '_DW_A_00_0000000000_1111111111111111_%s',[_tp,_pn,_VV_LOCAL_USER_PC_ID,_data_file.Size,_full_file]);
_SS_REMOTE_USER_PC_ID:=copy(s,10,10);
t:=_is_UserID_in_The_NETWORKS_Tree(_SS_REMOTE_USER_PC_ID); // read id ( fixed com stopping )
_SS_THREAD_ACTIVE_TASK:=_SS_THREAD_ACTIVE_TASK+'_01'; // BugDetection
if (t<>nil)then
begin //--------adding----------------
if t.ImageIndex=3 then // direct kik
begin
_vSS__FILE_UPLOAD_DEC_SIZA:=-777; //(-777) >> send no fw-access >> go to end
_Wsk.Write(_vSS__FILE_UPLOAD_DEC_SIZA, SizeOf(_vSS__FILE_UPLOAD_DEC_SIZA)); // it sends NO-ACCESS !!! , waitng there >> then go to end
end
else
begin
_SS_REMOTE_USER_NICKNAME:=t.Text; // set nik
RN:=StrToIntDef('$'+copy(s,7,2),0); // pn
if RN>0 then dec(RN);
_SS_THREAD_ACTIVE_TASK:=_SS_THREAD_ACTIVE_TASK+'_02'; // BugDetection
case s[5] of
'0' : rooty:=EXPLORER_PUBLIC_ROOTS[RN]; //pub
'1' : rooty:=EXPLORER_PRIVATE_ROOTS[RN]; //priv
'2' : begin //xtra 2 fix
if pos(_SS_REMOTE_USER_PC_ID,_VV_LOCAL_USER_FAVORITES_LIST)=0 then _Is_it_OK:=false
else begin
rooty:=_GimeFavUserXtraFolder(_SS_REMOTE_USER_PC_ID);
if (rooty<>'') and (is_fav_allowed_2_do(_SS_REMOTE_USER_PC_ID,3))
then _Is_it_OK:=true;
end;
end;
end;
_SS_THREAD_ACTIVE_TASK:=_SS_THREAD_ACTIVE_TASK+'_03'; // BugDetection
if not _Is_it_OK then begin // we exit !!!
if _VV_LOCAL_CONFIG_MAX_UPLOADS>0 then dec(_VV_LOCAL_CONFIG_ACTIVE_UPLOADS); // >> --
//dec(_ACTIVE_TOTAL_UPLOADS_COUNT);
//Synchronize(_total_Uploads_Show);
if rooty='' then _SS_STATUS_CODE:=15 // folder not set
else _SS_STATUS_CODE:=16; // not allowed
exit;
end;
// '_DW_A_00_0000000000_1111111111111111_%s',[_tp,_pn,_VV_LOCAL_USER_PC_ID,_data_file.Size,_full_file]);
// _DW_0_03_1E45355311_0000000000000000_\[Movie DVD] - Assault on Precinct 13 (2005) R [Action].rar
_Active_file :=copy(s,38,length(s)-37); // file
ofs :=StrToIntDef('$'+copy(s,21,16),0); //ofs
_Active_file:=rooty+_Active_file;// full file_name_now
_Active_file:=stringreplace(_Active_file,'\\','\',[rfReplaceAll]); // a must clean here
//_log('>>>>'+_Active_file,0);
_SS_THREAD_ACTIVE_TASK:=_SS_THREAD_ACTIVE_TASK+'_04'; // BugDetection
if FileExists(_Active_file) then // // file exists here
begin
_SS_FX_DATA_FILE:=TFileStream.Create(_Active_file,fmOpenRead or fmShareDenyWrite);
Try //--------3
_SS_FX_DATA_FILE.Position := ofs; // resume
_vSS__FILE_UPLOAD_DEC_SIZA:= _SS_FX_DATA_FILE.Size-ofs;
//* error -1
sDebug:='ofs:'+IntToStr(ofs)+ret+
'_SS_FX_DATA_FILE.Size:'+IntToStr(_SS_FX_DATA_FILE.Size)+ret+
IntToStr(_vSS__FILE_UPLOAD_DEC_SIZA);
Synchronize(_ssGo_FileUpload_INITIALIZATION); // creation of timer KBS in it
_UpLoad_Item.itm_int1:=_vSS__FILE_UPLOAD_DEC_SIZA; // a must for upload %
_Wsk.Write(_vSS__FILE_UPLOAD_DEC_SIZA, SizeOf(_vSS__FILE_UPLOAD_DEC_SIZA)); // it sends size - offset !!! , waitng there
if (_vSS__FILE_UPLOAD_DEC_SIZA < MAX_BUFFER_EXPLOLRER_DOWNLOADING) then BuffSizo := _vSS__FILE_UPLOAD_DEC_SIZA
else BuffSizo := MAX_BUFFER_EXPLOLRER_DOWNLOADING;
GetMem(pBuf, BuffSizo);
Try //--------4
while (_vSS__FILE_UPLOAD_DEC_SIZA>0) and (ClientSocket.Connected) do
begin
if (_vSS__FILE_UPLOAD_DEC_SIZA>BuffSizo) then sentL := BuffSizo else sentL := _vSS__FILE_UPLOAD_DEC_SIZA;
_SS_FX_DATA_FILE.Read(pBuf^, sentL);
pozo := 0;
while (pozo < sentL) do
begin
try
Inc(pozo, _Wsk.Write(pBuf^[pozo],sentL));
Except pozo:=0; end; // kk detected !! >> confirm 0
// if writing 0 then exit soon !
if (pozo=0) then begin _SS_IS_PANIK_ERROR:=true; break; end;
//Write error 64, Le nom réseau spécifié n'est plus disponible
end;
Dec(_vSS__FILE_UPLOAD_DEC_SIZA, sentL);
Synchronize(_ssGo_FileUpload_SHAWA_BB);
if (_SS_IS_CANCELED) or (_SS_IS_PANIK_ERROR) or (_THE_EXOSEE_APPLICATION_IS_TERMINATED) then break;
end;
finally FreeMem(pBuf); end; //--------4 freemem(...,BufSize) bugs!!! was in >=17-pr3
finally _SS_FX_DATA_FILE.Free; end; //--------3
end;// end of file ok
if (_UpLoad_Item<>nil)and(_SS_IS_PANIK_ERROR) then _UpLoad_Item._Pozo:=44; // aborted
//Synchronize(_upload_item_terminated);
end; // ok
end; // node no nil
end; // 5000 ok
end; // c=1 ok
if _VV_LOCAL_CONFIG_ACTIVE_UPLOADS>0 then dec(_VV_LOCAL_CONFIG_ACTIVE_UPLOADS); // >> --
dec(_VV_LOCAL_CONFIG_MAX_UPLOADS);
//Synchronize(_total_Uploads_Show);
end;
//------------------------------------------------------------------------------
procedure TEXOSEE_KERNEL_THREAD._ssGo_FileUpload_INITIALIZATION;
//var
//e:string;
begin
// add direct , the Uplod timer direct kiks when error
_UpLoad_Item:=_FXOC_MAIN.AA_0516_vTraffic.Items.Add;
_UpLoad_Item.Caption:=ExtractFileName(_Active_file);
_UpLoad_Item.ImageIndex :=14;
_UpLoad_Item.SubItems.Add(_octos(_SS_FX_DATA_FILE.Size)); //size
_UpLoad_Item.SubItems.Add('0'); // sent
_UpLoad_Item.SubItems.Add('0,00'); // speed
_UpLoad_Item.SubItems.Add('0'); //%
_UpLoad_Item.SubItems.Add(_SS_REMOTE_USER_NICKNAME);
_UpLoad_Item.SubItems.Add(___ccc__0071__Uploading);
_UpLoad_Item._Pozo :=41;
_UpLoad_Item.set_cancel :=false; // to cancel
_UpLoad_Item.itm_int2 :=0; //percent
_UpLoad_Item.uzr_id :=_SS_REMOTE_USER_PC_ID; // stok id
_UpLoad_Item.ITM_F_SIZE :=_SS_FX_DATA_FILE.Size;
end;
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
procedure TEXOSEE_KERNEL_THREAD._ssGo_FileUpload_SHAWA_BB;
begin
_UpLoad_Item.itm3 :=_vSS__FILE_UPLOAD_DEC_SIZA;
_UpLoad_Item.ITM_SENT :=(_SS_FX_DATA_FILE.Size-_vSS__FILE_UPLOAD_DEC_SIZA);
// direct here to show speed and exo works
_UpLoad_Item.SubItems[1]:=_octos(_UpLoad_Item.ITM_SENT); //sent
if (_vSS__FILE_UPLOAD_DEC_SIZA=0) then
begin // UL completed
_UpLoad_Item.SubItems[5] :=___ccc__0015__Completed;
_UpLoad_Item.itm_int2 :=_percenty(_UpLoad_Item.ITM_SENT,_UpLoad_Item.ITM_F_SIZE); // % ok
_UpLoad_Item.SubItems[3] :=IntToStr(_UpLoad_Item.itm_int2)+'%'; // to update progress
_UpLoad_Item._Pozo:=42; //done
end;
if (_UpLoad_Item.set_cancel) then // or (APP_CLOSING)
begin
_UpLoad_Item.set_cancel :=false;
_UpLoad_Item._Pozo :=45; // ?? was 43 !!!
_SS_IS_CANCELED :=true;
end;
Application.ProcessMessages;
end;
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//---------------------------------------------------------ssGo_FileRcv_MAIN----
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
procedure TEXOSEE_KERNEL_THREAD.ssGo_FileRcv_MAIN;
var
s:string;
SIZIN,BufSize,rcv: Int64;
PBuf: PByteArray;
begin
(* *)
_SS_THREAD_ACTIVE_TASK:='_FileRcv'; // a must to catch kk maker
ClientSocket.SendText(#0+'I'+#0+'i'); // direct no barzat '
if _Wsk.WaitForData(5000) then // user loging...
begin
s:=TCrypto._SimSim(ClientSocket.ReceiveText); // recieve
try
//local_id+a_niko+';[f:'+ExtractFileName(_F_ZEND.file_full)+':f][z:'+inttostr(fx.Size)+':z]';
_SS_REMOTE_USER_PC_ID :=copy(s,1,10); //
_SS_REMOTE_USER_NICKNAME :=copy(s,11,pos(';',s)-11);
_vSS__FILE_RCV_FILENAME :=copy(s,pos('[f:',s)+3,(pos(':f]',s)-pos('[f:',s))-3);
_vSS__FILE_RCV_FILESIZE :=StrToInt64Def(copy(s,pos('[z:',s)+3,(pos(':z]',s)-pos('[z:',s))-3),-1);
_vSS__FILE_RCV_LOCAL_SAVA_FILENAME:=_VV_LOCAL_CONFIG_THE_DOWNLOADS_FOLDER+'_$_'+_vSS__FILE_RCV_FILENAME;
Synchronize(ssGo_FileRcv_RcvACCEPT); // go load form accept
_vSS__FILE_RCV_READEN:=0;
repeat
Application.ProcessMessages; // no need , thread separated !!!
until not FRcvForm.tm_accept.Enabled;
if FRcvForm.Permission_OK then
begin
if FileExists(_vSS__FILE_RCV_LOCAL_SAVA_FILENAME) then
_SS_FX_DATA_FILE :=TFileStream.Create(_vSS__FILE_RCV_LOCAL_SAVA_FILENAME,fmOpenWrite or fmShareDenyWrite)else //
_SS_FX_DATA_FILE :=TFileStream.Create(_vSS__FILE_RCV_LOCAL_SAVA_FILENAME,fmCreate or fmShareDenyWrite); //
_SS_FX_DATA_FILE.Position :=_SS_FX_DATA_FILE.Size;
_vSS__FILE_RCV_READEN :=_SS_FX_DATA_FILE.Size;
Synchronize(ssGo_FileRcv_OkACCEPTED); // go close timer form and init others
try
// send permision ok + ofs
//'PRM:OK:00000000'
s:='PRM:OK:'+inttohex(_SS_FX_DATA_FILE.Size,16); // int64 (16)!!!
s:=TCrypto._BarzaToon(s); //:)
_Wsk.Write(s[1], Length(s));
if _Wsk.WaitForData(10000) then // wait
begin
_Wsk.Read(SIZIN, SizeOf(SIZIN)); // read size offseted !!! ( the incoming size )
FRcvForm.TMkbs.Enabled:=true;
if SIZIN < MAX_BUFFER_FILE_SEND then BufSize := SIZIN else BufSize := MAX_BUFFER_FILE_SEND;
GetMem(PBuf, BufSize);
try //------------4
while ( SIZIN >0 ) do
begin
if (SIZIN > BufSize) then rcv := BufSize else rcv := SIZIN;
if _Wsk.WaitForData(20000)then
begin
rcv := _Wsk.Read(PBuf^, rcv);
_SS_FX_DATA_FILE.Write(PBuf^, rcv);
Dec(SIZIN, rcv);
inc(_vSS__FILE_RCV_READEN,rcv); // bytes read
_SS_IS_PANIK_ERROR:=(rcv=0);
end;
Synchronize(ssGo_FileRcv_SHAWA);
if (_SS_IS_CANCELED) or (_SS_IS_PANIK_ERROR) or (_THE_EXOSEE_APPLICATION_IS_TERMINATED) then break;
end;
_vSS__FILE_RCV_DONE_OK:=(SIZIN=0);
FRcvForm.TMkbs.Enabled:=false;
finally
FreeMem(PBuf); // no size !!!!
end; //------------4
end;
finally
_SS_FX_DATA_FILE.Free;
end;
end;// permission ok
// force own terminated here
finally
Synchronize(ssGo_FileRcv_TERMINATED);
end;
end; //sk.WaitForData(5000)
end;
//------------------------------------------------------------------------------
procedure TEXOSEE_KERNEL_THREAD.ssGo_FileRcv_RcvACCEPT; // go_init_form_creation__rcv
begin
(* *)
FRcvForm :=T_FRcvFile.Create(Application);
FRcvForm.Show;
FRcvForm._otodw_timeA:=DateTimeToStr(now);
FRcvForm.ee1.Caption :=_vSS__FILE_RCV_FILENAME;
FRcvForm.ee2.Caption :=_SS_REMOTE_USER_NICKNAME;
FRcvForm.ee3.Caption :=_octos(_vSS__FILE_RCV_FILESIZE);
FRcvForm.AA_0584_eCapFromUser.Caption :=FRcvForm.AA_0584_eCapFromUser.Caption+_SS_REMOTE_USER_NICKNAME;
if (pos(_SS_REMOTE_USER_PC_ID,_VV_LOCAL_USER_FAVORITES_LIST)>0) and (is_fav_allowed_2_do(_SS_REMOTE_USER_PC_ID,2)) then
begin
FRcvForm._Panel_CONFIRM.Visible :=false; // hide_panel
FRcvForm.Permission_OK :=true;
_vSS__FILE_RCV_IS_OTO_ACCEPT :=true;
FRcvForm.tm_accept.Enabled :=false;
end
else
FRcvForm.tm_accept.Enabled := true;
end;
//------------------------------------------------------------------------------
procedure TEXOSEE_KERNEL_THREAD.ssGo_FileRcv_OkACCEPTED; //go_to_main_panel_filling_data_its_starting...
begin
FRcvForm.gress.Max :=_vSS__FILE_RCV_FILESIZE;
FRcvForm.BytesRCV :=_SS_FX_DATA_FILE.Position;
FRcvForm.gress.Position:=_vSS__FILE_RCV_READEN;
FRcvForm.csiz.Caption :=_octos(_vSS__FILE_RCV_FILESIZE);
FRcvForm.cread.Caption :=_octos(_SS_FX_DATA_FILE.Position);
FRcvForm.ckbs.Caption :='0,00 Kbs';
FRcvForm.zzRemoteFileName.Caption :=_vSS__FILE_RCV_FILENAME;
FRcvForm.cpStat.Caption :=___ccc__0092__Downloading;
//FRcvForm.tm_kbs.enabled:=true;
end;
//------------------------------------------------------------------------------
procedure TEXOSEE_KERNEL_THREAD.ssGo_FileRcv_SHAWA;
begin
FRcvForm.BytesRCV :=_vSS__FILE_RCV_READEN;
FRcvForm.cread.Caption :=_octos(_vSS__FILE_RCV_READEN);
FRcvForm.gress.Position :=_vSS__FILE_RCV_READEN;
FRcvForm.pers.Caption :=inttostr(_percenty(FRcvForm.gress.Position,FRcvForm.gress.Max))+'%';
FRcvForm.Caption :=FRcvForm.pers.Caption;
Application.ProcessMessages;
if FRcvForm._set_cancel then _SS_IS_CANCELED:=true;
end;
//------------------------------------------------------------------------------
procedure TEXOSEE_KERNEL_THREAD.ssGo_FileRcv_TERMINATED;
var
_Stp,_sL:string;
begin
FRcvForm.Tag:=5; // enable closing
FRcvForm.AA_0569_canz.Tag:=1;
// if not allow_rcv then exit; // imprtant !!!!
//safe , no need syncronize !
// FRcivForm.tm_kbs.enabled:=false;
// if _FileRcv_done_ok then FRcvForm.dl_stat:='COMPLETED' else FRcvForm.dl_stat:='Disconnection/File_not_ompleted';
if (_SS_IS_CANCELED) or (_SS_IS_PANIK_ERROR) then
begin
if (_SS_IS_CANCELED) then FRcvForm.cpStat.Caption :=___ccc__0019__Canceled
else begin // then its cc_kk
FRcvForm.cpStat.Caption :=___ccc__0011__Error;
FRcvForm.AA_0569_canz.Caption :=___ccc__0072__Close; // close caption
end;
end
else
begin
if (FRcvForm.gress.Max=FRcvForm.gress.Position) then
begin
FRcvForm.cpStat.Caption:=___ccc__0015__Completed;
// FRcvForm.d2.Font.Style:=[fsBold];
while FileExists(_VV_LOCAL_CONFIG_THE_DOWNLOADS_FOLDER+'Completed\'+_vSS__FILE_RCV_FILENAME) do
begin
_vSS__FILE_RCV_FILENAME:='_'+_vSS__FILE_RCV_FILENAME;
end;
_Stp:=_VV_LOCAL_CONFIG_THE_DOWNLOADS_FOLDER+'Completed\'+_vSS__FILE_RCV_FILENAME;
MoveFile(pchar(_vSS__FILE_RCV_LOCAL_SAVA_FILENAME),pchar(_Stp));
FRcvForm.AA_0581_ww1.Hint:=_Stp;
//FRcvForm.d1.Caption :=remote_fil;
FRcvForm.AA_0581_ww1.Visible :=true;
FRcvForm.AA_0582_ww2.Visible :=true;
FRcvForm.AA_0569_canz.Caption :=___ccc__0072__Close; // close caption
end
else
FRcvForm.cpStat.Caption:='.';
end;
FRcvForm.Caption:=FRcvForm.cpStat.Caption;
FRcvForm.tmrest.Caption:='00:00:00';
if (not FRcvForm.Permission_OK) or (_SS_IS_CANCELED) then
begin
FRcvForm.Close;
if (_SS_IS_CANCELED) then DeleteFile(_vSS__FILE_RCV_LOCAL_SAVA_FILENAME);
exit;
end;
// add to completed box
if (not _SS_IS_PANIK_ERROR) then
begin
_sL :=format(___ccc__0105__FileAutoAccepted,[FRcvForm.ee1.Caption,FRcvForm.ee2.Caption]);
_add_2completed(FRcvForm.ee1.Caption,_Stp,FRcvForm.ee2.Caption,_octos(_vSS__FILE_RCV_FILESIZE));
end;
if (_vSS__FILE_RCV_IS_OTO_ACCEPT) then _FXOC_MAIN.TheLOGGER.Log(_sL,1);
// if (_vSS__FILE_RCV_IS_AUTO_ACCEPT)and(_V_MY_20_BOOLEANS[2]<>'A') then FRcvForm.close; // oto was on !!!
end;
end.