/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (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.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is the Netscape Portable Runtime (NSPR). * * The Initial Developer of the Original Code is * Netscape Communications Corporation. * Portions created by the Initial Developer are Copyright (C) 1998-2000 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), * in which case the provisions of the GPL or the LGPL are applicable instead * of those above. If you wish to allow use of your version of this file only * under the terms of either the GPL or the LGPL, and not to allow others to * use your version of this file under the terms of the MPL, indicate your * decision by deleting the provisions above and replace them with the notice * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ #ifndef macksocket_h___ #define macksocket_h___ // macsock.h // Interface visible to xp code // C socket type definitions and routines // from sys/socket.h #include #include // All the internet typedefs #include // For timeval /* * sleep and delay conflict with the same in unistd.h from Metrowerks. OT * defines them as * * extern pascal void OTDelay(UInt32 seconds); * extern pascal void OTIdle(void); * * #define sleep(x) OTDelay(x) * #define delay(x) OTDelay(x) */ #undef sleep #undef delay #pragma once #include "prio.h" struct sockaddr { unsigned char sa_len; /* total length */ unsigned char sa_family; /* address family */ char sa_data[14]; /* actually longer; address value */ }; // from netinet/in.h struct in_addr { unsigned long s_addr; }; struct sockaddr_in { unsigned char sin_len; unsigned char sin_family; // AF_INET unsigned short sin_port; struct in_addr sin_addr; char sin_zero[8]; }; struct hostent { char *h_name; /* official name of host */ char **h_aliases; /* alias list */ int h_addrtype; /* host address type */ int h_length; /* length of address */ char **h_addr_list; /* list of addresses from name server */ #define h_addr h_addr_list[0] /* address, for backward compatiblity */ }; // Necessary network defines, found by grepping unix headers when XP code would not compile #define FIONBIO 1 #define SOCK_STREAM 1 #define SOCK_DGRAM 2 #define IPPROTO_TCP INET_TCP // Default TCP protocol #define IPPROTO_UDP INET_UDP // Default UDP protocol #define INADDR_ANY kOTAnyInetAddress #define SOL_SOCKET XTI_GENERIC // Any type of socket #define SO_REUSEADDR IP_REUSEADDR #define SO_BROADCAST IP_BROADCAST #define MSG_PEEK 0x2 // Just look at a message waiting, donŐt actually read it. typedef unsigned long u_long; /* ldap.h has its own definition of fd_set */ /* select support */ #if !defined(FD_SET) #define NBBY 8 typedef long fd_mask; #define NFDBITS (sizeof(fd_mask) * NBBY) /* bits per mask */ #ifndef howmany #define howmany(x, y) (((x)+((y)-1))/(y)) #endif #define FD_SETSIZE 64 typedef struct fd_set{ fd_mask fds_bits[howmany(FD_SETSIZE, NFDBITS)]; } fd_set; #define FD_SET(n, p) ((p)->fds_bits[(n)/NFDBITS] |= (1 << ((n) % NFDBITS))) #define FD_CLR(n, p) ((p)->fds_bits[(n)/NFDBITS] &= ~(1 << ((n) % NFDBITS))) #define FD_ISSET(n, p) ((p)->fds_bits[(n)/NFDBITS] & (1 << ((n) % NFDBITS))) #define FD_ZERO(p) memset (p, 0, sizeof(*(p))) #endif /* !FD_SET */ #ifdef __cplusplus extern "C" { #endif extern unsigned long inet_addr(const char *cp); extern char *inet_ntoa(struct in_addr in); inline unsigned long htonl(unsigned long hostlong) {return hostlong;} inline unsigned long ntohl(unsigned long netlong) {return netlong;} inline unsigned short ntohs(unsigned short netshort) {return netshort;} inline unsigned short htons(unsigned short hostshort) {return hostshort;} // UNIX look-alike routines // They make sure that the arguments passed in are valid, and then // extern struct hostent *macsock_gethostbyaddr(const void *addr, int addrlen, int type); extern int macsock_socket(int domain, int type, int protocol); extern int macsock_ioctl(int sID, unsigned int request, void *value); extern int macsock_connect(int sID, struct sockaddr *name, int namelen); extern int macsock_write(int sID, const void *buffer, unsigned buflen); extern int macsock_read(int sID, void *buf, unsigned nbyte); extern int macsock_close(int sID); extern int macsock_accept(int sID, struct sockaddr *addr, int *addrlen); extern int macsock_bind(int sID, const struct sockaddr *name, int namelen); extern int macsock_listen(int sID, int backlog); extern int macsock_shutdown(int sID, int how); extern int macsock_getpeername(int sID, struct sockaddr *name, int *namelen); extern int macsock_getsockname(int sID, struct sockaddr *name, int *namelen); extern int macsock_getsockopt(int sID, int level, int optname, void *optval,int *optlen); extern int macsock_setsockopt(int sID, int level, int optname, const void *optval,int optlen); extern int macsock_socketavailable(int sID, size_t *bytesAvailable); extern int macsock_dup(int sID); extern int macsock_send(int sID, const void *msg, int len, int flags); extern int macsock_sendto(int sID, const void *msg, int len, int flags, struct sockaddr *toAddr, int toLen); extern int macsock_recvfrom(int sID, void *buf, int len, int flags, struct sockaddr *from, int *fromLen); extern int macsock_recv(int sID, void *buf, int len, int flags); extern int select (int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); #define macsock_gethostbyaddr PR_GetHostByAddr #define macsock_socket PR_Socket #define macsock_connect PR_Connect #define macsock_write PR_Write #define macsock_read PR_Read #define macsock_close PR_Close #define macsock_accept PR_Accept #define macsock_bind PR_Bind #define macsock_listen PR_Listen #define macsock_shutdown PR_Shutdown #define macsock_getpeername PR_GetPeerName #define macsock_getsockname PR_GetSockName #define macsock_socketavailable PR_SocketAvailable #define macsock_send PR_Send #define macsock_sendto PR_SendTo #define macsock_recvfrom PR_RecvFrom #define macsock_recv PR_Recv #ifdef __cplusplus } #endif //extern int errno; /* macsock_sendmsg macsock_readv macsock_writev */ /* New definitions that are not defined in macsock.h in macsock library */ struct protoent { char *p_name; /* official protocol name */ char **p_aliases; /* alias list */ int p_proto; /* protocol # */ }; extern struct protoent *getprotobyname(const char * name); extern struct protoent *getprotobynumber(int number); extern int gethostname (char *name, int namelen); extern struct hostent *gethostbyname(const char * name); extern struct hostent *gethostbyaddr(const void *addr, int addrlen, int type); #define INADDR_LOOPBACK 0x7F000001 #define SO_KEEPALIVE TCP_KEEPALIVE #define SO_RCVBUF XTI_RCVBUF #define SO_SNDBUF XTI_SNDBUF #define SO_LINGER XTI_LINGER /* linger on close if data present */ #define IPPROTO_IP INET_IP /* Get/Set sock opt until fixed in NSPR 2.0 */ struct linger { int l_onoff; /* option on/off */ int l_linger; /* linger time */ }; struct ip_mreq { struct in_addr imr_multiaddr; /* IP multicast address of group */ struct in_addr imr_interface; /* local IP address of interface */ }; #endif /* macksocket_h___ */