1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     http_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: 22590 $
14  *---------------------------------------------------------------------------*/
15 
16 #ifndef NN_HTTP_HTTP_RESULT_H_
17 #define NN_HTTP_HTTP_RESULT_H_
18 
19 
20 #include <nn/Result.h>
21 #include <nn/net/compatible/nhttp.h>
22 
23 //NHTTPライブラリのResultコードを、HTTPのResultCodeに変換するためのマクロ
24 #define CHANGE_NHTTP_RESULT_CODE_MASK 0x000003ff
25 #define CHANGE_NHTTP_RESULT_CODE(nhttpCode) \
26     (nhttpCode) & (CHANGE_NHTTP_RESULT_CODE_MASK)
27 
28 
29 /*!
30   @addtogroup nn_http                       http
31   @{
32 */
33 
34 /*!
35  @brief  APIのC言語用結果コード。APIの返値であるnnResultのdescription要素として格納される。
36 */
37 enum nnHttpResultCode
38 {
39     /* 汎用*/
40     NN_HTTP_ER_NONE                     = CHANGE_NHTTP_RESULT_CODE(NHTTP_ER_NONE),                                //!< エラー無し
41     NN_HTTP_ER_INVALID_STATUS           = CHANGE_NHTTP_RESULT_CODE(NHTTP_ER_INVALID_STATUS),                      //!< 不正なステータス
42     NN_HTTP_ER_INVALID_PARAM            = CHANGE_NHTTP_RESULT_CODE(NHTTP_ER_INVALID_PARAM),                       //!< 不正なパラメータ
43     NN_HTTP_ER_NOMEM                    = CHANGE_NHTTP_RESULT_CODE(NHTTP_ER_NOMEM),                               //!< メモリの動的確保失敗
44     NN_HTTP_ER_CREATE_EVENT             = CHANGE_NHTTP_RESULT_CODE(NHTTP_ER_CREATE_EVENT),                        //!< イベント生成失敗
45     NN_HTTP_ER_CREATE_MUTEX             = CHANGE_NHTTP_RESULT_CODE(NHTTP_ER_CREATE_MUTEX),                        //!< ミューテックス生成失敗
46     NN_HTTP_ER_CREATE_QUEUE             = CHANGE_NHTTP_RESULT_CODE(NHTTP_ER_CREATE_QUEUE),                        //!< メッセージキュー生成失敗
47     NN_HTTP_ER_CREATE_THREAD            = CHANGE_NHTTP_RESULT_CODE(NHTTP_ER_CREATE_THREAD),                       //!< スレッド生成失敗
48     NN_HTTP_ER_CONNECTION_NOT_INITIALIZED          = CHANGE_NHTTP_RESULT_CODE(NHTTP_ER_CODE(100)),                //!< コネクションの未初期化
49     NN_HTTP_ER_ALREADY_ASSIGN_HOST      = CHANGE_NHTTP_RESULT_CODE(NHTTP_ER_CODE(101)),                           //!< 通信先がすでに割り当て済みである
50     NN_HTTP_ER_SESSION                  = CHANGE_NHTTP_RESULT_CODE(NHTTP_ER_CODE(102)),                           //!< 不正なプロセスによるセッションの乗っ取り
51     NN_HTTP_ER_CLIENT_PROCESS_MAX       = CHANGE_NHTTP_RESULT_CODE(NHTTP_ER_CODE(103)),                           //!< 同時利用可能なクライアントプロセス数のクライアントがすでに利用中である。
52     NN_HTTP_ER_IPC_SESSION_MAX          = CHANGE_NHTTP_RESULT_CODE(NHTTP_ER_CODE(104)),                           //!< 同時に接続可能なIPCセッション数のセッションがすでに接続されている(つまりクライアント数、コネクション数共に最大値に達している。)
53     NN_HTTP_ER_TIMEOUT                  = CHANGE_NHTTP_RESULT_CODE(NHTTP_ER_CODE(105)),                           //!< タイムアウト
54 
55     /* ライブラリ処理関連 */
56     NN_HTTP_ER_ALREADY_INITIALIZED      = nn::Result::DESCRIPTION_ALREADY_INITIALIZED,  //!< ライブラリが初期化済み
57     NN_HTTP_ER_NOT_INITIALIZED          = nn::Result::DESCRIPTION_NOT_INITIALIZED,      //!< ライブラリが未初期化
58 
59     /* メッセージキュー関連 */
60     NN_HTTP_ER_MSGQ_SEND_LSN    = CHANGE_NHTTP_RESULT_CODE(NHTTP_ER_MSGQ_SEND_LSN),         //!< リスナースレッドメッセージキューへの送信失敗
61     NN_HTTP_ER_MSGQ_RECV_LSN    = CHANGE_NHTTP_RESULT_CODE(NHTTP_ER_MSGQ_RECV_LSN),         //!< リスナースレッドメッセージキュー受信失敗
62     NN_HTTP_ER_MSGQ_RECV_COMM   = CHANGE_NHTTP_RESULT_CODE(NHTTP_ER_MSGQ_RECV_COMM),        //!< 通信スレッドメッセージキュー受信失敗
63 
64     /* 接続ハンドル関連 */
65     NN_HTTP_ER_CONN_NOMORE      = CHANGE_NHTTP_RESULT_CODE(NHTTP_ER_CONN_NOMORE),         //!< 接続ハンドル登録最大数越え
66     NN_HTTP_ER_CONN_NOSUCH      = CHANGE_NHTTP_RESULT_CODE(NHTTP_ER_CONN_NOSUCH),         //!< 該当接続ハンドルなし
67     NN_HTTP_ER_CONN_STATUS      = CHANGE_NHTTP_RESULT_CODE(NHTTP_ER_CONN_STATUS),         //!< 接続ハンドル不正ステータス
68     NN_HTTP_ER_CONN_ADD         = CHANGE_NHTTP_RESULT_CODE(NHTTP_ER_CONN_ADD),            //!< 接続ハンドル登録失敗
69     NN_HTTP_ER_CONN_CANCELED    = CHANGE_NHTTP_RESULT_CODE(NHTTP_ER_CONN_CANCELED),       //!< 接続ハンドルキャンセル
70     NN_HTTP_ER_CONN_HOST_MAX    = CHANGE_NHTTP_RESULT_CODE(NHTTP_ER_CONN_HOST_MAX),       //!< 同一ホストへの最大同時接続数越え
71     NN_HTTP_ER_CONN_PROCESS_MAX = CHANGE_NHTTP_RESULT_CODE(NHTTP_ER_CODE(26)),            //!< 1プロセスの使用コネクション最大数越え
72 
73     /* リクエスト関連 */
74     NN_HTTP_ER_REQ_URL              = CHANGE_NHTTP_RESULT_CODE(NHTTP_ER_REQ_URL),             //!< 不正なURL
75     NN_HTTP_ER_REQ_CONNMSG_PORT     = CHANGE_NHTTP_RESULT_CODE(NHTTP_ER_REQ_CONNMSG_PORT),    //!< CONNECT送信用ポート番号不正
76     NN_HTTP_ER_REQ_UNKNOWN_METHOD   = CHANGE_NHTTP_RESULT_CODE(NHTTP_ER_REQ_UNKNOWN_METHOD),  //!< 認識できないメソッド
77 
78     /* レスポンス関連 */
79     NN_HTTP_ER_RES_HEADER           = CHANGE_NHTTP_RESULT_CODE(NHTTP_ER_RES_HEADER),          //!< 不正なHTTPヘッダ
80     NN_HTTP_ER_RES_NONEWLINE        = CHANGE_NHTTP_RESULT_CODE(NHTTP_ER_RES_NONEWLINE),       //!< HTTPヘッダ次行なし
81     NN_HTTP_ER_RES_BODYBUF          = CHANGE_NHTTP_RESULT_CODE(NHTTP_ER_RES_BODYBUF),         //!< HTTPボディ受信バッファエラー
82     NN_HTTP_ER_RES_BODYBUF_SHORTAGE = CHANGE_NHTTP_RESULT_CODE(NHTTP_ER_CODE(43)),            //!< HTTPボディ受信バッファの不足
83 
84     /* POST関連 */
85     NN_HTTP_ER_POST_ADDED_ANOTHER   = CHANGE_NHTTP_RESULT_CODE(NHTTP_ER_POST_ADDED_ANOTHER),  //!< POSTデータ追加失敗(別タイプPOSTが既存)
86     NN_HTTP_ER_POST_BOUNDARY        = CHANGE_NHTTP_RESULT_CODE(NHTTP_ER_POST_BOUNDARY),       //!< Boundaryが正しく設定できない
87     NN_HTTP_ER_POST_SEND            = CHANGE_NHTTP_RESULT_CODE(NHTTP_ER_POST_SEND),           //!< POSTリクエスト送信失敗
88     NN_HTTP_ER_POST_UNKNOWN_ENCTYPE = CHANGE_NHTTP_RESULT_CODE(NHTTP_ER_POST_UNKNOWN_ENCTYPE),//!< 不明なエンコードタイプ
89     NN_HTTP_ER_POST_NODATA          = CHANGE_NHTTP_RESULT_CODE(NHTTP_ER_POST_NODATA),         //!< 送信データ設定無し
90 
91     /* SSL関連 */
92     NN_HTTP_ER_SSL                   = CHANGE_NHTTP_RESULT_CODE(NHTTP_ER_SSL),                  //!< SSLエラー
93     NN_HTTP_ER_SSL_CERT_EXIST        = CHANGE_NHTTP_RESULT_CODE(NHTTP_ER_SSL_CERT_EXIST),       //!< SSL 証明書設定済み(再登録前に削除が必要)
94     NN_HTTP_ER_SSL_NO_CA_CERT_STORE  = CHANGE_NHTTP_RESULT_CODE(NHTTP_ER_CODE(200)),            //!< SSL 該当するCA証明書ストアが登録されていない
95     NN_HTTP_ER_SSL_NO_CLIENT_CERT    = CHANGE_NHTTP_RESULT_CODE(NHTTP_ER_CODE(201)),            //!< SSL 該当するクライアント証明書が登録されていない
96     NN_HTTP_ER_SSL_CA_CERT_STORE_MAX = CHANGE_NHTTP_RESULT_CODE(NHTTP_ER_CODE(202)),            //!< SSL プロセスごとのCA証明書ストア同時登録最大数の証明書ストアがすでに登録されている。
97     NN_HTTP_ER_SSL_CLIENT_CERT_MAX   = CHANGE_NHTTP_RESULT_CODE(NHTTP_ER_CODE(203)),            //!< SSL プロセスごとのクライアント証明書同時登録最大数の証明書がすでに登録されている。
98     NN_HTTP_ER_SSL_FAIL_TO_CREATE_CERT_STORE = CHANGE_NHTTP_RESULT_CODE(NHTTP_ER_CODE(204)),    //!< SSL 証明書ストアの作成に失敗
99     NN_HTTP_ER_SSL_FAIL_TO_CREATE_CLIENT_CERT = CHANGE_NHTTP_RESULT_CODE(NHTTP_ER_CODE(205)),   //!< SSL クライアント証明書の作成に失敗
100 
101     /* ソケット関連 */
102     NN_HTTP_ER_SOC_DNS  = CHANGE_NHTTP_RESULT_CODE(NHTTP_ER_SOC_DNS),             //!< DNS名前解決失敗
103     NN_HTTP_ER_SOC_SEND = CHANGE_NHTTP_RESULT_CODE(NHTTP_ER_SOC_SEND),            //!< ソケットデータ送信失敗
104     NN_HTTP_ER_SOC_RECV = CHANGE_NHTTP_RESULT_CODE(NHTTP_ER_SOC_RECV),            //!< ソケットデータ受信失敗
105     NN_HTTP_ER_SOC_CONN = CHANGE_NHTTP_RESULT_CODE(NHTTP_ER_SOC_CONN),            //!< ソケット接続失敗
106 
107     /* プロキシ関連 */
108     NN_HTTP_ER_GET_PROXY_SETTING = CHANGE_NHTTP_RESULT_CODE(NHTTP_ER_GET_DEFAULT_PROXY)                   //!< 機器に設定されているProxy値の取得に失敗した。
109 };
110 
111 /*!
112   @}
113 */
114 
115 #ifdef __cplusplus
116 
117 
118 namespace nn {
119 namespace http {
120     /*!
121      @brief  APIの結果コード。APIの返値であるResultのdescription要素として格納される。
122          @note 現状はNHTTPライブラリの結果コード値と合わせる(ただしResultのdescriptionは10bitであるため、下位10bitのみ用いる。)NHTTPライブラリと依存関係になってしまうため、将来的には独立した値に変更する。
123     */
124     enum ResultCode
125     {
126         /* 汎用*/
127         ER_NONE                 = NN_HTTP_ER_NONE,                   //!< エラー無し
128         ER_INVALID_STATUS       = NN_HTTP_ER_INVALID_STATUS,         //!< 不正なステータス
129         ER_INVALID_PARAM        = NN_HTTP_ER_INVALID_PARAM,          //!< 不正なパラメータ
130         ER_NOMEM                = NN_HTTP_ER_NOMEM,                  //!< メモリの動的確保失敗
131         ER_CREATE_EVENT         = NN_HTTP_ER_CREATE_EVENT,           //!< イベント生成失敗
132         ER_CREATE_MUTEX         = NN_HTTP_ER_CREATE_MUTEX,           //!< ミューテックス生成失敗
133         ER_CREATE_QUEUE         = NN_HTTP_ER_CREATE_QUEUE,           //!< メッセージキュー生成失敗
134         ER_CREATE_THREAD        = NN_HTTP_ER_CREATE_THREAD,          //!< スレッド生成失敗
135         ER_CONNECTION_NOT_INITIALIZED      = NN_HTTP_ER_CONNECTION_NOT_INITIALIZED,        //!< 通信先が割り当てられていない
136         ER_ALREADY_ASSIGN_HOST  = NN_HTTP_ER_ALREADY_ASSIGN_HOST,    //!< 通信先がすでに割り当て済みである
137         ER_SESSION              = NN_HTTP_ER_SESSION,                //!< IPCセッションが不正である
138         ER_CLIENT_PROCESS_MAX   = NN_HTTP_ER_CLIENT_PROCESS_MAX,     //!< 同時利用可能なクライアントプロセス数のクライアントがすでに利用中である。
139         ER_IPC_SESSION_MAX      = NN_HTTP_ER_IPC_SESSION_MAX ,       //!< 同時に接続可能なIPCセッション数のセッションがすでに接続されている(つまりクライアント数、コネクション数共に最大値に達している。)
140         ER_TIMEOUT              = NN_HTTP_ER_TIMEOUT,                //!< タイムアウト
141 
142         /* ライブラリ処理関連 */
143         ER_ALREADY_INITIALIZED  = NN_HTTP_ER_ALREADY_INITIALIZED,    //!< ライブラリが初期化済み
144         ER_NOT_INITIALIZED      = NN_HTTP_ER_NOT_INITIALIZED,        //!< ライブラリが未初期化
145 
146         /* メッセージキュー関連 */
147         ER_MSGQ_SEND_LSN        = NN_HTTP_ER_MSGQ_SEND_LSN,          //!< リスナースレッドメッセージキューへの送信失敗
148         ER_MSGQ_RECV_LSN        = NN_HTTP_ER_MSGQ_RECV_LSN,          //!< リスナースレッドメッセージキュー受信失敗
149         ER_MSGQ_RECV_COMM       = NN_HTTP_ER_MSGQ_RECV_COMM,         //!< 通信スレッドメッセージキュー受信失敗
150 
151         /* 接続ハンドル関連 */
152         ER_CONN_NOMORE          = NN_HTTP_ER_CONN_NOMORE,            //!< 接続ハンドル登録最大数越え
153         ER_CONN_NOSUCH          = NN_HTTP_ER_CONN_NOSUCH,            //!< 該当接続ハンドルなし
154         ER_CONN_STATUS          = NN_HTTP_ER_CONN_STATUS,            //!< 接続ハンドル不正ステータス
155         ER_CONN_ADD             = NN_HTTP_ER_CONN_ADD,               //!< 接続ハンドル登録失敗
156         ER_CONN_CANCELED        = NN_HTTP_ER_CONN_CANCELED,          //!< 接続ハンドルキャンセル
157         ER_CONN_HOST_MAX        = NN_HTTP_ER_CONN_HOST_MAX,          //!< 同一ホストへの最大同時接続数越え
158         ER_CONN_PROCESS_MAX     = NN_HTTP_ER_CONN_PROCESS_MAX,       //!< 1プロセスの使用コネクション最大数越え
159 
160         /* リクエスト関連 */
161         ER_REQ_URL              = NN_HTTP_ER_REQ_URL,                //!< 不正なURL
162         ER_REQ_CONNMSG_PORT     = NN_HTTP_ER_REQ_CONNMSG_PORT,       //!< CONNECT送信用ポート番号不正
163         ER_REQ_UNKNOWN_METHOD   = NN_HTTP_ER_REQ_UNKNOWN_METHOD,     //!< 認識できないメソッド
164 
165         /* レスポンス関連 */
166         ER_RES_HEADER           = NN_HTTP_ER_RES_HEADER,             //!< 不正なHTTPヘッダ
167         ER_RES_NONEWLINE        = NN_HTTP_ER_RES_NONEWLINE,          //!< HTTPヘッダ次行なし
168         ER_RES_BODYBUF          = NN_HTTP_ER_RES_BODYBUF,            //!< HTTPボディ受信バッファエラー
169         ER_RES_BODYBUF_SHORTAGE = NN_HTTP_ER_RES_BODYBUF_SHORTAGE,   //!< HTTPボディ受信バッファの不足
170 
171         /* POST関連 */
172         ER_POST_ADDED_ANOTHER   = NN_HTTP_ER_POST_ADDED_ANOTHER,     //!< POSTデータ追加失敗(別タイプPOSTが既存)
173         ER_POST_BOUNDARY        = NN_HTTP_ER_POST_BOUNDARY,          //!< Boundaryが正しく設定できない
174         ER_POST_SEND            = NN_HTTP_ER_POST_SEND,              //!< POSTリクエスト送信失敗
175         ER_POST_UNKNOWN_ENCTYPE = NN_HTTP_ER_POST_UNKNOWN_ENCTYPE,   //!< 不明なエンコードタイプ
176         ER_POST_NODATA          = NN_HTTP_ER_POST_NODATA,            //!< 送信データ設定無し
177 
178         /* SSL関連 */
179         ER_SSL                   = NN_HTTP_ER_SSL,                    //!< SSLエラー
180         ER_SSL_CERT_EXIST        = NN_HTTP_ER_SSL_CERT_EXIST,         //!< SSL 証明書設定済み(再登録前に削除が必要)
181         ER_SSL_NO_CA_CERT_STORE  = NN_HTTP_ER_SSL_NO_CA_CERT_STORE,   //!< SSL 該当するCA証明書ストアが登録されていない
182         ER_SSL_NO_CLIENT_CERT    = NN_HTTP_ER_SSL_NO_CLIENT_CERT,     //!< SSL 該当するクライアント証明書が登録されていない
183         ER_SSL_CA_CERT_STORE_MAX = NN_HTTP_ER_SSL_CA_CERT_STORE_MAX,  //!< SSL プロセスごとのCA証明書ストア同時登録最大数の証明書ストアがすでに登録されている。
184         ER_SSL_CLIENT_CERT_MAX   = NN_HTTP_ER_SSL_CLIENT_CERT_MAX,    //!< SSL プロセスごとのクライアント証明書同時登録最大数の証明書がすでに登録されている。
185         ER_SSL_FAIL_TO_CREATE_CERT_STORE = NN_HTTP_ER_SSL_FAIL_TO_CREATE_CERT_STORE,   //!< SSL 証明書ストアの作成に失敗
186         ER_SSL_FAIL_TO_CREATE_CLIENT_CERT = NN_HTTP_ER_SSL_FAIL_TO_CREATE_CLIENT_CERT, //!< SSL クライアント証明書の作成に失敗
187 
188         /* ソケット関連 */
189         ER_SOC_DNS              = NN_HTTP_ER_SOC_DNS,                //!< DNS名前解決失敗
190         ER_SOC_SEND             = NN_HTTP_ER_SOC_SEND,               //!< ソケットデータ送信失敗
191         ER_SOC_RECV             = NN_HTTP_ER_SOC_RECV,               //!< ソケットデータ受信失敗/
192         ER_SOC_CONN             = NN_HTTP_ER_SOC_CONN,               //!< ソケット接続失敗
193 
194         /* プロキシ関連*/
195         ER_GET_PROXY_SETTING    = NN_HTTP_ER_GET_PROXY_SETTING                   //!< 機器に設定されているProxy値の取得に失敗した。
196 
197     };
198 
199     namespace detail {
200         /**
201          * @brief  NHTTPのPermanentエラーを表すResultを返す。
202          * @param summary エラーを表すResult::Summary値。
203          * @param errCode エラーコード(nn::http::ResultCode列挙体のいずれかの値)
204          * @return 引数に対応するPermanentエラーを表すResult。
205         */
206         NN_DEFINE_RESULT_FUNC_LM(MakePermanentResult, Result::LEVEL_PERMANENT, Result::MODULE_NN_HTTP);
207 
208 
209         /**
210          * @brief  リターンコードに対して、それを表すResultを返す。
211          * @param returnCode リターンコード(nn::http::ResultCode列挙体のいずれかの値)
212          * @return 引数の内容を表すResult。
213         */
ChangeNetHttpRetCodeToResult(ResultCode returnCode)214         inline Result ChangeNetHttpRetCodeToResult(ResultCode returnCode)
215         {
216             if(returnCode == ER_NONE)
217             {
218                 return ResultSuccess();
219             }
220             else if(returnCode == ER_INVALID_PARAM)
221             {
222                 return MakePermanentResult(Result::SUMMARY_INVALID_ARGUMENT, returnCode);
223             }
224             else
225             {
226                 return MakePermanentResult(Result::SUMMARY_INVALID_STATE, returnCode);
227             }
228         }
229 
230         /**
231          * @brief  リターンコードに対して、それを表すResultを返す。
232          * @param returnCode リターンコード(nn::http::ResultCode列挙体の各要素の即値)
233          * @return 引数の内容を表すResult。
234         */
ChangeNetHttpRetCodeToResult(s32 returnCode)235         inline Result ChangeNetHttpRetCodeToResult(s32 returnCode)
236         {
237             return ChangeNetHttpRetCodeToResult(static_cast<ResultCode>(returnCode));
238         }
239     }
240 
241     /**
242      * @brief  「不正なステータス」を表すResultを返す。
243      * @return 「不正なステータス」を表すResult
244     */
245     NN_DEFINE_RESULT_CONST_LM(
246         ResultInvalidStatusErr,
247         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_INVALID_STATUS
248     );
249 
250     /**
251      * @brief  「不正なパラメータ」エラーを表すResultを返す。
252      * @return 「不正なパラメータ」エラーを表すResult
253     */
254     NN_DEFINE_RESULT_CONST_LM(
255         ResultInvalidParamErr,
256         detail::MakePermanentResult, Result::SUMMARY_INVALID_ARGUMENT, ER_INVALID_PARAM
257     );
258 
259     /**
260      * @brief  「メモリの動的確保失敗」エラーを表すResultを返す。
261      * @return 「メモリの動的確保失敗」エラーを表すResult
262     */
263     NN_DEFINE_RESULT_CONST_LM(
264         ResultOutOfMemoryErr,
265         detail::MakePermanentResult, Result::SUMMARY_OUT_OF_RESOURCE, ER_NOMEM
266     );
267 
268     /**
269      * @brief  「イベント生成失敗」エラーを表すResultを返す。
270      * @return 「イベント生成失敗」エラーを表すResult
271     */
272     NN_DEFINE_RESULT_CONST_LM(
273         ResultCreateEventErr,
274         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_CREATE_EVENT
275     );
276 
277     /**
278      * @brief  「ミューテックス生成失敗」エラーを表すResultを返す。
279      * @return 「ミューテックス生成失敗」エラーを表すResult
280     */
281     NN_DEFINE_RESULT_CONST_LM(
282         ResultCreateMutexErr,
283         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_CREATE_MUTEX
284     );
285 
286     /**
287      * @brief  「メッセージキュー生成失敗」エラーを表すResultを返す。
288      * @return 「メッセージキュー生成失敗」エラーを表すResult
289     */
290     NN_DEFINE_RESULT_CONST_LM(
291         ResultCreateQueueErr,
292         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_CREATE_QUEUE
293     );
294 
295     /**
296      * @brief  「スレッド生成失敗」エラーを表すResultを返す。
297      * @return 「スレッド生成失敗」エラーを表すResult
298     */
299     NN_DEFINE_RESULT_CONST_LM(
300         ResultCreateThreadErr,
301         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_CREATE_THREAD
302     );
303 
304     /**
305      * @brief  「コネクションの未初期化」エラーを表すResultを返す。
306      * @return 「コネクションの未初期化」エラーを表すResult
307     */
308     NN_DEFINE_RESULT_CONST_LM(
309         ResultNotConnectedErr,
310         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_CONNECTION_NOT_INITIALIZED
311     );
312 
313     /**
314      * @brief  「すでに通信先ホストが割り当て済み」エラーを表すResultを返す。
315      * @return 「すでに通信先ホストが割り当て済み」エラーを表すResult
316     */
317     NN_DEFINE_RESULT_CONST_LM(
318         ResultAlreadyAssignHostErr,
319         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_ALREADY_ASSIGN_HOST
320     );
321 
322     /**
323      * @brief  「IPCセッションが不正である」エラーを表すResultを返す。
324      * @return 「IPCセッションが不正である」エラーを表すResult
325     */
326     NN_DEFINE_RESULT_CONST_LM(
327         ResultSessionErr,
328         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_SESSION
329     );
330 
331     /**
332      * @brief  「同時利用可能なクライアントプロセス数のクライアントがすでに利用中である。」エラーを表すResultを返す。
333      * @return 「同時利用可能なクライアントプロセス数のクライアントがすでに利用中である。」エラーを表すResult
334     */
335     NN_DEFINE_RESULT_CONST_LM(
336         ResultClientProcessMaxErr,
337         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_CLIENT_PROCESS_MAX
338     );
339 
340     /**
341      * @brief  「同時に接続可能なIPCセッション数のセッションがすでに接続されている」エラーを表すResultを返す。
342      * @return 「同時に接続可能なIPCセッション数のセッションがすでに接続されている」エラーを表すResult
343     */
344     NN_DEFINE_RESULT_CONST_LM(
345         ResultIpcSessionMaxErr,
346         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_IPC_SESSION_MAX
347     );
348 
349 
350     /**
351      * @brief  「ライブラリが初期化済」エラーを表すResultを返す。
352      * @return 「ライブラリが初期化済」エラーを表すResult
353     */
354     NN_DEFINE_RESULT_CONST_LM(
355         ResultAlreadyInitializedErr,
356         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_ALREADY_INITIALIZED
357     );
358 
359     /**
360      * @brief  「ライブラリが未初期化」エラーを表すResultを返す。
361      * @return 「ライブラリが未初期化」エラーを表すResult
362     */
363     NN_DEFINE_RESULT_CONST_LM(
364         ResultNotInitializedErr,
365         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_NOT_INITIALIZED
366     );
367 
368     /**
369      * @brief  「リスナースレッドメッセージキューへの送信失敗」エラーを表すResultを返す。
370      * @return 「リスナースレッドメッセージキューへの送信失敗」エラーを表すResult
371     */
372     NN_DEFINE_RESULT_CONST_LM(
373         ResultMessageSendToListenThreadErr,
374         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_MSGQ_SEND_LSN
375     );
376 
377     /**
378      * @brief  「リスナースレッドメッセージキュー受信失敗」エラーを表すResultを返す。
379      * @return 「リスナースレッドメッセージキュー受信失敗」エラーを表すResult
380     */
381     NN_DEFINE_RESULT_CONST_LM(
382         ResultMessageRecvInListenThreadErr,
383         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_MSGQ_RECV_LSN
384     );
385 
386     /**
387      * @brief  「通信スレッドメッセージキュー受信失敗」エラーを表すResultを返す。
388      * @return 「通信スレッドメッセージキュー受信失敗」エラーを表すResult
389     */
390     NN_DEFINE_RESULT_CONST_LM(
391         ResultMessageRecvInCommunicationThreadErr,
392         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_MSGQ_RECV_COMM
393     );
394 
395     /**
396      * @brief  「接続ハンドル登録最大数越え」エラーを表すResultを返す。
397      * @return 「接続ハンドル登録最大数越え」エラーを表すResult
398     */
399     NN_DEFINE_RESULT_CONST_LM(
400         ResultConnectionNoMoreErr,
401         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_CONN_NOMORE
402     );
403 
404     /**
405      * @brief  「存在しないコネクションに対する処理依頼」エラーを表すResultを返す。
406      * @return 「存在しないコネクションに対する処理依頼」エラーを表すResult
407     */
408     NN_DEFINE_RESULT_CONST_LM(
409         ResultNoSuchConnectionErr,
410         detail::MakePermanentResult, Result::SUMMARY_NOT_FOUND, ER_CONN_NOSUCH
411     );
412 
413     /**
414      * @brief  「コネクションのステータス不正」エラーを表すResultを返す。(例えば、APIを呼び出す順序が不正な場合に返されるResult)
415      * @return 「コネクションのステータス不正」エラーを表すResult
416     */
417     NN_DEFINE_RESULT_CONST_LM(
418         ResultConnectionStatusErr,
419         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_CONN_STATUS
420     );
421 
422     /**
423      * @brief  「コネクションの登録失敗」エラーを表すResultを返す。
424      * @return 「コネクションの登録失敗」エラーを表すResult
425     */
426     NN_DEFINE_RESULT_CONST_LM(
427         ResultConnectionAddErr,
428         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_CONN_ADD
429     );
430 
431     /**
432      * @brief  「コネクションのキャンセル」エラーを表すResultを返す。
433      * @return 「コネクションのキャンセル」エラーを表すResult
434     */
435     NN_DEFINE_RESULT_CONST_LM(
436         ResultConnectionCanceledErr,
437         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_CONN_CANCELED
438     );
439 
440     /**
441      * @brief  「同一ホストへの最大同時接続数越え」エラーを表すResultを返す。
442      * @return 「同一ホストへの最大同時接続数越え」エラーを表すResult
443     */
444     NN_DEFINE_RESULT_CONST_LM(
445         ResultConnectionHostMaxErr,
446         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_CONN_HOST_MAX
447     );
448 
449     /**
450      * @brief  「1プロセスの使用コネクション最大数越え」エラーを表すResultを返す。
451      * @return 「1プロセスの使用コネクション最大数越え」エラーを表すResult
452     */
453     NN_DEFINE_RESULT_CONST_LM(
454         ResultConnectionProcessMaxErr,
455         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_CONN_PROCESS_MAX
456     );
457 
458 
459     /**
460      * @brief  「不正なURL」エラーを表すResultを返す。
461      * @return 「不正なURL」エラーを表すResult
462     */
463     NN_DEFINE_RESULT_CONST_LM(
464         ResultRequestUrlErr,
465         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_REQ_URL
466     );
467 
468     /**
469      * @brief  「不正な通信先ポート番号」エラーを表すResultを返す。
470      * @return 「不正な通信先ポート番号」エラーを表すResult
471     */
472     NN_DEFINE_RESULT_CONST_LM(
473         ResultRequestPortErr,
474         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_REQ_CONNMSG_PORT
475     );
476 
477     /**
478      * @brief  「認識できないメソッド」エラーを表すResultを返す。
479      * @return 「認識できないメソッド」エラーを表すResult
480     */
481     NN_DEFINE_RESULT_CONST_LM(
482         ResultRequestUnknownMethodErr,
483         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_REQ_UNKNOWN_METHOD
484     );
485 
486     /**
487      * @brief  「不正なHTTPヘッダ」エラーを表すResultを返す。
488      * @return 「不正なHTTPヘッダ」エラーを表すResult
489     */
490     NN_DEFINE_RESULT_CONST_LM(
491         ResultRequestHeaderErr,
492         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_RES_HEADER
493     );
494 
495     /**
496      * @brief  「HTTPヘッダ次行なし」エラーを表すResultを返す。
497      * @return 「HTTPヘッダ次行なし」エラーを表すResult
498     */
499     NN_DEFINE_RESULT_CONST_LM(
500         ResultRequestNoNewLineErr,
501         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_RES_NONEWLINE
502     );
503 
504     /**
505      * @brief  「HTTPボディ受信バッファエラー」エラーを表すResultを返す。
506      * @return 「HTTPボディ受信バッファエラー」エラーを表すResult
507     */
508     NN_DEFINE_RESULT_CONST_LM(
509         ResultBodyBufErr,
510         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_RES_BODYBUF
511     );
512 
513     /**
514      * @brief  「HTTP Body受信バッファの容量不足」を表すResultを返す。
515      * @return 「HTTP Body受信バッファの容量不足」を表すResult
516     */
517     NN_DEFINE_RESULT_CONST_LM(
518         ResultBodyBufShortage,
519         detail::MakePermanentResult, Result::SUMMARY_WOULD_BLOCK, ER_RES_BODYBUF_SHORTAGE
520     );
521 
522     /**
523      * @brief  「POSTデータ追加失敗」エラーを表すResultを返す。
524      * @return 「POSTデータ追加失敗」エラーを表すResult
525     */
526     NN_DEFINE_RESULT_CONST_LM(
527         ResultPostAddedAnotherErr,
528         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_POST_ADDED_ANOTHER
529     );
530 
531     /**
532      * @brief  「POSTデータのBoundaryが正しく設定できない」エラーを表すResultを返す。
533      * @return 「POSTデータのBoundaryが正しく設定できない」エラーを表すResult
534     */
535     NN_DEFINE_RESULT_CONST_LM(
536         ResultPostBoundaryErr,
537         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_POST_BOUNDARY
538     );
539 
540     /**
541      * @brief  「POSTリクエスト送信失敗」エラーを表すResultを返す。
542      * @return 「POSTリクエスト送信失敗」エラーを表すResult
543     */
544     NN_DEFINE_RESULT_CONST_LM(
545         ResultPostSendErr,
546         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_POST_SEND
547     );
548 
549     /**
550      * @brief  「POST用として不明なエンコードタイプ」エラーを表すResultを返す。
551      * @return 「POST用として不明なエンコードタイプ」エラーを表すResult
552     */
553     NN_DEFINE_RESULT_CONST_LM(
554         ResultPostUnknownEnctypeErr,
555         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_POST_UNKNOWN_ENCTYPE
556     );
557 
558     /**
559      * @brief  「POST用の送信データ設定無し」エラーを表すResultを返す。
560      * @return 「POST用の送信データ設定無し」エラーを表すResult
561     */
562     NN_DEFINE_RESULT_CONST_LM(
563         ResultPostNoDataErr,
564         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_POST_NODATA
565     );
566 
567 
568 
569     /**
570      * @brief  「SSLエラー」エラーを表すResultを返す。
571      * @return 「SSLエラー」エラーを表すResult
572     */
573     NN_DEFINE_RESULT_CONST_LM(
574         ResultSslErr,
575         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_SSL
576     );
577 
578     /**
579      * @brief  「SSL 証明書設定済み(再登録前に削除が必要)」エラーを表すResultを返す。
580      * @return 「SSL 証明書設定済み(再登録前に削除が必要)」エラーを表すResult
581     */
582     NN_DEFINE_RESULT_CONST_LM(
583         ResultCertExistErr,
584         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_SSL_CERT_EXIST
585     );
586 
587     /**
588      * @brief  「SSL 該当するCA証明書ストアが登録されていない」エラーを表すResultを返す。
589      * @return 「SSL 該当するCA証明書ストアが登録されていない」エラーを表すResult
590     */
591     NN_DEFINE_RESULT_CONST_LM(
592         ResultNoCaCertStoreErr,
593         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_SSL_NO_CA_CERT_STORE
594     );
595 
596     /**
597      * @brief  「SSL 該当するクライアント証明書が登録されていない」エラーを表すResultを返す。
598      * @return 「SSL 該当するクライアント証明書が登録されていない」エラーを表すResult
599     */
600     NN_DEFINE_RESULT_CONST_LM(
601         ResultNoClientCertErr,
602         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_SSL_NO_CLIENT_CERT
603     );
604 
605     /**
606      * @brief  「SSL プロセスごとのCA証明書ストア同時登録最大数の証明書ストアがすでに登録されている。」エラーを表すResultを返す。
607      * @return 「SSL プロセスごとのCA証明書ストア同時登録最大数の証明書ストアがすでに登録されている。」エラーを表すResult
608     */
609     NN_DEFINE_RESULT_CONST_LM(
610         ResultCaCertStoreMaxErr,
611         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_SSL_CA_CERT_STORE_MAX
612     );
613 
614     /**
615      * @brief  「SSL プロセスごとのクライアント証明書同時登録最大数の証明書がすでに登録されている。」エラーを表すResultを返す。
616      * @return 「SSL プロセスごとのクライアント証明書同時登録最大数の証明書がすでに登録されている。」エラーを表すResult
617     */
618     NN_DEFINE_RESULT_CONST_LM(
619         ResultClientCertMaxErr,
620         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_SSL_CLIENT_CERT_MAX
621     );
622 
623     /**
624      * @brief  「SSL 証明書ストアの作成に失敗」エラーを表すResultを返す。
625      * @return 「SSL 証明書ストアの作成に失敗」エラーを表すResult
626     */
627     NN_DEFINE_RESULT_CONST_LM(
628         ResultFailToCreateCertStoreErr,
629         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_SSL_FAIL_TO_CREATE_CERT_STORE
630     );
631 
632     /**
633      * @brief  「 SSL クライアント証明書の作成に失敗」エラーを表すResultを返す。
634      * @return 「 SSL クライアント証明書の作成に失敗」エラーを表すResult
635     */
636     NN_DEFINE_RESULT_CONST_LM(
637         ResultFailToCreateClientCertErr,
638         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_SSL_FAIL_TO_CREATE_CLIENT_CERT
639     );
640 
641     /**
642      * @brief  「DNS名前解決失敗」エラーを表すResultを返す。
643      * @return 「DNS名前解決失敗」エラーを表すResult
644     */
645     NN_DEFINE_RESULT_CONST_LM(
646         ResultDnsResolutionErr,
647         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_SOC_DNS
648     );
649 
650     /**
651      * @brief  「ソケットデータ送信失敗」エラーを表すResultを返す。
652      * @return 「ソケットデータ送信失敗」エラーを表すResult
653     */
654     NN_DEFINE_RESULT_CONST_LM(
655         ResultSocketSendErr,
656         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_SOC_SEND
657     );
658 
659     /**
660      * @brief  「ソケットデータ受信失敗」エラーを表すResultを返す。
661      * @return 「ソケットデータ受信失敗」エラーを表すResult
662     */
663     NN_DEFINE_RESULT_CONST_LM(
664         ResultSocketReceiveErr,
665         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_SOC_RECV
666     );
667 
668     /**
669      * @brief  「ソケット接続失敗」エラーを表すResultを返す。
670      * @return 「ソケット接続失敗」エラーを表すResult
671     */
672     NN_DEFINE_RESULT_CONST_LM(
673         ResultSocketConnectErr,
674         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_SOC_CONN
675     );
676 
677     /**
678      * @brief  「機器に設定されているProxy値の取得に失敗した。」エラーを表すResultを返す。
679      * @return 「機器に設定されているProxy値の取得に失敗した。」エラーを表すResult
680     */
681     NN_DEFINE_RESULT_CONST_LM(
682         ResultGetProxySettingErr,
683         detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_GET_PROXY_SETTING
684     );
685 
686     /**
687      * @brief  「処理が未実装です。」を表すResultを返す。このエラーは内部実装エラーである。
688      * @return 「処理が未実装です。」を表すResult
689     */
690     NN_DEFINE_RESULT_CONST_LM(
691         ResultNotImplementedErr,
692         detail::MakePermanentResult, Result::SUMMARY_INTERNAL, nn::Result::DESCRIPTION_NOT_IMPLEMENTED
693     );
694 
695     /**
696      * @brief  「タイムアウト」を表すResultを返す。
697      * @return 「タイムアウト」を表すResult
698     */
699     NN_DEFINE_RESULT_CONST_LM(
700         ResultTimeout,
701         detail::MakePermanentResult, Result::SUMMARY_NOTHING_HAPPENED, ER_TIMEOUT
702     );
703 }
704 }
705 
706 #endif // __cplusplus
707 
708 
709 
710 
711 
712 #endif /* NN_NHTTP_NHTTP_RESULT_H_ */
713