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