tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

pkix_pl_socket.h (5828B)


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