nsprpub/pr/include/private/pprio.h

Wed, 31 Dec 2014 06:55:46 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:55:46 +0100
changeset 1
ca08bd8f51b2
permissions
-rw-r--r--

Added tag TORBROWSER_REPLICA for changeset 6474c204b198

     1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
     2 /* This Source Code Form is subject to the terms of the Mozilla Public
     3  * License, v. 2.0. If a copy of the MPL was not distributed with this
     4  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     6 /*
     7 ** File:	pprio.h
     8 **
     9 ** Description:	Private definitions for I/O related structures
    10 */
    12 #ifndef pprio_h___
    13 #define pprio_h___
    15 #include "prtypes.h"
    16 #include "prio.h"
    18 PR_BEGIN_EXTERN_C
    20 /************************************************************************/
    21 /************************************************************************/
    23 #ifdef _WIN64
    24 typedef __int64 PROsfd;
    25 #else
    26 typedef PRInt32 PROsfd;
    27 #endif
    29 /* Return the method tables for files, tcp sockets and udp sockets */
    30 NSPR_API(const PRIOMethods*)    PR_GetFileMethods(void);
    31 NSPR_API(const PRIOMethods*)    PR_GetTCPMethods(void);
    32 NSPR_API(const PRIOMethods*)    PR_GetUDPMethods(void);
    33 NSPR_API(const PRIOMethods*)    PR_GetPipeMethods(void);
    35 /*
    36 ** Convert a NSPR socket handle to a native socket handle.
    37 **
    38 ** Using this function makes your code depend on the properties of the
    39 ** current NSPR implementation, which may change (although extremely
    40 ** unlikely because of NSPR's backward compatibility requirement).  Avoid
    41 ** using it if you can.
    42 **
    43 ** If you use this function, you need to understand what NSPR does to
    44 ** the native handle.  For example, NSPR puts native socket handles in
    45 ** non-blocking mode or associates them with an I/O completion port (the
    46 ** WINNT build configuration only).  Your use of the native handle should
    47 ** not interfere with NSPR's use of the native handle.  If your code
    48 ** changes the configuration of the native handle, (e.g., changes it to
    49 ** blocking or closes it), NSPR will not work correctly.
    50 */
    51 NSPR_API(PROsfd)       PR_FileDesc2NativeHandle(PRFileDesc *);
    52 NSPR_API(void)         PR_ChangeFileDescNativeHandle(PRFileDesc *, PROsfd);
    53 NSPR_API(PRFileDesc*)  PR_AllocFileDesc(PROsfd osfd,
    54                                          const PRIOMethods *methods);
    55 NSPR_API(void)         PR_FreeFileDesc(PRFileDesc *fd);
    56 /*
    57 ** Import an existing OS file to NSPR. 
    58 */
    59 NSPR_API(PRFileDesc*)  PR_ImportFile(PROsfd osfd);
    60 NSPR_API(PRFileDesc*)  PR_ImportPipe(PROsfd osfd);
    61 NSPR_API(PRFileDesc*)  PR_ImportTCPSocket(PROsfd osfd);
    62 NSPR_API(PRFileDesc*)  PR_ImportUDPSocket(PROsfd osfd);
    65 /*
    66  *************************************************************************
    67  * FUNCTION: PR_CreateSocketPollFd
    68  * DESCRIPTION:
    69  *     Create a PRFileDesc wrapper for a native socket handle, for use with
    70  *	   PR_Poll only
    71  * INPUTS:
    72  *     None
    73  * OUTPUTS:
    74  *     None
    75  * RETURN: PRFileDesc*
    76  *     Upon successful completion, PR_CreateSocketPollFd returns a pointer
    77  *     to the PRFileDesc created for the native socket handle
    78  *     Returns a NULL pointer if the create of a new PRFileDesc failed
    79  *
    80  **************************************************************************
    81  */
    83 NSPR_API(PRFileDesc*)	PR_CreateSocketPollFd(PROsfd osfd);
    85 /*
    86  *************************************************************************
    87  * FUNCTION: PR_DestroySocketPollFd
    88  * DESCRIPTION:
    89  *     Destroy the PRFileDesc wrapper created by PR_CreateSocketPollFd
    90  * INPUTS:
    91  *     None
    92  * OUTPUTS:
    93  *     None
    94  * RETURN: PRFileDesc*
    95  *     Upon successful completion, PR_DestroySocketPollFd returns
    96  *	   PR_SUCCESS, else PR_FAILURE
    97  *
    98  **************************************************************************
    99  */
   101 NSPR_API(PRStatus) PR_DestroySocketPollFd(PRFileDesc *fd);
   104 /*
   105 ** Macros for PR_Socket
   106 **
   107 ** Socket types: PR_SOCK_STREAM, PR_SOCK_DGRAM
   108 */
   110 #ifdef WIN32
   112 #define PR_SOCK_STREAM 1
   113 #define PR_SOCK_DGRAM 2
   115 #else /* WIN32 */
   117 #define PR_SOCK_STREAM SOCK_STREAM
   118 #define PR_SOCK_DGRAM SOCK_DGRAM
   120 #endif /* WIN32 */
   122 /*
   123 ** Create a new Socket; this function is obsolete.
   124 */
   125 NSPR_API(PRFileDesc*)	PR_Socket(PRInt32 domain, PRInt32 type, PRInt32 proto);
   127 /* FUNCTION: PR_LockFile
   128 ** DESCRIPTION:
   129 **    Lock a file for exclusive access.
   130 ** RETURNS:
   131 **    PR_SUCCESS when the lock is held
   132 **    PR_FAILURE otherwise
   133 */
   134 NSPR_API(PRStatus) PR_LockFile(PRFileDesc *fd);
   136 /* FUNCTION: PR_TLockFile
   137 ** DESCRIPTION:
   138 **    Test and Lock a file for exclusive access.  Do not block if the
   139 **    file cannot be locked immediately.
   140 ** RETURNS:
   141 **    PR_SUCCESS when the lock is held
   142 **    PR_FAILURE otherwise
   143 */
   144 NSPR_API(PRStatus) PR_TLockFile(PRFileDesc *fd);
   146 /* FUNCTION: PR_UnlockFile
   147 ** DESCRIPTION:
   148 **    Unlock a file which has been previously locked successfully by this
   149 **    process.
   150 ** RETURNS:
   151 **    PR_SUCCESS when the lock is released
   152 **    PR_FAILURE otherwise
   153 */
   154 NSPR_API(PRStatus) PR_UnlockFile(PRFileDesc *fd);
   156 /*
   157 ** Emulate acceptread by accept and recv.
   158 */
   159 NSPR_API(PRInt32) PR_EmulateAcceptRead(PRFileDesc *sd, PRFileDesc **nd,
   160     PRNetAddr **raddr, void *buf, PRInt32 amount, PRIntervalTime timeout);
   162 /*
   163 ** Emulate sendfile by reading from the file and writing to the socket.
   164 ** The file is memory-mapped if memory-mapped files are supported.
   165 */
   166 NSPR_API(PRInt32) PR_EmulateSendFile(
   167     PRFileDesc *networkSocket, PRSendFileData *sendData,
   168     PRTransmitFileFlags flags, PRIntervalTime timeout);
   170 #ifdef WIN32
   171 /* FUNCTION: PR_NTFast_AcceptRead
   172 ** DESCRIPTION:
   173 **    NT has the notion of an "accept context", which is only needed in
   174 **    order to make certain calls.  By default, a socket connected via
   175 **    AcceptEx can only do a limited number of things without updating
   176 **    the acceptcontext.  The generic version of PR_AcceptRead always
   177 **    updates the accept context.  This version does not.
   178 **/
   179 NSPR_API(PRInt32) PR_NTFast_AcceptRead(PRFileDesc *sd, PRFileDesc **nd,
   180               PRNetAddr **raddr, void *buf, PRInt32 amount, PRIntervalTime t);
   182 typedef void (*_PR_AcceptTimeoutCallback)(void *);
   184 /* FUNCTION: PR_NTFast_AcceptRead_WithTimeoutCallback
   185 ** DESCRIPTION:
   186 **    The AcceptEx call combines the accept with the read function.  However,
   187 **    our daemon threads need to be able to wakeup and reliably flush their
   188 **    log buffers if the Accept times out.  However, with the current blocking
   189 **    interface to AcceptRead, there is no way for us to timeout the Accept;
   190 **    this is because when we timeout the Read, we can close the newly 
   191 **    socket and continue; but when we timeout the accept itself, there is no
   192 **    new socket to timeout.  So instead, this version of the function is
   193 **    provided.  After the initial timeout period elapses on the accept()
   194 **    portion of the function, it will call the callback routine and then
   195 **    continue the accept.   If the timeout occurs on the read, it will 
   196 **    close the connection and return error.
   197 */
   198 NSPR_API(PRInt32) PR_NTFast_AcceptRead_WithTimeoutCallback(
   199               PRFileDesc *sd, 
   200               PRFileDesc **nd,
   201               PRNetAddr **raddr, 
   202               void *buf, 
   203               PRInt32 amount, 
   204               PRIntervalTime t,
   205               _PR_AcceptTimeoutCallback callback, 
   206               void *callback_arg);
   208 /* FUNCTION: PR_NTFast_Accept
   209 ** DESCRIPTION:
   210 **    NT has the notion of an "accept context", which is only needed in
   211 **    order to make certain calls.  By default, a socket connected via
   212 **    AcceptEx can only do a limited number of things without updating
   213 **    the acceptcontext.  The generic version of PR_Accept always
   214 **    updates the accept context.  This version does not.
   215 **/
   216 NSPR_API(PRFileDesc*)	PR_NTFast_Accept(PRFileDesc *fd, PRNetAddr *addr,
   217                                                 PRIntervalTime timeout);
   219 /* FUNCTION: PR_NTFast_Update
   220 ** DESCRIPTION:
   221 **    For sockets accepted with PR_NTFast_Accept or PR_NTFastAcceptRead,
   222 **    this function will update the accept context for those sockets,
   223 **    so that the socket can make general purpose socket calls.
   224 **    Without calling this, the only operations supported on the socket
   225 **    Are PR_Read, PR_Write, PR_Transmitfile, and PR_Close.
   226 */
   227 NSPR_API(void) PR_NTFast_UpdateAcceptContext(PRFileDesc *acceptSock, 
   228                                         PRFileDesc *listenSock);
   231 /* FUNCTION: PR_NT_CancelIo
   232 ** DESCRIPTION:
   233 **    Cancel IO operations on fd.
   234 */
   235 NSPR_API(PRStatus) PR_NT_CancelIo(PRFileDesc *fd);
   238 #endif /* WIN32 */
   240 PR_END_EXTERN_C
   242 #endif /* pprio_h___ */

mercurial