Browse Source

AnsiString to String - Net connections

PascalCoin 6 years ago
parent
commit
6e3bb4b6ea
3 changed files with 97 additions and 102 deletions
  1. 49 56
      src/core/UNetProtocol.pas
  2. 39 37
      src/core/UNode.pas
  3. 9 9
      src/core/UTCPIP.pas

+ 49 - 56
src/core/UNetProtocol.pas

@@ -143,7 +143,7 @@ Type
     FListByIp : TList;
     FListByNetConnection : TList;
     Procedure SecuredDeleteFromListByIp(index : Integer);
-    Function SecuredFindByIp(const ip : AnsiString; port : Word; var Index: Integer): Boolean;
+    Function SecuredFindByIp(const ip : String; port : Word; var Index: Integer): Boolean;
     Function SecuredFindByNetConnection(const search : TNetConnection; var Index: Integer): Boolean;
   protected
     function DeleteNetConnection(netConnection : TNetConnection) : Boolean;
@@ -156,8 +156,8 @@ Type
     procedure CleanNodeServersList;
     Function LockList : TList;
     Procedure UnlockList;
-    function IsBlackListed(const ip: AnsiString): Boolean;
-    function GetNodeServerAddress(const ip : AnsiString; port:Word; CanAdd : Boolean; var nodeServerAddress : TNodeServerAddress) : Boolean;
+    function IsBlackListed(const ip: String): Boolean;
+    function GetNodeServerAddress(const ip : String; port:Word; CanAdd : Boolean; var nodeServerAddress : TNodeServerAddress) : Boolean;
     procedure SetNodeServerAddress(const nodeServerAddress : TNodeServerAddress);
     Procedure UpdateNetConnection(netConnection : TNetConnection);
     procedure GetNodeServersToConnnect(maxNodes : Integer; useArray : Boolean; var nsa : TNodeServerAddressArray);
@@ -236,14 +236,14 @@ Type
     FTimesList : TPCThreadList;
     FTimeOffset : Integer;
     FTotalCounter : Integer;
-    Function IndexOfClientIp(list : TList; const clientIp : AnsiString) : Integer;
+    Function IndexOfClientIp(list : TList; const clientIp : String) : Integer;
     Procedure UpdateMedian(list : TList);
   public
     constructor Create;
     destructor Destroy; override;
-    procedure UpdateIp(const clientIp : AnsiString; clientTimestamp : Cardinal);
-    procedure AddNewIp(const clientIp : AnsiString; clientTimestamp : Cardinal);
-    procedure RemoveIp(const clientIp : AnsiString);
+    procedure UpdateIp(const clientIp : String; clientTimestamp : Cardinal);
+    procedure AddNewIp(const clientIp : String; clientTimestamp : Cardinal);
+    procedure RemoveIp(const clientIp : String);
     function GetAdjustedTime : Cardinal;
     property TimeOffset : Integer read FTimeOffset;
     function GetMaxAllowedTimestampForNewBlock : Cardinal;
@@ -295,9 +295,9 @@ Type
     Procedure DiscoverServersTerminated(Sender : TObject);
     procedure DoProcessReservedAreaMessage(senderConnection : TNetConnection; const headerData : TNetHeaderData; receivedData : TStream; responseData : TStream); virtual;
   public
-    Class function HeaderDataToText(const HeaderData : TNetHeaderData) : AnsiString;
+    Class function HeaderDataToText(const HeaderData : TNetHeaderData) : String;
     Class function ExtractHeaderInfo(buffer : TStream; var HeaderData : TNetHeaderData; DataBuffer : TStream; var IsValidHeaderButNeedMoreData : Boolean) : Boolean;
-    Class Function OperationToText(operation : Word) : AnsiString;
+    Class Function OperationToText(operation : Word) : String;
     // Only 1 NetData
     Class Function NetData : TNetData;
     Class Function NetDataExists : Boolean;
@@ -308,7 +308,7 @@ Type
     Function NewRequestId : Cardinal;
     Procedure RegisterRequest(Sender: TNetConnection; operation : Word; request_id : Cardinal);
     Function UnRegisterRequest(Sender: TNetConnection; operation : Word; request_id : Cardinal) : Boolean;
