network_interface.c 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <unistd.h> // sleep
  5. #include "lssdp.h"
  6. /* network_interface.c
  7. *
  8. * 1. call lssdp_network_interface_update per second
  9. * 2. when network interface is changed, show interface list
  10. */
  11. void log_callback(const char * file, const char * tag, int level, int line, const char * func, const char * message) {
  12. char * level_name = "DEBUG";
  13. if (level == LSSDP_LOG_INFO) level_name = "INFO";
  14. if (level == LSSDP_LOG_WARN) level_name = "WARN";
  15. if (level == LSSDP_LOG_ERROR) level_name = "ERROR";
  16. printf("[%-5s][%s] %s", level_name, tag, message);
  17. }
  18. int show_interface_list(lssdp_ctx * lssdp) {
  19. printf("\nNetwork Interface List (%zu):\n", lssdp->interface_num);
  20. size_t i;
  21. for (i = 0; i < lssdp->interface_num; i++) {
  22. printf("%zu. %-6s: %-15s (%d.%d.%d.%d)\n",
  23. i + 1,
  24. lssdp->interface[i].name,
  25. lssdp->interface[i].ip,
  26. (lssdp->interface[i].netmask >> 0) & 0xff,
  27. (lssdp->interface[i].netmask >> 8) & 0xff,
  28. (lssdp->interface[i].netmask >> 16) & 0xff,
  29. (lssdp->interface[i].netmask >> 24) & 0xff
  30. );
  31. }
  32. printf("%s\n", i == 0 ? "Empty" : "");
  33. return 0;
  34. }
  35. int main() {
  36. lssdp_set_log_callback(log_callback);
  37. lssdp_ctx lssdp = {
  38. .network_interface_changed_callback = show_interface_list
  39. };
  40. // Main Loop
  41. for (;; sleep(1)) {
  42. puts(".");
  43. lssdp_network_interface_update(&lssdp);
  44. }
  45. return EXIT_SUCCESS;
  46. }