Logo Search packages:      
Sourcecode: virtualbox-ose version File versions  Download package

macsocket.h

/* -*- 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 <Files.h>
#include <OpenTptInternet.h>  // All the internet typedefs
#include <utime.h>                        // 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___ */

Generated by  Doxygen 1.6.0   Back to index