OLD | NEW |
| (Empty) |
1 /* This Source Code Form is subject to the terms of the Mozilla Public | |
2 * License, v. 2.0. If a copy of the MPL was not distributed with this | |
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ | |
4 /* | |
5 * pkix_pl_socket.h | |
6 * | |
7 * Socket Object Type Definition | |
8 * | |
9 */ | |
10 | |
11 #ifndef _PKIX_PL_SOCKET_H | |
12 #define _PKIX_PL_SOCKET_H | |
13 | |
14 #include <errno.h> | |
15 #include "pkix_pl_common.h" | |
16 | |
17 #ifdef __cplusplus | |
18 extern "C" { | |
19 #endif | |
20 | |
21 typedef enum { | |
22 SOCKET_BOUND, | |
23 SOCKET_LISTENING, | |
24 SOCKET_ACCEPTPENDING, | |
25 SOCKET_UNCONNECTED, | |
26 SOCKET_CONNECTPENDING, | |
27 SOCKET_CONNECTED, | |
28 SOCKET_SENDPENDING, | |
29 SOCKET_RCVPENDING, | |
30 SOCKET_SENDRCVPENDING, | |
31 SOCKET_SHUTDOWN | |
32 } SockStatus; | |
33 | |
34 /* This is the default port number, if none is supplied to CreateByName. */ | |
35 #define LDAP_PORT 389 | |
36 | |
37 /* | |
38 * These callbacks allow a user to substitute a counterfeit socket in places | |
39 * where a PKIX_PL_Socket is expected. A conforming usage will use the | |
40 * ListenCallback function instead of Listen, AcceptCallback instead of Accept, | |
41 * etc. The counterfeit socket may have special capabilites such as the | |
42 * ability to do proxy authentication, etc. | |
43 */ | |
44 | |
45 typedef PKIX_Error * | |
46 (*pkix_pl_Socket_ListenCallback)( | |
47 PKIX_PL_Socket *socket, | |
48 PKIX_UInt32 backlog, | |
49 void *plContext); | |
50 | |
51 typedef PKIX_Error * | |
52 (*pkix_pl_Socket_AcceptCallback)( | |
53 PKIX_PL_Socket *socket, | |
54 PKIX_PL_Socket **pRendezvousSock, | |
55 void *plContext); | |
56 | |
57 typedef PKIX_Error * | |
58 (*pkix_pl_Socket_ConnectContinueCallback)( | |
59 PKIX_PL_Socket *socket, | |
60 PRErrorCode *pStatus, | |
61 void *plContext); | |
62 | |
63 typedef PKIX_Error * | |
64 (*pkix_pl_Socket_SendCallback)( | |
65 PKIX_PL_Socket *sendSock, | |
66 void *buf, | |
67 PKIX_UInt32 bytesToWrite, | |
68 PKIX_Int32 *pBytesWritten, | |
69 void *plContext); | |
70 | |
71 typedef PKIX_Error * | |
72 (*pkix_pl_Socket_RecvCallback)( | |
73 PKIX_PL_Socket *rcvSock, | |
74 void *buf, | |
75 PKIX_UInt32 capacity, | |
76 PKIX_Int32 *pBytesRead, | |
77 void *plContext); | |
78 | |
79 typedef PKIX_Error * | |
80 (*pkix_pl_Socket_PollCallback)( | |
81 PKIX_PL_Socket *sock, | |
82 PKIX_Int32 *pBytesWritten, | |
83 PKIX_Int32 *pBytesRead, | |
84 void *plContext); | |
85 | |
86 typedef PKIX_Error * | |
87 (*pkix_pl_Socket_ShutdownCallback)( | |
88 PKIX_PL_Socket *socket, void *plContext); | |
89 | |
90 typedef struct PKIX_PL_Socket_CallbackStruct { | |
91 pkix_pl_Socket_ListenCallback listenCallback; | |
92 pkix_pl_Socket_AcceptCallback acceptCallback; | |
93 pkix_pl_Socket_ConnectContinueCallback connectcontinueCallback; | |
94 pkix_pl_Socket_SendCallback sendCallback; | |
95 pkix_pl_Socket_RecvCallback recvCallback; | |
96 pkix_pl_Socket_PollCallback pollCallback; | |
97 pkix_pl_Socket_ShutdownCallback shutdownCallback; | |
98 } PKIX_PL_Socket_Callback; | |
99 | |
100 struct PKIX_PL_SocketStruct { | |
101 PKIX_Boolean isServer; | |
102 PRIntervalTime timeout; /* zero for non-blocking I/O */ | |
103 SockStatus status; | |
104 PRFileDesc *clientSock; | |
105 PRFileDesc *serverSock; | |
106 void *readBuf; | |
107 void *writeBuf; | |
108 PKIX_UInt32 readBufSize; | |
109 PKIX_UInt32 writeBufSize; | |
110 PRNetAddr *netAddr; | |
111 PKIX_PL_Socket_Callback callbackList; | |
112 }; | |
113 | |
114 /* see source file for function documentation */ | |
115 | |
116 PKIX_Error *pkix_pl_Socket_RegisterSelf(void *plContext); | |
117 | |
118 PKIX_Error * | |
119 pkix_pl_Socket_Create( | |
120 PKIX_Boolean isServer, | |
121 PRIntervalTime timeout, /* zero for non-blocking I/O */ | |
122 PRNetAddr *netAddr, | |
123 PRErrorCode *status, | |
124 PKIX_PL_Socket **pSocket, | |
125 void *plContext); | |
126 | |
127 PKIX_Error * | |
128 pkix_pl_Socket_CreateByName( | |
129 PKIX_Boolean isServer, | |
130 PRIntervalTime timeout, | |
131 char *serverName, | |
132 PRErrorCode *pStatus, | |
133 PKIX_PL_Socket **pSocket, | |
134 void *plContext); | |
135 | |
136 PKIX_Error * | |
137 pkix_pl_Socket_CreateByHostAndPort( | |
138 PKIX_Boolean isServer, | |
139 PRIntervalTime timeout, | |
140 char *hostname, | |
141 PRUint16 portnum, | |
142 PRErrorCode *pStatus, | |
143 PKIX_PL_Socket **pSocket, | |
144 void *plContext); | |
145 | |
146 /* Do not use these functions directly; use their callback variants instead | |
147 * static PKIX_Error * | |
148 * pkix_pl_Socket_Listen( | |
149 * PKIX_PL_Socket *socket, | |
150 * PKIX_UInt32 backlog, | |
151 * void *plContext); | |
152 * | |
153 * static PKIX_Error * | |
154 * pkix_pl_Socket_Accept( | |
155 * PKIX_PL_Socket *socket, | |
156 * PKIX_PL_Socket **pRendezvousSock, | |
157 * void *plContext); | |
158 * | |
159 * static PKIX_Error * | |
160 * pkix_pl_Socket_ConnectContinue( | |
161 * PKIX_PL_Socket *socket, | |
162 * PRErrorCode *pStatus, | |
163 * void *plContext); | |
164 * | |
165 * static PKIX_Error * | |
166 * pkix_pl_Socket_Send( | |
167 * PKIX_PL_Socket *sendSock, | |
168 * void *buf, | |
169 * PKIX_UInt32 bytesToWrite, | |
170 * PKIX_Int32 *pBytesWritten, | |
171 * void *plContext); | |
172 * | |
173 * static PKIX_Error * | |
174 * pkix_pl_Socket_Recv( | |
175 * PKIX_PL_Socket *rcvSock, | |
176 * void *buf, | |
177 * PKIX_UInt32 capacity, | |
178 * PKIX_Int32 *pBytesRead, | |
179 * void *plContext); | |
180 * | |
181 * static PKIX_Error * | |
182 * pkix_pl_Socket_Poll( | |
183 * PKIX_PL_Socket *sock, | |
184 * PKIX_Int32 *pBytesWritten, | |
185 * PKIX_Int32 *pBytesRead, | |
186 * void *plContext); | |
187 * | |
188 * static PKIX_Error * | |
189 * pkix_pl_Socket_Shutdown( | |
190 * PKIX_PL_Socket *socket, void *plContext); | |
191 */ | |
192 | |
193 PKIX_Error * | |
194 pkix_pl_Socket_GetCallbackList( | |
195 PKIX_PL_Socket *socket, | |
196 PKIX_PL_Socket_Callback **pCallbackList, | |
197 void *plContext); | |
198 | |
199 PKIX_Error * | |
200 pkix_pl_Socket_GetPRFileDesc( | |
201 PKIX_PL_Socket *socket, | |
202 PRFileDesc **pDesc, | |
203 void *plContext); | |
204 | |
205 #ifdef __cplusplus | |
206 } | |
207 #endif | |
208 | |
209 #endif /* _PKIX_PL_SOCKET_H */ | |
OLD | NEW |