Logo Search packages:      
Sourcecode: cyrus-sasl2 version File versions  Download package

Sockets.h

/* $Copyright:
 *
 * Copyright 1998-2000 by the Massachusetts Institute of Technology.
 * 
 * All rights reserved.
 * 
 * Permission to use, copy, modify, and distribute this software and its
 * documentation for any purpose and without fee is hereby granted,
 * provided that the above copyright notice appear in all copies and that
 * both that copyright notice and this permission notice appear in
 * supporting documentation, and that the name of M.I.T. not be used in
 * advertising or publicity pertaining to distribution of the software
 * without specific, written prior permission.  Furthermore if you modify
 * this software you must label your software as modified software and not
 * distribute it in such a fashion that it might be confused with the
 * original MIT software. M.I.T. makes no representations about the
 * suitability of this software for any purpose.  It is provided "as is"
 * without express or implied warranty.
 * 
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
 * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
 * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 * 
 * Individual source code files are copyright MIT, Cygnus Support,
 * OpenVision, Oracle, Sun Soft, FundsXpress, and others.
 * 
 * Project Athena, Athena, Athena MUSE, Discuss, Hesiod, Kerberos, Moira,
 * and Zephyr are trademarks of the Massachusetts Institute of Technology
 * (MIT).  No commercial use of these trademarks may be made without prior
 * written permission of MIT.
 * 
 * "Commercial use" means use of a name in a product or other for-profit
 * manner.  It does NOT prevent a commercial firm from referring to the MIT
 * trademarks in order to convey information (although in doing so,
 * recognition of their trademark status should be given).
 * $
 */

/* $Header: /afs/andrew.cmu.edu/system/cvs/src/sasl/mac/CommonKClient/mac_kclient3/Headers/KerberosSupport/Sockets.h,v 1.2 2001/12/04 02:05:57 rjs3 Exp $ */

/* 
 *
 * Sockets.h -- Main external header file for the sockets library.
 *
 */


#include <KerberosSupport/ErrorLib.h>
#include <KerberosSupport/Utilities.h>
#include <KerberosSupport/SocketErrors.h>
#include <unix.h>

#include <MacTypes.h>
#include <Events.h>
#include <OpenTptInternet.h>

#ifndef _SOCKETS_
#define _SOCKETS_

