home *** CD-ROM | disk | FTP | other *** search
/ Tools / WinSN5.0Ver.iso / NETSCAP.50 / WIN1998.ZIP / ns / nsprpub / pr / src / md / mac / macsocket.h < prev    next >
Encoding:
C/C++ Source or Header  |  1998-04-08  |  7.4 KB  |  220 lines

  1. /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
  2. /*
  3.  * The contents of this file are subject to the Netscape Public License
  4.  * Version 1.0 (the "NPL"); you may not use this file except in
  5.  * compliance with the NPL.  You may obtain a copy of the NPL at
  6.  * http://www.mozilla.org/NPL/
  7.  * 
  8.  * Software distributed under the NPL is distributed on an "AS IS" basis,
  9.  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
  10.  * for the specific language governing rights and limitations under the
  11.  * NPL.
  12.  * 
  13.  * The Initial Developer of this code under the NPL is Netscape
  14.  * Communications Corporation.  Portions created by Netscape are
  15.  * Copyright (C) 1998 Netscape Communications Corporation.  All Rights
  16.  * Reserved.
  17.  */
  18.  
  19. #ifndef macksocket_h___
  20. #define macksocket_h___
  21.  
  22. // macsock.h
  23. // Interface visible to xp code
  24. // C socket type definitions and routines
  25. // from sys/socket.h
  26. #include <OpenTptInternet.h>    // All the internet typedefs
  27. #include <utime.h>                // For timeval
  28. /*
  29.  * sleep and delay conflict with the same in unistd.h from Metrowerks.  OT
  30.  * defines them as 
  31.  *
  32.  *    extern pascal void        OTDelay(UInt32 seconds);
  33.  *    extern pascal void        OTIdle(void);
  34.  *
  35.  *    #define sleep(x)    OTDelay(x)
  36.  *    #define delay(x)    OTDelay(x)
  37.  */
  38.  
  39. #undef sleep
  40. #undef delay
  41.  
  42. #pragma once
  43.  
  44. #include "prio.h"
  45.  
  46. struct sockaddr {
  47.     unsigned char    sa_len;            /* total length */
  48.     unsigned char    sa_family;        /* address family */
  49.     char    sa_data[14];        /* actually longer; address value */
  50. };
  51.  
  52. // from netinet/in.h
  53. struct in_addr {
  54.     unsigned long s_addr;
  55. };
  56.  
  57. struct sockaddr_in {
  58.     unsigned char    sin_len;
  59.     unsigned char    sin_family;        // AF_INET
  60.     unsigned short    sin_port;
  61.     struct    in_addr sin_addr;
  62.     char        sin_zero[8];
  63. };
  64.  
  65. struct    hostent {
  66.     char    *h_name;    /* official name of host */
  67.     char    **h_aliases;    /* alias list */
  68.     int    h_addrtype;    /* host address type */
  69.     int    h_length;    /* length of address */
  70.     char    **h_addr_list;    /* list of addresses from name server */
  71. #define    h_addr    h_addr_list[0]    /* address, for backward compatiblity */
  72. };
  73.  
  74. // Necessary network defines, found by grepping unix headers when XP code would not compile
  75. #define FIONBIO 1
  76. #define SOCK_STREAM 1
  77. #define SOCK_DGRAM         2
  78. #define IPPROTO_TCP     INET_TCP        // Default TCP protocol
  79. #define IPPROTO_UDP        INET_UDP        // Default UDP protocol
  80. #define INADDR_ANY        kOTAnyInetAddress
  81. #define SOL_SOCKET        XTI_GENERIC        // Any type of socket
  82. #define SO_REUSEADDR    IP_REUSEADDR
  83. #define MSG_PEEK        0x2                // Just look at a message waiting, donâ•’t actually read it.
  84.  
  85. typedef unsigned long u_long;
  86.  
  87. /* ldap.h has its own definition of fd_set */
  88. /* select support */
  89. #if !defined(FD_SET)
  90. #define    NBBY    8
  91. typedef long    fd_mask;
  92. #define NFDBITS (sizeof(fd_mask) * NBBY)    /* bits per mask */
  93.  
  94. #ifndef howmany
  95. #define howmany(x, y)   (((x)+((y)-1))/(y))
  96. #endif
  97. #define FD_SETSIZE 64
  98. typedef    struct fd_set{
  99.     fd_mask fds_bits[howmany(FD_SETSIZE, NFDBITS)];
  100. } fd_set;
  101.  
  102. #define    FD_SET(n, p)    ((p)->fds_bits[(n)/NFDBITS] |= (1 << ((n) % NFDBITS)))
  103. #define    FD_CLR(n, p)    ((p)->fds_bits[(n)/NFDBITS] &= ~(1 << ((n) % NFDBITS)))
  104. #define    FD_ISSET(n, p)  ((p)->fds_bits[(n)/NFDBITS] & (1 << ((n) % NFDBITS)))
  105. #define    FD_ZERO(p)      memset (p, 0, sizeof(*(p)))
  106. #endif /* !FD_SET */
  107.  
  108.  
  109. #ifdef __cplusplus
  110. extern "C" {
  111. #endif
  112.  
  113. extern unsigned long inet_addr(const char *cp);
  114. extern char *inet_ntoa(struct in_addr in);
  115.  
  116. inline unsigned long htonl(unsigned long hostlong) {return hostlong;}
  117. inline unsigned long ntohl(unsigned long netlong) {return netlong;}
  118. inline unsigned short ntohs(unsigned short netshort) {return netshort;}
  119. inline unsigned short htons(unsigned short hostshort) {return hostshort;}
  120.  
  121.  
  122. // UNIX look-alike routines
  123. // They make sure that the arguments passed in are valid, and then
  124. //
  125. extern struct hostent *macsock_gethostbyaddr(const void *addr, int addrlen, int type);
  126.  
  127. extern int macsock_socket(int domain, int type, int protocol);
  128. extern int macsock_ioctl(int sID, unsigned int request, void *value);
  129. extern int macsock_connect(int sID, struct sockaddr *name, int namelen);
  130. extern int macsock_write(int sID, const void *buffer, unsigned buflen);
  131. extern int macsock_read(int sID, void *buf, unsigned nbyte);
  132. extern int macsock_close(int sID);
  133.  
  134. extern int macsock_accept(int sID, struct sockaddr *addr, int *addrlen);
  135. extern int macsock_bind(int sID, const struct sockaddr *name, int namelen);
  136. extern int macsock_listen(int sID, int backlog);
  137.  
  138. extern int macsock_shutdown(int sID, int how);
  139. extern int macsock_getpeername(int sID, struct sockaddr *name, int *namelen);
  140. extern int macsock_getsockname(int sID, struct sockaddr *name, int *namelen);
  141. extern int macsock_getsockopt(int sID, int level, int optname, void *optval,int *optlen);
  142. extern int macsock_setsockopt(int sID, int level, int optname, const void *optval,int optlen);
  143. extern int macsock_socketavailable(int sID, size_t *bytesAvailable);
  144. extern int macsock_dup(int sID);
  145.  
  146. extern int macsock_send(int sID, const void *msg, int len, int flags);
  147. extern int macsock_sendto(int sID, const void *msg, int len, int flags, struct sockaddr *toAddr, int toLen);
  148. extern int macsock_recvfrom(int sID, void *buf, int len, int flags, struct sockaddr *from, int *fromLen);
  149. extern int macsock_recv(int sID, void *buf, int len, int flags);
  150.  
  151. extern int select (int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
  152.  
  153.  
  154. #define macsock_gethostbyaddr PR_GetHostByAddr
  155. #define macsock_socket PR_Socket
  156. #define macsock_connect PR_Connect
  157. #define macsock_write PR_Write
  158. #define macsock_read PR_Read
  159. #define macsock_close PR_Close
  160. #define macsock_accept PR_Accept
  161. #define macsock_bind PR_Bind
  162. #define macsock_listen PR_Listen
  163. #define macsock_shutdown PR_Shutdown
  164. #define macsock_getpeername PR_GetPeerName
  165. #define macsock_getsockname PR_GetSockName
  166. #define macsock_getsockopt PR_GetSockOpt
  167. #define macsock_setsockopt PR_SetSockOpt
  168. #define macsock_socketavailable PR_SocketAvailable
  169. #define macsock_send PR_Send
  170. #define macsock_sendto PR_SendTo
  171. #define macsock_recvfrom PR_RecvFrom
  172. #define macsock_recv PR_Recv
  173.  
  174. #ifdef __cplusplus
  175. }
  176. #endif
  177. //extern int errno;
  178.  
  179. /*
  180. macsock_sendmsg
  181. macsock_readv
  182. macsock_writev
  183. */
  184.  
  185. /* New definitions that are not defined in macsock.h in macsock library */
  186. struct    protoent {
  187.     char    *p_name;        /* official protocol name */
  188.     char    **p_aliases;    /* alias list */
  189.     int        p_proto;        /* protocol # */
  190. };
  191.  
  192. extern struct protoent *getprotobyname(const char * name);
  193. extern struct protoent *getprotobynumber(int number);
  194.  
  195. extern int gethostname (char *name, int namelen);
  196. extern struct hostent *gethostbyname(const char * name);
  197. extern struct hostent *gethostbyaddr(const void *addr, int addrlen, int type);
  198.  
  199. #define INADDR_LOOPBACK    0x7F000001
  200.  
  201. #define SO_KEEPALIVE    TCP_KEEPALIVE
  202. #define SO_RCVBUF        XTI_RCVBUF
  203. #define SO_SNDBUF        XTI_SNDBUF
  204. #define SO_LINGER       XTI_LINGER          /* linger on close if data present */
  205.  
  206. #define IPPROTO_IP        INET_IP
  207.  
  208. /* Get/Set sock opt until fixed in NSPR 2.0 */
  209. struct  linger {
  210.         int     l_onoff;                /* option on/off */
  211.         int     l_linger;               /* linger time */
  212. };
  213.  
  214. struct ip_mreq {
  215.         struct in_addr  imr_multiaddr;  /* IP multicast address of group */
  216.         struct in_addr  imr_interface;  /* local IP address of interface */
  217. };
  218.  
  219. #endif /* macksocket_h___ */
  220.