1 #include <u.h> 2 #include <libc.h> 3 #include <ip.h> 4 #include <thread.h> 5 #include "netbios.h" 6 7 NbnsMessage * 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 * 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