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: 31304 $
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     /*!
177         :category   Result
178         @class nn::ssl::ResultProtocolFailedErr
179         @brief  SSLプロトコルの失敗によるエラー(サーバー側でクライアント証明書の検証が失敗した場合等)を表します。
180     */
181     NN_DEFINE_RESULT_CONST_LM(
182         ResultProtocolFailedErr,
183         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, EFAILED
184     );
185 
186     /*!
187         :category   Result
188         @class nn::ssl::ResultWantRead
189         @brief  非同期ソケット使用時の Read 関数の処理未完了(再試行してください)を表します。
190     */
191     NN_DEFINE_RESULT_CONST_LM(
192         ResultWantRead,
193         detail::MakePermanentResult, Result::SUMMARY_WOULD_BLOCK, EWANT_READ
194     );
195 
196     /*!
197         :category   Result
198         @class nn::ssl::ResultWantWrite
199         @brief  非同期ソケット使用時のWrite 関数の処理未完了を表します。
200     */
201     NN_DEFINE_RESULT_CONST_LM(
202         ResultWantWrite,
203         detail::MakePermanentResult, Result::SUMMARY_WOULD_BLOCK, EWANT_WRITE
204     );
205 
206     /*!
207         :category   Result
208         @class nn::ssl::ResultSystemCallErr
209         @brief  内部で使用しているシステム関数が予期せぬエラーを表します。
210     */
211     NN_DEFINE_RESULT_CONST_LM(
212         ResultSystemCallErr,
213         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ESYSCALL
214     );
215 
216 
217     /*!
218         :category   Result
219         @class nn::ssl::ResultSocketZeroReturn
220         @brief  内部でSocketのRead / Write を実施した際、ゼロが返されたことを表します。サーバ側の通信終了後のRead/Writeなどで返ります。
221     */
222     NN_DEFINE_RESULT_CONST_LM(
223         ResultSocketZeroReturn,
224         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, EZERO_RETURN
225     );
226 
227     /*!
228         :category   Result
229         @class nn::ssl::ResultWantConnect
230         @brief  非同期ソケット使用時のSSLハンドシェイク(DoHandshake)未完了(再試行してください)を表します。
231     */
232     NN_DEFINE_RESULT_CONST_LM(
233         ResultWantConnect,
234         detail::MakePermanentResult, Result::SUMMARY_WOULD_BLOCK, EWANT_CONNECT
235     );
236 
237     /*!
238         :category   Result
239         @class nn::ssl::ResultInternalSslIdErr
240         @brief  内部エラー(不正なSSLID)を表します。
241     */
242     NN_DEFINE_RESULT_CONST_LM(
243         ResultInternalSslIdErr,
244         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ESSLID
245     );
246 
247     /*!
248         :category   Result
249         @class nn::ssl::ResultFailToGetServerCert
250         @brief  証明書データのバッファへの格納失敗(引数有りのDoHandshake()で 証明書のサイズがバッファより大きい場合に発生)を表します。
251     */
252     NN_DEFINE_RESULT_CONST_LM(
253         ResultFailToGetServerCert,
254         detail::MakePermanentResult, Result::SUMMARY_SUCCESS, EGET_SERVER_CERT
255     );
256 
257     /*!
258         :category   Result
259         @class nn::ssl::ResultVerifyCertRevokedErr
260         @brief  サーバ認証エラー(サーバ証明書が失効リストに登録されているサーバ証明書であった)を表します。
261     */
262     NN_DEFINE_RESULT_CONST_LM(
263         ResultVerifyCertRevokedErr,
264         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, EVERIFY_REVOKED_CERT
265     );
266 
267     /*!
268         :category   Result
269         @class nn::ssl::ResultLibraryStateErr
270         @brief  SSLライブラリの状態が不正(「初期化処理を行わずにライブラリの他関数を実行した」場合などに発生)を表します。
271     */
272     NN_DEFINE_RESULT_CONST_LM(
273         ResultLibraryStateErr,
274         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ESTATE
275     );
276 
277     /*!
278         :category   Result
279         @class nn::ssl::ResultRandomErr
280         @brief  乱数処理のエラーを表します。
281     */
282     NN_DEFINE_RESULT_CONST_LM(
283         ResultRandomErr,
284         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ERANDOM
285     );
286 
287     /*!
288         :category   Result
289         @class nn::ssl::ResultVerifyCertErr
290         @brief  証明書検証NGを表します。
291     */
292     NN_DEFINE_RESULT_CONST_LM(
293         ResultVerifyCertErr,
294         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, EVERIFY_CERT
295     );
296 
297     /*!
298         :category   Result
299         @class nn::ssl::ResultAlreadyInitializedErr
300         @brief  ライブラリがすでに初期化済を表します。
301     */
302     NN_DEFINE_RESULT_CONST_LM(
303         ResultAlreadyInitializedErr,
304         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_ALREADY_INITIALIZED
305     );
306 
307     /*!
308         :category   Result
309         @class nn::ssl::ResultNotInitializedErr
310         @brief  ライブラリが未初期化を表します。
311     */
312     NN_DEFINE_RESULT_CONST_LM(
313         ResultNotInitializedErr,
314         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_NOT_INITIALIZED
315     );
316 
317     /*!
318         :category   Result
319         @class nn::ssl::ResultOutOfMemoryErr
320         @brief  メモリ確保の失敗を表します。
321     */
322     NN_DEFINE_RESULT_CONST_LM(
323         ResultOutOfMemoryErr,
324         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_OUT_OF_MEMORY
325     );
326 
327     /*!
328         :category   Result
329         @class nn::ssl::ResultNotAssignServerErr
330         @brief  通信先サーバーが未割り当てを表します。
331     */
332     NN_DEFINE_RESULT_CONST_LM(
333         ResultNotAssignServerErr,
334         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_NOT_ASSIGN_SERVER
335     );
336 
337 
338     /*!
339         :category   Result
340         @class nn::ssl::ResultAlreadyAssignServerErr
341         @brief  すでに通信先サーバーが割り当て済みを表します。
342     */
343     NN_DEFINE_RESULT_CONST_LM(
344         ResultAlreadyAssignServerErr,
345         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_ALREADY_ASSIGN_SERVER
346     );
347 
348     /*!
349         :category   Result
350         @class nn::ssl::ResultIpcSessionErr
351         @brief  不正なIPCセッションであるを表します。
352     */
353     NN_DEFINE_RESULT_CONST_LM(
354         ResultIpcSessionErr,
355         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_IPC_SESSION
356     );
357 
358     /*!
359         :category   Result
360         @class nn::ssl::ResultProcessConnectionMaxErr
361         @brief  1プロセスの使用できるコネクションの最大数を越えているを表します。
362     */
363     NN_DEFINE_RESULT_CONST_LM(
364         ResultProcessConnectionMaxErr,
365         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_CONN_PROCESS_MAX
366     );
367 
368     /*!
369         :category   Result
370         @class nn::ssl::ResultFailToCreateCertStoreErr
371         @brief  証明書ストアの作成に失敗しましたを表します。
372     */
373     NN_DEFINE_RESULT_CONST_LM(
374         ResultFailToCreateCertStoreErr,
375         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_FAIL_TO_CREATE_CERT_STORE
376     );
377 
378     /*!
379         :category   Result
380         @class nn::ssl::ResultFailToCreateCrlStoreErr
381         @brief  CRLストアの作成失敗を表します。
382     */
383     NN_DEFINE_RESULT_CONST_LM(
384         ResultFailToCreateCrlStoreErr,
385         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_FAIL_TO_CREATE_CRL_STORE
386     );
387 
388 
389     /*!
390         :category   Result
391         @class nn::ssl::ResultFailToCreateClientCertErr
392         @brief  クライアント証明書の作成失敗を表します。
393     */
394     NN_DEFINE_RESULT_CONST_LM(
395         ResultFailToCreateClientCertErr,
396         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_FAIL_TO_CREATE_CLIENT_CERT
397     );
398 
399     /*!
400         :category   Result
401         @class nn::ssl::ResultInvalidParamErr
402         @brief  不正な引数を表します。
403     */
404     NN_DEFINE_RESULT_CONST_LM(
405         ResultInvalidParamErr,
406         detail::MakePermanentResult, Result::SUMMARY_INVALID_ARGUMENT, ER_INVALID_PARAM
407     );
408 
409     /*!
410         :category   Result
411         @class nn::ssl::ResultNotImplementedErr
412         @brief  処理が未実装を表します。
413     */
414     NN_DEFINE_RESULT_CONST_LM(
415         ResultNotImplementedErr,
416         detail::MakePermanentResult, Result::SUMMARY_INTERNAL, nn::Result::DESCRIPTION_NOT_IMPLEMENTED
417     );
418 
419     /*!
420         :category   Result
421         @class nn::ssl::ResultClientProcessMaxErr
422         @brief  同時利用可能なクライアントプロセス数のクライアントがすでに利用中を表します。
423     */
424     NN_DEFINE_RESULT_CONST_LM(
425         ResultClientProcessMaxErr,
426         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_CLIENT_PROCESS_MAX
427     );
428 
429     /*!
430         :category   Result
431         @class nn::ssl::ResultIpcSessionMaxErr
432         @brief  同時に接続可能なIPCセッション数のセッションがすでに接続を表します。
433     */
434     NN_DEFINE_RESULT_CONST_LM(
435         ResultIpcSessionMaxErr,
436         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_IPC_SESSION_MAX
437     );
438 
439     /*!
440         :category   Result
441         @class nn::ssl::ResultInternalCertErr
442         @brief  内蔵証明書の利用に失敗を表します。
443     */
444     NN_DEFINE_RESULT_CONST_LM(
445         ResultInternalCertErr,
446         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_INTERNAL_CERT
447     );
448 
449     /*!
450         :category   Result
451         @class nn::ssl::ResultInternalCrlErr
452         @brief  内蔵CRLの利用に失敗を表します。
453     */
454     NN_DEFINE_RESULT_CONST_LM(
455         ResultInternalCrlErr,
456         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_INTERNAL_CRL
457     );
458 
459     /*!
460         :category   Result
461         @class nn::ssl::ResultServerCertBufAlreadySetErr
462         @brief  サーバ証明書用バッファが既に設定されているを表します。
463     */
464     NN_DEFINE_RESULT_CONST_LM(
465         ResultServerCertBufAlreadySetErr,
466         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ECERT_BUF_ALREADY_SET
467     );
468 } // end of namespace ssl
469 } // end of namespace nn
470 
471 #endif // __cplusplus
472 
473 
474 #endif /* NN_SSL_SSL_RESULT_H_ */
475