Browse Source

add TNetworkAdjustedTime limit offset value

Default value is CT_MaxFutureBlockTimestampOffset DIV 2 (+- 7 seconds maximum offset)
PascalCoin 5 years ago
parent
commit
1f8856685a
1 changed files with 9 additions and 0 deletions
  1. 9 0
      src/core/UNetProtocol.pas

+ 9 - 0
src/core/UNetProtocol.pas

@@ -236,8 +236,11 @@ Type
     Constructor Create(NetData : TNetData);
   End;
 
+  { TNetworkAdjustedTime }
+
   TNetworkAdjustedTime = Class
   private
+    FOffsetLimit: Integer;
     FTimesList : TPCThreadList<Pointer>;
     FTimeOffset : Integer;
     FTotalCounter : Integer;
@@ -252,6 +255,7 @@ Type
     function GetAdjustedTime : Cardinal;
     property TimeOffset : Integer read FTimeOffset;
     function GetMaxAllowedTimestampForNewBlock : Cardinal;
+    property OffsetLimit : Integer read FOffsetLimit write FOffsetLimit;
   end;
 
   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');
   FTimeOffset := 0;
   FTotalCounter := 0;
+  FOffsetLimit:= CT_MaxFutureBlockTimestampOffset DIV 2; // <0 equals to NO LIMIT, otherwise limited to value
 end;
 
 destructor TNetworkAdjustedTime.Destroy;
@@ -5212,6 +5217,10 @@ begin
   end else begin
     FTimeOffset := PNetworkAdjustedTimeReg(list[list.Count DIV 2])^.timeOffset;
   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
     s := '';
     for i := 0 to list.Count - 1 do begin