/usr/include/ossp/sa.h is in libossp-sa-dev 1.2.6-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 | /*
** OSSP sa - Socket Abstraction
** Copyright (c) 2001-2005 Ralf S. Engelschall <rse@engelschall.com>
** Copyright (c) 2001-2005 The OSSP Project <http://www.ossp.org/>
** Copyright (c) 2001-2005 Cable & Wireless <http://www.cw.com/>
**
** This file is part of OSSP sa, a socket abstraction library which
** can be found at http://www.ossp.org/pkg/lib/sa/.
**
** Permission to use, copy, modify, and distribute this software for
** any purpose with or without fee is hereby granted, provided that
** the above copyright notice and this permission notice appear in all
** copies.
**
** THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
** WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
** MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
** IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
** CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
** USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
** ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
** OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
** OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
** SUCH DAMAGE.
**
** sa.h: socket abstraction API
*/
#ifndef __SA_H__
#define __SA_H__
/* system definitions of "size_t", "socklen_t", "struct sockaddr *" */
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
/* include optional Autoconf header */
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
/* fallback for POSIX socklen_t */
#if defined(HAVE_CONFIG_H) && !defined(HAVE_SOCKLEN_T)
typedef int socklen_t;
#endif
/* embedding support */
#ifdef SA_PREFIX
#if defined(__STDC__) || defined(__cplusplus)
#define __SA_CONCAT(x,y) x ## y
#define SA_CONCAT(x,y) __SA_CONCAT(x,y)
#else
#define __SA_CONCAT(x) x
#define SA_CONCAT(x,y) __SA_CONCAT(x)y
#endif
#define sa_addr_st SA_CONCAT(SA_PREFIX,sa_addr_st)
#define sa_addr_t SA_CONCAT(SA_PREFIX,sa_addr_t)
#define sa_rc_t SA_CONCAT(SA_PREFIX,sa_rc_t)
#define sa_st SA_CONCAT(SA_PREFIX,sa_st)
#define sa_t SA_CONCAT(SA_PREFIX,sa_t)
#define sa_addr_create SA_CONCAT(SA_PREFIX,sa_addr_create)
#define sa_addr_destroy SA_CONCAT(SA_PREFIX,sa_addr_destroy)
#define sa_addr_u2a SA_CONCAT(SA_PREFIX,sa_addr_u2a)
#define sa_addr_s2a SA_CONCAT(SA_PREFIX,sa_addr_s2a)
#define sa_addr_a2u SA_CONCAT(SA_PREFIX,sa_addr_a2u)
#define sa_addr_a2s SA_CONCAT(SA_PREFIX,sa_addr_a2s)
#define sa_addr_match SA_CONCAT(SA_PREFIX,sa_addr_match)
#define sa_create SA_CONCAT(SA_PREFIX,sa_create)
#define sa_destroy SA_CONCAT(SA_PREFIX,sa_destroy)
#define sa_type SA_CONCAT(SA_PREFIX,sa_type)
#define sa_timeout SA_CONCAT(SA_PREFIX,sa_timeout)
#define sa_buffer SA_CONCAT(SA_PREFIX,sa_buffer)
#define sa_option SA_CONCAT(SA_PREFIX,sa_option)
#define sa_syscall SA_CONCAT(SA_PREFIX,sa_syscall)
#define sa_bind SA_CONCAT(SA_PREFIX,sa_bind)
#define sa_connect SA_CONCAT(SA_PREFIX,sa_connect)
#define sa_listen SA_CONCAT(SA_PREFIX,sa_listen)
#define sa_accept SA_CONCAT(SA_PREFIX,sa_accept)
#define sa_getremote SA_CONCAT(SA_PREFIX,sa_getremote)
#define sa_getlocal SA_CONCAT(SA_PREFIX,sa_getlocal)
#define sa_getfd SA_CONCAT(SA_PREFIX,sa_getfd)
#define sa_shutdown SA_CONCAT(SA_PREFIX,sa_shutdown)
#define sa_read SA_CONCAT(SA_PREFIX,sa_read)
#define sa_readln SA_CONCAT(SA_PREFIX,sa_readln)
#define sa_write SA_CONCAT(SA_PREFIX,sa_write)
#define sa_writef SA_CONCAT(SA_PREFIX,sa_writef)
#define sa_flush SA_CONCAT(SA_PREFIX,sa_flush)
#define sa_recv SA_CONCAT(SA_PREFIX,sa_recv)
#define sa_send SA_CONCAT(SA_PREFIX,sa_send)
#define sa_sendf SA_CONCAT(SA_PREFIX,sa_sendf)
#define sa_id SA_CONCAT(SA_PREFIX,sa_id)
#define sa_error SA_CONCAT(SA_PREFIX,sa_error)
#endif
/* socket address abstraction object type */
struct sa_addr_st;
typedef struct sa_addr_st sa_addr_t;
/* socket abstraction object type */
struct sa_st;
typedef struct sa_st sa_t;
/* socket connection types */
typedef enum {
SA_TYPE_STREAM,
SA_TYPE_DATAGRAM
} sa_type_t;
/* return codes */
typedef enum {
SA_OK, /* Everything Ok */
SA_ERR_ARG, /* Invalid Argument */
SA_ERR_USE, /* Invalid Use Or Context */
SA_ERR_MEM, /* Not Enough Memory */
SA_ERR_MTC, /* Matching Failed */
SA_ERR_EOF, /* End Of Communication */
SA_ERR_TMT, /* Communication Timeout */
SA_ERR_SYS, /* Operating System Error */
SA_ERR_NET, /* Networking Error */
SA_ERR_FMT, /* Formatting Error */
SA_ERR_IMP, /* Implementation Not Available */
SA_ERR_INT /* Internal Error */
} sa_rc_t;
/* list of timeouts */
typedef enum {
SA_TIMEOUT_ALL = -1,
SA_TIMEOUT_ACCEPT = 0,
SA_TIMEOUT_CONNECT = 1,
SA_TIMEOUT_READ = 2,
SA_TIMEOUT_WRITE = 3
} sa_timeout_t;
/* list of buffers */
typedef enum {
SA_BUFFER_READ,
SA_BUFFER_WRITE
} sa_buffer_t;
/* list of options */
typedef enum {
SA_OPTION_NAGLE = 0,
SA_OPTION_LINGER = 1,
SA_OPTION_REUSEADDR = 2,
SA_OPTION_REUSEPORT = 3,
SA_OPTION_NONBLOCK = 4
} sa_option_t;
/* list of system calls */
typedef enum {
SA_SYSCALL_CONNECT,
SA_SYSCALL_ACCEPT,
SA_SYSCALL_SELECT,
SA_SYSCALL_READ,
SA_SYSCALL_WRITE,
SA_SYSCALL_RECVFROM,
SA_SYSCALL_SENDTO
} sa_syscall_t;
/* unique library identifier */
extern const char sa_id[];
/* address object operations */
extern sa_rc_t sa_addr_create (sa_addr_t **__saa);
extern sa_rc_t sa_addr_destroy (sa_addr_t *__saa);
/* address operations */
extern sa_rc_t sa_addr_u2a (sa_addr_t *__saa, const char *__uri, ...);
extern sa_rc_t sa_addr_s2a (sa_addr_t *__saa, const struct sockaddr *__sabuf, socklen_t __salen);
extern sa_rc_t sa_addr_a2u (const sa_addr_t *__saa, char **__uri);
extern sa_rc_t sa_addr_a2s (const sa_addr_t *__saa, struct sockaddr **__sabuf, socklen_t *__salen);
extern sa_rc_t sa_addr_match (const sa_addr_t *__saa1, const sa_addr_t *__saa2, int __prefixlen);
/* socket object operations */
extern sa_rc_t sa_create (sa_t **__sa);
extern sa_rc_t sa_destroy (sa_t *__sa);
/* socket parameter operations */
extern sa_rc_t sa_type (sa_t *__sa, sa_type_t __id);
extern sa_rc_t sa_timeout (sa_t *__sa, sa_timeout_t __id, long __sec, long __usec);
extern sa_rc_t sa_buffer (sa_t *__sa, sa_buffer_t __id, size_t __size);
extern sa_rc_t sa_option (sa_t *__sa, sa_option_t __id, ...);
extern sa_rc_t sa_syscall (sa_t *__sa, sa_syscall_t __id, void (*__fptr)(void), void *__fctx);
/* socket connection operations */
extern sa_rc_t sa_bind (sa_t *__sa, const sa_addr_t *__laddr);
extern sa_rc_t sa_connect (sa_t *__sa, const sa_addr_t *__raddr);
extern sa_rc_t sa_listen (sa_t *__sa, int __backlog);
extern sa_rc_t sa_accept (sa_t *__sa, sa_addr_t **__caddr, sa_t **__csa);
extern sa_rc_t sa_getremote (sa_t *__sa, sa_addr_t **__raddr);
extern sa_rc_t sa_getlocal (sa_t *__sa, sa_addr_t **__laddr);
extern sa_rc_t sa_getfd (sa_t *__sa, int *__fd);
extern sa_rc_t sa_shutdown (sa_t *__sa, const char *__flags);
/* socket input/output operations (stream communication) */
extern sa_rc_t sa_read (sa_t *__sa, char *__buf, size_t __buflen, size_t *__bufdone);
extern sa_rc_t sa_readln (sa_t *__sa, char *__buf, size_t __buflen, size_t *__bufdone);
extern sa_rc_t sa_write (sa_t *__sa, const char *__buf, size_t __buflen, size_t *__bufdone);
extern sa_rc_t sa_writef (sa_t *__sa, const char *__fmt, ...);
extern sa_rc_t sa_flush (sa_t *__sa);
/* socket input/output operations (datagram communication) */
extern sa_rc_t sa_recv (sa_t *__sa, sa_addr_t **__raddr, char *__buf, size_t __buflen, size_t *__bufdone);
extern sa_rc_t sa_send (sa_t *__sa, sa_addr_t *__raddr, const char *__buf, size_t __buflen, size_t *__bufdone);
extern sa_rc_t sa_sendf (sa_t *__sa, sa_addr_t *__raddr, const char *__fmt, ...);
/* error handling operations */
extern char *sa_error (sa_rc_t __rv);
#endif /* __SA_H__ */
|