]> git.saurik.com Git - wxWidgets.git/blob - include/wx/mac/carbon/gsockmac.h
3bd209afe39670e02d7723d06657189ca98f409e
[wxWidgets.git] / include / wx / mac / carbon / gsockmac.h
1 /* -------------------------------------------------------------------------
2 * Project: GSocket (Generic Socket) for WX
3 * Name: gsockunx.h
4 * Purpose: GSocket Macintosh header
5 * CVSID: $Id$
6 * -------------------------------------------------------------------------
7 */
8
9 #ifndef __GSOCK_UNX_H
10 #define __GSOCK_UNX_H
11
12 #ifndef __GSOCKET_STANDALONE__
13 #include "wx/setup.h"
14 #endif
15
16 #if wxUSE_SOCKETS || defined(__GSOCKET_STANDALONE__)
17
18 #ifndef __GSOCKET_STANDALONE__
19 #include "wx/gsocket.h"
20 #else
21 #include "gsocket.h"
22 #endif
23
24 #include <MacHeaders.c>
25 #define OTUNIXERRORS 1
26 #include <OpenTransport.h>
27 #include <OpenTransportProviders.h>
28 #include <OpenTptInternet.h>
29
30 /* Definition of GSocket */
31 class GSocket
32 {
33 public:
34 GSocket();
35 ~GSocket();
36 bool IsOK() { return m_ok; }
37
38 void Shutdown();
39 GSocketError SetLocal(GAddress *address);
40 GSocketError SetPeer(GAddress *address);
41 GAddress *GetLocal();
42 GAddress *GetPeer();
43 GSocketError SetServer();
44 GSocket *WaitConnection();
45 int SetReusable() { return 0; }
46 GSocketError SetNonOriented();
47 GSocketError Connect(GSocketStream stream);
48 int Read(char *buffer, int size);
49 int Write(const char *buffer, int size);
50 GSocketEventFlags Select(GSocketEventFlags flags);
51 void SetNonBlocking(int non_block);
52 void SetTimeout(unsigned long millisec);
53 GSocketError WXDLLIMPEXP_NET GetError();
54 void SetCallback(GSocketEventFlags flags,
55 GSocketCallback callback, char *cdata);
56 void UnsetCallback(GSocketEventFlags flags);
57 GSocketError GetSockOpt(int level, int optname, void *optval, int *optlen)
58 { return GSOCK_INVOP; }
59 GSocketError SetSockOpt(int level, int optname,
60 const void *optval, int optlen)
61 { return GSOCK_INVOP; }
62
63 protected:
64 bool m_ok;
65
66 /* Input / Output */
67 GSocketError Input_Timeout();
68 GSocketError Output_Timeout();
69 int Recv_Stream(char *buffer, int size);
70 int Recv_Dgram(char *buffer, int size);
71 int Send_Stream(const char *buffer, int size);
72 int Send_Dgram(const char *buffer, int size);
73
74 /* Callbacks */
75 void Enable_Events();
76 void Disable_Events();
77
78 // TODO: Make these protected
79 public:
80 wxMacNotifierTableRef m_mac_events ;
81 EndpointRef m_endpoint;
82 GAddress *m_local;
83 GAddress *m_peer;
84 GSocketError m_error;
85
86 int m_non_blocking;
87 int m_server;
88 int m_stream;
89 int m_oriented;
90 unsigned long m_timeout;
91
92 /* Callbacks */
93 GSocketEventFlags m_detected;
94 GSocketCallback m_cbacks[GSOCK_MAX_EVENT];
95 char *m_data[GSOCK_MAX_EVENT];
96 int m_takesEvents ;
97 };
98
99 /* Compatibility methods to support old C API (from gsocket.h) */
100 inline void GSocket_Shutdown(GSocket *socket)
101 { socket->Shutdown(); }
102 inline GSocketError GSocket_SetLocal(GSocket *socket, GAddress *address)
103 { return socket->SetLocal(address); }
104 inline GSocketError GSocket_SetPeer(GSocket *socket, GAddress *address)
105 { return socket->SetPeer(address); }
106 inline GAddress *GSocket_GetLocal(GSocket *socket)
107 { return socket->GetLocal(); }
108 inline GAddress *GSocket_GetPeer(GSocket *socket)
109 { return socket->GetPeer(); }
110 inline GSocketError GSocket_SetServer(GSocket *socket)
111 { return socket->SetServer(); }
112 inline GSocket *GSocket_WaitConnection(GSocket *socket)
113 { return socket->WaitConnection(); }
114 inline int GSocket_SetReusable(GSocket *socket)
115 { return socket->SetReusable(); }
116 inline GSocketError GSocket_Connect(GSocket *socket, GSocketStream stream)
117 { return socket->Connect(stream); }
118 inline GSocketError GSocket_SetNonOriented(GSocket *socket)
119 { return socket->SetNonOriented(); }
120 inline int GSocket_Read(GSocket *socket, char *buffer, int size)
121 { return socket->Read(buffer,size); }
122 inline int GSocket_Write(GSocket *socket, const char *buffer, int size)
123 { return socket->Write(buffer,size); }
124 inline GSocketEventFlags GSocket_Select(GSocket *socket, GSocketEventFlags flags)
125 { return socket->Select(flags); }
126 inline void GSocket_SetNonBlocking(GSocket *socket, int non_block)
127 { socket->SetNonBlocking(non_block); }
128 inline void GSocket_SetTimeout(GSocket *socket, unsigned long millisec)
129 { socket->SetTimeout(millisec); }
130 inline GSocketError GSocket_GetError(GSocket *socket)
131 { return socket->GetError(); }
132 inline void GSocket_SetCallback(GSocket *socket, GSocketEventFlags flags,
133 GSocketCallback fallback, char *cdata)
134 { socket->SetCallback(flags,fallback,cdata); }
135 inline void GSocket_UnsetCallback(GSocket *socket, GSocketEventFlags flags)
136 { socket->UnsetCallback(flags); }
137 inline GSocketError GSocket_GetSockOpt(GSocket *socket, int level, int optname,
138 void *optval, int *optlen)
139 { return socket->GetSockOpt(level,optname,optval,optlen); }
140 inline GSocketError GSocket_SetSockOpt(GSocket *socket, int level, int optname,
141 const void *optval, int optlen)
142 { return socket->SetSockOpt(level,optname,optval,optlen); }
143 inline void GSocket_destroy(GSocket *socket)
144 { delete socket; }
145
146 #ifdef __cplusplus
147 extern "C" {
148 #endif /* __cplusplus */
149
150 /* Definition of GAddress */
151
152 struct _GAddress
153 {
154 UInt32 m_host ;
155 UInt16 m_port ;
156 GAddressType m_family;
157 GSocketError m_error;
158 };
159
160 /* Callbacks */
161
162 void _GSocket_Internal_Proc(unsigned long e , void* data ) ;
163
164 /* GAddress */
165
166 GSocketError _GAddress_translate_from(GAddress *address,
167 InetAddress *addr );
168 GSocketError _GAddress_translate_to(GAddress *address,
169 InetAddress *addr);
170
171 GSocketError _GAddress_Init_INET(GAddress *address);
172
173 #ifdef __cplusplus
174 }
175 #endif /* __cplusplus */
176
177 #endif /* wxUSE_SOCKETS || defined(__GSOCKET_STANDALONE__) */
178
179 #endif /* __GSOCK_UNX_H */