OLD | NEW |
1 /* This Source Code Form is subject to the terms of the Mozilla Public | 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 | 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/. */ | 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
4 | 4 |
5 /* | 5 /* |
6 * Public header for exported OCSP types. | 6 * Public header for exported OCSP types. |
7 */ | 7 */ |
8 | 8 |
9 #ifndef _OCSPT_H_ | 9 #ifndef _OCSPT_H_ |
10 #define _OCSPT_H_ | 10 #define _OCSPT_H_ |
(...skipping 28 matching lines...) Expand all Loading... |
39 * DefaultHttpClient), populates an SEC_HttpClientFcnStruct, uses it to | 39 * DefaultHttpClient), populates an SEC_HttpClientFcnStruct, uses it to |
40 * register his client, and waits for his functions to be called. | 40 * register his client, and waits for his functions to be called. |
41 * | 41 * |
42 * For future expandability, the SEC_HttpClientFcnStruct is defined as a | 42 * For future expandability, the SEC_HttpClientFcnStruct is defined as a |
43 * union, with the version field acting as a selector. The proposed | 43 * union, with the version field acting as a selector. The proposed |
44 * initial version of the structure is given following the definition | 44 * initial version of the structure is given following the definition |
45 * of the union. The HttpClientState structure is implementation- | 45 * of the union. The HttpClientState structure is implementation- |
46 * dependent, and should be opaque to the user. | 46 * dependent, and should be opaque to the user. |
47 */ | 47 */ |
48 | 48 |
49 typedef void * SEC_HTTP_SERVER_SESSION; | 49 typedef void *SEC_HTTP_SERVER_SESSION; |
50 typedef void * SEC_HTTP_REQUEST_SESSION; | 50 typedef void *SEC_HTTP_REQUEST_SESSION; |
51 | 51 |
52 /* | 52 /* |
53 * This function creates a SEC_HTTP_SERVER_SESSION object. The implementer of a | 53 * This function creates a SEC_HTTP_SERVER_SESSION object. The implementer of a |
54 * specific HttpClient will allocate the necessary space, when this | 54 * specific HttpClient will allocate the necessary space, when this |
55 * function is called, and will free it when the corresponding FreeFcn | 55 * function is called, and will free it when the corresponding FreeFcn |
56 * is called. The SEC_HTTP_SERVER_SESSION object is passed, as an opaque object, | 56 * is called. The SEC_HTTP_SERVER_SESSION object is passed, as an opaque object, |
57 * to subsequent calls. | 57 * to subsequent calls. |
58 * | 58 * |
59 * If the function returns SECSuccess, the returned SEC_HTTP_SERVER_SESSION | 59 * If the function returns SECSuccess, the returned SEC_HTTP_SERVER_SESSION |
60 * must be cleaned up with a call to SEC_HttpServer_FreeSession, | 60 * must be cleaned up with a call to SEC_HttpServer_FreeSession, |
61 * after processing is finished. | 61 * after processing is finished. |
62 */ | 62 */ |
63 typedef SECStatus (*SEC_HttpServer_CreateSessionFcn)( | 63 typedef SECStatus (*SEC_HttpServer_CreateSessionFcn)( |
64 const char *host, | 64 const char *host, |
65 PRUint16 portnum, | 65 PRUint16 portnum, |
66 SEC_HTTP_SERVER_SESSION *pSession); | 66 SEC_HTTP_SERVER_SESSION *pSession); |
67 | 67 |
68 /* | 68 /* |
69 * This function is called to allow the implementation to attempt to keep | 69 * This function is called to allow the implementation to attempt to keep |
70 * the connection alive. Depending on the underlying platform, it might | 70 * the connection alive. Depending on the underlying platform, it might |
71 * immediately return SECSuccess without having performed any operations. | 71 * immediately return SECSuccess without having performed any operations. |
72 * (If a connection has not been kept alive, a subsequent call to | 72 * (If a connection has not been kept alive, a subsequent call to |
73 * SEC_HttpRequest_TrySendAndReceiveFcn should reopen the connection | 73 * SEC_HttpRequest_TrySendAndReceiveFcn should reopen the connection |
74 * automatically.) | 74 * automatically.) |
75 * | 75 * |
76 * If the connection uses nonblocking I/O, this function may return | 76 * If the connection uses nonblocking I/O, this function may return |
77 * SECWouldBlock and store a nonzero value at "pPollDesc". In that case | 77 * SECWouldBlock and store a nonzero value at "pPollDesc". In that case |
78 * the caller may wait on the poll descriptor, and should call this function | 78 * the caller may wait on the poll descriptor, and should call this function |
79 * again until SECSuccess (and a zero value at "pPollDesc") is obtained. | 79 * again until SECSuccess (and a zero value at "pPollDesc") is obtained. |
80 */ | 80 */ |
81 typedef SECStatus (*SEC_HttpServer_KeepAliveSessionFcn)( | 81 typedef SECStatus (*SEC_HttpServer_KeepAliveSessionFcn)( |
82 SEC_HTTP_SERVER_SESSION session, | 82 SEC_HTTP_SERVER_SESSION session, |
83 PRPollDesc **pPollDesc); | 83 PRPollDesc **pPollDesc); |
84 | 84 |
85 /* | 85 /* |
86 * This function frees the client SEC_HTTP_SERVER_SESSION object, closes all | 86 * This function frees the client SEC_HTTP_SERVER_SESSION object, closes all |
87 * SEC_HTTP_REQUEST_SESSIONs created for that server, discards all partial resul
ts, | 87 * SEC_HTTP_REQUEST_SESSIONs created for that server, discards all partial resul
ts, |
88 * frees any memory that was allocated by the client, and invalidates any | 88 * frees any memory that was allocated by the client, and invalidates any |
89 * response pointers that might have been returned by prior server or request | 89 * response pointers that might have been returned by prior server or request |
90 * functions. | 90 * functions. |
91 */ | 91 */ |
92 typedef SECStatus (*SEC_HttpServer_FreeSessionFcn)( | 92 typedef SECStatus (*SEC_HttpServer_FreeSessionFcn)( |
93 SEC_HTTP_SERVER_SESSION session); | 93 SEC_HTTP_SERVER_SESSION session); |
94 | 94 |
95 /* | 95 /* |
96 * This function creates a SEC_HTTP_REQUEST_SESSION object. The implementer of a | 96 * This function creates a SEC_HTTP_REQUEST_SESSION object. The implementer of a |
97 * specific HttpClient will allocate the necessary space, when this | 97 * specific HttpClient will allocate the necessary space, when this |
98 * function is called, and will free it when the corresponding FreeFcn | 98 * function is called, and will free it when the corresponding FreeFcn |
99 * is called. The SEC_HTTP_REQUEST_SESSION object is passed, as an opaque object
, | 99 * is called. The SEC_HTTP_REQUEST_SESSION object is passed, as an opaque object
, |
100 * to subsequent calls. | 100 * to subsequent calls. |
101 * | 101 * |
102 * An implementation that does not support the requested protocol variant | 102 * An implementation that does not support the requested protocol variant |
103 * (usually "http", but could eventually allow "https") or request method | 103 * (usually "http", but could eventually allow "https") or request method |
104 * should return SECFailure. | 104 * should return SECFailure. |
105 * | 105 * |
106 * Timeout values may include the constants PR_INTERVAL_NO_TIMEOUT (wait | 106 * Timeout values may include the constants PR_INTERVAL_NO_TIMEOUT (wait |
107 * forever) or PR_INTERVAL_NO_WAIT (nonblocking I/O). | 107 * forever) or PR_INTERVAL_NO_WAIT (nonblocking I/O). |
108 * | 108 * |
109 * If the function returns SECSuccess, the returned SEC_HTTP_REQUEST_SESSION | 109 * If the function returns SECSuccess, the returned SEC_HTTP_REQUEST_SESSION |
110 * must be cleaned up with a call to SEC_HttpRequest_FreeSession, | 110 * must be cleaned up with a call to SEC_HttpRequest_FreeSession, |
111 * after processing is finished. | 111 * after processing is finished. |
112 */ | 112 */ |
113 typedef SECStatus (*SEC_HttpRequest_CreateFcn)( | 113 typedef SECStatus (*SEC_HttpRequest_CreateFcn)( |
114 SEC_HTTP_SERVER_SESSION session, | 114 SEC_HTTP_SERVER_SESSION session, |
115 const char *http_protocol_variant, /* usually "http" */ | 115 const char *http_protocol_variant, /* usually "http" */ |
116 const char *path_and_query_string, | 116 const char *path_and_query_string, |
117 const char *http_request_method, | 117 const char *http_request_method, |
118 const PRIntervalTime timeout, | 118 const PRIntervalTime timeout, |
119 SEC_HTTP_REQUEST_SESSION *pRequest); | 119 SEC_HTTP_REQUEST_SESSION *pRequest); |
120 | 120 |
121 /* | 121 /* |
122 * This function sets data to be sent to the server for an HTTP request | 122 * This function sets data to be sent to the server for an HTTP request |
123 * of http_request_method == POST. If a particular implementation | 123 * of http_request_method == POST. If a particular implementation |
124 * supports it, the details for the POST request can be set by calling | 124 * supports it, the details for the POST request can be set by calling |
125 * this function, prior to activating the request with TrySendAndReceiveFcn. | 125 * this function, prior to activating the request with TrySendAndReceiveFcn. |
126 * | 126 * |
127 * An implementation that does not support the POST method should | 127 * An implementation that does not support the POST method should |
128 * implement a SetPostDataFcn function that returns immediately. | 128 * implement a SetPostDataFcn function that returns immediately. |
129 * | 129 * |
130 * Setting http_content_type is optional, the parameter may | 130 * Setting http_content_type is optional, the parameter may |
131 * by NULL or the empty string. | 131 * by NULL or the empty string. |
132 */ | 132 */ |
133 typedef SECStatus (*SEC_HttpRequest_SetPostDataFcn)( | 133 typedef SECStatus (*SEC_HttpRequest_SetPostDataFcn)( |
134 SEC_HTTP_REQUEST_SESSION request, | 134 SEC_HTTP_REQUEST_SESSION request, |
135 const char *http_data, | 135 const char *http_data, |
136 const PRUint32 http_data_len, | 136 const PRUint32 http_data_len, |
137 const char *http_content_type); | 137 const char *http_content_type); |
138 | 138 |
139 /* | 139 /* |
140 * This function sets an additional HTTP protocol request header. | 140 * This function sets an additional HTTP protocol request header. |
141 * If a particular implementation supports it, one or multiple headers | 141 * If a particular implementation supports it, one or multiple headers |
142 * can be added to the request by calling this function once or multiple | 142 * can be added to the request by calling this function once or multiple |
143 * times, prior to activating the request with TryFcn. | 143 * times, prior to activating the request with TryFcn. |
144 * | 144 * |
145 * An implementation that does not support setting additional headers | 145 * An implementation that does not support setting additional headers |
146 * should implement an AddRequestHeaderFcn function that returns immediately. | 146 * should implement an AddRequestHeaderFcn function that returns immediately. |
147 */ | 147 */ |
148 typedef SECStatus (*SEC_HttpRequest_AddHeaderFcn)( | 148 typedef SECStatus (*SEC_HttpRequest_AddHeaderFcn)( |
149 SEC_HTTP_REQUEST_SESSION request, | 149 SEC_HTTP_REQUEST_SESSION request, |
150 const char *http_header_name, | 150 const char *http_header_name, |
151 const char *http_header_value); | 151 const char *http_header_value); |
152 | 152 |
153 /* | 153 /* |
154 * This function initiates or continues an HTTP request. After | 154 * This function initiates or continues an HTTP request. After |
155 * parameters have been set with the Create function and, optionally, | 155 * parameters have been set with the Create function and, optionally, |
156 * modified or enhanced with the AddParams function, this call creates | 156 * modified or enhanced with the AddParams function, this call creates |
157 * the socket connection and initiates the communication. | 157 * the socket connection and initiates the communication. |
158 * | 158 * |
159 * If a timeout value of zero is specified, indicating non-blocking | 159 * If a timeout value of zero is specified, indicating non-blocking |
160 * I/O, the client creates a non-blocking socket, and returns a status | 160 * I/O, the client creates a non-blocking socket, and returns a status |
161 * of SECWouldBlock and a non-NULL PRPollDesc if the operation is not | 161 * of SECWouldBlock and a non-NULL PRPollDesc if the operation is not |
(...skipping 11 matching lines...) Expand all Loading... |
173 * An input value of zero means, the caller will accept any response len. | 173 * An input value of zero means, the caller will accept any response len. |
174 * A different input value indicates the maximum response value acceptable | 174 * A different input value indicates the maximum response value acceptable |
175 * to the caller. | 175 * to the caller. |
176 * If data is successfully read and the size is acceptable to the caller, | 176 * If data is successfully read and the size is acceptable to the caller, |
177 * the function will return SECSuccess and set http_response_data_len to | 177 * the function will return SECSuccess and set http_response_data_len to |
178 * the size of the block returned in http_response_data. | 178 * the size of the block returned in http_response_data. |
179 * If the data read from the http server is larger than the acceptable | 179 * If the data read from the http server is larger than the acceptable |
180 * size, the function will return SECFailure. | 180 * size, the function will return SECFailure. |
181 * http_response_data_len will be set to a value different from zero to | 181 * http_response_data_len will be set to a value different from zero to |
182 * indicate the reason of the failure. | 182 * indicate the reason of the failure. |
183 * An out value of "0" means, the failure was unrelated to the | 183 * An out value of "0" means, the failure was unrelated to the |
184 * acceptable size. | 184 * acceptable size. |
185 * An out value of "1" means, the result data is larger than the | 185 * An out value of "1" means, the result data is larger than the |
186 * accpeptable size, but the real size is not yet known to the http client | 186 * accpeptable size, but the real size is not yet known to the http client |
187 * implementation and it stopped retrieving it, | 187 * implementation and it stopped retrieving it, |
188 * Any other out value combined with a return value of SECFailure | 188 * Any other out value combined with a return value of SECFailure |
189 * will indicate the actual size of the server data. | 189 * will indicate the actual size of the server data. |
190 * | 190 * |
191 * The caller is permitted to provide NULL values for any of the | 191 * The caller is permitted to provide NULL values for any of the |
192 * http_response arguments, indicating the caller is not interested in | 192 * http_response arguments, indicating the caller is not interested in |
193 * those values. If the caller does provide an address, the HttpClient | 193 * those values. If the caller does provide an address, the HttpClient |
194 * stores at that address a pointer to the corresponding argument, at | 194 * stores at that address a pointer to the corresponding argument, at |
195 * the completion of the operation. | 195 * the completion of the operation. |
196 * | 196 * |
197 * All returned pointers will be owned by the the HttpClient | 197 * All returned pointers will be owned by the the HttpClient |
198 * implementation and will remain valid until the call to | 198 * implementation and will remain valid until the call to |
199 * SEC_HttpRequest_FreeFcn. | 199 * SEC_HttpRequest_FreeFcn. |
200 */ | 200 */ |
201 typedef SECStatus (*SEC_HttpRequest_TrySendAndReceiveFcn)( | 201 typedef SECStatus (*SEC_HttpRequest_TrySendAndReceiveFcn)( |
202 SEC_HTTP_REQUEST_SESSION request, | 202 SEC_HTTP_REQUEST_SESSION request, |
203 PRPollDesc **pPollDesc, | 203 PRPollDesc **pPollDesc, |
204 PRUint16 *http_response_code, | 204 PRUint16 *http_response_code, |
205 const char **http_response_content_type, | 205 const char **http_response_content_type, |
206 const char **http_response_headers, | 206 const char **http_response_headers, |
207 const char **http_response_data, | 207 const char **http_response_data, |
208 PRUint32 *http_response_data_len); | 208 PRUint32 *http_response_data_len); |
209 | 209 |
210 /* | 210 /* |
211 * Calling CancelFcn asks for premature termination of the request. | 211 * Calling CancelFcn asks for premature termination of the request. |
212 * | 212 * |
213 * Future calls to SEC_HttpRequest_TrySendAndReceive should | 213 * Future calls to SEC_HttpRequest_TrySendAndReceive should |
214 * by avoided, but in this case the HttpClient implementation | 214 * by avoided, but in this case the HttpClient implementation |
215 * is expected to return immediately with SECFailure. | 215 * is expected to return immediately with SECFailure. |
216 * | 216 * |
217 * After calling CancelFcn, a separate call to SEC_HttpRequest_FreeFcn | 217 * After calling CancelFcn, a separate call to SEC_HttpRequest_FreeFcn |
218 * is still necessary to free resources. | 218 * is still necessary to free resources. |
219 */ | 219 */ |
220 typedef SECStatus (*SEC_HttpRequest_CancelFcn)( | 220 typedef SECStatus (*SEC_HttpRequest_CancelFcn)( |
221 SEC_HTTP_REQUEST_SESSION request); | 221 SEC_HTTP_REQUEST_SESSION request); |
222 | 222 |
223 /* | 223 /* |
224 * Before calling this function, it must be assured the request | 224 * Before calling this function, it must be assured the request |
225 * has been completed, i.e. either SEC_HttpRequest_TrySendAndReceiveFcn has | 225 * has been completed, i.e. either SEC_HttpRequest_TrySendAndReceiveFcn has |
226 * returned SECSuccess, or the request has been canceled with | 226 * returned SECSuccess, or the request has been canceled with |
227 * a call to SEC_HttpRequest_CancelFcn. | 227 * a call to SEC_HttpRequest_CancelFcn. |
228 * | 228 * |
229 * This function frees the client state object, closes all sockets, | 229 * This function frees the client state object, closes all sockets, |
230 * discards all partial results, frees any memory that was allocated | 230 * discards all partial results, frees any memory that was allocated |
231 * by the client, and invalidates all response pointers that might | 231 * by the client, and invalidates all response pointers that might |
232 * have been returned by SEC_HttpRequest_TrySendAndReceiveFcn | 232 * have been returned by SEC_HttpRequest_TrySendAndReceiveFcn |
233 */ | 233 */ |
234 typedef SECStatus (*SEC_HttpRequest_FreeFcn)( | 234 typedef SECStatus (*SEC_HttpRequest_FreeFcn)( |
235 SEC_HTTP_REQUEST_SESSION request); | 235 SEC_HTTP_REQUEST_SESSION request); |
236 | 236 |
237 typedef struct SEC_HttpClientFcnV1Struct { | 237 typedef struct SEC_HttpClientFcnV1Struct { |
238 SEC_HttpServer_CreateSessionFcn createSessionFcn; | 238 SEC_HttpServer_CreateSessionFcn createSessionFcn; |
239 SEC_HttpServer_KeepAliveSessionFcn keepAliveSessionFcn; | 239 SEC_HttpServer_KeepAliveSessionFcn keepAliveSessionFcn; |
240 SEC_HttpServer_FreeSessionFcn freeSessionFcn; | 240 SEC_HttpServer_FreeSessionFcn freeSessionFcn; |
241 SEC_HttpRequest_CreateFcn createFcn; | 241 SEC_HttpRequest_CreateFcn createFcn; |
242 SEC_HttpRequest_SetPostDataFcn setPostDataFcn; | 242 SEC_HttpRequest_SetPostDataFcn setPostDataFcn; |
243 SEC_HttpRequest_AddHeaderFcn addHeaderFcn; | 243 SEC_HttpRequest_AddHeaderFcn addHeaderFcn; |
244 SEC_HttpRequest_TrySendAndReceiveFcn trySendAndReceiveFcn; | 244 SEC_HttpRequest_TrySendAndReceiveFcn trySendAndReceiveFcn; |
245 SEC_HttpRequest_CancelFcn cancelFcn; | 245 SEC_HttpRequest_CancelFcn cancelFcn; |
246 SEC_HttpRequest_FreeFcn freeFcn; | 246 SEC_HttpRequest_FreeFcn freeFcn; |
247 } SEC_HttpClientFcnV1; | 247 } SEC_HttpClientFcnV1; |
248 | 248 |
249 typedef struct SEC_HttpClientFcnStruct { | 249 typedef struct SEC_HttpClientFcnStruct { |
250 PRInt16 version; | 250 PRInt16 version; |
251 union { | 251 union { |
252 SEC_HttpClientFcnV1 ftable1; | 252 SEC_HttpClientFcnV1 ftable1; |
253 /* SEC_HttpClientFcnV2 ftable2; */ | 253 /* SEC_HttpClientFcnV2 ftable2; */ |
254 /* ... */ | 254 /* ... */ |
255 } fcnTable; | 255 } fcnTable; |
256 } SEC_HttpClientFcn; | 256 } SEC_HttpClientFcn; |
257 | 257 |
258 /* | 258 /* |
259 * ocspMode_FailureIsVerificationFailure: | 259 * ocspMode_FailureIsVerificationFailure: |
260 * This is the classic behaviour of NSS. | 260 * This is the classic behaviour of NSS. |
261 * Any OCSP failure is a verification failure (classic mode, default). | 261 * Any OCSP failure is a verification failure (classic mode, default). |
262 * Without a good response, OCSP networking will be retried each time | 262 * Without a good response, OCSP networking will be retried each time |
263 * it is required for verifying a cert. | 263 * it is required for verifying a cert. |
264 * | 264 * |
265 * ocspMode_FailureIsNotAVerificationFailure: | 265 * ocspMode_FailureIsNotAVerificationFailure: |
(...skipping 20 matching lines...) Expand all Loading... |
286 * byName [1] EXPLICIT Name, | 286 * byName [1] EXPLICIT Name, |
287 * byKey [2] EXPLICIT KeyHash } | 287 * byKey [2] EXPLICIT KeyHash } |
288 * | 288 * |
289 * Because it is CHOICE, the type of identification used and the | 289 * Because it is CHOICE, the type of identification used and the |
290 * identification itself are actually encoded together. To represent | 290 * identification itself are actually encoded together. To represent |
291 * this same information internally, we explicitly define a type and | 291 * this same information internally, we explicitly define a type and |
292 * save it, along with the value, into a data structure. | 292 * save it, along with the value, into a data structure. |
293 */ | 293 */ |
294 | 294 |
295 typedef enum { | 295 typedef enum { |
296 ocspResponderID_other = -1,»» /* unknown kind of responderID */ | 296 ocspResponderID_other = -1, /* unknown kind of responderID */ |
297 ocspResponderID_byName = 1, | 297 ocspResponderID_byName = 1, |
298 ocspResponderID_byKey = 2 | 298 ocspResponderID_byKey = 2 |
299 } CERTOCSPResponderIDType; | 299 } CERTOCSPResponderIDType; |
300 | 300 |
301 #endif /* _OCSPT_H_ */ | 301 #endif /* _OCSPT_H_ */ |
OLD | NEW |