diff options
Diffstat (limited to 'security/manager/ssl/nsNSSErrors.cpp')
-rw-r--r-- | security/manager/ssl/nsNSSErrors.cpp | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/security/manager/ssl/nsNSSErrors.cpp b/security/manager/ssl/nsNSSErrors.cpp new file mode 100644 index 000000000..fc8bd3e31 --- /dev/null +++ b/security/manager/ssl/nsNSSErrors.cpp @@ -0,0 +1,103 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- + * + * 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 "nsNSSComponent.h" +#include "secerr.h" +#include "sslerr.h" + +const char * +nsNSSErrors::getDefaultErrorStringName(PRErrorCode err) +{ + return PR_ErrorToName(err); +} + +const char * +nsNSSErrors::getOverrideErrorStringName(PRErrorCode aErrorCode) +{ + const char *id_str = nullptr; + + switch (aErrorCode) { + case SSL_ERROR_SSL_DISABLED: + id_str = "PSMERR_SSL_Disabled"; + break; + + case SSL_ERROR_SSL2_DISABLED: + id_str = "PSMERR_SSL2_Disabled"; + break; + + case SEC_ERROR_REUSED_ISSUER_AND_SERIAL: + id_str = "PSMERR_HostReusedIssuerSerial"; + break; + } + + return id_str; +} + +nsresult +nsNSSErrors::getErrorMessageFromCode(PRErrorCode err, + nsINSSComponent *component, + nsString &returnedMessage) +{ + NS_ENSURE_ARG_POINTER(component); + returnedMessage.Truncate(); + + const char *nss_error_id_str = getDefaultErrorStringName(err); + const char *id_str = getOverrideErrorStringName(err); + + if (id_str || nss_error_id_str) + { + nsString defMsg; + nsresult rv; + if (id_str) + { + rv = component->GetPIPNSSBundleString(id_str, defMsg); + } + else + { + rv = component->GetNSSBundleString(nss_error_id_str, defMsg); + } + + if (NS_SUCCEEDED(rv)) + { + returnedMessage.Append(defMsg); + returnedMessage.Append('\n'); + } + } + + if (returnedMessage.IsEmpty()) + { + // no localized string available, use NSS' internal + returnedMessage.AppendASCII(PR_ErrorToString(err, PR_LANGUAGE_EN)); + returnedMessage.Append('\n'); + } + + if (nss_error_id_str) + { + nsresult rv; + nsCString error_id(nss_error_id_str); + NS_ConvertASCIItoUTF16 idU(error_id); + + const char16_t *params[1]; + params[0] = idU.get(); + + nsString formattedString; + rv = component->PIPBundleFormatStringFromName("certErrorCodePrefix2", + params, 1, + formattedString); + if (NS_SUCCEEDED(rv)) { + returnedMessage.Append('\n'); + returnedMessage.Append(formattedString); + returnedMessage.Append('\n'); + } + else { + returnedMessage.Append('('); + returnedMessage.Append(idU); + returnedMessage.Append(')'); + } + } + + return NS_OK; +} |