aboutsummaryrefslogtreecommitdiff
path: root/tests/nbody-java/hysock.h
diff options
context:
space:
mode:
Diffstat (limited to 'tests/nbody-java/hysock.h')
-rw-r--r--tests/nbody-java/hysock.h288
1 files changed, 288 insertions, 0 deletions
diff --git a/tests/nbody-java/hysock.h b/tests/nbody-java/hysock.h
new file mode 100644
index 00000000..14b0d916
--- /dev/null
+++ b/tests/nbody-java/hysock.h
@@ -0,0 +1,288 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#if !defined(hysock_h)
+#define hysock_h
+/******************************************************\
+ Portable socket library implementation.
+\******************************************************/
+#include "xmlvm-hy.h"
+#include <errno.h>
+#include <signal.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+
+#if !defined(ZOS)
+#include <netinet/tcp.h>
+#else /* !defined(ZOS) */
+#include <netinet/tcp_var.h>
+#endif /* !defined(ZOS) */
+
+#include <netdb.h>
+#include <sys/time.h>
+#include <stdlib.h>
+
+#if !defined(ZOS)
+#if !defined(MACOSX) && !defined(__CYGWIN__)
+#include <sys/socketvar.h>
+#endif
+#else /* !defined(ZOS) */
+#include <arpa/inet.h>
+#include <xti.h>
+#endif /* !defined(ZOS) */
+
+#include "hysocket.h"
+#include "hycomp.h"
+// #include "hyport.h"
+#if defined(DEBUG)
+#define HYSOCKDEBUG(x, err) printf(x, err)
+#define HYSOCKDEBUGH(x, err) printf(x, err)
+#define HYSOCKDEBUGPRINT(x) printf(x)
+#else
+#define HYSOCKDEBUG(x, err)
+#define HYSOCKDEBUGH(x, err)
+#define HYSOCKDEBUGPRINT(x)
+#endif
+/* the following defines are used to determine how gethostby*_r calls should be handled.*/
+/* HOSTENT_DATA_R: if the HOSTENT_DATA structure is used */
+#define HOSTENT_DATA_R (defined(AIX))
+/* GLIBC_R: uses the GLIBC versions */
+#define GLIBC_R (defined(LINUX))
+/* ORIGINAL_R: the original gethostby* call is thread safe */
+#define ORIGINAL_R defined(FREEBSD)
+/* TOFIX: FreeBSD man page says:
+ * Though these functions are thread-safe, still it is recommended to use
+ * the getaddrinfo(3) family of functions, instead.
+ */
+/* NO_R: gethostby*_r calls do not exist and the normal gethostby* calls are not threadsafe */
+#define NO_R (defined(MACOSX) || defined(__CYGWIN__))
+/* OTHER_R: everything else */
+#define OTHER_R ((!HOSTENT_DATA_R)&&(!GLIBC_R)&&(!ORIGINAL_R)&&(!NO_R))
+/* Converts (seconds, microseconds) to milliseconds */
+#define TO_MILLIS(sec, microsec) (sec * 1000 + (microsec + 999) / 1000)
+/* os types */
+typedef int OSSOCKET; /* as returned by socket() */
+typedef struct sockaddr_in OSSOCKADDR; /* as used by bind() and friends */
+typedef struct hostent OSHOSTENT;
+typedef fd_set OSFDSET;
+typedef struct timeval OSTIMEVAL;
+typedef struct linger OSLINGER;
+typedef struct sockaddr OSADDR;
+typedef struct sockaddr_in6 OSSOCKADDR_IN6; /* IPv6 */
+typedef struct ipv6_mreq OSIPMREQ6;
+typedef struct addrinfo OSADDRINFO; /* IPv6 */
+typedef struct sockaddr_storage OSSOCKADDR_STORAGE; /* IPv6 */
+/*
+ * Socket Types
+ */
+#define OSSOCK_ANY 0 /* for getaddrinfo hints */
+#define OSSOCK_STREAM SOCK_STREAM /* stream socket */
+#define OSSOCK_DGRAM SOCK_DGRAM /* datagram socket */
+#define OSSOCK_RAW SOCK_RAW /* raw-protocol interface */
+#define OSSOCK_RDM SOCK_RDM /* reliably-delivered message */
+#define OSSOCK_SEQPACKET SOCK_SEQPACKET /* sequenced packet stream */
+#if defined(HOSTENT_DATA_R)
+typedef struct hostent_data OSHOSTENT_DATA;
+#endif
+typedef struct ip_mreq OSIPMREQ;
+#define OSSOMAXCONN SOMAXCONN
+#define OS_BADSOCKET -1 /* Provide bad socket constant */
+/* defines for socket levels */
+#define OS_SOL_SOCKET SOL_SOCKET
+#define OS_IPPROTO_TCP IPPROTO_TCP
+#define OS_IPPROTO_IP IPPROTO_IP
+#if defined(IPv6_FUNCTION_SUPPORT)
+#define OS_IPPROTO_IPV6 IPPROTO_IPV6
+#endif
+/* defines for socket options */
+#define OS_SO_LINGER SO_LINGER
+#define OS_SO_KEEPALIVE SO_KEEPALIVE
+#define OS_TCP_NODELAY TCP_NODELAY
+#define OS_SO_REUSEADDR SO_REUSEADDR
+#define OS_SO_SNDBUF SO_SNDBUF
+#define OS_SO_RCVBUF SO_RCVBUF
+#define OS_SO_BROADCAST SO_BROADCAST /* Support datagram broadcasts */
+#define OS_SO_OOBINLINE SO_OOBINLINE
+#define OS_IP_TOS IP_TOS
+/* defines for socket options, multicast */
+#define OS_MCAST_TTL IP_MULTICAST_TTL
+#define OS_MCAST_ADD_MEMBERSHIP IP_ADD_MEMBERSHIP
+#define OS_MCAST_DROP_MEMBERSHIP IP_DROP_MEMBERSHIP
+#define OS_MCAST_INTERFACE IP_MULTICAST_IF
+#define OS_MCAST_LOOP IP_MULTICAST_LOOP
+#if defined(IPv6_FUNCTION_SUPPORT)
+#define OS_MCAST_INTERFACE_2 IPV6_MULTICAST_IF
+#if defined(FREEBSD) || defined(MACOSX) || defined(ZOS)
+#define OS_IPV6_ADD_MEMBERSHIP IPV6_JOIN_GROUP
+#define OS_IPV6_DROP_MEMBERSHIP IPV6_LEAVE_GROUP
+#else
+#define OS_IPV6_ADD_MEMBERSHIP IPV6_ADD_MEMBERSHIP
+#define OS_IPV6_DROP_MEMBERSHIP IPV6_DROP_MEMBERSHIP
+#endif
+#endif
+/* defines for the unix error constants. These may be overriden for specific platforms. */
+#define HYPORT_ERROR_SOCKET_UNIX_CONNRESET ECONNRESET
+#define HYPORT_ERROR_SOCKET_UNIX_EAGAIN EAGAIN
+#define HYPORT_ERROR_SOCKET_UNIX_EAFNOSUPPORT EAFNOSUPPORT
+#define HYPORT_ERROR_SOCKET_UNIX_EBADF EBADF
+#define HYPORT_ERROR_SOCKET_UNIX_ECONNRESET ECONNRESET
+#define HYPORT_ERROR_SOCKET_UNIX_EINVAL EINVAL
+#define HYPORT_ERROR_SOCKET_UNIX_EINTR EINTR
+#define HYPORT_ERROR_SOCKET_UNIX_EFAULT EFAULT
+#define HYPORT_ERROR_SOCKET_UNIX_ENOPROTOOPT ENOPROTOOPT
+#define HYPORT_ERROR_SOCKET_UNIX_ENOTCONN ENOTCONN
+#define HYPORT_ERROR_SOCKET_UNIX_EPROTONOSUPPORT EPROTONOSUPPORT
+#define HYPORT_ERROR_SOCKET_UNIX_HOSTNOTFOUND HOST_NOT_FOUND
+#define HYPORT_ERROR_SOCKET_UNIX_ENOBUFS ENOBUFS
+#define HYPORT_ERROR_SOCKET_UNIX_NODATA NO_DATA
+#define HYPORT_ERROR_SOCKET_UNIX_NORECOVERY NO_RECOVERY
+#define HYPORT_ERROR_SOCKET_UNIX_ENOTSOCK ENOTSOCK
+#define HYPORT_ERROR_SOCKET_UNIX_TRYAGAIN TRY_AGAIN
+#define HYPORT_ERROR_SOCKET_UNIX_EOPNOTSUP EOPNOTSUPP
+#define HYPORT_ERROR_SOCKET_UNIX_ETIMEDOUT ETIMEDOUT
+#define HYPORT_ERROR_SOCKET_UNIX_CONNREFUSED ECONNREFUSED
+#define HYPORT_ERROR_SOCKET_UNIX_EINPROGRESS EINPROGRESS
+#define HYPORT_ERROR_SOCKET_UNIX_ENETUNREACH ENETUNREACH
+#define HYPORT_ERROR_SOCKET_UNIX_EACCES EACCES
+/* platform constants */
+#define HYSOCK_MAXCONN OSSOMAXCONN;
+#define HYSOCK_BADSOCKET OS_BADSOCKET /* Provide bad socket constant */
+/* defines added for IPv6 */
+#define OS_AF_INET4 AF_INET
+#define OS_AF_UNSPEC AF_UNSPEC
+#define OS_PF_UNSPEC PF_UNSPEC
+#define OS_PF_INET4 PF_INET
+#define OS_INET4_ADDRESS_LENGTH INET_ADDRSTRLEN
+#if defined(NI_MAXHOST)
+#define OSNIMAXHOST NI_MAXHOST
+#define OSNIMAXSERV NI_MAXSERV
+#else
+#define OSNIMAXHOST 1025
+#define OSNIMAXSERV 32
+#endif
+
+#if defined(AF_INET6)
+#define OS_AF_INET6 AF_INET6
+#define OS_PF_INET6 PF_INET6
+#define OS_INET6_ADDRESS_LENGTH INET6_ADDRSTRLEN
+#else
+#define OS_AF_INET6 -1
+#define OS_PF_INET6 -1
+#define OS_INET6_ADDRESS_LENGTH 46
+#endif
+/*platform structs */
+typedef struct hysocket_struct
+{
+ OSSOCKET sock;
+ U_16 family;
+} hysocket_struct;
+/* The sockets are now structs */
+#if defined(NO_LVALUE_CASTING)
+#define SOCKET_CAST(x) ((struct hysocket_struct*) x)->sock
+#else
+#define SOCKET_CAST(x) ((struct hysocket_struct*) x)->sock
+#endif
+typedef struct hysockaddr_struct
+{
+#if defined(IPv6_FUNCTION_SUPPORT)
+ OSSOCKADDR_STORAGE addr;
+#else
+ OSSOCKADDR addr;
+#endif
+} hysockaddr_struct;
+typedef struct hyhostent_struct
+{
+ OSHOSTENT *entity;
+} hyhostent_struct;
+typedef struct hyfdset_struct
+{
+ OSFDSET handle;
+} hyfdset_struct;
+typedef struct hytimeval_struct
+{
+ OSTIMEVAL time;
+} hytimeval_struct;
+typedef struct hylinger_struct
+{
+ OSLINGER linger;
+} hylinger_struct;
+typedef struct hyipmreq_struct
+{
+ int addrpair;
+} hyipmreq_struct;
+#define GET_HOST_BUFFER_SIZE 512
+/* The gethostBuffer is allocated bufferSize + EXTRA_SPACE, while gethostby*_r is only aware of bufferSize
+ * because there seems to be a bug on Linux 386 where gethostbyname_r writes past the end of the
+ * buffer. This bug has not been observed on other platforms, but EXTRA_SPACE is added anyway as a precaution.*/
+#define EXTRA_SPACE 128
+/*size is 16 because an IP string is "xxx.xxx.xxx.xxx" + 1 null character */
+#define NTOA_SIZE 16
+/** new structure for IPv6 mulitcast requests */
+typedef struct hyipv6_mreq_struct
+{
+#if defined(IPv6_FUNCTION_SUPPORT)
+ OSIPMREQ6 mreq;
+#else
+ int dummy;
+#endif
+} hyipv6_mreq_struct;
+/* structure for returning either and IPV4 or IPV6 ip address */
+typedef struct hyipAddress_struct
+{
+ union
+ {
+#if defined(IPv6_FUNCTION_SUPPORT)
+ U_8 bytes[sizeof (struct in6_addr)];
+#else
+ U_8 bytes[sizeof (struct in_addr)];
+#endif
+struct in_addr inAddr;
+#if defined(IPv6_FUNCTION_SUPPORT)
+ struct in6_addr in6Addr;
+#endif
+} addr;
+ U_32 length;
+ U_32 scope;
+} hyipAddress_struct;
+/* structure for returning network interface information */
+typedef struct hyNetworkInterface_struct
+{
+ char *name;
+ char *displayName;
+ U_32 numberAddresses;
+ U_32 index;
+ struct hyipAddress_struct *addresses;
+} hyNetworkInterface_struct;
+/* array of network interface structures */
+typedef struct hyNetworkInterfaceArray_struct
+{
+ U_32 length;
+ struct hyNetworkInterface_struct *elements;
+} hyNetworkInterfaceArray_struct;
+/** new structure for IPv6 addrinfo will either point to a hostent or
+ an addr info depending on the IPv6 support for this OS */
+typedef struct hyaddrinfo_struct
+{
+ void *addr_info;
+ int length;
+} hyaddrinfo_struct;
+#endif
+