| /* |
| * NSS utility functions |
| * |
| * This Source Code Form is subject to the terms of the Mozilla Public |
| * License, v. 2.0. If a copy of the MPL was not distributed with this |
| * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
| |
| #include "prtypes.h" |
| #include "prinit.h" |
| #include "seccomon.h" |
| #include "secerr.h" |
| #include "ssl.h" |
| #include "sslimpl.h" |
| #include "sslproto.h" |
| |
| static int ssl_isInited = 0; |
| static PRCallOnceType ssl_init = { 0 }; |
| PR_STATIC_ASSERT(sizeof(unsigned long) <= sizeof(PRUint64)); |
| |
| PRStatus |
| ssl_InitCallOnce(void *arg) |
| { |
| int *error = (int *)arg; |
| SECStatus rv; |
| |
| rv = ssl_InitializePRErrorTable(); |
| if (rv != SECSuccess) { |
| *error = SEC_ERROR_NO_MEMORY; |
| return PR_FAILURE; |
| } |
| #ifdef DEBUG |
| ssl3_CheckCipherSuiteOrderConsistency(); |
| #endif |
| |
| rv = ssl3_ApplyNSSPolicy(); |
| if (rv != SECSuccess) { |
| *error = PORT_GetError(); |
| return PR_FAILURE; |
| } |
| return PR_SUCCESS; |
| } |
| |
| SECStatus |
| ssl_Init(void) |
| { |
| PRStatus nrv; |
| |
| /* short circuit test if we are already inited */ |
| if (!ssl_isInited) { |
| int error; |
| /* only do this once at init time, block all others until we are done */ |
| nrv = PR_CallOnceWithArg(&ssl_init, ssl_InitCallOnce, &error); |
| if (nrv != PR_SUCCESS) { |
| PORT_SetError(error); |
| return SECFailure; |
| } |
| ssl_isInited = 1; |
| } |
| return SECSuccess; |
| } |