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