]> git.zerfleddert.de Git - record-dvb/blobdiff - sap.c
fix in6_addr problems
[record-dvb] / sap.c
diff --git a/sap.c b/sap.c
index 85ec2c321654fc88db9aca0f2fca42ebbf168a4f..da1d95948d3285e94fc533cdf03b5933eb363140 100644 (file)
--- a/sap.c
+++ b/sap.c
@@ -31,7 +31,7 @@ struct sdp_info {
 
 struct sdp_info *parse_sdp(char *sdp, int len)
 {
-       char *pos;
+       char *pos, *line;
        static struct sdp_info sdpinfo;
 
        /* RFC 2327
@@ -47,7 +47,7 @@ struct sdp_info *parse_sdp(char *sdp, int len)
 
        bzero(&sdpinfo, sizeof(struct sdp_info));
 
-       pos = sdp;
+       pos = line = sdp;
        while(*pos != 0 && (pos-sdp) < len) {
                if (*pos == 0x0d)
                        *pos = 0;
@@ -55,55 +55,55 @@ struct sdp_info *parse_sdp(char *sdp, int len)
                if (*pos == 0x0a) {
                        *pos = 0;
 
-                       if (!strncasecmp("s=", sdp, 2)) {
-                               sdpinfo.service = sdp + 2;
-                       } else if (!strncasecmp("c=", sdp, 2)) {
+                       if (!strncasecmp("s=", line, 2)) {
+                               sdpinfo.service = line + 2;
+                       } else if (!strncasecmp("c=", line, 2)) {
                                int poscnt = 0;
 
-                               sdp += 2;
-                               while (*sdp != 0) {
-                                       if (poscnt == 2 && *sdp == '/') {
-                                               *sdp = 0;
+                               line += 2;
+                               while (*line != 0) {
+                                       if (poscnt == 2 && *line == '/') {
+                                               *line = 0;
                                                break;
                                        }
 
-                                       if (*sdp == ' ') {
-                                               *sdp = 0;
+                                       if (*line == ' ') {
+                                               *line = 0;
                                                poscnt++;
 
                                                /* c=<network type> <address type> <connection address> */
                                                if (poscnt == 2)
-                                                       sdpinfo.host = sdp + 1;
+                                                       sdpinfo.host = line + 1;
 
                                                if (poscnt > 2)
                                                        break;
                                        }
-                                       sdp++;
+                                       line++;
                                }
-                       } else if (!strncasecmp("m=", sdp, 2)) {
+                       } else if (!strncasecmp("m=", line, 2)) {
                                int poscnt = 0;
 
-                               sdp += 2;
-                               while (*sdp != 0) {
-                                       if (*sdp == ' ') {
-                                               *sdp = 0;
+                               line += 2;
+                               while (*line != 0) {
+                                       if (*line == ' ') {
+                                               *line = 0;
                                                poscnt++;
 
                                                /* m=<media> <port> <transport> <fmt list> */
                                                if (poscnt == 1)
-                                                       sdpinfo.port = sdp + 1;
+                                                       sdpinfo.port = line + 1;
 
                                                if (poscnt == 2)
-                                                       sdpinfo.proto = sdp + 1;
+                                                       sdpinfo.proto = line + 1;
 
                                                if (poscnt > 2)
                                                        break;
                                        }
-                                       sdp++;
+                                       line++;
                                }
                        }
 
-                       sdp = ++pos;
+                       line = ++pos;
                        continue;
                }
                pos++;
@@ -204,7 +204,7 @@ char *get_url_from_sap(char *service)
                                 if (sap_addrtype) {
                                         struct in6_addr in6addr;
 
-                                        memcpy(in6addr.in6_u.u6_addr8, sender_address, 16);
+                                        memcpy(in6addr.s6_addr, sender_address, 16);
                                         if (!(sdpinfo->host = (char*)inet_ntop(AF_INET6, &in6addr, hostbuf, INET6_ADDRSTRLEN))) {
                                                 perror("inet_ntop");
                                                 continue;
@@ -242,7 +242,8 @@ char *get_url_from_sap(char *service)
                        }
                }
 
-       } while(curr.tv_sec < start.tv_sec+SAP_TIMEOUT);
+       } while(curr.tv_sec < start.tv_sec+SAP_TIMEOUT ||
+               ((curr.tv_sec == start.tv_sec+SAP_TIMEOUT) && (curr.tv_usec < start.tv_usec)));
 
        if (!(inet_aton(SAP_ADDR, &sapinaddr))) {
                perror("inet_aton");
Impressum, Datenschutz