comparison nspr/pr/include/private/pprio.h @ 0:1e5118fa0cb1

This is NSS with a Cmake Buildsyste To compile a static NSS library for Windows we've used the Chromium-NSS fork and added a Cmake buildsystem to compile it statically for Windows. See README.chromium for chromium changes and README.trustbridge for our modifications.
author Andre Heinecke <andre.heinecke@intevation.de>
date Mon, 28 Jul 2014 10:47:06 +0200
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:1e5118fa0cb1
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/. */
5
6 /*
7 ** File: pprio.h
8 **
9 ** Description: Private definitions for I/O related structures
10 */
11
12 #ifndef pprio_h___
13 #define pprio_h___
14
15 #include "prtypes.h"
16 #include "prio.h"
17
18 PR_BEGIN_EXTERN_C
19
20 /************************************************************************/
21 /************************************************************************/
22
23 #ifdef _WIN64
24 typedef __int64 PROsfd;
25 #else
26 typedef PRInt32 PROsfd;
27 #endif
28
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);
34
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);
63
64
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 */
82
83 NSPR_API(PRFileDesc*) PR_CreateSocketPollFd(PROsfd osfd);
84
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 */
100
101 NSPR_API(PRStatus) PR_DestroySocketPollFd(PRFileDesc *fd);
102
103
104 /*
105 ** Macros for PR_Socket
106 **
107 ** Socket types: PR_SOCK_STREAM, PR_SOCK_DGRAM
108 */
109
110 #ifdef WIN32
111
112 #define PR_SOCK_STREAM 1
113 #define PR_SOCK_DGRAM 2
114
115 #else /* WIN32 */
116
117 #define PR_SOCK_STREAM SOCK_STREAM
118 #define PR_SOCK_DGRAM SOCK_DGRAM
119
120 #endif /* WIN32 */
121
122 /*
123 ** Create a new Socket; this function is obsolete.
124 */
125 NSPR_API(PRFileDesc*) PR_Socket(PRInt32 domain, PRInt32 type, PRInt32 proto);
126
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);
135
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);
145
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);
155
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);
161
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);
169
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);
181
182 typedef void (*_PR_AcceptTimeoutCallback)(void *);
183
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);
207
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);
218
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);
229
230
231 /* FUNCTION: PR_NT_CancelIo
232 ** DESCRIPTION:
233 ** Cancel IO operations on fd.
234 */
235 NSPR_API(PRStatus) PR_NT_CancelIo(PRFileDesc *fd);
236
237
238 #endif /* WIN32 */
239
240 PR_END_EXTERN_C
241
242 #endif /* pprio_h___ */
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)