-    Function PendingRequest(Sender : TNetConnection; var requests_data : AnsiString ) : Integer;
+    Function PendingRequest(Sender : TNetConnection; var requests_data : String ) : Integer;
     Procedure AddServer(NodeServerAddress : TNodeServerAddress);
     //
     Procedure DiscoverFixedServersOnly(const FixedServers : TNodeServerAddressArray);
@@ -376,7 +376,7 @@ Type
     FIsMyselfServer : Boolean;
     FClientPublicKey : TAccountKey;
     FCreatedTime: TDateTime;
-    FClientAppVersion: AnsiString;
+    FClientAppVersion: String;
     FDoFinalizeConnection : Boolean;
     FNetProtocolVersion: TNetProtocolVersion;
     FAlertedForNewProtocolAvailable : Boolean;
@@ -386,7 +386,7 @@ Type
     FBufferLock : TPCCriticalSection;
     FBufferReceivedOperationsHash : TOrderedRawList;
     FBufferToSendOperations : TOperationsHashTree;
-    FClientTimestampIp : AnsiString;
+    FClientTimestampIp : String;
     function GetConnected: Boolean;
     procedure SetConnected(const Value: Boolean);
     procedure TcpClient_OnConnect(Sender: TObject);
@@ -407,7 +407,7 @@ Type
     Procedure DoProcess_GetPendingOperations;
     Procedure SetClient(Const Value : TNetTcpIpClient);
     Function ReadTcpClientBuffer(MaxWaitMiliseconds : Cardinal; var HeaderData : TNetHeaderData; BufferData : TStream) : Boolean;
-    Procedure DisconnectInvalidClient(ItsMyself : Boolean; Const why : AnsiString);
+    Procedure DisconnectInvalidClient(ItsMyself : Boolean; Const why : String);
     function GetClient: TNetTcpIpClient;
   protected
     procedure Notification(AComponent: TComponent; Operation: TOperation); override;
@@ -424,10 +424,10 @@ Type
     Function Send_NewBlockFound(Const NewBlock : TPCOperationsComp) : Boolean;
     Function Send_GetBlocks(StartAddress, quantity : Cardinal; var request_id : Cardinal) : Boolean;
     Function Send_AddOperations(Operations : TOperationsHashTree) : Boolean;
-    Function Send_Message(Const TheMessage : AnsiString) : Boolean;
+    Function Send_Message(Const TheMessage : String) : Boolean;
     Function AddOperationsToBufferForSend(Operations : TOperationsHashTree) : Integer;
     Property Client : TNetTcpIpClient read GetClient;
-    Function ClientRemoteAddr : AnsiString;
+    Function ClientRemoteAddr : String;
     property TimestampDiff : Integer read FTimestampDiff;
     property RemoteOperationBlock : TOperationBlock read FRemoteOperationBlock;
     //
@@ -435,7 +435,7 @@ Type
     //
     Property IsMyselfServer : Boolean read FIsMyselfServer;
     Property CreatedTime : TDateTime read FCreatedTime;
-    Property ClientAppVersion : AnsiString read FClientAppVersion write FClientAppVersion;
+    Property ClientAppVersion : String read FClientAppVersion write FClientAppVersion;
     Procedure FinalizeConnection;
   End;
 
@@ -500,7 +500,7 @@ uses
   UConst, ULog, UNode, UTime, UECIES, UChunk;
 
 Const
-  CT_NetTransferType : Array[TNetTransferType] of AnsiString = ('Unknown','Request','Response','Autosend');
+  CT_NetTransferType : Array[TNetTransferType] of String = ('Unknown','Request','Response','Autosend');
   CT_NetHeaderData : TNetHeaderData = (header_type:ntp_unknown;protocol:(protocol_version:0;protocol_available:0);operation:0;request_id:0;buffer_data_length:0;is_error:false;error_code:0;error_text:'');
 
 
@@ -640,7 +640,7 @@ begin
   inherited Destroy;
 end;
 
