xref: /plan9/sys/src/cmd/aquarela/nbresolve.c (revision ea58ad6fbee60d5a3fca57ac646881779dd8f0ea)
18ccd4a63SDavid du Colombier #include "headers.h"
28ccd4a63SDavid du Colombier #include <bio.h>
38ccd4a63SDavid du Colombier #include <ndb.h>
48ccd4a63SDavid du Colombier 
58ccd4a63SDavid du Colombier int
nbnameresolve(NbName nbname,uchar * ipaddr)68ccd4a63SDavid du Colombier nbnameresolve(NbName nbname, uchar *ipaddr)
78ccd4a63SDavid du Colombier {
8*ea58ad6fSDavid du Colombier 	ulong r, ttl;
98ccd4a63SDavid du Colombier 	char name[NETPATHLEN];
10*ea58ad6fSDavid du Colombier 	NbName copy;
11*ea58ad6fSDavid du Colombier 	Ndbtuple *t;
12*ea58ad6fSDavid du Colombier 
13*ea58ad6fSDavid du Colombier 	/* for now, just use dns */
148ccd4a63SDavid du Colombier 	if (nbremotenametablefind(nbname, ipaddr)) {
158ccd4a63SDavid du Colombier //print("%B found in cache\n", nbname);
168ccd4a63SDavid du Colombier 		return 1;
178ccd4a63SDavid du Colombier 	}
188ccd4a63SDavid du Colombier 	if (nbnsfindname(nil, nbname, ipaddr, &ttl) == 0) {
198ccd4a63SDavid du Colombier 		nbremotenametableadd(nbname, ipaddr, ttl);
208ccd4a63SDavid du Colombier 		return 1;
218ccd4a63SDavid du Colombier 	}
228ccd4a63SDavid du Colombier 	nbnamecpy(copy, nbname);
238ccd4a63SDavid du Colombier 	copy[NbNameLen - 1] = 0;
248ccd4a63SDavid du Colombier 	nbmkstringfromname(name, sizeof(name), copy);
258ccd4a63SDavid du Colombier 	t = dnsquery("/net", name, "ip");
268ccd4a63SDavid du Colombier 	if (t == nil)
278ccd4a63SDavid du Colombier 		return 0;
28*ea58ad6fSDavid du Colombier 	r = parseip(ipaddr, t->line->val);
298ccd4a63SDavid du Colombier 	ndbfree(t);
30*ea58ad6fSDavid du Colombier 	return r != -1;
318ccd4a63SDavid du Colombier }
32