Home » Source Code » PMCAM2_2.50_Delphi_Source_Code » USECATableStore.pas

USECATableStore.pas ( File view )

  • By sathex 2016-03-20
  • View(s):0
  • Download(s):0
  • Point(s): 1
			unit USECATableStore;

interface

uses Classes, Sysutils,Unit_CRC32,Windows;

type TSECATableStore=Class(TObject)
  Private
    mvarMemoryPool: PBYTEARRAY;
    mvarMemoryPoolSize: integer;
    mvarMemoryFilled: integer;
    mvarBannedINS: PBYTEARRAY;
    mvarBannedINSFilled: integer;
    mvarBannedINSAllocated: integer;
    mvarWorkListSerial: TList;
    mvarWorkListShared: TList;
    mvarWorkListBanned: TList;
    mvarINSAgainstPPUA: integer;
    mvarINSAgainstSerial: integer;
    mvarINSAgainstUnknown: integer;
    mvarSortedPPUAUpTo: DWORD;
    mvarSortedSerialUpTo: DWORD;
    mvarReSortBanned: Boolean;
    function IsINSInListSharedBinarySearch(CRC32: integer): Boolean;
    function IsINSInListSerialBinarySearch(CRC32: integer): Boolean;
    procedure SortByCRC(L: TList);
    function GetCounter: DWORD;
    function GetINSPointerPPUA(index: integer): PBYTEARRAY;
    function GetINSPointerSerial(index: integer): PBYTEARRAY;
    function GetINSPointerSerialCRC(index: integer): PBYTEARRAY;
    function GetUsedMemory: DWORD;
    procedure SortBannedINS;
  Public
    property UsedMemory: DWORD read GetUsedMemory;
    property INSAgainstPPUA: integer read mvarINSAgainstPPUA;
    property INSAgainstSerial: integer read mvarINSAgainstSerial;
    property INSAgainstUnknown: integer read mvarINSAgainstUnknown;
    property Counter: DWORD read GetCounter;
    property INSPointerSerial[index: integer]: PBYTEARRAY read GetINSPointerSerial;
    property INSPointerSerialCRC[index: integer]: PBYTEARRAY read GetINSPointerSerialCRC;
    property INSPointerPPUA[index: integer]: PBYTEARRAY read GetINSPointerPPUA;
    procedure AddBannedINS(CRC32: integer);
    Procedure AddINS(P: PBYTEARRAY);
    procedure Sort;
    function WriteToFileInTables(FileName: String; Append: Boolean): Boolean;
    function WriteToFileInTablesTXT(FileName: String; Append: Boolean): Boolean;
    Constructor Create;
    Destructor Destroy; Override;
end;

implementation

{
 TSECATableStore 
}

var
    SortMemoryPool: PBYTEARRAY;

const MEMORY_EXPAND=524288;

procedure TSECATableStore.AddBannedINS(CRC32: integer);
var
    PDW: PDWORD;
begin
    If mvarBannedINSFilled+SizeOf(CRC32)>=mvarBannedINSAllocated Then begin
        ReallocMem(mvarBannedINS,mvarBannedINSAllocated+MEMORY_EXPAND);
        inc(mvarBannedINSAllocated,MEMORY_EXPAND);
    end;
    PDW:=@mvarBannedINS[mvarBannedINSFilled];
    PDW^:=CRC32;
    mvarWorkListBanned.Add(Pointer(mvarBannedINSFilled));
    inc(mvarBannedINSFilled,SizeOf(CRC32));
    mvarReSortBanned:=true;
end;

procedure TSECATableStore.AddINS(P: PBYTEARRAY);
var
    INSLen: integer;
    CRC32: DWORD;
    PDW: PDWORD;
    T: PBYTEARRAY;
    i: integer;
    Offset: integer;
begin
    if mvarReSortBanned Then begin
        //If Added a new banned INS resort the whole array...
        SortBannedINS;
        mvarReSortBanned:=false;
    end;
    INSLen:=(((P[1] shl 8) or P[2]) and $0FFF)+3;
    CRC32:=GetCRC32(@P[0],INSLen);
    Case P[0] of
        $82,$86: if IsINSInListSerialBinarySearch(CRC32) Then Exit;
        $84: if IsINSInListSharedBinarySearch(CRC32) Then Exit;
        else
            inc(mvarINSAgainstUnknown);
    end;
    If mvarMemoryFilled+SizeOf(CRC32)+INSLen>=mvarMemoryPoolSize Then begin
        ReallocMem(mvarMemoryPool,mvarMemoryPoolSize+MEMORY_EXPAND);
        inc(mvarMemoryPoolSize,MEMORY_EXPAND);
    end;
    OffSet:=mvarMemoryFilled;
    PDW:=@mvarMemoryPool[mvarMemoryFilled];
    PDW^:=CRC32;
    inc(mvarMemoryFilled,SizeOf(CRC32));
    T:=@mvarMemoryPool[mvarMemoryFilled];
    for i := 0 to INSLen-1 do begin
        T[i]:=P[i];
    end;
    inc(mvarMemoryFilled,INSLen);
    Case P[0] of
        $82,$86: begin
                  inc(mvarINSAgainstSerial);
                  mvarWorkListSerial.Add(Pointer(offSet));
                  if (mvarINSAgainstSerial mod 5000)=0 Then begin
                        SortByCRC(mvarWorkListSerial);
                  end;
                 end;
        $84: begin
                inc(mvarINSAgainstPPUA);
                mvarWorkListShared.Add(Pointer(OffSet));
                  if (mvarINSAgainstPPUA mod 5000)=0 Then begin
                        SortByCRC(mvarWorkListShared);
                  end;
             end;
    end;