-function TOrderedServerAddressListTS.GetNodeServerAddress(const ip: AnsiString; port: Word; CanAdd: Boolean; var nodeServerAddress: TNodeServerAddress): Boolean;
+function TOrderedServerAddressListTS.GetNodeServerAddress(const ip: String; port: Word; CanAdd: Boolean; var nodeServerAddress: TNodeServerAddress): Boolean;
 Var i : Integer;
   P : PNodeServerAddress;
 begin
@@ -805,7 +805,7 @@ begin
   end;
 end;
 
-function TOrderedServerAddressListTS.IsBlackListed(const ip: AnsiString): Boolean;
+function TOrderedServerAddressListTS.IsBlackListed(const ip: String): Boolean;
 Var i : Integer;
   P : PNodeServerAddress;
 begin
@@ -849,7 +849,7 @@ begin
   inc(FNetData.FNetStatistics.NodeServersDeleted);
 end;
 
-function TOrderedServerAddressListTS.SecuredFindByIp(const ip: AnsiString; port: Word; var Index: Integer): Boolean;
+function TOrderedServerAddressListTS.SecuredFindByIp(const ip: String; port: Word; var Index: Integer): Boolean;
 var L, H, I, C: Integer;
   PN : PNodeServerAddress;
 begin
@@ -962,15 +962,6 @@ Var _NetData : TNetData = nil;
 
 Type PNetRequestRegistered = ^TNetRequestRegistered;
 
-function SortNodeServerAddress(Item1, Item2: Pointer): Integer;
-Var P1,P2 : PNodeServerAddress;
-Begin
-  P1 := Item1;
-  P2 := Item2;
-  Result := AnsiCompareText(P1.ip,P2.ip);
-  if Result=0 then Result := P1.port - P2.port;
-End;
-
 procedure TNetData.AddServer(NodeServerAddress: TNodeServerAddress);
 Var P : PNodeServerAddress;
   i : Integer;
@@ -2115,7 +2106,7 @@ begin
   end;
 end;
 
-class function TNetData.HeaderDataToText(const HeaderData: TNetHeaderData): AnsiString;
+class function TNetData.HeaderDataToText(const HeaderData: TNetHeaderData): String;
 begin
   Result := CT_NetTransferType[HeaderData.header_type]+' Operation:'+TNetData.OperationToText(HeaderData.operation);
   if HeaderData.is_error then begin
@@ -2270,7 +2261,7 @@ begin
   FNewBlockChainFromClientStatus := Format('Checking new safebox: %s %s',[mesage,pct]);
 end;
 
-class function TNetData.OperationToText(operation: Word): AnsiString;
+class function TNetData.OperationToText(operation: Word): String;
 begin
   case operation of
     CT_NetOp_Hello : Result := 'HELLO';
@@ -2290,7 +2281,7 @@ begin
   end;
 end;
 
-function TNetData.PendingRequest(Sender: TNetConnection; var requests_data : AnsiString): Integer;
+function TNetData.PendingRequest(Sender: TNetConnection; var requests_data : String): Integer;
 Var P : PNetRequestRegistered;
   i : Integer;
   l : TList;
@@ -2485,7 +2476,7 @@ begin
   end;
 end;
 
-function TNetConnection.ClientRemoteAddr: AnsiString;
+function TNetConnection.ClientRemoteAddr: String;
 begin
   If Assigned(FTcpIpClient) then begin
     Result := FtcpIpClient.ClientRemoteAddr
@@ -2589,7 +2580,7 @@ begin
   End;
 end;
 
-procedure TNetConnection.DisconnectInvalidClient(ItsMyself : Boolean; const why: AnsiString);
+procedure TNetConnection.DisconnectInvalidClient(ItsMyself : Boolean; const why: String);
 Var include_in_list : Boolean;
   ns : TNodeServerAddress;
 begin
@@ -2600,9 +2591,9 @@ begin
     TLog.NewLog(lterror,Classname,'Disconecting '+ClientRemoteAddr+' > '+Why);
   end;
   FIsMyselfServer := ItsMyself;
