|
@@ -236,8 +236,11 @@ Type
|
|
Constructor Create(NetData : TNetData);
|
|
Constructor Create(NetData : TNetData);
|
|
End;
|
|
End;
|
|
|
|
|
|
|
|
+ { TNetworkAdjustedTime }
|
|
|
|
+
|
|
TNetworkAdjustedTime = Class
|
|
TNetworkAdjustedTime = Class
|
|
private
|
|
private
|
|
|
|
+ FOffsetLimit: Integer;
|
|
FTimesList : TPCThreadList<Pointer>;
|
|
FTimesList : TPCThreadList<Pointer>;
|
|
FTimeOffset : Integer;
|
|
FTimeOffset : Integer;
|
|
FTotalCounter : Integer;
|
|
FTotalCounter : Integer;
|
|
@@ -252,6 +255,7 @@ Type
|
|
function GetAdjustedTime : Cardinal;
|
|
function GetAdjustedTime : Cardinal;
|
|
property TimeOffset : Integer read FTimeOffset;
|
|
property TimeOffset : Integer read FTimeOffset;
|
|
function GetMaxAllowedTimestampForNewBlock : Cardinal;
|
|
function GetMaxAllowedTimestampForNewBlock : Cardinal;
|
|
|
|
+ property OffsetLimit : Integer read FOffsetLimit write FOffsetLimit;
|
|
end;
|
|
end;
|
|
|
|
|
|
TProcessReservedAreaMessage = procedure (netData : TNetData; senderConnection : TNetConnection; const HeaderData : TNetHeaderData; receivedData : TStream; responseData : TStream) of object;
|
|
TProcessReservedAreaMessage = procedure (netData : TNetData; senderConnection : TNetConnection; const HeaderData : TNetHeaderData; receivedData : TStream; responseData : TStream) of object;
|
|
@@ -5067,6 +5071,7 @@ begin
|
|
FTimesList := TPCThreadList<Pointer>.Create('TNetworkAdjustedTime_TimesList');
|
|
FTimesList := TPCThreadList<Pointer>.Create('TNetworkAdjustedTime_TimesList');
|
|
FTimeOffset := 0;
|
|
FTimeOffset := 0;
|
|
FTotalCounter := 0;
|
|
FTotalCounter := 0;
|
|
|
|
+ FOffsetLimit:= CT_MaxFutureBlockTimestampOffset DIV 2; // <0 equals to NO LIMIT, otherwise limited to value
|
|
end;
|
|
end;
|
|
|
|
|
|
destructor TNetworkAdjustedTime.Destroy;
|
|
destructor TNetworkAdjustedTime.Destroy;
|
|
@@ -5212,6 +5217,10 @@ begin
|
|
end else begin
|
|
end else begin
|
|
FTimeOffset := PNetworkAdjustedTimeReg(list[list.Count DIV 2])^.timeOffset;
|
|
FTimeOffset := PNetworkAdjustedTimeReg(list[list.Count DIV 2])^.timeOffset;
|
|
end;
|
|
end;
|
|
|
|
+ if (FOffsetLimit>=0) and (Abs(FTimeOffset)>Abs(FOffsetLimit)) then begin
|
|
|
|
+ if FTimeOffset>=0 then FTimeOffset := Abs(FOffsetLimit)
|
|
|
|
+ else FTimeOffset := Abs(FOffsetLimit)*(-1);
|
|
|
|
+ end;
|
|
if (last<>FTimeOffset) then begin
|
|
if (last<>FTimeOffset) then begin
|
|
s := '';
|
|
s := '';
|
|
for i := 0 to list.Count - 1 do begin
|
|
for i := 0 to list.Count - 1 do begin
|