end;

constructor TSECATableStore.Create;
begin
    mvarWorkListSerial:=TList.Create;
    mvarWorkListShared:=TList.Create;
    mvarMemoryPool:=nil;
    mvarMemoryFilled:=0;
    mvarMemoryPoolSize:=0;
    mvarINSAgainstPPUA:=0;
    mvarINSAgainstSerial:=0;
    mvarINSAgainstUnknown:=0;
    mvarSortedPPUAUpTo:=0;
    mvarSortedSerialUpTo:=0;
    mvarBannedINSFilled:=0;
    mvarBannedINS:=nil;
    mvarBannedINSAllocated:=0;
    mvarWorkListBanned:=TList.Create;
    mvarReSortBanned:=false;
end;

destructor TSECATableStore.Destroy;
begin
    mvarWorkListSerial.Free;
    mvarWorkListShared.Free;
    if Assigned(mvarMemoryPool) Then begin
        FreeMem(mvarMemoryPool);
    end;
    if Assigned(mvarBannedINS) Then begin
        FreeMem(mvarBannedINS);
    end;
  inherited;
end;

function TSECATableStore.GetCounter: DWORD;
begin
    Result:=mvarWorkListSerial.Count+mvarWorkListShared.Count+mvarWorkListBanned.Count;
end;

function TSECATableStore.GetINSPointerPPUA(index: integer): PBYTEARRAY;
var
    P: PBYTEARRAY;
begin
    P:=@mvarMemoryPool[integer(mvarWorkListShared.Items[Index])];
    Result:=@P[Sizeof(DWORD)];
end;

function TSECATableStore.GetINSPointerSerial(index: integer): PBYTEARRAY;
var
    P: PBYTEARRAY;
begin
    P:=@mvarMemoryPool[integer(mvarWorkListSerial.Items[Index])];
    Result:=@P[Sizeof(DWORD)];
end;

function TSECATableStore.GetINSPointerSerialCRC(index: integer): PBYTEARRAY;
begin
    Result:=@mvarMemoryPool[integer(mvarWorkListSerial.Items[Index])];
end;

function TSECATableStore_Sort(Po1, Po2: POINTER): integer;
var
    P1: PBYTEARRAY;
    P2: PBYTEARRAY;
    C1: integer;
    j: integer;
begin
    P1:=@SortMemoryPool[integer(Po1)+4];
    P2:=@SortMemoryPool[integer(Po2)+4];
    C1:=P1[0]-P2[0];
    if C1=0 Then begin
        if P1[0]=$84 Then begin
            //Check PPUA
            for j := 5 to 8 do begin //3 bytes Shared address+P1 modifier byte
                C1:=P1[j]-P2[j];
                if C1<>0 Then Break;
            end;
        end else begin
            //Check Serial
            for j := 3 to 8 do begin
                C1:=P1[j]-P2[j];
                if C1<>0 Then Break;
            end;
        end;
    end;
    Result:=C1;
end;

function TSECATableStore_SortCRC(Po1, Po2: POINTER): integer;
var
    P1: PINTEGER;
    P2: PINTEGER;
begin
    P1:=@SortMemoryPool[integer(Po1)];
    P2:=@SortMemoryPool[integer(Po2)];
    if P1^>P2^ Then begin
        Result:=1;
    end else if P1^<P2^ Then begin
        Result:=-1
    end else begin
        Result:=0;
    end;
end;

function QuickFind(L: TList;li: integer; ui: integer; Target: integer): integer;
var
    np: integer;
    P1: PINTEGER;
