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