//release should only be called from the main thread\r
tdnswinasync=class(tthread)\r
private\r
- ipv6preffered : boolean;\r
freverse : boolean;\r
error : integer;\r
freewhendone : boolean;\r
public\r
onrequestdone:tsocketevent;\r
name : string;\r
- ip : tbinip;\r
+ iplist : tbiniplist;\r
\r
- procedure forwardlookup(name:string;ipv6preffered:boolean);\r
+ procedure forwardlookup(name:string);\r
procedure reverselookup(ip:tbinip);\r
destructor destroy; override;\r
procedure release;\r
getnameinforesult : integer;\r
begin\r
\r
- if ip.family = AF_INET then begin\r
- sa.InAddr.family := AF_INET;\r
- sa.InAddr.port := 1;\r
- sa.InAddr.addr := ip.ip;\r
- end else {$ifdef ipv6}if ip.family = AF_INET6 then begin\r
- sa.InAddr6.sin6_family := AF_INET6;\r
- sa.InAddr6.sin6_port := 1;\r
- sa.InAddr6.sin6_addr := ip.ip6;\r
- end else{$endif} begin\r
- raise exception.create('unrecognised address family');\r
- end;\r
+ makeinaddrv(ip,'1',sa);\r
populateprocvars;\r
setlength(result,1025);\r
getnameinforesult := getnameinfo(@sa,sizeof(tinetsockaddrv),pchar(result),length(result),nil,0,0);\r
end;\r
end;\r
\r
-procedure tdnswinasync.forwardlookup(name:string;ipv6preffered:boolean);\r
+procedure tdnswinasync.forwardlookup(name:string);\r
begin\r
self.name := name;\r
- self.ipv6preffered := ipv6preffered;\r
freverse := false;\r
resume;\r
end;\r
procedure tdnswinasync.reverselookup(ip:tbinip);\r
begin\r
- self.ip := ip;\r
+ iplist := biniplist_new;\r
+ biniplist_add(iplist,ip);\r
freverse := true;\r
resume;\r
end;\r
procedure tdnswinasync.execute;\r
var\r
error : integer;\r
- l:tbiniplist;\r
+\r
begin\r
error := 0;\r
if reverse then begin\r
- name := winreverselookup(ip,error);\r
+ name := winreverselookup(biniplist_get(iplist,0),error);\r
end else begin\r
- l := winforwardlookuplist(name,0,error);\r
- ip := biniplist_get(l,0);\r
+ iplist := winforwardlookuplist(name,0,error);\r
+\r
end;\r
postmessage(hwnddnswin,wm_user,error,taddrint(self));\r
end;\r