begin
    np:=(li+ui) div 2;
    if (np=li) or (np=ui) Then begin
        //For safety check both :-?
        Result:=-1;
        P1:=@SortMemoryPool[integer(L.Items[li])];
        if P1^=integer(Target) Then begin
            Result:=li;
            Exit;
        end;
        P1:=@SortMemoryPool[integer(L.Items[ui])];
        if P1^=integer(Target) Then begin
            Result:=ui;
            Exit;
        end;
        Exit;
    end;
    P1:=@SortMemoryPool[integer(L.Items[np])];
    if P1^> integer(Target) Then begin
        Result:=QuickFind(L,li,np,Target);
    end else begin
        if P1^<integer(Target) Then begin
            Result:=QuickFind(L,np,ui,Target);
        end else begin
            Result:=np;
        end;
    end;
end;

function TSECATableStore.GetUsedMemory: DWORD;
var
    Mem: integer;
begin
    Mem:=mvarMemoryPoolSize+mvarWorkListSerial.Capacity*sizeof(Pointer)+mvarWorkListShared.Capacity*sizeOf(Pointer);
    Mem:=Mem+mvarBannedINSAllocated+mvarWorkListBanned.Capacity*SizeOf(Pointer);
    Result:=Mem;
end;

function TSECATableStore.IsINSInListSerialBinarySearch(
  CRC32: integer): Boolean;
var
    index: integer;
    i: integer;
    PDW: PINTEGER;
