From 6d8ff43cd4371dd40d083ae4bc8456d68b5e0d35 Mon Sep 17 00:00:00 2001 From: Ron Koenderink Date: Tue, 21 Aug 2007 13:46:21 +0000 Subject: [PATCH] (inet_ntop) [_WIN32]: New. Windows equivalent for inet_ntop(). [_WIN32]: New in.h, inet.h, netdb.h. Windows equivalent for POSIX includes. (tcp_connect): Use new include files and inet_ntop(). Allows tcp_connect() to compile when HAVE_GETADDRINFO is enabled. --- src/lib/player/accept.c | 2 -- src/lib/w32/arpa/inet.h | 38 ++++++++++++++++++++++++++++++++++++++ src/lib/w32/netdb.h | 39 +++++++++++++++++++++++++++++++++++++++ src/lib/w32/netinet/in.h | 38 ++++++++++++++++++++++++++++++++++++++ src/lib/w32/posixio.c | 28 ++++++++++++++++++++++++++++ src/lib/w32/unistd.h | 4 ++++ 6 files changed, 147 insertions(+), 2 deletions(-) create mode 100644 src/lib/w32/arpa/inet.h create mode 100644 src/lib/w32/netdb.h create mode 100644 src/lib/w32/netinet/in.h diff --git a/src/lib/player/accept.c b/src/lib/player/accept.c index f8e72f7d2..9096a4e12 100644 --- a/src/lib/player/accept.c +++ b/src/lib/player/accept.c @@ -38,11 +38,9 @@ #include #include #include -#if !defined(_WIN32) #include #include #include -#endif #include #include "empio.h" diff --git a/src/lib/w32/arpa/inet.h b/src/lib/w32/arpa/inet.h new file mode 100644 index 000000000..393d82620 --- /dev/null +++ b/src/lib/w32/arpa/inet.h @@ -0,0 +1,38 @@ +/* + * Empire - A multi-player, client/server Internet based war game. + * Copyright (C) 1986-2007, Dave Pare, Jeff Bailey, Thomas Ruschak, + * Ken Stevens, Steve McClure + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * --- + * + * See files README, COPYING and CREDITS in the root of the source + * tree for related information and legal notices. It is expected + * that future projects/authors will amend these files as needed. + * + * --- + * + * arpa/inet.h: POSIX networking for WIN32 + * + * Known contributors to this file: + * Ron Koenderink, 2007 + */ + +#ifndef ARPA_INET_H +#define ARPA_INET_H + +#include +#endif /* ARPA_INET_H */ diff --git a/src/lib/w32/netdb.h b/src/lib/w32/netdb.h new file mode 100644 index 000000000..bf1f28ba7 --- /dev/null +++ b/src/lib/w32/netdb.h @@ -0,0 +1,39 @@ +/* + * Empire - A multi-player, client/server Internet based war game. + * Copyright (C) 1986-2007, Dave Pare, Jeff Bailey, Thomas Ruschak, + * Ken Stevens, Steve McClure + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * --- + * + * See files README, COPYING and CREDITS in the root of the source + * tree for related information and legal notices. It is expected + * that future projects/authors will amend these files as needed. + * + * --- + * + * netdb.h: POSIX networking for WIN32 + * + * Known contributors to this file: + * Ron Koenderink, 2007 + */ + +#ifndef NETDB_H +#define NETDB_H + +#include +#include +#endif /* NETDB_H */ diff --git a/src/lib/w32/netinet/in.h b/src/lib/w32/netinet/in.h new file mode 100644 index 000000000..1899ec3ac --- /dev/null +++ b/src/lib/w32/netinet/in.h @@ -0,0 +1,38 @@ +/* + * Empire - A multi-player, client/server Internet based war game. + * Copyright (C) 1986-2007, Dave Pare, Jeff Bailey, Thomas Ruschak, + * Ken Stevens, Steve McClure + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * --- + * + * See files README, COPYING and CREDITS in the root of the source + * tree for related information and legal notices. It is expected + * that future projects/authors will amend these files as needed. + * + * --- + * + * netinet/in.h: POSIX networking for WIN32 + * + * Known contributors to this file: + * Ron Koenderink, 2007 + */ + +#ifndef NETINET_IN_H +#define NETINET_IN_H + +#include +#endif /* NETINET_IN_H */ diff --git a/src/lib/w32/posixio.c b/src/lib/w32/posixio.c index 3cd885c52..5b7708a1d 100644 --- a/src/lib/w32/posixio.c +++ b/src/lib/w32/posixio.c @@ -321,6 +321,34 @@ posix_socket(int domain, int type, int protocol) return new_fd; } +const char * +inet_ntop(int af, const void *source, char *dest, socklen_t len) +{ + if (af == AF_INET) + { + struct sockaddr_in in; + memset(&in, 0, sizeof(in)); + in.sin_family = AF_INET; + memcpy(&in.sin_addr, source, sizeof(struct in_addr)); + getnameinfo((struct sockaddr *)&in, + sizeof(struct sockaddr_in), dest, len, + NULL, 0, NI_NUMERICHOST); + return dest; + } + else if (af == AF_INET6) + { + struct sockaddr_in6 in; + memset(&in, 0, sizeof(in)); + in.sin6_family = AF_INET6; + memcpy(&in.sin6_addr, source, sizeof(struct in_addr6)); + getnameinfo((struct sockaddr *)&in, + sizeof(struct sockaddr_in6), dest, len, + NULL, 0, NI_NUMERICHOST); + return dest; + } + return NULL; +} + #define FILE_FUNCTION(type, expr) \ int handle; \ \ diff --git a/src/lib/w32/unistd.h b/src/lib/w32/unistd.h index 3da8d7554..2a407c9ab 100644 --- a/src/lib/w32/unistd.h +++ b/src/lib/w32/unistd.h @@ -40,6 +40,8 @@ #include #include "sys/socket.h" #include +#include + #include "w32misc.h" /* @@ -138,6 +140,8 @@ extern int posix_setsockopt(int fd, int level, int optname, const void *optval, socklen_t optlen); extern int posix_shutdown(int fd, int how); extern int posix_socket(int domain, int type, int protocol); +extern const char *inet_ntop(int af, const void *src, char *dst, + socklen_t cnt); extern int posix_close(int fd); extern int posix_fstat(int fd, struct stat *buffer); -- 2.43.0