loop.c 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. #include "mysdr.h"
  2. void
  3. loop(int sockfd, socklen_t salen)
  4. {
  5. socklen_t len;
  6. ssize_t n;
  7. char *p;
  8. struct sockaddr *sa;
  9. struct sap_packet {
  10. uint32_t sap_header;
  11. uint32_t sap_src;
  12. char sap_data[BUFFSIZE];
  13. } buf;
  14. sa = Malloc(salen);
  15. for ( ; ; ) {
  16. len = salen;
  17. n = Recvfrom(sockfd, &buf, sizeof(buf) - 1, 0, sa, &len);
  18. ((char *)&buf)[n] = 0; /* null terminate */
  19. buf.sap_header = ntohl(buf.sap_header);
  20. printf("From %s hash 0x%04x\n", Sock_ntop(sa, len),
  21. buf.sap_header & SAP_HASH_MASK);
  22. if (((buf.sap_header & SAP_VERSION_MASK) >> SAP_VERSION_SHIFT) > 1) {
  23. err_msg("... version field not 1 (0x%08x)", buf.sap_header);
  24. continue;
  25. }
  26. if (buf.sap_header & SAP_IPV6) {
  27. err_msg("... IPv6");
  28. continue;
  29. }
  30. if (buf.sap_header & (SAP_DELETE|SAP_ENCRYPTED|SAP_COMPRESSED)) {
  31. err_msg("... can't parse this packet type (0x%08x)", buf.sap_header);
  32. continue;
  33. }
  34. p = buf.sap_data + ((buf.sap_header & SAP_AUTHLEN_MASK)
  35. >> SAP_AUTHLEN_SHIFT);
  36. if (strcmp(p, "application/sdp") == 0)
  37. p += 16;
  38. printf("%s\n", p);
  39. }
  40. }