]> git.saurik.com Git - wxWidgets.git/blob - include/wx/mac/macsock.h
latest CW additions
[wxWidgets.git] / include / wx / mac / macsock.h
1 /*********************************************************************
2 Project : GUSI - Grand Unified Socket Interface
3 File : GUSI.h - Socket calls
4 Author : Matthias Neeracher
5 Language : MPW C/C++
6 *********************************************************************/
7
8 #ifndef _GUSI_
9 #define _GUSI_
10
11 #ifdef __MWERKS__
12 #ifndef macintosh
13 #define macintosh 1
14 #endif
15 #endif
16
17 #ifdef macintosh
18 #include <errno.h>
19 #else
20 #ifndef KERNEL
21 extern int errno; /* global error number */
22 #endif
23 #endif
24
25 #define __P(protos) protos /* full-blown ANSI C */
26
27 #define EPERM 1 /* Operation not permitted */
28 /* MSL defines ENOMEM, EACCES, ENOENT, ENOSYS. We give in. */
29 #ifndef ENOENT
30 #define ENOENT 2 /* No such file or directory */
31 #endif
32 #define ESRCH 3 /* No such process */
33 #define EINTR 4 /* Interrupted system call */
34 #define EIO 5 /* Input/output error */
35 #define ENXIO 6 /* Device not configured */
36 #define E2BIG 7 /* Argument list too long */
37 #define ENOEXEC 8 /* Exec format error */
38 #define EBADF 9 /* Bad file descriptor */
39 #define ECHILD 10 /* No child processes */
40 #define EDEADLK 11 /* Resource deadlock avoided */
41 /* 11 was EAGAIN */
42 #ifndef ENOMEM
43 #define ENOMEM 12 /* Cannot allocate memory */
44 #define EACCES 13 /* Permission denied */
45 #endif
46 #define EFAULT 14 /* Bad address */
47 #ifndef _POSIX_SOURCE
48 #define ENOTBLK 15 /* Block device required */
49 #define EBUSY 16 /* Device busy */
50 #endif
51 #define EEXIST 17 /* File exists */
52 #define EXDEV 18 /* Cross-device link */
53 #define ENODEV 19 /* Operation not supported by device */
54 #define ENOTDIR 20 /* Not a directory */
55 #define EISDIR 21 /* Is a directory */
56 #define EINVAL 22 /* Invalid argument */
57 #define ENFILE 23 /* Too many open files in system */
58 #define EMFILE 24 /* Too many open files */
59 #define ENOTTY 25 /* Inappropriate ioctl for device */
60 #ifndef _POSIX_SOURCE
61 #define ETXTBSY 26 /* Text file busy */
62 #endif
63 #define EFBIG 27 /* File too large */
64 #define ENOSPC 28 /* No space left on device */
65 #define ESPIPE 29 /* Illegal seek */
66 #define EROFS 30 /* Read-only file system */
67 #define EMLINK 31 /* Too many links */
68 #define EPIPE 32 /* Broken pipe */
69
70 #ifndef __MWERKS__
71 /* math software */
72 #define EDOM 33 /* Numerical argument out of domain */
73 #define ERANGE 34 /* Result too large */
74 #endif
75
76 /* non-blocking and interrupt i/o */
77 #if defined(macintosh)
78 #ifndef EAGAIN
79 #define EAGAIN 11
80 #endif
81 #else
82 #define EAGAIN 35 /* Resource temporarily unavailable */
83 #endif
84 #define EWOULDBLOCK EAGAIN /* Operation would block */
85 #ifndef _POSIX_SOURCE
86 /* Did I tell that MSL also occupies errnos 33-40? We give in. */
87 #if ENOMEM==37
88 #define EINPROGRESS 136 /* Operation now in progress */
89 #define EALREADY 137 /* Operation already in progress */
90
91 /* ipc/network software -- argument errors */
92 #define ENOTSOCK 138 /* Socket operation on non-socket */
93 #define EDESTADDRREQ 139 /* Destination address required */
94 #define EMSGSIZE 140 /* Message too long */
95 #else
96 #define EINPROGRESS 36 /* Operation now in progress */
97 #define EALREADY 37 /* Operation already in progress */
98
99 /* ipc/network software -- argument errors */
100 #define ENOTSOCK 38 /* Socket operation on non-socket */
101 #define EDESTADDRREQ 39 /* Destination address required */
102 #define EMSGSIZE 40 /* Message too long */
103 #endif
104 #define EPROTOTYPE 41 /* Protocol wrong type for socket */
105 #define ENOPROTOOPT 42 /* Protocol not available */
106 #define EPROTONOSUPPORT 43 /* Protocol not supported */
107 #define ESOCKTNOSUPPORT 44 /* Socket type not supported */
108 #define EOPNOTSUPP 45 /* Operation not supported on socket */
109 #define EPFNOSUPPORT 46 /* Protocol family not supported */
110 #define EAFNOSUPPORT 47 /* Address family not supported by protocol family */
111 #define EADDRINUSE 48 /* Address already in use */
112 #define EADDRNOTAVAIL 49 /* Can't assign requested address */
113
114 /* ipc/network software -- operational errors */
115 #define ENETDOWN 50 /* Network is down */
116 #define ENETUNREACH 51 /* Network is unreachable */
117 #define ENETRESET 52 /* Network dropped connection on reset */
118 #define ECONNABORTED 53 /* Software caused connection abort */
119 #define ECONNRESET 54 /* Connection reset by peer */
120 #define ENOBUFS 55 /* No buffer space available */
121 #define EISCONN 56 /* Socket is already connected */
122 #define ENOTCONN 57 /* Socket is not connected */
123 #define ESHUTDOWN 58 /* Can't send after socket shutdown */
124 #define ETOOMANYREFS 59 /* Too many references: can't splice */
125 #define ETIMEDOUT 60 /* Connection timed out */
126 #define ECONNREFUSED 61 /* Connection refused */
127
128 #define ELOOP 62 /* Too many levels of symbolic links */
129 #endif /* _POSIX_SOURCE */
130 #define ENAMETOOLONG 63 /* File name too long */
131
132 /* should be rearranged */
133 #ifndef _POSIX_SOURCE
134 #define EHOSTDOWN 64 /* Host is down */
135 #define EHOSTUNREACH 65 /* No route to host */
136 #endif /* _POSIX_SOURCE */
137 #define ENOTEMPTY 66 /* Directory not empty */
138
139 /* quotas & mush */
140 #ifndef _POSIX_SOURCE
141 #define EPROCLIM 67 /* Too many processes */
142 #define EUSERS 68 /* Too many users */
143 #define EDQUOT 69 /* Disc quota exceeded */
144
145 /* Network File System */
146 #define ESTALE 70 /* Stale NFS file handle */
147 #define EREMOTE 71 /* Too many levels of remote in path */
148 #define EBADRPC 72 /* RPC struct is bad */
149 #define ERPCMISMATCH 73 /* RPC version wrong */
150 #define EPROGUNAVAIL 74 /* RPC prog. not avail */
151 #define EPROGMISMATCH 75 /* Program version wrong */
152 #define EPROCUNAVAIL 76 /* Bad procedure for program */
153 #endif /* _POSIX_SOURCE */
154
155 #define ENOLCK 77 /* No locks available */
156
157 #ifndef ENOSYS
158 #define ENOSYS 78 /* Function not implemented */
159 #endif
160
161 #define EFTYPE 79 /* Inappropriate file type or format */
162
163 #ifdef KERNEL
164 /* pseudo-errors returned inside kernel to modify return to process */
165 #define ERESTART -1 /* restart syscall */
166 #define EJUSTRETURN -2 /* don't modify regs, just return */
167 #endif
168
169 #define NBBY 8 /* number of bits in a byte */
170
171 /*
172 * Select uses bit masks of file descriptors in longs. These macros
173 * manipulate such bit fields (the filesystem macros use chars).
174 * FD_SETSIZE may be defined by the user, but the default here should
175 * be enough for most uses.
176 */
177 #ifndef FD_SETSIZE
178 #ifdef macintosh
179 #define FD_SETSIZE 64
180 #else
181 #define FD_SETSIZE 256
182 #endif
183 #endif
184
185 typedef long fd_mask;
186 #define NFDBITS (sizeof(fd_mask) * NBBY) /* bits per mask */
187
188 #ifndef howmany
189 #define howmany(x, y) (((x)+((y)-1))/(y))
190 #endif
191
192 typedef struct fd_set {
193 fd_mask fds_bits[howmany(FD_SETSIZE, NFDBITS)];
194 } fd_set;
195
196 #define FD_SET(n, p) ((p)->fds_bits[(n)/NFDBITS] |= (1 << ((n) % NFDBITS)))
197 #define FD_CLR(n, p) ((p)->fds_bits[(n)/NFDBITS] &= ~(1 << ((n) % NFDBITS)))
198 #define FD_ISSET(n, p) ((p)->fds_bits[(n)/NFDBITS] & (1 << ((n) % NFDBITS)))
199 #define FD_ZERO(p) bzero((char *)(p), sizeof(*(p)))
200
201 // #include <sys/types.h>
202 typedef unsigned char u_char;
203 typedef unsigned short u_short;
204 typedef unsigned int u_int;
205 typedef unsigned long u_long;
206 typedef unsigned short ushort; /* Sys V compatibility */
207
208 typedef char * caddr_t; /* core address */
209 typedef long daddr_t; /* disk address */
210 typedef short dev_t; /* device number */
211 typedef u_long ino_t; /* inode number */
212 typedef long off_t; /* file offset (should be a quad) */
213 typedef u_short nlink_t; /* link count */
214 typedef long swblk_t; /* swap offset */
215 typedef long segsz_t; /* segment size */
216 typedef u_short uid_t; /* user id */
217 typedef u_short gid_t; /* group id */
218 typedef short pid_t; /* process id */
219 typedef u_short mode_t; /* permissions */
220 typedef u_long fixpt_t; /* fixed point number */
221
222
223 // Feel free to increase FD_SETSIZE as needed
224 #define GUSI_MAX_FD FD_SETSIZE
225
226 //#include <sys/cdefs.h>
227
228 #ifndef macintosh
229 #ifdef __MWERKS__
230 #define macintosh 1
231 #endif
232 #endif
233
234 #if defined(__cplusplus)
235 #define __BEGIN_DECLS extern "C" {
236 #define __END_DECLS }
237 #else
238 #define __BEGIN_DECLS
239 #define __END_DECLS
240 #endif
241
242 //#include <compat.h>
243 //#include <sys/ioctl.h>
244 #define IOCPARM_MASK 0x1fff /* parameter length, at most 13 bits */
245 #define IOCPARM_LEN(x) (((x) >> 16) & IOCPARM_MASK)
246 #define IOCBASECMD(x) ((x) & ~IOCPARM_MASK)
247 #define IOCGROUP(x) (((x) >> 8) & 0xff)
248
249 #define IOCPARM_MAX NBPG /* max size of ioctl, mult. of NBPG */
250 #define IOC_VOID 0x20000000 /* no parameters */
251 #define IOC_OUT 0x40000000 /* copy out parameters */
252 #define IOC_IN 0x80000000 /* copy in parameters */
253 #define IOC_INOUT (IOC_IN|IOC_OUT)
254 #define IOC_DIRMASK 0xe0000000 /* mask for IN/OUT/VOID */
255
256 #define _IOC(inout,group,num,len) \
257 (inout | ((len & IOCPARM_MASK) << 16) | ((group) << 8) | (num))
258 #define _IO(g,n) _IOC(IOC_VOID, (g), (n), 0)
259 #define _IOR(g,n,t) _IOC(IOC_OUT, (g), (n), sizeof(t))
260 #define _IOW(g,n,t) _IOC(IOC_IN, (g), (n), sizeof(t))
261 /* this should be _IORW, but stdio got there first */
262 #define _IOWR(g,n,t) _IOC(IOC_INOUT, (g), (n), sizeof(t))
263
264 #define FIOCLEX _IO('f', 1) /* set close on exec on fd */
265 #define FIONCLEX _IO('f', 2) /* remove close on exec */
266 #define FIONREAD _IOR('f', 127, int) /* get # bytes to read */
267 #define FIONBIO _IOW('f', 126, int) /* set/clear non-blocking i/o */
268 #define FIOASYNC _IOW('f', 125, int) /* set/clear async i/o */
269 #define FIOSETOWN _IOW('f', 124, int) /* set owner */
270 #define FIOGETOWN _IOR('f', 123, int) /* get owner */
271
272 __BEGIN_DECLS
273 #ifdef macintosh
274 int ioctl(int fildes, unsigned int cmd, unsigned long *arg);
275 #else
276 int ioctl __P((int, unsigned long, ...));
277 #endif
278 __END_DECLS
279
280 //#include <sys/fcntl.h>
281 //#include <sys/stat.h>
282 //#include <dirent.h>
283 //#include <Types.h>
284 //#include <Events.h>
285 //#include <Files.h>
286 //#include <AppleTalk.h>
287 //#include <CTBUtilities.h>
288 //#include <Packages.h>
289 //#include <PPCToolBox.h>
290 //#include <StandardFile.h>
291 //#include <stdio.h>
292 //#include <sys/time.h>
293
294
295 /*
296 * Definitions for byte order, according to byte significance from low
297 * address to high.
298 */
299 #define LITTLE_ENDIAN 1234 /* LSB first: i386, vax */
300 #define BIG_ENDIAN 4321 /* MSB first: 68000, ibm, net */
301 #define PDP_ENDIAN 3412 /* LSB first in word, MSW first in long */
302
303 #define BYTE_ORDER BIG_ENDIAN
304
305 __BEGIN_DECLS
306 unsigned long htonl (unsigned long);
307 unsigned short htons (unsigned short);
308 unsigned long ntohl (unsigned long);
309 unsigned short ntohs (unsigned short);
310 __END_DECLS
311
312 /*
313 * Macros for network/external number representation conversion.
314 */
315 #if BYTE_ORDER == BIG_ENDIAN && !defined(lint)
316 #define ntohl(x) (x)
317 #define ntohs(x) (x)
318 #define htonl(x) (x)
319 #define htons(x) (x)
320
321 #define NTOHL(x) (x)
322 #define NTOHS(x) (x)
323 #define HTONL(x) (x)
324 #define HTONS(x) (x)
325
326 #else
327
328 #define NTOHL(x) (x) = ntohl((u_long)x)
329 #define NTOHS(x) (x) = ntohs((u_short)x)
330 #define HTONL(x) (x) = htonl((u_long)x)
331 #define HTONS(x) (x) = htons((u_short)x)
332 #endif
333
334
335
336 /*
337 * Constants and structures defined by the internet system,
338 * Per RFC 790, September 1981.
339 */
340
341 /*
342 * Protocols
343 */
344 #define IPPROTO_IP 0 /* dummy for IP */
345 #define IPPROTO_ICMP 1 /* control message protocol */
346 #define IPPROTO_GGP 3 /* gateway^2 (deprecated) */
347 #define IPPROTO_TCP 6 /* tcp */
348 #define IPPROTO_EGP 8 /* exterior gateway protocol */
349 #define IPPROTO_PUP 12 /* pup */
350 #define IPPROTO_UDP 17 /* user datagram protocol */
351 #define IPPROTO_IDP 22 /* xns idp */
352 #define IPPROTO_TP 29 /* tp-4 w/ class negotiation */
353 #define IPPROTO_EON 80 /* ISO cnlp */
354
355 #define IPPROTO_RAW 255 /* raw IP packet */
356 #define IPPROTO_MAX 256
357
358
359 /*
360 * Local port number conventions:
361 * Ports < IPPORT_RESERVED are reserved for
362 * privileged processes (e.g. root).
363 * Ports > IPPORT_USERRESERVED are reserved
364 * for servers, not necessarily privileged.
365 */
366 #define IPPORT_RESERVED 1024
367 #define IPPORT_USERRESERVED 5000
368
369 /*
370 * Internet address (a structure for historical reasons)
371 */
372 struct in_addr {
373 u_long s_addr;
374 };
375
376 /*
377 * Definitions of bits in internet address integers.
378 * On subnets, the decomposition of addresses to host and net parts
379 * is done according to subnet mask, not the masks here.
380 */
381 #define IN_CLASSA(i) (((long)(i) & 0x80000000) == 0)
382 #define IN_CLASSA_NET 0xff000000
383 #define IN_CLASSA_NSHIFT 24
384 #define IN_CLASSA_HOST 0x00ffffff
385 #define IN_CLASSA_MAX 128
386
387 #define IN_CLASSB(i) (((long)(i) & 0xc0000000) == 0x80000000)
388 #define IN_CLASSB_NET 0xffff0000
389 #define IN_CLASSB_NSHIFT 16
390 #define IN_CLASSB_HOST 0x0000ffff
391 #define IN_CLASSB_MAX 65536
392
393 #define IN_CLASSC(i) (((long)(i) & 0xe0000000) == 0xc0000000)
394 #define IN_CLASSC_NET 0xffffff00
395 #define IN_CLASSC_NSHIFT 8
396 #define IN_CLASSC_HOST 0x000000ff
397
398 #define IN_CLASSD(i) (((long)(i) & 0xf0000000) == 0xe0000000)
399 #define IN_MULTICAST(i) IN_CLASSD(i)
400
401 #define IN_EXPERIMENTAL(i) (((long)(i) & 0xe0000000) == 0xe0000000)
402 #define IN_BADCLASS(i) (((long)(i) & 0xf0000000) == 0xf0000000)
403
404 #define INADDR_ANY (u_long)0x00000000
405 #define INADDR_BROADCAST (u_long)0xffffffff /* must be masked */
406 #ifndef KERNEL
407 #define INADDR_NONE 0xffffffff /* -1 return */
408 #endif
409
410 #define IN_LOOPBACKNET 127 /* official! */
411
412 /*
413 * Socket address, internet style.
414 */
415 struct sockaddr_in {
416 u_char sin_len;
417 u_char sin_family;
418 u_short sin_port;
419 struct in_addr sin_addr;
420 char sin_zero[8];
421 };
422
423 /*
424 * Structure used to describe IP options.
425 * Used to store options internally, to pass them to a process,
426 * or to restore options retrieved earlier.
427 * The ip_dst is used for the first-hop gateway when using a source route
428 * (this gets put into the header proper).
429 */
430 #ifdef __MWERKS__
431 #pragma cplusplus off
432 #endif
433 struct ip_opts {
434 struct in_addr ip_dst; /* first hop, 0 w/o src rt */
435 char ip_opts[40]; /* actually variable in size */
436 };
437 #ifdef __MWERKS__
438 #pragma cplusplus reset
439 #endif
440
441 /*
442 * Options for use with [gs]etsockopt at the IP level.
443 * First word of comment is data type; bool is stored in int.
444 */
445 #define IP_OPTIONS 1 /* buf/ip_opts; set/get IP per-packet options */
446 #define IP_HDRINCL 2 /* int; header is included with data (raw) */
447 #define IP_TOS 3 /* int; IP type of service and precedence */
448 #define IP_TTL 4 /* int; IP time to live */
449 #define IP_RECVOPTS 5 /* bool; receive all IP options w/datagram */
450 #define IP_RECVRETOPTS 6 /* bool; receive IP options for response */
451 #define IP_RECVDSTADDR 7 /* bool; receive IP dst addr w/datagram */
452 #define IP_RETOPTS 8 /* ip_opts; set/get IP per-packet options */
453
454 /*
455 * Structure returned by gettimeofday(2) system call,
456 * and used in other calls.
457 */
458 struct timeval {
459 long tv_sec; /* seconds */
460 long tv_usec; /* and microseconds */
461 };
462
463 struct timezone {
464 int tz_minuteswest; /* minutes west of Greenwich */
465 int tz_dsttime; /* type of dst correction */
466 };
467 #define DST_NONE 0 /* not on dst */
468 #define DST_USA 1 /* USA style dst */
469 #define DST_AUST 2 /* Australian style dst */
470 #define DST_WET 3 /* Western European dst */
471 #define DST_MET 4 /* Middle European dst */
472 #define DST_EET 5 /* Eastern European dst */
473 #define DST_CAN 6 /* Canada */
474 //#include <sys/socket.h>
475
476 /*
477 * Definitions related to sockets: types, address families, options.
478 */
479
480 /*
481 * Types
482 */
483 #define SOCK_STREAM 1 /* stream socket */
484 #define SOCK_DGRAM 2 /* datagram socket */
485 #define SOCK_RAW 3 /* raw-protocol interface */
486 #define SOCK_RDM 4 /* reliably-delivered message */
487 #define SOCK_SEQPACKET 5 /* sequenced packet stream */
488
489 /*
490 * Option flags per-socket.
491 */
492 #define SO_DEBUG 0x0001 /* turn on debugging info recording */
493 #define SO_ACCEPTCONN 0x0002 /* socket has had listen() */
494 #define SO_REUSEADDR 0x0004 /* allow local address reuse */
495 #define SO_KEEPALIVE 0x0008 /* keep connections alive */
496 #define SO_DONTROUTE 0x0010 /* just use interface addresses */
497 #define SO_BROADCAST 0x0020 /* permit sending of broadcast msgs */
498 #define SO_USELOOPBACK 0x0040 /* bypass hardware when possible */
499 #define SO_LINGER 0x0080 /* linger on close if data present */
500 #define SO_OOBINLINE 0x0100 /* leave received OOB data in line */
501
502 /*
503 * Additional options, not kept in so_options.
504 */
505 #define SO_SNDBUF 0x1001 /* send buffer size */
506 #define SO_RCVBUF 0x1002 /* receive buffer size */
507 #define SO_SNDLOWAT 0x1003 /* send low-water mark */
508 #define SO_RCVLOWAT 0x1004 /* receive low-water mark */
509 #define SO_SNDTIMEO 0x1005 /* send timeout */
510 #define SO_RCVTIMEO 0x1006 /* receive timeout */
511 #define SO_ERROR 0x1007 /* get error status and clear */
512 #define SO_TYPE 0x1008 /* get socket type */
513
514 /*
515 * Structure used for manipulating linger option.
516 */
517 struct linger {
518 int l_onoff; /* option on/off */
519 int l_linger; /* linger time */
520 };
521
522 /*
523 * Level number for (get/set)sockopt() to apply to socket itself.
524 */
525 #define SOL_SOCKET 0xffff /* options for socket level */
526
527 /*
528 * Address families.
529 */
530 #ifdef macintosh
531 #define AF_UNSPEC 0 /* unspecified */
532 #define AF_UNIX 1 /* local to host (pipes, portals) */
533 #define AF_INET 2 /* internetwork: UDP, TCP, etc. */
534 #define AF_CTB 3 /* Apple Comm Toolbox (not yet supported) */
535 #define AF_FILE 4 /* Normal File I/O (used internally) */
536 #define AF_PPC 5 /* PPC Toolbox */
537 #define AF_PAP 6 /* Printer Access Protocol (client only) */
538 #define AF_APPLETALK 16 /* Apple Talk */
539
540 #define AF_MAX 20
541 #else
542 #define ATALK_SYMADDR 272 /* Symbolic Address for AppleTalk */
543 #define AF_UNSPEC 0 /* unspecified */
544 #define AF_UNIX 1 /* local to host (pipes, portals) */
545 #define AF_INET 2 /* internetwork: UDP, TCP, etc. */
546 #define AF_IMPLINK 3 /* arpanet imp addresses */
547 #define AF_PUP 4 /* pup protocols: e.g. BSP */
548 #define AF_CHAOS 5 /* mit CHAOS protocols */
549 #define AF_NS 6 /* XEROX NS protocols */
550 #define AF_ISO 7 /* ISO protocols */
551 #define AF_OSI AF_ISO
552 #define AF_ECMA 8 /* european computer manufacturers */
553 #define AF_DATAKIT 9 /* datakit protocols */
554 #define AF_CCITT 10 /* CCITT protocols, X.25 etc */
555 #define AF_SNA 11 /* IBM SNA */
556 #define AF_DECnet 12 /* DECnet */
557 #define AF_DLI 13 /* DEC Direct data link interface */
558 #define AF_LAT 14 /* LAT */
559 #define AF_HYLINK 15 /* NSC Hyperchannel */
560 #define AF_APPLETALK16 /* Apple Talk */
561 #define AF_ROUTE 17 /* Internal Routing Protocol */
562 #define AF_LINK 18 /* Link layer interface */
563 #define pseudo_AF_XTP 19 /* eXpress Transfer Protocol (no AF) */
564
565 #define AF_MAX 20
566 #endif
567
568 /*
569 * Structure used by kernel to store most
570 * addresses.
571 */
572 #if defined(powerc) || defined (__powerc)
573 #pragma options align=mac68k
574 #endif
575 struct sockaddr {
576 u_char sa_len; /* total length */
577 u_char sa_family; /* address family */
578 char sa_data[14]; /* actually longer; address value */
579 };
580 #if defined(powerc) || defined (__powerc)
581 #pragma options align=reset
582 #endif
583
584 /*
585 * Structure used by kernel to pass protocol
586 * information in raw sockets.
587 */
588 struct sockproto {
589 u_short sp_family; /* address family */
590 u_short sp_protocol; /* protocol */
591 };
592
593 /*
594 * Protocol families, same as address families for now.
595 */
596 #ifdef macintosh
597 #define PF_UNSPEC AF_UNSPEC /* unspecified */
598 #define PF_UNIX AF_UNIX /* local to host (pipes, portals) */
599 #define PF_INET AF_INET /* internetwork: UDP, TCP, etc. */
600 #define PF_CTB AF_CTB /* Apple Comm Toolbox (not yet supported) */
601 #define PF_FILE AF_FILE /* Normal File I/O (used internally) */
602 #define PF_PPC AF_PPC /* PPC Toolbox */
603 #define PF_PAP AF_PAP /* Printer Access Protocol (client only) */
604 #define PF_APPLETALK AF_APPLETALK /* Apple Talk */
605 #else
606 #define PF_UNSPEC AF_UNSPEC
607 #define PF_UNIX AF_UNIX
608 #define PF_INET AF_INET
609 #define PF_IMPLINK AF_IMPLINK
610 #define PF_PUP AF_PUP
611 #define PF_CHAOS AF_CHAOS
612 #define PF_NS AF_NS
613 #define PF_ISO AF_ISO
614 #define PF_OSI AF_ISO
615 #define PF_ECMA AF_ECMA
616 #define PF_DATAKIT AF_DATAKIT
617 #define PF_CCITT AF_CCITT
618 #define PF_SNA AF_SNA
619 #define PF_DECnet AF_DECnet
620 #define PF_DLI AF_DLI
621 #define PF_LAT AF_LAT
622 #define PF_HYLINK AF_HYLINK
623 #define PF_APPLETALK AF_APPLETALK
624 #define PF_ROUTE AF_ROUTE
625 #define PF_LINK AF_LINK
626 #define PF_XTP pseudo_AF_XTP /* really just proto family, no AF */
627 #endif
628
629 #define PF_MAX AF_MAX
630
631 /*
632 * Maximum queue length specifiable by listen.
633 */
634 #define SOMAXCONN 5
635
636 /*
637 * Message header for recvmsg and sendmsg calls.
638 * Used value-result for recvmsg, value only for sendmsg.
639 */
640 struct msghdr {
641 caddr_t msg_name; /* optional address */
642 u_int msg_namelen; /* size of address */
643 struct iovec *msg_iov; /* scatter/gather array */
644 u_int msg_iovlen; /* # elements in msg_iov */
645 caddr_t msg_control; /* ancillary data, see below */
646 u_int msg_controllen; /* ancillary data buffer len */
647 int msg_flags; /* flags on received message */
648 };
649
650 #define MSG_OOB 0x1 /* process out-of-band data */
651 #define MSG_PEEK 0x2 /* peek at incoming message */
652 #define MSG_DONTROUTE 0x4 /* send without using routing tables */
653 #define MSG_EOR 0x8 /* data completes record */
654 #define MSG_TRUNC 0x10 /* data discarded before delivery */
655 #define MSG_CTRUNC 0x20 /* control data lost before delivery */
656 #define MSG_WAITALL 0x40 /* wait for full request or error */
657
658 /*
659 * Header for ancillary data objects in msg_control buffer.
660 * Used for additional information with/about a datagram
661 * not expressible by flags. The format is a sequence
662 * of message elements headed by cmsghdr structures.
663 */
664 struct cmsghdr {
665 u_int cmsg_len; /* data byte count, including hdr */
666 int cmsg_level; /* originating protocol */
667 int cmsg_type; /* protocol-specific type */
668 /* followed by u_char cmsg_data[]; */
669 };
670
671 /* given pointer to struct adatahdr, return pointer to data */
672 #define CMSG_DATA(cmsg) ((u_char *)((cmsg) + 1))
673
674 /* given pointer to struct adatahdr, return pointer to next adatahdr */
675 #define CMSG_NXTHDR(mhdr, cmsg) \
676 (((caddr_t)(cmsg) + (cmsg)->cmsg_len + sizeof(struct cmsghdr) > \
677 (mhdr)->msg_control + (mhdr)->msg_controllen) ? \
678 (struct cmsghdr *)NULL : \
679 (struct cmsghdr *)((caddr_t)(cmsg) + ALIGN((cmsg)->cmsg_len)))
680
681 #define CMSG_FIRSTHDR(mhdr) ((struct cmsghdr *)(mhdr)->msg_control)
682
683 /* "Socket"-level control message types: */
684 #define SCM_RIGHTS 0x01 /* access rights (array of int) */
685
686 /*
687 * 4.3 compat sockaddr, move to compat file later
688 */
689 struct osockaddr {
690 u_short sa_family; /* address family */
691 char sa_data[14]; /* up to 14 bytes of direct address */
692 };
693
694 /*
695 * 4.3-compat message header (move to compat file later).
696 */
697 struct omsghdr {
698 caddr_t msg_name; /* optional address */
699 int msg_namelen; /* size of address */
700 struct iovec *msg_iov; /* scatter/gather array */
701 int msg_iovlen; /* # elements in msg_iov */
702 caddr_t msg_accrights; /* access rights sent/received */
703 int msg_accrightslen;
704 };
705
706 //#include <string.h>
707 //#include <netinet/in.h>
708 //#include <netdb.h>
709 //#include <sys/un.h>
710 //#include <unistd.h>
711 //#include <machine/endian.h>
712 //
713
714 typedef enum spin_msg {
715 SP_MISC, /* some weird thing, usually just return immediately if you get this */
716 SP_SELECT, /* in a select call */
717 SP_NAME, /* getting a host by name */
718 SP_ADDR, /* getting a host by address */
719 SP_STREAM_READ, /* Stream read call */
720 SP_STREAM_WRITE, /* Stream write call */
721 SP_DGRAM_READ, /* Datagram read call */
722 SP_DGRAM_WRITE, /* Datagram write call */
723 SP_SLEEP, /* sleeping, passes ticks left to sleep */
724 SP_AUTO_SPIN /* Autospin, passes argument to SpinCursor */
725 } spin_msg;
726
727 typedef int (*GUSISpinFn)(spin_msg msg, long param);
728 typedef void (*GUSIEvtHandler)(EventRecord * ev);
729 typedef GUSIEvtHandler GUSIEvtTable[24];
730
731 /*
732 * Address families, defined in sys/socket.h
733 *
734
735 #define AF_UNSPEC 0 // unspecified
736 #define AF_UNIX 1 // local to host (pipes, portals)
737 #define AF_INET 2 // internetwork: UDP, TCP, etc.
738 #define AF_CTB 3 // Apple Comm Toolbox (not yet supported)
739 #define AF_FILE 4 // Normal File I/O (used internally)
740 #define AF_PPC 5 // PPC Toolbox
741 #define AF_PAP 6 // Printer Access Protocol (client only)
742 #define AF_APPLETALK 16 // Apple Talk
743
744 */
745
746 #define ATALK_SYMADDR 272 /* Symbolic Address for AppleTalk */
747
748 /*
749 * Some Implementations of GUSI require you to call GUSISetup for the
750 * socket families you'd like to have defined. It's a good idea to call
751 * this for *all* implementations.
752 *
753 * GUSIDefaultSetup() will include all socket families.
754 *
755 * Never call any of the GUSIwithXXX routines directly.
756 */
757
758 __BEGIN_DECLS
759 void GUSIwithAppleTalkSockets();
760 void GUSIwithInternetSockets();
761 void GUSIwithPAPSockets();
762 void GUSIwithPPCSockets();
763 void GUSIwithUnixSockets();
764 void GUSIwithSIOUXSockets();
765 void GUSIwithMPWSockets();
766
767 void GUSISetup(void (*socketfamily)());
768 void GUSIDefaultSetup();
769 __END_DECLS
770 /*
771 * Types, defined in sys/socket.h
772 *
773
774 #define SOCK_STREAM 1 // stream socket
775 #define SOCK_DGRAM 2 // datagram socket
776
777 */
778
779 /*
780 * Defined in sys/un.h
781 *
782
783 struct sockaddr_un {
784 short sun_family;
785 char sun_path[108];
786 };
787
788 */
789
790 #ifndef PRAGMA_ALIGN_SUPPORTED
791 #error Apple had some fun with the conditional macros again
792 #endif
793
794 #if PRAGMA_ALIGN_SUPPORTED
795 #pragma options align=mac68k
796 #endif
797
798 /*
799 struct sockaddr_atlk {
800 short family;
801 AddrBlock addr;
802 };
803
804 struct sockaddr_atlk_sym {
805 short family;
806 EntityName name;
807 };
808
809 struct sockaddr_ppc {
810 short family;
811 LocationNameRec location;
812 PPCPortRec port;
813 };
814
815 // Definitions for choose()
816
817 #define CHOOSE_DEFAULT 1
818 #define CHOOSE_NEW 2
819 #define CHOOSE_DIR 4
820
821 typedef struct {
822 short numTypes;
823 SFTypeList types;
824 } sa_constr_file;
825
826 typedef struct {
827 short numTypes;
828 NLType types;
829 } sa_constr_atlk;
830
831
832 // Definitions for sa_constr_ppc
833
834 #define PPC_CON_NEWSTYLE 0x8000
835 #define PPC_CON_MATCH_NAME 0x0001
836 #define PPC_CON_MATCH_TYPE 0x0002
837 #define PPC_CON_MATCH_NBP 0x0004
838
839 typedef struct {
840 short flags;
841 Str32 nbpType;
842 PPCPortRec match;
843 } sa_constr_ppc;
844
845 */
846
847 #if PRAGMA_ALIGN_SUPPORTED
848 #pragma options align=reset
849 #endif
850
851 __BEGIN_DECLS
852 /*
853 * IO/Socket stuff, defined elsewhere (unistd.h, sys/socket.h
854 *
855 */
856 int socket(int domain, int type, short protocol);
857 int bind(int s, void *name, int namelen);
858 int connect(int s, void *addr, int addrlen);
859 int listen(int s, int qlen);
860 int accept(int s, void *addr, int *addrlen);
861 int close(int s);
862 int read(int s, char *buffer, unsigned buflen);
863 int readv(int s, struct iovec *iov, int count);
864 int recv(int s, void *buffer, int buflen, int flags);
865 int recvfrom(int s, void *buffer, int buflen, int flags, void *from, int *fromlen);
866 int recvmsg(int s,struct msghdr *msg,int flags);
867 int write(int s, const char *buffer, unsigned buflen);
868 int writev(int s, struct iovec *iov, int count);
869 int send(int s, void *buffer, int buflen, int flags);
870 int sendto (int s, void *buffer, int buflen, int flags, void *to, int tolen);
871 int sendmsg(int s,struct msghdr *msg,int flags);
872 int select(int width, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
873 int getdtablesize(void);
874 int getsockname(int s, void *name, int *namelen);
875 int getpeername(int s, struct sockaddr *name, int *namelen);
876 int shutdown(int s, int how);
877 int fcntl(int s, unsigned int cmd, int arg);
878 int dup(int s);
879 int dup2(int s, int s1);
880 //int ioctl(int d, unsigned int request, long *argp);
881 int getsockopt(int s, int level, int optname, char *optval, int * optlen);
882 int setsockopt(int s, int level, int optname, char *optval, int optlen);
883 int isatty(int);
884 int remove(const char *filename);
885 int rename(const char *oldname, const char *newname);
886 int creat(const char*);
887 int faccess(char*, unsigned int, long*);
888 long lseek(int, long, int);
889 int open(const char*, int);
890 int unlink(char*);
891 int symlink(char* linkto, char* linkname);
892 int readlink(char* path, char* buf, int bufsiz);
893 int truncate(char *path, long length);
894 int ftruncate(int fd, long length);
895 int chdir(char * path);
896 int mkdir(char * path);
897 int rmdir(char * path);
898 char * getcwd(char * buf, int size);
899
900
901 /*
902 * Defined in stdio.h
903 */
904
905 #ifdef __MWERKS__
906 void fsetfileinfo (char *filename, unsigned long newcreator, unsigned long newtype);
907 #endif
908
909 void fgetfileinfo (char *filename, unsigned long * creator, unsigned long * type);
910
911 #ifdef __MWERKS__
912 FILE *fdopen(int fd, const char *mode);
913 int fwalk(int (*func)(FILE * stream));
914 #endif
915
916 int choose(
917 int domain,
918 int type,
919 char * prompt,
920 void * constraint,
921 int flags,
922 void * name,
923 int * namelen);
924
925 /*
926 * Hostname routines, defined in netdb.h
927 *
928 */
929
930 /*
931 * Structures returned by network data base library. All addresses are
932 * supplied in host order, and returned in network order (suitable for
933 * use in system calls).
934 */
935 struct hostent {
936 char *h_name; /* official name of host */
937 char **h_aliases; /* alias list */
938 int h_addrtype; /* host address type */
939 int h_length; /* length of address */
940 char **h_addr_list; /* list of addresses from name server */
941 #define h_addr h_addr_list[0] /* address, for backward compatiblity */
942 };
943
944 /*
945 * Assumption here is that a network number
946 * fits in 32 bits -- probably a poor one.
947 */
948 struct netent {
949 char *n_name; /* official name of net */
950 char **n_aliases; /* alias list */
951 int n_addrtype; /* net address type */
952 unsigned long n_net; /* network # */
953 };
954
955 struct servent {
956 char *s_name; /* official service name */
957 char **s_aliases; /* alias list */
958 int s_port; /* port # */
959 char *s_proto; /* protocol to use */
960 };
961
962 struct protoent {
963 char *p_name; /* official protocol name */
964 char **p_aliases; /* alias list */
965 int p_proto; /* protocol # */
966 };
967
968 /*
969 * Error return codes from gethostbyname() and gethostbyaddr()
970 * (left in extern int h_errno).
971 */
972
973 #define HOST_NOT_FOUND 1 /* Authoritative Answer Host not found */
974 #define TRY_AGAIN 2 /* Non-Authoritive Host not found, or SERVERFAIL */
975 #define NO_RECOVERY 3 /* Non recoverable errors, FORMERR, REFUSED, NOTIMP */
976 #define NO_DATA 4 /* Valid name, no data record of requested type */
977 #define NO_ADDRESS NO_DATA /* no address, look for MX record */
978
979 int gethostname(char *machname, long buflen);
980
981 void endhostent __P((void));
982 void endnetent __P((void));
983 void endprotoent __P((void));
984 void endservent __P((void));
985 struct hostent *gethostbyaddr __P((const char *, int, int));
986 struct hostent *gethostbyname __P((const char *));
987 struct hostent *gethostent __P((void));
988 struct netent *getnetbyaddr __P((long, int)); /* u_long? */
989 struct netent *getnetbyname __P((const char *));
990 struct netent *getnetent __P((void));
991 struct protoent *getprotobyname __P((const char *));
992 struct protoent *getprotobynumber __P((int));
993 struct protoent *getprotoent __P((void));
994 struct servent *getservbyname __P((const char *, const char *));
995 struct servent *getservbyport __P((int, const char *));
996 struct servent *getservent __P((void));
997 void herror __P((const char *));
998 void sethostent __P((int));
999 /* void sethostfile __P((const char *)); */
1000 void setnetent __P((int));
1001 void setprotoent __P((int));
1002 void setservent __P((int));
1003
1004
1005 char * inet_ntoa(struct in_addr inaddr);
1006 struct in_addr inet_addr(const char *address);
1007
1008 /*
1009 * GUSI supports a number of hooks. Every one of them has a different prototype, but needs
1010 * to be passed as a GUSIHook
1011 */
1012
1013 typedef enum {
1014 GUSI_SpinHook, /* A GUSISpinFn, to be called when a call blocks */
1015 GUSI_ExecHook, /* Boolean (*hook)(const GUSIFileRef & ref), decides if file is executable */
1016 GUSI_FTypeHook,/* Boolean (*hook)(const FSSpec & spec) sets a default file type */
1017 GUSI_SpeedHook /* A long integer, to be added to the cursor spin variable */
1018 } GUSIHookCode;
1019
1020 typedef void (*GUSIHook)(void);
1021 void GUSISetHook(GUSIHookCode code, GUSIHook hook);
1022 GUSIHook GUSIGetHook(GUSIHookCode code);
1023
1024 /*
1025 * What to do when a routine blocks
1026 */
1027
1028 /* Defined for compatibility */
1029 #define GUSISetSpin(routine) GUSISetHook(GUSI_SpinHook, (GUSIHook)routine)
1030 #define GUSIGetSpin() (GUSISpinFn) GUSIGetHook(GUSI_SpinHook)
1031
1032 int GUSISetEvents(GUSIEvtTable table);
1033 GUSIEvtHandler * GUSIGetEvents(void);
1034
1035 extern GUSIEvtHandler GUSISIOWEvents[];
1036
1037 #define SIGPIPE 13
1038 #define SIGALRM 14
1039
1040 /*
1041 * BSD memory routines, defined in compat.h
1042 *
1043 */
1044 #define index(a, b) strchr(a, b)
1045 #define rindex(a, b) strrchr(a, b)
1046 #define bzero(from, len) memset(from, 0, len)
1047 #define bcopy(from, to, len) memcpy(to, from, len)
1048 #define bcmp(s1, s2, len) memcmp(s1, s2, len)
1049 #define bfill(from, len, x) memset(from, x, len)
1050
1051
1052 __END_DECLS
1053
1054 typedef struct wxSockInternal
1055 {
1056 long nothing ;
1057 } ;
1058
1059 #endif /* !_GUSI_ */