|
|
1.1 ! root 1: /* ! 2: * UAE - The Un*x Amiga Emulator ! 3: * ! 4: * bsdsocket.library emulation ! 5: * ! 6: * Copyright 1997,98 Mathias Ortmann ! 7: * ! 8: */ ! 9: ! 10: /*#define TRACING_ENABLED */ ! 11: ! 12: #ifdef TRACING_ENABLED ! 13: #define TRACE(x) printf x; ! 14: #else ! 15: #define TRACE(x) ! 16: #endif ! 17: ! 18: extern int init_socket_layer (void); ! 19: extern void deinit_socket_layer (void); ! 20: ! 21: /* inital size of per-process descriptor table (currently fixed) */ ! 22: #define DEFAULT_DTABLE_SIZE 64 ! 23: ! 24: #define SCRATCHBUFSIZE 128 ! 25: ! 26: #define MAXPENDINGASYNC 512 ! 27: ! 28: #define MAXADDRLEN 256 ! 29: ! 30: /* allocated and maintained on a per-task basis */ ! 31: struct socketbase { ! 32: struct socketbase *next; ! 33: struct socketbase *nextsig; /* queue for tasks to signal */ ! 34: ! 35: int dosignal; /* signal flag */ ! 36: uae_u32 ownertask; /* task that opened the library */ ! 37: int signal; /* signal allocated for that task */ ! 38: int sb_errno, sb_herrno; /* errno and herrno variables */ ! 39: uae_u32 errnoptr, herrnoptr; /* pointers */ ! 40: uae_u32 errnosize, herrnosize; /* pinter sizes */ ! 41: int dtablesize; /* current descriptor/flag etc. table size */ ! 42: int *dtable; /* socket descriptor table */ ! 43: int *ftable; /* socket flags */ ! 44: int resultval; ! 45: uae_u32 hostent; /* pointer to the current hostent structure (Amiga mem) */ ! 46: uae_u32 hostentsize; ! 47: uae_u32 protoent; /* pointer to the current protoent structure (Amiga mem) */ ! 48: uae_u32 protoentsize; ! 49: uae_u32 servent; /* pointer to the current servent structure (Amiga mem) */ ! 50: uae_u32 serventsize; ! 51: uae_u32 sigstosend; ! 52: uae_u32 eventsigs; /* EVENT sigmask */ ! 53: uae_u32 eintrsigs; /* EINTR sigmask */ ! 54: int eintr; /* interrupted by eintrsigs? */ ! 55: int eventindex; /* current socket looked at by GetSocketEvents() to prevent starvation */ ! 56: ! 57: /* host-specific fields below */ ! 58: #ifdef _WIN32 ! 59: unsigned int sockAbort; /* for aborting WinSock2 select() (damn Microsoft) */ ! 60: unsigned int sockAsync; /* for aborting WSBAsyncSelect() in window message handler */ ! 61: int needAbort; /* abort flag */ ! 62: void *hAsyncTask; /* async task handle */ ! 63: void *hEvent; /* thread event handle */ ! 64: unsigned int *mtable; /* window messages allocated for asynchronous event notification */ ! 65: #endif ! 66: } *socketbases; ! 67: ! 68: ! 69: #define LIBRARY_SIZEOF 36 ! 70: ! 71: struct UAEBSDBase { ! 72: char dummy[LIBRARY_SIZEOF]; ! 73: struct socketbase *sb; ! 74: char scratchbuf[SCRATCHBUFSIZE]; ! 75: }; ! 76: ! 77: /* socket flags */ ! 78: /* socket events to report */ ! 79: #define REP_ACCEPT 0x01 /* there is a connection to accept() */ ! 80: #define REP_CONNECT 0x02 /* connect() completed */ ! 81: #define REP_OOB 0x04 /* socket has out-of-band data */ ! 82: #define REP_READ 0x08 /* socket is readable */ ! 83: #define REP_WRITE 0x10 /* socket is writeable */ ! 84: #define REP_ERROR 0x20 /* asynchronous error on socket */ ! 85: #define REP_CLOSE 0x40 /* connection closed (graceful or not) */ ! 86: #define REP_ALL 0x7f ! 87: /* socket events that occurred */ ! 88: #define SET_ACCEPT 0x0100 /* there is a connection to accept() */ ! 89: #define SET_CONNECT 0x0200 /* connect() completed */ ! 90: #define SET_OOB 0x0400 /* socket has out-of-band data */ ! 91: #define SET_READ 0x0800 /* socket is readable */ ! 92: #define SET_WRITE 0x1000 /* socket is writeable */ ! 93: #define SET_ERROR 0x2000 /* asynchronous error on socket */ ! 94: #define SET_CLOSE 0x4000 /* connection closed (graceful or not) */ ! 95: #define SET_ALL 0x7f00 ! 96: /* socket properties */ ! 97: #define SF_BLOCKING 0x80000000 ! 98: #define SF_BLOCKINGINPROGRESS 0x40000000 ! 99: ! 100: struct socketbase *get_socketbase (void); ! 101: ! 102: extern uae_u32 addstr (uae_u32 *, char *); ! 103: extern uae_u32 addmem (uae_u32 *, char *, int len); ! 104: ! 105: extern char *strncpyah (char *, uae_u32, int); ! 106: extern char *strcpyah (char *, uae_u32); ! 107: extern uae_u32 strcpyha (uae_u32, char *); ! 108: extern uae_u32 strncpyha (uae_u32, char *, int); ! 109: ! 110: #define SB struct socketbase *sb ! 111: ! 112: extern void seterrno (SB, int); ! 113: extern void setherrno (SB, int); ! 114: ! 115: extern void sockmsg (unsigned int, unsigned long, unsigned long); ! 116: extern void sockabort (SB); ! 117: ! 118: extern void addtosigqueue (SB, int); ! 119: extern void removefromsigqueue (SB); ! 120: extern void sigsockettasks (void); ! 121: extern void locksigqueue (void); ! 122: extern void unlocksigqueue (void); ! 123: ! 124: extern int getsd (SB, int); ! 125: extern int getsock (SB, int); ! 126: extern void releasesock (SB, int); ! 127: ! 128: extern void waitsig (SB); ! 129: extern void cancelsig (SB); ! 130: ! 131: extern int host_sbinit (SB); ! 132: extern void host_sbcleanup (SB); ! 133: extern void host_sbreset (void); ! 134: extern void host_closesocketquick (int); ! 135: ! 136: extern int host_socket (SB, int, int, int); ! 137: extern uae_u32 host_bind (SB, uae_u32, uae_u32, uae_u32); ! 138: extern uae_u32 host_listen (SB, uae_u32, uae_u32); ! 139: extern void host_accept (SB, uae_u32, uae_u32, uae_u32); ! 140: extern void host_sendto (SB, uae_u32, uae_u32, uae_u32, uae_u32, uae_u32, uae_u32); ! 141: extern void host_recvfrom (SB, uae_u32, uae_u32, uae_u32, uae_u32, uae_u32, uae_u32); ! 142: extern uae_u32 host_shutdown (SB, uae_u32, uae_u32); ! 143: extern void host_setsockopt (SB, uae_u32, uae_u32, uae_u32, uae_u32, uae_u32); ! 144: extern uae_u32 host_getsockopt (SB, uae_u32, uae_u32, uae_u32, uae_u32, uae_u32); ! 145: extern uae_u32 host_getsockname (SB, uae_u32, uae_u32, uae_u32); ! 146: extern uae_u32 host_getpeername (SB, uae_u32, uae_u32, uae_u32); ! 147: extern uae_u32 host_IoctlSocket (SB, uae_u32, uae_u32, uae_u32); ! 148: extern uae_u32 host_shutdown (SB, uae_u32, uae_u32); ! 149: extern int host_CloseSocket (SB, int); ! 150: #if 0 /* __stdcall ???? */ ! 151: extern void __stdcall host_connect (SB, uae_u32, uae_u32, uae_u32); ! 152: extern void __stdcall host_WaitSelect (SB, uae_u32, uae_u32, uae_u32, uae_u32, uae_u32, uae_u32); ! 153: #endif ! 154: extern uae_u32 host_SetSocketSignals (void); ! 155: extern uae_u32 host_getdtablesize (void); ! 156: extern uae_u32 host_ObtainSocket (void); ! 157: extern uae_u32 host_ReleaseSocket (void); ! 158: extern uae_u32 host_ReleaseCopyOfSocket (void); ! 159: extern uae_u32 host_Inet_NtoA (SB, uae_u32); ! 160: extern uae_u32 host_inet_addr (uae_u32); ! 161: extern uae_u32 host_Inet_LnaOf (void); ! 162: extern uae_u32 host_Inet_NetOf (void); ! 163: extern uae_u32 host_Inet_MakeAddr (void); ! 164: extern uae_u32 host_inet_network (void); ! 165: extern void host_gethostbynameaddr (SB, uae_u32, uae_u32, long); ! 166: extern uae_u32 host_getnetbyname (void); ! 167: extern uae_u32 host_getnetbyaddr (void); ! 168: extern void host_getservbynameport (SB, uae_u32, uae_u32, uae_u32); ! 169: extern void host_getprotobyname (SB, uae_u32); ! 170: extern uae_u32 host_getprotobynumber (void); ! 171: extern uae_u32 host_vsyslog (void); ! 172: extern uae_u32 host_Dup2Socket (void); ! 173: extern uae_u32 host_gethostname (uae_u32, uae_u32); ! 174: ! 175: ! 176: extern void bsdlib_install (void); ! 177: extern void bsdlib_reset (void);
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.