#include <time.h>
#include <string.h>
#include <strings.h>
+#include <unistd.h>
+#include <sys/select.h>
#include "mcast.h"
#include "sap.h"
unsigned char auth_len;
unsigned short msgid;
unsigned char *payload, *pos, *host = NULL, *proto = NULL, *port = NULL, *sname = NULL;
+ fd_set rfds;
+ struct timeval tv;
+ int retval;
+
+ FD_ZERO(&rfds);
+ FD_SET(fd, &rfds);
+
+ tv.tv_sec = 0;
+ tv.tv_usec = 100000;
+
+ if ((retval = select(fd+1, &rfds, NULL, NULL, &tv)) == -1) {
+ perror("select");
+ return NULL;
+ }
+
+ if (!retval) {
+ gettimeofday(&curr, NULL);
+ continue;
+ }
if ((recvd = recv(fd, buffer, BUFFSIZE, 0)) < 1) {
perror("recv");
if (sap_encrypted || sap_compressed)
continue;
+
/* RFC 2327
* v=0
* o=- 6dca 1 IN IP4 192.168.100.17:2000
*/
pos = payload;
- while(*pos != 0 && (pos-buffer) < BUFFSIZE) {
- if (*pos == 0x0d) {
+ while(*pos != 0 && (pos-buffer) < recvd) {
+ if (*pos == 0x0d)
*pos = 0;
- }
if (*pos == 0x0a) {
*pos = 0;
poscnt++;
/* c=<network type> <address type> <connection address> */
- if (poscnt == 2) {
+ if (poscnt == 2)
host = payload + 1;
- }
- if (poscnt > 2) {
+ if (poscnt > 2)
break;
- }
}
payload++;
}
poscnt++;
/* m=<media> <port> <transport> <fmt list> */
- if (poscnt == 1) {
+ if (poscnt == 1)
port = payload + 1;
- }
- if (poscnt == 2) {
+ if (poscnt == 2)
proto = payload + 1;
- }
- if (poscnt > 2) {
+ if (poscnt > 2)
break;
- }
}
payload++;
}
mreq.imr_interface.s_addr = INADDR_ANY;
setsockopt (fd, IPPROTO_IP, IP_DROP_MEMBERSHIP, &mreq, sizeof(mreq));
+ close(fd);
+
return url;
}