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