example2.c 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. /* Netbios Discover */
  2. #include <stdio.h>
  3. #include <bsdm/bdsm.h>
  4. static void print_entry(const char *what, void *p_opaque,
  5. netbios_ns_entry *entry)
  6. {
  7. struct in_addr addr;
  8. addr.s_addr = netbios_ns_entry_ip(entry);
  9. printf("%s(%p): Ip: %s, name: %s/%s<%x>\n",
  10. what,
  11. p_opaque,
  12. inet_ntoa(addr),
  13. netbios_ns_entry_group(entry),
  14. netbios_ns_entry_name(entry),
  15. netbios_ns_entry_type(entry));
  16. }
  17. static void on_entry_added(void *p_opaque,
  18. netbios_ns_entry *entry)
  19. {
  20. print_entry("added", p_opaque, entry);
  21. }
  22. static void on_entry_removed(void *p_opaque,
  23. netbios_ns_entry *entry)
  24. {
  25. print_entry("removed", p_opaque, entry);
  26. }
  27. int main()
  28. {
  29. netbios_ns *ns;
  30. netbios_ns_discover_callbacks callbacks;
  31. ns = netbios_ns_new();
  32. callbacks.p_opaque = (void*)0x42;
  33. callbacks.pf_on_entry_added = on_entry_added;
  34. callbacks.pf_on_entry_removed = on_entry_removed;
  35. printf("Discovering...\nPress Enter to quit\n");
  36. if (!netbios_ns_discover_start(ns,
  37. 4, // broadcast every 4 sec
  38. &callbacks))
  39. {
  40. fprintf(stderr, "Error while discovering local network\n");
  41. exit(42);
  42. }
  43. getchar();
  44. netbios_ns_discover_stop(ns);
  45. return (0);
  46. }