Browse Source

+ adds ipv6 resolve functions (thanks to Montaro)
* cleans up some uglies

git-svn-id: trunk@5549 -

Almindor 18 years ago
parent
commit
501f66e0ca
1 changed files with 75 additions and 18 deletions
  1. 75 18
      packages/base/netdb/netdb.pp

+ 75 - 18
packages/base/netdb/netdb.pp

@@ -62,9 +62,17 @@ Type
     Name : String;
     Name : String;
     Addr : THostAddr;
     Addr : THostAddr;
     Aliases : String;
     Aliases : String;
-  end;  
+  end;
   PHostEntry = ^THostEntry;
   PHostEntry = ^THostEntry;
   THostEntryArray = Array of THostEntry;
   THostEntryArray = Array of THostEntry;
+
+  THostEntry6 = record
+    Name : String;
+    Addr : THostAddr6;
+    Aliases : String;
+  end;
+  PHostEntry6 = ^THostEntry6;
+  THostEntry6Array = Array of THostEntry6;
   
   
   TNetworkEntry = Record
   TNetworkEntry = Record
     Name : String;
     Name : String;
@@ -109,6 +117,9 @@ function IN6_IS_ADDR_V4MAPPED(HostAddr: THostAddr6): boolean;
 Function ResolveHostByName(HostName : String; Var H : THostEntry) : Boolean;
 Function ResolveHostByName(HostName : String; Var H : THostEntry) : Boolean;
 Function ResolveHostByAddr(HostAddr : THostAddr; Var H : THostEntry) : Boolean;
 Function ResolveHostByAddr(HostAddr : THostAddr; Var H : THostEntry) : Boolean;
 
 
+Function ResolveHostByName6(Hostname : String; Var H : THostEntry6) : Boolean;
+Function ResolveHostByAddr6(HostAddr : THostAddr6; Var H : THostEntry6) : Boolean;
+
 Function GetHostByName(HostName: String;  Var H : THostEntry) : boolean;
 Function GetHostByName(HostName: String;  Var H : THostEntry) : boolean;
 Function GetHostByAddr(Addr: THostAddr;  Var H : THostEntry) : boolean;
 Function GetHostByAddr(Addr: THostAddr;  Var H : THostEntry) : boolean;
 
 
@@ -248,7 +259,7 @@ Function GetAddr(Var L : String; Var Addr : THostAddr) : Boolean;
 
 
 Var
 Var
   S : String;
   S : String;
-  i,p,a : Integer;
+//  i,p,a : Integer;
   
   
 begin
 begin
   Result:=True;
   Result:=True;
@@ -265,17 +276,20 @@ Var
   H : String;
   H : String;
 
 
 begin
 begin
+  Result := False;
   Repeat
   Repeat
   H:=NextWord(L);
   H:=NextWord(L);
-  If (H<>'') then
-    if (Entry.Name='') then
-      Entry.Name:=H
-    else  
-      begin
-      If (Entry.Aliases<>'') then
-        Entry.Aliases:=Entry.Aliases+',';
-      Entry.Aliases:=Entry.Aliases+H;
-      end;
+    If (H<>'') then begin
+      if (Entry.Name='') then
+        Entry.Name:=H
+      else  
+        begin
+        If (Entry.Aliases<>'') then
+          Entry.Aliases:=Entry.Aliases+',';
+        Entry.Aliases:=Entry.Aliases+H;
+        end;
+      Result := True;
+    end;
   until (H='');
   until (H='');
 end;
 end;
 
 
@@ -321,7 +335,7 @@ end;
 Var
 Var
   HostsList : PHostListEntry = Nil;  
   HostsList : PHostListEntry = Nil;  
   HostsFileAge  : Longint;
   HostsFileAge  : Longint;
-  HostsFileName : String;
+//  HostsFileName : String;
 
 
 Function FreeHostsList(var List : PHostListEntry) : Integer;
 Function FreeHostsList(var List : PHostListEntry) : Integer;
 
 
