diff options
Diffstat (limited to 'toxcore/network.c')
-rw-r--r-- | toxcore/network.c | 32 |
1 files changed, 16 insertions, 16 deletions
diff --git a/toxcore/network.c b/toxcore/network.c index 965e65f9..04efd03b 100644 --- a/toxcore/network.c +++ b/toxcore/network.c | |||
@@ -699,6 +699,9 @@ Networking_Core *new_networking_ex(IP ip, uint16_t port_from, uint16_t port_to, | |||
699 | /* Function to cleanup networking stuff. */ | 699 | /* Function to cleanup networking stuff. */ |
700 | void kill_networking(Networking_Core *net) | 700 | void kill_networking(Networking_Core *net) |
701 | { | 701 | { |
702 | if (!net) | ||
703 | return; | ||
704 | |||
702 | if (net->family != 0) /* Socket not initialized */ | 705 | if (net->family != 0) /* Socket not initialized */ |
703 | kill_sock(net->sock); | 706 | kill_sock(net->sock); |
704 | 707 | ||
@@ -823,7 +826,7 @@ void ipport_copy(IP_Port *target, const IP_Port *source) | |||
823 | * writes error message into the buffer on error | 826 | * writes error message into the buffer on error |
824 | */ | 827 | */ |
825 | /* there would be INET6_ADDRSTRLEN, but it might be too short for the error message */ | 828 | /* there would be INET6_ADDRSTRLEN, but it might be too short for the error message */ |
826 | static char addresstext[96]; | 829 | static char addresstext[96]; // FIXME magic number. Why not INET6_ADDRSTRLEN ? |
827 | const char *ip_ntoa(const IP *ip) | 830 | const char *ip_ntoa(const IP *ip) |
828 | { | 831 | { |
829 | if (ip) { | 832 | if (ip) { |
@@ -964,10 +967,10 @@ int addr_resolve(const char *address, IP *to, IP *extra) | |||
964 | return 0; | 967 | return 0; |
965 | } | 968 | } |
966 | 969 | ||
967 | IP4 ip4; | 970 | IP ip4; |
968 | memset(&ip4, 0, sizeof(ip4)); | 971 | ip_init(&ip4, /* ipv6? */ false); |
969 | IP6 ip6; | 972 | IP ip6; |
970 | memset(&ip6, 0, sizeof(ip6)); | 973 | ip_init(&ip6, /* ipv6? */ true); |
971 | 974 | ||
972 | for (walker = server; (walker != NULL) && (rc != 3); walker = walker->ai_next) { | 975 | for (walker = server; (walker != NULL) && (rc != 3); walker = walker->ai_next) { |
973 | switch (walker->ai_family) { | 976 | switch (walker->ai_family) { |
@@ -975,11 +978,11 @@ int addr_resolve(const char *address, IP *to, IP *extra) | |||
975 | if (walker->ai_family == family) { /* AF_INET requested, done */ | 978 | if (walker->ai_family == family) { /* AF_INET requested, done */ |
976 | struct sockaddr_in *addr = (struct sockaddr_in *)walker->ai_addr; | 979 | struct sockaddr_in *addr = (struct sockaddr_in *)walker->ai_addr; |
977 | to->ip4.in_addr = addr->sin_addr; | 980 | to->ip4.in_addr = addr->sin_addr; |
978 | rc = 3; | 981 | rc = 3; // TODO do we really have to reuse variable instead of creating a new one? |
979 | } else if (!(rc & 1)) { /* AF_UNSPEC requested, store away */ | 982 | } else if (!(rc & 1)) { /* AF_UNSPEC requested, store away */ |
980 | struct sockaddr_in *addr = (struct sockaddr_in *)walker->ai_addr; | 983 | struct sockaddr_in *addr = (struct sockaddr_in *)walker->ai_addr; |
981 | ip4.in_addr = addr->sin_addr; | 984 | ip4.ip4.in_addr = addr->sin_addr; |
982 | rc |= 1; | 985 | rc |= 1; // FIXME magic number |
983 | } | 986 | } |
984 | 987 | ||
985 | break; /* switch */ | 988 | break; /* switch */ |
@@ -994,7 +997,7 @@ int addr_resolve(const char *address, IP *to, IP *extra) | |||
994 | } else if (!(rc & 2)) { /* AF_UNSPEC requested, store away */ | 997 | } else if (!(rc & 2)) { /* AF_UNSPEC requested, store away */ |
995 | if (walker->ai_addrlen == sizeof(struct sockaddr_in6)) { | 998 | if (walker->ai_addrlen == sizeof(struct sockaddr_in6)) { |
996 | struct sockaddr_in6 *addr = (struct sockaddr_in6 *)walker->ai_addr; | 999 | struct sockaddr_in6 *addr = (struct sockaddr_in6 *)walker->ai_addr; |
997 | ip6.in6_addr = addr->sin6_addr; | 1000 | ip6.ip6.in6_addr = addr->sin6_addr; |
998 | rc |= 2; | 1001 | rc |= 2; |
999 | } | 1002 | } |
1000 | } | 1003 | } |
@@ -1004,17 +1007,14 @@ int addr_resolve(const char *address, IP *to, IP *extra) | |||
1004 | } | 1007 | } |
1005 | 1008 | ||
1006 | if (to->family == AF_UNSPEC) { | 1009 | if (to->family == AF_UNSPEC) { |
1007 | if (rc & 2) { | 1010 | if (rc & 2) { // FIXME magic number |
1008 | to->family = AF_INET6; | 1011 | ip_copy(to, &ip6); |
1009 | to->ip6 = ip6; | ||
1010 | 1012 | ||
1011 | if ((rc & 1) && (extra != NULL)) { | 1013 | if ((rc & 1) && (extra != NULL)) { |
1012 | extra->family = AF_INET; | 1014 | ip_copy(extra, &ip4); |
1013 | extra->ip4 = ip4; | ||
1014 | } | 1015 | } |
1015 | } else if (rc & 1) { | 1016 | } else if (rc & 1) { |
1016 | to->family = AF_INET; | 1017 | ip_copy(to, &ip4); |
1017 | to->ip4 = ip4; | ||
1018 | } else | 1018 | } else |
1019 | rc = 0; | 1019 | rc = 0; |
1020 | } | 1020 | } |