message.c 1.2 KB

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