1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     ssl_Result.h
4 
5   Copyright (C)2009 Nintendo Co., Ltd.  All rights reserved.
6 
7   These coded instructions, statements, and computer programs contain
8   proprietary information of Nintendo of America Inc. and/or Nintendo
9   Company Ltd., and are protected by Federal copyright law.  They may
10   not be disclosed to third parties or copied or duplicated in any form,
11   in whole or in part, without the prior written consent of Nintendo.
12 
13   $Rev: 19958 $
14  *---------------------------------------------------------------------------*/
15 
16 #ifndef NN_SSL_SSL_RESULT_H_
17 #define NN_SSL_SSL_RESULT_H_
18 
19 #include <nn/Result.h>
20 #include <nn/net/compatible/nssl.h>
21 
22 //NHTTPライブラリのResultコードを、HTTPのResultCodeに変換するためのマクロ
23 #define CHANGE_NSSL_RESULT_CODE_MASK 0x000003ff
24 #define CHANGE_NSSL_RESULT_CODE(nhttpCode) \
25     (nhttpCode) & (CHANGE_NSSL_RESULT_CODE_MASK)
26 
27 /*!
28   @addtogroup nn_ssl                       ssl
29   @{
30 */
31 
32 /*!
33  * @brief  APIのC言語用結果コード。APIの返値であるnnResultのdescription要素として格納される。
34 */
35 enum NnSslResultCode
36 {
37     /* SSL処理関連 */
38     NNSSL_ENONE                  = CHANGE_NSSL_RESULT_CODE(NSSL_ENONE),                 //!< エラー無し
39     NNSSL_EFAILED                = CHANGE_NSSL_RESULT_CODE(NSSL_EFAILED),               //!< SSLプロトコルの失敗によるエラー。(サーバー側でクライアント証明書の検証が失敗した場合等)
40     NNSSL_EWANT_READ             = CHANGE_NSSL_RESULT_CODE(NSSL_EWANT_READ),            //!< 非同期ソケット使用時の Read 関数の処理未完了。(再試行してください。)
41     NNSSL_EWANT_WRITE            = CHANGE_NSSL_RESULT_CODE(NSSL_EWANT_WRITE),           //!< 非同期ソケット使用時のWrite 関数の処理未完了。(再試行してください。)
42     NNSSL_ESYSCALL               = CHANGE_NSSL_RESULT_CODE(NSSL_ESYSCALL),              //!< 内部で使用しているシステム関数が予期せぬエラーを返した。
43     NNSSL_EZERO_RETURN           = CHANGE_NSSL_RESULT_CODE(NSSL_EZERO_RETURN),          //!< 内部でSocketのRead / Write を実施した際、予期せぬタイミングでゼロが返された。
44     NNSSL_EWANT_CONNECT          = CHANGE_NSSL_RESULT_CODE(NSSL_EWANT_CONNECT),         //!< 非同期ソケット使用時のSSLハンドシェイク(DoHandshake)未完了。(再試行してください。)
45     NNSSL_ESSLID                 = CHANGE_NSSL_RESULT_CODE(NSSL_ESSLID),                //!< 内部エラー(不正なSSLID)
46     NNSSL_EVERIFY_COMMON_NAME    = CHANGE_NSSL_RESULT_CODE(NSSL_EVERIFY_COMMON_NAME),   //!< サーバ認証エラー。サーバ証明書の CommonName と、AssignServer()で指定した通信先サーバのホスト名が一致しない。
47     NNSSL_EVERIFY_ROOT_CA        = CHANGE_NSSL_RESULT_CODE(NSSL_EVERIFY_ROOT_CA),       //!< サーバ認証エラー。サーバ証明書の Root CA 証明書が、Connectionに設定された証明書と一致しない。
48     NNSSL_EVERIFY_CHAIN          = CHANGE_NSSL_RESULT_CODE(NSSL_EVERIFY_CHAIN),         //!< サーバ認証エラー。サーバ証明書の証明書チェインが不正。
49     NNSSL_EVERIFY_DATE           = CHANGE_NSSL_RESULT_CODE(NSSL_EVERIFY_DATE),          //!< サーバ認証エラー。サーバ証明書が有効期限外である。
50     NNSSL_EGET_SERVER_CERT       = CHANGE_NSSL_RESULT_CODE(NSSL_EGET_SERVER_CERT),      //!< 証明書データのバッファへの格納失敗(引数有りのDoHandshake()で 証明書のサイズがバッファより大きい場合に発生)
51     NNSSL_EVERIFY_REVOKED_CERT   = CHANGE_NSSL_RESULT_CODE(NSSL_EVERIFY_REVOKED_CERT),  //!< サーバ認証エラー。サーバ証明書が失効リストに登録されているサーバ証明書であった。
52     NNSSL_ESTATE                 = CHANGE_NSSL_RESULT_CODE(NSSL_ESTATE),                //!< SSLライブラリの状態が不正(「初期化処理を行わずにライブラリの他関数を実行した」場合などに発生。)。
53     NNSSL_ERANDOM                = CHANGE_NSSL_RESULT_CODE(NSSL_ERANDOM),               //!< 乱数処理のエラー。
54     NNSSL_EVERIFY_CERT           = CHANGE_NSSL_RESULT_CODE(NSSL_EVERIFY_SERVER_CERT),   //!< サーバ証明書検証NG。
55     NNSSL_ECERT_BUF_ALREADY_SET  = CHANGE_NSSL_RESULT_CODE(NSSL_ECERT_BUF_ALREADY_SET), //!< サーバ証明書保存用バッファがすでに設定されている。
56 
57     /* その他のエラー */
58     NNSSL_ER_ALREADY_INITIALIZED        = nn::Result::DESCRIPTION_ALREADY_INITIALIZED,      //!< 初期化済み
59     NNSSL_ER_NOT_INITIALIZED            = nn::Result::DESCRIPTION_NOT_INITIALIZED,          //!< 未初期化
60     NNSSL_ER_OUT_OF_MEMORY              = nn::Result::DESCRIPTION_OUT_OF_MEMORY,            //!< メモリの動的取得失敗
61     NNSSL_ER_NOT_ASSIGN_SERVER          = CHANGE_NSSL_RESULT_CODE(NSSL_ERROR_CODE(50)),     //!< 通信先サーバが割り当てられていない
62     NNSSL_ER_ALREADY_ASSIGN_SERVER      = CHANGE_NSSL_RESULT_CODE(NSSL_ERROR_CODE(51)),     //!< 通信先サーバーがすでに割り当て済み
63     NNSSL_ER_IPC_SESSION                = CHANGE_NSSL_RESULT_CODE(NSSL_ERROR_CODE(52)),     //!< IPCセッションが不正
64     NNSSL_ER_CONN_PROCESS_MAX           = CHANGE_NSSL_RESULT_CODE(NSSL_ERROR_CODE(53)),     //!< 1プロセスの使用コネクション最大数越え
65     NNSSL_ER_FAIL_TO_CREATE_CERT_STORE  = CHANGE_NSSL_RESULT_CODE(NSSL_ERROR_CODE(54)),     //!< 証明書ストアの作成に失敗
66     NNSSL_ER_FAIL_TO_CREATE_CRL_STORE   = CHANGE_NSSL_RESULT_CODE(NSSL_ERROR_CODE(55)),     //!< CRLストアの作成に失敗
67     NNSSL_ER_FAIL_TO_CREATE_CLIENT_CERT = CHANGE_NSSL_RESULT_CODE(NSSL_ERROR_CODE(56)),     //!< クライアント証明書の作成に失敗
68     NNSSL_ER_INVALID_PARAM              = CHANGE_NSSL_RESULT_CODE(NSSL_ERROR_CODE(57)),     //!< 引数が不正
69     NNSSL_ER_CLIENT_PROCESS_MAX         = CHANGE_NSSL_RESULT_CODE(NSSL_ERROR_CODE(58)),     //!< 同時利用可能なクライアントプロセス数のクライアントがすでに利用中。
70     NNSSL_ER_IPC_SESSION_MAX            = CHANGE_NSSL_RESULT_CODE(NSSL_ERROR_CODE(59)),     //!< 同時に接続可能なIPCセッション数のセッションがすでに接続されている(つまりクライアント数、コネクション数共に最大値に達している。)
71     NNSSL_ER_INTERNAL_CERT              = CHANGE_NSSL_RESULT_CODE(NSSL_ERROR_CODE(60)),     //!< 内蔵証明書の利用に失敗
72     NNSSL_ER_INTERNAL_CRL               = CHANGE_NSSL_RESULT_CODE(NSSL_ERROR_CODE(61))      //!< 内蔵CRLの利用に失敗
73 };
74 
75 /*!
76   @}
77 */
78 
79 
80 #ifdef __cplusplus
81 
82 namespace nn {
83 namespace ssl {
84     /*!
85      * @brief  APIの結果コード。APIの返値であるResultのdescription要素として格納される。
86      * @note 現状はNSSLライブラリの結果コード値と合わせる(ただしResultのdescriptionは10bitであるため、下位10bitのみ用いる。)NSSLライブラリと依存関係になってしまうため、将来的には独立した値に変更する。
87     */
88     enum ResultCode
89     {
90         /* SSL処理関連 */
91         ENONE                   = NNSSL_ENONE,                  //!< エラー無し
92         EFAILED                 = NNSSL_EFAILED,                //!< SSLプロトコルの失敗によるエラー。(サーバー側でクライアント証明書の検証が失敗した場合等
93         EWANT_READ              = NNSSL_EWANT_READ,             //!< 非同期ソケット使用時の Read 関数の処理未完了。(再試行してください。)
94         EWANT_WRITE             = NNSSL_EWANT_WRITE,            //!< 非同期ソケット使用時のWrite 関数の処理未完了。(再試行してください。)
95         ESYSCALL                = NNSSL_ESYSCALL,               //!< 内部で使用しているシステム関数が予期せぬエラーを返した。
96         EZERO_RETURN            = NNSSL_EZERO_RETURN,           //!< 内部でSocketのRead / Write を実施した際、予期せぬタイミングでゼロが返された。
97         EWANT_CONNECT           = NNSSL_EWANT_CONNECT,          //!< 非同期ソケット使用時のSSLハンドシェイク(DoHandshake)未完了。(再試行してください。)
98         ESSLID                  = NNSSL_ESSLID,                 //!< 内部エラー(不正なSSLID)
99         EVERIFY_COMMON_NAME     = NNSSL_EVERIFY_COMMON_NAME,    //!< サーバ認証エラー。サーバ証明書の CommonName と、AssignServer()で指定した通信先サーバのホスト名が一致しない。
100         EVERIFY_ROOT_CA         = NNSSL_EVERIFY_ROOT_CA,        //!< サーバ認証エラー。サーバ証明書の Root CA 証明書が、Connectionに設定された証明書と一致しない。
101         EVERIFY_CHAIN           = NNSSL_EVERIFY_CHAIN,          //!< サーバ認証エラー。サーバ証明書の証明書チェインが不正。
102         EVERIFY_DATE            = NNSSL_EVERIFY_DATE,           //!< サーバ認証エラー。サーバ証明書が有効期限外である。
103         EGET_SERVER_CERT        = NNSSL_EGET_SERVER_CERT,       //!< 証明書データのバッファへの格納失敗(引数有りのDoHandshake()で 証明書のサイズがバッファより大きい場合に発生)
104         EVERIFY_REVOKED_CERT    = NNSSL_EVERIFY_REVOKED_CERT,   //!< サーバ認証エラー。サーバ証明書が失効リストに登録されているサーバ証明書であった。
105         ESTATE                  = NNSSL_ESTATE,                 //!< SSLライブラリの状態が不正(「初期化処理を行わずにライブラリの他関数を実行した」場合などに発生。)。
106         ERANDOM                 = NNSSL_ERANDOM,                //!< 乱数処理のエラー。
107         EVERIFY_CERT            = NNSSL_EVERIFY_CERT,           //!< サーバ証明書検証NG。
108         ECERT_BUF_ALREADY_SET   = NNSSL_ECERT_BUF_ALREADY_SET,  //!< サーバ証明書保存用バッファがすでに設定されている。
109 
110 
111         /* その他のエラー */
112         ER_ALREADY_INITIALIZED          = NNSSL_ER_ALREADY_INITIALIZED,           //!< 初期化済み
113         ER_NOT_INITIALIZED              = NNSSL_ER_NOT_INITIALIZED,               //!< 未初期化
114         ER_OUT_OF_MEMORY                = NNSSL_ER_OUT_OF_MEMORY,                 //!< メモリの動的取得失敗
115         ER_NOT_ASSIGN_SERVER            = NNSSL_ER_NOT_ASSIGN_SERVER,             //!< 通信先サーバが割り当てられていない
116         ER_ALREADY_ASSIGN_SERVER        = NNSSL_ER_ALREADY_ASSIGN_SERVER,         //!< 通信先サーバーがすでに割り当て済みである
117         ER_IPC_SESSION                  = NNSSL_ER_IPC_SESSION,                   //!< IPCセッションが不正である
118         ER_CONN_PROCESS_MAX             = NNSSL_ER_CONN_PROCESS_MAX,              //!< 1プロセスの使用コネクション最大数越え
119         ER_FAIL_TO_CREATE_CERT_STORE    = NNSSL_ER_FAIL_TO_CREATE_CERT_STORE,     //!< 証明書ストアの作成に失敗しました
120         ER_FAIL_TO_CREATE_CRL_STORE     = NNSSL_ER_FAIL_TO_CREATE_CRL_STORE,      //!< CRLストアの作成に失敗しました
121         ER_FAIL_TO_CREATE_CLIENT_CERT   = NNSSL_ER_FAIL_TO_CREATE_CLIENT_CERT,    //!< クライアント証明書の作成に失敗しました
122         ER_INVALID_PARAM                = NNSSL_ER_INVALID_PARAM,                 //!< 引数が不正です
123         ER_CLIENT_PROCESS_MAX           = NNSSL_ER_CLIENT_PROCESS_MAX,            //!< 同時利用可能なクライアントプロセス数のクライアントがすでに利用中である。
124         ER_IPC_SESSION_MAX              = NNSSL_ER_IPC_SESSION_MAX,               //!< 同時に接続可能なIPCセッション数のセッションがすでに接続されている(つまりクライアント数、コネクション数共に最大値に達している。)
125         ER_INTERNAL_CERT                = NNSSL_ER_INTERNAL_CERT,                 //!< 内蔵証明書の利用に失敗
126         ER_INTERNAL_CRL                 = NNSSL_ER_INTERNAL_CRL                   //!< 内蔵CRLの利用に失敗
127     };
128 
129     namespace detail {
130         /**
131          * @brief  NSSLのPermanentエラーを表すResultを返す。
132          * @param summary エラーを表すResult::Summary値。
133          * @param errCode エラーコード(nn::nssl::ResultCode列挙体のいずれかの値)
134          * @return 引数に対応するPermanentエラーを表すResult。
135         */
136         NN_DEFINE_RESULT_FUNC_LM(MakePermanentResult, Result::LEVEL_PERMANENT, Result::MODULE_NN_SSL);
137 
138 
139         /**
140          * @brief  リターンコードに対して、それを表すResultを返す。
141          * @param returnCode リターンコード(nn::http::ResultCode列挙体のいずれかの値)
142          * @return 引数の内容を表すResult。
143         */
ChangeNsslRetCodeToResult(ResultCode returnCode)144         inline Result ChangeNsslRetCodeToResult(ResultCode returnCode)
145         {
146             if(returnCode == ENONE)
147             {
148                 return ResultSuccess();
149             }
150             else if((returnCode == EWANT_READ) || (returnCode == EWANT_WRITE) || (returnCode == EWANT_CONNECT))
151             {
152                 return detail::MakePermanentResult(Result::SUMMARY_WOULD_BLOCK, returnCode);
153             }
154             else if(returnCode == ER_INVALID_PARAM)
155             {
156                 return detail::MakePermanentResult(Result::SUMMARY_INVALID_ARGUMENT, returnCode);
157             }
158             else
159             {
160                 return detail::MakePermanentResult(Result::SUMMARY_INVALID_STATE, returnCode);
161             }
162         }
163 
164         /**
165          * @brief  リターンコードに対して、それを表すResultを返す。
166          * @param returnCode NSSLライブラリのリターンコード(nssl.hに定義されたエラーコード)
167          * @return 引数の内容を表すResult。
168         */
ChangeNsslRetCodeToResult(s32 returnCode)169         inline Result ChangeNsslRetCodeToResult(s32 returnCode)
170         {
171             return ChangeNsslRetCodeToResult(static_cast<ResultCode>(CHANGE_NSSL_RESULT_CODE(returnCode)));
172         }
173     }
174 
175     /**
176      * @brief  「SSLプロトコルの失敗によるエラー。(サーバー側でクライアント証明書の検証が失敗した場合等)」エラーを表すResultを返す。
177      * @return 「SSLプロトコルの失敗によるエラー。(サーバー側でクライアント証明書の検証が失敗した場合等)」エラーを表すResult
178     */
179     NN_DEFINE_RESULT_CONST_LM(
180         ResultProtocolFailedErr,
181         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, EFAILED
182     );
183 
184     /**
185      * @brief  「非同期ソケット使用時の Read 関数の処理未完了。(再試行してください。)」を表すResultを返す。
186      * @return 「非同期ソケット使用時の Read 関数の処理未完了」を表すResult
187     */
188     NN_DEFINE_RESULT_CONST_LM(
189         ResultWantRead,
190         detail::MakePermanentResult, Result::SUMMARY_WOULD_BLOCK, EWANT_READ
191     );
192 
193     /**
194      * @brief  「非同期ソケット使用時のWrite 関数の処理未完了。(再試行してください。)」を表すResultを返す。
195      * @return 「非同期ソケット使用時のWrite 関数の処理未完了」を表すResult
196     */
197     NN_DEFINE_RESULT_CONST_LM(
198         ResultWantWrite,
199         detail::MakePermanentResult, Result::SUMMARY_WOULD_BLOCK, EWANT_WRITE
200     );
201 
202     /**
203      * @brief  「内部で使用しているシステム関数が予期せぬエラーを返した。」エラーを表すResultを返す。
204      * @return 「内部で使用しているシステム関数が予期せぬエラーを返した。」エラーを表すResult
205     */
206     NN_DEFINE_RESULT_CONST_LM(
207         ResultSystemCallErr,
208         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ESYSCALL
209     );
210 
211     /**
212      * @brief  「内部でSocketのRead / Write を実施した際、予期せぬタイミングでゼロが返された。」エラーを表すResultを返す。
213      * @return 「内部でSocketのRead / Write を実施した際、予期せぬタイミングでゼロが返された。」エラーを表すResult
214     */
215     NN_DEFINE_RESULT_CONST_LM(
216         ResultSocketZeroReturnErr,
217         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, EZERO_RETURN
218     );
219 
220     /**
221      * @brief  「非同期ソケット使用時のSSLハンドシェイク(DoHandshake)未完了。(再試行してください。)」を表すResultを返す。
222      * @return 「非同期ソケット使用時のSSLハンドシェイク(DoHandshake)未完了」を表すResult
223     */
224     NN_DEFINE_RESULT_CONST_LM(
225         ResultWantConnect,
226         detail::MakePermanentResult, Result::SUMMARY_WOULD_BLOCK, EWANT_CONNECT
227     );
228 
229     /**
230      * @brief  「内部エラー(不正なSSLID)」エラーを表すResultを返す。
231      * @return 「内部エラー(不正なSSLID)」エラーを表すResult
232     */
233     NN_DEFINE_RESULT_CONST_LM(
234         ResultInternalSslIdErr,
235         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ESSLID
236     );
237 
238     /**
239      * @brief  「サーバ認証エラー。サーバ証明書の CommonName と、AssignServer()で指定した通信先サーバのホスト名が一致しない。」エラーを表すResultを返す。
240      * @return 「サーバ認証エラー。サーバ証明書の CommonName と、AssignServer()で指定した通信先サーバのホスト名が一致しない。」エラーを表すResult
241     */
242     NN_DEFINE_RESULT_CONST_LM(
243         ResultVerifyCertCommonNameErr,
244         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, EVERIFY_COMMON_NAME
245     );
246 
247     /**
248      * @brief  「サーバ認証エラー。サーバ証明書の Root CA 証明書が、Connectionに設定された証明書と一致しない。」を表すResultを返す。
249      * @return 「サーバ認証エラー。サーバ証明書の Root CA 証明書が、Connectionに設定された証明書と一致しない。」を表すResult
250     */
251     NN_DEFINE_RESULT_CONST_LM(
252         ResultVerifyCertRootCaErr,
253         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, EVERIFY_ROOT_CA
254     );
255 
256     /**
257      * @brief  「サーバ認証エラー。サーバ証明書の証明書チェインが不正。」エラーを表すResultを返す。
258      * @return 「サーバ認証エラー。サーバ証明書の証明書チェインが不正。」エラーを表すResult
259     */
260     NN_DEFINE_RESULT_CONST_LM(
261         ResultVerifyCertChainErr,
262         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, EVERIFY_CHAIN
263     );
264 
265     /**
266      * @brief  「サーバ認証エラー。サーバ証明書が有効期限外である。」エラーを表すResultを返す。
267      * @return 「サーバ認証エラー。サーバ証明書が有効期限外である。」エラーを表すResult
268     */
269     NN_DEFINE_RESULT_CONST_LM(
270         ResultVerifyCertDateErr,
271         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, EVERIFY_DATE
272     );
273 
274     /**
275      * @brief  「証明書データのバッファへの格納失敗(引数有りのDoHandshake()で 証明書のサイズがバッファより大きい場合に発生)」を表すResultを返す。
276      * @return 「証明書データのバッファへの格納失敗(引数有りのDoHandshake()で 証明書のサイズがバッファより大きい場合に発生)」を表すResult
277     */
278     NN_DEFINE_RESULT_CONST_LM(
279         ResultFailToGetServerCert,
280         detail::MakePermanentResult, Result::SUMMARY_SUCCESS, EGET_SERVER_CERT
281     );
282 
283     /**
284      * @brief  「サーバ認証エラー。サーバ証明書が失効リストに登録されているサーバ証明書であった。」エラーを表すResultを返す。
285      * @return 「サーバ認証エラー。サーバ証明書が失効リストに登録されているサーバ証明書であった。」エラーを表すResult
286     */
287     NN_DEFINE_RESULT_CONST_LM(
288         ResultVerifyCertRevokedErr,
289         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, EVERIFY_REVOKED_CERT
290     );
291 
292     /**
293      * @brief  「SSLライブラリの状態が不正(「初期化処理を行わずにライブラリの他関数を実行した」場合などに発生。)。」エラーを表すResultを返す。
294      * @return 「SSLライブラリの状態が不正(「初期化処理を行わずにライブラリの他関数を実行した」場合などに発生。)。」エラーを表すResult
295     */
296     NN_DEFINE_RESULT_CONST_LM(
297         ResultLibraryStateErr,
298         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ESTATE
299     );
300 
301     /**
302      * @brief  「乱数処理のエラー。」エラーを表すResultを返す。
303      * @return 「乱数処理のエラー。」エラーを表すResult
304     */
305     NN_DEFINE_RESULT_CONST_LM(
306         ResultRandomErr,
307         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ERANDOM
308     );
309 
310     /**
311      * @brief  「証明書検証NG」エラーを表すResultを返す。
312      * @return 「証明書検証NG」エラーを表すResult
313     */
314     NN_DEFINE_RESULT_CONST_LM(
315         ResultVerifyCertErr,
316         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, EVERIFY_CERT
317     );
318 
319     /**
320      * @brief  「ライブラリがすでに初期化済」エラーを表すResultを返す。
321      * @return 「ライブラリがすでに初期化済」エラーを表すResult
322     */
323     NN_DEFINE_RESULT_CONST_LM(
324         ResultAlreadyInitializedErr,
325         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_ALREADY_INITIALIZED
326     );
327 
328     /**
329      * @brief  「ライブラリが未初期化」エラーを表すResultを返す。
330      * @return 「ライブラリが未初期化」エラーを表すResult
331     */
332     NN_DEFINE_RESULT_CONST_LM(
333         ResultNotInitializedErr,
334         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_NOT_INITIALIZED
335     );
336 
337     /**
338      * @brief  「メモリ確保の失敗」エラーを表すResultを返す。
339      * @return 「メモリ確保の失敗」エラーを表すResult
340     */
341     NN_DEFINE_RESULT_CONST_LM(
342         ResultOutOfMemoryErr,
343         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_OUT_OF_MEMORY
344     );
345 
346     /**
347      * @brief  「通信先サーバーが未割り当て」を表すResultを返す。
348      * @return 「通信先サーバーが未割り当て」を表すResult
349     */
350     NN_DEFINE_RESULT_CONST_LM(
351         ResultNotAssignServerErr,
352         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_NOT_ASSIGN_SERVER
353     );
354 
355     /**
356      * @brief  「すでに通信先サーバーが割り当て済み」を表すResultを返す。
357      * @return 「すでに通信先サーバーが割り当て済み」を表すResult
358     */
359     NN_DEFINE_RESULT_CONST_LM(
360         ResultAlreadyAssignServerErr,
361         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_ALREADY_ASSIGN_SERVER
362     );
363 
364     /**
365      * @brief  「不正なIPCセッションである」エラーを表すResultを返す。
366      * @return 「不正なIPCセッションである」エラーを表すResult
367     */
368     NN_DEFINE_RESULT_CONST_LM(
369         ResultIpcSessionErr,
370         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_IPC_SESSION
371     );
372 
373     /**
374      * @brief  「1プロセスの使用できるコネクションの最大数を越えています。」を表すResultを返す。
375      * @return 「1プロセスの使用できるコネクションの最大数を越えています。」を表すResult
376     */
377     NN_DEFINE_RESULT_CONST_LM(
378         ResultProcessConnectionMaxErr,
379         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_CONN_PROCESS_MAX
380     );
381 
382     /**
383      * @brief  「証明書ストアの作成に失敗しました」を表すResultを返す。
384      * @return 「証明書ストアの作成に失敗しました」を表すResult
385     */
386     NN_DEFINE_RESULT_CONST_LM(
387         ResultFailToCreateCertStoreErr,
388         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_FAIL_TO_CREATE_CERT_STORE
389     );
390 
391     /**
392      * @brief  「CRLストアの作成に失敗しました」を表すResultを返す。
393      * @return 「CRLストアの作成に失敗しました」を表すResult
394     */
395     NN_DEFINE_RESULT_CONST_LM(
396         ResultFailToCreateCrlStoreErr,
397         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_FAIL_TO_CREATE_CRL_STORE
398     );
399 
400     /**
401      * @brief  「クライアント証明書の作成に失敗しました」を表すResultを返す。
402      * @return 「クライアント証明書の作成に失敗しました」を表すResult
403     */
404     NN_DEFINE_RESULT_CONST_LM(
405         ResultFailToCreateClientCertErr,
406         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_FAIL_TO_CREATE_CLIENT_CERT
407     );
408 
409     /**
410      * @brief  「不正な引数です。」を表すResultを返す。
411      * @return 「不正な引数です。」を表すResult
412     */
413     NN_DEFINE_RESULT_CONST_LM(
414         ResultInvalidParamErr,
415         detail::MakePermanentResult, Result::SUMMARY_INVALID_ARGUMENT, ER_INVALID_PARAM
416     );
417 
418     /**
419      * @brief  「処理が未実装です。」を表すResultを返す。このエラーは内部実装エラーである。
420      * @return 「処理が未実装です。」を表すResult
421     */
422     NN_DEFINE_RESULT_CONST_LM(
423         ResultNotImplementedErr,
424         detail::MakePermanentResult, Result::SUMMARY_INTERNAL, nn::Result::DESCRIPTION_NOT_IMPLEMENTED
425     );
426 
427     /**
428      * @brief  「同時利用可能なクライアントプロセス数のクライアントがすでに利用中である。」を表すResultを返す。
429      * @return 「同時利用可能なクライアントプロセス数のクライアントがすでに利用中である。」を表すResult
430     */
431     NN_DEFINE_RESULT_CONST_LM(
432         ResultClientProcessMaxErr,
433         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_CLIENT_PROCESS_MAX
434     );
435 
436     /**
437      * @brief  「同時に接続可能なIPCセッション数のセッションがすでに接続されている」を表すResultを返す。
438      * @return 「同時に接続可能なIPCセッション数のセッションがすでに接続されている」を表すResult
439     */
440     NN_DEFINE_RESULT_CONST_LM(
441         ResultIpcSessionMaxErr,
442         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_IPC_SESSION_MAX
443     );
444 
445     /**
446      * @brief  「内蔵証明書の利用に失敗」を表すResultを返す。
447      * @return 「内蔵証明書の利用に失敗」を表すResult
448     */
449     NN_DEFINE_RESULT_CONST_LM(
450         ResultInternalCertErr,
451         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_INTERNAL_CERT
452     );
453 
454     /**
455      * @brief  「内蔵CRLの利用に失敗」を表すResultを返す。
456      * @return 「内蔵CRLの利用に失敗」を表すResult
457     */
458     NN_DEFINE_RESULT_CONST_LM(
459         ResultInternalCrlErr,
460         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_INTERNAL_CRL
461     );
462 
463     /**
464      * @brief  「サーバ証明書用バッファが既に設定されている。」を表すResultを返す。
465      * @return 「サーバ証明書用バッファが既に設定されている。」を表すResult
466     */
467     NN_DEFINE_RESULT_CONST_LM(
468         ResultServerCertBufAlreadySetErr,
469         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ECERT_BUF_ALREADY_SET
470     );
471 } // end of namespace ssl
472 } // end of namespace nn
473 
474 #endif // __cplusplus
475 
476 
477 #endif /* NN_SSL_SSL_RESULT_H_ */
478