Compiles w/o warnings now

FossilOrigin-Name: de4ce0a3bbcdbd5556c54c412268225bb2e17ed9f94d204cf6f05355b69be772
This commit is contained in:
7u83@mail.ru 2018-03-31 12:13:07 +00:00
parent 759de8595d
commit fb4b1298d9
1 changed files with 44 additions and 35 deletions

View File

@ -88,7 +88,8 @@ int socklist_find_reply_socket(struct sockaddr *sa, int port)
{ {
int bestindex = -1; int bestindex = -1;
int i; int i;
uint32_t addr,mask,saddr;
for (i = 0; i < socklist_len; i++) { for (i = 0; i < socklist_len; i++) {
/* we want only an unicast socket for reply */ /* we want only an unicast socket for reply */
@ -123,13 +124,13 @@ int socklist_find_reply_socket(struct sockaddr *sa, int port)
continue; continue;
/* get our source address and netmask */ /* get our source address and netmask */
uint32_t addr = addr =
((struct sockaddr_in *) &socklist[i].addr)->sin_addr.s_addr; ((struct sockaddr_in *) &socklist[i].addr)->sin_addr.s_addr;
uint32_t mask = mask =
((struct sockaddr_in *) &socklist[i].netmask)->sin_addr.s_addr; ((struct sockaddr_in *) &socklist[i].netmask)->sin_addr.s_addr;
/* get source of requested address */ /* get source of requested address */
uint32_t saddr = ((struct sockaddr_in *) sa)->sin_addr.s_addr; saddr = ((struct sockaddr_in *) sa)->sin_addr.s_addr;
/* if the request comes from the same subnet where our /* if the request comes from the same subnet where our
* socket is cconnected, this is our new best socked. * socket is cconnected, this is our new best socked.
@ -146,15 +147,15 @@ int socklist_find_reply_socket(struct sockaddr *sa, int port)
static int find_reply_socket(struct sockaddr *sa, int bc) static int find_reply_socket(struct sockaddr *sa, int bc)
{ {
unsigned int snlen;
/* //printf("Looking for best sock of: %s\n",sock_addr2str(sa));*/ struct sockaddr_storage bcaddr;
int bestsockfd = -1; int bestsockfd = -1;
int i; int i;
for (i = 0; i < socklist_len; i++) { for (i = 0; i < socklist_len; i++) {
struct sockaddr_storage sn; struct sockaddr_storage sn;
memset(&sn, 0, sizeof(sn)); memset(&sn, 0, sizeof(sn));
unsigned int snlen = sizeof(struct sockaddr_storage); snlen = sizeof(struct sockaddr_storage);
if (getsockname(socklist[i].sockfd, (struct sockaddr *) &sn, &snlen) < 0) { if (getsockname(socklist[i].sockfd, (struct sockaddr *) &sn, &snlen) < 0) {
continue; continue;
@ -179,7 +180,7 @@ static int find_reply_socket(struct sockaddr *sa, int bc)
if (!bc) if (!bc)
return bestsockfd; return bestsockfd;
struct sockaddr_storage bcaddr;
if (!sock_getbroadcastaddr if (!sock_getbroadcastaddr
((struct sockaddr *) &sn, (struct sockaddr *) &bcaddr)) ((struct sockaddr *) &sn, (struct sockaddr *) &bcaddr))
@ -218,13 +219,15 @@ int socklist_add_multicast(const char *addr, const char *port, int ac_proto)
struct addrinfo hints; struct addrinfo hints;
struct addrinfo *res, *res0; struct addrinfo *res, *res0;
int rc;
memset(&hints, 0, sizeof(hints)); memset(&hints, 0, sizeof(hints));
hints.ai_socktype = SOCK_DGRAM; hints.ai_socktype = SOCK_DGRAM;
hints.ai_family = PF_UNSPEC; hints.ai_family = PF_UNSPEC;
hints.ai_flags = AI_PASSIVE; hints.ai_flags = AI_PASSIVE;
int rc = getaddrinfo(addr, port, &hints, &res0); rc = getaddrinfo(addr, port, &hints, &res0);
if (rc != 0) { if (rc != 0) {
cw_log(LOG_ERR, "Can't bind multicast address '%s': %s", addr, cw_log(LOG_ERR, "Can't bind multicast address '%s': %s", addr,
gai_strerror(rc)); gai_strerror(rc));
@ -233,6 +236,10 @@ int socklist_add_multicast(const char *addr, const char *port, int ac_proto)
for (res = res0; res; res = res->ai_next) { for (res = res0; res; res = res->ai_next) {
struct sockaddr *sa = res->ai_addr; struct sockaddr *sa = res->ai_addr;
void *opt;
int optlen;
int rfd;
int sockfd = socket(res->ai_addr->sa_family, SOCK_DGRAM, 0); int sockfd = socket(res->ai_addr->sa_family, SOCK_DGRAM, 0);
/* create socket */ /* create socket */
if (sockfd == -1) { if (sockfd == -1) {
@ -251,19 +258,18 @@ int socklist_add_multicast(const char *addr, const char *port, int ac_proto)
} }
/* use setsockopt() to request that the kernel joins a multicast group */ /* use setsockopt() to request that the kernel joins a multicast group */
void *opt;
int optlen;
if (res->ai_addr->sa_family == AF_INET) { if (res->ai_addr->sa_family == AF_INET) {
struct sockaddr_in *sain;
char sinin[100];
struct ip_mreq mreq; struct ip_mreq mreq;
memset(&mreq, 0, sizeof(mreq)); memset(&mreq, 0, sizeof(mreq));
struct sockaddr_in *sain = (struct sockaddr_in *) res->ai_addr; sain = (struct sockaddr_in *) res->ai_addr;
mreq.imr_multiaddr.s_addr = sain->sin_addr.s_addr; mreq.imr_multiaddr.s_addr = sain->sin_addr.s_addr;
mreq.imr_interface.s_addr = htonl(INADDR_ANY); mreq.imr_interface.s_addr = htonl(INADDR_ANY);
opt = &mreq; opt = &mreq;
optlen = sizeof(mreq); optlen = sizeof(mreq);
char sinin[100];
sock_addrtostr((struct sockaddr *) sain, sinin, 100,1); sock_addrtostr((struct sockaddr *) sain, sinin, 100,1);
if (setsockopt(sockfd, IPPROTO_IP, IP_ADD_MEMBERSHIP, opt, optlen) if (setsockopt(sockfd, IPPROTO_IP, IP_ADD_MEMBERSHIP, opt, optlen)
@ -277,15 +283,14 @@ int socklist_add_multicast(const char *addr, const char *port, int ac_proto)
} }
if (res->ai_addr->sa_family == AF_INET6) { if (res->ai_addr->sa_family == AF_INET6) {
struct ipv6_mreq mreq; struct ipv6_mreq mreq;
struct sockaddr_in6 *sain6;
memset(&mreq, 0, sizeof(mreq)); memset(&mreq, 0, sizeof(mreq));
struct sockaddr_in6 *sain6 = (struct sockaddr_in6 *) res->ai_addr; sain6 = (struct sockaddr_in6 *) res->ai_addr;
/*// mreq.ipv6mr_multiaddr.s_addr=sain->sin_addr.s_addr;*/
memcpy(&mreq.ipv6mr_multiaddr.s6_addr, &sain6->sin6_addr.s6_addr, memcpy(&mreq.ipv6mr_multiaddr.s6_addr, &sain6->sin6_addr.s6_addr,
sizeof(sain6->sin6_addr.s6_addr)); sizeof(sain6->sin6_addr.s6_addr));
/*// int si = sizeof(sain6->sin6_addr.s6_addr);
// int i = sain6->sin6_addr.s6_addr; mreq.ipv6mr_interface = 0; /* htonl(INADDR_ANY);*/
*/ mreq.ipv6mr_interface = 0; /*//htonl(INADDR_ANY);*/
opt = &mreq; opt = &mreq;
optlen = sizeof(mreq); optlen = sizeof(mreq);
if (setsockopt(sockfd, IPPROTO_IPV6, IPV6_JOIN_GROUP, opt, optlen) if (setsockopt(sockfd, IPPROTO_IPV6, IPV6_JOIN_GROUP, opt, optlen)
@ -297,7 +302,7 @@ int socklist_add_multicast(const char *addr, const char *port, int ac_proto)
} }
} }
int rfd = find_reply_socket(sa, 0); rfd = find_reply_socket(sa, 0);
socklist[socklist_len].sockfd = sockfd; socklist[socklist_len].sockfd = sockfd;
/*// socklist[socklist_len].reply_sockfd = rfd;*/ /*// socklist[socklist_len].reply_sockfd = rfd;*/
@ -333,20 +338,20 @@ static int socklist_check_size()
int socklist_add_unicast(const char *addr, const char *port, int ac_proto) int socklist_add_unicast(const char *addr, const char *port, int ac_proto)
{ {
char sock_buf[SOCK_ADDR_BUFSIZE]; char sock_buf[SOCK_ADDR_BUFSIZE];
struct addrinfo hints;
struct addrinfo *res, *res0;
int rc;
if (!socklist_check_size()) if (!socklist_check_size())
return 0; return 0;
struct addrinfo hints;
struct addrinfo *res, *res0;
memset(&hints, 0, sizeof(hints)); memset(&hints, 0, sizeof(hints));
hints.ai_socktype = SOCK_DGRAM; hints.ai_socktype = SOCK_DGRAM;
hints.ai_family = PF_UNSPEC; hints.ai_family = PF_UNSPEC;
hints.ai_flags = AI_PASSIVE; hints.ai_flags = AI_PASSIVE;
int rc = getaddrinfo(addr, port, &hints, &res0); rc = getaddrinfo(addr, port, &hints, &res0);
if (rc != 0) { if (rc != 0) {
cw_log(LOG_ERR, "Can't bind unicast address '%s': %s", addr, cw_log(LOG_ERR, "Can't bind unicast address '%s': %s", addr,
gai_strerror(rc)); gai_strerror(rc));
@ -357,7 +362,9 @@ int socklist_add_unicast(const char *addr, const char *port, int ac_proto)
char ifname[64]; char ifname[64];
struct sockaddr netmask; struct sockaddr netmask;
struct sockaddr broadcast; struct sockaddr broadcast;
struct sockaddr *sa;
int sockfd;
ifname[0] = 0; ifname[0] = 0;
rc = sock_getifinfo(res->ai_addr, ifname, &broadcast, &netmask); rc = sock_getifinfo(res->ai_addr, ifname, &broadcast, &netmask);
if (!rc) { if (!rc) {
@ -366,8 +373,8 @@ int socklist_add_unicast(const char *addr, const char *port, int ac_proto)
} }
/* Bind the control port */ /* Bind the control port */
struct sockaddr *sa = res->ai_addr; sa = res->ai_addr;
int sockfd = socket(res->ai_addr->sa_family, SOCK_DGRAM, 0); sockfd = socket(res->ai_addr->sa_family, SOCK_DGRAM, 0);
/* create socket */ /* create socket */
if (sockfd == -1) { if (sockfd == -1) {
cw_log(LOG_ERR, "Can't create unicast socket: %s", cw_log(LOG_ERR, "Can't create unicast socket: %s",
@ -446,11 +453,14 @@ int socklist_add_unicast(const char *addr, const char *port, int ac_proto)
int socklist_add_broadcast(const char *addr, const char *port, int ac_proto) int socklist_add_broadcast(const char *addr, const char *port, int ac_proto)
{ {
struct addrinfo hints;
struct addrinfo *res, *res0;
int rc;
int sockfd;
if (!socklist_check_size()) if (!socklist_check_size())
return 0; return 0;
struct addrinfo hints;
struct addrinfo *res, *res0;
memset(&hints, 0, sizeof(hints)); memset(&hints, 0, sizeof(hints));
hints.ai_socktype = SOCK_DGRAM; hints.ai_socktype = SOCK_DGRAM;
@ -458,16 +468,16 @@ int socklist_add_broadcast(const char *addr, const char *port, int ac_proto)
hints.ai_flags = AI_PASSIVE; hints.ai_flags = AI_PASSIVE;
int rc = getaddrinfo(addr, port, &hints, &res0); rc = getaddrinfo(addr, port, &hints, &res0);
if (rc != 0) { if (rc != 0) {
cw_log(LOG_ERR, "Can't bind broadcast address '%s': %s", addr, cw_log(LOG_ERR, "Can't bind broadcast address '%s': %s", addr,
gai_strerror(rc)); gai_strerror(rc));
return 0; return 0;
} }
int sockfd;
for (res = res0; res; res = res->ai_next) {
for (res = res0; res; res = res->ai_next) {
int rfd;
struct sockaddr *sa = res->ai_addr; struct sockaddr *sa = res->ai_addr;
sockfd = socket(res->ai_addr->sa_family, SOCK_DGRAM, 0); sockfd = socket(res->ai_addr->sa_family, SOCK_DGRAM, 0);
@ -498,8 +508,7 @@ int socklist_add_broadcast(const char *addr, const char *port, int ac_proto)
continue; continue;
} }
rfd = find_reply_socket(sa, 1);
int rfd = find_reply_socket(sa, 1);
socklist[socklist_len].sockfd = sockfd; socklist[socklist_len].sockfd = sockfd;
/*// socklist[socklist_len].reply_sockfd = rfd;*/ /*// socklist[socklist_len].reply_sockfd = rfd;*/