| 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 |