added lcorelocalips: code to get local v4 and v6 IPs in a central place
[lcore.git] / dnscore.pas
index 7cbb82831303a538d6dca7b1fad38161c288884e..18e40c9f8c9ea8067ae55b48c23f133fea36caec 100644 (file)
@@ -204,7 +204,6 @@ procedure reportlag(id:integer;lag:integer); //lag should be in microseconds and
 \r
 \r
 {$ifdef ipv6}\r
-function getv6localips:tbiniplist;\r
 procedure initpreferredmode;\r
 \r
 var\r
@@ -221,9 +220,9 @@ implementation
 \r
 uses\r
   {$ifdef win32}\r
-    windows,winsock,\r
+    windows,\r
   {$endif}\r
-\r
+  lcorelocalips,\r
   sysutils;\r
 \r
 \r
@@ -750,68 +749,8 @@ begin
 end;\r
 \r
 \r
-\r
 {$ifdef ipv6}\r
 \r
-{$ifdef linux}\r
-function getv6localips:tbiniplist;\r
-var\r
-  t:textfile;\r
-  s,s2:ansistring;\r
-  ip:tbinip;\r
-  a:integer;\r
-begin\r
-  result := biniplist_new;\r
-\r
-  assignfile(t,'/proc/net/if_inet6');\r
-  {$i-}reset(t);{$i+}\r
-  if ioresult <> 0 then exit; {none found, return empty list}\r
-\r
-  while not eof(t) do begin\r
-    readln(t,s);\r
-    s2 := '';\r
-    for a := 0 to 7 do begin\r
-      if (s2 <> '') then s2 := s2 + ':';\r
-      s2 := s2 + copy(s,(a shl 2)+1,4);\r
-    end;\r
-    ipstrtobin(s2,ip);\r
-    if ip.family <> 0 then biniplist_add(result,ip);\r
-  end;\r
-  closefile(t);\r
-end;\r
-\r
-{$else}\r
-\r
-{the following code's purpose is to determine what IP windows would come from, to reach an IP\r
-it can be abused to find if there's any global v6 IPs, getaddrinfo seems unreliable (not working on XP atleast)\r
-}\r
-const\r
-  SIO_ROUTING_INTERFACE_QUERY = $c8000014;\r
-  function WSAIoctl(s: TSocket; code:integer; const Buf; len: Integer; var output; outlen:integer; var outreturned: Integer; overlapped:pointer; completion: pointer): Integer; stdcall; external 'ws2_32.dll' name 'WSAIoctl';\r
-\r
-function getlocalipforip(const ip:tbinip):tbinip;\r
-var\r
-  handle:integer;\r
-  a,b:integer;\r
-  inaddrv,inaddrv2:tinetsockaddrv;\r
-  srcx:winsock.tsockaddr absolute inaddrv2;\r
-begin\r
-  makeinaddrv(ip,'0',inaddrv);\r
-  handle := Socket(inaddrv.inaddr.family,SOCK_DGRAM,IPPROTO_UDP);\r
-  if WSAIoctl(handle, SIO_ROUTING_INTERFACE_QUERY, inaddrv, sizeof(inaddrv), inaddrv2, sizeof(inaddrv2), a, nil, nil) <> 0\r
-  then raise exception.create('getlocalipforip failed with error: '+inttostr(wsagetlasterror));\r
-  result := inaddrvtobinip(inaddrv2);\r
-  closesocket(handle);\r
-end;\r
-\r
-function getv6localips:tbiniplist;\r
-begin\r
-  result := biniplist_new;\r
-  {this IP is chosen because it's the first normal global v6 IP that has no special purpose}\r
-  biniplist_add(result,getlocalipforip(ipstrtobinf('2001:200::')));\r
-end;\r
-{$endif}\r
-\r
 procedure initpreferredmode;\r
 var\r
   l:tbiniplist;\r