]>
git.saurik.com Git - wxWidgets.git/blob - include/wx/gsocket.h
1 /* -------------------------------------------------------------------------
2 * Project: GSocket (Generic Socket)
4 * Author: Guilhem Lavaux
5 * Guillermo Rodriguez Garcia <guille@iies.es>
6 * Copyright: (c) Guilhem Lavaux
7 * (c) 2007,2008 Vadim Zeitlin <vadim@wxwidgets.org>
8 * Licence: wxWindows Licence
9 * Purpose: GSocket include file (system independent)
11 * -------------------------------------------------------------------------
14 #ifndef _WX_GSOCKET_H_
15 #define _WX_GSOCKET_H_
21 #include "wx/dlimpexp.h" /* for WXDLLIMPEXP_NET */
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.
30 #if !defined(__WXMAC__) && !defined(__CYGWIN__) && !defined(__WXWINCE__)
31 #include <sys/types.h>
67 /* See below for an explanation on how events work.
80 GSOCK_INPUT_FLAG
= 1 << GSOCK_INPUT
,
81 GSOCK_OUTPUT_FLAG
= 1 << GSOCK_OUTPUT
,
82 GSOCK_CONNECTION_FLAG
= 1 << GSOCK_CONNECTION
,
83 GSOCK_LOST_FLAG
= 1 << GSOCK_LOST
86 typedef int GSocketEventFlags
;
91 typedef void (*GSocketCallback
)(GSocket
*socket
, GSocketEvent event
,
95 Class providing hooks abstracting the differences between console and GUI
96 applications for socket code.
98 We also have different implementations of this class for different platforms
99 allowing us to keep more things in the common code but the main reason for
100 its existence is that we want the same socket code work differently
101 depending on whether it's used from a console or a GUI program. This is
102 achieved by implementing the virtual methods of this class differently in
103 the objects returned by wxConsoleAppTraits::GetSocketFunctionsTable() and
104 the same method in wxGUIAppTraits.
109 // set the manager to use, we don't take ownership of it
111 // this should be called before GSocket_Init(), i.e. before the first
112 // wxSocket object is created, otherwise the manager returned by
113 // wxAppTraits::GetSocketManager() will be used
114 static void Set(GSocketManager
*manager
);
116 // return the manager to use
118 // this initializes the manager at first use
119 static GSocketManager
*Get()
127 // called before the first wxSocket is created and should do the
128 // initializations needed in order to use the network
130 // return true if initialized successfully
131 virtual bool OnInit() = 0;
133 // undo the initializations of OnInit()
134 virtual void OnExit() = 0;
137 // do manager-specific socket initializations (and undo it): this is called
138 // in the beginning/end of the socket initialization/destruction
139 virtual bool Init_Socket(GSocket
*socket
) = 0;
140 virtual void Destroy_Socket(GSocket
*socket
) = 0;
142 virtual void Install_Callback(GSocket
*socket
, GSocketEvent event
) = 0;
143 virtual void Uninstall_Callback(GSocket
*socket
, GSocketEvent event
) = 0;
145 virtual void Enable_Events(GSocket
*socket
) = 0;
146 virtual void Disable_Events(GSocket
*socket
) = 0;
148 virtual ~GSocketManager() { }
151 // get the manager to use if we don't have it yet
154 static GSocketManager
*ms_manager
;
157 #if defined(__WINDOWS__)
158 #include "wx/msw/gsockmsw.h"
160 #include "wx/unix/gsockunx.h"
164 /* Global initializers */
166 /* GSocket_Init() must be called at the beginning (but after calling
167 * GSocketManager::Set() if a custom manager should be used) */
170 /* GSocket_Cleanup() must be called at the end */
171 void GSocket_Cleanup();
174 /* Constructors / Destructors */
176 GSocket
*GSocket_new();
181 // Represents a socket endpoint, i.e. -- in spite of its name -- not an address
182 // but an (address, port) pair
185 struct sockaddr
*m_addr
;
188 GAddressType m_family
;
191 GSocketError m_error
;
194 GAddress
*GAddress_new();
195 GAddress
*GAddress_copy(GAddress
*address
);
196 void GAddress_destroy(GAddress
*address
);
198 void GAddress_SetFamily(GAddress
*address
, GAddressType type
);
199 GAddressType
GAddress_GetFamily(GAddress
*address
);
201 /* The use of any of the next functions will set the address family to
202 * the specific one. For example if you use GAddress_INET_SetHostName,
203 * address family will be implicitly set to AF_INET.
206 GSocketError
GAddress_INET_SetHostName(GAddress
*address
, const char *hostname
);
207 GSocketError
GAddress_INET_SetBroadcastAddress(GAddress
*address
);
208 GSocketError
GAddress_INET_SetAnyAddress(GAddress
*address
);
209 GSocketError
GAddress_INET_SetHostAddress(GAddress
*address
,
210 unsigned long hostaddr
);
211 GSocketError
GAddress_INET_SetPortName(GAddress
*address
, const char *port
,
212 const char *protocol
);
213 GSocketError
GAddress_INET_SetPort(GAddress
*address
, unsigned short port
);
215 GSocketError
GAddress_INET_GetHostName(GAddress
*address
, char *hostname
,
217 unsigned long GAddress_INET_GetHostAddress(GAddress
*address
);
218 unsigned short GAddress_INET_GetPort(GAddress
*address
);
220 GSocketError
_GAddress_translate_from(GAddress
*address
,
221 struct sockaddr
*addr
, int len
);
222 GSocketError
_GAddress_translate_to (GAddress
*address
,
223 struct sockaddr
**addr
, int *len
);
224 GSocketError
_GAddress_Init_INET(GAddress
*address
);
228 GSocketError
GAddress_INET6_SetHostName(GAddress
*address
, const char *hostname
);
229 GSocketError
GAddress_INET6_SetAnyAddress(GAddress
*address
);
230 GSocketError
GAddress_INET6_SetHostAddress(GAddress
*address
,
231 struct in6_addr hostaddr
);
232 GSocketError
GAddress_INET6_SetPortName(GAddress
*address
, const char *port
,
233 const char *protocol
);
234 GSocketError
GAddress_INET6_SetPort(GAddress
*address
, unsigned short port
);
236 GSocketError
GAddress_INET6_GetHostName(GAddress
*address
, char *hostname
,
238 GSocketError
GAddress_INET6_GetHostAddress(GAddress
*address
,struct in6_addr
*hostaddr
);
239 unsigned short GAddress_INET6_GetPort(GAddress
*address
);
243 // these functions are available under all platforms but only implemented under
244 // Unix ones, elsewhere they just return GSOCK_INVADDR
245 GSocketError
_GAddress_Init_UNIX(GAddress
*address
);
246 GSocketError
GAddress_UNIX_SetPath(GAddress
*address
, const char *path
);
247 GSocketError
GAddress_UNIX_GetPath(GAddress
*address
, char *path
, size_t sbuf
);
249 #endif /* wxUSE_SOCKETS */
251 #endif /* _WX_GSOCKET_H_ */