| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- #include "mysdr.h"
- void
- loop(int sockfd, socklen_t salen)
- {
- socklen_t len;
- ssize_t n;
- char *p;
- struct sockaddr *sa;
- struct sap_packet {
- uint32_t sap_header;
- uint32_t sap_src;
- char sap_data[BUFFSIZE];
- } buf;
- sa = Malloc(salen);
- for ( ; ; ) {
- len = salen;
- n = Recvfrom(sockfd, &buf, sizeof(buf) - 1, 0, sa, &len);
- ((char *)&buf)[n] = 0; /* null terminate */
- buf.sap_header = ntohl(buf.sap_header);
- printf("From %s hash 0x%04x\n", Sock_ntop(sa, len),
- buf.sap_header & SAP_HASH_MASK);
- if (((buf.sap_header & SAP_VERSION_MASK) >> SAP_VERSION_SHIFT) > 1) {
- err_msg("... version field not 1 (0x%08x)", buf.sap_header);
- continue;
- }
- if (buf.sap_header & SAP_IPV6) {
- err_msg("... IPv6");
- continue;
- }
- if (buf.sap_header & (SAP_DELETE|SAP_ENCRYPTED|SAP_COMPRESSED)) {
- err_msg("... can't parse this packet type (0x%08x)", buf.sap_header);
- continue;
- }
- p = buf.sap_data + ((buf.sap_header & SAP_AUTHLEN_MASK)
- >> SAP_AUTHLEN_SHIFT);
- if (strcmp(p, "application/sdp") == 0)
- p += 16;
- printf("%s\n", p);
- }
- }
|