mirror of
https://github.com/DigitalDevices/octonet.git
synced 2023-10-10 13:36:52 +02:00
- clean up sockaddr types
- use memcpy instead of struct copy in sendto_port otherwise copied struct is damaged, arm gcc 4.5.4 broken?
This commit is contained in:
parent
f96ab1c4a6
commit
a440bd520c
1
dddvb
1
dddvb
@ -1 +0,0 @@
|
||||
Subproject commit 829929a41f8c926ad59704eb712630b7fe0803a1
|
@ -2447,7 +2447,7 @@ static void os_serve(struct octoserve *os)
|
||||
die("Error in sigaction");
|
||||
|
||||
os->rtsp_sock = streamsock("554", AF_INET, &os->rtsp_sadr);
|
||||
sockname(&os->rtsp_sadr, os->rtsp_ip);
|
||||
sockname((struct sockaddr *) &os->rtsp_sadr, os->rtsp_ip);
|
||||
dbgprintf(DEBUG_SYS, "rtsp_ip: %s, %d\n", os->rtsp_ip, os->rtsp_sock);
|
||||
if (listen(os->rtsp_sock, 20) < 0) {
|
||||
dbgprintf(DEBUG_SYS, "listen error");
|
||||
@ -2580,14 +2580,14 @@ static struct octoserve *os_init(char *ifname, int nossdp, int nodms, int nodvbt
|
||||
os->ifname = ifname;
|
||||
os->sessionid = random();
|
||||
|
||||
if (get_ifa(ifname, AF_INET, &os->ssdp.sadr) < 0) {
|
||||
if (get_ifa(ifname, AF_INET, (struct sockaddr *) &os->ssdp.sadr) < 0) {
|
||||
perror("no such interface:");
|
||||
free(os);
|
||||
return NULL;
|
||||
}
|
||||
get_ifa(ifname, AF_INET6, &os->ssdp.sadr6);
|
||||
sockname(&os->ssdp.sadr, os->ssdp.ip);
|
||||
sockname(&os->ssdp.sadr6, os->ssdp.ip6);
|
||||
get_ifa(ifname, AF_INET6, (struct sockaddr *) &os->ssdp.sadr6);
|
||||
sockname((struct sockaddr *) &os->ssdp.sadr, os->ssdp.ip);
|
||||
sockname((struct sockaddr *) &os->ssdp.sadr6, os->ssdp.ip6);
|
||||
|
||||
strcpy(ifr.ifr_name, os->ifname);
|
||||
s = socket(AF_INET, SOCK_DGRAM, 0);
|
||||
|
@ -388,11 +388,11 @@ struct os_ssdp {
|
||||
pthread_t pt;
|
||||
|
||||
int sock;
|
||||
struct sockaddr sadr;
|
||||
struct sockaddr_in sadr;
|
||||
char ip[INET6_ADDRSTRLEN];
|
||||
|
||||
int sock6;
|
||||
struct sockaddr sadr6;
|
||||
struct sockaddr_in6 sadr6;
|
||||
char ip6[INET6_ADDRSTRLEN];
|
||||
|
||||
uint8_t uuid[16];
|
||||
|
@ -132,12 +132,19 @@ static int ssdp_msg(struct os_ssdp *ss, char *buf, int n, int notify, int nr, in
|
||||
}
|
||||
|
||||
static int sendto_port(int sock, const void *buf, size_t len,
|
||||
struct sockaddr_in *cadr, uint16_t port)
|
||||
struct sockaddr *cadr, uint16_t port)
|
||||
{
|
||||
struct sockaddr_in adr = *cadr;
|
||||
struct sockaddr_in adr;
|
||||
struct sockaddr_in sadr = *cadr;
|
||||
int r;
|
||||
|
||||
/*adr = *((struct sockaddr_in *) cadr); */
|
||||
/* struct assignment seem to be broken in arm gcc 4.5.4?!? */5B
|
||||
memcpy(&adr, cadr, sizeof(adr));
|
||||
adr.sin_port = htons(port);
|
||||
return sendto(sock, buf, len, 0, (struct sockaddr *) &adr, sizeof(adr));
|
||||
r = sendto(sock, buf, len, 0, (struct sockaddr *) &adr, sizeof(adr));
|
||||
//dbgprintf(DEBUG_SSDP, "sent to port %u, family %u, ret=%d errno=%d\n", port, adr.sin_family, r, errno);
|
||||
return r;
|
||||
}
|
||||
|
||||
static int send_ssdp_msg(struct os_ssdp *ss, int nr, int notify)
|
||||
@ -260,8 +267,8 @@ static int send_reply_msearch(struct os_ssdp *ss, int mc, int send_id, int nr)
|
||||
insadr.sin_addr.s_addr = inet_addr("239.255.255.250");
|
||||
res = sendto(s, buf, len, 0, (struct sockaddr *) &insadr, sizeof(insadr));
|
||||
} else
|
||||
res = sendto(s, buf, len, 0, &ss->cadr, sizeof(struct sockaddr));
|
||||
//res = sendto_port(ss->sock, buf, len, &ss->cadr, ss->csport);
|
||||
//res = sendto(s, buf, len, 0, &ss->cadr, sizeof(struct sockaddr));
|
||||
res = sendto_port(s, buf, len, &ss->cadr, ss->csport);
|
||||
return res;
|
||||
}
|
||||
|
||||
@ -396,7 +403,7 @@ static void handle_ssdp(struct octoserve *os, char *m, int ml)
|
||||
host, hport, type, htype, mx);
|
||||
/* M-SEARCH */
|
||||
if (ss->setup) {
|
||||
if (type == 1 && mx > 0) {
|
||||
if (type == 1 && mx > 0 && st != NULL) {
|
||||
//ssdp_msearch(ss, htype == 2 ? 0 : 1, st);
|
||||
ssdp_msearch(ss, 0, st);
|
||||
}
|
||||
@ -646,19 +653,22 @@ int init_ssdp(struct octoserve *os, struct os_ssdp *ss, uint32_t d, int nossdp,
|
||||
ss->bootid = id + 1;
|
||||
write_id("boot", ss->bootid);
|
||||
|
||||
dbgprintf(DEBUG_SSDP, "DEVID = %u\n", ss->devid);
|
||||
|
||||
|
||||
ss->configid = 1;
|
||||
|
||||
get_ifa(os->ifname, AF_INET, &os->ssdp.sadr);
|
||||
get_ifa(os->ifname, AF_INET6, &os->ssdp.sadr6);
|
||||
sockname(&os->ssdp.sadr, os->ssdp.ip);
|
||||
sockname(&os->ssdp.sadr6, os->ssdp.ip6);
|
||||
get_ifa(os->ifname, AF_INET, (struct sockaddr *) &os->ssdp.sadr);
|
||||
get_ifa(os->ifname, AF_INET6, (struct sockaddr *) &os->ssdp.sadr6);
|
||||
sockname((struct sockaddr *) &os->ssdp.sadr, os->ssdp.ip);
|
||||
sockname((struct sockaddr *) &os->ssdp.sadr6, os->ssdp.ip6);
|
||||
|
||||
if (!nossdp) {
|
||||
ss->sock = ssdpsock(os->ifname, AF_INET, &os->ssdp.sadr);
|
||||
ss->sock = ssdpsock(os->ifname, AF_INET, (struct sockaddr *) &os->ssdp.sadr);
|
||||
if (ss->sock < 0)
|
||||
return -1;
|
||||
|
||||
ss->sock6 = ssdpsock(os->ifname, AF_INET6, &os->ssdp.sadr);
|
||||
ss->sock6 = ssdpsock(os->ifname, AF_INET6, (struct sockaddr *) &os->ssdp.sadr);
|
||||
if (ss->sock6 < 0)
|
||||
return -1;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user