example2.c 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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, netbios_ns_entry *entry)
  18. {
  19. print_entry("added", p_opaque, entry);
  20. }
  21. static void on_entry_removed(void *p_opaque, netbios_ns_entry *entry)
  22. {
  23. print_entry("removed", p_opaque, entry);
  24. }
  25. int main()
  26. {
  27. netbios_ns *ns;
  28. netbios_ns_discover_callbacks callbacks;
  29. ns = netbios_ns_new();
  30. callbacks.p_opaque = (void*)0x42;
  31. callbacks.pf_on_entry_added = on_entry_added;
  32. callbacks.pf_on_entry_removed = on_entry_removed;
  33. printf("Discovering...\nPress Enter to quit\n");
  34. if (!netbios_ns_discover_start(ns,
  35. 4, // broadcast every 4 seconds
  36. &callbacks))
  37. {
  38. fprintf(stderr, "Error while discovering local network\n");
  39. exit(42);
  40. }
  41. getchar();
  42. netbios_ns_discover_stop(ns);
  43. return (0);
  44. }