![]() ![]() ![]()
|
SophiaFramework 2.2 |
#include <SFUNetwork/SFUHttpConnection.hpp>
class SFUHttpConnection;
typedef SFUHttpConnection& SFUHttpConnectionRef; typedef SFUHttpConnection* SFUHttpConnectionPtr; typedef SFUHttpConnection** SFUHttpConnectionHandle; typedef const SFUHttpConnection ConstSFUHttpConnection; typedef const SFUHttpConnection& ConstSFUHttpConnectionRef; typedef const SFUHttpConnection* ConstSFUHttpConnectionPtr; typedef const SFUHttpConnection** ConstSFUHttpConnectionHandle;
SFUHttpConnection は HTTP/HTTPS プロトコルを処理するためのクラスです。 BREW API の IWeb, IWebResp, IX509Chain インターフェイスを利用して、 より使いやすくハイレベルな機能を提供しています。 このクラスは DoJa に実装されている、 com.nttdocomo.io.HttpConnection クラスと似た設計になっています。
内部状態
このクラスのオブジェクトは、4つの内部状態をとります。 内部状態はステート値により表現されます。 以下にステート値の一覧を示します。
表 10. SFUHttpConnection のステート値
| STATE_CLOSED | サーバーとの接続がない状態です。 Open 関数を呼び出す前や、 Close 関数を呼び出した後は、 この状態になります。 |
| STATE_OPEN | Open 関数を呼び出した後にこの状態になります。 |
| STATE_REQUESTING | Connect 関数を呼び出した後にこの状態になります。 |
| STATE_GOTRESPONSE | Connect 関数を呼び出してサーバーに接続した後、 サーバーから HTTP レスポンスを受信したときに、 この状態になります。 |
内部状態による状態遷移図は以下のようになります。
コールバック関数
Connect によりウェブサーバーに接続し、レスポンスが得られた場合、 あるいは、途中でエラーが発生した場合、 そのことがコールバック関数により通知されます。
Open で登録したコールバック関数の 1 つめの引数に NOTIFY_RESPONSE が渡されます。 2 つめの引数には、レスポンスの取得が成功したかどうかを表すエラーコードが渡されます。 エラーコードが SFERR_NO_ERROR であれば、レスポンスの取得に成功しています。
一般的な使用手順
SFUHttpConnection の一般的な使用手順は以下のようになります。
日時表現について
GetDate や GetExpiration は、 日時を1980年1月6日 00:00:00 (GMT) からの秒数で返します。 この形式の日時表現は、BREW ヘルパー関数の GETJULIANDATE や GETTIMESECONDS で扱うことができます。
サンプル アプリ
HtmlGet サンプル アプリでは、 SFUHttpConnection の使用例を示しています。 SophiaFramework の Example フォルダをご確認ください。
| コンストラクタ/デストラクタ | ||
|---|---|---|
| public |
SFUHttpConnection | SFUHttpConnection クラスのコンストラクタです。 |
| public |
~SFUHttpConnection | SFUHttpConnection クラスのデストラクタです。 |
| パブリック関数 | ||
|---|---|---|
| public |
AddX509Certificate | SSL 接続で使用する X509 証明書を追加します。 |
| public |
Close | |
| public |
Connect | URL を指定してウェブサーバーに接続します。 |
| public |
GetDate | HTTP レスポンスの Date ヘッダの値を取得します。 |
| public |
GetEncoding | HTTP レスポンス ヘッダから Content-Encoding の値を取得します。 |
| public |
GetExpiration | HTTP レスポンスの Expires ヘッダの値を取得します。 |
| public |
GetHeaderField | HTTP レスポンスのヘッダの値を取得します。 |
| public |
GetLastModified | HTTP レスポンスの Last-Modified ヘッダの値を取得します。 |
| public |
GetLength | HTTP レスポンスの Content-Length ヘッダの値を取得します。 |
| public |
GetResponseCode | HTTP レスポンスのステータス コードを取得します。 |
| public |
GetResponseFlag | HTTP レスポンスのフラグを取得します。 |
| public |
GetSslInfo | SSL 検証結果を取得します。 |
| public |
GetState | 現在のステート値を取得します。 |
| public |
GetType | HTTP レスポンスの Content-Type ヘッダの値を取得します。 |
| public |
GetURL | ウェブサーバーへの接続に使用した URL を取得します。 |
| public |
GetWeb | 内部で使用している IWeb インターフェイスを取得します。 |
| public |
GetWebResp | 内部で使用している IWebResp インターフェイスを取得します。 |
| public |
GetX509Chain | 内部で使用している IX509Chain インターフェイスを取得します。 |
| public |
Open | HTTP 接続の準備を行います。 |
| public |
OpenInputStream | HTTP レスポンスのボディ部の入力ストリームをオープンして返します。 |
| public |
OpenOutputStream | HTTP リクエストのボディ部を出力するための ストリームをオープンして返します。 |
| public |
SetIfModifiedSince | HTTP リクエストの If-Modified-Since ヘッダの値を設定します。 |
| public |
SetRequestFlag | HTTP リクエストのフラグを設定します。 |
| public |
SetRequestMethod | HTTP リクエストのメソッドを設定します。 |
| public |
SetRequestProperty | HTTP リクエストのヘッダを設定します。 |
| public |
SetTrustMode | SSL の検証モードを設定します。 |
| 型 | ||
|---|---|---|
| HttpConnectionSPP | コールバック関数の型です。 | |
| NotifyEnum | コールバック関数の通知コードを表します。 | |
| StateEnum | 内部状態を表すステート値です。 | |
[ public ] SFUHttpConnection(Void);
メンバ変数の初期化を行います。 内部状態が STATE_CLOSED に設定されます。
[ public, virtual ] ~SFUHttpConnection(Void);
オープン状態であれば、 自動的に Close 関数が呼び出され、リソースが解放されます。
[ public ] SFCError AddX509Certificate( UInt32 type // 証明書のタイプ UInt08Ptr der // 証明書データ (DER 形式) へのポインタ UInt32 size // 証明書データのサイズ Bool attach // 証明書データをアタッチするか );
証明書のタイプを指定します。 以下のいずれかの値を指定してください。
| WEBOPT_X509_ROOT_CERTS (ルート認証機関の証明書) |
| WEBOPT_X509_BRANCH_CERTS (中間認証機関の証明書) |
| WEBOPT_X509_LEAF_CERT (末端の証明書) |
証明書データ(DER 形式)へのポインタ。
証明書データのサイズ。
証明書データをアタッチするかどうかを指定します。 この値が TRUE の場合は、der 引数で渡された証明書データのポインタを このクラスが解放します。 FALSE の場合は der 引数で渡された証明書データを内部にコピーして使用します。 この場合は、開発者が der ポインタを解放してください。
SSL 接続で使用する X509 証明書を追加します。 ここで設定された証明書は このクラスが Close されるまで有効です。
下記の例では、ルート証明書を追加しています。
// 証明書データ (DER 形式)
static const Byte rootCert[] = { 0x30, 0x82, 0x83 ... };
// 証明書を HTTP クラスに追加
httpConn.AddX509Certificate(WEBOPT_X509_ROOT_CERTS, rootCert, sizearray(rootCert), FALSE);
[ public ] Void Close(Void);
接続をクローズします。 具体的には以下の処理を行います。
BREW アプレットがサスペンド状態に入る時は、 この Close 関数を呼び出して、 通信リソースを解放する必要があります。
下記の例では、BREW アプレットがサスペンドされる直前に、 SFUHttpConnection が使用しているリソースを解放しています。
Void MyApplet::OnSuspend(Void) {
_httpConn.Close();
}
[ public ] SFCError Connect( ConstACharPtr url // 接続する URL );
URL を指定してウェブサーバーに接続します。 接続の開始に成功すると、ステート値が STATE_REQUESTING に設定されます。 前回の接続で取得したレスポンス ヘッダや OpenInputStream で取得されたストリームは破棄します。
サーバへの接続が実際に成功したかどうかは、 この関数の戻り値では取得できません。 接続の成功/失敗は、 Open で設定したコールバック関数経由で返されます。
次の例では、GET メソッドによりウェブサーバーに接続しています。
http.SetRequestMethod("GET");
http.Connect("http://www.s-cradle.com/products/framework/main.html");
[ public, const ] UInt32 GetDate(Void);
HTTP レスポンスの Date ヘッダの値を日付文字列として解析し、 1980年1月6日 00:00:00 (GMT) からの経過秒数に変換して返します。 ヘッダが存在しない場合は 0 を返します。
[ public, const ] ConstSFUAnsiStringPtr GetEncoding(Void);
GetHeaderField("Content-Encoding") を呼び出すことと同じです。
[ public, const ] UInt32 GetExpiration(Void);
HTTP レスポンスの Expires ヘッダの値を 1980年1月6日 00:00:00 (GMT) からの経過秒数 として取得します。
[ public, const ] ConstSFUAnsiStringPtr GetHeaderField( ConstACharPtr header // ヘッダーの名前 );
HTTP レスポンスのヘッダの値を取得します。 現在のステート値が STATE_GOTRESPONSE でない場合は NULL を返します。
[ public, const ] UInt32 GetLastModified(Void);
HTTP レスポンスの Last-Modified ヘッダの値を 1980年1月6日 00:00:00 (GMT) からの経過秒数 として取得します。
[ public, const ] UInt32 GetLength(Void);
HTTP レスポンスの Content-Length ヘッダの値を取得します。 取得に失敗すると -1 を返します。
[ public, const ] UInt32 GetResponseCode(Void);
HTTP レスポンスのステータス コードを取得します。 現在のステート値が STATE_GOTRESPONSE でない場合は 0 を返します。
この値は、BREW API WebRespInfo のフィールド nCode と同じく、 通信エラー時はエラー内容を負にした値が返ります。 戻り値を WEB_ERROR_MAP に渡すことによって、 BREWのエラーコードを得ることが可能です。
[ public, const ] UInt32 GetResponseFlag(Void);
この関数は、内部で使用している IWebResp インターフェイスに対して、 WEBOPT_FLAGS を指定して IWEBRESP_GetOpt 関数を呼び出して取得した値を返します。 HTTP レスポンスの受信処理の詳細がフラグとして取得できます。 以下の値の論理和が返されます。
[ public, const ] SSLInfo * GetSslInfo(Void);
SSL 検証結果を取得します。
[ public, const ] UInt32 GetState(Void);
下記の例では、ウェブサーバーからのレスポンスを受信中であるか、 レスポンスの受信が完了したかを判定しています。
if (http.GetState() == STATE_REQUESTING) {
// 受信中の処理
}
else if (http.GetState() == STATE_GOTRESPONSE) {
// 受信完了後の処理
}
[ public, const ] ConstSFUAnsiStringPtr GetType(Void);
HTTP レスポンスの Content-Type ヘッダの値を取得します。 この関数は GetHeaderField("Content-Type") を呼び出すことと同じです。
下記の例では、HTTP レスポンスで受信したデータが JPEG 画像または GIF 画像であるか判定しています。
ConstSFUAnsiStringRef type = http.GetType();
if (type == "image/jpeg" || type == "image/gif") {
...
}
[ public, const ] ConstSFUAnsiStringRef GetURL(Void);
この関数は、 Connect 関数を呼び出してウェブサーバーへの接続に使用した URL を取得します。
[ public ] SFUBrewPtr<SFBWeb>& GetWeb(Void);
内部状態が STATE_CLOSED ならば NULL が戻ります。
[ public ] SFUBrewPtr<SFBWebResp>& GetWebResp(Void);
内部状態が STATE_GOTRESPONSE でない場合は NULL が戻ります。
[ public ] SFUBrewPtr<SFBX509Chain>& GetX509Chain(Void);
内部状態が STATE_GETRESPONSE でない場合は NULL が戻ります。
HTTP 接続の準備を行います。 この関数は、ウェブサーバーへの接続は行いません。 ウェブサーバーへの接続に必要な準備を行うだけです。
通信に関するエラーは、この関数で指定したコールバック関数経由で通知されます。
[ public ] SFUSourceStreamPtr OpenInputStream( SFUSourceStream::SourceStreamSPP func // SFUSourceStream 用のコールバック関数 VoidPtr data // SFUSourceStream 用コールバック関数に渡されるデータ );
HTTP レスポンスのボディ部の入力ストリームをオープンして返します。 このストリームは Close 時および次回 Connect 呼び出しの成功時に破棄されます。
[ public ] SFUMemoryStreamPtr OpenOutputStream(Void);
HTTP リクエストのボディ部を出力するための ストリームをオープンして返します。 開発者はこの出力ストリームに対して Close およびデストラクタを呼び出してはいけません。
1980年1月6日 00:00:00 (GMT) からの秒数を指定します。
HTTP リクエストのフラグを設定します。 現在のステート値が STATE_OPEN か STATE_GOTRESPONSE でない場合はフラグの値は反映されません。 フラグは以下の論理和で指定します。
[ public ] SFCError SetRequestMethod( ConstACharPtr method // メソッド文字列 );
HTTP リクエストのメソッドを設定します。 ここで設定された値は Close されるまで有効です。
メソッドは、BREW の IWeb インターフェイスが対応しているものしか使用できません。 "GET"、"POST"、"HEAD" などが使用可能です。 メソッドの設定を省略した場合は、"GET" メソッドが使われます。
[ public ] SFCError SetRequestProperty( ConstACharPtr key // ヘッダの名前 ConstACharPtr value // ヘッダの値 );
HTTP リクエストのヘッダを設定します。 同一の key で複数回呼ばれた場合は、すべて記憶してリクエスト時に送信されます。 ここで設定された値は Close 時、あるいは接続成功時に破棄されます。
SSL の検証モードを設定します。 現在のステート値が STATE_OPEN か STATE_GOTRESPONSE でない場合は mode の値は反映されません。 ここで設定された値はこのクラスが Close されるまで有効です。 実機において、この値を変更した直後の Connect 呼び出しでは SSL_RESULT_SERV_VERS エラーが発生することがあります。 このエラーを避けるには、一度 Close してから検証モードを設定し、 Connect を呼び出してください。 SSL 検証モードは、以下のいずれかの値を設定します。 詳細は「BREW API リファレンス」の ISSL_NegotiateV を参照ください。
typedef Void(* SFUHttpConnection::HttpConnectionSPP)(NotifyEnum, SFCError, VoidPtr)
enum NotifyEnum {
NOTIFY_RESPONSE = 1
};
enum StateEnum {
STATE_CLOSED = 0x0000,
STATE_OPEN = 0x0001,
STATE_REQUESTING = 0x0002,
STATE_GOTRESPONSE = 0x0004
};
| Copyright(C) 2003-2004 Sophia Cradle Inc., All Rights Reserved. |
![]() ![]() ![]()
|