/*---------------------------------------------------------------------------* 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: 31304 $ *---------------------------------------------------------------------------*/ #ifndef NN_SSL_SSL_RESULT_H_ #define NN_SSL_SSL_RESULT_H_ #include #include //NHTTPライブラリのResultコードを、HTTPのResultCodeに変換するためのマクロ #define CHANGE_NSSL_RESULT_CODE_MASK 0x000003ff #define CHANGE_NSSL_RESULT_CODE(nhttpCode) \ (nhttpCode) & (CHANGE_NSSL_RESULT_CODE_MASK) /*! @addtogroup nn_ssl ssl @{ */ /*! * @brief APIのC言語用結果コード。APIの返値であるnnResultのdescription要素として格納される。 */ enum NnSslResultCode { /* SSL処理関連 */ NNSSL_ENONE = CHANGE_NSSL_RESULT_CODE(NSSL_ENONE), //!< エラー無し NNSSL_EFAILED = CHANGE_NSSL_RESULT_CODE(NSSL_EFAILED), //!< SSLプロトコルの失敗によるエラー。(サーバー側でクライアント証明書の検証が失敗した場合等) NNSSL_EWANT_READ = CHANGE_NSSL_RESULT_CODE(NSSL_EWANT_READ), //!< 非同期ソケット使用時の Read 関数の処理未完了。(再試行してください。) NNSSL_EWANT_WRITE = CHANGE_NSSL_RESULT_CODE(NSSL_EWANT_WRITE), //!< 非同期ソケット使用時のWrite 関数の処理未完了。(再試行してください。) NNSSL_ESYSCALL = CHANGE_NSSL_RESULT_CODE(NSSL_ESYSCALL), //!< 内部で使用しているシステム関数が予期せぬエラーを返した。 NNSSL_EZERO_RETURN = CHANGE_NSSL_RESULT_CODE(NSSL_EZERO_RETURN), //!< 内部でSocketのRead / Write を実施した際、予期せぬタイミングでゼロが返された。 NNSSL_EWANT_CONNECT = CHANGE_NSSL_RESULT_CODE(NSSL_EWANT_CONNECT), //!< 非同期ソケット使用時のSSLハンドシェイク(DoHandshake)未完了。(再試行してください。) NNSSL_ESSLID = CHANGE_NSSL_RESULT_CODE(NSSL_ESSLID), //!< 内部エラー(不正なSSLID) NNSSL_EVERIFY_COMMON_NAME = CHANGE_NSSL_RESULT_CODE(NSSL_EVERIFY_COMMON_NAME), //!< サーバ認証エラー。サーバ証明書の CommonName と、AssignServer()で指定した通信先サーバのホスト名が一致しない。 NNSSL_EVERIFY_ROOT_CA = CHANGE_NSSL_RESULT_CODE(NSSL_EVERIFY_ROOT_CA), //!< サーバ認証エラー。サーバ証明書の Root CA 証明書が、Connectionに設定された証明書と一致しない。 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), //!< 証明書データのバッファへの格納失敗(引数有りのDoHandshake()で 証明書のサイズがバッファより大きい場合に発生) NNSSL_EVERIFY_REVOKED_CERT = CHANGE_NSSL_RESULT_CODE(NSSL_EVERIFY_REVOKED_CERT), //!< サーバ認証エラー。サーバ証明書が失効リストに登録されているサーバ証明書であった。 NNSSL_ESTATE = CHANGE_NSSL_RESULT_CODE(NSSL_ESTATE), //!< SSLライブラリの状態が不正(「初期化処理を行わずにライブラリの他関数を実行した」場合などに発生。)。 NNSSL_ERANDOM = CHANGE_NSSL_RESULT_CODE(NSSL_ERANDOM), //!< 乱数処理のエラー。 NNSSL_EVERIFY_CERT = CHANGE_NSSL_RESULT_CODE(NSSL_EVERIFY_SERVER_CERT), //!< サーバ証明書検証NG。 NNSSL_ECERT_BUF_ALREADY_SET = CHANGE_NSSL_RESULT_CODE(NSSL_ECERT_BUF_ALREADY_SET), //!< サーバ証明書保存用バッファがすでに設定されている。 /* その他のエラー */ 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)), //!< IPCセッションが不正 NNSSL_ER_CONN_PROCESS_MAX = CHANGE_NSSL_RESULT_CODE(NSSL_ERROR_CODE(53)), //!< 1プロセスの使用コネクション最大数越え 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)), //!< CRLストアの作成に失敗 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)), //!< 同時に接続可能なIPCセッション数のセッションがすでに接続されている(つまりクライアント数、コネクション数共に最大値に達している。) NNSSL_ER_INTERNAL_CERT = CHANGE_NSSL_RESULT_CODE(NSSL_ERROR_CODE(60)), //!< 内蔵証明書の利用に失敗 NNSSL_ER_INTERNAL_CRL = CHANGE_NSSL_RESULT_CODE(NSSL_ERROR_CODE(61)) //!< 内蔵CRLの利用に失敗 }; /*! @} */ #ifdef __cplusplus namespace nn { namespace ssl { /*! * @brief APIの結果コード。APIの返値であるResultのdescription要素として格納される。 * @note 現状はNSSLライブラリの結果コード値と合わせる(ただしResultのdescriptionは10bitであるため、下位10bitのみ用いる。)NSSLライブラリと依存関係になってしまうため、将来的には独立した値に変更する。 */ enum ResultCode { /* SSL処理関連 */ ENONE = NNSSL_ENONE, //!< エラー無し EFAILED = NNSSL_EFAILED, //!< SSLプロトコルの失敗によるエラー。(サーバー側でクライアント証明書の検証が失敗した場合等 EWANT_READ = NNSSL_EWANT_READ, //!< 非同期ソケット使用時の Read 関数の処理未完了。(再試行してください。) EWANT_WRITE = NNSSL_EWANT_WRITE, //!< 非同期ソケット使用時のWrite 関数の処理未完了。(再試行してください。) ESYSCALL = NNSSL_ESYSCALL, //!< 内部で使用しているシステム関数が予期せぬエラーを返した。 EZERO_RETURN = NNSSL_EZERO_RETURN, //!< 内部でSocketのRead / Write を実施した際、予期せぬタイミングでゼロが返された。 EWANT_CONNECT = NNSSL_EWANT_CONNECT, //!< 非同期ソケット使用時のSSLハンドシェイク(DoHandshake)未完了。(再試行してください。) ESSLID = NNSSL_ESSLID, //!< 内部エラー(不正なSSLID) EVERIFY_COMMON_NAME = NNSSL_EVERIFY_COMMON_NAME, //!< サーバ認証エラー。サーバ証明書の CommonName と、AssignServer()で指定した通信先サーバのホスト名が一致しない。 EVERIFY_ROOT_CA = NNSSL_EVERIFY_ROOT_CA, //!< サーバ認証エラー。サーバ証明書の Root CA 証明書が、Connectionに設定された証明書と一致しない。 EVERIFY_CHAIN = NNSSL_EVERIFY_CHAIN, //!< サーバ認証エラー。サーバ証明書の証明書チェインが不正。 EVERIFY_DATE = NNSSL_EVERIFY_DATE, //!< サーバ認証エラー。サーバ証明書が有効期限外である。 EGET_SERVER_CERT = NNSSL_EGET_SERVER_CERT, //!< 証明書データのバッファへの格納失敗(引数有りのDoHandshake()で 証明書のサイズがバッファより大きい場合に発生) EVERIFY_REVOKED_CERT = NNSSL_EVERIFY_REVOKED_CERT, //!< サーバ認証エラー。サーバ証明書が失効リストに登録されているサーバ証明書であった。 ESTATE = NNSSL_ESTATE, //!< SSLライブラリの状態が不正(「初期化処理を行わずにライブラリの他関数を実行した」場合などに発生。)。 ERANDOM = NNSSL_ERANDOM, //!< 乱数処理のエラー。 EVERIFY_CERT = NNSSL_EVERIFY_CERT, //!< サーバ証明書検証NG。 ECERT_BUF_ALREADY_SET = NNSSL_ECERT_BUF_ALREADY_SET, //!< サーバ証明書保存用バッファがすでに設定されている。 /* その他のエラー */ 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, //!< IPCセッションが不正である ER_CONN_PROCESS_MAX = NNSSL_ER_CONN_PROCESS_MAX, //!< 1プロセスの使用コネクション最大数越え 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, //!< CRLストアの作成に失敗しました 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, //!< 同時に接続可能なIPCセッション数のセッションがすでに接続されている(つまりクライアント数、コネクション数共に最大値に達している。) ER_INTERNAL_CERT = NNSSL_ER_INTERNAL_CERT, //!< 内蔵証明書の利用に失敗 ER_INTERNAL_CRL = NNSSL_ER_INTERNAL_CRL //!< 内蔵CRLの利用に失敗 }; namespace detail { /** * @brief NSSLのPermanentエラーを表すResultを返す。 * @param summary エラーを表すResult::Summary値。 * @param errCode エラーコード(nn::nssl::ResultCode列挙体のいずれかの値) * @return 引数に対応するPermanentエラーを表すResult。 */ NN_DEFINE_RESULT_FUNC_LM(MakePermanentResult, Result::LEVEL_PERMANENT, Result::MODULE_NN_SSL); /** * @brief リターンコードに対して、それを表すResultを返す。 * @param returnCode リターンコード(nn::http::ResultCode列挙体のいずれかの値) * @return 引数の内容を表すResult。 */ 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); } } /** * @brief リターンコードに対して、それを表すResultを返す。 * @param returnCode NSSLライブラリのリターンコード(nssl.hに定義されたエラーコード) * @return 引数の内容を表すResult。 */ inline Result ChangeNsslRetCodeToResult(s32 returnCode) { return ChangeNsslRetCodeToResult(static_cast(CHANGE_NSSL_RESULT_CODE(returnCode))); } } /*! :category Result @class nn::ssl::ResultProtocolFailedErr @brief SSLプロトコルの失敗によるエラー(サーバー側でクライアント証明書の検証が失敗した場合等)を表します。 */ NN_DEFINE_RESULT_CONST_LM( ResultProtocolFailedErr, detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, EFAILED ); /*! :category Result @class nn::ssl::ResultWantRead @brief 非同期ソケット使用時の Read 関数の処理未完了(再試行してください)を表します。 */ NN_DEFINE_RESULT_CONST_LM( ResultWantRead, detail::MakePermanentResult, Result::SUMMARY_WOULD_BLOCK, EWANT_READ ); /*! :category Result @class nn::ssl::ResultWantWrite @brief 非同期ソケット使用時のWrite 関数の処理未完了を表します。 */ NN_DEFINE_RESULT_CONST_LM( ResultWantWrite, detail::MakePermanentResult, Result::SUMMARY_WOULD_BLOCK, EWANT_WRITE ); /*! :category Result @class nn::ssl::ResultSystemCallErr @brief 内部で使用しているシステム関数が予期せぬエラーを表します。 */ NN_DEFINE_RESULT_CONST_LM( ResultSystemCallErr, detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ESYSCALL ); /*! :category Result @class nn::ssl::ResultSocketZeroReturn @brief 内部でSocketのRead / Write を実施した際、ゼロが返されたことを表します。サーバ側の通信終了後のRead/Writeなどで返ります。 */ NN_DEFINE_RESULT_CONST_LM( ResultSocketZeroReturn, detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, EZERO_RETURN ); /*! :category Result @class nn::ssl::ResultWantConnect @brief 非同期ソケット使用時のSSLハンドシェイク(DoHandshake)未完了(再試行してください)を表します。 */ NN_DEFINE_RESULT_CONST_LM( ResultWantConnect, detail::MakePermanentResult, Result::SUMMARY_WOULD_BLOCK, EWANT_CONNECT ); /*! :category Result @class nn::ssl::ResultInternalSslIdErr @brief 内部エラー(不正なSSLID)を表します。 */ NN_DEFINE_RESULT_CONST_LM( ResultInternalSslIdErr, detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ESSLID ); /*! :category Result @class nn::ssl::ResultFailToGetServerCert @brief 証明書データのバッファへの格納失敗(引数有りのDoHandshake()で 証明書のサイズがバッファより大きい場合に発生)を表します。 */ NN_DEFINE_RESULT_CONST_LM( ResultFailToGetServerCert, detail::MakePermanentResult, Result::SUMMARY_SUCCESS, EGET_SERVER_CERT ); /*! :category Result @class nn::ssl::ResultVerifyCertRevokedErr @brief サーバ認証エラー(サーバ証明書が失効リストに登録されているサーバ証明書であった)を表します。 */ NN_DEFINE_RESULT_CONST_LM( ResultVerifyCertRevokedErr, detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, EVERIFY_REVOKED_CERT ); /*! :category Result @class nn::ssl::ResultLibraryStateErr @brief SSLライブラリの状態が不正(「初期化処理を行わずにライブラリの他関数を実行した」場合などに発生)を表します。 */ NN_DEFINE_RESULT_CONST_LM( ResultLibraryStateErr, detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ESTATE ); /*! :category Result @class nn::ssl::ResultRandomErr @brief 乱数処理のエラーを表します。 */ NN_DEFINE_RESULT_CONST_LM( ResultRandomErr, detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ERANDOM ); /*! :category Result @class nn::ssl::ResultVerifyCertErr @brief 証明書検証NGを表します。 */ NN_DEFINE_RESULT_CONST_LM( ResultVerifyCertErr, detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, EVERIFY_CERT ); /*! :category Result @class nn::ssl::ResultAlreadyInitializedErr @brief ライブラリがすでに初期化済を表します。 */ NN_DEFINE_RESULT_CONST_LM( ResultAlreadyInitializedErr, detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_ALREADY_INITIALIZED ); /*! :category Result @class nn::ssl::ResultNotInitializedErr @brief ライブラリが未初期化を表します。 */ NN_DEFINE_RESULT_CONST_LM( ResultNotInitializedErr, detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_NOT_INITIALIZED ); /*! :category Result @class nn::ssl::ResultOutOfMemoryErr @brief メモリ確保の失敗を表します。 */ NN_DEFINE_RESULT_CONST_LM( ResultOutOfMemoryErr, detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_OUT_OF_MEMORY ); /*! :category Result @class nn::ssl::ResultNotAssignServerErr @brief 通信先サーバーが未割り当てを表します。 */ NN_DEFINE_RESULT_CONST_LM( ResultNotAssignServerErr, detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_NOT_ASSIGN_SERVER ); /*! :category Result @class nn::ssl::ResultAlreadyAssignServerErr @brief すでに通信先サーバーが割り当て済みを表します。 */ NN_DEFINE_RESULT_CONST_LM( ResultAlreadyAssignServerErr, detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_ALREADY_ASSIGN_SERVER ); /*! :category Result @class nn::ssl::ResultIpcSessionErr @brief 不正なIPCセッションであるを表します。 */ NN_DEFINE_RESULT_CONST_LM( ResultIpcSessionErr, detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_IPC_SESSION ); /*! :category Result @class nn::ssl::ResultProcessConnectionMaxErr @brief 1プロセスの使用できるコネクションの最大数を越えているを表します。 */ NN_DEFINE_RESULT_CONST_LM( ResultProcessConnectionMaxErr, detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_CONN_PROCESS_MAX ); /*! :category Result @class nn::ssl::ResultFailToCreateCertStoreErr @brief 証明書ストアの作成に失敗しましたを表します。 */ NN_DEFINE_RESULT_CONST_LM( ResultFailToCreateCertStoreErr, detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_FAIL_TO_CREATE_CERT_STORE ); /*! :category Result @class nn::ssl::ResultFailToCreateCrlStoreErr @brief CRLストアの作成失敗を表します。 */ NN_DEFINE_RESULT_CONST_LM( ResultFailToCreateCrlStoreErr, detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_FAIL_TO_CREATE_CRL_STORE ); /*! :category Result @class nn::ssl::ResultFailToCreateClientCertErr @brief クライアント証明書の作成失敗を表します。 */ NN_DEFINE_RESULT_CONST_LM( ResultFailToCreateClientCertErr, detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_FAIL_TO_CREATE_CLIENT_CERT ); /*! :category Result @class nn::ssl::ResultInvalidParamErr @brief 不正な引数を表します。 */ NN_DEFINE_RESULT_CONST_LM( ResultInvalidParamErr, detail::MakePermanentResult, Result::SUMMARY_INVALID_ARGUMENT, ER_INVALID_PARAM ); /*! :category Result @class nn::ssl::ResultNotImplementedErr @brief 処理が未実装を表します。 */ NN_DEFINE_RESULT_CONST_LM( ResultNotImplementedErr, detail::MakePermanentResult, Result::SUMMARY_INTERNAL, nn::Result::DESCRIPTION_NOT_IMPLEMENTED ); /*! :category Result @class nn::ssl::ResultClientProcessMaxErr @brief 同時利用可能なクライアントプロセス数のクライアントがすでに利用中を表します。 */ NN_DEFINE_RESULT_CONST_LM( ResultClientProcessMaxErr, detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_CLIENT_PROCESS_MAX ); /*! :category Result @class nn::ssl::ResultIpcSessionMaxErr @brief 同時に接続可能なIPCセッション数のセッションがすでに接続を表します。 */ NN_DEFINE_RESULT_CONST_LM( ResultIpcSessionMaxErr, detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_IPC_SESSION_MAX ); /*! :category Result @class nn::ssl::ResultInternalCertErr @brief 内蔵証明書の利用に失敗を表します。 */ NN_DEFINE_RESULT_CONST_LM( ResultInternalCertErr, detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_INTERNAL_CERT ); /*! :category Result @class nn::ssl::ResultInternalCrlErr @brief 内蔵CRLの利用に失敗を表します。 */ NN_DEFINE_RESULT_CONST_LM( ResultInternalCrlErr, detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_INTERNAL_CRL ); /*! :category Result @class nn::ssl::ResultServerCertBufAlreadySetErr @brief サーバ証明書用バッファが既に設定されているを表します。 */ 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_ */