xref: /plan9/sys/src/cmd/aquarela/message.c (revision 8ccd4a6360d974db7bd7bbd4f37e7018419ea908)
1 #include <u.h>
2 #include <libc.h>
3 #include <ip.h>
4 #include <thread.h>
5 #include "netbios.h"
6 
7 NbnsMessage *
nbnsmessagenamequeryrequestnew(ushort id,int broadcast,NbName name)8 nbnsmessagenamequeryrequestnew(ushort id, int broadcast, NbName name)
9 {
10 	NbnsMessage *s;
11 	NbnsMessageQuestion *q;
12 	s = nbnsmessagenew();
13 	if (s == nil)
14 		return nil;
15 	s->id = id;
16 	s->opcode = NbnsOpQuery;
17 	s->broadcast = broadcast;
18 	s->recursiondesired = 1;
19 	q =  nbnsmessagequestionnew(name, NbnsQuestionTypeNb, NbnsQuestionClassIn);
20 	if (q == nil) {
21 		nbnsmessagefree(&s);
22 		return nil;
23 	}
24 	nbnsmessageaddquestion(s, q);
25 	return s;
26 }
27 
28 NbnsMessage *
nbnsmessagenameregistrationrequestnew(ushort id,int broadcast,NbName name,ulong ttl,uchar * ipaddr)29 nbnsmessagenameregistrationrequestnew(ushort id, int broadcast, NbName name, ulong ttl, uchar *ipaddr)
30 {
31 	NbnsMessage *s;
32 	NbnsMessageQuestion *q;
33 	uchar rdata[6];
34 	NbnsMessageResource *r;
35 
36 	s = nbnsmessagenew();
37 	if (s == nil)
38 		return nil;
39 	s->id = id;
40 	s->opcode = NbnsOpRegistration;
41 	s->broadcast = broadcast;
42 	s->recursiondesired = 1;
43 	q =  nbnsmessagequestionnew(name, NbnsQuestionTypeNb, NbnsQuestionClassIn);
44 	if (q == nil) {
45 		nbnsmessagefree(&s);
46 		return nil;
47 	}
48 	nbnsmessageaddquestion(s, q);
49 	rdata[0] = 0;
50 	rdata[1] = 0;
51 	v6tov4(rdata + 2, ipaddr);
52 	r = nbnsmessageresourcenew(name, NbnsResourceTypeNb, NbnsResourceClassIn, ttl, 6, rdata);
53 	nbnsmessageaddresource(&s->ar, r);
54 	return s;
55 }
56