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: 26779 $
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       処理の結果が返ります。<BR>
80       @retval       Description== @ref ER_CONN_ADD 「すでに機器が管理可能な最大数のHTTP通信が存在し、通信割り当てができません」を表すエラー。
81       @retval       Description== @ref ER_REQ_URL  「指定されたURLは不正なものです。」を表すエラー
82       @retval       Description== @ref ER_ALREADY_ASSIGN_HOST  「すでに通信先ホストが割り当て済みです。」を表すエラー
83       @retval       Description== @ref ER_CONN_PROCESS_MAX     「1プロセスの使用できるコネクションの最大数を越えています。」を表すエラー
84       @attention    機器が同時に管理できるHTTP通信の数は有限です。@ref Initialize 時にすでに管理可能な最大数のHTTP通信が存在した場合は、エラーが返ります。
85       @note         本関数では通信先の割り当てのみが実施され、ネットワークレベルの接続は行われません。
86                     ネットワーク通信が開始されるのは、@ref Connect / @ref ConnectAsync 呼び出し時となります。
87     */
88     nn::Result Initialize(const char* pUrl, RequestMethod method = REQUEST_METHOD_GET, bool isUseDefaultProxy = true);
89 
90     /*!
91       @brief        通信の終了処理を実施します。
92                     <BR/>
93                     @ref Initialize 後、通信先とのHTTP処理がすべて終了した後に、実行してください。<BR/>
94                     (@ref Initialize を実行していないインスタンスに対しては、実行する必要はありません。実行しても構いませんが、何も処理は行われません。)<BR/>
95                     ある @ref Connection インスタンスで本関数を実行した後は、そのインスタンス経由で通信先の情報を取得できなくなります。<BR/>
96       @return       処理の結果が返ります。<BR>
97       @attention    機器が同時に管理できるHTTP通信の数は有限です。使わなくなった通信に対しては必ずこの関数を実行して、他通信に管理リソースを回してください。
98     */
99     nn::Result Finalize(void);
100 
101     //@}
102 
103     //----------------------------------------
104     //! @name 通信設定
105     //@{
106 
107     /*!
108       @brief        接続に利用するプロキシサーバを設定します。
109 
110       @param[in]    pProxyName      プロキシサーバのホストサーバ名
111       @param[in]    port            プロキシサーバのポート番号
112       @param[in]    pUserName       プロキシサーバのBasic認証用ユーザー名
113       @param[in]    pPassword       プロキシサーバのBasic認証用パスワード
114       @return       処理の結果が返ります。<BR>
115     */
116     nn::Result SetProxy(const char* pProxyName, u16 port, const char* pUserName, const char* pPassword);
117 
118     /*!
119       @brief        Basic認証に用いる情報を設定します。
120 
121       @param[in]    pUserName       Basic認証用ユーザー名
122       @param[in]    pPassword       Basic認証用パスワード
123       @return       処理の結果が返ります。<BR>
124     */
125     nn::Result SetBasicAuthorization(const char* pUserName, const char* pPassword);
126 
127     /*!
128       @brief        通信で用いるSocketのTCP受信バッファサイズを設定する。
129 
130                     受信バッファに使用するメモリは HTTP 内にあらかじめ確保されているメモリから割り当てられることに注意してください。
131                     他のモジュールで作成した HTTP セッションにおいて大きな受信バッファサイズを指定していると、
132                     設定に失敗することがあります。
133                     従って、エラーが発生した場合には、エラーを無視しそのまま処理を続行してください。
134       @param[in]    size             設定するTCP受信バッファサイズ
135       @return       処理の結果が返ります。<BR>
136     */
137     nn::Result SetSocketBufferSize(size_t size);
138 
139     //@}
140 
141     //----------------------------------------
142     //! @name 通信制御
143     //@{
144 
145     /*!
146       @brief        通信先との接続を開始します。
147                     (同期版です。つまり「すでに機器が最大数のHTTP通信を行っている場合は、他のHTTP通信が終わるまでブロックします」。)
148       @return       処理の結果が返ります。<BR>
149       @retval       Description== @ref ER_CONN_CANCELED 「通信はキャンセルされました。」を表すエラー
150     */
151     nn::Result Connect(void);
152 
153     /*!
154       @brief        通信先との接続を開始します。
155                     (非同期版です。つまり「すでに機器が最大数のHTTP通信を行っている場合は、エラーが返ります。」)
156       @return       処理の結果が返ります。<BR>
157       @retval       Description== @ref ER_MSGQ_SEND_LSN 「すでに機器が最大数のHTTP通信を行っています」を表すエラー。
158       @retval       Description== @ref ER_CONN_CANCELED 「通信はキャンセルされました。」を表すエラー
159     */
160     nn::Result ConnectAsync(void);
161 
162     /*!
163       @brief        接続をキャンセルします。
164       @return       処理の結果が返ります。<BR>
165     */
166     nn::Result Cancel(void);
167 
168     /*!
169       @brief        接続の状況を取得します。(取得される状況の種類については、@ref nn::http::Status の定義を参照してください。)
170 
171       @param[out]   pStatusBuf  接続状況を格納するためのバッファ
172       @return       処理の結果が返ります。<BR>
173     */
174     nn::Result GetStatus(Status* pStatusBuf) const;
175 
176     /*!
177       @brief        接続中に発生したエラーを取得します。(取得値は最後に発生したエラーとなります。取得される状況の種類については、@ref nn::http::ResultCodeの定義を参照してください。)
178       @param[out]   pResultCodeBuf  エラーを格納するためのバッファ
179       @return       処理の結果が返ります。<BR>
180     */
181     nn::Result GetError(ResultCode* pResultCodeBuf) const;
182 
183     /*!
184       @brief        HTTPレスポンスのメッセージボディ受信の進捗状況を取得します。
185 
186       @param[out]   pReceivedLen    「メッセージボディの受信済みデータサイズ」を格納するバッファ
187       @param[out]   pContentLen     「メッセージボディの受信予定総データサイズ」を格納するバッファ
188                                     (HTTPレスポンスのContent-Lengthの値です。Content-Lengthが指定されていない場合は、0が返ります。)
189       @return 処理の結果が返ります。<BR>
190     */
191     nn::Result GetProgress(size_t* pReceivedLen, size_t* pContentLen) const;
192 
193     //@}
194 
195     //----------------------------------------
196     //! @name レスポンス受信
197     //@{
198 
199     /*!
200       @brief        HTTPレスポンスを読み取ります。
201 
202                     引数で指定したバッファに、メッセージボディのデータが格納されます。<BR/>
203                     メッセージボディがバッファよりも大きい場合は、バッファに入るだけデータを格納し、エラー(Description==  @ref ER_RES_BODYBUF_SHORTAGE)を返します。<BR/>
204                     その後再度 @ref Read を実行することで、前回の @ref Read でバッファに格納したデータの次のデータから、読み取りを継続できます。<BR/>
205                     すべてのメッセージボディデータの受信が完了すると、SuccessのResultが返ります。<BR/>
206         <BR/>
207                     ユーザーが指定したバッファに格納されるメッセージボディに対して、以下のデータはライブラリ側が保持しています。<BR/>
208                     これらデータの取得には、それぞれ専用のAPIを使用してください。<BR/>
209                     ・レスポンスステータス - @ref GetStatusCode                             <BR/>
210                     ・メッセージヘッダ         - @ref GetHeaderField / @ref GetHeaderAll        <BR/>
211        <BR/>
212                     ※@ref Read の実施前にこれらAPIを利用した場合、ヘッダ部受信完了までこれら関数はブロックします。 <BR/>
213                     ※@ref Read の成功完了後は、ヘッダ部受信はすでに完了しているため、これら関数は結果をすぐに返します。 <BR/>
214                     ※@ref Read の返値のエラーは、HTTPレスポンスの受信自体に失敗したことを示します。 <BR/>
215                                        そのため、受信には成功し、メッセージにて通信エラー(認証失敗など)が通知された場合では、@ref Read の戻り値は成功となります。 <BR/>
216                                        このようなエラーを確認したい場合は、@ref GetStatusCode で取得されるステータスコードを使用してください。 <BR/>
217                     ※タイムアウト付きの@ref Read と異なり、この関数はタイムアウトしません。つまり処理が終了するまでは、関数から戻りません。<BR/>
218                                        そのため、例えば通信速度の低い環境で使用した場合には、処理が終了(「HTTPレスポンスの受信が完了する」か「バッファが一杯になる」)して関数から戻るまで、長時間かかることが予想されます。<BR/>
219 
220       @param[out]   pBodyBuf        HTTPレスポンスのメッセージボディを格納するバッファ
221       @param[in]    bufLen          pBodyBufのサイズ
222       @return       処理の結果が返ります。<BR/>
223       @retval       Description== @ref ER_RES_BODYBUF_SHORTAGE 「メッセージボディがバッファよりも大きく、すべて読み取れていません。」を表すエラー
224       @retval       Description== @ref ER_SOC_DNS 「URLで指定されたホスト名に対する名前解決が失敗しました。」を表すエラー
225       @retval       Description== @ref ER_CONN_CANCELED 「通信はキャンセルされました。」を表すエラー
226     */
227     nn::Result Read(u8* pBodyBuf, size_t bufLen);
228 
229     /*!
230       @brief        タイムアウト付きの@ref Read です。
231 
232                     タイムアウトが指定できること以外は、タイムアウト指定無しの@ref Read と同機能のAPIです。機能の詳細はタイムアウト無しAPIのリファレンスを参照してください。<BR/>
233                     タイムアウト時間以内に「HTTPレスポンスの受信が完了する」、「バッファが一杯になる」のいずれの状態にもならなかった場合、@ref ResultTimeout が返ります。<BR/>
234                     @ref ResultTimeout()が返った場合、そのコネクションは自動的にキャンセルされた状態になっています。(つまり@ref Cancel  が内部的に実施されています。)<BR/>
235 
236       @param[out]   pBodyBuf        HTTPレスポンスのメッセージボディを格納するバッファ
237       @param[in]    bufLen          pBodyBufのサイズ
238       @param[in]    timeout         タイムアウト時間
239       @return       処理の結果が返ります。<BR/>
240     */
241     nn::Result Read(u8* pBodyBuf, size_t bufLen, const nn::fnd::TimeSpan& timeout);
242 
243 
244     /*!
245       @brief        受信したHTTPレスポンスのメッセージヘッダから、指定したラベルに一致するフィールドの値を取得します。
246 
247                     ヘッダ部受信処理終了まで、本APIはブロックします。受信処理が完了するのは、以下の条件が満たされた場合です。<BR/>
248                      ・全ヘッダデータの受信が完了した<BR/>
249                      ・キャンセルが実行された<BR/>
250                      ・通信エラーが発生した(DNS名前解決失敗時など)<BR/>
251                     他APIでヘッダ部受信処理終了がすでに完了している場合は、本APIはすぐに応答を返します。<BR/>
252         <BR/>
253                     ※pFieldBufのサイズがフィールド値のサイズよりも小さい場合は、pFieldBufに格納できるだけデータを格納し、pFieldLengthCourierにはフィールド値のサイズを格納します。<BR/>
254                     ※pFieldBuf==NULLまたはbufSize==0の場合、pFieldLengthCourier!=NULLであれば、フィールドの長さがpFieldLengthCourierに格納されます。<BR/>
255                     ※タイムアウト付きの@ref GetHeaderField と異なり、この関数はタイムアウトしません。つまり処理が終了するまでは、関数から戻りません。<BR/>
256                                        そのため、例えば通信速度の低い環境で使用した場合には、処理が終了して関数から戻るまで、長時間かかることが予想されます。<BR/>
257 
258       @param[in]    pLabel          ラベル名
259       @param[out]   pFieldBuf       フィールド値を格納するバッファ
260       @param[in]    bufSize         pFieldBufのデータサイズ
261       @param[out]   pFieldLengthCourier フィールド値のデータサイズを格納するバッファ(フィールド値のデータサイズを必要としない場合は、省略可)
262       @return       処理の結果が返ります。<BR/>
263       @retval       Description== @ref ER_SOC_DNS 「URLで指定されたホスト名に対する名前解決が失敗しました。」を表すエラー
264       @retval       Description== @ref ER_CONN_CANCELED 「通信はキャンセルされました。」を表すエラー
265     */
266     nn::Result GetHeaderField(const char* pLabel, char* pFieldBuf, size_t bufSize, size_t* pFieldLengthCourier = NULL) const;
267 
268     /*!
269       @brief        タイムアウト付きの@ref GetHeaderField です。
270 
271                     タイムアウトが指定できること以外は、タイムアウト指定無しの@ref GetHeaderField と同機能のAPIです。機能の詳細はタイムアウト無しAPIのリファレンスを参照してください。<BR/>
272                     タイムアウト時間以内にHTTPレスポンスヘッダの受信が完了しなかった場合、@ref ResultTimeout が返ります。<BR/>
273                     @ref ResultTimeout()が返った場合、そのコネクションは自動的にキャンセルされた状態になっています。(つまり@ref Cancel  が内部的に実施されています。)<BR/>
274 
275       @param[in]    pLabel          ラベル名
276       @param[out]   pFieldBuf       フィールド値を格納するバッファ
277       @param[in]    bufSize         pFieldBufのデータサイズ
278       @param[in]    timeout         タイムアウト時間
279       @param[out]   pFieldLengthCourier フィールド値のデータサイズを格納するバッファ(フィールド値のデータサイズを必要としない場合は、省略可)
280       @return       処理の結果が返ります。<BR/>
281     */
282     nn::Result GetHeaderField(const char* pLabel, char* pFieldBuf, size_t bufSize, const nn::fnd::TimeSpan& timeout, size_t* pFieldLengthCourier = NULL) const;
283 
284     /*!
285       @brief        受信したHTTPレスポンスのメッセージヘッダを取得します。
286 
287                     ヘッダ部受信処理終了まで、本APIはブロックします。この仕様に関する詳細は @ref GetHeaderField の説明を参照してください。<BR/>
288                     ※pHeaderBufのサイズがヘッダのサイズよりも小さい場合は、pHeaderBufに格納できるだけデータを格納し、pLengthCourierにはヘッダのサイズを格納します。<BR/>
289                     ※pHeaderBuf==NULLまたはbufSize==0の場合、pLengthCourier!=NULLであれば、フィールドの長さがpLengthCourierに格納されます。 <BR/>
290                     ※タイムアウト付きの@ref GetHeaderAll と異なり、この関数はタイムアウトしません。つまり処理が終了するまでは、関数から戻りません。<BR/>
291                                        そのため、例えば通信速度の低い環境で使用した場合には、処理が終了して関数から戻るまで、長時間かかることが予想されます。<BR/>
292       @param[out]   pHeaderBuf      メッセージヘッダを格納するバッファ
293       @param[in]    bufSize         pHeaderBufのデータサイズ
294       @param[out]   pLengthCourier  メッセージヘッダサイズを格納するバッファ(メッセージヘッダサイズを必要としない場合は、省略可)
295       @return       処理の結果が返ります。(結果定義は、@ref GetHeaderField と同様)<BR/>
296     */
297     nn::Result GetHeaderAll(char* pHeaderBuf, size_t bufSize, size_t* pLengthCourier = NULL) const;
298 
299     /*!
300       @brief        タイムアウト付きの@ref GetHeaderAll です。
301 
302                     タイムアウトが指定できること以外は、タイムアウト指定無しの@ref GetHeaderAll と同機能のAPIです。機能の詳細はタイムアウト無しAPIのリファレンスを参照してください。<BR/>
303                     タイムアウト時間以内にHTTPレスポンスヘッダの受信が完了しなかった場合、@ref ResultTimeout が返ります。<BR/>
304                     @ref ResultTimeout()が返った場合、そのコネクションは自動的にキャンセルされた状態になっています。(つまり@ref Cancel  が内部的に実施されています。)<BR/>
305 
306       @param[out]   pHeaderBuf      メッセージヘッダを格納するバッファ
307       @param[in]    bufSize         pHeaderBufのデータサイズ
308       @param[in]    timeout         タイムアウト時間
309       @param[out]   pLengthCourier  メッセージヘッダサイズを格納するバッファ(メッセージヘッダサイズを必要としない場合は、省略可)
310       @return       処理の結果が返ります。(結果定義は、@ref GetHeaderField と同様)<BR/>
311     */
312     nn::Result GetHeaderAll(char* pHeaderBuf, size_t bufSize, const nn::fnd::TimeSpan& timeout, size_t* pLengthCourier = NULL) const;
313 
314     /*!
315       @brief        受信したHTTPレスポンスのステータスコードを取得します。
316 
317                     ヘッダ部受信処理終了まで、本APIはブロックします。この仕様に関する詳細は @ref GetHeaderField の説明を参照してください。<BR/>
318                     ※タイムアウト付きの@ref GetStatusCode と異なり、この関数はタイムアウトしません。つまり処理が終了するまでは、関数から戻りません。<BR/>
319                                        そのため、例えば通信速度の低い環境で使用した場合には、処理が終了して関数から戻るまで、長時間かかることが予想されます。<BR/>
320       @param[out]   pStatusCodeCourier  ステータスコードを格納するバッファ
321       @return       処理の結果が返ります。(結果定義は @ref GetHeaderField と同様)<BR/>
322     */
323     nn::Result GetStatusCode(s32* pStatusCodeCourier) const;
324 
325     /*!
326       @brief        タイムアウト付きの@ref GetStatusCode です。
327 
328                     タイムアウトが指定できること以外は、タイムアウト指定無しの@ref GetStatusCode と同機能のAPIです。機能の詳細はタイムアウト無しAPIのリファレンスを参照してください。<BR/>
329                     タイムアウト時間以内にHTTPレスポンスヘッダの受信が完了しなかった場合、@ref ResultTimeout が返ります。<BR/>
330                     @ref ResultTimeout()が返った場合、そのコネクションは自動的にキャンセルされた状態になっています。(つまり@ref Cancel  が内部的に実施されています。)<BR/>
331 
332       @param[out]   pStatusCodeCourier  ステータスコードを格納するバッファ
333       @param[in]    timeout         タイムアウト時間
334       @return       処理の結果が返ります。(結果定義は、@ref GetHeaderField と同様)<BR/>
335     */
336     nn::Result GetStatusCode(s32* pStatusCodeCourier, const nn::fnd::TimeSpan& timeout) const;
337 
338     //@}
339 
340 
341     //----------------------------------------
342     //! @name 送信データ設定(HTTPリクエストヘッダ、POST)
343     //@{
344 
345     /*!
346       @brief        HTTPリクエストで送信するメッセージヘッダのフィールドを追加します。
347 
348       @param[in]    pLabel          フィールドのラベル名
349       @param[in]    pValue          フィールドの内容
350       @return       処理の結果が返ります。<BR>
351     */
352     nn::Result AddHeaderField(const char* pLabel, const char* pValue);
353 
354 
355     /*!
356       @brief        POSTデータの @ref Connect 前設定用API(ASCII文字列用)です。
357 
358                     HTTPリクエストで送信するPOSTデータ(ASCII文字列)を追加します。<BR/>
359                     このAPIは @ref Connect 実行前の設定に使用します。設定後の @ref Connect 実行によって、POSTデータが送信されます。<BR/>
360                     同じラベルのデータが先に追加されていた場合は、データを更新します。(つまり前に追加したデータを削除してから、追加します。)<BR/>
361                     <BR/>
362                     すべてのPOSTデータが @ref AddPostDataAscii のみで設定された場合、送信データはラベル、データ共にエンコードされた上で送信されます。<BR/>
363                     (HTTPヘッダのContent-Typeには"x-www-form-urlencoded"が設定されます。)<BR/>
364                     <BR/>
365                     一つでも @ref AddPostDataBinary で設定したデータがある場合は、POSTデータはすべて、エンコードされずに(そのまま)送信されます。<BR/>
366                     (HTTPヘッダのContent-Typeには"multipart/form-data"が設定されます。)<BR/>
367 
368       @param[in]    pLabel          データのラベル名
369       @param[in]    pValue          データの内容
370       @return       処理の結果が返ります。<BR>
371     */
372     nn::Result AddPostDataAscii(const char* pLabel, const char* pValue);
373 
374     /*!
375       @brief        POSTデータの @ref Connect 前設定用API(バイナリデータ用)です。
376 
377                     HTTPリクエストで送信するPOSTデータ(バイナリデータ)を追加します。<BR/>
378                     このAPIは @ref Connect 実行前の設定に使用します。<BR/>
379                     設定後の @ref Connect実行によって、POSTデータが送信されます。<BR/>
380                     同じラベルのデータが先に追加されていた場合は、データを更新します。<BR/>
381                     (つまり前に追加したデータを削除してから、追加します。)<BR/>
382                    <BR/>
383                     @ref AddPostDataBinary で設定したデータがある場合は、POSTデータはすべて、エンコードされずに(そのまま)送信されます。<BR/>
384                     (HTTPヘッダのContent-Typeには"multipart/form-data"が設定されます。)<BR/>
385 
386       @param[in]    pLabel          データのラベル名
387       @param[in]    pValue          データの内容
388       @param[in]    valueSize       pValueのデータサイズ
389       @return       処理の結果が返ります。<BR>
390     */
391     nn::Result AddPostDataBinary(const char* pLabel, const void* pValue, size_t valueSize);
392 
393     /*!
394       @brief        POSTデータの @ref Connect 前設定用API(Rawデータ用)です。
395 
396                     HTTPリクエストで送信するPOSTデータすべてを、一括で設定します。<BR/>
397                     バイナリ形式ですが、POSTデータ全体を直接Rawデータで設定します。<BR/>
398                     (他のAPIは、POSTデータのラベル部とバリュー部を設定します。)<BR/>
399                     <BR/>
400                     このAPIは @ref Connect 実行前の設定に使用します。<BR/>
401                     設定後の @ref Connect 実行によって、POSTデータが送信されます。<BR/>
402                     <BR/>
403                     POSTデータ全体を設定しますので、本APIによる設定以降にPOSTデータ部分設定API(@ref AddPostDataAscii と @ref AddPostDataBinary)<BR/>
404                     を呼び出すと、エラー(Descriptionは @ref nn::http::ER_POST_ADDED_ANOTHER)が返ります。<BR/>
405                     本APIによる設定以降に、再び本APIでRawデータを設定した場合は、前回設定したデータは破棄され、設定データが更新されます。<BR/>
406 
407       @param[in]    pValue          データの内容
408       @param[in]    valueSize       pValueのデータサイズ
409       @return       処理の結果が返ります。<BR>
410     */
411     nn::Result AddPostDataRaw(const void* pValue, size_t valueSize);
412 
413     /*!
414       @brief        POSTデータ遅延設定モード(@ref Connect 後のデータ指定モード)に設定します。
415 
416                     この関数を実行すると、POSTデータの遅延設定(@ref Connect / @ref ConnectAsync 実行後に、SendPostData××()によってデータを設定)が可能となります。<BR/>
417                     <BR/>
418                     POSTデータ遅延設定モードでは、@ref Connect / @ref ConnectAsync 実行後、SendPostData××()は何回実行しても構いません。<BR/>
419                     POSTデータは、SendPostData××()の同期処理としてそのまま送信されます。よって送信が完了するまで、SendPostData××()はブロックします。<BR/>
420                     すべてのPOSTデータの設定が完了したら、@ref NotifyFinishSendPostData を実行しなければなりません。<BR/>
421                     <BR/>
422                     NotifyFinishSendPostData()の実行後、HTTPレスポンスの受信に移行します。<BR/>
423 
424       @param[in]    dataType        POSTデータのタイプです。
425 
426                                      @ref nn::http::POST_DATA_TYPE_URLENCODE : 設定したデータは、ASCIIデータの場合(つまり@ref SendPostDataAscii を使った場合)には、データがURLエンコードされて送信されます。<BR/>
427                                     使用できるSendPostData××()は、@ref SendPostDataAscii と @ref SendPostDataBinary です。<BR/>
428                                     @ref SendPostDataAscii を使った場合は、URLエンコードされた[<ラベル名>=<データ内容>]のデータが送信されます。<BR/>
429                                     @ref SendPostDataBinary を使った場合は、URLエンコードされない[<ラベル名>=<データ内容>]のデータが送信されます。<BR/>
430                                     1回のSendPostData××()で設定されたラベルとデータは、Chunkedデータの一単位としてまとめて送信されます。<BR/>
431                                     <BR/>
432                                     <BR/>
433                                     @ref nn::http::POST_DATA_TYPE_MULTIPART : 設定したデータは、MIMEのマルチパートデータとして送信されます。<BR/>
434                                     使用できるSendPostData××()は、@ref SendPostDataAscii と @ref SendPostDataBinaryです。<BR/>
435                                     1回のSendPostData××()で設定されたラベルとデータは、boundaryデータやヘッダフィールドが先頭に付与されて、Chunkedデータの一単位としてまとめて送信されます。<BR/>
436                                     設定したラベルデータは、Content-Dispositionフィールドのnameとして設定されます。<BR/>
437                                     (すなわち"Content-Disposition: form-data; name=[ラベル]"というヘッダフィールドが、Chunkedデータのboundaryデータの後に付与されます。)<BR/>
438                                     @ref SendPostDataBinaryでラベルとデータを設定した場合は、Chunkedデータのboundaryデータの後に、Content-Typeフィールドが付与されます。<BR/>
439                                     (フィールド内容は"Content-Type: application/octet-stream\\r\\nContent-Transfer-Encoding: binary\\r\\n"となります。<BR/>
440                                     @ref SendPostDataAscii で設定したデータのChunkedデータには、このフィールドは付与されません。)<BR/>
441                                     <BR/>
442                                     <BR/>
443                                     @ref nn::http::POST_DATA_TYPE_RAW       : 設定したデータは、そのまま送信されます。使用できるSendPostData××()は、@ref SendPostDataRaw のみです。<BR/>
444                                     1回の @ref SendPostDataRaw で設定されたデータは、Chunkedデータの一単位としてまとめて送信されます。
445 
446       @return       処理の結果が返ります。<BR>
447     */
448     nn::Result SetLazyPostDataSetting( PostDataType dataType );
449 
450     /*!
451       @brief        POSTデータ遅延設定モード時、全POSTデータ設定完了を通知します。
452 
453                     詳しくは @ref SetLazyPostDataSetting の説明を参照してください。
454       @return       処理の結果が返ります。<BR>
455     */
456     nn::Result NotifyFinishSendPostData( void );
457 
458     /*!
459       @brief        HTTPリクエストのPOSTデータのエンコードタイプを設定します。
460 
461       @param[in]    type 設定するエンコードタイプ
462       @return       処理の結果が返ります。<BR>
463     */
464     nn::Result SetPostDataEncoding(EncodingType type);
465 
466     /*!
467       @brief        POSTデータ遅延設定モード時のPOSTデータ設定用API(ASCII文字列用)です。
468 
469                     POSTデータ遅延設定モード(@ref SetLazyPostDataSetting でモードに入ることができる。)において、@ref Connect / @ref ConnectAsync 実行後に使用することができます。
470                     POSTデータ遅延設定モードの詳細は、@ref SetLazyPostDataSetting の説明を参照してください。
471 
472                     ※タイムアウト付きの@ref SendPostDataAscii と異なり、この関数はタイムアウトしません。つまり処理が終了するまでは、関数から戻りません。<BR/>
473                                        そのため、例えば通信速度の低い環境で使用した場合には、処理が終了して関数から戻るまで、長時間かかることが予想されます。<BR/>
474       @param[in]    pLabel          データのラベル名
475       @param[in]    pValue          データの内容
476       @return       処理の結果が返ります。<BR>
477     */
478     nn::Result SendPostDataAscii(const char* pLabel, const char* pValue);
479 
480     /*!
481       @brief        タイムアウト付きの@ref SendPostDataAscii です。
482 
483                     タイムアウトが指定できること以外は、タイムアウト指定無しの@ref SendPostDataAscii と同機能のAPIです。機能の詳細はタイムアウト無しAPIのリファレンスを参照してください。<BR/>
484                     タイムアウト時間以内にPOSTデータの送信が完了しなかった場合、@ref ResultTimeout が返ります。<BR/>
485                     @ref ResultTimeout()が返った場合、そのコネクションは自動的にキャンセルされた状態になっています。(つまり@ref Cancel  が内部的に実施されています。)<BR/>
486 
487       @param[in]    pLabel          データのラベル名
488       @param[in]    pValue          データの内容
489       @param[in]    timeout         タイムアウト時間
490       @return       処理の結果が返ります。<BR>
491     */
492     nn::Result SendPostDataAscii(const char* pLabel, const char* pValue, const nn::fnd::TimeSpan& timeout);
493 
494     /*!
495       @brief        POSTデータ遅延設定モード時のPOSTデータ設定用API(バイナリデータ用)です。
496 
497                     POSTデータ遅延設定モード(@ref SetLazyPostDataSetting でモードに入ることができる。)において、@ref Connect / @ref ConnectAsync 実行後に使用することができます。
498                     POSTデータ遅延設定モードの詳細は、@ref SetLazyPostDataSetting の説明を参照してください。
499 
500                     ※タイムアウト付きの@ref SendPostDataBinary と異なり、この関数はタイムアウトしません。つまり処理が終了するまでは、関数から戻りません。<BR/>
501                                        そのため、例えば通信速度の低い環境で使用した場合には、処理が終了して関数から戻るまで、長時間かかることが予想されます。<BR/>
502 
503       @param[in]    pLabel          データのラベル名
504       @param[in]    pValue          データの内容
505       @param[in]    valueSize       pValueのデータサイズ
506       @return       処理の結果が返ります。<BR>
507     */
508     nn::Result SendPostDataBinary(const char* pLabel, const void* pValue, size_t valueSize);
509 
510     /*!
511       @brief        タイムアウト付きの@ref SendPostDataBinary です。
512 
513                     タイムアウトが指定できること以外は、タイムアウト指定無しの@ref SendPostDataBinary と同機能のAPIです。機能の詳細はタイムアウト無しAPIのリファレンスを参照してください。<BR/>
514                     タイムアウト時間以内にPOSTデータの送信が完了しなかった場合、@ref ResultTimeout が返ります。<BR/>
515                     @ref ResultTimeout()が返った場合、そのコネクションは自動的にキャンセルされた状態になっています。(つまり@ref Cancel  が内部的に実施されています。)<BR/>
516 
517       @param[in]    pLabel          データのラベル名
518       @param[in]    pValue          データの内容
519       @param[in]    valueSize       pValueのデータサイズ
520       @param[in]    timeout         タイムアウト時間
521       @return       処理の結果が返ります。<BR>
522     */
523     nn::Result SendPostDataBinary(const char* pLabel, const void* pValue, size_t valueSize, const nn::fnd::TimeSpan& timeout);
524 
525     /*!
526       @brief        POSTデータ遅延設定モード時のPOSTデータ設定用API(RAWデータ用)です。
527 
528                     POSTデータ遅延設定モード(@ref SetLazyPostDataSetting でモードに入ることができる。)において、@ref Connect / @ref ConnectAsync 実行後に使用することができます。
529                     POSTデータ遅延設定モードの詳細は、@ref SetLazyPostDataSetting の説明を参照してください。
530 
531                     ※タイムアウト付きの@ref SendPostDataRaw と異なり、この関数はタイムアウトしません。つまり処理が終了するまでは、関数から戻りません。<BR/>
532                                        そのため、例えば通信速度の低い環境で使用した場合には、処理が終了して関数から戻るまで、長時間かかることが予想されます。<BR/>
533 
534       @param[in]    pValue          データの内容
535       @param[in]    valueSize       pValueのデータサイズ
536       @return       処理の結果が返ります。<BR>
537     */
538     nn::Result SendPostDataRaw(const void* pValue, size_t valueSize);
539 
540     /*!
541       @brief        タイムアウト付きの@ref SendPostDataRaw です。
542 
543                     タイムアウトが指定できること以外は、タイムアウト指定無しの@ref SendPostDataRaw と同機能のAPIです。機能の詳細はタイムアウト無しAPIのリファレンスを参照してください。<BR/>
544                     タイムアウト時間以内にPOSTデータの送信が完了しなかった場合、@ref ResultTimeout が返ります。<BR/>
545                     @ref ResultTimeout()が返った場合、そのコネクションは自動的にキャンセルされた状態になっています。(つまり@ref Cancel  が内部的に実施されています。)<BR/>
546 
547       @param[in]    pValue          データの内容
548       @param[in]    valueSize       pValueのデータサイズ
549       @param[in]    timeout         タイムアウト時間
550       @return       処理の結果が返ります。<BR>
551     */
552     nn::Result SendPostDataRaw(const void* pValue, size_t valueSize, const nn::fnd::TimeSpan& timeout);
553 
554     //@}
555 
556     //----------------------------------------
557     //! @name HTTPS用設定
558     //@{
559 
560     /*!
561       @brief        CA証明書を設定します。複数回実行することで、複数個の証明書を設定することもできます。
562 
563       @param[in]    pCertData   証明書データ。データフォーマットは、X.509 v3の証明書データ(ASN.1定義)をDERエンコードしたバイナリデータ。
564       @param[in]    certDataSize pCertDataのサイズ 。
565       @return       処理の結果が返ります。<BR>
566     */
567     nn::Result SetRootCa(const u8* pCertData, size_t certDataSize);
568 
569     /*!
570       @brief        機器内蔵CA証明書を設定します。複数回実行することで、複数個の証明書を設定することもできます。
571 
572       @param[in]    inCaCertName   対象の機器内蔵CA証明書(ssl の @ref nn::ssl::InternalCaCertの値。)
573       @return       処理の結果が返ります。<BR>
574     */
575     nn::Result SetRootCa( InternalCaCertId inCaCertName );
576 
577     /*!
578       @brief        CA証明書ストアを設定します。(複数のHTTPS通信で同じCA証明書セットを使いまわしたい場合に利用します。)
579                     設定した証明書ストアは、設定先のHTTPS通信実施中は解放しないでください。
580 
581       @param[in]    certStore 設定する証明書ストア
582       @return       処理の結果が返ります。<BR>
583     */
584     nn::Result SetRootCaStore(CertStore& certStore);
585 
586 
587     /*!
588       @brief        証明書と秘密鍵のデータからクライアント証明書を設定します。
589 
590       @param[in]    pCertData           証明書データ。データフォーマットは、X.509 v3の証明書データ(ASN.1定義)をDERエンコードしたバイナリデータ。
591       @param[in]    certDataSize        pCertDataのサイズ 。
592       @param[in]    pPrivateKeyData     秘密鍵のデータ。データフォーマットは、X.509の鍵データ(ASN.1定義)をDERエンコードしたバイナリデータ。
593       @param[in]    privateKeyDataSize  pPrivateKeyDataのサイズ 。
594       @return       処理の結果が返ります。<BR>
595     */
596     nn::Result SetClientCert(const u8* pCertData, size_t certDataSize, const u8* pPrivateKeyData, size_t privateKeyDataSize);
597 
598     /*!
599       @brief        機器内蔵クライアント証明書を設定します。
600 
601       @param[in]  inClientCertName   対象の機器内蔵クライアント証明書(sslの @ref nn::ssl::InternalClientCertの値。)
602       @return 処理の結果が返ります。<BR>
603     */
604     nn::Result SetClientCert( InternalClientCertId inClientCertName );
605 
606     /*!
607       @brief        ClientCertインスタンスを用いてクライアント証明書を設定します。(複数のHTTPS通信で同じクライアント証明書を使いまわしたい場合に利用します。)
608                     設定したクライアント証明書は、設定先のHTTPS通信実施中は解放しないでください。
609       @param[in]    clientCert   設定するクライアント証明書。
610       @return       処理の結果が返ります。<BR>
611     */
612     nn::Result SetClientCert(ClientCert& clientCert);
613 
614 
615     /*!
616       @brief        SSL通信中に発生したエラーを取得します。
617                     (エラーコードは @ref  nn::ssl::ResultCode の値となります。取得される値は、本関数を呼び出す前の最後に発生したエラーコードとなります。)
618 
619       @param[out]   pResultCodeBuf エラーを格納するためのバッファ
620       @return       処理の結果が返ります。<BR>
621     */
622     nn::Result GetSslError(s32* pResultCodeBuf) const;
623 
624 
625     /*!
626       @brief        SSLのサーバ検証に関するオプションを設定します。<BR/>
627                                                             ※ @ref nn::ssl::VerifyOption 列挙体に定義が存在する以下の検証は、デフォルトで実施されます。<BR/>
628                                                             CommonName検証(@ref nn::ssl::VERIFY_COMMON_NAME)<BR/>
629                                                             RootCA検証(@ref nn::ssl::VERIFY_ROOT_CA)<BR/>
630                                                             SubjectAlternativeName検証(@ref nn::ssl::VERIFY_SUBJECT_ALT_NAME)<BR/>
631 
632       @param[in]    verifyOption    SSLのサーバ検証に関するオプション設定。デフォルトのサーバ検証では実施しない設定となっている検証オプションを、実施する場合に利用します。
633                                     (デフォルトのサーバ検証を用いる場合は、この引数は省略できます。)
634                                     引数には、実施する検証オプションを表す @ref nn::ssl::VerifyOption 列挙体の値を設定します。
635                                     (複数の値を設定したい場合は、複数値の論理和を設定します。)
636                                     <BR/>
637                                     現在この引数に設定可能な値は、以下となります。<BR/>
638                                      @ref nn::ssl::VERIFY_DATE            : 証明書の期限切れ検証を実施します。<BR/>
639                                      @ref nn::ssl::USE_SESSION_CACHE      : resumptionを利用します。(つまり同じホストに連続で接続する際、セッションの再利用を試みます。)<BR/>
640                                      @ref nn::ssl::VERIFY_EV              : EV証明書検証を実施します(この検証では、サーバ証明書がEV証明書に紐づいたもので無い限り、検証失敗となります。)<BR/>
641                                      ※本APIによるオプション設定は、設定対象の通信開始前(つまり @ref Connect / @ref ConnectAsync の呼び出し前)に実施する必要があります。
642       @return       処理の結果が返ります。<BR>
643     */
644     nn::Result SetVerifyOption(u32 verifyOption);
645 
646     /**
647       @brief        指定したビットのSSL通信の検証内容を削除します。
648 
649                     デフォルトで検証する項目は安全を守るためのものです。<BR/>
650                     デバッグ目的以外で検証項目を減らさないでください。<BR/>
651                     ※本APIによるオプション設定は、設定対象の通信開始前(つまり @ref Connect / @ref ConnectAsync の呼び出し前)に実施する必要があります。
652 
653       @param[in]    excludeVerifyOptions SSLの検証方法に関して、除外対象を表すオプション。
654                     除外したい検証方法を表す @ref nn::ssl::VerifyOption 列挙体の値を設定します。(複数の値を設定したい場合は、複数値の論理を設定します。)
655                     現在この引数に設定可能な値は、以下となります。
656                     <BR/>
657                         @ref nn::ssl::VERIFY_COMMON_NAME            : 証明書の CommonName が 対象ホストの名称と一致するか検証します。<BR/>
658                         @ref nn::ssl::VERIFY_SUBJECT_ALT_NAME       : CommonNameの検証を行う際に、証明書にSubjectAltNameの記述がある場合はそちらを優先して使用します。<BR/>
659                         @ref nn::ssl::VERIFY_ROOT_CA                : 証明書の Root CA を検証します。<BR/>
660 
661       @return       処理の結果が返ります。<BR>
662     */
663     nn::Result DisableVerifyOptionForDebug( u32 excludeVerifyOptions );
664 
665     /*!
666       @brief        [deprecated]廃止予定のAPIです。
667       機器内のデフォルト証明書をCA証明書として利用するように設定します。
668       @return       処理の結果が返ります。<BR>
669     */
670     nn::Result SetRootCaDefault( void );
671 
672     /*!
673       @brief        [deprecated]廃止予定のAPIです。
674       機器内のデフォルトクライアント証明書をクライアント証明書として利用するように設定します。
675       @return       処理の結果が返ります。<BR>
676     */
677     nn::Result SetClientCertDefault( void );
678     //@}
679 
680 
681 private:
682     /**
683      @brief         HTTPのコネクションハンドル。
684      */
685     ConnectionHandle m_ConnectHandle;
686 
687     /**
688      @brief         HTTPプロセスとのコネクション専用IPCセッション
689      */
690     nn::Handle m_privateIpcSession;
691 
692     /**
693      @brief         HTTPプロセスとのコネクション専用IPCクライアント
694      */
695     mutable ConnectionIpc m_PrivateIpcClient;
696 
697 
698     /*!
699       @brief        接続に利用するプロキシサーバを、デフォルトサーバに設定します。
700       @return       処理の結果が返ります。<BR>
701     */
702     nn::Result SetProxyDefault(void);
703 
704     /**
705      * @brief       コネクションが設定済みか否かを返す。「コネクションが設定済み」とは、Create関数でコネクト先と手段が指定されているか否かである。
706      * @return      コネクションが設定済みか否か(trueが設定済み)
707     */
IsConnected()708     bool IsConnected() const
709     {
710         return (m_ConnectHandle > 0) ? true : false;
711     }
712 
713     /**
714      * @brief       コネクション専用IPCクライアントを割り当てます。
715      * @return      処理の結果。
716     */
717     Result AssignPrivateIpcClient();
718 };
719 
720 
721 } // end of namespace http
722 } // end of namespace nn
723 
724 
725 #endif // __cplusplus
726 
727 
728 
729 #include <nn/util/detail/util_CLibImpl.h>
730 
731 
732 /*!
733   @addtogroup   nn_http               http
734   @{
735 
736   @defgroup     nn_http_Connection_c    Connection (C)
737 
738   @brief        @ref nn::http::Connection の C インタフェースモジュールです。
739 
740   @{
741 */
742 
743 /*!
744   @struct       nnhttpConnection
745   @brief        HTTPのConnectionを表す C の構造体です。
746 
747   @brief 対応するクラス @ref nn::http::Connection を参照してください。
748 */
749 NN_UTIL_DETAIL_CLIBIMPL_DEFINE_BUFFER_CLASS(nnhttpConnection, nn::http::Connection, 16, u32);
750 
751 /*!
752   @brief 対応する C++ 関数 @ref nn::http::Connection::Initialize を参照してください。
753 */
754 NN_EXTERN_C nnResult nnhttpConnectionInitialize(nnhttpConnection* this_, const char *pUrl, nnHttpRequestMethod method);
755 
756 /*!
757   @brief 対応する C++ 関数 @ref nn::http::Connection::Finalize を参照してください。
758 */
759 NN_EXTERN_C nnResult nnhttpConnectionFinalize(nnhttpConnection* this_);
760 
761 /*!
762   @brief 対応する C++ 関数 @ref nn::http::Connection::Connect を参照してください。
763 */
764 NN_EXTERN_C nnResult nnhttpConnectionConnect(nnhttpConnection* this_);
765 
766 /*!
767   @brief 対応する C++ 関数 @ref nn::http::Connection::ConnectAsync を参照してください。
768 */
769 NN_EXTERN_C nnResult nnhttpConnectionConnectAsync(nnhttpConnection* this_);
770 
771 /*!
772   @brief 対応する C++ 関数 @ref nn::http::Connection::Cancelを参照してください。
773 */
774 NN_EXTERN_C nnResult nnhttpConnectionCancel(nnhttpConnection* this_);
775 
776 /*!
777   @brief 対応する C++ 関数 @ref nn::http::Connection::Readを参照してください。
778 */
779 NN_EXTERN_C nnResult nnhttpConnectionRead(nnhttpConnection* this_, u8* pBodyBuf, u32 bufLen);
780 
781 /*!
782   @brief 対応する C++ 関数 @ref nn::http::Connection::GetStatusを参照してください。
783 */
784 NN_EXTERN_C nnResult nnhttpConnectionGetStatus(const nnhttpConnection* this_, nnHttpStatus* pStatusBuf);
785 
786 /*!
787   @brief 対応する C++ 関数 @ref nn::http::Connection::GetProgressを参照してください。
788 */
789 NN_EXTERN_C nnResult nnhttpConnectionGetProgress(const nnhttpConnection* this_, u32* pReceivedLen, u32* pContentLen);
790 
791 /*!
792   @brief 対応する C++ 関数 @ref nn::http::Connection::GetErrorを参照してください。
793 */
794 NN_EXTERN_C nnResult nnhttpConnectionGetError(const nnhttpConnection* this_, nnHttpResultCode* pResultCodeBuf);
795 
796 
797 
798 /* 接続設定 */
799 /*!
800   @brief 対応する C++ 関数 @ref nn::http::Connection::SetProxyを参照してください。
801 */
802 NN_EXTERN_C nnResult nnhttpConnectionSetProxy(nnhttpConnection* this_, const char* pProxyName, u16 port, const char* pUserName, const char* pPassword);
803 
804 /*!
805   @brief 対応する C++ 関数 @ref nn::http::Connection::SetBasicAuthorizationを参照してください。
806 */
807 NN_EXTERN_C nnResult nnhttpConnectionSetBasicAuthorization(nnhttpConnection* this_, const char *pUserName, const char *pPassword);
808 
809 /*!
810   @brief 対応する C++ 関数 @ref nn::http::Connection::SetSocketBufferSizeを参照してください。
811 */
812 NN_EXTERN_C nnResult nnhttpConnectionSetSocketBufferSize(nnhttpConnection* this_, u32 size);
813 
814 
815 /* HTTPリクエスト設定  */
816 /*!
817   @brief 対応する C++ 関数 @ref nn::http::Connection::AddHeaderFieldを参照してください。
818 */
819 NN_EXTERN_C nnResult nnhttpConnectionAddHeaderField(nnhttpConnection* this_, const char* pLabel, const char* pValue);
820 
821 /*!
822   @brief 対応する C++ 関数 @ref nn::http::Connection::AddPostDataAsciiを参照してください。
823 */
824 NN_EXTERN_C nnResult nnhttpConnectionAddPostDataAscii(nnhttpConnection* this_, const char* pLabel, const char* pValue);
825 
826 /*!
827   @brief 対応する C++ 関数 @ref nn::http::Connection::AddPostDataBinaryを参照してください。
828 */
829 NN_EXTERN_C nnResult nnhttpConnectionAddPostDataBinary(nnhttpConnection* this_, const char* pLabel, const char* pValue, u32 length);
830 
831 /*!
832   @brief 対応する C++ 関数 @ref nn::http::Connection::AddPostDataRawを参照してください。
833 */
834 NN_EXTERN_C nnResult nnhttpConnectionAddPostDataRaw(nnhttpConnection* this_, const char* pValue, u32 length);
835 
836 /*!
837   @brief 対応する C++ 関数 @ref nn::http::Connection::SetLazyPostDataSettingを参照してください。
838 */
839 NN_EXTERN_C nnResult nnhttpConnectionSetLazyPostDataSetting(nnhttpConnection* this_, nnHttpPostDataType dataType);
840 
841 
842 /*!
843   @brief 対応する C++ 関数 @ref nn::http::Connection::NotifyFinishSendPostDataを参照してください。
844 */
845 NN_EXTERN_C nnResult nnhttpConnectionNotifyFinishSendPostData(nnhttpConnection* this_);
846 
847 /*!
848   @brief 対応する C++ 関数 @ref nn::http::Connection::SetPostDataEncodingを参照してください。
849 */
850 NN_EXTERN_C nnResult nnhttpConnectionSetPostDataEncoding(nnhttpConnection* this_, nnHttpEncodingType type);
851 
852 /*!
853   @brief 対応する C++ 関数 @ref nn::http::Connection::SendPostDataAsciiを参照してください。
854 */
855 NN_EXTERN_C nnResult nnhttpConnectionSendPostDataAscii(nnhttpConnection* this_, const char* pLabel, const char* pValue);
856 
857 /*!
858   @brief 対応する C++ 関数 @ref nn::http::Connection::SendPostDataBinaryを参照してください。
859 */
860 NN_EXTERN_C nnResult nnhttpConnectionSendPostDataBinary(nnhttpConnection* this_, const char* pLabel, const void* pValue, size_t length);
861 
862 /*!
863   @brief 対応する C++ 関数 @ref nn::http::Connection::SendPostDataRawを参照してください。
864 */
865 NN_EXTERN_C nnResult nnhttpConnectionSendPostDataRaw(nnhttpConnection* this_, const void* pValue, u32 length);
866 
867 
868 
869 /* HTTPレスポンス取得 */
870 /*!
871   @brief 対応する C++ 関数 @ref nn::http::Connection::GetHeaderFieldを参照してください。
872 */
873 NN_EXTERN_C nnResult nnhttpConnectionGetHeaderField(const nnhttpConnection* this_, const char* pLabel, char* pFieldBuf, size_t bufSize, size_t* pFieldLengthCourier);
874 
875 /*!
876   @brief 対応する C++ 関数 @ref nn::http::Connection::GetHeaderAllを参照してください。
877 */
878 NN_EXTERN_C nnResult nnhttpConnectionGetHeaderAll(const nnhttpConnection* this_, char* pHeaderBuf, size_t bufSize, size_t* pLengthCourier);
879 
880 /*!
881   @brief 対応する C++ 関数 @ref nn::http::Connection::GetStatusCodeを参照してください。
882 */
883 NN_EXTERN_C nnResult nnhttpConnectionGetStatusCode(const nnhttpConnection* this_, s32* pStatusCodeCourier);
884 
885 /*!
886   @brief 対応する C++ 関数 @ref nn::http::Connection::GetSslErrorを参照してください。
887 */
888 NN_EXTERN_C nnResult nnhttpConnectionGetSslError(const nnhttpConnection* this_, s32* pResultCodeBuf);
889 
890 /*!
891   @brief 対応する C++ 関数 @ref nn::http::Connection::SetVerifyOptionを参照してください。
892 */
893 NN_EXTERN_C nnResult nnhttpConnectionSetVerifyOption(nnhttpConnection* this_, u32 verifyOption);
894 
895 /*!
896   @brief 対応する C++ 関数 @ref nn::http::Connection::SetRootCaを参照してください。
897 */
898 NN_EXTERN_C nnResult nnhttpSetRootCa(nnhttpConnection* this_, const u8 *pCertData, size_t certDataSize);
899 
900 /*!
901   @brief 対応する C++ 関数 @ref nn::http::Connection::SetRootCaを参照してください。
902 */
903 NN_EXTERN_C nnResult nnhttpSetInternalRootCa( nnhttpConnection* this_, NnHttpInternalCaCertId inCaCertName );
904 
905 /*!
906   @brief 対応する C++ 関数 @ref nn::http::Connection::SetRootCaStoreを参照してください。
907 */
908 NN_EXTERN_C nnResult nnhttpSetRootCaStore( nnhttpConnection* this_, nnhttpCertStore* pCertStore);
909 
910 /*!
911   @brief 対応する C++ 関数 @ref nn::http::Connection::SetClientCertを参照してください。
912 */
913 NN_EXTERN_C nnResult nnhttpSetClientCert(nnhttpConnection* this_, const u8* pCertData, size_t certDataSize, const u8* pPrivateKeyData, size_t privateKeyDataSize);
914 
915 /*!
916   @brief 対応する C++ 関数 @ref nn::http::Connection::SetClientCertを参照してください。
917 */
918 NN_EXTERN_C nnResult nnhttpSetInternalClientCert(nnhttpConnection* this_, NnHttpInternalClientCertId inClientCertName );
919 
920 /*!
921   @brief 対応する C++ 関数 @ref nn::http::Connection::SetClientCertを参照してください。
922 */
923 NN_EXTERN_C nnResult nnhttpSetClientCertObj(nnhttpConnection* this_, nnhttpClientCert* pClientCert);
924 
925 
926 
927 
928 /*!
929   @brief 対応する C++ 関数 @ref nn::http::Connection::DisableVerifyOptionForDebugを参照してください。
930 */
931 NN_EXTERN_C nnResult nnhttpDisableVerifyOptionForDebug(nnhttpConnection* this_, u32 verifyOption);
932 
933 /*!
934   @}
935 
936   @}
937 */
938 
939 #endif /* NN_HTTP_HTTP_CONNECTION_H_ */
940