-  include_in_list := (Not SameText(Client.RemoteHost,'localhost')) And (Not SameText('127.',Copy(Client.RemoteHost,1,4)))
-    And (Not SameText('192.168.',Copy(Client.RemoteHost,1,8)))
-    And (Not SameText('10.',Copy(Client.RemoteHost,1,3)));
+  include_in_list := (Not SameText(Client.RemoteHost,'localhost')) And (Not SameText('127.',Client.RemoteHost.Substring(0,4)))
+    And (Not SameText('192.168.',Client.RemoteHost.Substring(0,8)))
+    And (Not SameText('10.',Client.RemoteHost.Substring(0,3)));
   if include_in_list then begin
     If TNetData.NetData.NodeServersAddresses.GetNodeServerAddress(Client.RemoteHost,Client.RemotePort,true,ns) then begin
       ns.last_connection := UnivDateTimeToUnix(DateTime2UnivDateTime(now));
@@ -2626,7 +2617,7 @@ end;
 procedure TNetConnection.DoProcessBuffer;
 Var HeaderData : TNetHeaderData;
   ms : TMemoryStream;
-  ops : AnsiString;
+  ops : String;
   iPending : Integer;
 begin
   if FDoFinalizeConnection then begin
@@ -2757,7 +2748,7 @@ Var input_operations_count, cBlock, cBlockOpIndex, c : Cardinal;
   outputBuffer : TStream;
   opindexdata : TStream;
   opsdata : TBytes;
-  errors : AnsiString;
+  errors : String;
   DoDisconnect : Boolean;
 
 begin
@@ -2828,7 +2819,7 @@ Var b,b_start,b_end:Cardinal;
     op : TPCOperationsComp;
     db : TMemoryStream;
     c : Cardinal;
-  errors : AnsiString;
+  errors : String;
   DoDisconnect : Boolean;
   posquantity : Int64;
 begin
