]> git.saurik.com Git - wxWidgets.git/blame_incremental - include/wx/gsocket.h
Added dependency checking and all that.
[wxWidgets.git] / include / wx / gsocket.h
... / ...
CommitLineData
1/* -------------------------------------------------------------------------
2 * Project: GSocket (Generic Socket)
3 * Name: gsocket.h
4 * Purpose: GSocket include file (system independent)
5 * CVSID: $Id$
6 * -------------------------------------------------------------------------
7 */
8#ifndef __GSOCKET_H
9#define __GSOCKET_H
10
11#include "wx/setup.h"
12
13#if wxUSE_SOCKETS
14
15#include <stddef.h>
16#include <sys/types.h>
17
18#if !defined(__cplusplus)
19typedef int bool;
20#endif
21
22#ifndef TRUE
23#define TRUE 1
24#endif
25
26#ifndef FALSE
27#define FALSE 0
28#endif
29
30typedef struct _GSocket GSocket;
31typedef struct _GAddress GAddress;
32
33typedef enum {
34 GSOCK_NOFAMILY = 0,
35 GSOCK_INET,
36 GSOCK_INET6,
37 GSOCK_UNIX
38} GAddressType;
39
40typedef enum {
41 GSOCK_STREAMED,
42 GSOCK_UNSTREAMED
43} GSocketStream;
44
45typedef enum {
46 GSOCK_NOERROR = 0,
47 GSOCK_INVOP,
48 GSOCK_IOERR,
49 GSOCK_INVADDR,
50 GSOCK_INVSOCK,
51 GSOCK_NOHOST,
52 GSOCK_INVPORT,
53 GSOCK_WOULDBLOCK,
54 GSOCK_TIMEOUT,
55 GSOCK_MEMERR
56} GSocketError;
57
58typedef enum {
59 GSOCK_INPUT = 0,
60 GSOCK_OUTPUT = 1,
61 GSOCK_CONNECTION = 2,
62 GSOCK_LOST = 3,
63 GSOCK_MAX_EVENT = 4
64} GSocketEvent;
65
66enum {
67 GSOCK_INPUT_FLAG = 1 << GSOCK_INPUT,
68 GSOCK_OUTPUT_FLAG = 1 << GSOCK_OUTPUT,
69 GSOCK_CONNECTION_FLAG = 1 << GSOCK_CONNECTION,
70 GSOCK_LOST_FLAG = 1 << GSOCK_LOST
71};
72
73typedef int GSocketEventFlags;
74
75typedef void (*GSocketCallback)(GSocket *socket, GSocketEvent event,
76 char *cdata);
77
78#ifdef __cplusplus
79extern "C" {
80#endif
81
82/* Global initialisers */
83
84/* GSocket_Init() must be called at the beginning */
85bool GSocket_Init();
86/* GSocket_Cleanup() must be called at the ending */
87void GSocket_Cleanup();
88
89/* Constructors / Destructors */
90
91GSocket *GSocket_new();
92void GSocket_destroy(GSocket *socket);
93
94/* This will disable all IO calls to this socket but errors are still available */
95void GSocket_Shutdown(GSocket *socket);
96
97/* Address handling */
98
99GSocketError GSocket_SetLocal(GSocket *socket, GAddress *address);
100GSocketError GSocket_SetPeer(GSocket *socket, GAddress *address);
101GAddress *GSocket_GetLocal(GSocket *socket);
102GAddress *GSocket_GetPeer(GSocket *socket);
103
104/* Non-oriented connections handlers */
105
106GSocketError GSocket_SetNonOriented(GSocket *socket);
107
108/* Server specific parts */
109
110/*
111 GSocket_SetServer() setups the socket as a server. It uses the "Local" field
112 of GSocket. "Local" must be set by GSocket_SetLocal() before
113 GSocket_SetServer() is called. In the other case, it returns GSOCK_INVADDR.
114*/
115GSocketError GSocket_SetServer(GSocket *socket);
116
117/*
118 GSocket_WaitConnection() waits for an incoming client connection.
119*/
120GSocket *GSocket_WaitConnection(GSocket *socket);
121
122/* Client specific parts */
123
124/*
125 GSocket_Connect() establishes a client connection to a server using the "Peer"
126 field of GSocket. "Peer" must be set by GSocket_SetPeer() before
127 GSocket_Connect() is called. In the other case, it returns GSOCK_INVADDR.
128*/
129GSocketError GSocket_Connect(GSocket *socket, GSocketStream stream);
130
131/* Generic IO */
132
133/* Like recv(), send(), ... */
134/*
135 NOTE: In case we read from a non-oriented connection, the incoming (outgoing)
136 connection address is stored in the "Local" ("Peer") field.
137*/
138int GSocket_Read(GSocket *socket, char *buffer, int size);
139int GSocket_Write(GSocket *socket, const char *buffer,
140 int size);
141bool GSocket_DataAvailable(GSocket *socket);
142
143/* Flags/Parameters */
144
145/*
146 GSocket_SetTimeout() sets the timeout for reading and writing IO call. Time
147 is expressed in milliseconds.
148 */
149void GSocket_SetTimeout(GSocket *socket, unsigned long millisec);
150
151/*
152 GSocket_SetBlocking() puts the socket in non-blocking mode. This is useful
153 if we don't want to wait.
154*/
155void GSocket_SetNonBlocking(GSocket *socket, bool non_block);
156
157/*
158 GSocket_GetError() returns the last error occured on the socket stream.
159*/
160
161GSocketError GSocket_GetError(GSocket *socket);
162
163/* Callbacks */
164
165/*
166 Only one fallback is possible for each event (INPUT, OUTPUT, CONNECTION, LOST)
167 INPUT: The function is called when there is at least a byte in the
168 input buffer
169 OUTPUT: The function is called when the system is sure the next write call
170 will not block
171 CONNECTION: Two cases is possible:
172 Client socket -> the connection is established
173 Server socket -> a client request a connection
174 LOST: the connection is lost
175
176 SetCallback accepts a combination of these flags so a same callback can
177 receive different events.
178
179 An event is generated only once and its state is reseted when the relative
180 IO call is requested.
181 For example: INPUT -> GSocket_Read()
182 CONNECTION -> GSocket_Accept()
183*/
184void GSocket_SetCallback(GSocket *socket, GSocketEventFlags event,
185 GSocketCallback fallback, char *cdata);
186
187/*
188 UnsetCallback will disables all fallbacks specified by "event".
189 NOTE: event may be a combination of flags
190*/
191void GSocket_UnsetCallback(GSocket *socket, GSocketEventFlags event);
192
193/* GAddress */
194
195GAddress *GAddress_new();
196GAddress *GAddress_copy(GAddress *address);
197void GAddress_destroy(GAddress *address);
198
199void GAddress_SetFamily(GAddress *address, GAddressType type);
200GAddressType GAddress_GetFamily(GAddress *address);
201
202/*
203 The use of any of the next functions will set the address family to the adapted
204 one. For example if you use GAddress_INET_SetHostName, address family will be AF_INET
205 implicitely
206*/
207
208GSocketError GAddress_INET_SetHostName(GAddress *address, const char *hostname);
209GSocketError GAddress_INET_SetHostAddress(GAddress *address,
210 unsigned long hostaddr);
211GSocketError GAddress_INET_SetPortName(GAddress *address, const char *port,
212 const char *protocol);
213GSocketError GAddress_INET_SetPort(GAddress *address, unsigned short port);
214
215GSocketError GAddress_INET_GetHostName(GAddress *address, char *hostname,
216 size_t sbuf);
217unsigned long GAddress_INET_GetHostAddress(GAddress *address);
218unsigned short GAddress_INET_GetPort(GAddress *address);
219
220/* TODO: Define specific parts (INET6, UNIX) */
221
222GSocketError GAddress_UNIX_SetPath(GAddress *address, const char *path);
223GSocketError GAddress_UNIX_GetPath(GAddress *address, char *path, size_t sbuf);
224
225/*
226 * System specific functions
227 */
228
229/* On systems needing an event id */
230void GSocket_SetEventID(GSocket *socket, unsigned long evt_id);
231
232/* On systems which don't have background refresh */
233void GSocket_DoEvent(unsigned long evt_id);
234
235#ifdef __cplusplus
236};
237#endif /* __cplusplus */
238
239
240#endif
241 /* wxUSE_SOCKETS */
242
243#endif
244 /* __GSOCKET_H */