
* sources.am, Makefile.in: Updated. * Makefile.am (nat_source_files): Removed natProxy.cc. * java/lang/reflect/natProxy.cc: Removed. * gnu/classpath/jdwp/VMFrame.java, gnu/classpath/jdwp/VMIdManager.java, gnu/classpath/jdwp/VMVirtualMachine.java, java/lang/reflect/VMProxy.java: New files. 2005-09-23 Thomas Fitzsimmons <fitzsim@redhat.com> * scripts/makemake.tcl (verbose): Add gnu/java/awt/peer/qt to BC list. 2005-09-23 Thomas Fitzsimmons <fitzsim@redhat.com> * gnu/java/net/DefaultContentHandlerFactory.java (getContent): Remove ClasspathToolkit references. 2005-09-23 Thomas Fitzsimmons <fitzsim@redhat.com> * gnu/awt/xlib/XCanvasPeer.java: Add new peer methods. * gnu/awt/xlib/XFramePeer.java: Likewise. * gnu/awt/xlib/XGraphicsConfiguration.java: Likewise. 2005-09-23 Thomas Fitzsimmons <fitzsim@redhat.com> * Makefile.am (libgcjawt_la_SOURCES): Remove jawt.c. Add classpath/native/jawt/jawt.c. * Makefile.in: Regenerate. * jawt.c: Remove file. * include/Makefile.am (tool_include__HEADERS): Remove jawt.h and jawt_md.h. Add ../classpath/include/jawt.h and ../classpath/include/jawt_md.h. * include/Makefile.in: Regenerate. * include/jawt.h: Regenerate. * include/jawt_md.h: Regenerate. From-SVN: r104586
1288 lines
48 KiB
C
1288 lines
48 KiB
C
/* target_generic_network.h - Native methods for network operations.
|
|
Copyright (C) 1998, 2004, 2005 Free Software Foundation, Inc.
|
|
|
|
This file is part of GNU Classpath.
|
|
|
|
GNU Classpath 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, or (at your option)
|
|
any later version.
|
|
|
|
GNU Classpath 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 GNU Classpath; see the file COPYING. If not, write to the
|
|
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
02110-1301 USA.
|
|
|
|
Linking this library statically or dynamically with other modules is
|
|
making a combined work based on this library. Thus, the terms and
|
|
conditions of the GNU General Public License cover the whole
|
|
combination.
|
|
|
|
As a special exception, the copyright holders of this library give you
|
|
permission to link this library with independent modules to produce an
|
|
executable, regardless of the license terms of these independent
|
|
modules, and to copy and distribute the resulting executable under
|
|
terms of your choice, provided that you also meet, for each linked
|
|
independent module, the terms and conditions of the license of that
|
|
module. An independent module is a module which is not derived from
|
|
or based on this library. If you modify this library, you may extend
|
|
this exception to your version of the library, but you are not
|
|
obligated to do so. If you do not wish to do so, delete this
|
|
exception statement from your version. */
|
|
|
|
/*
|
|
Description: generic target defintions of network functions
|
|
Systems : all
|
|
*/
|
|
|
|
#ifndef __TARGET_GENERIC_NETWORK__
|
|
#define __TARGET_GENERIC_NETWORK__
|
|
|
|
/* check if target_native_network.h included */
|
|
#ifndef __TARGET_NATIVE_NETWORK__
|
|
#error Do NOT INCLUDE generic target files! Include the corresponding native target files instead!
|
|
#endif
|
|
|
|
/****************************** Includes *******************************/
|
|
/* do not move; needed here because of some macro definitions */
|
|
#include "config.h"
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include "target_native.h"
|
|
|
|
/****************** Conditional compilation switches *******************/
|
|
|
|
/***************************** Constants *******************************/
|
|
|
|
/***************************** Datatypes *******************************/
|
|
|
|
/***************************** Variables *******************************/
|
|
|
|
/****************************** Macros *********************************/
|
|
|
|
/***********************************************************************\
|
|
* Name : TARGET_NATIVE_NETWORK_IPADDRESS_BYTES_TO_INT
|
|
* Purpose : convert IP adddress (4 parts) into integer (host-format
|
|
* 32bit)
|
|
* Input : n0,n1,n2,n3 - IP address parts
|
|
* Output : i - integer with IP address in host-format
|
|
* Return : -
|
|
* Side-effect: unknown
|
|
* Notes : -
|
|
\***********************************************************************/
|
|
|
|
#ifndef TARGET_NATIVE_NETWORK_IPADDRESS_BYTES_TO_INT
|
|
#define TARGET_NATIVE_NETWORK_IPADDRESS_BYTES_TO_INT(n0,n1,n2,n3,i) \
|
|
do { \
|
|
i=(((unsigned char)n0) << 24) | \
|
|
(((unsigned char)n1) << 16) | \
|
|
(((unsigned char)n2) << 8) | \
|
|
(((unsigned char)n3) << 0); \
|
|
} while (0)
|
|
#endif
|
|
|
|
/***********************************************************************\
|
|
* Name : TARGET_NATIVE_NETWORK_INT_TO_IPADDRESS_BYTES
|
|
* Purpose : convert IP adddress (4 parts) into integer (host-format
|
|
* 32bit)
|
|
* Input : n0,n1,n2,n3 - IP address parts
|
|
* Output : i - integer with IP address in host-format
|
|
* Return : -
|
|
* Side-effect: unknown
|
|
* Notes : -
|
|
\***********************************************************************/
|
|
|
|
#ifndef TARGET_NATIVE_NETWORK_INT_TO_IPADDRESS_BYTES
|
|
#define TARGET_NATIVE_NETWORK_INT_TO_IPADDRESS_BYTES(i,n0,n1,n2,n3) \
|
|
do { \
|
|
n0=(i & 0xFF000000) >> 24; \
|
|
n1=(i & 0x00FF0000) >> 16; \
|
|
n2=(i & 0x0000FF00) >> 8; \
|
|
n3=(i & 0x000000FF) >> 0; \
|
|
} while (0)
|
|
#endif
|
|
|
|
/***********************************************************************\
|
|
* Name : TARGET_NATIVE_NETWORK_GET_HOSTNAME
|
|
* Purpose : get hostname
|
|
* Input : maxNameLen - max. length of name
|
|
* Output : name - name (NUL terminated)
|
|
* result - TARGET_NATIVE_OK if no error occurred,
|
|
* TARGET_NATIVE_ERROR otherwise
|
|
* Return : -
|
|
* Side-effect: unknown
|
|
* Notes : -
|
|
\***********************************************************************/
|
|
|
|
#ifndef TARGET_NATIVE_NETWORK_GET_HOSTNAME
|
|
#include <unistd.h>
|
|
#define TARGET_NATIVE_NETWORK_GET_HOSTNAME(name,maxNameLen,result) \
|
|
do { \
|
|
result=(gethostname(name,maxNameLen-1)==0)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \
|
|
name[maxNameLen-1]='\0'; \
|
|
} while (0)
|
|
#endif
|
|
|
|
/***********************************************************************\
|
|
* Name : TARGET_NATIVE_NETWORK_GET_HOSTNAME_BY_ADDRESS
|
|
* Purpose : get hostname by address
|
|
* Input : address - IP address (32bit, NOT network byte order!)
|
|
* maxNameLen - max. length of name
|
|
* Output : name - name (NUL terminated)
|
|
* result - TARGET_NATIVE_OK if no error occurred,
|
|
* TARGET_NATIVE_ERROR otherwise
|
|
* Return : -
|
|
* Side-effect: unknown
|
|
* Notes : -
|
|
\***********************************************************************/
|
|
|
|
/* XXX NYI??? reentrant? */
|
|
#ifndef TARGET_NATIVE_NETWORK_GET_HOSTNAME_BY_ADDRESS
|
|
#include <netdb.h>
|
|
#define TARGET_NATIVE_NETWORK_GET_HOSTNAME_BY_ADDRESS(address,name,maxNameLen,result) \
|
|
do { \
|
|
int __networkAddress; \
|
|
struct hostent *__hostEntry; \
|
|
\
|
|
__networkAddress=htonl(address); \
|
|
__hostEntry = gethostbyaddr((char*)&__networkAddress,sizeof(__networkAddress),AF_INET); \
|
|
if (__hostEntry!=NULL) \
|
|
{ \
|
|
strncpy(name,__hostEntry->h_name,maxNameLen-1); \
|
|
name[maxNameLen]='\0'; \
|
|
result=TARGET_NATIVE_OK; \
|
|
} \
|
|
else \
|
|
{ \
|
|
result=TARGET_NATIVE_ERROR; \
|
|
} \
|
|
} while (0)
|
|
#endif
|
|
|
|
/***********************************************************************\
|
|
* Name : TARGET_NATIVE_NETWORK_GET_HOSTNAME_BY_NAME
|
|
* Purpose : get hostname by name
|
|
* Input : name - hostname
|
|
* maxAddressSize - max. size of address array
|
|
* Output : addresses - host adddresses (array, NOT in network
|
|
* byte order!)
|
|
* addressCount - number of entries in address array
|
|
* result - TARGET_NATIVE_OK if no error occurred,
|
|
* TARGET_NATIVE_ERROR otherwise
|
|
* Return : -
|
|
* Side-effect: unknown
|
|
* Notes : -
|
|
\***********************************************************************/
|
|
|
|
/* XXX NYI??? reentrant? */
|
|
#ifndef TARGET_NATIVE_NETWORK_GET_HOSTNAME_BY_NAME
|
|
#include <netdb.h>
|
|
#define TARGET_NATIVE_NETWORK_GET_HOSTNAME_BY_NAME(name,addresses,maxAddressSize,addressCount,result) \
|
|
do { \
|
|
struct hostent *__hostEntry; \
|
|
\
|
|
addressCount=0; \
|
|
\
|
|
__hostEntry = gethostbyname(name); \
|
|
if (__hostEntry!=NULL) \
|
|
{ \
|
|
while ((addressCount<maxAddressSize) && (__hostEntry->h_addr_list[addressCount]!=NULL)) \
|
|
{ \
|
|
addresses[addressCount]=ntohl(*(int*)(__hostEntry->h_addr_list[addressCount])); \
|
|
addressCount++; \
|
|
} \
|
|
result=TARGET_NATIVE_OK; \
|
|
} \
|
|
else \
|
|
{ \
|
|
result=TARGET_NATIVE_ERROR; \
|
|
} \
|
|
} while (0)
|
|
#endif
|
|
|
|
/***********************************************************************\
|
|
* Name : TARGET_NATIVE_NETWORK_SOCKET_OPEN_STREAM
|
|
* Purpose : open stream socket
|
|
* Input : -
|
|
* Output : socketDescriptor - socket descriptor
|
|
* result - TARGET_NATIVE_OK if no error occurred,
|
|
* TARGET_NATIVE_ERROR otherwise
|
|
* Return : -
|
|
* Side-effect: unknown
|
|
* Notes : -
|
|
\***********************************************************************/
|
|
|
|
#ifndef TARGET_NATIVE_NETWORK_SOCKET_OPEN_STREAM
|
|
#include <sys/types.h>
|
|
#include <sys/socket.h>
|
|
#include <fcntl.h>
|
|
#define TARGET_NATIVE_NETWORK_SOCKET_OPEN_STREAM(socketDescriptor,result) \
|
|
do { \
|
|
socketDescriptor=socket(AF_INET,SOCK_STREAM,0); \
|
|
fcntl(socketDescriptor,F_SETFD,FD_CLOEXEC); \
|
|
result=(socketDescriptor!=-1)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \
|
|
} while (0)
|
|
#endif
|
|
|
|
/***********************************************************************\
|
|
* Name : TARGET_NATIVE_NETWORK_SOCKET_OPEN_DATAGRAM
|
|
* Purpose : open datagram socket
|
|
* Input : -
|
|
* Output : socketDescriptor - socket descriptor
|
|
* result - TARGET_NATIVE_OK if no error occurred,
|
|
* TARGET_NATIVE_ERROR otherwise
|
|
* Return : -
|
|
* Side-effect: unknown
|
|
* Notes : -
|
|
\***********************************************************************/
|
|
|
|
#ifndef TARGET_NATIVE_NETWORK_SOCKET_OPEN_DATAGRAM
|
|
#include <sys/types.h>
|
|
#include <sys/socket.h>
|
|
#include <fcntl.h>
|
|
#define TARGET_NATIVE_NETWORK_SOCKET_OPEN_DATAGRAM(socketDescriptor,result) \
|
|
do { \
|
|
socketDescriptor=socket(AF_INET,SOCK_DGRAM,0); \
|
|
fcntl(socketDescriptor,F_SETFD,FD_CLOEXEC); \
|
|
result=(socketDescriptor!=-1)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \
|
|
} while (0)
|
|
#endif
|
|
|
|
/***********************************************************************\
|
|
* Name : TARGET_NATIVE_NETWORK_SOCKET_CLOSE
|
|
* Purpose : close socket
|
|
* Input : socketDescriptor - socket descriptor
|
|
* Output : result - TARGET_NATIVE_OK if no error occurred,
|
|
* TARGET_NATIVE_ERROR otherwise
|
|
* Return : -
|
|
* Side-effect: unknown
|
|
* Notes : -
|
|
\***********************************************************************/
|
|
|
|
#ifndef TARGET_NATIVE_NETWORK_SOCKET_CLOSE
|
|
#include <unistd.h>
|
|
#define TARGET_NATIVE_NETWORK_SOCKET_CLOSE(socketDescriptor,result) \
|
|
do { \
|
|
result=(close(socketDescriptor)==0)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \
|
|
} while (0)
|
|
#endif
|
|
|
|
/***********************************************************************\
|
|
* Name : TARGET_NATIVE_NETWORK_SOCKET_CONNECT
|
|
* Purpose : connect socket
|
|
* Input : socketDescriptor - socket descriptor
|
|
* address - address (network format???)
|
|
* port - port number (NOT in network byte order!)
|
|
* Output : result - TARGET_NATIVE_OK if no error occurred,
|
|
* TARGET_NATIVE_ERROR otherwise
|
|
* Return : -
|
|
* Side-effect: unknown
|
|
* Notes : -
|
|
\***********************************************************************/
|
|
|
|
#ifndef TARGET_NATIVE_NETWORK_SOCKET_CONNECT
|
|
#include <sys/types.h>
|
|
#include <sys/socket.h>
|
|
#include <netinet/in.h>
|
|
#define TARGET_NATIVE_NETWORK_SOCKET_CONNECT(socketDescriptor,address,port,result) \
|
|
do { \
|
|
struct sockaddr_in __socketAddress; \
|
|
\
|
|
memset(&__socketAddress,0,sizeof(__socketAddress)); \
|
|
__socketAddress.sin_family = AF_INET; \
|
|
__socketAddress.sin_addr.s_addr = htonl(address); \
|
|
__socketAddress.sin_port = htons(((short)port)); \
|
|
\
|
|
result=(connect(socketDescriptor,(struct sockaddr*)&__socketAddress,sizeof(__socketAddress))==0)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \
|
|
} while (0)
|
|
#endif
|
|
|
|
/***********************************************************************\
|
|
* Name : TARGET_NATIVE_NETWORK_SOCKET_BIND
|
|
* Purpose : bind socket
|
|
* Input : socketDescriptor - socket descriptor
|
|
* address - address (NOT ??? in network byte order!)
|
|
* port - port (NOT in network byte order!)
|
|
* Output : result - TARGET_NATIVE_OK if no error occurred,
|
|
* TARGET_NATIVE_ERROR otherwise
|
|
* Return : -
|
|
* Side-effect: unknown
|
|
* Notes : -
|
|
\***********************************************************************/
|
|
|
|
/* XXX ??? address in network byte order? */
|
|
#ifndef TARGET_NATIVE_NETWORK_SOCKET_BIND
|
|
#include <sys/types.h>
|
|
#include <sys/socket.h>
|
|
#include <netinet/in.h>
|
|
#define TARGET_NATIVE_NETWORK_SOCKET_BIND(socketDescriptor,address,port,result) \
|
|
do { \
|
|
struct sockaddr_in __socketAddress; \
|
|
\
|
|
memset(&__socketAddress,0,sizeof(__socketAddress)); \
|
|
__socketAddress.sin_family = AF_INET; \
|
|
__socketAddress.sin_addr.s_addr = htonl(address); \
|
|
__socketAddress.sin_port = htons(((short)port)); \
|
|
\
|
|
result=(bind(socketDescriptor,(struct sockaddr*)&__socketAddress,sizeof(__socketAddress))==0)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \
|
|
} while (0)
|
|
#endif
|
|
|
|
/***********************************************************************\
|
|
* Name : TARGET_NATIVE_NETWORK_SOCKET_LISTEN
|
|
* Purpose : listen socket
|
|
* Input : socketDescriptor - socket descriptor
|
|
* maxQueueLength - max. number of pending connections
|
|
* Output : result - TARGET_NATIVE_OK if no error occurred,
|
|
* TARGET_NATIVE_ERROR otherwise
|
|
* Return : -
|
|
* Side-effect: unknown
|
|
* Notes : -
|
|
\***********************************************************************/
|
|
|
|
/* XXX ??? address in network byte order? */
|
|
#ifndef TARGET_NATIVE_NETWORK_SOCKET_LISTEN
|
|
#include <sys/socket.h>
|
|
#define TARGET_NATIVE_NETWORK_SOCKET_LISTEN(socketDescriptor,maxQueueLength,result) \
|
|
do { \
|
|
result=(listen(socketDescriptor,maxQueueLength)==0)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \
|
|
} while (0)
|
|
#endif
|
|
|
|
/***********************************************************************\
|
|
* Name : TARGET_NATIVE_NETWORK_SOCKET_ACCEPT
|
|
* Purpose : accept socket
|
|
* Input : socketDescriptor - socket descriptor
|
|
* Output : result - TARGET_NATIVE_OK if no error occurred,
|
|
* TARGET_NATIVE_ERROR otherwise
|
|
* Return : -
|
|
* Side-effect: unknown
|
|
* Notes : -
|
|
\***********************************************************************/
|
|
|
|
/* XXX ??? address in network byte order? */
|
|
#ifndef TARGET_NATIVE_NETWORK_SOCKET_ACCEPT
|
|
#include <sys/types.h>
|
|
#include <sys/socket.h>
|
|
#include <netinet/in.h>
|
|
#define TARGET_NATIVE_NETWORK_SOCKET_ACCEPT(socketDescriptor,newSocketDescriptor,result) \
|
|
do { \
|
|
struct sockaddr_in __socketAddress; \
|
|
socklen_t __socketAddressLength; \
|
|
\
|
|
memset(&__socketAddress,0,sizeof(__socketAddress)); \
|
|
__socketAddressLength=sizeof(__socketAddress); \
|
|
newSocketDescriptor=accept(socketDescriptor,(struct sockaddr*)&__socketAddress,&__socketAddressLength); \
|
|
result=(newSocketDescriptor!=-1)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \
|
|
} while (0)
|
|
#endif
|
|
|
|
/***********************************************************************\
|
|
* Name : TARGET_NATIVE_NETWORK_SOCKET_GET_LOCAL_INFO
|
|
* Purpose : get local socket data info
|
|
* Input : socketDescriptor - socket descriptor
|
|
* Output : localAddress - local address (NOT in network byte order!)
|
|
* localPort - local port number (NOT in network byte order!)
|
|
* result - TARGET_NATIVE_OK if no error occurred,
|
|
* TARGET_NATIVE_ERROR otherwise
|
|
* Return : -
|
|
* Side-effect: unknown
|
|
* Notes : -
|
|
\***********************************************************************/
|
|
|
|
#ifndef TARGET_NATIVE_NETWORK_SOCKET_GET_LOCAL_INFO
|
|
#include <sys/socket.h>
|
|
#include <netinet/in.h>
|
|
#define TARGET_NATIVE_NETWORK_SOCKET_GET_LOCAL_INFO(socketDescriptor,localAddress,localPort,result) \
|
|
do { \
|
|
struct sockaddr_in __socketAddress; \
|
|
socklen_t __socketAddressLength; \
|
|
\
|
|
localAddress=0; \
|
|
localPort =0; \
|
|
\
|
|
__socketAddressLength=sizeof(__socketAddress); \
|
|
result=(getsockname(socketDescriptor,(struct sockaddr*)&__socketAddress,&__socketAddressLength)==0)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \
|
|
if (result==TARGET_NATIVE_OK) \
|
|
{ \
|
|
localAddress=ntohl(__socketAddress.sin_addr.s_addr); \
|
|
localPort =ntohs(__socketAddress.sin_port); \
|
|
} \
|
|
} while (0)
|
|
#endif
|
|
|
|
/***********************************************************************\
|
|
* Name : TARGET_NATIVE_NETWORK_SOCKET_GET_REMOTE_INFO
|
|
* Purpose : get remote socket data info
|
|
* Input : socketDescriptor - socket descriptor
|
|
* Output : remoteAddress - remote address (NOT in network byte order!)
|
|
* remotePort - remote port number (NOT in network byte order!)
|
|
* : result - TARGET_NATIVE_OK if no error occurred,
|
|
* TARGET_NATIVE_ERROR otherwise
|
|
* Return : -
|
|
* Side-effect: unknown
|
|
* Notes : -
|
|
\***********************************************************************/
|
|
|
|
#ifndef TARGET_NATIVE_NETWORK_SOCKET_GET_REMOTE_INFO
|
|
#include <sys/socket.h>
|
|
#include <netinet/in.h>
|
|
#define TARGET_NATIVE_NETWORK_SOCKET_GET_REMOTE_INFO(socketDescriptor,remoteAddress,remotePort,result) \
|
|
do { \
|
|
struct sockaddr_in __socketAddress; \
|
|
socklen_t __socketAddressLength; \
|
|
\
|
|
remoteAddress=0; \
|
|
remotePort =0; \
|
|
\
|
|
__socketAddressLength=sizeof(__socketAddress); \
|
|
result=(getpeername(socketDescriptor,(struct sockaddr*)&__socketAddress,&__socketAddressLength)==0)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \
|
|
if (result==TARGET_NATIVE_OK) \
|
|
{ \
|
|
remoteAddress=ntohl(__socketAddress.sin_addr.s_addr); \
|
|
remotePort =ntohs(__socketAddress.sin_port); \
|
|
} \
|
|
} while (0)
|
|
#endif
|
|
|
|
/***********************************************************************\
|
|
* Name : TARGET_NATIVE_NETWORK_SOCKET_RECEIVE_AVAILABLE
|
|
* Purpose : get number of available bytes for receive
|
|
* Input : socketDescriptor - socket descriptor
|
|
* Output : bytesAvailable - available bytes for receive
|
|
* : result - TARGET_NATIVE_OK if no error occurred,
|
|
* TARGET_NATIVE_ERROR otherwise
|
|
* Return : -
|
|
* Side-effect: unknown
|
|
* Notes : -
|
|
\***********************************************************************/
|
|
|
|
#ifndef TARGET_NATIVE_NETWORK_SOCKET_RECEIVE_AVAILABLE
|
|
#include <sys/ioctl.h>
|
|
#define TARGET_NATIVE_NETWORK_SOCKET_RECEIVE_AVAILABLE(socketDescriptor,bytesAvailable,result) \
|
|
do { \
|
|
int __value; \
|
|
\
|
|
bytesAvailable=0; \
|
|
\
|
|
result=(ioctl(socketDescriptor,FIONREAD,&__value)==0)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \
|
|
if (result==TARGET_NATIVE_OK) \
|
|
{ \
|
|
bytesAvailable=__value; \
|
|
} \
|
|
} while (0)
|
|
#endif
|
|
|
|
/***********************************************************************\
|
|
* Name : TARGET_NATIVE_NETWORK_SOCKET_RECEIVE
|
|
* Purpose : receive data from socket
|
|
* Input : socketDescriptor - socket descriptor
|
|
* maxLength - max. size of bfufer
|
|
* Output : buffer - received data
|
|
* bytesReceive - length of received data
|
|
* Return : -
|
|
* Side-effect: unknown
|
|
* Notes : -
|
|
\***********************************************************************/
|
|
|
|
#ifndef TARGET_NATIVE_NETWORK_SOCKET_RECEIVE
|
|
#include <sys/types.h>
|
|
#include <sys/socket.h>
|
|
#include <netinet/in.h>
|
|
#define TARGET_NATIVE_NETWORK_SOCKET_RECEIVE(socketDescriptor,buffer,maxLength,bytesReceived) \
|
|
do { \
|
|
struct sockaddr_in __socketAddress; \
|
|
socklen_t __socketAddressLength; \
|
|
\
|
|
memset(&__socketAddress,0,sizeof(__socketAddress)); \
|
|
__socketAddressLength=sizeof(__socketAddress); \
|
|
bytesReceived=recv(socketDescriptor,buffer,maxLength,0); \
|
|
} while (0)
|
|
#endif
|
|
|
|
/***********************************************************************\
|
|
* Name : TARGET_NATIVE_NETWORK_SOCKET_RECEIVE_WITH_ADDRESS_PORT
|
|
* Purpose : receive data from socket
|
|
* Input : socketDescriptor - socket descriptor
|
|
* maxLength - max. size of bfufer
|
|
* Output : buffer - received data
|
|
* address - from address (NOT in network byte order!)
|
|
* port - from port (NOT in network byte order!)
|
|
* bytesReceive - length of received data
|
|
* Return : -
|
|
* Side-effect: unknown
|
|
* Notes : -
|
|
\***********************************************************************/
|
|
|
|
#ifndef TARGET_NATIVE_NETWORK_SOCKET_RECEIVE_WITH_ADDRESS_PORT
|
|
#include <sys/types.h>
|
|
#include <sys/socket.h>
|
|
#include <netinet/in.h>
|
|
#define TARGET_NATIVE_NETWORK_SOCKET_RECEIVE_WITH_ADDRESS_PORT(socketDescriptor,buffer,maxLength,address,port,bytesReceived) \
|
|
do { \
|
|
struct sockaddr_in __socketAddress; \
|
|
socklen_t __socketAddressLength; \
|
|
\
|
|
port=0; \
|
|
\
|
|
memset(&__socketAddress,0,sizeof(__socketAddress)); \
|
|
__socketAddressLength=sizeof(__socketAddress); \
|
|
bytesReceived=recvfrom(socketDescriptor,buffer,maxLength,0,(struct sockaddr*)&__socketAddress,&__socketAddressLength); \
|
|
if (__socketAddressLength==sizeof(__socketAddress)) \
|
|
{ \
|
|
address=ntohl(__socketAddress.sin_addr.s_addr); \
|
|
port =ntohs(__socketAddress.sin_port); \
|
|
} \
|
|
} while (0)
|
|
#endif
|
|
|
|
/***********************************************************************\
|
|
* Name : TARGET_NATIVE_NETWORK_SOCKET_SEND
|
|
* Purpose : send data to socket
|
|
* Input : socketDescriptor - socket descriptor
|
|
* : buffer - data to send
|
|
* length - length of data to send
|
|
* Output : bytesSent - number of bytes sent, -1 otherwise
|
|
* Side-effect: unknown
|
|
* Notes : -
|
|
\***********************************************************************/
|
|
|
|
#ifndef TARGET_NATIVE_NETWORK_SOCKET_SEND
|
|
#include <sys/types.h>
|
|
#include <sys/socket.h>
|
|
#include <netinet/in.h>
|
|
#define TARGET_NATIVE_NETWORK_SOCKET_SEND(socketDescriptor,buffer,length,bytesSent) \
|
|
do { \
|
|
bytesSent=send(socketDescriptor,buffer,length,0); \
|
|
} while (0)
|
|
#endif
|
|
|
|
/***********************************************************************\
|
|
* Name : TARGET_NATIVE_NETWORK_SOCKET_SEND_WITH_ADDRESS_PORT
|
|
* Purpose : send data to socket
|
|
* Input : socketDescriptor - socket descriptor
|
|
* : buffer - data to send
|
|
* length - length of data to send
|
|
* Address - to address (NOT in network byte order!)
|
|
* Port - to port (NOT in network byte order!)
|
|
* Output : bytesSent - number of bytes sent, -1 otherwise
|
|
* Side-effect: unknown
|
|
* Notes : -
|
|
\***********************************************************************/
|
|
|
|
#ifndef TARGET_NATIVE_NETWORK_SOCKET_SEND_WITH_ADDRESS_PORT
|
|
#include <sys/types.h>
|
|
#include <sys/socket.h>
|
|
#include <netinet/in.h>
|
|
#define TARGET_NATIVE_NETWORK_SOCKET_SEND_WITH_ADDRESS_PORT(socketDescriptor,buffer,length,address,port,bytesSent) \
|
|
do { \
|
|
struct sockaddr_in __socketAddress; \
|
|
\
|
|
memset(&__socketAddress,0,sizeof(__socketAddress)); \
|
|
__socketAddress.sin_family = AF_INET; \
|
|
__socketAddress.sin_addr.s_addr = htonl(address); \
|
|
__socketAddress.sin_port = htons((short)port); \
|
|
bytesSent=sendto(socketDescriptor,buffer,length,0,(struct sockaddr*)&__socketAddress,sizeof(__socketAddress)); \
|
|
} while (0)
|
|
#endif
|
|
|
|
/***********************************************************************\
|
|
* Name : TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_TCP_NODELAY
|
|
* Purpose : set socket option TCP_NODELAY
|
|
* Input : socketDescriptor - socket descriptor
|
|
* flag - 1 or 0
|
|
* Output : result - TARGET_NATIVE_OK if no error occurred,
|
|
* TARGET_NATIVE_ERROR otherwise
|
|
* Return : -
|
|
* Side-effect: unknown
|
|
* Notes : -
|
|
\***********************************************************************/
|
|
|
|
#ifndef TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_TCP_NODELAY
|
|
#include <sys/types.h>
|
|
#include <sys/socket.h>
|
|
#include <netinet/tcp.h>
|
|
#define TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_TCP_NODELAY(socketDescriptor,flag,result) \
|
|
do { \
|
|
int __value; \
|
|
\
|
|
__value=flag; \
|
|
result=(setsockopt(socketDescriptor,IPPROTO_TCP,TCP_NODELAY,&__value,sizeof(__value))==0)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \
|
|
} while (0)
|
|
#endif
|
|
|
|
/***********************************************************************\
|
|
* Name : TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_SO_LINGER
|
|
* Purpose : set socket option SO_LINGER
|
|
* Input : socketDescriptor - socket descriptor
|
|
* flag - 1 or 0
|
|
* value - linger value
|
|
* Output : result - TARGET_NATIVE_OK if no error occurred,
|
|
* TARGET_NATIVE_ERROR otherwise
|
|
* Return : -
|
|
* Side-effect: unknown
|
|
* Notes : -
|
|
\***********************************************************************/
|
|
|
|
#ifndef TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_SO_LINGER
|
|
#include <sys/types.h>
|
|
#include <sys/socket.h>
|
|
#define TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_SO_LINGER(socketDescriptor,flag,value,result) \
|
|
do { \
|
|
struct linger __linger; \
|
|
\
|
|
memset(&__linger,0,sizeof(__linger)); \
|
|
if (flag) \
|
|
{ \
|
|
__linger.l_onoff=0; \
|
|
} \
|
|
else \
|
|
{ \
|
|
__linger.l_linger=value; \
|
|
__linger.l_onoff =1; \
|
|
} \
|
|
result=(setsockopt(socketDescriptor,SOL_SOCKET,SO_LINGER,&__linger,sizeof(__linger))==0)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \
|
|
} while (0)
|
|
#endif
|
|
|
|
/***********************************************************************\
|
|
* Name : TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_SO_TIMEOUT
|
|
* Purpose : set socket option SO_TIMEOUT
|
|
* Input : socketDescriptor - socket descriptor
|
|
* flag - 1 or 0
|
|
* Output : result - TARGET_NATIVE_OK if no error occurred,
|
|
* TARGET_NATIVE_ERROR otherwise
|
|
* Return : -
|
|
* Side-effect: unknown
|
|
* Notes : -
|
|
\***********************************************************************/
|
|
|
|
#ifndef TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_SO_TIMEOUT
|
|
#include <sys/types.h>
|
|
#include <sys/socket.h>
|
|
#if TIME_WITH_SYS_TIME
|
|
# include <sys/time.h>
|
|
# include <time.h>
|
|
#else
|
|
# if HAVE_SYS_TIME_H
|
|
# include <sys/time.h>
|
|
# else
|
|
# include <time.h>
|
|
# endif
|
|
#endif
|
|
#define TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_SO_TIMEOUT(socketDescriptor,flag,result) \
|
|
do { \
|
|
struct timeval __value; \
|
|
\
|
|
__value.tv_sec = flag / 1000; \
|
|
__value.tv_usec = (flag % 1000) * 1000; \
|
|
result=(setsockopt(socketDescriptor,SOL_SOCKET,SO_TIMEOUT,&__value,sizeof(__value))==0)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \
|
|
} while (0)
|
|
#endif
|
|
|
|
/***********************************************************************\
|
|
* Name : TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_SO_SNDBUF
|
|
* Purpose : set socket option SO_SNDBUF
|
|
* Input : socketDescriptor - socket descriptor
|
|
* size - size of send buffer
|
|
* Output : result - TARGET_NATIVE_OK if no error occurred,
|
|
* TARGET_NATIVE_ERROR otherwise
|
|
* Return : -
|
|
* Side-effect: unknown
|
|
* Notes : -
|
|
\***********************************************************************/
|
|
|
|
#ifndef TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_SO_SNDBUF
|
|
#include <sys/types.h>
|
|
#include <sys/socket.h>
|
|
#define TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_SO_SNDBUF(socketDescriptor,size,result) \
|
|
do { \
|
|
int __value; \
|
|
\
|
|
__value=size; \
|
|
result=(setsockopt(socketDescriptor,SOL_SOCKET,SO_SNDBUF,&__value,sizeof(__value))==0)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \
|
|
} while (0)
|
|
#endif
|
|
|
|
/***********************************************************************\
|
|
* Name : TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_SO_RCDBUF
|
|
* Purpose : set socket option SO_RCDBUF
|
|
* Input : socketDescriptor - socket descriptor
|
|
* size - size of receive buffer
|
|
* Output : result - TARGET_NATIVE_OK if no error occurred,
|
|
* TARGET_NATIVE_ERROR otherwise
|
|
* Return : -
|
|
* Side-effect: unknown
|
|
* Notes : -
|
|
\***********************************************************************/
|
|
|
|
#ifndef TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_SO_RCDBUF
|
|
#include <sys/types.h>
|
|
#include <sys/socket.h>
|
|
#define TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_SO_RCDBUF(socketDescriptor,size,result) \
|
|
do { \
|
|
int __value; \
|
|
\
|
|
__value=size; \
|
|
result=(setsockopt(socketDescriptor,SOL_SOCKET,SO_RCVBUF,&__value,sizeof(__value))==0)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \
|
|
} while (0)
|
|
#endif
|
|
|
|
/***********************************************************************\
|
|
* Name : TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_IP_TTL
|
|
* Purpose : set socket option IP_TTL
|
|
* Input : socketDescriptor - socket descriptor
|
|
* value - value
|
|
* Output : result - TARGET_NATIVE_OK if no error occurred,
|
|
* TARGET_NATIVE_ERROR otherwise
|
|
* Return : -
|
|
* Side-effect: unknown
|
|
* Notes : -
|
|
\***********************************************************************/
|
|
|
|
#ifndef TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_IP_TTL
|
|
#include <sys/types.h>
|
|
#include <sys/socket.h>
|
|
#include <netinet/in.h>
|
|
#define TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_IP_TTL(socketDescriptor,value,result) \
|
|
do { \
|
|
int __value; \
|
|
\
|
|
__value=value; \
|
|
result=(setsockopt(socketDescriptor,IPPROTO_IP,IP_TTL,&__value,sizeof(__value))==0)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \
|
|
} while (0)
|
|
#endif
|
|
|
|
/***********************************************************************\
|
|
* Name : TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_IP_MULTICAST_IF
|
|
* Purpose : set socket option IP_MULTICAST_IF
|
|
* Input : socketDescriptor - socket descriptor
|
|
* address - integer with IP address in host-format
|
|
* Output : result - TARGET_NATIVE_OK if no error occurred,
|
|
* TARGET_NATIVE_ERROR otherwise
|
|
* Return : -
|
|
* Side-effect: unknown
|
|
* Notes : -
|
|
\***********************************************************************/
|
|
|
|
#ifndef TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_IP_MULTICAST_IF
|
|
#include <sys/types.h>
|
|
#include <sys/socket.h>
|
|
#include <netinet/in.h>
|
|
#define TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_IP_MULTICAST_IF(socketDescriptor,address,result) \
|
|
do { \
|
|
struct sockaddr_in __socketAddress; \
|
|
\
|
|
memset(&__socketAddress,0,sizeof(__socketAddress)); \
|
|
__socketAddress.sin_family = AF_INET; \
|
|
__socketAddress.sin_addr.s_addr = htonl(address); \
|
|
result=(setsockopt(socketDescriptor,IPPROTO_IP,IP_MULTICAST_IF,&__socketAddress,sizeof(__socketAddress))==0)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \
|
|
} while (0)
|
|
#endif
|
|
|
|
/***********************************************************************\
|
|
* Name : TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_REUSE_ADDRESS
|
|
* Purpose : set socket option REUSE_ADDRESS
|
|
* Input : socketDescriptor - socket descriptor
|
|
* flag - 1 or 0
|
|
* Output : result - TARGET_NATIVE_OK if no error occurred,
|
|
* TARGET_NATIVE_ERROR otherwise
|
|
* Return : -
|
|
* Side-effect: unknown
|
|
* Notes : -
|
|
\***********************************************************************/
|
|
|
|
#ifndef TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_REUSE_ADDRESS
|
|
#include <sys/types.h>
|
|
#include <sys/socket.h>
|
|
#include <netinet/in.h>
|
|
#define TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_REUSE_ADDRESS(socketDescriptor,flag,result) \
|
|
do { \
|
|
int __value; \
|
|
\
|
|
__value=flag; \
|
|
result=(setsockopt(socketDescriptor,SOL_SOCKET,SO_REUSEADDR,&__value,sizeof(__value))==0)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \
|
|
} while (0)
|
|
#endif
|
|
|
|
/***********************************************************************\
|
|
* Name : TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_ADD_MEMBERSHIP
|
|
* Purpose : set socket option IP_ADD_MEMBERSHIP
|
|
* Input : socketDescriptor - socket descriptor
|
|
* address - network address (host-format)
|
|
* Output : result - TARGET_NATIVE_OK if no error occurred,
|
|
* TARGET_NATIVE_ERROR otherwise
|
|
* Return : -
|
|
* Side-effect: unknown
|
|
* Notes : -
|
|
\***********************************************************************/
|
|
|
|
#ifndef TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_ADD_MEMBERSHIP
|
|
#include <sys/types.h>
|
|
#include <sys/socket.h>
|
|
#include <netinet/in.h>
|
|
#define TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_ADD_MEMBERSHIP(socketDescriptor,address,result) \
|
|
do { \
|
|
struct ip_mreq __request; \
|
|
\
|
|
memset(&__request,0,sizeof(__request)); \
|
|
__request.imr_multiaddr.s_addr=htonl(address); \
|
|
__request.imr_interface.s_addr=INADDR_ANY; \
|
|
result=(setsockopt(socketDescriptor,IPPROTO_IP,IP_ADD_MEMBERSHIP,&__request,sizeof(__request))==0)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \
|
|
} while (0)
|
|
#endif
|
|
|
|
/***********************************************************************\
|
|
* Name : TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_DROP_MEMBERSHIP
|
|
* Purpose : set socket option IP_DROP_MEMBERSHIP
|
|
* Input : socketDescriptor - socket descriptor
|
|
* address - network address (host-format)
|
|
* Output : result - TARGET_NATIVE_OK if no error occurred,
|
|
* TARGET_NATIVE_ERROR otherwise
|
|
* Return : -
|
|
* Side-effect: unknown
|
|
* Notes : -
|
|
\***********************************************************************/
|
|
|
|
#ifndef TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_DROP_MEMBERSHIP
|
|
#include <sys/types.h>
|
|
#include <sys/socket.h>
|
|
#include <netinet/in.h>
|
|
#define TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_DROP_MEMBERSHIP(socketDescriptor,address,result) \
|
|
do { \
|
|
struct ip_mreq __request; \
|
|
\
|
|
memset(&__request,0,sizeof(__request)); \
|
|
__request.imr_multiaddr.s_addr=htonl(address); \
|
|
__request.imr_interface.s_addr=INADDR_ANY; \
|
|
result=(setsockopt(socketDescriptor,IPPROTO_IP,IP_DROP_MEMBERSHIP,&__request,sizeof(__request))==0)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \
|
|
} while (0)
|
|
#endif
|
|
|
|
/***********************************************************************\
|
|
* Name : TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_KEEP_ALIVE
|
|
* Purpose : set socket option KEEP_ALIVE
|
|
* Input : socketDescriptor - socket descriptor
|
|
* flag - 1 or 0
|
|
* Output : result - TARGET_NATIVE_OK if no error occurred,
|
|
* TARGET_NATIVE_ERROR otherwise
|
|
* Return : -
|
|
* Side-effect: unknown
|
|
* Notes : -
|
|
\***********************************************************************/
|
|
|
|
#ifndef TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_KEEP_ALIVE
|
|
#include <sys/types.h>
|
|
#include <sys/socket.h>
|
|
#include <netinet/in.h>
|
|
#define TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_KEEP_ALIVE(socketDescriptor,flag,result) \
|
|
do { \
|
|
int __value; \
|
|
\
|
|
__value=flag; \
|
|
result=(setsockopt(socketDescriptor,SOL_SOCKET,SO_KEEPALIVE,&__value,sizeof(__value))==0)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \
|
|
} while (0)
|
|
#endif
|
|
|
|
/***********************************************************************\
|
|
* Name : TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_BROADCAST
|
|
* Purpose : set socket option SO_BROADCAST
|
|
* Input : socketDescriptor - socket descriptor
|
|
* flag - 1 or 0
|
|
* Output : result - TARGET_NATIVE_OK if no error occurred,
|
|
* TARGET_NATIVE_ERROR otherwise
|
|
* Return : -
|
|
* Side-effect: unknown
|
|
* Notes : -
|
|
\***********************************************************************/
|
|
|
|
#ifndef TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_BROADCAST
|
|
#include <sys/types.h>
|
|
#include <sys/socket.h>
|
|
#include <netinet/tcp.h>
|
|
#define TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_BROADCAST(socketDescriptor,flag,result) \
|
|
do { \
|
|
int __value; \
|
|
\
|
|
__value=flag; \
|
|
result=(setsockopt(socketDescriptor,SOL_SOCKET,SO_BROADCAST,&__value,sizeof(__value))==0)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \
|
|
} while (0)
|
|
#endif
|
|
|
|
/*---------------------------------------------------------------------*/
|
|
|
|
/***********************************************************************\
|
|
* Name : TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_TCP_NODELAY
|
|
* Purpose : get socket option TCP_NODELAY
|
|
* Input : socketDescriptor - socket descriptor
|
|
* Output : flag - 1 or 0
|
|
* result - TARGET_NATIVE_OK if no error occurred,
|
|
* TARGET_NATIVE_ERROR otherwise
|
|
* Return : -
|
|
* Side-effect: unknown
|
|
* Notes : -
|
|
\***********************************************************************/
|
|
|
|
#ifndef TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_TCP_NODELAY
|
|
#include <sys/types.h>
|
|
#include <sys/socket.h>
|
|
#include <netinet/tcp.h>
|
|
#define TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_TCP_NODELAY(socketDescriptor,flag,result) \
|
|
do { \
|
|
int __value; \
|
|
socklen_t __len; \
|
|
\
|
|
flag=0; \
|
|
\
|
|
__len=sizeof(__value); \
|
|
result=(getsockopt(socketDescriptor,IPPROTO_TCP,TCP_NODELAY,&__value,&__len)==0)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \
|
|
if (result==TARGET_NATIVE_OK) \
|
|
{ \
|
|
flag=__value; \
|
|
} \
|
|
} while (0)
|
|
#endif
|
|
|
|
/***********************************************************************\
|
|
* Name : TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_SO_LINGER
|
|
* Purpose : get socket option SO_LINGER
|
|
* Input : socketDescriptor - socket descriptor
|
|
* Output : flag - 1 or 0
|
|
* value - linger value
|
|
* result - TARGET_NATIVE_OK if no error occurred,
|
|
* TARGET_NATIVE_ERROR otherwise
|
|
* Return : -
|
|
* Side-effect: unknown
|
|
* Notes : -
|
|
\***********************************************************************/
|
|
|
|
#ifndef TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_SO_LINGER
|
|
#include <sys/types.h>
|
|
#include <sys/socket.h>
|
|
#define TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_SO_LINGER(socketDescriptor,flag,value,result) \
|
|
do { \
|
|
struct linger __linger; \
|
|
socklen_t __len; \
|
|
\
|
|
flag =0; \
|
|
value=0; \
|
|
\
|
|
__len=sizeof(__linger); \
|
|
result=(getsockopt(socketDescriptor,SOL_SOCKET,SO_LINGER,&__linger,&__len)==0)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \
|
|
if (result==TARGET_NATIVE_OK) \
|
|
{ \
|
|
flag =__linger.l_onoff; \
|
|
value=__linger.l_linger; \
|
|
} \
|
|
} while (0)
|
|
#endif
|
|
|
|
/***********************************************************************\
|
|
* Name : TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_SO_TIMEOUT
|
|
* Purpose : get socket option SO_TIMEOUT
|
|
* Input : socketDescriptor - socket descriptor
|
|
* Output : flag - 1 or 0
|
|
* result - TARGET_NATIVE_OK if no error occurred,
|
|
* TARGET_NATIVE_ERROR otherwise
|
|
* Return : -
|
|
* Side-effect: unknown
|
|
* Notes : -
|
|
\***********************************************************************/
|
|
|
|
#ifndef TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_SO_TIMEOUT
|
|
#include <sys/types.h>
|
|
#include <sys/socket.h>
|
|
#define TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_SO_TIMEOUT(socketDescriptor,flag,result) \
|
|
do { \
|
|
struct timeval __value; \
|
|
socklen_t __len; \
|
|
\
|
|
flag=0; \
|
|
\
|
|
__len=sizeof(__value); \
|
|
result=(getsockopt(socketDescriptor,SOL_SOCKET,SO_TIMEOUT,&__value,&__len)==0)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \
|
|
if (result==TARGET_NATIVE_OK) \
|
|
{ \
|
|
flag = (__value.tv_sec * 1000LL) + (__value.tv_usec / 1000LL); \
|
|
} \
|
|
} while (0)
|
|
#endif
|
|
|
|
/***********************************************************************\
|
|
* Name : TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_SO_SNDBUF
|
|
* Purpose : get socket option SO_SNDBUF
|
|
* Input : socketDescriptor - socket descriptor
|
|
* Output : size - size of send buffer
|
|
* result - TARGET_NATIVE_OK if no error occurred,
|
|
* TARGET_NATIVE_ERROR otherwise
|
|
* Return : -
|
|
* Side-effect: unknown
|
|
* Notes : -
|
|
\***********************************************************************/
|
|
|
|
#ifndef TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_SO_SNDBUF
|
|
#include <sys/types.h>
|
|
#include <sys/socket.h>
|
|
#define TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_SO_SNDBUF(socketDescriptor,size,result) \
|
|
do { \
|
|
int __value; \
|
|
socklen_t __len; \
|
|
\
|
|
size=0; \
|
|
\
|
|
__len=sizeof(__value); \
|
|
result=(getsockopt(socketDescriptor,SOL_SOCKET,SO_SNDBUF,&__value,&__len)==0)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \
|
|
if (result==TARGET_NATIVE_OK) \
|
|
{ \
|
|
size=__value; \
|
|
} \
|
|
} while (0)
|
|
#endif
|
|
|
|
/***********************************************************************\
|
|
* Name : TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_SO_RCDBUF
|
|
* Purpose : get socket option SO_RCDBUF
|
|
* Input : socketDescriptor - socket descriptor
|
|
* Output : size - size of receive buffer
|
|
* result - TARGET_NATIVE_OK if no error occurred,
|
|
* TARGET_NATIVE_ERROR otherwise
|
|
* Return : -
|
|
* Side-effect: unknown
|
|
* Notes : -
|
|
\***********************************************************************/
|
|
|
|
#ifndef TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_SO_RCDBUF
|
|
#include <sys/types.h>
|
|
#include <sys/socket.h>
|
|
#define TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_SO_RCDBUF(socketDescriptor,size,result) \
|
|
do { \
|
|
int __value; \
|
|
socklen_t __len; \
|
|
\
|
|
size=0; \
|
|
\
|
|
__len=sizeof(__value); \
|
|
result=(getsockopt(socketDescriptor,SOL_SOCKET,SO_RCVBUF,&__value,&__len)==0)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \
|
|
if (result==TARGET_NATIVE_OK) \
|
|
{ \
|
|
size=__value; \
|
|
} \
|
|
} while (0)
|
|
#endif
|
|
|
|
/***********************************************************************\
|
|
* Name : TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_IP_TTL
|
|
* Purpose : get socket option IP_TTL
|
|
* Input : socketDescriptor - socket descriptor
|
|
* Output : flag - 1 or 0
|
|
* result - TARGET_NATIVE_OK if no error occurred,
|
|
* TARGET_NATIVE_ERROR otherwise
|
|
* Return : -
|
|
* Side-effect: unknown
|
|
* Notes : -
|
|
\***********************************************************************/
|
|
|
|
#ifndef TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_IP_TTL
|
|
#include <sys/types.h>
|
|
#include <sys/socket.h>
|
|
#include <netinet/in.h>
|
|
#define TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_IP_TTL(socketDescriptor,flag,result) \
|
|
do { \
|
|
int __value; \
|
|
socklen_t __len; \
|
|
\
|
|
flag=0; \
|
|
\
|
|
__len=sizeof(__value); \
|
|
result=(getsockopt(socketDescriptor,IPPROTO_IP,IP_TTL,&__value,&__len)==0)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \
|
|
if (result==TARGET_NATIVE_OK) \
|
|
{ \
|
|
flag=__value; \
|
|
} \
|
|
} while (0)
|
|
#endif
|
|
|
|
/***********************************************************************\
|
|
* Name : TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_IP_MULTICAST_IF
|
|
* Purpose : get socket option IP_MULTICAST_IF
|
|
* Input : socketDescriptor - socket descriptor
|
|
* Output : address - integer with IP address in host-format
|
|
* result - TARGET_NATIVE_OK if no error occurred,
|
|
* TARGET_NATIVE_ERROR otherwise
|
|
* Return : -
|
|
* Side-effect: unknown
|
|
* Notes : -
|
|
\***********************************************************************/
|
|
|
|
#ifndef TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_IP_MULTICAST_IF
|
|
#include <sys/types.h>
|
|
#include <sys/socket.h>
|
|
#include <netinet/in.h>
|
|
#define TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_IP_MULTICAST_IF(socketDescriptor,address,result) \
|
|
do { \
|
|
struct sockaddr_in __socketAddress; \
|
|
socklen_t __socketAddressLength; \
|
|
\
|
|
address=0;\
|
|
\
|
|
memset(&__socketAddress,0,sizeof(__socketAddress)); \
|
|
__socketAddress.sin_family = AF_INET; \
|
|
__socketAddress.sin_addr.s_addr = htonl(address); \
|
|
__socketAddressLength=sizeof(__socketAddress); \
|
|
result=(getsockopt(socketDescriptor,IPPROTO_IP,IP_MULTICAST_IF,&__socketAddress,&__socketAddressLength)==0)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \
|
|
if (result==TARGET_NATIVE_OK) \
|
|
{ \
|
|
address=ntohl(__socketAddress.sin_addr.s_addr); \
|
|
} \
|
|
} while (0)
|
|
#endif
|
|
|
|
/***********************************************************************\
|
|
* Name : TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_BIND_ADDRESS
|
|
* Purpose : get socket option SOCKOPT_SO_BINDADDR
|
|
* Input : socketDescriptor - socket descriptor
|
|
* Output : address - integer with IP address in host-format
|
|
* result - TARGET_NATIVE_OK if no error occurred,
|
|
* TARGET_NATIVE_ERROR otherwise
|
|
* Return : -
|
|
* Side-effect: unknown
|
|
* Notes : -
|
|
\***********************************************************************/
|
|
|
|
#ifndef TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_BIND_ADDRESS
|
|
#include <sys/types.h>
|
|
#include <sys/socket.h>
|
|
#include <netinet/in.h>
|
|
#define TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_BIND_ADDRESS(socketDescriptor,address,result) \
|
|
do { \
|
|
struct sockaddr_in __socketAddress; \
|
|
socklen_t __socketAddressLength; \
|
|
\
|
|
address=0;\
|
|
\
|
|
memset(&__socketAddress,0,sizeof(__socketAddress)); \
|
|
__socketAddressLength=sizeof(__socketAddress); \
|
|
result=(getsockname(socketDescriptor,(struct sockaddr*)&__socketAddress,&__socketAddressLength)==0)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \
|
|
if (result==TARGET_NATIVE_OK) \
|
|
{ \
|
|
address=ntohl(__socketAddress.sin_addr.s_addr); \
|
|
} \
|
|
} while (0)
|
|
#endif
|
|
|
|
/***********************************************************************\
|
|
* Name : TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_REUSE_ADDRESS
|
|
* Purpose : get socket option REUSE_ADDRESS
|
|
* Input : socketDescriptor - socket descriptor
|
|
* Output : flag - 1 or 0
|
|
* result - TARGET_NATIVE_OK if no error occurred,
|
|
* TARGET_NATIVE_ERROR otherwise
|
|
* Return : -
|
|
* Side-effect: unknown
|
|
* Notes : -
|
|
\***********************************************************************/
|
|
|
|
#ifndef TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_REUSE_ADDRESS
|
|
#include <sys/types.h>
|
|
#include <sys/socket.h>
|
|
#include <netinet/in.h>
|
|
#define TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_REUSE_ADDRESS(socketDescriptor,flag,result) \
|
|
do { \
|
|
int __value; \
|
|
socklen_t __len; \
|
|
\
|
|
flag=0; \
|
|
\
|
|
__len=sizeof(__value); \
|
|
result=(getsockopt(socketDescriptor,SOL_SOCKET,SO_REUSEADDR,&__value,&__len)==0)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \
|
|
if (result==TARGET_NATIVE_OK) \
|
|
{ \
|
|
flag=__value; \
|
|
} \
|
|
} while (0)
|
|
#endif
|
|
|
|
/***********************************************************************\
|
|
* Name : TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_KEEP_ALIVE
|
|
* Purpose : get socket option KEEP_ALIVE
|
|
* Input : socketDescriptor - socket descriptor
|
|
* Output : flag - 1 or 0
|
|
* result - TARGET_NATIVE_OK if no error occurred,
|
|
* TARGET_NATIVE_ERROR otherwise
|
|
* Return : -
|
|
* Side-effect: unknown
|
|
* Notes : -
|
|
\***********************************************************************/
|
|
|
|
#ifndef TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_KEEP_ALIVE
|
|
#include <sys/types.h>
|
|
#include <sys/socket.h>
|
|
#include <netinet/in.h>
|
|
#define TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_KEEP_ALIVE(socketDescriptor,flag,result) \
|
|
do { \
|
|
int __value; \
|
|
socklen_t __len; \
|
|
\
|
|
flag=0; \
|
|
\
|
|
__len=sizeof(__value); \
|
|
result=(getsockopt(socketDescriptor,SOL_SOCKET,SO_KEEPALIVE,&__value,&__len)==0)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \
|
|
if (result==TARGET_NATIVE_OK) \
|
|
{ \
|
|
flag=__value; \
|
|
} \
|
|
} while (0)
|
|
#endif
|
|
|
|
/***********************************************************************\
|
|
* Name : TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_BROADCAST
|
|
* Purpose : get socket option SO_BROADCAST
|
|
* Input : socketDescriptor - socket descriptor
|
|
* Output : flag - 1 or 0
|
|
* result - TARGET_NATIVE_OK if no error occurred,
|
|
* TARGET_NATIVE_ERROR otherwise
|
|
* Return : -
|
|
* Side-effect: unknown
|
|
* Notes : -
|
|
\***********************************************************************/
|
|
|
|
#ifndef TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_BROADCAST
|
|
#include <sys/types.h>
|
|
#include <sys/socket.h>
|
|
#include <netinet/tcp.h>
|
|
#define TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_BROADCAST(socketDescriptor,flag,result) \
|
|
do { \
|
|
int __value; \
|
|
socklen_t __len; \
|
|
\
|
|
flag=0; \
|
|
\
|
|
__len=sizeof(__value); \
|
|
result=(getsockopt(socketDescriptor,SOL_SOCKET,SO_BROADCAST,&__value,&__len)==0)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \
|
|
if (result==TARGET_NATIVE_OK) \
|
|
{ \
|
|
flag=__value; \
|
|
} \
|
|
} while (0)
|
|
#endif
|
|
|
|
/***************************** Functions *******************************/
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* __TARGET_GENERIC_NETWORK__ */
|
|
|
|
/* end of file */
|
|
|