1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     http_Connection.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: 30213 $
14  *---------------------------------------------------------------------------*/
15 
16 #ifndef NN_HTTP_HTTP_CONNECTION_H_
17 #define NN_HTTP_HTTP_CONNECTION_H_
18 
19 #include <nn/Result.h>
20 #include <nn/Handle.h>
21 #include <nn/http/http_Types.h>
22 #include <nn/http/http_Result.h>
23 #include <nn/http/http_ConnectionIpc.h>
24 #include <nn/http/http_CertStore.h>
25 #include <nn/http/http_ClientCert.h>
26 #include <nn/util/util_NonCopyable.h>
27 #include <nn/fnd/fnd_TimeSpan.h>
28 
29 #ifdef __cplusplus
30 
31 namespace nn {
32 namespace http {
33 
34 /*!
35   @brief HTTPの通信を表すクラスです。本クラスの1つのインスタンスは、「1つのURLに対する1つのHTTP通信」を担います。
36   @attention @ref Initialize 以外のI/Fは、@ref Initialize 成功前に実行した場合は、 「通信先未割り当て」を表すエラー(Description==ER_CONNECTION_NOT_INITIALIZEDのResult)を返します。
37 */
38 class Connection : private nn::util::NonCopyable<Connection>
39 {
40 public:
41     //----------------------------------------
42     //! @name 初期化/終了
43     //@{
44 
45     /*!
46       @brief        コンストラクタです。
47 
48                     初期化を行わないコンストラクタです。
49 
50                     別途 @ref Initialize を呼び出す必要があります。
51 
52      */
53     explicit Connection(void);
54 
55     /*!
56       @brief        コンストラクタです。
57 
58                     初期化を行うコンストラクタです。
59                     内部で@ref Initialize を呼び出します。
60                     (別途 @ref Initialize を呼び出す必要はありません。)
61                     引数は@ref Initialize と同様です。引数定義は、@ref Initializeを参照してください。
62 
63      */
64     explicit Connection(const char* pUrl, RequestMethod method = REQUEST_METHOD_GET, bool isUseDefaultProxy = true);
65 
66     /*!
67       @brief デストラクタです。
68     */
69     virtual ~Connection(void);
70 
71     /*!
72       @brief        Connection を初期化し、URL やメソッドを割り当てます。
73 
74       @param[in]    pUrl                通信先ホストのURLの文字列
75       @param[in]    method              HTTPリクエストのメソッド(未指定の場合、デフォルト値の @ref nn::http::REQUEST_METHOD_GET が選択されます。)
76       @param[in]    isUseDefaultProxy   機器に設定されているデフォルトのプロキシ設定を利用するか否か("利用する"はtrueです。
77                                         未指定の場合、デフォルト値のtrueが選択されます。)
78 
79       @return 関数の実行結果を返します。以下に挙げる Result を返します。<BR>
80       @retval ResultSuccess       処理に成功しました。
81       @retval ResultConnectionAddErr 「すでに機器が管理可能な最大数のHTTP通信が存在し、通信割り当てができません」を表すエラー。他のHTTP通信が終了すれば利用可能になりますので、時間を置くことで他モジュールのHTTP通信終了を待機したり、自身がインスタンス化している他の @ref Connection を終了(@ref Finalize )させてから、再実行してください。
82       @retval ResultRequestUrlErr  「指定されたURLは不正なものです」を表すエラー。正しい形式のURLで、再度本関数を実行してください。
83       @retval ResultAlreadyAssignHostErr  「すでに通信先ホストが割り当て済みです」を表すエラー。本関数がすでに実行されており、URLが設定済みのConnectionです。設定済みのURLで通信する場合は、そのまま利用してください。URLを変更したい場合は、@ref Finalize 実行後に、本関数を実行してください。
84       @retval ResultConnectionProcessMaxErr     1プロセスの使用できるコネクションの最大数を越えていることを表すエラー。他のHTTP通信が終了すれば利用可能になりますので、自身がインスタンス化している他の @ref Connection を終了(@ref Finalize )させてから、再実行してください。
85       @retval ResultIpcSessionMaxErr    同時に接続可能なIPCセッション数のセッションがすでに接続中を表すエラー。ある程度の時間を待機することで(その間に他のIPCセッションが成功すれば)、再実行が成功する場合があります。
86       @retval ResultInvalidParamErr   パラメータの不正を表すエラー。正しいパラメータを指定して、再度本関数を実行してください。
87       @retval ResultNotInitializedErr 「ライブラリが未初期化」を表すエラー。@ref nn::http::Initialize が実行されていないと、本ライブラリの関数はすべて利用することができません。
88       @retval 上記以外            想定外のエラー(エラー内容については、@ref http_Result.h を参照)。
89       @attention    機器が同時に管理できるHTTP通信の数は有限です。@ref Initialize 時にすでに管理可能な最大数のHTTP通信が存在した場合は、エラーが返ります。
90       @note         本関数では通信先の割り当てのみが実施され、ネットワークレベルの接続は行われません。
91                     ネットワーク通信が開始されるのは、@ref Connect / @ref ConnectAsync 呼び出し時となります。
92     */
93     nn::Result Initialize(const char* pUrl, RequestMethod method = REQUEST_METHOD_GET, bool isUseDefaultProxy = true);
94 
95     /*!
96       @brief        通信の終了処理を実施します。
97                     <BR/>
98                     @ref Initialize 後、通信先とのHTTP処理がすべて終了した後に、実行してください。<BR/>
99                     (@ref Initialize を実行していないインスタンスに対しては、実行する必要はありません。実行しても構いませんが、何も処理は行われません。)<BR/>
100                     ある @ref Connection インスタンスで本関数を実行した後は、そのインスタンス経由で通信先の情報を取得できなくなります。<BR/>
101       @return 関数の実行結果を返します。以下に挙げる Result を返します。<BR>
102       @retval ResultSuccess       処理に成功しました。
103       @retval ResultNotConnectedErr 通信先が割り当てられていないConnectionを表すエラー。@ref Initialize が成功していないConnectionに対する実行であり、何も処理は行われていません。
104       @retval ResultNotInitializedErr ライブラリが未初期化を表すエラー。@ref nn::http::Initialize が実行されていないと、本ライブラリの関数はすべて利用することができません。
105       @retval 上記以外            想定外のエラー(エラー内容については、@ref http_Result.h を参照)。
106       @attention    機器が同時に管理できるHTTP通信の数は有限です。使わなくなった通信に対しては必ずこの関数を実行して、他通信に管理リソースを回してください。
107     */
108     nn::Result Finalize(void);
109 
110     //@}
111 
112     //----------------------------------------
113     //! @name 通信設定
114     //@{
115 
116     /*!
117       @brief        接続に利用するプロキシサーバを設定します。
118 
119       @param[in]    pProxyName      プロキシサーバのホストサーバ名
120       @param[in]    port            プロキシサーバのポート番号
121       @param[in]    pUserName       プロキシサーバのBasic認証用ユーザー名
122       @param[in]    pPassword       プロキシサーバのBasic認証用パスワード
123       @return 関数の実行結果を返します。以下に挙げる Result を返します。<BR>
124       @retval ResultSuccess       処理に成功しました。
125       @retval ResultInvalidParamErr   パラメータの不正を表すエラー。正しいパラメータを指定して、再度本関数を実行してください。
126       @retval ResultNotConnectedErr 通信先が割り当てられていないConnectionを表すエラー。@ref Initialize が成功していないConnectionに対する実行であり、何も処理は行われていません。
127       @retval ResultNotInitializedErr ライブラリが未初期化を表すエラー。@ref nn::http::Initialize が実行されていないと、本ライブラリの関数はすべて利用することができません。
128       @retval 上記以外            想定外のエラー(エラー内容については、@ref http_Result.h を参照)。
129     */
130     nn::Result SetProxy(const char* pProxyName, u16 port, const char* pUserName, const char* pPassword);
131 
132     /*!
133       @brief        Basic認証に用いる情報を設定します。
134 
135       @param[in]    pUserName       Basic認証用ユーザー名
136       @param[in]    pPassword       Basic認証用パスワード
137       @return 関数の実行結果を返します。以下に挙げる Result を返します。<BR>
138       @retval ResultSuccess       処理に成功しました。
139       @retval ResultInvalidParamErr   パラメータの不正を表すエラー。正しいパラメータを指定して、再度本関数を実行してください。
140       @retval ResultNotConnectedErr 通信先が割り当てられていないConnectionを表すエラー。@ref Initialize が成功していないConnectionに対する実行であり、何も処理は行われていません。
141       @retval ResultNotInitializedErr ライブラリが未初期化を表すエラー。@ref nn::http::Initialize が実行されていないと、本ライブラリの関数はすべて利用することができません。
142       @retval 上記以外            想定外のエラー(エラー内容については、@ref http_Result.h を参照)。
143     */
144     nn::Result SetBasicAuthorization(const char* pUserName, const char* pPassword);
145 
146     /*!
147       @brief        通信で用いるSocketのTCP受信バッファサイズを設定する。
148 
149                     受信バッファは HTTP ライブラリ内部のメモリから割り当てられているため、デフォルト(32,640 Byte)よりも大きな値には
150                     設定しないでください。デフォルトでも通常の Socket よりも大きなバッファを使用しています。バッファサイズをデフォル
151                     トのサイズ以上に設定したい特別な理由がある場合は、弊社までご相談ください。
152       @param[in]    size             設定するTCP受信バッファサイズ
153       @return 関数の実行結果を返します。以下に挙げる Result を返します。<BR>
154       @retval ResultSuccess       処理に成功しました。
155       @retval ResultNotConnectedErr 通信先が割り当てられていないConnectionを表すエラー。@ref Initialize が成功していないConnectionに対する実行であり、何も処理は行われていません。
156       @retval ResultNotInitializedErr ライブラリが未初期化を表すエラー。@ref nn::http::Initialize が実行されていないと、本ライブラリの関数はすべて利用することができません。
157       @retval 上記以外            想定外のエラー(エラー内容については、@ref http_Result.h を参照)。
158     */
159     nn::Result SetSocketBufferSize(size_t size);
160 
161     //@}
162 
163     //----------------------------------------
164     //! @name 通信制御
165     //@{
166 
167     /*!
168       @brief        通信先との接続を開始します。
169                     (同期版です。つまり「すでに機器が最大数のHTTP通信を行っている場合は、他のHTTP通信が終わるまでブロックします」。)
170       @return 関数の実行結果を返します。以下に挙げる Result を返します。<BR>
171       @retval ResultSuccess       処理に成功しました。
172       @retval ResultConnectionCanceledErr       「通信はキャンセルされました」を表すエラー。再度通信を行うには、@ref Connection の @ref Finalize を実行後、@ref Initialize からやり直してください。
173       @retval ResultNotConnectedErr 通信先が割り当てられていないConnectionを表すエラー。@ref Initialize が成功していないConnectionに対する実行であり、何も処理は行われていません。
174       @retval ResultNotInitializedErr ライブラリが未初期化を表すエラー。@ref nn::http::Initialize が実行されていないと、本ライブラリの関数はすべて利用することができません。
175       @retval 上記以外            想定外のエラー(エラー内容については、@ref http_Result.h を参照)。
176     */
177     nn::Result Connect(void);
178 
179     /*!
180       @brief        通信先との接続を開始します。
181                     (非同期版です。つまり「すでに機器が最大数のHTTP通信を行っている場合は、エラーが返ります。」)
182       @retval ResultSuccess       処理に成功しました。
183       @retval ResultMessageSendToListenThreadErr 「すでに機器が最大数のHTTP通信を行っています」を表すエラー。
184       @retval ResultConnectionCanceledErr       「通信はキャンセルされました」を表すエラー。再度通信を行うには、@ref Connection の @ref Finalize を実行後、@ref Initialize からやり直してください。
185       @retval ResultNotConnectedErr 通信先が割り当てられていないConnectionを表すエラー。@ref Initialize が成功していないConnectionに対する実行であり、何も処理は行われていません。
186       @retval ResultNotInitializedErr ライブラリが未初期化を表すエラー。@ref nn::http::Initialize が実行されていないと、本ライブラリの関数はすべて利用することができません。
187       @retval 上記以外            想定外のエラー(エラー内容については、@ref http_Result.h を参照)。
188     */
189     nn::Result ConnectAsync(void);
190 
191     /*!
192       @brief        接続をキャンセルします。
193                     通信がすでに終了している場合(エラー終了を含む)や、キャンセルされている場合は、何も処理を行わずに、ResultSuccessを返します。
194       @return 関数の実行結果を返します。以下に挙げる Result を返します。<BR>
195       @retval ResultSuccess       処理に成功しました。
196       @retval ResultNotConnectedErr 通信先が割り当てられていないConnectionを表すエラー。@ref Initialize が成功していないConnectionに対する実行であり、何も処理は行われていません。
197       @retval ResultNotInitializedErr ライブラリが未初期化を表すエラー。@ref nn::http::Initialize が実行されていないと、本ライブラリの関数はすべて利用することができません。
198       @retval 上記以外            想定外のエラー(エラー内容については、@ref http_Result.h を参照)。
199     */
200     nn::Result Cancel(void);
201 
202     /*!
203       @brief        接続の状況を取得します。(取得される状況の種類については、@ref nn::http::Status の定義を参照してください。)
204 
205       @param[out]   pStatusBuf  接続状況を格納するためのバッファ
206       @return 関数の実行結果を返します。以下に挙げる Result を返します。<BR>
207       @retval ResultSuccess       処理に成功しました。
208       @retval ResultNotConnectedErr 通信先が割り当てられていないConnectionを表すエラー。@ref Initialize が成功していないConnectionに対する実行であり、何も処理は行われていません。
209       @retval ResultNotInitializedErr ライブラリが未初期化を表すエラー。@ref nn::http::Initialize が実行されていないと、本ライブラリの関数はすべて利用することができません。
210       @retval 上記以外            想定外のエラー(エラー内容については、@ref http_Result.h を参照)。
211     */
212     nn::Result GetStatus(Status* pStatusBuf) const;
213 
214     /*!
215       @brief        接続中に発生したエラーを取得します。(取得値は最後に発生したエラーとなります。取得される状況の種類については、@ref nn::http::ResultCodeの定義を参照してください。)
216       @param[out]   pResultCodeBuf  エラーを格納するためのバッファ
217       @return 関数の実行結果を返します。以下に挙げる Result を返します。<BR>
218       @retval ResultSuccess       処理に成功しました。
219       @retval ResultConnectionCanceledErr 「通信はキャンセルされました」を表すエラー。pResultCodeBufには何も設定されません。再度通信を行うには、@ref Connection の @ref Finalize を実行後、@ref Initialize からやり直してください。
220       @retval ResultNotConnectedErr 通信先が割り当てられていないConnectionを表すエラー。@ref Initialize が成功していないConnectionに対する実行であり、何も処理は行われていません。
221       @retval ResultNotInitializedErr ライブラリが未初期化を表すエラー。@ref nn::http::Initialize が実行されていないと、本ライブラリの関数はすべて利用することができません。
222       @retval 上記以外            想定外のエラー(エラー内容については、@ref http_Result.h を参照)。
223     */
224     nn::Result GetError(ResultCode* pResultCodeBuf) const;
225 
226     /*!
227       @brief        HTTPレスポンスのメッセージボディ受信の進捗状況を取得します。
228 
229       @param[out]   pReceivedLen    「メッセージボディの受信済みデータサイズ」を格納するバッファ
230       @param[out]   pContentLen     「メッセージボディの受信予定総データサイズ」を格納するバッファ
231                                     (HTTPレスポンスのContent-Lengthの値です。Content-Lengthが指定されていない場合は、0が返ります。)
232       @return 関数の実行結果を返します。以下に挙げる Result を返します。<BR>
233       @retval ResultSuccess       処理に成功しました。
234       @retval ResultInvalidParamErr   パラメータの不正を表すエラー。正しいパラメータを指定して、再度本関数を実行してください。
235       @retval ResultNotConnectedErr 通信先が割り当てられていないConnectionを表すエラー。@ref Initialize が成功していないConnectionに対する実行であり、何も処理は行われていません。
236       @retval ResultNotInitializedErr ライブラリが未初期化を表すエラー。@ref nn::http::Initialize が実行されていないと、本ライブラリの関数はすべて利用することができません。
237       @retval 上記以外            想定外のエラー(エラー内容については、@ref http_Result.h を参照)。
238     */
239     nn::Result GetProgress(size_t* pReceivedLen, size_t* pContentLen) const;
240 
241     //@}
242 
243     //----------------------------------------
244     //! @name レスポンス受信
245     //@{
246 
247     /*!
248       @brief        HTTPレスポンスを読み取ります。
249 
250                     引数で指定したバッファに、メッセージボディのデータが格納されます。<BR/>
251                     メッセージボディがバッファよりも大きい場合は、バッファに入るだけデータを格納し、エラー(Description==  @ref ER_RES_BODYBUF_SHORTAGE)を返します。<BR/>
252                     その後再度 @ref Read を実行することで、前回の @ref Read でバッファに格納したデータの次のデータから、読み取りを継続できます。<BR/>
253                     すべてのメッセージボディデータの受信が完了すると、SuccessのResultが返ります。<BR/>
254         <BR/>
255                     ユーザーが指定したバッファに格納されるメッセージボディに対して、以下のデータはライブラリ側が保持しています。<BR/>
256                     これらデータの取得には、それぞれ専用のAPIを使用してください。<BR/>
257                     ・レスポンスステータス - @ref GetStatusCode                             <BR/>
258                     ・メッセージヘッダ         - @ref GetHeaderField / @ref GetHeaderAll        <BR/>
259        <BR/>
260                     ※@ref Read の実施前にこれらAPIを利用した場合、ヘッダ部受信完了までこれら関数はブロックします。 <BR/>
261                     ※@ref Read の成功完了後は、ヘッダ部受信はすでに完了しているため、これら関数は結果をすぐに返します。 <BR/>
262                     ※@ref Read の返値のエラーは、HTTPレスポンスの受信自体に失敗したことを示します。 <BR/>
263                                        そのため、受信には成功し、メッセージにて通信エラー(認証失敗など)が通知された場合では、@ref Read の戻り値は成功となります。 <BR/>
264                                        このようなエラーを確認したい場合は、@ref GetStatusCode で取得されるステータスコードを使用してください。 <BR/>
265                     ※タイムアウト付きの@ref Read と異なり、この関数はタイムアウトしません。つまり処理が終了するまでは、関数から戻りません。<BR/>
266                                        そのため、例えば通信速度の低い環境で使用した場合には、処理が終了(「HTTPレスポンスの受信が完了する」か「バッファが一杯になる」)して関数から戻るまで、長時間かかることが予想されます。<BR/>
267 
268       @param[out]   pBodyBuf        HTTPレスポンスのメッセージボディを格納するバッファ
269       @param[in]    bufLen          pBodyBufのサイズ
270       @return 関数の実行結果を返します。以下に挙げる Result を返します。<BR>
271       @retval ResultSuccess       処理に成功しました。
272       @retval ResultBodyBufShortage       「メッセージボディがバッファよりも大きく、すべて読み取れていません」を表すResult。
273       @retval ResultSocketKeepAliveDisconnected キープアライブ通信がサーバ側から切断されたことを表すエラー。キープアライブ通信がサーバ側から切断された場合、通常はHTTPライブラリ内で自動再接続が実施されますが、@ref SetLazyPostDataSetting で遅延POST設定がなされている場合、POSTデータ再送のために、HTTPライブラリは自動再接続を行わず、このエラーを返します。再度通信を行うには、@ref Connection の @ref Finalize を実行後、@ref Initialize からやり直してください。
274       @retval ResultRequestHeaderErr       不正なHTTPヘッダが受信されたことを表すエラー。
275       @retval ResultSocketSendErr          ソケットデータ送信失敗を表すエラー。サーバ側が通信を切断したケースなどが考えられます。再度通信を行うには、@ref Connection の @ref Finalize を実行後、@ref Initialize からやり直してください。
276       @retval ResultSocketReceiveErr       ソケットデータ受信失敗を表すエラー。サーバ側が通信を切断したケースなどが考えられます。再度通信を行うには、@ref Connection の @ref Finalize を実行後、@ref Initialize からやり直してください。
277       @retval ResultSocketConnectErr       ソケット接続失敗を表すエラー。サーバが存在しなかったり、停止しているケースなどが考えられます。再度通信を行うには、@ref Connection の @ref Finalize を実行後、@ref Initialize からやり直してください。
278       @retval ResultDnsResolutionErr      「URLで指定されたホスト名に対する名前解決が失敗しました」を表すエラー。
279       @retval ResultConnectionCanceledErr       「通信はキャンセルされました」を表すエラー。再度通信を行うには、@ref Connection の @ref Finalize を実行後、@ref Initialize からやり直してください。
280       @retval ResultInvalidParamErr   パラメータの不正を表すエラー。正しいパラメータを指定して、再度本関数を実行してください。
281       @retval ResultNotConnectedErr 通信先が割り当てられていないConnectionを表すエラー。@ref Initialize が成功していないConnectionに対する実行であり、何も処理は行われていません。
282       @retval ResultNotInitializedErr ライブラリが未初期化を表すエラー。@ref nn::http::Initialize が実行されていないと、本ライブラリの関数はすべて利用することができません。
283       @retval 上記以外            想定外のエラー(エラー内容については、@ref http_Result.h を参照)。
284     */
285     nn::Result Read(u8* pBodyBuf, size_t bufLen);
286 
287     /*!
288       @brief        タイムアウト付きの@ref Read です。
289 
290                     タイムアウトが指定できること以外は、タイムアウト指定無しの@ref Read と同機能のAPIです。機能の詳細はタイムアウト無しAPIのリファレンスを参照してください。<BR/>
291                     タイムアウト時間以内に「HTTPレスポンスの受信が完了する」、「バッファが一杯になる」のいずれの状態にもならなかった場合、@ref ResultTimeout が返ります。<BR/>
292                     @ref ResultTimeout()が返った場合、そのコネクションは自動的にキャンセルされた状態になっています。(つまり@ref Cancel  が内部的に実施されています。)<BR/>
293 
294       @param[out]   pBodyBuf        HTTPレスポンスのメッセージボディを格納するバッファ
295       @param[in]    bufLen          pBodyBufのサイズ
296       @param[in]    timeout         タイムアウト時間
297       @return 関数の実行結果を返します。以下に挙げる Result を返します。<BR>
298       @retval ResultSuccess       処理に成功しました。
299       @retval ResultTimeout       タイムアウトを表すエラー。
300       @retval 上記以外            タイムアウト指定なしの @ref Read と同様です。
301     */
302     nn::Result Read(u8* pBodyBuf, size_t bufLen, const nn::fnd::TimeSpan& timeout);
303 
304 
305     /*!
306       @brief        受信したHTTPレスポンスのメッセージヘッダから、指定したラベルに一致するフィールドの値を取得します。
307 
308                     ヘッダ部受信処理終了まで、本APIはブロックします。受信処理が完了するのは、以下の条件が満たされた場合です。<BR/>
309                      ・全ヘッダデータの受信が完了した<BR/>
310                      ・キャンセルが実行された<BR/>
311                      ・通信エラーが発生した(DNS名前解決失敗時など)<BR/>
312                     他APIでヘッダ部受信処理終了がすでに完了している場合は、本APIはすぐに応答を返します。<BR/>
313         <BR/>
314                     ※pFieldBufのサイズがフィールド値のサイズよりも小さい場合は、pFieldBufに格納できるだけデータを格納し、pFieldLengthCourierにはフィールド値のサイズを格納します。<BR/>
315                     ※pFieldBuf==NULLまたはbufSize==0の場合、pFieldLengthCourier!=NULLであれば、フィールドの長さがpFieldLengthCourierに格納されます。<BR/>
316                     ※タイムアウト付きの@ref GetHeaderField と異なり、この関数はタイムアウトしません。つまり処理が終了するまでは、関数から戻りません。<BR/>
317                                        そのため、例えば通信速度の低い環境で使用した場合には、処理が終了して関数から戻るまで、長時間かかることが予想されます。<BR/>
318 
319       @param[in]    pLabel          ラベル名
320       @param[out]   pFieldBuf       フィールド値を格納するバッファ
321       @param[in]    bufSize         pFieldBufのデータサイズ
322       @param[out]   pFieldLengthCourier フィールド値のデータサイズを格納するバッファ(フィールド値のデータサイズを必要としない場合は、省略可)
323       @return 関数の実行結果を返します。以下に挙げる Result を返します。<BR>
324       @retval ResultSuccess       処理に成功しました。
325       @retval ResultSocketKeepAliveDisconnected キープアライブ通信がサーバ側から切断されたことを表すエラー。このケースでは通常はHTTPライブラリ内で自動再接続が実施されますが、@ref SetLazyPostDataSetting で遅延POST設定がなされている場合、POSTデータ再送のためにHTTPライブラリは自動再接続を行わずにこのエラーを返します。再度通信を行うには、@ref Connection の @ref Finalize を実行後、@ref Initialize からやり直してください。
326       @retval ResultRequestHeaderErr       不正なHTTPヘッダが受信されたことを表すエラー。
327       @retval ResultSocketSendErr          ソケットデータ送信失敗を表すエラー。サーバ側が通信を切断したケースなどが考えられます。再度通信を行うには、@ref Connection の @ref Finalize を実行後、@ref Initialize からやり直してください。
328       @retval ResultSocketReceiveErr       ソケットデータ受信失敗を表すエラー。サーバ側が通信を切断したケースなどが考えられます。再度通信を行うには、@ref Connection の @ref Finalize を実行後、@ref Initialize からやり直してください。
329       @retval ResultSocketConnectErr       ソケット接続失敗を表すエラー。サーバが存在しなかったり、停止しているケースなどが考えられます。再度通信を行うには、@ref Connection の @ref Finalize を実行後、@ref Initialize からやり直してください。
330       @retval ResultDnsResolutionErr      「URLで指定されたホスト名に対する名前解決が失敗しました」を表すエラー。
331       @retval ResultConnectionCanceledErr 「通信はキャンセルされました」を表すエラー。再度通信を行うには、@ref Connection の @ref Finalize を実行後、@ref Initialize からやり直してください。
332       @retval ResultInvalidParamErr   パラメータの不正を表すエラー。正しいパラメータを指定して、再度本関数を実行してください。
333       @retval ResultNotConnectedErr 通信先が割り当てられていないConnectionを表すエラー。@ref Initialize が成功していないConnectionに対する実行であり、何も処理は行われていません。
334       @retval ResultNotInitializedErr ライブラリが未初期化を表すエラー。@ref nn::http::Initialize が実行されていないと、本ライブラリの関数はすべて利用することができません。
335       @retval 上記以外            想定外のエラー(エラー内容については、@ref http_Result.h を参照)。
336     */
337     nn::Result GetHeaderField(const char* pLabel, char* pFieldBuf, size_t bufSize, size_t* pFieldLengthCourier = NULL) const;
338 
339     /*!
340       @brief        タイムアウト付きの@ref GetHeaderField です。
341 
342                     タイムアウトが指定できること以外は、タイムアウト指定無しの@ref GetHeaderField と同機能のAPIです。機能の詳細はタイムアウト無しAPIのリファレンスを参照してください。<BR/>
343                     タイムアウト時間以内にHTTPレスポンスヘッダの受信が完了しなかった場合、@ref ResultTimeout が返ります。<BR/>
344                     @ref ResultTimeout()が返った場合、そのコネクションは自動的にキャンセルされた状態になっています。(つまり@ref Cancel  が内部的に実施されています。)<BR/>
345 
346       @param[in]    pLabel          ラベル名
347       @param[out]   pFieldBuf       フィールド値を格納するバッファ
348       @param[in]    bufSize         pFieldBufのデータサイズ
349       @param[in]    timeout         タイムアウト時間
350       @param[out]   pFieldLengthCourier フィールド値のデータサイズを格納するバッファ(フィールド値のデータサイズを必要としない場合は、省略可)
351       @return 関数の実行結果を返します。以下に挙げる Result を返します。<BR>
352       @retval ResultSuccess       処理に成功しました。
353       @retval ResultTimeout       タイムアウトを表すエラー。
354       @retval 上記以外            タイムアウト指定なしの @ref GetHeaderField と同様です。
355     */
356     nn::Result GetHeaderField(const char* pLabel, char* pFieldBuf, size_t bufSize, const nn::fnd::TimeSpan& timeout, size_t* pFieldLengthCourier = NULL) const;
357 
358     /*!
359       @brief        受信したHTTPレスポンスのメッセージヘッダを取得します。
360 
361                     ヘッダ部受信処理終了まで、本APIはブロックします。この仕様に関する詳細は @ref GetHeaderField の説明を参照してください。<BR/>
362                     ※pHeaderBufのサイズがヘッダのサイズよりも小さい場合は、pHeaderBufに格納できるだけデータを格納し、pLengthCourierにはヘッダのサイズを格納します。<BR/>
363                     ※pHeaderBuf==NULLまたはbufSize==0の場合、pLengthCourier!=NULLであれば、フィールドの長さがpLengthCourierに格納されます。 <BR/>
364                     ※タイムアウト付きの@ref GetHeaderAll と異なり、この関数はタイムアウトしません。つまり処理が終了するまでは、関数から戻りません。<BR/>
365                                        そのため、例えば通信速度の低い環境で使用した場合には、処理が終了して関数から戻るまで、長時間かかることが予想されます。<BR/>
366       @param[out]   pHeaderBuf      メッセージヘッダを格納するバッファ
367       @param[in]    bufSize         pHeaderBufのデータサイズ
368       @param[out]   pLengthCourier  メッセージヘッダサイズを格納するバッファ(メッセージヘッダサイズを必要としない場合は、省略可)
369       @return 関数の実行結果を返します。 Result 値は、タイムアウト引数のない @ref GetHeaderField と同様です。<BR>
370     */
371     nn::Result GetHeaderAll(char* pHeaderBuf, size_t bufSize, size_t* pLengthCourier = NULL) const;
372 
373     /*!
374       @brief        タイムアウト付きの@ref GetHeaderAll です。
375 
376                     タイムアウトが指定できること以外は、タイムアウト指定無しの@ref GetHeaderAll と同機能のAPIです。機能の詳細はタイムアウト無しAPIのリファレンスを参照してください。<BR/>
377                     タイムアウト時間以内にHTTPレスポンスヘッダの受信が完了しなかった場合、@ref ResultTimeout が返ります。<BR/>
378                     @ref ResultTimeout()が返った場合、そのコネクションは自動的にキャンセルされた状態になっています。(つまり@ref Cancel  が内部的に実施されています。)<BR/>
379 
380       @param[out]   pHeaderBuf      メッセージヘッダを格納するバッファ
381       @param[in]    bufSize         pHeaderBufのデータサイズ
382       @param[in]    timeout         タイムアウト時間
383       @param[out]   pLengthCourier  メッセージヘッダサイズを格納するバッファ(メッセージヘッダサイズを必要としない場合は、省略可)
384       @return 関数の実行結果を返します。 Result 値は、タイムアウト引数のある @ref GetHeaderField と同様です。<BR>
385     */
386     nn::Result GetHeaderAll(char* pHeaderBuf, size_t bufSize, const nn::fnd::TimeSpan& timeout, size_t* pLengthCourier = NULL) const;
387 
388     /*!
389       @brief        受信したHTTPレスポンスのステータスコードを取得します。
390 
391                     ヘッダ部受信処理終了まで、本APIはブロックします。この仕様に関する詳細は @ref GetHeaderField の説明を参照してください。<BR/>
392                     ※タイムアウト付きの@ref GetStatusCode と異なり、この関数はタイムアウトしません。つまり処理が終了するまでは、関数から戻りません。<BR/>
393                                        そのため、例えば通信速度の低い環境で使用した場合には、処理が終了して関数から戻るまで、長時間かかることが予想されます。<BR/>
394       @param[out]   pStatusCodeCourier  ステータスコードを格納するバッファ
395       @return 関数の実行結果を返します。 Result 値は、タイムアウト引数のない @ref GetHeaderField と同様です。<BR>
396     */
397     nn::Result GetStatusCode(s32* pStatusCodeCourier) const;
398 
399     /*!
400       @brief        タイムアウト付きの@ref GetStatusCode です。
401 
402                     タイムアウトが指定できること以外は、タイムアウト指定無しの@ref GetStatusCode と同機能のAPIです。機能の詳細はタイムアウト無しAPIのリファレンスを参照してください。<BR/>
403                     タイムアウト時間以内にHTTPレスポンスヘッダの受信が完了しなかった場合、@ref ResultTimeout が返ります。<BR/>
404                     @ref ResultTimeout()が返った場合、そのコネクションは自動的にキャンセルされた状態になっています。(つまり@ref Cancel  が内部的に実施されています。)<BR/>
405 
406       @param[out]   pStatusCodeCourier  ステータスコードを格納するバッファ
407       @param[in]    timeout         タイムアウト時間
408       @return 関数の実行結果を返します。 Result 値は、タイムアウト引数のある @ref GetHeaderField と同様です。<BR>
409     */
410     nn::Result GetStatusCode(s32* pStatusCodeCourier, const nn::fnd::TimeSpan& timeout) const;
411 
412     //@}
413 
414 
415     //----------------------------------------
416     //! @name 送信データ設定(HTTPリクエストヘッダ、POST)
417     //@{
418 
419     /*!
420       @brief        HTTPリクエストで送信するメッセージヘッダのフィールドを追加します。
421 
422       @param[in]    pLabel          フィールドのラベル名
423       @param[in]    pValue          フィールドの内容
424       @return 関数の実行結果を返します。以下に挙げる Result を返します。<BR>
425       @retval ResultSuccess       処理に成功しました。
426       @retval ResultConnectionStatusErr 不正状態を表すエラー。通信がこの関数を実行できない状態になっています。(例えばすでに「通信中」状態の場合、このエラーが返ります。本関数は @ref Connect 実行前に実行しなければいけません。)
427       @retval ResultInvalidParamErr   パラメータの不正を表すエラー。正しいパラメータを指定して、再度本関数を実行してください。
428       @retval ResultNotConnectedErr 通信先が割り当てられていないConnectionを表すエラー。@ref Initialize が成功していないConnectionに対する実行であり、何も処理は行われていません。
429       @retval ResultNotInitializedErr ライブラリが未初期化を表すエラー。@ref nn::http::Initialize が実行されていないと、本ライブラリの関数はすべて利用することができません。
430       @retval 上記以外            想定外のエラー(エラー内容については、@ref http_Result.h を参照)。
431     */
432     nn::Result AddHeaderField(const char* pLabel, const char* pValue);
433 
434 
435     /*!
436       @brief        POSTデータの @ref Connect 前設定用API(ASCII文字列用)です。
437 
438                     HTTPリクエストで送信するPOSTデータ(ASCII文字列)を追加します。<BR/>
439                     このAPIは @ref Connect 実行前の設定に使用します。設定後の @ref Connect 実行によって、POSTデータが送信されます。<BR/>
440                     同じラベルのデータが先に追加されていた場合は、データを更新します。(つまり前に追加したデータを削除してから、追加します。)<BR/>
441                     <BR/>
442                     すべてのPOSTデータが @ref AddPostDataAscii のみで設定された場合、送信データはラベル、データ共にエンコードされた上で送信されます。<BR/>
443                     (HTTPヘッダのContent-Typeには"x-www-form-urlencoded"が設定されます。)<BR/>
444                     <BR/>
445                     一つでも @ref AddPostDataBinary で設定したデータがある場合は、POSTデータはすべて、エンコードされずに(そのまま)送信されます。<BR/>
446                     (HTTPヘッダのContent-Typeには"multipart/form-data"が設定されます。)<BR/>
447 
448       @param[in]    pLabel          データのラベル名
449       @param[in]    pValue          データの内容
450       @return 関数の実行結果を返します。以下に挙げる Result を返します。<BR>
451       @retval ResultSuccess       処理に成功しました。
452       @retval ResultPostAddedAnotherErr すでにPOSTデータが設定されています。別タイプのPOSTデータがすでに設定されている場合、@ref SetLazyPostDataSetting でPOSTデータ遅延設定モードに設定されている場合に返ります。本関数はこれらPOSTデータ設定と競合しないように使用してください。(POSTデータを再設定するには、@ref Connectionの @ref Finalize を実施後、@ref Initialize からやり直してください。)
453       @retval ResultOutOfMemoryErr @ref nn::http::Initialize で設定したバッファから、POSTデータ用バッファを確保できませんでした。同時に登録するPOSTデータの合計サイズが、@ref nn::http::Initialize で設定したバッファのサイズ以下になるように調整してください。
454       @retval ResultConnectionStatusErr 不正状態を表すエラー。通信がこの関数を実行できない状態になっています。(例えばすでに「通信中」状態の場合、このエラーが返ります。本関数は @ref Connect 実行前に実行しなければいけません。)
455       @retval ResultInvalidParamErr   パラメータの不正を表すエラー。正しいパラメータを指定して、再度本関数を実行してください。
456       @retval ResultNotConnectedErr 通信先が割り当てられていないConnectionを表すエラー。@ref Initialize が成功していないConnectionに対する実行であり、何も処理は行われていません。
457       @retval ResultNotInitializedErr ライブラリが未初期化を表すエラー。@ref nn::http::Initialize が実行されていないと、本ライブラリの関数はすべて利用することができません。
458       @retval 上記以外            想定外のエラー(エラー内容については、@ref http_Result.h を参照)。
459     */
460     nn::Result AddPostDataAscii(const char* pLabel, const char* pValue);
461 
462     /*!
463       @brief        POSTデータの @ref Connect 前設定用API(バイナリデータ用)です。
464 
465                     HTTPリクエストで送信するPOSTデータ(バイナリデータ)を追加します。<BR/>
466                     このAPIは @ref Connect 実行前の設定に使用します。<BR/>
467                     設定後の @ref Connect実行によって、POSTデータが送信されます。<BR/>
468                     同じラベルのデータが先に追加されていた場合は、データを更新します。<BR/>
469                     (つまり前に追加したデータを削除してから、追加します。)<BR/>
470                    <BR/>
471                     @ref AddPostDataBinary で設定したデータがある場合は、POSTデータはすべて、エンコードされずに(そのまま)送信されます。<BR/>
472                     (HTTPヘッダのContent-Typeには"multipart/form-data"が設定されます。)<BR/>
473 
474       @param[in]    pLabel          データのラベル名
475       @param[in]    pValue          データの内容
476       @param[in]    valueSize       pValueのデータサイズ
477       @return 関数の実行結果を返します。以下に挙げる Result を返します。<BR>
478       @retval ResultSuccess       処理に成功しました。
479       @retval ResultPostAddedAnotherErr すでにPOSTデータが設定されています。別タイプのPOSTデータがすでに設定されている場合、@ref SetLazyPostDataSetting でPOSTデータ遅延設定モードに設定されている場合に返ります。本関数はこれらPOSTデータ設定と競合しないように使用してください。(POSTデータを再設定するには、@ref Connectionの @ref Finalize を実施後、@ref Initialize からやり直してください。)
480       @retval ResultOutOfMemoryErr @ref nn::http::Initialize で設定したバッファから、POSTデータ用バッファを確保できませんでした。同時に登録するPOSTデータの合計サイズが、@ref nn::http::Initialize で設定したバッファのサイズ以下になるように調整してください。
481       @retval ResultConnectionStatusErr 不正状態を表すエラー。通信がこの関数を実行できない状態になっています。(例えばすでに「通信中」状態の場合、このエラーが返ります。本関数は @ref Connect 実行前に実行しなければいけません。)
482       @retval ResultInvalidParamErr   パラメータの不正を表すエラー。正しいパラメータを指定して、再度本関数を実行してください。
483       @retval ResultNotConnectedErr 通信先が割り当てられていないConnectionを表すエラー。@ref Initialize が成功していないConnectionに対する実行であり、何も処理は行われていません。
484       @retval ResultNotInitializedErr ライブラリが未初期化を表すエラー。@ref nn::http::Initialize が実行されていないと、本ライブラリの関数はすべて利用することができません。
485       @retval 上記以外            想定外のエラー(エラー内容については、@ref http_Result.h を参照)。
486     */
487     nn::Result AddPostDataBinary(const char* pLabel, const void* pValue, size_t valueSize);
488 
489     /*!
490       @brief        POSTデータの @ref Connect 前設定用API(Rawデータ用)です。
491 
492                     HTTPリクエストで送信するPOSTデータすべてを、一括で設定します。<BR/>
493                     バイナリ形式ですが、POSTデータ全体を直接Rawデータで設定します。<BR/>
494                     (他のAPIは、POSTデータのラベル部とバリュー部を設定します。)<BR/>
495                     <BR/>
496                     このAPIは @ref Connect 実行前の設定に使用します。<BR/>
497                     設定後の @ref Connect 実行によって、POSTデータが送信されます。<BR/>
498                     <BR/>
499                     POSTデータ全体を設定しますので、本APIによる設定以降にPOSTデータ部分設定API(@ref AddPostDataAscii と @ref AddPostDataBinary)<BR/>
500                     を呼び出すと、エラー(Descriptionは @ref nn::http::ER_POST_ADDED_ANOTHER)が返ります。<BR/>
501                     本APIによる設定以降に、再び本APIでRawデータを設定した場合は、前回設定したデータは破棄され、設定データが更新されます。<BR/>
502 
503       @param[in]    pValue          データの内容
504       @param[in]    valueSize       pValueのデータサイズ
505       @return 関数の実行結果を返します。以下に挙げる Result を返します。<BR>
506       @retval ResultSuccess       処理に成功しました。
507       @retval ResultPostAddedAnotherErr すでにPOSTデータが設定されています。別タイプのPOSTデータがすでに設定されている場合、RawタイプのPOSTデータがすでに登録されている場合、@ref SetLazyPostDataSetting でPOSTデータ遅延設定モードに設定されている場合に返ります。本関数はこれらPOSTデータ設定と競合しないように使用してください。(POSTデータを再設定するには、@ref Connectionの @ref Finalize を実施後、@ref Initialize からやり直してください。)
508       @retval ResultOutOfMemoryErr @ref nn::http::Initialize で設定したバッファから、POSTデータ用バッファを確保できませんでした。同時に登録するPOSTデータの合計サイズが、@ref nn::http::Initialize で設定したバッファのサイズ以下になるように調整してください。
509       @retval ResultConnectionStatusErr 不正状態を表すエラー。通信がこの関数を実行できない状態になっています。(例えばすでに「通信中」状態の場合、このエラーが返ります。本関数は @ref Connect 実行前に実行しなければいけません。)
510       @retval ResultInvalidParamErr   パラメータの不正を表すエラー。正しいパラメータを指定して、再度本関数を実行してください。
511       @retval ResultNotConnectedErr 通信先が割り当てられていないConnectionを表すエラー。@ref Initialize が成功していないConnectionに対する実行であり、何も処理は行われていません。
512       @retval ResultNotInitializedErr ライブラリが未初期化を表すエラー。@ref nn::http::Initialize が実行されていないと、本ライブラリの関数はすべて利用することができません。
513       @retval 上記以外            想定外のエラー(エラー内容については、@ref http_Result.h を参照)。
514     */
515     nn::Result AddPostDataRaw(const void* pValue, size_t valueSize);
516 
517     /*!
518       @brief        POSTデータ遅延設定モード(@ref Connect 後のデータ指定モード)に設定します。
519 
520                     この関数を実行すると、POSTデータの遅延設定(@ref Connect / @ref ConnectAsync 実行後に、SendPostData××()によってデータを設定)が可能となります。<BR/>
521                     <BR/>
522                     POSTデータ遅延設定モードでは、@ref Connect / @ref ConnectAsync 実行後、SendPostData××()は何回実行しても構いません。<BR/>
523                     POSTデータは、SendPostData××()の同期処理としてそのまま送信されます。よって送信が完了するまで、SendPostData××()はブロックします。<BR/>
524                     すべてのPOSTデータの設定が完了したら、@ref NotifyFinishSendPostData を実行しなければなりません。<BR/>
525                     <BR/>
526                     NotifyFinishSendPostData()の実行後、HTTPレスポンスの受信に移行します。<BR/>
527 
528       @param[in]    dataType        POSTデータのタイプです。
529 
530                                      @ref nn::http::POST_DATA_TYPE_URLENCODE : 設定したデータは、ASCIIデータの場合(つまり@ref SendPostDataAscii を使った場合)には、データがURLエンコードされて送信されます。<BR/>
531                                     使用できるSendPostData××()は、@ref SendPostDataAscii と @ref SendPostDataBinary です。<BR/>
532                                     @ref SendPostDataAscii を使った場合は、URLエンコードされた[<ラベル名>=<データ内容>]のデータが送信されます。<BR/>
533                                     @ref SendPostDataBinary を使った場合は、URLエンコードされない[<ラベル名>=<データ内容>]のデータが送信されます。<BR/>
534                                     1回のSendPostData××()で設定されたラベルとデータは、Chunkedデータの一単位としてまとめて送信されます。<BR/>
535                                     <BR/>
536                                     <BR/>
537                                     @ref nn::http::POST_DATA_TYPE_MULTIPART : 設定したデータは、MIMEのマルチパートデータとして送信されます。<BR/>
538                                     使用できるSendPostData××()は、@ref SendPostDataAscii と @ref SendPostDataBinaryです。<BR/>
539                                     1回のSendPostData××()で設定されたラベルとデータは、boundaryデータやヘッダフィールドが先頭に付与されて、Chunkedデータの一単位としてまとめて送信されます。<BR/>
540                                     設定したラベルデータは、Content-Dispositionフィールドのnameとして設定されます。<BR/>
541                                     (すなわち"Content-Disposition: form-data; name=[ラベル]"というヘッダフィールドが、Chunkedデータのboundaryデータの後に付与されます。)<BR/>
542                                     @ref SendPostDataBinaryでラベルとデータを設定した場合は、Chunkedデータのboundaryデータの後に、Content-Typeフィールドが付与されます。<BR/>
543                                     (フィールド内容は"Content-Type: application/octet-stream\\r\\nContent-Transfer-Encoding: binary\\r\\n"となります。<BR/>
544                                     @ref SendPostDataAscii で設定したデータのChunkedデータには、このフィールドは付与されません。)<BR/>
545                                     <BR/>
546                                     <BR/>
547                                     @ref nn::http::POST_DATA_TYPE_RAW       : 設定したデータは、そのまま送信されます。使用できるSendPostData××()は、@ref SendPostDataRaw のみです。<BR/>
548                                     1回の @ref SendPostDataRaw で設定されたデータは、Chunkedデータの一単位としてまとめて送信されます。
549 
550       @return 関数の実行結果を返します。以下に挙げる Result を返します。<BR>
551       @retval ResultSuccess       処理に成功しました。
552       @retval ResultPostAddedAnotherErr すでにPOSTデータが @ref Connect 前設定APIで設定されています。本関数はこれらPOSTデータ設定と競合しないように使用してください。(POSTデータを再設定するには、@ref Connectionの @ref Finalize を実施後、@ref Initialize からやり直してください。)
553       @retval ResultConnectionStatusErr 不正状態を表すエラー。通信がこの関数を実行できない状態になっています。(例えばすでに「通信中」状態の場合、このエラーが返ります。本関数は @ref Connect 実行前に実行しなければいけません。)
554       @retval ResultNotConnectedErr 通信先が割り当てられていないConnectionを表すエラー。@ref Initialize が成功していないConnectionに対する実行であり、何も処理は行われていません。
555       @retval ResultNotInitializedErr ライブラリが未初期化を表すエラー。@ref nn::http::Initialize が実行されていないと、本ライブラリの関数はすべて利用することができません。
556       @retval 上記以外            想定外のエラー(エラー内容については、@ref http_Result.h を参照)。
557     */
558     nn::Result SetLazyPostDataSetting( PostDataType dataType );
559 
560     /*!
561       @brief        POSTデータ遅延設定モード時、全POSTデータ設定完了を通知します。
562 
563                     詳しくは @ref SetLazyPostDataSetting の説明を参照してください。
564       @return 関数の実行結果を返します。以下に挙げる Result を返します。<BR>
565       @retval ResultSuccess       処理に成功しました。
566       @retval ResultConnectionCanceledErr 「通信はキャンセルされました」を表すエラー。再度通信を行うには、@ref Connection の @ref Finalize を実行後、@ref Initialize からやり直してください。
567       @retval ResultConnectionStatusErr 不正状態を表すエラー。通信がこの関数を実行できない状態になっています。(例えばまだ「通信開始前」の状態の場合、このエラーが返ります。本関数は @ref Connect 実行後に実行しなければいけません。)
568       @retval ResultNotConnectedErr 通信先が割り当てられていないConnectionを表すエラー。@ref Initialize が成功していないConnectionに対する実行であり、何も処理は行われていません。
569       @retval ResultNotInitializedErr ライブラリが未初期化を表すエラー。@ref nn::http::Initialize が実行されていないと、本ライブラリの関数はすべて利用することができません。
570       @retval 上記以外            想定外のエラー(エラー内容については、@ref http_Result.h を参照)。
571     */
572     nn::Result NotifyFinishSendPostData( void );
573 
574     /*!
575       @brief        HTTPリクエストのPOSTデータのエンコードタイプを設定します。
576 
577       @param[in]    type 設定するエンコードタイプ
578       @return 関数の実行結果を返します。以下に挙げる Result を返します。<BR>
579       @retval ResultSuccess       処理に成功しました。
580       @retval ResultPostAddedAnotherErr すでにPOSTデータが設定されています。@ref AddPostDataRaw ですでにRawタイプのPOSTデータがすでに登録されている場合、@ref SetLazyPostDataSetting でPOSTデータ遅延設定モードに設定されている場合に返ります。本関数はこれらPOSTデータ設定と競合しないように使用してください。(POSTデータを再設定するには、@ref Connectionの @ref Finalize を実施後、@ref Initialize からやり直してください。)
581       @retval ResultConnectionStatusErr 不正状態を表すエラー。通信がこの関数を実行できない状態になっています。(例えばすでに「通信中」状態の場合、このエラーが返ります。本関数は @ref Connect 実行前に実行しなければいけません。)
582       @retval ResultPostUnknownEnctypeErr 不明なエンコードタイプが指定されたことを表すエラー。@ref EncodingType で定義されていない値を設定したときに返ります。(POSTデータを再設定するには、@ref Connectionの @ref Finalize を実施後、@ref Initialize からやり直してください。)
583       @retval 上記以外            想定外のエラー(エラー内容については、@ref http_Result.h を参照)。
584     */
585     nn::Result SetPostDataEncoding(EncodingType type);
586 
587     /*!
588       @brief        POSTデータ遅延設定モード時のPOSTデータ設定用API(ASCII文字列用)です。
589 
590                     POSTデータ遅延設定モード(@ref SetLazyPostDataSetting でモードに入ることができる。)において、@ref Connect / @ref ConnectAsync 実行後に使用することができます。
591                     POSTデータ遅延設定モードの詳細は、@ref SetLazyPostDataSetting の説明を参照してください。
592 
593                     ※タイムアウト付きの@ref SendPostDataAscii と異なり、この関数はタイムアウトしません。つまり処理が終了するまでは、関数から戻りません。<BR/>
594                                        そのため、例えば通信速度の低い環境で使用した場合には、処理が終了して関数から戻るまで、長時間かかることが予想されます。<BR/>
595       @param[in]    pLabel          データのラベル名
596       @param[in]    pValue          データの内容
597       @return 関数の実行結果を返します。以下に挙げる Result を返します。<BR>
598       @retval ResultSuccess       処理に成功しました。
599       @retval ResultSocketKeepAliveDisconnected キープアライブ通信がサーバ側から切断されたことを表すエラー。このケースでは通常はHTTPライブラリ内で自動再接続が実施されますが、@ref SetLazyPostDataSetting で遅延POST設定がなされている場合、POSTデータ再送のためにHTTPライブラリは自動再接続を行わずにこのエラーを返します。再度通信を行うには、@ref Connection の @ref Finalize を実行後、@ref Initialize からやり直してください。
600       @retval ResultSocketSendErr          ソケットデータ送信失敗を表すエラー。サーバ側が通信を切断したケースなどが考えられます。再度通信を行うには、@ref Connection の @ref Finalize を実行後、@ref Initialize からやり直してください。
601       @retval ResultSocketConnectErr       ソケット接続失敗を表すエラー。サーバが存在しなかったり、停止しているケースなどが考えられます。再度通信を行うには、@ref Connection の @ref Finalize を実行後、@ref Initialize からやり直してください。
602       @retval ResultDnsResolutionErr      「URLで指定されたホスト名に対する名前解決が失敗しました」を表すエラー。
603       @retval ResultConnectionCanceledErr 「通信はキャンセルされました」を表すエラー。再度通信を行うには、@ref Connection の @ref Finalize を実行後、@ref Initialize からやり直してください。
604       @retval ResultConnectionStatusErr 不正状態を表すエラー。通信がこの関数を実行できない状態になっています。(例えばまだ「通信開始前」の状態の場合、このエラーが返ります。本関数は @ref Connect 実行後に実行しなければいけません。)
605       @retval ResultNotConnectedErr 通信先が割り当てられていないConnectionを表すエラー。@ref Initialize が成功していないConnectionに対する実行であり、何も処理は行われていません。
606       @retval ResultNotInitializedErr ライブラリが未初期化を表すエラー。@ref nn::http::Initialize が実行されていないと、本ライブラリの関数はすべて利用することができません。
607       @retval 上記以外            想定外のエラー(エラー内容については、@ref http_Result.h を参照)。
608     */
609     nn::Result SendPostDataAscii(const char* pLabel, const char* pValue);
610 
611     /*!
612       @brief        タイムアウト付きの@ref SendPostDataAscii です。
613 
614                     タイムアウトが指定できること以外は、タイムアウト指定無しの@ref SendPostDataAscii と同機能のAPIです。機能の詳細はタイムアウト無しAPIのリファレンスを参照してください。<BR/>
615                     タイムアウト時間以内にPOSTデータの送信が完了しなかった場合、@ref ResultTimeout が返ります。<BR/>
616                     @ref ResultTimeout()が返った場合、そのコネクションは自動的にキャンセルされた状態になっています。(つまり@ref Cancel  が内部的に実施されています。)<BR/>
617 
618       @param[in]    pLabel          データのラベル名
619       @param[in]    pValue          データの内容
620       @param[in]    timeout         タイムアウト時間
621       @return 関数の実行結果を返します。以下に挙げる Result を返します。<BR>
622       @retval ResultSuccess       処理に成功しました。
623       @retval ResultTimeout       タイムアウトを表すエラー。
624       @retval 上記以外            タイムアウト指定なしの @ref SendPostDataAscii と同様です。
625     */
626     nn::Result SendPostDataAscii(const char* pLabel, const char* pValue, const nn::fnd::TimeSpan& timeout);
627 
628     /*!
629       @brief        POSTデータ遅延設定モード時のPOSTデータ設定用API(バイナリデータ用)です。
630 
631                     POSTデータ遅延設定モード(@ref SetLazyPostDataSetting でモードに入ることができる。)において、@ref Connect / @ref ConnectAsync 実行後に使用することができます。
632                     POSTデータ遅延設定モードの詳細は、@ref SetLazyPostDataSetting の説明を参照してください。
633 
634                     ※タイムアウト付きの@ref SendPostDataBinary と異なり、この関数はタイムアウトしません。つまり処理が終了するまでは、関数から戻りません。<BR/>
635                                        そのため、例えば通信速度の低い環境で使用した場合には、処理が終了して関数から戻るまで、長時間かかることが予想されます。<BR/>
636 
637       @param[in]    pLabel          データのラベル名
638       @param[in]    pValue          データの内容
639       @param[in]    valueSize       pValueのデータサイズ
640       @return 関数の実行結果を返します。以下に挙げる Result を返します。<BR>
641       @retval ResultSuccess       処理に成功しました。
642       @retval ResultSocketKeepAliveDisconnected キープアライブ通信がサーバ側から切断されたことを表すエラー。このケースでは通常はHTTPライブラリ内で自動再接続が実施されますが、@ref SetLazyPostDataSetting で遅延POST設定がなされている場合、POSTデータ再送のためにHTTPライブラリは自動再接続を行わずにこのエラーを返します。再度通信を行うには、@ref Connection の @ref Finalize を実行後、@ref Initialize からやり直してください。
643       @retval ResultSocketSendErr          ソケットデータ送信失敗を表すエラー。サーバ側が通信を切断したケースなどが考えられます。再度通信を行うには、@ref Connection の @ref Finalize を実行後、@ref Initialize からやり直してください。
644       @retval ResultSocketConnectErr       ソケット接続失敗を表すエラー。サーバが存在しなかったり、停止しているケースなどが考えられます。再度通信を行うには、@ref Connection の @ref Finalize を実行後、@ref Initialize からやり直してください。
645       @retval ResultDnsResolutionErr      「URLで指定されたホスト名に対する名前解決が失敗しました」を表すエラー。
646       @retval ResultConnectionCanceledErr 「通信はキャンセルされました」を表すエラー。再度通信を行うには、@ref Connection の @ref Finalize を実行後、@ref Initialize からやり直してください。
647       @retval ResultConnectionStatusErr 不正状態を表すエラー。通信がこの関数を実行できない状態になっています。(例えばまだ「通信開始前」の状態の場合、このエラーが返ります。本関数は @ref Connect 実行後に実行しなければいけません。)
648       @retval ResultNotConnectedErr 通信先が割り当てられていないConnectionを表すエラー。@ref Initialize が成功していないConnectionに対する実行であり、何も処理は行われていません。
649       @retval ResultNotInitializedErr ライブラリが未初期化を表すエラー。@ref nn::http::Initialize が実行されていないと、本ライブラリの関数はすべて利用することができません。
650       @retval 上記以外            想定外のエラー(エラー内容については、@ref http_Result.h を参照)。
651     */
652     nn::Result SendPostDataBinary(const char* pLabel, const void* pValue, size_t valueSize);
653 
654     /*!
655       @brief        タイムアウト付きの@ref SendPostDataBinary です。
656 
657                     タイムアウトが指定できること以外は、タイムアウト指定無しの@ref SendPostDataBinary と同機能のAPIです。機能の詳細はタイムアウト無しAPIのリファレンスを参照してください。<BR/>
658                     タイムアウト時間以内にPOSTデータの送信が完了しなかった場合、@ref ResultTimeout が返ります。<BR/>
659                     @ref ResultTimeout()が返った場合、そのコネクションは自動的にキャンセルされた状態になっています。(つまり@ref Cancel  が内部的に実施されています。)<BR/>
660 
661       @param[in]    pLabel          データのラベル名
662       @param[in]    pValue          データの内容
663       @param[in]    valueSize       pValueのデータサイズ
664       @param[in]    timeout         タイムアウト時間
665       @return 関数の実行結果を返します。以下に挙げる Result を返します。<BR>
666       @retval ResultSuccess       処理に成功しました。
667       @retval ResultTimeout       タイムアウトを表すエラー。
668       @retval 上記以外            タイムアウト指定なしの @ref SendPostDataBinary と同様です。
669     */
670     nn::Result SendPostDataBinary(const char* pLabel, const void* pValue, size_t valueSize, const nn::fnd::TimeSpan& timeout);
671 
672     /*!
673       @brief        POSTデータ遅延設定モード時のPOSTデータ設定用API(RAWデータ用)です。
674 
675                     POSTデータ遅延設定モード(@ref SetLazyPostDataSetting でモードに入ることができる。)において、@ref Connect / @ref ConnectAsync 実行後に使用することができます。
676                     POSTデータ遅延設定モードの詳細は、@ref SetLazyPostDataSetting の説明を参照してください。
677 
678                     ※タイムアウト付きの@ref SendPostDataRaw と異なり、この関数はタイムアウトしません。つまり処理が終了するまでは、関数から戻りません。<BR/>
679                                        そのため、例えば通信速度の低い環境で使用した場合には、処理が終了して関数から戻るまで、長時間かかることが予想されます。<BR/>
680 
681       @param[in]    pValue          データの内容
682       @param[in]    valueSize       pValueのデータサイズ
683       @return 関数の実行結果を返します。以下に挙げる Result を返します。<BR>
684       @retval ResultSuccess       処理に成功しました。
685       @retval ResultSocketKeepAliveDisconnected キープアライブ通信がサーバ側から切断されたことを表すエラー。このケースでは通常はHTTPライブラリ内で自動再接続が実施されますが、@ref SetLazyPostDataSetting で遅延POST設定がなされている場合、POSTデータ再送のためにHTTPライブラリは自動再接続を行わずにこのエラーを返します。再度通信を行うには、@ref Connection の @ref Finalize を実行後、@ref Initialize からやり直してください。
686       @retval ResultSocketSendErr          ソケットデータ送信失敗を表すエラー。サーバ側が通信を切断したケースなどが考えられます。再度通信を行うには、@ref Connection の @ref Finalize を実行後、@ref Initialize からやり直してください。
687       @retval ResultSocketConnectErr       ソケット接続失敗を表すエラー。サーバが存在しなかったり、停止しているケースなどが考えられます。再度通信を行うには、@ref Connection の @ref Finalize を実行後、@ref Initialize からやり直してください。
688       @retval ResultDnsResolutionErr      「URLで指定されたホスト名に対する名前解決が失敗しました」を表すエラー。
689       @retval ResultConnectionCanceledErr 「通信はキャンセルされました」を表すエラー。再度通信を行うには、@ref Connection の @ref Finalize を実行後、@ref Initialize からやり直してください。
690       @retval ResultConnectionStatusErr 不正状態を表すエラー。通信がこの関数を実行できない状態になっています。(例えばまだ「通信開始前」の状態の場合、このエラーが返ります。本関数は @ref Connect 実行後に実行しなければいけません。)
691       @retval ResultNotConnectedErr 通信先が割り当てられていないConnectionを表すエラー。@ref Initialize が成功していないConnectionに対する実行であり、何も処理は行われていません。
692       @retval ResultNotInitializedErr ライブラリが未初期化を表すエラー。@ref nn::http::Initialize が実行されていないと、本ライブラリの関数はすべて利用することができません。
693       @retval 上記以外            想定外のエラー(エラー内容については、@ref http_Result.h を参照)。
694     */
695     nn::Result SendPostDataRaw(const void* pValue, size_t valueSize);
696 
697     /*!
698       @brief        タイムアウト付きの@ref SendPostDataRaw です。
699 
700                     タイムアウトが指定できること以外は、タイムアウト指定無しの@ref SendPostDataRaw と同機能のAPIです。機能の詳細はタイムアウト無しAPIのリファレンスを参照してください。<BR/>
701                     タイムアウト時間以内にPOSTデータの送信が完了しなかった場合、@ref ResultTimeout が返ります。<BR/>
702                     @ref ResultTimeout()が返った場合、そのコネクションは自動的にキャンセルされた状態になっています。(つまり@ref Cancel  が内部的に実施されています。)<BR/>
703 
704       @param[in]    pValue          データの内容
705       @param[in]    valueSize       pValueのデータサイズ
706       @param[in]    timeout         タイムアウト時間
707       @return 関数の実行結果を返します。以下に挙げる Result を返します。<BR>
708       @retval ResultSuccess       処理に成功しました。
709       @retval ResultTimeout       タイムアウトを表すエラー。
710       @retval 上記以外            タイムアウト指定なしの @ref SendPostDataRaw と同様です。
711     */
712     nn::Result SendPostDataRaw(const void* pValue, size_t valueSize, const nn::fnd::TimeSpan& timeout);
713 
714     //@}
715 
716     //----------------------------------------
717     //! @name HTTPS用設定
718     //@{
719 
720     /*!
721       @brief        CA証明書を設定します。複数回実行することで、複数個の証明書を設定することもできます。
722 
723       @param[in]    pCertData   証明書データ。データフォーマットは、X.509 v3の証明書データ(ASN.1定義)をDERエンコードしたバイナリデータ。
724       @param[in]    certDataSize pCertDataのサイズ 。
725       @return 関数の実行結果を返します。以下に挙げる Result を返します。<BR>
726       @retval ResultSuccess       処理に成功しました。
727       @retval ResultInvalidParamErr   パラメータの不正を表すエラー。正しいパラメータを指定して、再度本関数を実行してください。
728       @retval ResultNotConnectedErr 通信先が割り当てられていないConnectionを表すエラー。@ref Initialize が成功していないConnectionに対する実行であり、何も処理は行われていません。
729       @retval ResultNotInitializedErr ライブラリが未初期化を表すエラー。@ref nn::http::Initialize が実行されていないと、本ライブラリの関数はすべて利用することができません。
730       @retval 上記以外            想定外のエラー(エラー内容については、@ref http_Result.h を参照)。
731     */
732     nn::Result SetRootCa(const u8* pCertData, size_t certDataSize);
733 
734     /*!
735       @brief        機器内蔵CA証明書を設定します。複数回実行することで、複数個の証明書を設定することもできます。
736 
737       @param[in]    inCaCertName   対象の機器内蔵CA証明書(ssl の @ref nn::ssl::InternalCaCertの値。)
738       @return 関数の実行結果を返します。以下に挙げる Result を返します。<BR>
739       @retval ResultSuccess       処理に成功しました。
740       @retval ResultInvalidParamErr   パラメータの不正を表すエラー。正しいパラメータを指定して、再度本関数を実行してください。
741       @retval ResultNotConnectedErr 通信先が割り当てられていないConnectionを表すエラー。@ref Initialize が成功していないConnectionに対する実行であり、何も処理は行われていません。
742       @retval ResultNotInitializedErr ライブラリが未初期化を表すエラー。@ref nn::http::Initialize が実行されていないと、本ライブラリの関数はすべて利用することができません。
743       @retval 上記以外            想定外のエラー(エラー内容については、@ref http_Result.h を参照)。
744     */
745     nn::Result SetRootCa( InternalCaCertId inCaCertName );
746 
747     /*!
748       @brief        CA証明書ストアを設定します。(複数のHTTPS通信で同じCA証明書セットを使いまわしたい場合に利用します。)
749                     設定した証明書ストアは、設定先のHTTPS通信実施中は解放しないでください。
750 
751       @param[in]    certStore 設定する証明書ストア
752       @return 関数の実行結果を返します。以下に挙げる Result を返します。<BR>
753       @retval ResultSuccess       処理に成功しました。
754       @retval ResultNoCaCertStoreErr   該当するCA証明書ストアの未登録を表すエラー。引数に設定した@ref CertStore の@ref nn::CertStore::Initialize が実行されていないか、すでに@ref nn::CertStore::Finalize が実行されています。再度 @ref nn::CertStore::Initialize で初期化された@ref Cert インスタンスを引数に指定して、本関数を実行してください。
755       @retval ResultNotConnectedErr 通信先が割り当てられていないConnectionを表すエラー。@ref Initialize が成功していないConnectionに対する実行であり、何も処理は行われていません。
756       @retval ResultNotInitializedErr ライブラリが未初期化を表すエラー。@ref nn::http::Initialize が実行されていないと、本ライブラリの関数はすべて利用することができません。
757       @retval 上記以外            想定外のエラー(エラー内容については、@ref http_Result.h を参照)。
758     */
759     nn::Result SetRootCaStore(CertStore& certStore);
760 
761 
762     /*!
763       @brief        証明書と秘密鍵のデータからクライアント証明書を設定します。
764 
765       @param[in]    pCertData           証明書データ。データフォーマットは、X.509 v3の証明書データ(ASN.1定義)をDERエンコードしたバイナリデータ。
766       @param[in]    certDataSize        pCertDataのサイズ 。
767       @param[in]    pPrivateKeyData     秘密鍵のデータ。データフォーマットは、X.509の鍵データ(ASN.1定義)をDERエンコードしたバイナリデータ。
768       @param[in]    privateKeyDataSize  pPrivateKeyDataのサイズ 。
769       @return 関数の実行結果を返します。以下に挙げる Result を返します。<BR>
770       @retval ResultSuccess       処理に成功しました。
771       @retval ResultCertExistErr すでに他のクライアント証明書が本関数で設定されていることを表すエラー。別のクライアント証明書を設定したい場合は、@ref Finalize を実行後、@ref Initialize からやり直してください。
772       @retval ResultInvalidParamErr   パラメータの不正を表すエラー。正しいパラメータを指定して、再度本関数を実行してください。
773       @retval ResultNotConnectedErr 通信先が割り当てられていないConnectionを表すエラー。@ref Initialize が成功していないConnectionに対する実行であり、何も処理は行われていません。
774       @retval ResultNotInitializedErr ライブラリが未初期化を表すエラー。@ref nn::http::Initialize が実行されていないと、本ライブラリの関数はすべて利用することができません。
775       @retval 上記以外            想定外のエラー(エラー内容については、@ref http_Result.h を参照)。
776     */
777     nn::Result SetClientCert(const u8* pCertData, size_t certDataSize, const u8* pPrivateKeyData, size_t privateKeyDataSize);
778 
779     /*!
780       @brief        機器内蔵クライアント証明書を設定します。
781 
782       @param[in]  inClientCertName   対象の機器内蔵クライアント証明書(sslの @ref nn::ssl::InternalClientCertの値。)
783       @return 関数の実行結果を返します。以下に挙げる Result を返します。<BR>
784       @retval ResultSuccess       処理に成功しました。
785       @retval ResultCertExistErr すでに他のクライアント証明書が本関数で設定されていることを表すエラー。別のクライアント証明書を設定したい場合は、@ref Finalize を実行後、@ref Initialize からやり直してください。
786       @retval ResultInvalidParamErr   パラメータの不正を表すエラー。正しいパラメータを指定して、再度本関数を実行してください。
787       @retval ResultNotConnectedErr 通信先が割り当てられていないConnectionを表すエラー。@ref Initialize が成功していないConnectionに対する実行であり、何も処理は行われていません。
788       @retval ResultNotInitializedErr ライブラリが未初期化を表すエラー。@ref nn::http::Initialize が実行されていないと、本ライブラリの関数はすべて利用することができません。
789       @retval 上記以外            想定外のエラー(エラー内容については、@ref http_Result.h を参照)。
790     */
791     nn::Result SetClientCert( InternalClientCertId inClientCertName );
792 
793     /*!
794       @brief        ClientCertインスタンスを用いてクライアント証明書を設定します。(複数のHTTPS通信で同じクライアント証明書を使いまわしたい場合に利用します。)
795                     設定したクライアント証明書は、設定先のHTTPS通信実施中は解放しないでください。
796       @param[in]    clientCert   設定するクライアント証明書。
797       @return 関数の実行結果を返します。以下に挙げる Result を返します。<BR>
798       @retval ResultSuccess       処理に成功しました。
799       @retval ResultNoClientCertErr 該当するクライアント証明書の未登録を表すエラー。引数に設定した@ref ClientCert の@ref nn::ClientCert::Initialize が実行されていないか、すでに@ref nn::ClientCert::Finalize が実行されています。再度 @ref nn::ClientCert::Initialize で初期化された@ref ClientCert インスタンスを引数に指定して、本関数を実行してください。
800       @retval ResultCertExistErr すでに他のクライアント証明書が本関数で設定されていることを表すエラー。別のクライアント証明書を設定したい場合は、@ref Finalize を実行後、@ref Initialize からやり直してください。
801       @retval ResultInvalidParamErr   パラメータの不正を表すエラー。正しいパラメータを指定して、再度本関数を実行してください。
802       @retval ResultNotConnectedErr 通信先が割り当てられていないConnectionを表すエラー。@ref Initialize が成功していないConnectionに対する実行であり、何も処理は行われていません。
803       @retval ResultNotInitializedErr ライブラリが未初期化を表すエラー。@ref nn::http::Initialize が実行されていないと、本ライブラリの関数はすべて利用することができません。
804       @retval 上記以外            想定外のエラー(エラー内容については、@ref http_Result.h を参照)。
805     */
806     nn::Result SetClientCert(ClientCert& clientCert);
807 
808 
809     /*!
810       @brief        SSL通信中に発生したエラーを取得します。
811                     (エラーコードは @ref  nn::ssl::ResultCode の値となります。取得される値は、本関数を呼び出す前の最後に発生したエラーコードとなります。)
812 
813       @param[out]   pResultCodeBuf エラーを格納するためのバッファ
814       @return 関数の実行結果を返します。以下に挙げる Result を返します。<BR>
815       @retval ResultSuccess       処理に成功しました。
816       @retval ResultInvalidParamErr   パラメータの不正を表すエラー。正しいパラメータを指定して、再度本関数を実行してください。
817       @retval ResultNotConnectedErr 通信先が割り当てられていないConnectionを表すエラー。@ref Initialize が成功していないConnectionに対する実行であり、何も処理は行われていません。
818       @retval ResultNotInitializedErr ライブラリが未初期化を表すエラー。@ref nn::http::Initialize が実行されていないと、本ライブラリの関数はすべて利用することができません。
819       @retval 上記以外            想定外のエラー(エラー内容については、@ref http_Result.h を参照)。
820     */
821     nn::Result GetSslError(s32* pResultCodeBuf) const;
822 
823 
824     /*!
825       @brief        SSLのサーバ検証に関するオプションを設定します。<BR/>
826                                                             ※ @ref nn::ssl::VerifyOption 列挙体に定義が存在する以下の検証は、デフォルトで実施されます。<BR/>
827                                                             CommonName検証(@ref nn::ssl::VERIFY_COMMON_NAME)<BR/>
828                                                             RootCA検証(@ref nn::ssl::VERIFY_ROOT_CA)<BR/>
829                                                             SubjectAlternativeName検証(@ref nn::ssl::VERIFY_SUBJECT_ALT_NAME)<BR/>
830 
831       @param[in]    verifyOption    SSLのサーバ検証に関するオプション設定。デフォルトのサーバ検証では実施しない設定となっている検証オプションを、実施する場合に利用します。
832                                     (デフォルトのサーバ検証を用いる場合は、この引数は省略できます。)
833                                     引数には、実施する検証オプションを表す @ref nn::ssl::VerifyOption 列挙体の値を設定します。
834                                     (複数の値を設定したい場合は、複数値の論理和を設定します。)
835                                     <BR/>
836                                     現在この引数に設定可能な値は、以下となります。<BR/>
837                                      @ref nn::ssl::VERIFY_DATE            : 証明書の期限切れ検証を実施します。<BR/>
838                                      @ref nn::ssl::USE_SESSION_CACHE      : resumptionを利用します。(つまり同じホストに連続で接続する際、セッションの再利用を試みます。)<BR/>
839                                      ※本APIによるオプション設定は、設定対象の通信開始前(つまり @ref Connect / @ref ConnectAsync の呼び出し前)に実施する必要があります。
840       @return 関数の実行結果を返します。以下に挙げる Result を返します。<BR>
841       @retval ResultSuccess       処理に成功しました。
842       @retval ResultNotConnectedErr 通信先が割り当てられていないConnectionを表すエラー。@ref Initialize が成功していないConnectionに対する実行であり、何も処理は行われていません。
843       @retval ResultNotInitializedErr ライブラリが未初期化を表すエラー。@ref nn::http::Initialize が実行されていないと、本ライブラリの関数はすべて利用することができません。
844       @retval 上記以外            想定外のエラー(エラー内容については、@ref http_Result.h を参照)。
845     */
846     nn::Result SetVerifyOption(u32 verifyOption);
847 
848     /**
849       @brief        指定したビットのSSL通信の検証内容を削除します。
850 
851                     デフォルトで検証する項目は安全を守るためのものです。<BR/>
852                     デバッグ目的以外で検証項目を減らさないでください。<BR/>
853                     ※本APIによるオプション設定は、設定対象の通信開始前(つまり @ref Connect / @ref ConnectAsync の呼び出し前)に実施する必要があります。
854 
855       @param[in]    excludeVerifyOptions SSLの検証方法に関して、除外対象を表すオプション。
856                     除外したい検証方法を表す @ref nn::ssl::VerifyOption 列挙体の値を設定します。(複数の値を設定したい場合は、複数値の論理を設定します。)
857                     現在この引数に設定可能な値は、以下となります。
858                     <BR/>
859                         @ref nn::ssl::VERIFY_COMMON_NAME            : 証明書の CommonName が 対象ホストの名称と一致するか検証します。<BR/>
860                         @ref nn::ssl::VERIFY_SUBJECT_ALT_NAME       : CommonNameの検証を行う際に、証明書にSubjectAltNameの記述がある場合はそちらを優先して使用します。<BR/>
861                         @ref nn::ssl::VERIFY_ROOT_CA                : 証明書の Root CA を検証します。<BR/>
862 
863       @return 関数の実行結果を返します。以下に挙げる Result を返します。<BR>
864       @retval ResultSuccess       処理に成功しました。
865       @retval ResultNotConnectedErr 通信先が割り当てられていないConnectionを表すエラー。@ref Initialize が成功していないConnectionに対する実行であり、何も処理は行われていません。
866       @retval ResultNotInitializedErr ライブラリが未初期化を表すエラー。@ref nn::http::Initialize が実行されていないと、本ライブラリの関数はすべて利用することができません。
867       @retval 上記以外            想定外のエラー(エラー内容については、@ref http_Result.h を参照)。
868     */
869     nn::Result DisableVerifyOptionForDebug( u32 excludeVerifyOptions );
870 
871     /*!
872       @brief        [deprecated]廃止予定のAPIです。
873       機器内のデフォルト証明書をCA証明書として利用するように設定します。
874       @return 関数の実行結果を返します。以下に挙げる Result を返します。<BR>
875       @retval ResultSuccess       処理に成功しました。
876       @retval 上記以外            想定外のエラー(エラー内容については、@ref http_Result.h を参照)。
877     */
878     nn::Result SetRootCaDefault( void ) NN_ATTRIBUTE_DEPRECATED;
879 
880     /*!
881       @brief        [deprecated]廃止予定のAPIです。
882       機器内のデフォルトクライアント証明書をクライアント証明書として利用するように設定します。
883       @return 関数の実行結果を返します。以下に挙げる Result を返します。<BR>
884       @retval ResultSuccess       処理に成功しました。
885       @retval 上記以外            想定外のエラー(エラー内容については、@ref http_Result.h を参照)。
886     */
887     nn::Result SetClientCertDefault( void ) NN_ATTRIBUTE_DEPRECATED;
888     //@}
889 
890 
891 private:
892     /**
893      @brief         HTTPのコネクションハンドル。
894      */
895     ConnectionHandle m_ConnectHandle;
896 
897     /**
898      @brief         HTTPプロセスとのコネクション専用IPCセッション
899      */
900     nn::Handle m_privateIpcSession;
901 
902     /**
903      @brief         HTTPプロセスとのコネクション専用IPCクライアント
904      */
905     mutable ConnectionIpc m_PrivateIpcClient;
906 
907 
908     /*!
909       @brief        接続に利用するプロキシサーバを、デフォルトサーバに設定します。
910       @return       処理の結果が返ります。<BR>
911     */
912     nn::Result SetProxyDefault(void);
913 
914     /**
915      * @brief       コネクションが設定済みか否かを返す。「コネクションが設定済み」とは、Create関数でコネクト先と手段が指定されているか否かである。
916      * @return      コネクションが設定済みか否か(trueが設定済み)
917     */
IsConnected()918     bool IsConnected() const
919     {
920         return (m_ConnectHandle > 0) ? true : false;
921     }
922 
923     /**
924      * @brief       コネクション専用IPCクライアントを割り当てます。
925      * @return      処理の結果。
926     */
927     Result AssignPrivateIpcClient();
928 };
929 
930 
931 } // end of namespace http
932 } // end of namespace nn
933 
934 
935 #endif // __cplusplus
936 
937 
938 
939 #include <nn/util/detail/util_CLibImpl.h>
940 
941 
942 /*!
943   @addtogroup   nn_http               http
944   @{
945 
946   @defgroup     nn_http_Connection_c    Connection (C)
947 
948   @brief        @ref nn::http::Connection の C インタフェースモジュールです。
949 
950   @{
951 */
952 
953 /*!
954   @struct       nnhttpConnection
955   @brief        HTTPのConnectionを表す C の構造体です。
956 
957   @brief 対応するクラス @ref nn::http::Connection を参照してください。
958 */
959 NN_UTIL_DETAIL_CLIBIMPL_DEFINE_BUFFER_CLASS(nnhttpConnection, nn::http::Connection, 16, u32);
960 
961 /*!
962   @brief 対応する C++ 関数 @ref nn::http::Connection::Initialize を参照してください。
963 */
964 NN_EXTERN_C nnResult nnhttpConnectionInitialize(nnhttpConnection* this_, const char *pUrl, nnHttpRequestMethod method);
965 
966 /*!
967   @brief 対応する C++ 関数 @ref nn::http::Connection::Finalize を参照してください。
968 */
969 NN_EXTERN_C nnResult nnhttpConnectionFinalize(nnhttpConnection* this_);
970 
971 /*!
972   @brief 対応する C++ 関数 @ref nn::http::Connection::Connect を参照してください。
973 */
974 NN_EXTERN_C nnResult nnhttpConnectionConnect(nnhttpConnection* this_);
975 
976 /*!
977   @brief 対応する C++ 関数 @ref nn::http::Connection::ConnectAsync を参照してください。
978 */
979 NN_EXTERN_C nnResult nnhttpConnectionConnectAsync(nnhttpConnection* this_);
980 
981 /*!
982   @brief 対応する C++ 関数 @ref nn::http::Connection::Cancelを参照してください。
983 */
984 NN_EXTERN_C nnResult nnhttpConnectionCancel(nnhttpConnection* this_);
985 
986 /*!
987   @brief 対応する C++ 関数 @ref nn::http::Connection::Readを参照してください。
988 */
989 NN_EXTERN_C nnResult nnhttpConnectionRead(nnhttpConnection* this_, u8* pBodyBuf, u32 bufLen);
990 
991 /*!
992   @brief 対応する C++ 関数 @ref nn::http::Connection::GetStatusを参照してください。
993 */
994 NN_EXTERN_C nnResult nnhttpConnectionGetStatus(const nnhttpConnection* this_, nnHttpStatus* pStatusBuf);
995 
996 /*!
997   @brief 対応する C++ 関数 @ref nn::http::Connection::GetProgressを参照してください。
998 */
999 NN_EXTERN_C nnResult nnhttpConnectionGetProgress(const nnhttpConnection* this_, u32* pReceivedLen, u32* pContentLen);
1000 
1001 /*!
1002   @brief 対応する C++ 関数 @ref nn::http::Connection::GetErrorを参照してください。
1003 */
1004 NN_EXTERN_C nnResult nnhttpConnectionGetError(const nnhttpConnection* this_, nnHttpResultCode* pResultCodeBuf);
1005 
1006 
1007 
1008 /* 接続設定 */
1009 /*!
1010   @brief 対応する C++ 関数 @ref nn::http::Connection::SetProxyを参照してください。
1011 */
1012 NN_EXTERN_C nnResult nnhttpConnectionSetProxy(nnhttpConnection* this_, const char* pProxyName, u16 port, const char* pUserName, const char* pPassword);
1013 
1014 /*!
1015   @brief 対応する C++ 関数 @ref nn::http::Connection::SetBasicAuthorizationを参照してください。
1016 */
1017 NN_EXTERN_C nnResult nnhttpConnectionSetBasicAuthorization(nnhttpConnection* this_, const char *pUserName, const char *pPassword);
1018 
1019 /*!
1020   @brief 対応する C++ 関数 @ref nn::http::Connection::SetSocketBufferSizeを参照してください。
1021 */
1022 NN_EXTERN_C nnResult nnhttpConnectionSetSocketBufferSize(nnhttpConnection* this_, u32 size);
1023 
1024 
1025 /* HTTPリクエスト設定  */
1026 /*!
1027   @brief 対応する C++ 関数 @ref nn::http::Connection::AddHeaderFieldを参照してください。
1028 */
1029 NN_EXTERN_C nnResult nnhttpConnectionAddHeaderField(nnhttpConnection* this_, const char* pLabel, const char* pValue);
1030 
1031 /*!
1032   @brief 対応する C++ 関数 @ref nn::http::Connection::AddPostDataAsciiを参照してください。
1033 */
1034 NN_EXTERN_C nnResult nnhttpConnectionAddPostDataAscii(nnhttpConnection* this_, const char* pLabel, const char* pValue);
1035 
1036 /*!
1037   @brief 対応する C++ 関数 @ref nn::http::Connection::AddPostDataBinaryを参照してください。
1038 */
1039 NN_EXTERN_C nnResult nnhttpConnectionAddPostDataBinary(nnhttpConnection* this_, const char* pLabel, const char* pValue, u32 length);
1040 
1041 /*!
1042   @brief 対応する C++ 関数 @ref nn::http::Connection::AddPostDataRawを参照してください。
1043 */
1044 NN_EXTERN_C nnResult nnhttpConnectionAddPostDataRaw(nnhttpConnection* this_, const char* pValue, u32 length);
1045 
1046 /*!
1047   @brief 対応する C++ 関数 @ref nn::http::Connection::SetLazyPostDataSettingを参照してください。
1048 */
1049 NN_EXTERN_C nnResult nnhttpConnectionSetLazyPostDataSetting(nnhttpConnection* this_, nnHttpPostDataType dataType);
1050 
1051 
1052 /*!
1053   @brief 対応する C++ 関数 @ref nn::http::Connection::NotifyFinishSendPostDataを参照してください。
1054 */
1055 NN_EXTERN_C nnResult nnhttpConnectionNotifyFinishSendPostData(nnhttpConnection* this_);
1056 
1057 /*!
1058   @brief 対応する C++ 関数 @ref nn::http::Connection::SetPostDataEncodingを参照してください。
1059 */
1060 NN_EXTERN_C nnResult nnhttpConnectionSetPostDataEncoding(nnhttpConnection* this_, nnHttpEncodingType type);
1061 
1062 /*!
1063   @brief 対応する C++ 関数 @ref nn::http::Connection::SendPostDataAsciiを参照してください。
1064 */
1065 NN_EXTERN_C nnResult nnhttpConnectionSendPostDataAscii(nnhttpConnection* this_, const char* pLabel, const char* pValue);
1066 
1067 /*!
1068   @brief 対応する C++ 関数 @ref nn::http::Connection::SendPostDataBinaryを参照してください。
1069 */
1070 NN_EXTERN_C nnResult nnhttpConnectionSendPostDataBinary(nnhttpConnection* this_, const char* pLabel, const void* pValue, size_t length);
1071 
1072 /*!
1073   @brief 対応する C++ 関数 @ref nn::http::Connection::SendPostDataRawを参照してください。
1074 */
1075 NN_EXTERN_C nnResult nnhttpConnectionSendPostDataRaw(nnhttpConnection* this_, const void* pValue, u32 length);
1076 
1077 
1078 
1079 /* HTTPレスポンス取得 */
1080 /*!
1081   @brief 対応する C++ 関数 @ref nn::http::Connection::GetHeaderFieldを参照してください。
1082 */
1083 NN_EXTERN_C nnResult nnhttpConnectionGetHeaderField(const nnhttpConnection* this_, const char* pLabel, char* pFieldBuf, size_t bufSize, size_t* pFieldLengthCourier);
1084 
1085 /*!
1086   @brief 対応する C++ 関数 @ref nn::http::Connection::GetHeaderAllを参照してください。
1087 */
1088 NN_EXTERN_C nnResult nnhttpConnectionGetHeaderAll(const nnhttpConnection* this_, char* pHeaderBuf, size_t bufSize, size_t* pLengthCourier);
1089 
1090 /*!
1091   @brief 対応する C++ 関数 @ref nn::http::Connection::GetStatusCodeを参照してください。
1092 */
1093 NN_EXTERN_C nnResult nnhttpConnectionGetStatusCode(const nnhttpConnection* this_, s32* pStatusCodeCourier);
1094 
1095 /*!
1096   @brief 対応する C++ 関数 @ref nn::http::Connection::GetSslErrorを参照してください。
1097 */
1098 NN_EXTERN_C nnResult nnhttpConnectionGetSslError(const nnhttpConnection* this_, s32* pResultCodeBuf);
1099 
1100 /*!
1101   @brief 対応する C++ 関数 @ref nn::http::Connection::SetVerifyOptionを参照してください。
1102 */
1103 NN_EXTERN_C nnResult nnhttpConnectionSetVerifyOption(nnhttpConnection* this_, u32 verifyOption);
1104 
1105 /*!
1106   @brief 対応する C++ 関数 @ref nn::http::Connection::SetRootCaを参照してください。
1107 */
1108 NN_EXTERN_C nnResult nnhttpSetRootCa(nnhttpConnection* this_, const u8 *pCertData, size_t certDataSize);
1109 
1110 /*!
1111   @brief 対応する C++ 関数 @ref nn::http::Connection::SetRootCaを参照してください。
1112 */
1113 NN_EXTERN_C nnResult nnhttpSetInternalRootCa( nnhttpConnection* this_, NnHttpInternalCaCertId inCaCertName );
1114 
1115 /*!
1116   @brief 対応する C++ 関数 @ref nn::http::Connection::SetRootCaStoreを参照してください。
1117 */
1118 NN_EXTERN_C nnResult nnhttpSetRootCaStore( nnhttpConnection* this_, nnhttpCertStore* pCertStore);
1119 
1120 /*!
1121   @brief 対応する C++ 関数 @ref nn::http::Connection::SetClientCertを参照してください。
1122 */
1123 NN_EXTERN_C nnResult nnhttpSetClientCert(nnhttpConnection* this_, const u8* pCertData, size_t certDataSize, const u8* pPrivateKeyData, size_t privateKeyDataSize);
1124 
1125 /*!
1126   @brief 対応する C++ 関数 @ref nn::http::Connection::SetClientCertを参照してください。
1127 */
1128 NN_EXTERN_C nnResult nnhttpSetInternalClientCert(nnhttpConnection* this_, NnHttpInternalClientCertId inClientCertName );
1129 
1130 /*!
1131   @brief 対応する C++ 関数 @ref nn::http::Connection::SetClientCertを参照してください。
1132 */
1133 NN_EXTERN_C nnResult nnhttpSetClientCertObj(nnhttpConnection* this_, nnhttpClientCert* pClientCert);
1134 
1135 
1136 
1137 
1138 /*!
1139   @brief 対応する C++ 関数 @ref nn::http::Connection::DisableVerifyOptionForDebugを参照してください。
1140 */
1141 NN_EXTERN_C nnResult nnhttpDisableVerifyOptionForDebug(nnhttpConnection* this_, u32 verifyOption);
1142 
1143 /*!
1144   @}
1145 
1146   @}
1147 */
1148 
1149 #endif /* NN_HTTP_HTTP_CONNECTION_H_ */
1150