@@ -2985,7 +2976,7 @@ procedure TNetConnection.DoProcess_GetOperationsBlock_Request(HeaderData: TNetHe
 Const CT_Max_Positions = 10;
 Var inc_b,b,b_start,b_end, total_b:Cardinal;
   db,msops : TMemoryStream;
-  errors, blocksstr : AnsiString;
+  errors, blocksstr : String;
   DoDisconnect : Boolean;
   ob : TOperationBlock;
 begin
@@ -3065,7 +3056,7 @@ begin
   This call is used to obtain a chunk of the safebox
   Request:
   BlockCount (4 bytes) - The safebox checkpoint
-  SafeboxHash (AnsiString) - The safeboxhash of that checkpoint
+  SafeboxHash (TRawBytes) - The safeboxhash of that checkpoint
   StartPos (4 bytes) - The start index (0..BlockCount-1)
   EndPos   (4 bytes) - The final index (0..BlockCount-1)
     If valid info:
@@ -3120,7 +3111,7 @@ var responseStream : TMemoryStream;
   b : Byte;
   c : Cardinal;
   DoDisconnect : Boolean;
-  errors : AnsiString;
+  errors : String;
   opht : TOperationsHashTree;
 begin
   {
@@ -3273,7 +3264,7 @@ var responseStream, accountsStream : TMemoryStream;
   c, nAccounts : Cardinal;
   acc : TAccount;
   DoDisconnect : Boolean;
-  errors : AnsiString;
+  errors : String;
   pubKey : TAccountKey;
   sbakl : TOrderedAccountKeysList;
   ocl : TOrderedCardinalList;
@@ -3358,7 +3349,7 @@ var responseStream : TMemoryStream;
   c : Cardinal;
   acc : TAccount;
   DoDisconnect : Boolean;
-  errors : AnsiString;
+  errors : String;
 begin
   {
   This call is used to obtain an Account data
@@ -3596,7 +3587,7 @@ Begin
 end;
 
 procedure TNetConnection.DoProcess_Message(HeaderData: TNetHeaderData; DataBuffer: TStream);
-Var   errors : AnsiString;
+Var   errors : String;
   decrypted,messagecrypted : TRawBytes;
   DoDisconnect : boolean;
 begin
@@ -4155,7 +4146,9 @@ procedure TNetConnection.Send(NetTranferType: TNetTransferType; operation, error
 Var l : Cardinal;
    w : Word;
   Buffer : TStream;
-  s : AnsiString;
+  {$IFDEF HIGHLOG}
+  s : String;
+  {$ENDIF}
 begin
   Buffer := TMemoryStream.Create;
   try
@@ -4198,11 +4191,11 @@ begin
       Buffer.Write(l,4);
       DataBuffer.Position := 0;
       Buffer.CopyFrom(DataBuffer,DataBuffer.Size);
-      s := '(Data:'+inttostr(DataBuffer.Size)+'b) ';
+      {$IFDEF HIGHLOG}s := '(Data:'+inttostr(DataBuffer.Size)+'b) ';{$ENDIF}
     end else begin
       l := 0;
       Buffer.Write(l,4);
-      s := '';
+      {$IFDEF HIGHLOG}s := '';{$ENDIF}
     end;
     Buffer.Position := 0;
     TPCThread.ProtectEnterCriticalSection(Self,FNetLock);
@@ -4385,7 +4378,7 @@ begin
   end;
 end;
 
-function TNetConnection.Send_Message(const TheMessage: AnsiString): Boolean;
+function TNetConnection.Send_Message(const TheMessage: String): Boolean;
 Var data : TStream;
   cyp : TRawBytes;
 begin
@@ -4897,13 +4890,13 @@ end;
 { TNetworkAdjustedTime }
 
 Type TNetworkAdjustedTimeReg = Record
-     clientIp : AnsiString; // Client IP allows only 1 connection per IP (not using port)
+     clientIp : String; // Client IP allows only 1 connection per IP (not using port)
      timeOffset : Integer;
      counter : Integer; // To prevent a time attack from a single IP with multiple connections, only 1 will be used for calc NAT
    End;
    PNetworkAdjustedTimeReg = ^TNetworkAdjustedTimeReg;
 
-procedure TNetworkAdjustedTime.AddNewIp(const clientIp: AnsiString; clientTimestamp : Cardinal);
+procedure TNetworkAdjustedTime.AddNewIp(const clientIp: String; clientTimestamp : Cardinal);
 Var l : TList;
   i : Integer;
   P : PNetworkAdjustedTimeReg;
@@ -4971,15 +4964,15 @@ begin
   end;
 end;
 
-function TNetworkAdjustedTime.IndexOfClientIp(list: TList; const clientIp: AnsiString): Integer;
+function TNetworkAdjustedTime.IndexOfClientIp(list: TList; const clientIp: String): Integer;
 begin
   for Result := 0 to list.Count - 1 do begin
-    if AnsiSameStr(PNetworkAdjustedTimeReg(list[result])^.clientIp,clientIp) then exit;
+    if SameStr(PNetworkAdjustedTimeReg(list[result])^.clientIp,clientIp) then exit;
   end;
   Result := -1;
 end;
 
-procedure TNetworkAdjustedTime.RemoveIp(const clientIp: AnsiString);
+procedure TNetworkAdjustedTime.RemoveIp(const clientIp: String);
 Var l : TList;
   i : Integer;
   P : PNetworkAdjustedTimeReg;
@@ -5010,7 +5003,7 @@ begin
   Result := PNetworkAdjustedTimeReg(p1)^.timeOffset - PNetworkAdjustedTimeReg(p2)^.timeOffset;
 end;
 
-procedure TNetworkAdjustedTime.UpdateIp(const clientIp: AnsiString; clientTimestamp: Cardinal);
+procedure TNetworkAdjustedTime.UpdateIp(const clientIp: String; clientTimestamp: Cardinal);
 Var l : TList;
   i : Integer;
   P : PNetworkAdjustedTimeReg;

+ 39 - 37
src/core/UNode.pas

@@ -54,7 +54,7 @@ Type
     FOperations : TPCOperationsComp;
     FNetServer : TNetServer;
     FBCBankNotify : TPCBankNotify;
-    FPeerCache : AnsiString;
+    FPeerCache : String;
     FDisabledsNewBlocksCount : Integer;
     FSentOperations : TOrderedRawList;
     FBroadcastData : Boolean;
@@ -63,15 +63,15 @@ Type
     FBufferAuxWaitingOperations : TOperationsHashTree;
     {$ENDIF}
     Procedure OnBankNewBlock(Sender : TObject);
-    procedure SetNodeLogFilename(const Value: AnsiString);
-    function GetNodeLogFilename: AnsiString;
+    procedure SetNodeLogFilename(const Value: String);
+    function GetNodeLogFilename: String;
   protected
     procedure Notification(AComponent: TComponent; Operation: TOperation); override;
   public
     Class Function Node : TNode;
     Class Function NodeExists : Boolean;
-    Class Procedure DecodeIpStringToNodeServerAddressArray(Const Ips : AnsiString; Var NodeServerAddressArray : TNodeServerAddressArray);
-    Class Function EncodeNodeServerAddressArrayToIpString(Const NodeServerAddressArray : TNodeServerAddressArray) : AnsiString;
+    Class Procedure DecodeIpStringToNodeServerAddressArray(Const Ips : String; Var NodeServerAddressArray : TNodeServerAddressArray);
+    Class Function EncodeNodeServerAddressArrayToIpString(Const NodeServerAddressArray : TNodeServerAddressArray) : String;
     Constructor Create(AOwner : TComponent); override;
     Destructor Destroy; override;
     Property Bank : TPCBank read FBank;
@@ -83,7 +83,7 @@ Type
     Function AddNewBlockChain(SenderConnection : TNetConnection; NewBlockOperations: TPCOperationsComp; var newBlockAccount: TBlockAccount; var errors: String): Boolean;
     Function AddOperations(SenderConnection : TNetConnection; OperationsHashTree : TOperationsHashTree; OperationsResult : TOperationsResumeList; var errors: String): Integer;
     Function AddOperation(SenderConnection : TNetConnection; Operation : TPCOperation; var errors: String): Boolean;
-    Function SendNodeMessage(Target : TNetConnection; TheMessage : AnsiString; var errors : String) : Boolean;
+    Function SendNodeMessage(Target : TNetConnection; const TheMessage : String; var errors : String) : Boolean;
     //
     Procedure NotifyBlocksChanged;
     //
@@ -97,10 +97,10 @@ Type
     Procedure AutoDiscoverNodes(Const ips : String);
     Function IsBlockChainValid(var WhyNot : String) : Boolean;
     Function IsReady(Var CurrentProcess : String) : Boolean;
-    Property PeerCache : AnsiString read FPeerCache write FPeerCache;
+    Property PeerCache : String read FPeerCache write FPeerCache;
     Procedure DisableNewBlocks;
     Procedure EnableNewBlocks;
-    Property NodeLogFilename : AnsiString read GetNodeLogFilename write SetNodeLogFilename;
+    Property NodeLogFilename : String read GetNodeLogFilename write SetNodeLogFilename;
     Property OperationSequenceLock : TPCCriticalSection read FOperationSequenceLock;
     function TryLockNode(MaxWaitMilliseconds : Cardinal) : Boolean;
     procedure UnlockNode;
@@ -108,7 +108,7 @@ Type
     Property BroadcastData : Boolean read FBroadcastData write FBroadcastData;
     Property UpdateBlockchain : Boolean read FUpdateBlockchain write FUpdateBlockchain;
     procedure MarkVerifiedECDSASignaturesFromMemPool(newOperationsToValidate : TPCOperationsComp);
-    class function NodeVersion : AnsiString;
+    class function NodeVersion : String;
   End;
 
   TNodeNotifyEvents = Class;
@@ -358,7 +358,7 @@ function TNode.AddOperations(SenderConnection : TNetConnection; OperationsHashTr
   Var i,j, nAdded, nDeleted : Integer;
     sAcc : TAccount;
     ActOp : TPCOperation;
-    e : AnsiString;
+    e : String;
   Begin
     // Prior to add new operations, will try to add waiting ones
     nAdded := 0; nDeleted := 0;
@@ -578,11 +578,11 @@ begin
 end;
 
 class procedure TNode.DecodeIpStringToNodeServerAddressArray(
-  const Ips: AnsiString; Var NodeServerAddressArray: TNodeServerAddressArray);
-  Function GetIp(var ips_string : AnsiString; var nsa : TNodeServerAddress) : Boolean;
+  const Ips: String; Var NodeServerAddressArray: TNodeServerAddressArray);
+  Function GetIp(var ips_string : String; var nsa : TNodeServerAddress) : Boolean;
   Const CT_IP_CHARS = ['a'..'z','A'..'Z','0'..'9','.','-','_'];
   var i : Integer;
-    port : AnsiString;
+    port : String;
   begin
     nsa := CT_TNodeServerAddress_NUL;
     Result := false;
@@ -590,28 +590,32 @@ class procedure TNode.DecodeIpStringToNodeServerAddressArray(
       ips_string := '';
       exit;
     end;
-    i := 1;
-    while (i<length(ips_string)) AND (NOT (ips_string[i] IN CT_IP_CHARS)) do inc(i);
-    if (i>1) then ips_string := copy(ips_string,i,length(ips_string));
-    //
-    i := 1;
-    while (i<=length(ips_string)) and (ips_string[i] in CT_IP_CHARS) do inc(i);
-    nsa.ip := copy(ips_string,1,i-1);
-    if (i<=length(ips_string)) and (ips_string[i]=':') then begin
-      inc(i);
-      port := '';
-      while (i<=length(ips_string)) and (ips_string[i] in ['0'..'9']) do begin
-        port := port + ips_string[i];
+    // Delete invalid chars:
+    i := 0;
+    while (i<=High(ips_string)) AND (NOT (ips_string.Chars[i] IN CT_IP_CHARS)) do inc(i);
+    if (i>Low(ips_string)) then ips_string := ips_string.Substring(i,Length(ips_string));
+    // Capture IP value
+    i := 0;
+    while (i<=High(ips_string)) and (ips_string.Chars[i] in CT_IP_CHARS) do inc(i);
+    if (i>0) then begin
+      nsa.ip := ips_string.Substring(0,i);
+      // Capture possible :Port value
+      if (i<=High(ips_string)) and (ips_string.Chars[i]=':') then begin
         inc(i);
+        port := '';
+        while (i<=High(ips_string)) and (ips_string.Chars[i] in ['0'..'9']) do begin
+          port := port + ips_string.Chars[i];
+          inc(i);
+        end;
+        nsa.port := StrToIntDef(port,0);
       end;
-      nsa.port := StrToIntDef(port,0);
     end;
-    ips_string := copy(ips_string,i+1,length(ips_string));
+    ips_string := ips_string.Substring(i+1,Length(ips_string));
     if nsa.port=0 then nsa.port := CT_NetServer_Port;
-    Result := (trim(nsa.ip)<>'');
+    Result := (Trim(nsa.ip)<>'');
   end;
 Var i,j : Integer;
-  ips_string : AnsiString;
+  ips_string : String;
   nsa : TNodeServerAddress;
 begin
   SetLength(NodeServerAddressArray,0);
@@ -621,7 +625,7 @@ begin
       SetLength(NodeServerAddressArray,length(NodeServerAddressArray)+1);
       NodeServerAddressArray[High(NodeServerAddressArray)] := nsa;
     end;
-  until (ips_string='');
+  until (Length(ips_string)=0);
 end;
 
 destructor TNode.Destroy;
@@ -706,8 +710,7 @@ begin
   end;
 end;
 
-class function TNode.EncodeNodeServerAddressArrayToIpString(
-  const NodeServerAddressArray: TNodeServerAddressArray): AnsiString;
+class function TNode.EncodeNodeServerAddressArrayToIpString(const NodeServerAddressArray: TNodeServerAddressArray): String;
 var i : Integer;
 begin
   Result := '';
@@ -720,7 +723,7 @@ begin
   end;
 end;
 
-function TNode.GetNodeLogFilename: AnsiString;
+function TNode.GetNodeLogFilename: String;
 begin
   Result := FNodeLog.FileName;
 end;
@@ -785,7 +788,7 @@ begin
   Result := Assigned(_Node);
 end;
 
-class function TNode.NodeVersion: AnsiString;
+class function TNode.NodeVersion: String;
 begin
   Result := CT_ClientAppVersion{$IFDEF LINUX}+'L'{$ELSE}+'W'{$ENDIF}{$IFDEF FPC}{$IFDEF LCL}+'l'{$ELSE}+'f'{$ENDIF}{$ENDIF}{$IFDEF FPC}{$IFDEF CPU32}+'32b'{$ELSE}+'64b'{$ENDIF}{$ELSE}{$IFDEF CPU32BITS}+'32b'{$ELSE}+'64b'{$ENDIF}{$ENDIF};
 end;
@@ -1136,7 +1139,6 @@ end;
 
 procedure TNode.NotifyNetClientMessage(Sender: TNetConnection; const TheMessage: String);
 Var i : Integer;
-  s : AnsiString;
 begin
   for i := 0 to FNotifyList.Count-1 do begin
     if Assigned( TNodeNotifyEvents( FNotifyList[i] ).OnNodeMessageEvent) then begin
@@ -1151,7 +1153,7 @@ begin
   NotifyBlocksChanged;
 end;
 
-function TNode.SendNodeMessage(Target: TNetConnection; TheMessage: AnsiString; var errors: String): Boolean;
+function TNode.SendNodeMessage(Target: TNetConnection; const TheMessage: String; var errors: String): Boolean;
 Var i,j : Integer;
   nc : TNetConnection;
   s : String;
@@ -1186,7 +1188,7 @@ begin
   end;
 end;
 
-procedure TNode.SetNodeLogFilename(const Value: AnsiString);
+procedure TNode.SetNodeLogFilename(const Value: String);
 begin
   FNodeLog.FileName := Value;
 end;

+ 9 - 9
src/core/UTCPIP.pas

@@ -53,7 +53,7 @@ type
     FTcpBlockSocket : TTCPBlockSocket;
     {$IFDEF Synapse}
     FConnected : Boolean;
-    FRemoteHost : AnsiString;
+    FRemoteHost : String;
     FRemotePort : Word;
     FBytesReceived, FBytesSent : Int64;
     FLock : TPCCriticalSection;
@@ -64,9 +64,9 @@ type
     FSocketError: Integer;
     FLastCommunicationTime : TDateTime;
     function GetConnected: Boolean;
-    function GetRemoteHost: AnsiString;
+    function GetRemoteHost: String;
     function GetRemotePort: Word;
-    procedure SetRemoteHost(const Value: AnsiString);
+    procedure SetRemoteHost(const Value: String);
     procedure SetRemotePort(const Value: Word);
     procedure SetOnConnect(const Value: TNotifyEvent);
     procedure SetOnDisconnect(const Value: TNotifyEvent);
@@ -82,8 +82,8 @@ type
   public
     Constructor Create(AOwner : TComponent); override;
     Destructor Destroy; override;
-    Function ClientRemoteAddr : AnsiString;
-    Property RemoteHost : AnsiString read GetRemoteHost Write SetRemoteHost;
+    Function ClientRemoteAddr : String;
+    Property RemoteHost : String read GetRemoteHost Write SetRemoteHost;
     Property RemotePort : Word read GetRemotePort write SetRemotePort;
     Property Connected : Boolean read GetConnected;
     Procedure Disconnect;
@@ -226,7 +226,7 @@ begin
   {$ENDIF}
 end;
 
-function TNetTcpIpClient.ClientRemoteAddr: AnsiString;
+function TNetTcpIpClient.ClientRemoteAddr: String;
 begin
   If Assigned(FTcpBlockSocket) then begin
     {$IFDEF DelphiSockets}
@@ -311,7 +311,7 @@ begin
 end;
 
 procedure TNetTcpIpClient.Disconnect;
-Var DebugStep : AnsiString;
+Var DebugStep : String;
 begin
   {$IFDEF DelphiSockets}
   FTcpBlockSocket.Disconnect;
@@ -386,7 +386,7 @@ begin
   {$ENDIF}
 end;
 
-function TNetTcpIpClient.GetRemoteHost: AnsiString;
+function TNetTcpIpClient.GetRemoteHost: String;
 begin
   {$IFDEF DelphiSockets}
   Result := FTcpBlockSocket.RemoteHost;
@@ -497,7 +497,7 @@ begin
   {$ENDIF}
 end;
 
-procedure TNetTcpIpClient.SetRemoteHost(const Value: AnsiString);
+procedure TNetTcpIpClient.SetRemoteHost(const Value: String);
 begin
   {$IFDEF DelphiSockets}
   FTcpBlockSocket.RemoteHost := Value;