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