begin
    index:=-1;
    if mvarBannedINSFilled>0 Then begin
        SortMemoryPool:=mvarBannedINS;
        index:=QuickFind(mvarWorkListBanned,0,mvarWorkListBanned.Count-1,CRC32);
        if Index<>-1 Then begin
            Result:=true;
            Exit;
        end;
    end;
    if mvarSortedSerialUpTo>0 Then begin
        SortMemoryPool:=mvarMemoryPool;
        index:=QuickFind(mvarWorkListSerial,0,mvarSortedSerialUpTo-1,CRC
...
...
(Please download the complete source code to view)
			
...
Expand> <Close

Want complete source code? Download it here

Point(s): 1

Download
0 lines left, continue to read
Sponsored links

File list

Tips: You can preview the content of files by clicking file names^_^
Name Size Date
About.rtf20.49 kB2005-03-15|17:16
changelog.txt4.26 kB2005-03-15|17:16
clean.bat92.00 B2005-01-05|02:35
DVBCore.pas31.98 kB2004-12-17|23:45
frmPPVInfo.dfm15.69 kB2004-12-19|19:54
frmPPVInfo.pas6.17 kB2005-03-03|01:02
01.96 kB
About.bmp3.05 kB2004-12-17|23:52
About.ico2.40 kB2004-12-17|23:52
Add.bmp1.30 kB2004-12-17|23:52
bluenote.ico7.23 kB2004-12-17|23:52
bug.jpg6.04 kB2005-01-05|02:35
CAM.ico2.40 kB2004-12-17|23:52
Close.bmp3.05 kB2004-12-17|23:52
EPG.bmp1.05 kB2005-01-05|21:10
EPG.ico1.37 kB2004-12-17|23:52
EPGOFF.bmp1.62 kB2004-12-17|23:52
EPGON.bmp1.62 kB2004-12-17|23:52
EPG_Gliph.bmp3.43 kB2004-12-17|23:52
Event.ico1.37 kB2004-12-17|23:52
jetons.ico1.37 kB2004-12-17|23:52
leftLogo.bmp9.96 kB2004-12-17|23:52
logger.ico1.68 kB2004-12-17|23:52
MagicWand.bmp1.30 kB2004-12-17|23:52
MagicWand.ico1.37 kB2004-12-17|23:52
MAS.ico1.37 kB2004-12-17|23:52
MENOS.ico1.37 kB2004-12-17|23:52
nemesis.ico4.19 kB2004-12-17|23:52
Phoenix.ico1.72 kB2004-12-17|23:52
Provider.ico1.37 kB2004-12-17|23:52
Remove.bmp1.30 kB2004-12-17|23:52
Reset.bmp3.05 kB2004-12-17|23:52
Restart.bmp1.30 kB2004-12-17|23:52
Save.bmp2.05 kB2004-12-17|23:52
scriptengine.ico7.23 kB2004-12-17|23:52
ScriptsEngine.bmp6.80 kB2004-12-17|23:52
Tools.bmp246.00 B2004-12-17|23:52
tuxprogramming.jpg4.15 kB2005-01-13|19:01
V9Card.jpg11.00 kB2005-03-03|01:02
IFSI_IniFiles.pas10.45 kB2004-12-19|19:54
MpgLib.DLL141.50 kB2004-12-24|17:03
PMCAM0.00 B2005-03-15|17:18
PMCAM4.67 kB2005-01-05|17:24
PMCAM4.69 kB2005-01-05|17:24
PMCAM4.52 kB2005-01-05|17:24
PMCAM.rc3.60 kB2004-12-17|23:47
PMCAM2.dpr6.30 kB2005-03-11|20:15
PMCAM2.res1.70 kB2005-03-15|17:16
PMCAM2StandAlone.dpr1.19 kB2005-03-03|01:02
PMCAM2StandAlone.res4.95 kB2005-03-11|20:15
PMCAMMenu.rc259.00 B2004-12-26|20:10
PMCAMMenu.RES162.25 kB2005-03-15|17:16
rUPClickSplitter.res740.00 B2004-12-19|19:54
santa_rock.jpg5.65 kB2004-12-24|17:59
UBitManager.pas4.18 kB2004-12-17|23:45
uDecode123.pas4.01 kB2004-12-29|01:33
UDVBConditionalAccessSystemNames.pas1.49 kB2004-12-17|23:45
UDVBCoreToMD.pas4.59 kB2004-12-17|23:45
UDVBPIDNames.pas1.23 kB2004-12-17|23:45
UDVBTablesHolder.pas2.68 kB2004-12-28|02:17
UEPGEntry.pas3.29 kB2004-12-17|23:45
UEPGMHW.dfm7.72 kB2005-01-11|02:38
UEPGMHW.pas40.85 kB2005-01-11|02:38
UfrmAddFilter.dfm6.86 kB2004-12-17|23:46
UfrmAddFilter.pas3.68 kB2004-12-17|23:45
UfrmCAM.dfm217.00 kB2005-03-15|03:22
UfrmCAM.pas159.37 kB2005-03-15|17:16
ufrmDLLForm.dfm420.00 B2004-12-19|19:54
ufrmDLLForm.pas1.87 kB2004-12-26|20:10
UfrmEMM.dfm1.28 kB2004-12-17|23:46
UfrmEMM.pas1.47 kB2004-12-17|23:45
UfrmEPGAdvanced.dfm7.01 kB2005-01-05|21:10
UfrmEPGAdvanced.pas2.56 kB2005-01-05|21:10
UfrmMHWEPGEntries.dfm3.81 kB2004-12-17|23:46
UfrmMHWEPGEntries.pas4.33 kB2004-12-17|23:45
ufrmMHWRadio.dfm35.85 kB2005-01-21|18:53
ufrmMHWRadio.pas37.84 kB2005-01-21|18:53
UfrmPMTDetails.dfm2.31 kB2005-01-21|18:53
UfrmPMTDetails.pas2.74 kB2005-01-21|18:53
UfrmWarningOnExit.dfm15.64 kB2005-01-05|21:10
UfrmWarningOnExit.pas1.44 kB2005-01-05|21:10
ULogEngine.pas15.89 kB2005-03-12|17:11
UMDDefs.pas4.07 kB2005-03-03|01:02
UMD_Impl.pas11.26 kB2005-03-03|01:02
United32.pas14.20 kB2004-12-17|23:45
UnitISO639_3.pas10.04 kB2005-03-03|01:02
UnitMDInterface.pas28.92 kB2005-03-15|03:22
UnitTimer.pas1.39 kB2004-12-17|23:45
Unit_CRC32.pas3.62 kB2004-12-17|23:45
uPESToTS.pas6.11 kB2005-03-03|01:02
UScriptFunctions.pas2.97 kB2005-01-03|16:45
UScriptsEditor.dfm58.10 kB2005-01-21|18:53
UScriptsEditor.pas22.02 kB2005-03-03|01:02
USECAManager.pas18.26 kB2005-03-03|01:02
USECATableStore.pas12.92 kB2004-12-17|23:45
USECA_EMM.pas7.74 kB2005-03-12|03:36
USmartCardISO.pas14.45 kB2004-12-17|23:45
UTfrmMultiDec.dfm407.00 B2005-01-21|18:53
UTfrmMultiDec.pas4.38 kB2005-01-21|18:53
UTranslate.pas6.49 kB2004-12-24|17:03
UTS184ToBitFilter.pas36.28 kB2005-03-11|20:15
uUPClickSplitter.dcr488.00 B2004-12-19|19:54
uUPClickSplitter.dcu18.09 kB2005-03-03|01:02
uUPClickSplitter.pas20.43 kB2004-12-26|20:10
PMCAM2_2.50.zip870.87 kB2016-03-19|22:08
...
Sponsored links

USECATableStore.pas (1.30 MB)

Need 1 point
Your Point(s)

Your Point isn't enough.

Get point immediately by PayPal

More(Debit card / Credit card / PayPal Credit / Online Banking)

Submit your source codes. Get more point

LOGIN

Don't have an account? Register now
Need any help?
Mail to: support@codeforge.com

切换到中文版?

CodeForge Chinese Version
CodeForge English Version

Where are you going?

^_^"Oops ...

Sorry!This guy is mysterious, its blog hasn't been opened, try another, please!
OK

Warm tip!

CodeForge to FavoriteFavorite by Ctrl+D