hosts file support in the built in dns resolver
[lcore.git] / dnssync.pas
index 84caf9a65e51e103336f484adc9dc0beb2a1b84d..c2b74569366ed4dd9c60eb5f9df250b62b4fb986 100644 (file)
@@ -46,6 +46,8 @@ function forwardlookuplist(name:ansistring;timeout:integer):tbiniplist;
 //details as above\r
 function reverselookup(ip:tbinip;timeout:integer):ansistring;\r
 \r
 //details as above\r
 function reverselookup(ip:tbinip;timeout:integer):ansistring;\r
 \r
+//function that the app can use to know whether the builtin or system resolver is being used\r
+function willusebuiltindns_sync:boolean;\r
 \r
 \r
 const\r
 \r
 \r
 const\r
@@ -73,6 +75,24 @@ implementation
 \r
 type tdnsstatearr=array[0..numsock-1] of tdnsstate;\r
 \r
 \r
 type tdnsstatearr=array[0..numsock-1] of tdnsstate;\r
 \r
+\r
+function willusebuiltindns_sync:boolean;\r
+begin\r
+  result := false;\r
+  {$ifdef mswindows}\r
+  if usewindns and (overridednsserver = '') and not (hostsfile_disabled or hostsfile_onlylocalhost) then begin\r
+    //\r
+  end else\r
+  {$endif}\r
+  begin\r
+    {$ifdef syncdnscore}\r
+    result := true;\r
+    {$endif}\r
+  end;\r
+end;\r
+\r
+\r
+\r
 {$ifdef syncdnscore}\r
 \r
 \r
 {$ifdef syncdnscore}\r
 \r
 \r
@@ -328,7 +348,7 @@ begin
   end;\r
 \r
   {$ifdef mswindows}\r
   end;\r
 \r
   {$ifdef mswindows}\r
-  if usewindns then begin\r
+  if usewindns and (overridednsserver = '') and not (hostsfile_disabled or hostsfile_onlylocalhost) then begin\r
     if (useaf = useaf_v4) then a := af_inet else if (useaf = useaf_v6) then a := af_inet6 else a := 0;\r
     result := winforwardlookuplist(name,a,dummy);\r
     {$ifdef ipv6}\r
     if (useaf = useaf_v4) then a := af_inet else if (useaf = useaf_v6) then a := af_inet6 else a := 0;\r
     result := winforwardlookuplist(name,a,dummy);\r
     {$ifdef ipv6}\r
@@ -353,6 +373,15 @@ begin
   {$ifdef syncdnscore}\r
     {$ifdef ipv6}initpreferredmode;{$endif}\r
 \r
   {$ifdef syncdnscore}\r
     {$ifdef ipv6}initpreferredmode;{$endif}\r
 \r
+    if ((overridednsserver = '') or hostsfile_alsocustomserver) and (not hostsfile_disabled) then begin\r
+      //try a hosts file lookup\r
+      l := hostsfile_forwardlookuplist(name);\r
+      if (biniplist_getcount(l) > 0) then begin\r
+        result := l;\r
+        exit;\r
+      end;\r
+    end;\r
+\r
     numsockused := 0;\r
 \r
     result := biniplist_new;\r
     numsockused := 0;\r
 \r
     result := biniplist_new;\r
@@ -380,7 +409,9 @@ begin
       biniplist_addlist(result,state[1].resultlist);\r
     {$endif}\r
     end;\r
       biniplist_addlist(result,state[1].resultlist);\r
     {$endif}\r
     end;\r
-    {$endif}\r
+  {$else}\r
+    result := biniplist_new;\r
+  {$endif}\r
   end;\r
 end;\r
 \r
   end;\r
 end;\r
 \r
@@ -399,16 +430,25 @@ var
   state:tdnsstatearr;\r
 begin\r
   {$ifdef mswindows}\r
   state:tdnsstatearr;\r
 begin\r
   {$ifdef mswindows}\r
-    if usewindns then begin\r
+    if usewindns and (overridednsserver = '') and not (hostsfile_disabled or hostsfile_onlylocalhost) then begin\r
       result := winreverselookup(ip,dummy);\r
       exit;\r
     end;\r
   {$endif}\r
   {$ifdef syncdnscore}\r
       result := winreverselookup(ip,dummy);\r
       exit;\r
     end;\r
   {$endif}\r
   {$ifdef syncdnscore}\r
+\r
+  if ((overridednsserver = '') or hostsfile_alsocustomserver) and (not hostsfile_disabled) then begin\r
+    //try a hosts file lookup\r
+    result := hostsfile_reverselookup(ip);\r
+    if (result <> '') then exit;\r
+  end;\r
+\r
   setstate_reverse(ip,state[0]);\r
   numsockused := 1;\r
   resolveloop(timeout,state,numsockused);\r
   result := state[0].resultstr;\r
   setstate_reverse(ip,state[0]);\r
   numsockused := 1;\r
   resolveloop(timeout,state,numsockused);\r
   result := state[0].resultstr;\r
+  {$else}\r
+  result := '';\r
   {$endif}\r
 end;\r
 \r
   {$endif}\r
 end;\r
 \r