Ich habe mich noch mal mit dem 2. Weg auseinander gesetzt und dazu weiter recherchiert.
Untyped Parameter kann man in Delphi mit einem @ direkt ansprechen (
https://stackoverflow.com/questions/...type-parameter).
Somit war es mir möglich den Sourcestream dazu zu bringen, die bereits decodierten Bytes an den IdHTTPRangeStream weiter zu geben. Offset benötige ich scheinbar nicht.
Die verwendete Read-Funktion beginnt doch immer beim Anfang der Datei zu lesen?
Liest IdHTTPRangeStream immer die gesamte Datei ein und schneidet nur den relevanten Teil heraus?
Wie auch immer, hiermit funktionierts.
Code:
//{$IFNDEF NEXTGEN}
function TXFileStream.Read(var Buffer; Count: Longint): Longint;
var i, keylen, keypos: Cardinal; key: TArray<Byte>; x: Longint;
begin
Result := FileRead(FHandle, Buffer, Count);
if Result = -1 then
begin
Result := 0;
exit;
end;
keylen := length(Chiffre);
SetLength(key, keylen);
for i := 1 to keylen do key[i-1] := ord(Chiffre[i]);
keypos := 0;//Buffer;
for x := 0 to Count-1 do
begin
TIdBytes(@Buffer)[x] := TIdBytes(@Buffer)[x] xor key[keypos]; //man beachte das @Buffer
inc(keypos);
if keypos > keylen - 1 then keypos := 0;
end;
end;
//{$ENDIF !NEXTGEN}
Viele Grüße