]> git.saurik.com Git - wxWidgets.git/blame_incremental - include/wx/gsocket.h
replace use of 'long/int bitmapType' with 'wxBitmapType bitmapType' in richtext and...
[wxWidgets.git] / include / wx / gsocket.h
... / ...
CommitLineData
1/* -------------------------------------------------------------------------
2 * Project: GSocket (Generic Socket)
3 * Name: gsocket.h
4 * Author: Guilhem Lavaux
5 * Guillermo Rodriguez Garcia <guille@iies.es>
6 * Copyright: (c) Guilhem Lavaux
7 * (c) 2007 Vadim Zeitlin <vadim@wxwidgets.org>
8 * Licence: wxWindows Licence
9 * Purpose: GSocket include file (system independent)
10 * CVSID: $Id$
11 * -------------------------------------------------------------------------
12 */
13
14#ifndef _WX_GSOCKET_H_
15#define _WX_GSOCKET_H_
16
17#include "wx/defs.h"
18
19#if wxUSE_SOCKETS
20
21#include "wx/dlimpexp.h" /* for WXDLLIMPEXP_NET */
22
23#include <stddef.h>
24
25/*
26 Including sys/types.h under cygwin results in the warnings about "fd_set
27 having been defined in sys/types.h" when winsock.h is included later and
28 doesn't seem to be necessary anyhow. It's not needed under Mac neither.
29 */
30#if !defined(__WXMAC__) && !defined(__CYGWIN__) && !defined(__WXWINCE__)
31#include <sys/types.h>
32#endif
33
34#ifdef __WXWINCE__
35#include <stdlib.h>
36#endif
37
38typedef struct _GAddress GAddress;
39
40enum GAddressType
41{
42 GSOCK_NOFAMILY = 0,
43 GSOCK_INET,
44 GSOCK_INET6,
45 GSOCK_UNIX
46};
47
48enum GSocketStream
49{
50 GSOCK_STREAMED,
51 GSOCK_UNSTREAMED
52};
53
54enum GSocketError
55{
56 GSOCK_NOERROR = 0,
57 GSOCK_INVOP,
58 GSOCK_IOERR,
59 GSOCK_INVADDR,
60 GSOCK_INVSOCK,
61 GSOCK_NOHOST,
62 GSOCK_INVPORT,
63 GSOCK_WOULDBLOCK,
64 GSOCK_TIMEDOUT,
65 GSOCK_MEMERR,
66 GSOCK_OPTERR
67};
68
69/* See below for an explanation on how events work.
70 */
71enum GSocketEvent
72{
73 GSOCK_INPUT = 0,
74 GSOCK_OUTPUT = 1,
75 GSOCK_CONNECTION = 2,
76 GSOCK_LOST = 3,
77 GSOCK_MAX_EVENT = 4
78};
79
80enum
81{
82 GSOCK_INPUT_FLAG = 1 << GSOCK_INPUT,
83 GSOCK_OUTPUT_FLAG = 1 << GSOCK_OUTPUT,
84 GSOCK_CONNECTION_FLAG = 1 << GSOCK_CONNECTION,
85 GSOCK_LOST_FLAG = 1 << GSOCK_LOST
86};
87
88typedef int GSocketEventFlags;
89
90class GSocket;
91
92typedef void (*GSocketCallback)(GSocket *socket, GSocketEvent event,
93 char *cdata);
94
95/*
96 Class providing hooks abstracting the differences between console and GUI
97 applications for socket code.
98
99 We also have different implementations of this class for different platforms
100 allowing us to keep more things in the common code but the main reason for
101 its existence is that we want the same socket code work differently
102 depending on whether it's used from a console or a GUI program. This is
103 achieved by implementing the virtual methods of this class differently in
104 the objects returned by wxConsoleAppTraits::GetSocketFunctionsTable() and
105 the same method in wxGUIAppTraits.
106 */
107class GSocketManager
108{
109public:
110 // set the manager to use, we don't take ownership of it
111 //
112 // this should be called before GSocket_Init(), i.e. before the first
113 // wxSocket object is created, otherwise the manager returned by
114 // wxAppTraits::GetSocketManager() will be used
115 static void Set(GSocketManager *manager);
116
117 // return the manager to use
118 //
119 // this initializes the manager at first use
120 static GSocketManager *Get()
121 {
122 if ( !ms_manager )
123 Init();
124
125 return ms_manager;
126 }
127
128 // called before the first wxSocket is created and should do the
129 // initializations needed in order to use the network
130 //
131 // return true if initialized successfully
132 virtual bool OnInit() = 0;
133
134 // undo the initializations of OnInit()
135 virtual void OnExit() = 0;
136
137
138 // do manager-specific socket initializations (and undo it): this is called
139 // in the beginning/end of the socket initialization/destruction
140 virtual bool Init_Socket(GSocket *socket) = 0;
141 virtual void Destroy_Socket(GSocket *socket) = 0;
142
143 virtual void Install_Callback(GSocket *socket, GSocketEvent event) = 0;
144 virtual void Uninstall_Callback(GSocket *socket, GSocketEvent event) = 0;
145
146 virtual void Enable_Events(GSocket *socket) = 0;
147 virtual void Disable_Events(GSocket *socket) = 0;
148
149 virtual ~GSocketManager() { }
150
151private:
152 // get the manager to use if we don't have it yet
153 static void Init();
154
155 static GSocketManager *ms_manager;
156};
157
158#if defined(__WINDOWS__)
159 #include "wx/msw/gsockmsw.h"
160#else
161 #include "wx/unix/gsockunx.h"
162#endif
163
164
165/* Global initializers */
166
167/* GSocket_Init() must be called at the beginning (but after calling
168 * GSocketManager::Set() if a custom manager should be used) */
169bool GSocket_Init();
170
171/* GSocket_Cleanup() must be called at the end */
172void GSocket_Cleanup();
173
174
175/* Constructors / Destructors */
176
177GSocket *GSocket_new();
178
179
180/* GAddress */
181
182GAddress *GAddress_new();
183GAddress *GAddress_copy(GAddress *address);
184void GAddress_destroy(GAddress *address);
185
186void GAddress_SetFamily(GAddress *address, GAddressType type);
187GAddressType GAddress_GetFamily(GAddress *address);
188
189/* The use of any of the next functions will set the address family to
190 * the specific one. For example if you use GAddress_INET_SetHostName,
191 * address family will be implicitly set to AF_INET.
192 */
193
194GSocketError GAddress_INET_SetHostName(GAddress *address, const char *hostname);
195GSocketError GAddress_INET_SetBroadcastAddress(GAddress *address);
196GSocketError GAddress_INET_SetAnyAddress(GAddress *address);
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#if wxUSE_IPV6
209
210GSocketError GAddress_INET6_SetHostName(GAddress *address, const char *hostname);
211GSocketError GAddress_INET6_SetAnyAddress(GAddress *address);
212GSocketError GAddress_INET6_SetHostAddress(GAddress *address,
213 struct in6_addr hostaddr);
214GSocketError GAddress_INET6_SetPortName(GAddress *address, const char *port,
215 const char *protocol);
216GSocketError GAddress_INET6_SetPort(GAddress *address, unsigned short port);
217
218GSocketError GAddress_INET6_GetHostName(GAddress *address, char *hostname,
219 size_t sbuf);
220GSocketError GAddress_INET6_GetHostAddress(GAddress *address,struct in6_addr *hostaddr);
221unsigned short GAddress_INET6_GetPort(GAddress *address);
222
223#endif // wxUSE_IPV6
224
225/* TODO: Define specific parts (UNIX) */
226
227GSocketError GAddress_UNIX_SetPath(GAddress *address, const char *path);
228GSocketError GAddress_UNIX_GetPath(GAddress *address, char *path, size_t sbuf);
229
230#endif /* wxUSE_SOCKETS */
231
232#endif /* _WX_GSOCKET_H_ */