/*---------------------------------------------------------------------------* Project: Horizon File: ssl_Result.h Copyright (C)2009 Nintendo Co., Ltd. All rights reserved. These coded instructions, statements, and computer programs contain proprietary information of Nintendo of America Inc. and/or Nintendo Company Ltd., and are protected by Federal copyright law. They may not be disclosed to third parties or copied or duplicated in any form, in whole or in part, without the prior written consent of Nintendo. $Rev: 31762 $ *--------------------------------------------------------------------------- */ #ifndef NN_SSL_SSL_RESULT_H_ #define NN_SSL_SSL_RESULT_H_ #include #include //Macro to convert NHTTP library Result code to HTTP ResultCode. #define CHANGE_NSSL_RESULT_CODE_MASK 0x000003ff #define CHANGE_NSSL_RESULT_CODE(nhttpCode) \ (nhttpCode) & (CHANGE_NSSL_RESULT_CODE_MASK) /* Please see man pages for details */ /* Please see man pages for details */ enum NnSslResultCode { /* SSL processing related */ NNSSL_ENONE = CHANGE_NSSL_RESULT_CODE(NSSL_ENONE), // NNSSL_EFAILED = CHANGE_NSSL_RESULT_CODE(NSSL_EFAILED), // NNSSL_EWANT_READ = CHANGE_NSSL_RESULT_CODE(NSSL_EWANT_READ), // NNSSL_EWANT_WRITE = CHANGE_NSSL_RESULT_CODE(NSSL_EWANT_WRITE), // NNSSL_ESYSCALL = CHANGE_NSSL_RESULT_CODE(NSSL_ESYSCALL), // NNSSL_EZERO_RETURN = CHANGE_NSSL_RESULT_CODE(NSSL_EZERO_RETURN), // NNSSL_EWANT_CONNECT = CHANGE_NSSL_RESULT_CODE(NSSL_EWANT_CONNECT), // NNSSL_ESSLID = CHANGE_NSSL_RESULT_CODE(NSSL_ESSLID), // NNSSL_EVERIFY_COMMON_NAME = CHANGE_NSSL_RESULT_CODE(NSSL_EVERIFY_COMMON_NAME), // NNSSL_EVERIFY_ROOT_CA = CHANGE_NSSL_RESULT_CODE(NSSL_EVERIFY_ROOT_CA), // NNSSL_EVERIFY_CHAIN = CHANGE_NSSL_RESULT_CODE(NSSL_EVERIFY_CHAIN), // NNSSL_EVERIFY_DATE = CHANGE_NSSL_RESULT_CODE(NSSL_EVERIFY_DATE), // NNSSL_EGET_SERVER_CERT = CHANGE_NSSL_RESULT_CODE(NSSL_EGET_SERVER_CERT), // NNSSL_EVERIFY_REVOKED_CERT = CHANGE_NSSL_RESULT_CODE(NSSL_EVERIFY_REVOKED_CERT), // NNSSL_ESTATE = CHANGE_NSSL_RESULT_CODE(NSSL_ESTATE), // NNSSL_ERANDOM = CHANGE_NSSL_RESULT_CODE(NSSL_ERANDOM), // NNSSL_EVERIFY_CERT = CHANGE_NSSL_RESULT_CODE(NSSL_EVERIFY_SERVER_CERT), // NNSSL_ECERT_BUF_ALREADY_SET = CHANGE_NSSL_RESULT_CODE(NSSL_ECERT_BUF_ALREADY_SET), // /* Other error */ NNSSL_ER_ALREADY_INITIALIZED = nn::Result::DESCRIPTION_ALREADY_INITIALIZED, // NNSSL_ER_NOT_INITIALIZED = nn::Result::DESCRIPTION_NOT_INITIALIZED, // NNSSL_ER_OUT_OF_MEMORY = nn::Result::DESCRIPTION_OUT_OF_MEMORY, // NNSSL_ER_NOT_ASSIGN_SERVER = CHANGE_NSSL_RESULT_CODE(NSSL_ERROR_CODE(50)), // NNSSL_ER_ALREADY_ASSIGN_SERVER = CHANGE_NSSL_RESULT_CODE(NSSL_ERROR_CODE(51)), // NNSSL_ER_IPC_SESSION = CHANGE_NSSL_RESULT_CODE(NSSL_ERROR_CODE(52)), // NNSSL_ER_CONN_PROCESS_MAX = CHANGE_NSSL_RESULT_CODE(NSSL_ERROR_CODE(53)), // NNSSL_ER_FAIL_TO_CREATE_CERT_STORE = CHANGE_NSSL_RESULT_CODE(NSSL_ERROR_CODE(54)), // NNSSL_ER_FAIL_TO_CREATE_CRL_STORE = CHANGE_NSSL_RESULT_CODE(NSSL_ERROR_CODE(55)), // NNSSL_ER_FAIL_TO_CREATE_CLIENT_CERT = CHANGE_NSSL_RESULT_CODE(NSSL_ERROR_CODE(56)), // NNSSL_ER_INVALID_PARAM = CHANGE_NSSL_RESULT_CODE(NSSL_ERROR_CODE(57)), // NNSSL_ER_CLIENT_PROCESS_MAX = CHANGE_NSSL_RESULT_CODE(NSSL_ERROR_CODE(58)), // NNSSL_ER_IPC_SESSION_MAX = CHANGE_NSSL_RESULT_CODE(NSSL_ERROR_CODE(59)), // NNSSL_ER_INTERNAL_CERT = CHANGE_NSSL_RESULT_CODE(NSSL_ERROR_CODE(60)), // NNSSL_ER_INTERNAL_CRL = CHANGE_NSSL_RESULT_CODE(NSSL_ERROR_CODE(61)) // }; /* */ #ifdef __cplusplus namespace nn { namespace ssl { /* Please see man pages for details */ enum ResultCode { /* SSL processing related */ ENONE = NNSSL_ENONE, // EFAILED = NNSSL_EFAILED, // EWANT_READ = NNSSL_EWANT_READ, // EWANT_WRITE = NNSSL_EWANT_WRITE, // ESYSCALL = NNSSL_ESYSCALL, // EZERO_RETURN = NNSSL_EZERO_RETURN, // EWANT_CONNECT = NNSSL_EWANT_CONNECT, // ESSLID = NNSSL_ESSLID, // EVERIFY_COMMON_NAME = NNSSL_EVERIFY_COMMON_NAME, // EVERIFY_ROOT_CA = NNSSL_EVERIFY_ROOT_CA, // EVERIFY_CHAIN = NNSSL_EVERIFY_CHAIN, // EVERIFY_DATE = NNSSL_EVERIFY_DATE, // EGET_SERVER_CERT = NNSSL_EGET_SERVER_CERT, // EVERIFY_REVOKED_CERT = NNSSL_EVERIFY_REVOKED_CERT, // ESTATE = NNSSL_ESTATE, // ERANDOM = NNSSL_ERANDOM, // EVERIFY_CERT = NNSSL_EVERIFY_CERT, // ECERT_BUF_ALREADY_SET = NNSSL_ECERT_BUF_ALREADY_SET, // /* Other error */ ER_ALREADY_INITIALIZED = NNSSL_ER_ALREADY_INITIALIZED, // ER_NOT_INITIALIZED = NNSSL_ER_NOT_INITIALIZED, // ER_OUT_OF_MEMORY = NNSSL_ER_OUT_OF_MEMORY, // ER_NOT_ASSIGN_SERVER = NNSSL_ER_NOT_ASSIGN_SERVER, // ER_ALREADY_ASSIGN_SERVER = NNSSL_ER_ALREADY_ASSIGN_SERVER, // ER_IPC_SESSION = NNSSL_ER_IPC_SESSION, // ER_CONN_PROCESS_MAX = NNSSL_ER_CONN_PROCESS_MAX, // ER_FAIL_TO_CREATE_CERT_STORE = NNSSL_ER_FAIL_TO_CREATE_CERT_STORE, // ER_FAIL_TO_CREATE_CRL_STORE = NNSSL_ER_FAIL_TO_CREATE_CRL_STORE, // ER_FAIL_TO_CREATE_CLIENT_CERT = NNSSL_ER_FAIL_TO_CREATE_CLIENT_CERT, // ER_INVALID_PARAM = NNSSL_ER_INVALID_PARAM, // ER_CLIENT_PROCESS_MAX = NNSSL_ER_CLIENT_PROCESS_MAX, // ER_IPC_SESSION_MAX = NNSSL_ER_IPC_SESSION_MAX, // ER_INTERNAL_CERT = NNSSL_ER_INTERNAL_CERT, // ER_INTERNAL_CRL = NNSSL_ER_INTERNAL_CRL // }; namespace detail { /* Please see man pages for details */ NN_DEFINE_RESULT_FUNC_LM(MakePermanentResult, Result::LEVEL_PERMANENT, Result::MODULE_NN_SSL); /* Please see man pages for details */ inline Result ChangeNsslRetCodeToResult(ResultCode returnCode) { if(returnCode == ENONE) { return ResultSuccess(); } else if((returnCode == EWANT_READ) || (returnCode == EWANT_WRITE) || (returnCode == EWANT_CONNECT)) { return detail::MakePermanentResult(Result::SUMMARY_WOULD_BLOCK, returnCode); } else if(returnCode == ER_INVALID_PARAM) { return detail::MakePermanentResult(Result::SUMMARY_INVALID_ARGUMENT, returnCode); } else { return detail::MakePermanentResult(Result::SUMMARY_INVALID_STATE, returnCode); } } /* Please see man pages for details */ inline Result ChangeNsslRetCodeToResult(s32 returnCode) { return ChangeNsslRetCodeToResult(static_cast(CHANGE_NSSL_RESULT_CODE(returnCode))); } } /* Please see man pages for details */ NN_DEFINE_RESULT_CONST_LM( ResultProtocolFailedErr, detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, EFAILED ); /* Please see man pages for details */ NN_DEFINE_RESULT_CONST_LM( ResultWantRead, detail::MakePermanentResult, Result::SUMMARY_WOULD_BLOCK, EWANT_READ ); /* Please see man pages for details */ NN_DEFINE_RESULT_CONST_LM( ResultWantWrite, detail::MakePermanentResult, Result::SUMMARY_WOULD_BLOCK, EWANT_WRITE ); /* Please see man pages for details */ NN_DEFINE_RESULT_CONST_LM( ResultSystemCallErr, detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ESYSCALL ); /* Please see man pages for details */ NN_DEFINE_RESULT_CONST_LM( ResultSocketZeroReturn, detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, EZERO_RETURN ); /* Please see man pages for details */ NN_DEFINE_RESULT_CONST_LM( ResultWantConnect, detail::MakePermanentResult, Result::SUMMARY_WOULD_BLOCK, EWANT_CONNECT ); /* Please see man pages for details */ NN_DEFINE_RESULT_CONST_LM( ResultInternalSslIdErr, detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ESSLID ); /* Please see man pages for details */ NN_DEFINE_RESULT_CONST_LM( ResultFailToGetServerCert, detail::MakePermanentResult, Result::SUMMARY_SUCCESS, EGET_SERVER_CERT ); /* Please see man pages for details */ NN_DEFINE_RESULT_CONST_LM( ResultVerifyCertRevokedErr, detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, EVERIFY_REVOKED_CERT ); /* Please see man pages for details */ NN_DEFINE_RESULT_CONST_LM( ResultLibraryStateErr, detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ESTATE ); /* Please see man pages for details */ NN_DEFINE_RESULT_CONST_LM( ResultRandomErr, detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ERANDOM ); /* Please see man pages for details */ NN_DEFINE_RESULT_CONST_LM( ResultVerifyCertErr, detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, EVERIFY_CERT ); /* Please see man pages for details */ NN_DEFINE_RESULT_CONST_LM( ResultAlreadyInitializedErr, detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_ALREADY_INITIALIZED ); /* Please see man pages for details */ NN_DEFINE_RESULT_CONST_LM( ResultNotInitializedErr, detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_NOT_INITIALIZED ); /* Please see man pages for details */ NN_DEFINE_RESULT_CONST_LM( ResultOutOfMemoryErr, detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_OUT_OF_MEMORY ); /* Please see man pages for details */ NN_DEFINE_RESULT_CONST_LM( ResultNotAssignServerErr, detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_NOT_ASSIGN_SERVER ); /* Please see man pages for details */ NN_DEFINE_RESULT_CONST_LM( ResultAlreadyAssignServerErr, detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_ALREADY_ASSIGN_SERVER ); /* Please see man pages for details */ NN_DEFINE_RESULT_CONST_LM( ResultIpcSessionErr, detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_IPC_SESSION ); /* Please see man pages for details */ NN_DEFINE_RESULT_CONST_LM( ResultProcessConnectionMaxErr, detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_CONN_PROCESS_MAX ); /* Please see man pages for details */ NN_DEFINE_RESULT_CONST_LM( ResultFailToCreateCertStoreErr, detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_FAIL_TO_CREATE_CERT_STORE ); /* Please see man pages for details */ NN_DEFINE_RESULT_CONST_LM( ResultFailToCreateCrlStoreErr, detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_FAIL_TO_CREATE_CRL_STORE ); /* Please see man pages for details */ NN_DEFINE_RESULT_CONST_LM( ResultFailToCreateClientCertErr, detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_FAIL_TO_CREATE_CLIENT_CERT ); /* Please see man pages for details */ NN_DEFINE_RESULT_CONST_LM( ResultInvalidParamErr, detail::MakePermanentResult, Result::SUMMARY_INVALID_ARGUMENT, ER_INVALID_PARAM ); /* Please see man pages for details */ NN_DEFINE_RESULT_CONST_LM( ResultNotImplementedErr, detail::MakePermanentResult, Result::SUMMARY_INTERNAL, nn::Result::DESCRIPTION_NOT_IMPLEMENTED ); /* Please see man pages for details */ NN_DEFINE_RESULT_CONST_LM( ResultClientProcessMaxErr, detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_CLIENT_PROCESS_MAX ); /* Please see man pages for details */ NN_DEFINE_RESULT_CONST_LM( ResultIpcSessionMaxErr, detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_IPC_SESSION_MAX ); /* Please see man pages for details */ NN_DEFINE_RESULT_CONST_LM( ResultInternalCertErr, detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_INTERNAL_CERT ); /* Please see man pages for details */ NN_DEFINE_RESULT_CONST_LM( ResultInternalCrlErr, detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_INTERNAL_CRL ); /* Please see man pages for details */ NN_DEFINE_RESULT_CONST_LM( ResultServerCertBufAlreadySetErr, detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ECERT_BUF_ALREADY_SET ); } // end of namespace ssl } // end of namespace nn #endif // __cplusplus #endif /* NN_SSL_SSL_RESULT_H_ */