|
|
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
1.1.1.2 ! root 66: };
! 67:
! 68: extern struct socketbase *socketbases;
1.1 root 69:
70:
71: #define LIBRARY_SIZEOF 36
72:
73: struct UAEBSDBase {
74: char dummy[LIBRARY_SIZEOF];
75: struct socketbase *sb;
76: char scratchbuf[SCRATCHBUFSIZE];
77: };
78:
79: /* socket flags */
80: /* socket events to report */
81: #define REP_ACCEPT 0x01 /* there is a connection to accept() */
82: #define REP_CONNECT 0x02 /* connect() completed */
83: #define REP_OOB 0x04 /* socket has out-of-band data */
84: #define REP_READ 0x08 /* socket is readable */
85: #define REP_WRITE 0x10 /* socket is writeable */
86: #define REP_ERROR 0x20 /* asynchronous error on socket */
87: #define REP_CLOSE 0x40 /* connection closed (graceful or not) */
88: #define REP_ALL 0x7f
89: /* socket events that occurred */
90: #define SET_ACCEPT 0x0100 /* there is a connection to accept() */
91: #define SET_CONNECT 0x0200 /* connect() completed */
92: #define SET_OOB 0x0400 /* socket has out-of-band data */
93: #define SET_READ 0x0800 /* socket is readable */
94: #define SET_WRITE 0x1000 /* socket is writeable */
95: #define SET_ERROR 0x2000 /* asynchronous error on socket */
96: #define SET_CLOSE 0x4000 /* connection closed (graceful or not) */
97: #define SET_ALL 0x7f00
98: /* socket properties */
99: #define SF_BLOCKING 0x80000000
100: #define SF_BLOCKINGINPROGRESS 0x40000000
101:
102: struct socketbase *get_socketbase (void);
103:
104: extern uae_u32 addstr (uae_u32 *, char *);
105: extern uae_u32 addmem (uae_u32 *, char *, int len);
106:
107: extern char *strncpyah (char *, uae_u32, int);
108: extern char *strcpyah (char *, uae_u32);
109: extern uae_u32 strcpyha (uae_u32, char *);
110: extern uae_u32 strncpyha (uae_u32, char *, int);
111:
112: #define SB struct socketbase *sb
113:
114: extern void seterrno (SB, int);
115: extern void setherrno (SB, int);
116:
117: extern void sockmsg (unsigned int, unsigned long, unsigned long);
118: extern void sockabort (SB);
119:
120: extern void addtosigqueue (SB, int);
121: extern void removefromsigqueue (SB);
122: extern void sigsockettasks (void);
123: extern void locksigqueue (void);
124: extern void unlocksigqueue (void);
125:
126: extern int getsd (SB, int);
127: extern int getsock (SB, int);
128: extern void releasesock (SB, int);
129:
130: extern void waitsig (SB);
131: extern void cancelsig (SB);
132:
133: extern int host_sbinit (SB);
134: extern void host_sbcleanup (SB);
135: extern void host_sbreset (void);
136: extern void host_closesocketquick (int);
137:
138: extern int host_socket (SB, int, int, int);
139: extern uae_u32 host_bind (SB, uae_u32, uae_u32, uae_u32);
140: extern uae_u32 host_listen (SB, uae_u32, uae_u32);
141: extern void host_accept (SB, uae_u32, uae_u32, uae_u32);
142: extern void host_sendto (SB, uae_u32, uae_u32, uae_u32, uae_u32, uae_u32, uae_u32);
143: extern void host_recvfrom (SB, uae_u32, uae_u32, uae_u32, uae_u32, uae_u32, uae_u32);
144: extern uae_u32 host_shutdown (SB, uae_u32, uae_u32);
145: extern void host_setsockopt (SB, uae_u32, uae_u32, uae_u32, uae_u32, uae_u32);
146: extern uae_u32 host_getsockopt (SB, uae_u32, uae_u32, uae_u32, uae_u32, uae_u32);
147: extern uae_u32 host_getsockname (SB, uae_u32, uae_u32, uae_u32);
148: extern uae_u32 host_getpeername (SB, uae_u32, uae_u32, uae_u32);
149: extern uae_u32 host_IoctlSocket (SB, uae_u32, uae_u32, uae_u32);
150: extern uae_u32 host_shutdown (SB, uae_u32, uae_u32);
151: extern int host_CloseSocket (SB, int);
152: #if 0 /* __stdcall ???? */
153: extern void __stdcall host_connect (SB, uae_u32, uae_u32, uae_u32);
154: extern void __stdcall host_WaitSelect (SB, uae_u32, uae_u32, uae_u32, uae_u32, uae_u32, uae_u32);
155: #endif
156: extern uae_u32 host_SetSocketSignals (void);
157: extern uae_u32 host_getdtablesize (void);
158: extern uae_u32 host_ObtainSocket (void);
159: extern uae_u32 host_ReleaseSocket (void);
160: extern uae_u32 host_ReleaseCopyOfSocket (void);
161: extern uae_u32 host_Inet_NtoA (SB, uae_u32);
162: extern uae_u32 host_inet_addr (uae_u32);
163: extern uae_u32 host_Inet_LnaOf (void);
164: extern uae_u32 host_Inet_NetOf (void);
165: extern uae_u32 host_Inet_MakeAddr (void);
166: extern uae_u32 host_inet_network (void);
167: extern void host_gethostbynameaddr (SB, uae_u32, uae_u32, long);
168: extern uae_u32 host_getnetbyname (void);
169: extern uae_u32 host_getnetbyaddr (void);
170: extern void host_getservbynameport (SB, uae_u32, uae_u32, uae_u32);
171: extern void host_getprotobyname (SB, uae_u32);
172: extern uae_u32 host_getprotobynumber (void);
173: extern uae_u32 host_vsyslog (void);
174: extern uae_u32 host_Dup2Socket (void);
175: extern uae_u32 host_gethostname (uae_u32, uae_u32);
176:
177:
178: extern void bsdlib_install (void);
179: extern void bsdlib_reset (void);
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.