![]() ![]() ![]()
|
BREW C++ ライブラリ & GUI フレームワーク & XML ミドルウェア : SophiaFramework UNIVERSE 5.0 |


SFXSSLSocket は、BREW API の ISocket / ISSL インターフェースをカプセル化し、ハイレベルな SSL ソケット通信機能を提供します。
SSL ソケット通信の手順
例 786. SSL ソケット通信の手順
// SFXSSLSocket クラスのインスタンス _socket はクラスのメンバ変数として定義する class MyClass { private: SFXSSLSocket_socket; SFXAnsiStringStreamWriter _writer; // データ送信用ストリーム SFXAnsiStringStreamReader _reader; // データ受信用トリーム public: Void Start(Void); // コールバック関数 XALLBACK_DECLARE_SFXSSLSOCKET(OnConnect) XALLBACK_DECLARE_SFXSSLSOCKET(OnNegotiate) XALLBACK_DECLARE_SFXANSISTRINGSTREAMWRITER(OnFlush) XALLBACK_DECLARE_SFXANSISTRINGSTREAMREADER(OnFetch) }; Void MyClass::Start(Void) { SFCError error; SFXSocketAddress host("www.example.com:995"); // TCP サーバーとの接続を初期化する if ((error = _socket.Open()) == SFERR_NO_ERROR) { // ホスト名は自動的に解決される // TCP サーバーに接続する error = _socket.Connect(host, XALLBACK_FUNCTION(OnConnect)); } if (error != SFERR_NO_ERROR) { // エラーが発生したとき _socket.Close(); } return; } // 接続の完了が通知されるコールバック関数 XALLBACK_IMPLEMENT_SFXSSLSOCKET(MyClass, OnConnect, error) { if (error == SFERR_NO_ERROR) { // エラーが発生していないとき // ネゴシエートする ( ネゴシエートの完了は OnNegotiate 関数に通知される ) error = _socket.Negotiate(XALLBACK_FUNCTION(OnNegotiate)); } if (error != SFERR_NO_ERROR) { // エラーが発生したとき _socket.Close(); } return; } // ネゴシエートの完了が通知されるコールバック関数 XALLBACK_IMPLEMENT_SFXSSLSOCKET(MyClass, OnNegotiate, error) { static AChar sendingMessage[] = "GET / HTTP/1.0\r\n\r\n"; if (error == SFERR_NO_ERROR) { // データ送信用ストリームを取得する ( バッファサイズは 1024 ) if ((error = _socket.GetStreamWriter(1024, &_writer)) == SFERR_NO_ERROR) { // データを書き込む if ((error = _writer.Write(sendingMessage, lengthof(sendingMessage))) == SFERR_NO_ERROR) { // フラッシュする(実際にデータを送信する) // データ送信の完了は、OnFlush 関数に通知される error = _writer.Flush(XALLBACK_FUNCTION(OnFlush)); } if (error != SFERR_NO_ERROR) { // エラーが発生したとき _writer.Release(); } } } if (error != SFERR_NO_ERROR) { // エラーが発生したとき _socket.Close(); } return; } // データ送信の完了が通知されるコールバック関数 XALLBACK_IMPLEMENT_SFXANSISTRINGSTREAMWRITER(MyClass, OnFlush, error) { // 送信が終わったのでデータ送信用ストリームを解放する _writer.Release(); if (error == SFERR_NO_ERROR) { // データ受信用ストリームを取得する ( バッファサイズは 1024 ) if ((error = _socket.GetStreamReader(1024, &_reader)) == SFERR_NO_ERROR) { // フェッチ(データ受信)する // データ受信の完了は、OnFetch 関数に通知される if ((error = _reader.Fetch(XALLBACK_FUNCTION(OnFetch))) != SFERR_NO_ERROR) { // エラーが発生したとき _reader.Release(); } } } if (error != SFERR_NO_ERROR) { // エラーが発生したとき _socket.Close(); } return; } // データ受信の完了が通知されるコールバック関数 XALLBACK_IMPLEMENT_SFXANSISTRINGSTREAMREADER(MyClass, OnFetch, error) { SFXAnsiString receivedString; if (error == SFERR_NO_ERROR) { // バッファからデータを receivedString 変数に読み込む _reader > receivedString; // 応答を表示する TRACE("%s", receivedString.GetCString()); } // 受信が終わったのでデータ受信用ストリームを解放する _reader.Release(); // ソケットをクローズする _socket.Close(); return; }
| コンストラクタ/デストラクタ |
|---|
|
SFXSSLSocket( Void ) SFXSSLSocket クラスのコンストラクタです。
|
|
~SFXSSLSocket( Void ) SFXSSLSocket クラスのデストラクタです。
|
| パブリック関数 | |
|---|---|
| SFCError |
AsSFBAStream(
SFBAStreamSmpPtr result
) 内部で管理されている SFBSocket クラスのインスタンスを SFBAStream クラスのインスタンスに変換します。
|
| SFCError |
AsSFBSource(
SFBSourceSmpPtr result
) 内部で管理されている SFBSocket クラスのインスタンスを SFBSource クラスのインスタンスに変換します。
|
| SFCError |
Bind(
SFXSocketAddressConstRef address
) ローカルの IP アドレスとポート番号をソケットに関連付けます。
|
| Void |
Cancel( Void ) SSL ソケット通信をキャンセルします。
|
| Void |
Close( Void ) SSL ソケットをクローズします。
|
| SFCError |
Connect(
SFXSocketAddressConstRef address
, CallbackSPP spp
, VoidPtr reference
) SSL 接続を開始します。
|
| SFCError |
GetLocalAddress(
SFXSocketAddressPtr result
) ローカルの IP アドレスとポート番号を取得します。
|
| SFCError |
GetRemoteAddress(
SFXSocketAddressPtr result
) リモートの IP アドレスとポート番号を取得します。
|
| SFBNetMgrSmpConstRef |
GetSFBNetMgr( Void ) 内部で管理するネット マネージャ インターフェースを取得します。
|
| SFBSSLSmpConstRef |
GetSFBSSL( Void ) 内部で管理する SFBSSL クラスのインスタンスを取得します。
|
| SFBSocketSmpConstRef |
GetSFBSocket( Void ) 内部で管理するソケット インターフェースを取得します。
|
| SFCError |
GetStreamReader(
UInt32 size
, SFXStreamReaderPtr result
) GetStreamReader( SFXStreamReaderPtr result ) データ受信用ストリームを取得します。
|
| SFCError |
GetStreamWriter(
UInt32 size
, SFXStreamWriterPtr result
) GetStreamWriter( SFXStreamWriterPtr result ) データ送信用ストリームを取得します。
|
| UInt32 |
GetTrustMode( Void ) SSL 検証モードを取得します。
|
| SFCError |
Negotiate(
CallbackSPP spp
, VoidPtr reference
) ネゴシエートを行います。
|
| SFCError |
Open(
SInt32 linger = -1
) SSL ソケットをオープンします。
|
| SFCError |
Permit( Void ) SSL を使わない通信の設定にします。
|
| SFCError |
Read(
VoidPtr buffer
, UInt32Ptr size
) 読み込み用ストリームを使わずに SSL ソケットからデータを受信します。
|
| SFCError |
ScheduleBind(
CallbackSPP spp
, VoidPtr reference
) Bind をスケジュールします。
|
| SFCError |
ScheduleRead(
CallbackSPP spp
, VoidPtr reference
) 読み込み用ストリームを使わない SSL ソケットからのデータ受信をスケジュールします。
|
| SFCError |
ScheduleWrite(
CallbackSPP spp
, VoidPtr reference
) 書き込み用ストリームを使わない SSL ソケットへのデータ送信をスケジュールします。
|
| SFCError |
SetTrustMode(
UInt32 param
) SSL 検証モードを設定します。
|
| SFCError |
Write(
VoidConstPtr buffer
, UInt32Ptr size
) 書き込み用ストリームを使わずに SSL ソケットにデータを送信します。
|
| 型 |
|---|
|
CallbackSPP
(SFXStorage から継承)
コールバック関数を表す型です。
|
[ public, explicit ] SFXSSLSocket(Void);
コンストラクタでは SFBNetMgr クラス、SFBSocket クラス、SFBSSL クラス、SFBSSLRootCerts クラスのインスタンスは生成されません。
[ public, virtual ] virtual ~SFXSSLSocket(Void);
[ public, virtual, const ] SFCError AsSFBAStream( SFBAStreamSmpPtr result // 結果の SFBAStream クラスのインスタンスへのポインタ );
[ public, virtual, const ] SFCError AsSFBSource( SFBSourceSmpPtr result // 結果の SFBSource クラスのインスタンスへのポインタ );
SFXSSLSocket::AsSFBSource 関数は内部で SFBSourceUtil クラスのインスタンスを生成し、解放します。
[ public ] SFCError Bind( SFXSocketAddressConstRef address // IP アドレスとポート番号 );
SFXSSLSocket::Bind 関数の戻り値が AEE_NET_WOULDBLOCK のときは SFXSSLSocket::ScheduleBind 関数でコールバック関数を登録し、コールバック関数の中で再度 SFXSSLSocket::Bind 関数を呼び出す必要があります。
[ public, virtual ] Void Cancel(Void);
登録されていたコールバックはキャンセルされます。
[ public ] Void Close(Void);
SSL ソケット通信をキャンセルし、内部で使っている ISocket インターフェースや INetMgr インターフェース、ISSL インターフェースを解放します。
登録されていたコールバックはキャンセルされます。
BREW アプレットのサスペンド時は、SFXSSLSocket::Close 関数を呼び出してリソースを解放します。
[ public ] SFCError Connect( SFXSocketAddressConstRef address // ドメイン ( または IP アドレス ) とポート番号 CallbackSPP spp // コールバック関数 VoidPtr reference // コールバック関数に渡すデータ );
ドメイン ( または IP アドレス ) とポート番号を指定します。ドメインの解決の必要がある場合は SFXSSLSocket が自動的に行います。
接続確立の通知を受け取るコールバック関数を指定します。
コールバック関数に渡すデータを指定します。.
接続が確立されると、登録したコールバック関数に通知されます。
![]() |
接続時のエラー取得 |
|---|---|
接続に関するエラーは、戻り値では取得できません。コールバック関数に通知されます。 | |
[ public, const ] SFCError GetLocalAddress( SFXSocketAddressPtr result // ローカルの IP アドレスとポート番号の格納先へのポインタ );
![]() |
ローカルの IP アドレスの変化 |
|---|---|
SSL ソケット接続の前後で、ローカルの IP アドレスは変化する可能性があります。 | |
[ public, const ] SFCError GetRemoteAddress( SFXSocketAddressPtr result // 結果を格納するポインタ );
![]() |
リモートの IP アドレスの変化 |
|---|---|
SSL ソケット接続の前後で、リモートの IP アドレスは変化する可能性があります。 | |
[ public, const ] SFBNetMgrSmpConstRef GetSFBNetMgr(Void);
内部で管理するネット マネージャ インターフェース ( SFBNetMgr クラスのインスタンス ) を取得します。
[ public, const ] SFBSSLSmpConstRef GetSFBSSL(Void);
[ public, const ] SFBSocketSmpConstRef GetSFBSocket(Void);
内部で管理するソケット インターフェース ( SFBSocket クラスのインスタンス ) を取得します。
[ public, virtual ] SFCError GetStreamReader( UInt32 size // バッファサイズ SFXStreamReaderPtr result // データ受信用ストリームへのポインタ );
[ public, virtual ] SFCError GetStreamReader( SFXStreamReaderPtr result // データ受信用ストリームへのポインタ );
データ受信用ストリームのバッファサイズを指定することも可能です。 データ受信用ストリームは、受信するデータのタイプに応じて SFXBinaryStreamReader、SFXAnsiStringStreamReader、または SFXWideStringStreamReader クラスを使い分けます。
SFXSSLSocket::GetStreamWriter | SFXBinaryStreamReader | SFXAnsiStringStreamReader | SFXWideStringStreamReader
[ public, virtual ] SFCError GetStreamWriter( UInt32 size // サイズ SFXStreamWriterPtr result // データ送信用ストリームへのポインタ );
[ public, virtual ] SFCError GetStreamWriter( SFXStreamWriterPtr result // データ送信用ストリームへのポインタ );
データ送信用ストリームのバッファサイズを指定することも可能です。 データ送信用ストリームは、送信するデータのタイプに応じて SFXBinaryStreamWriter、SFXAnsiStringStreamWriter、または SFXWideStringStreamWriter クラスを使い分けます。
SFXSSLSocket::GetStreamReader | SFXBinaryStreamWriter | SFXAnsiStringStreamWriter | SFXWideStringStreamWriter
[ public, const ] UInt32 GetTrustMode(Void);
SSL ソケット通信のネゴシエートを行います。ネゴシエートは SFXSSLSocket::Connect 関数で接続を確立した後に行います。
SFBNetMgr クラスと SFBSSL クラスのインスタンスを生成し、 SSL ソケット ( SFBSocket クラスのインスタンス ) を開きます。
![]() |
リンガー時間(ネットワーク接続の待機時間) |
|---|---|
BREW 標準の INETMGR_SetLinger() 関数で設定するリンガー時間(ネットワーク接続の待機時間)は、この関数の引数で指定できます。 デフォルト値は -1 ですが、このときはリンガー時間は設定されません。 リンガー時間の設定についての詳細は、BREW リファレンスの INETMGR_SetLinger() 関数をご覧ください。 | |
[ public ] SFCError Permit(Void);
接続を確立して、ネゴシエートを行う前やネゴシエートに失敗した後に SFXSSLSocket::Permit 関数を呼び出すと、SSL を使わない通信ができます。
[ public, virtual ] SFCError Read( VoidPtr buffer // 読み込んだデータを格納するバッファ UInt32Ptr size // バッファのサイズ、読み込んだデータのサイズ );
読み込んだデータを格納するバッファを指定します。
SFXSSLSocket::Read 関数の呼び出し時には、バッファのサイズを指定します。SFXSSLSocket::Read 関数が終了すると、読み込んだデータのサイズが格納されています。
![]() |
注意 |
|---|---|
| SFXSSLSocket::Read 関数が AEE_NET_WOULDBLOCK を返す場合、SFXSSLSocket::ScheduleRead 関数でコールバック関数を登録し、 コールバック関数の中で再度 SFXSSLSocket::Read 関数をスケジュールする必要があります。 | |
[ public ] SFCError ScheduleBind( CallbackSPP spp // コールバック関数 VoidPtr reference // コールバック関数へ渡すデータ );
SFXSSLSocket::ScheduleBind 関数は、SFXSSLSocket::Bind 関数を使って Bind するコールバック関数を登録するために使います。
※ SFXSSLSocket::Bind 関数の戻り値が AEE_NET_WOULDBLOCK である場合、SFXSSLSocket::ScheduleBind 関数でコールバック関数を登録して、再び Bind を試みます。
[ public, virtual ] SFCError ScheduleRead( CallbackSPP spp // コールバック関数 VoidPtr reference // コールバック関数に渡すデータ );
SFXSSLSocket::ScheduleRead 関数は、SFXSSLSocket::Read 関数を使ってデータ受信するコールバック関数を登録するために使います。
※ SFXSSLSocket::Read 関数の戻り値が AEE_NET_WOULDBLOCK である場合、SFXSSLSocket::ScheduleRead 関数でコールバック関数を登録して、再びデータ受信を試みます。
[ public, virtual ] SFCError ScheduleWrite( CallbackSPP spp // コールバック関数 VoidPtr reference // コールバック関数へのポインタ );
SFXSSLSocket::ScheduleWrite 関数は、SFXSSLSocket::Write 関数を使ってデータ送信するコールバック関数を登録するために使います。
※ SFXSSLSocket::Write 関数の戻り値が AEE_NET_WOULDBLOCK である場合、SFXSSLSocket::ScheduleWrite 関数でコールバック関数を登録して、再びデータ送信を試みます。
設定された値は SFXSSLSocket::Close されるまで有効です。
この値を変更した直後に SFXSSLSocket::Connect 関数を呼び出すと、SSL_RESULT_SERV_VERS エラーが発生することがあります。
このエラーを避けるには、一度 SFXSSLSocket::Close 関数を呼び出してから SSL 検証モードを設定し、SFXSSLSocket::Connect 関数を呼び出す必要があります。
SSL 検証モードは、以下のいずれかの値を設定します。 詳細は「 BREW API リファレンス 」の ISSL_NegotiateV をご参照ください。
[ public, virtual ] SFCError Write( VoidConstPtr buffer // 書き込むデータ UInt32Ptr size // 書き込むデータのサイズ、書き込んだデータのサイズ );
書き込むデータを指定します。
SFXSSLSocket::Write 関数の呼び出し時は、書き込むデータのサイズを指定します。SFXSSLSocket::Write 関数が終了すると、実際に書き込んだデータのサイズが格納されています。
![]() |
注意 |
|---|---|
| SFXSSLSocket::Write 関数が AEE_NET_WOULDBLOCK を返す場合、SFXSSLSocket::ScheduleWrite 関数でコールバック関数を登録し、 そのコールバック関数の中で再度 SFXSSLSocket::Write 関数をスケジュールする必要があります。 | |
|
Copyright (C) 2002 - 2008 Sophia Cradle Incorporated All Rights Reserved. |
![]() ![]() ![]()
|