#ifdef __cplusplus
extern "C" {
#endif

#if defined(__CFM68K__) && !defined(__USING_STATIC_LIBS__)
#     pragma import on
#endif

/*******************/
/* API Definitions */
/*******************/

#define FD_SETSIZE            256         /*    The maximum # of sockets -- cannot be changed   */

/* socket types */
#define SOCK_STREAM           0           /*    stream socket -- connection oriented                  */
#define SOCK_DGRAM            1           /*    datagram socket -- connectionless                     */
#define SOCK_RAW        2           /*    raw socket                                                        */
#define SOCK_SEQPACKET  3           /*    sequenced packet socket                                     */
#define SOCK_RDM        4           /*    reliably delivered message socket                     */

/* address families  -- get AF_INET from OpenTptInternet.h */
#define AF_UNSPEC       0           /*    Unspecified                                                       */
#define AF_UNIX               1           /*    Unix internal protocols                                     */

/* protocol families */
#define PF_UNSPEC AF_UNSPEC   /*    Unspecified                                                       */
#define PF_UNIX         AF_UNIX           /*    Unix internal protocols                                     */
#define PF_INET         AF_INET           /*    Internet protocols                                                */

/* IP Address Wildcard */
#define INADDR_ANY      kOTAnyInetAddress
#define INADDR_NONE           0xffffffff

/* recv and send flags */
#define MSG_DONTROUTE   1
#define MSG_DONTWAIT    2
#define MSG_OOB               4
#define MSG_PEEK        8
#define MSG_WAITALL           16

#define NUMBITSPERBYTE  8           /*    Number of bits per byte                                     */

/* socket_fnctl() requests */
#define F_GETFL               3           /* Get file flags                                                       */
#define F_SETFL               4           /* Set file flags                                                       */

/* shutdown() flags */
#define SHUT_RD               0           /* Shutdown read side of the connection                     */
#define SHUT_WR               1           /* Shutdown write side of the connection              */
#define SHUT_RDWR       2           /* Shutdown read and write sides of the connection    */

/* IP address sizes */
#define INET_ADDRSTRLEN       16    /* for IPv4 dotted decimal                                        */
#define INET6_ADDRSTRLEN      46    /* for IPv6 dhex string                                           */
#define INADDRSZ              4     /* size of IPv4 addr in bytes                                     */
#define IN6ADDRSZ             16    /* size of IPv6 addr in bytes                               */

/* host name size */
#define MAXHOSTNAMESIZE       kMaxHostNameLen
#define MAXHOSTNAMELEN        kMaxHostNameLen

#ifdef USE_STREAMS
/* Constants for poll() */
#define POLLIN          0x001   /* A non-priority message is available */
#define POLLPRI         0x002   /* A high priority message is available */
#define POLLOUT         0x004   /* The stream is writable for non-priority messages */
#define POLLERR         0x008   /* A error message has arrived */
#define POLLHUP         0x010   /* A hangup has occurred */
#define POLLNVAL        0x020   /* This fd is bogus */
#define POLLRDNORM      0x040   /* A non-priority message is available */
#define POLLRDBAND      0x080   /* A priority message (band > 0) message is available */
#define POLLWRNORM      0x100   /* Same as POLLOUT */
#define POLLWRBAND      0x200   /* A priority band exists and is writable */
#define POLLMSG         0x400   /* A signal message has reached the front of the queue */
#endif /* USE_STREAMS */

/**********/
/* Macros */
/**********/

/* network byte order conversion [none since we're already big-endian] */
#define     ntohl(x)          (x)
#define     ntohs(x)          (x)
#define     htonl(x)          (x)
#define     htons(x)          (x)

/* macros for select */
#define FD_SET(fd, fdset)     ((fdset)->fds_bits[(fd) / NFDBITS] |= ((unsigned)1 << ((fd) % NFDBITS)))
#define FD_CLR(fd, fdset)     ((fdset)->fds_bits[(fd) / NFDBITS] &= ~((unsigned)1 << ((fd) % NFDBITS)))
#define FD_ISSET(fd, fdset)   ((fdset)->fds_bits[(fd) / NFDBITS] & ((unsigned)1 << ((fd) % NFDBITS)))
#define FD_ZERO(fdset)        memset((char *)(fdset), 0, sizeof(*(fdset)))


/****************************/
/* API Structures and Types */
/****************************/

/* An internet address */
typedef UInt32  in_addr_t; 

/* size of address structures */
typedef UInt32 socklen_t;

/* structure used to store addresses */
struct sockaddr {
      u_short     sa_family;
      char  sa_data[14];
};

/* INET protocol structures */
struct in_addr {
      in_addr_t   s_addr;
};

/* A TCP address -- the same as a OT InetAddress */
struct sockaddr_in {                      /* struct InetAddress {                   */
      u_short           sin_family;       /* OTAddressType  fAddressType      */
      u_short           sin_port;         /* InetPort             fPort             */
      struct in_addr    sin_addr;         /* InetHost             fHost             */
      char              sin_zero[8];      /* UInt8                fUnused                 */
};                                                    /* };                                           */

/* structures for select */
typedef long fd_mask;
#define NFDBITS               (sizeof(fd_mask) * NUMBITSPERBYTE)      /* bits per mask */

typedef struct fd_set {
  fd_mask fds_bits[(FD_SETSIZE + NFDBITS - 1) / NFDBITS];
} fd_set;

/* Structure for non-contiguous data */
struct iovec {
  struct iovec *next;               /* For compatibility with Open Transport */
  void         *iov_base;           /* Starting address of buffer */
  size_t        iov_len;            /* size of buffer */
};

/* For poll() */
struct pollfd {
  int   fd;
  short events;
  short revents;
};

/***********************/
/* Function Prototypes */
/***********************/

#if !TARGET_RT_MAC_CFM
#   pragma d0_pointers on
#else
#   define SocketsLibraryIsPresent() ((Ptr) (socket) != (Ptr) (kUnresolvedCFragSymbolAddress))
#endif

/* Sockets Control API calls */
OSStatus                   AbortSocketOperation(int sockFD);
OSStatus                   AbortAllDNSOperations(void);
Boolean                IsValidSocket(int sockFD);

/* Sockets API calls */
int socket(int family, int type, int protocol);
int socket_bind(int sockFD, const struct sockaddr *myAddr, int addrLength);
int socket_fcntl(int sockFD, int command, int flags);
int socket_close(int sockFD);
int socket_shutdown(int sockFD, int howTo);
int socket_connect(int sockFD, struct sockaddr *servAddr, int addrLength);
int socket_select(int maxFDsExamined, fd_set *readFDs, fd_set *writeFDs, fd_set *exceptFDs,
                  struct timeval *timeOut);
#ifdef USE_STREAMS
int socket_poll (struct pollfd *fds, unsigned int nfds, int timeout);
#endif /* USE_STREAMS */
int socket_getpeername(int sockFD, struct sockaddr *peerAddr, int *addrLength);
int socket_getsockname(int sockFD, struct sockaddr *localAddr, int *addrLength);
int socket_read(int sockFD, void *buffer, UInt32 numBytes);
int socket_write(int sockFD, const void *buffer, UInt32 numBytes);
int socket_readv(int sockFD, struct iovec *iov, UInt32 iovCount);
int socket_writev(int sockFD, struct iovec *iov, UInt32 iovCount);
int socket_recv(int sockFD, void *buffer, UInt32 numBytes, int flags);
int socket_send(int sockFD, const void *buffer, UInt32 numBytes, int flags);
int socket_recvfrom(int sockFD, void *buffer, UInt32 numBytes, int flags, struct sockaddr *fromAddr, 
                    socklen_t *addrLength);
int socket_sendto(int sockFD, const void *buffer, UInt32 numBytes, int flags, struct sockaddr *toAddr, 
                  socklen_t addrLength);

/* Utilites API calls */
char     *inet_ntoa(struct in_addr addr);
int       inet_aton(const char *str, struct in_addr *addr);
in_addr_t   inet_addr(const char *str);
int       inet_pton(int family, const char *str, void *addr);
const char *inet_ntop(int family, const void *addr, char *str, size_t len);

#if !TARGET_RT_MAC_CFM
#   pragma d0_pointers reset
#endif

#if defined(__CFM68K__) && !defined(__USING_STATIC_LIBS__)
#     pragma import reset
#endif

#ifdef __cplusplus
}
#endif

#endif /* _SOCKETS_ */

Generated by  Doxygen 1.6.0   Back to index