@@ -391,7 +405,7 @@ end;
 Function FindHostEntryInHostsFile(N: String; Addr: THostAddr; Var H : THostEntry) : boolean;
 Function FindHostEntryInHostsFile(N: String; Addr: THostAddr; Var H : THostEntry) : boolean;
 
 
 Var
 Var
-  F : Text;
+//  F : Text;
   HE : THostEntry;
   HE : THostEntry;
   P : PHostListEntry;
   P : PHostListEntry;
   
   
@@ -429,7 +443,7 @@ Function GetDNSServers(Fn : String) : Integer;
 Var
 Var
   R : Text;
   R : Text;
   L : String;
   L : String;
-  I : Integer;
+//  I : Integer;
   H : THostAddr;
   H : THostAddr;
   E : THostEntry;
   E : THostEntry;
   
   
@@ -1004,7 +1018,6 @@ begin
    (HostAddr.u6_addr16[5] = $FFFF);
    (HostAddr.u6_addr16[5] = $FFFF);
 end;
 end;
 
 
-
 Function ResolveHostByName(HostName : String; Var H : THostEntry) : Boolean;
 Function ResolveHostByName(HostName : String; Var H : THostEntry) : Boolean;
 
 
 Var
 Var
@@ -1023,6 +1036,25 @@ begin
     end;
     end;
 end;
 end;
 
 
+Function ResolveHostByName6(HostName : String; Var H : THostEntry6) : Boolean;
+
+Var
+  Address : Array[1..MaxResolveAddr] of THostAddr6;
+  L : Integer;
+  
+begin
+  L:=ResolveName6(HostName,Address);
+  Result:=(L>0);
+  If Result then
+    begin
+    // We could add a reverse call here to get the real name and aliases.
+    H.Name:=HostName;
+    H.Addr:=Address[1];
+    H.aliases:='';
+    end;
+end;
+
+
 Function ResolveHostByAddr(HostAddr : THostAddr; Var H : THostEntry) : Boolean;
 Function ResolveHostByAddr(HostAddr : THostAddr; Var H : THostEntry) : Boolean;
 
 
 Var
 Var
@@ -1046,6 +1078,31 @@ begin
     end;
     end;
 end;
 end;
 
 
+Function ResolveHostByAddr6(HostAddr : THostAddr6; Var H : THostEntry6) : Boolean;
+
+Var
+  Names : Array[1..MaxResolveAddr] of String;
+  I,L : Integer;
+  
+begin
+  L:=ResolveAddress6(HostAddr,Names);
+  Result:=(L>0);
+  If Result then
+    begin
+    H.Name:=Names[1];
+    H.Addr:=HostAddr;
+    H.Aliases:='';
+    If (L>1) then
+      For I:=2 to L do
+        If (I=2) then
+          H.Aliases:=Names[i]
+        else  
+          H.Aliases:=H.Aliases+','+Names[i];
+    end;
+end;
+
+
+
 
 
 //const NoAddress : in_addr = (s_addr: 0);
 //const NoAddress : in_addr = (s_addr: 0);
 
 
@@ -1158,7 +1215,7 @@ function StrTonetpartial( IP : AnsiString) : in_addr ;
 Var
 Var
     Dummy : AnsiString;
     Dummy : AnsiString;
     I,j,k     : Longint;
     I,j,k     : Longint;
-    Temp : in_addr;
+//    Temp : in_addr;
 
 
 begin
 begin
   strtonetpartial.s_addr:=0;              //:=NoAddress;
   strtonetpartial.s_addr:=0;              //:=NoAddress;
@@ -1352,8 +1409,8 @@ end;
 
 
 Procedure InitResolver;
 Procedure InitResolver;
 
 
-Var
-  I : Integer;
+//Var
+//  I : Integer;
 
 
 begin
 begin
   TimeOutS :=5;
   TimeOutS :=5;