前のページ次のページ上に戻るホーム SophiaFramework UNIVERSE 5.3
SFXSSLSocket
SSL ソケット通信のためのクラスです。
#include <SFXSSLSocket.h.hpp>
class SFXSSLSocket : public SFXStorage;
SFMTYPEDEFCLASS(SFXSSLSocket)

継承図

SFXSSLSocket クラスの継承図

協調図

SFXSSLSocket クラスの協調図

解説

SFXSSLSocket クラスは、 SSL クライアントを実装する機能だけを提供します。 SSL サーバーを実装する機能は提供しません。

このクラスでは、ストリームを利用したデータ送受信が可能です。

ストリームを利用しない場合は SFXSSLSocket::Write / SFXSSLSocket::Read 関数を使用してデータを送受信します。

[Note] 注意

SFXSSLSocket クラスは、 BREW API の ISocket / ISSL インターフェースをカプセル化し、 ハイレベルな SSL ソケット通信機能を提供します。

[Caution] 注意

SFXSSLSocket クラスは、 SFXTCPSocket クラスで実装されているサーバー機能を提供しません。

SSL クライアントの実装

SSL クライアントは、 SFXSSLSocket クラスを使用して以下の手順で実装します。

  1. SSL ソケット(SFXSSLSocket インスタンス)を作成します。
  2. SFXSSLSocket::Open 関数を呼び出して、SSL ソケットを開きます。
  3. 必要に応じて SFXSSLSocket::Bind 関数を呼び出して、ローカル の IP アドレスとポート番号を SSL ソケットにバインドします。 バインド処理を省略した場合は、デフォルトのポート番号がバインドされます。
  4. SFXSSLSocket::SetTrustMode 関数を呼び出して、SSL 認証モードを設定します。(デフォルト値: SSL_TRUST_MODE_FAIL )
  5. SFXSSLSocket::Connect 関数を呼び出して、サーバーへ接続リクエストを送信します。
  6. サーバーへの接続リクエストの結果は、SFXTCPSocket::Connect 関数で登録したコールバック関数に通知されます。
  7. SFXSSLSocket::Negotiate 関数を呼び出して、サーバーとネゴシエートします。
  8. ネゴシエートの結果は、SFXSSLSocket::Negotiate 関数で登録したコールバック関数に通知されます。
  9. SFXSSLSocket::GetStreamReader 関数を呼び出して入力ストリームを取得し、データを受信します (ストリームを利用しない場合は、SFXSSLSocket::Read 関数を使用してデータを受信します)。
  10. SFXSSLSocket::GetStreamWriter 関数を呼び出して出力ストリームを取得し、データを送信します (ストリームを利用しない場合は、SFXSSLSocket::Write 関数を使用してデータを送信します)。
  11. 9. と 10. の送受信処理を繰り返します。
  12. SFXSSLSocket::Close 関数を呼び出して、SSL ソケットを閉じます。

例 851. SSL クライアントの実装

// SSL ソケット (_socket) はクラスのメンバ変数として定義する
class MyClass {
private:
    SFXSSLSocket_socket;               // SSL ソケット
    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) {
 
        // ホスト名は自動的に解決される
        // サーバーに接続する
        error = _socket.Connect(host, XALLBACK_INTERNAL(OnConnect));
    }
    if (error != SFERR_NO_ERROR) { 

        // エラーが発生したとき
        // ソケットを閉じる
        _socket.Close();
    }
    return;
}

// 接続要求の結果が通知されるコールバック関数
XALLBACK_IMPLEMENT_SFXSSLSOCKET(MyClass, OnConnect, error)
{
    if (error == SFERR_NO_ERROR) { 

        // エラーが発生していないとき
        // サーバーとの SSL ネゴシエーションを行う
        // ※ SSL ネゴシエーションの結果は OnNegotiate 関数に通知される
        error = _socket.Negotiate(XALLBACK_INTERNAL(OnNegotiate));
    }
    if (error != SFERR_NO_ERROR) { 

        // エラーが発生したとき
        // ソケットを閉じる
        _socket.Close();
    }
    return;
}

// SSL ネゴシエーションの結果が通知されるコールバック関数
XALLBACK_IMPLEMENT_SFXSSLSOCKET(MyClass, OnNegotiate, error)
{
    static AChar message[] = "GET / HTTP/1.0\r\n\r\n";

    if (error == SFERR_NO_ERROR) {

        // データ送信用ストリームを取得する
        // ※ size 引数を指定しているのでストリームバッファは固定長(バッファサイズ: 1024 バイト)
        if ((error = _socket.GetStreamWriter(1024, &_writer)) == SFERR_NO_ERROR) {

            // message 変数からストリームバッファにデータを書き込む
            if ((error = _writer.Write(message, lengthof(message))) == SFERR_NO_ERROR) {

                // フラッシュを行う: 実際にストリームバッファからソケットにデータを送信する
                // ※ データ送信(フラッシュ)の結果は、OnFlush 関数に通知される
                error = _writer.Flush(XALLBACK_INTERNAL(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) {

        // データ受信用ストリームを取得する
        // ※ size 引数を指定しているのでストリームバッファは固定長(バッファサイズ: 1024 バイト)
        if ((error = _socket.GetStreamReader(1024, &_reader)) == SFERR_NO_ERROR) {

            // フェッチを行う: 実際にソケットからストリームバッファにデータを受信する
            // ※ データ受信(フェッチ)の結果は、OnFetch 関数に通知される
            if ((error = _reader.Fetch(XALLBACK_INTERNAL(OnFetch))) != SFERR_NO_ERROR) {

                // エラーが発生したとき
                // データ受信用ストリームを解放する
               _reader.Release(); 
            }
        }
    }
    if (error != SFERR_NO_ERROR) { 

        // エラーが発生したとき
        // ソケットを閉じる
        _socket.Close();
    }
    return;
}

// データ受信(フェッチ)の結果が通知されるコールバック関数
XALLBACK_IMPLEMENT_SFXANSISTRINGSTREAMREADER(MyClass, OnFetch, error)
{
    SFXAnsiString string;

    if (error == SFERR_NO_ERROR) {

        // ストリームバッファから string 変数にデータを読み込む
        _reader >> string;

        // string 変数の内容をデバッグウィンドウに表示する
        TRACE("%s", string.GetCString());
    }

    // 受信が終わったのでデータ受信用ストリームを解放する
    _reader.Release();

    // ソケットを閉じる
    _socket.Close();
    return;
}

参照

SFXTCPSocket | SFXUDPSocket | SFXSocketAddress | SSL ソケット通信 | BREW API ISocket | BREW API ISSL

メンバ

コンストラクタ/デストラクタ
SFXSSLSocket( Void )
SFXSSLSocket クラスのコンストラクタです。
~SFXSSLSocket( Void )
SFXSSLSocket クラスのデストラクタです。
パブリック関数
SFCError AsSFBAStream( SFBAStreamSmpPtr result )
SFBAStream インスタンスに変換します。
SFCError AsSFBSource( SFBSourceSmpPtr result )
SFBSource インスタンスに変換します。
SFCError Bind( SFXSocketAddressConstRef address )
Bind (ソケットに端末のローカル IP アドレスとポート番号を関連付ける操作)を行います。
Void Cancel( Void )
ソケット通信における各種操作をキャンセルします。
Void Close( Void )
ソケットを閉じます。
SFCError Connect( SFXSocketAddressConstRef address , CallbackSPP spp , VoidPtr reference )
サーバーに接続リクエストを送信して、接続を確立します。
SFCError GetLocalAddress( SFXSocketAddressPtr result )
ローカル IP アドレスとポート番号を取得します。
SFCError GetRemoteAddress( SFXSocketAddressPtr result )
リモート IP アドレスとポート番号を取得します。
SFBNetMgrSmpConstRef GetSFBNetMgr( Void )
内部で管理する SFBNetMgr インスタンスを取得します。
SFBSSLSmpConstRef GetSFBSSL( Void )
内部で管理する SFBSSL インスタンスを取得します。
SFBSocketSmpConstRef GetSFBSocket( Void )
内部で管理する SFBSocket インスタンスを取得します。
SFCError GetStreamReader( UInt32 size , SFXStreamReaderPtr result )
データ受信用ストリームを取得します。
SFCError GetStreamReader( SFXStreamReaderPtr result )
データ受信用ストリームを取得します。
SFCError GetStreamWriter( UInt32 size , SFXStreamWriterPtr result )
データ送信用ストリームを取得します。
SFCError GetStreamWriter( SFXStreamWriterPtr result )
データ送信用ストリームを取得します。
UInt32 GetTrustMode( Void )
SSL 認証モードを取得します。
SFCError Negotiate( CallbackSPP spp , VoidPtr reference )
ネゴシエートを行います。
SFCError Open( SInt32 linger = -1 )
ソケットを開きます。
SFCError Permit( Void )
SSL を使わない通信の設定にします。
SFCError Read( VoidPtr buffer , UInt32Ptr size )
Read(ストリームを使用しないソケットからのデータ受信)を行います。
SFCError ScheduleBind( CallbackSPP spp , VoidPtr reference )
Bind(ソケットに端末のローカル IP アドレスとポート番号を関連付ける操作)をスケジュールします。
SFCError ScheduleRead( CallbackSPP spp , VoidPtr reference )
Read(ストリームを使用しないソケットからのデータ受信)をスケジュールします。
SFCError ScheduleWrite( CallbackSPP spp , VoidPtr reference )
Write(ストリームを使用しないソケットへのデータ送信)をスケジュールします。
SFCError SetTrustMode( UInt32 param )
SSL 認証モードを設定します。
SFCError Write( VoidConstPtr buffer , UInt32Ptr size )
Write(ストリームを使用しないソケットへのデータ送信)を行います。
CallbackSPP (SFXStorage から継承)
ストレージクラスで使用するコールバック関数の型です。

SFXSSLSocket::SFXSSLSocket
SFXSSLSocket クラスのコンストラクタです。
[ public, explicit ]
SFXSSLSocket(Void);

解説

コンストラクタでは SFBNetMgr クラス、SFBSocket クラス、SFBSSL クラス、SFBSSLRootCerts クラスのインスタンスは生成されません。


SFXSSLSocket::~SFXSSLSocket
SFXSSLSocket クラスのデストラクタです。
[ public, virtual ]
virtual ~SFXSSLSocket(Void);

解説

このデストラクタは、 SFXSSLSocket::Close 関数を呼び出します。

[Note] 注意

登録されていたコールバックはキャンセルされます。

参照

SFXSSLSocket::Close


SFXSSLSocket::AsSFBAStream
SFBAStream インスタンスに変換します。
[ public, virtual, const ]
SFCError AsSFBAStream(
    SFBAStreamSmpPtr result   // SFBAStream インスタンスへのポインタ
);

引数

result

SFBAStream インスタンスへのポインタを指定します。

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • このストレージが閉じているとき: SFERR_INVALID_STATE
  • result 引数が null のとき: SFERR_INVALID_PARAM

解説

この関数は、 このストレージが内部で管理する SFBSocket インスタンスを SFBAStream インスタンスに変換します。

result 引数には、変換結果である SFBAStream インスタンスへのポインタが返ります。

[Note] 注意

この関数により、 このストレージを SFBAStream インスタンスとして扱えます。

参照

SFBSocket | SFBAStream


SFXSSLSocket::AsSFBSource
SFBSource インスタンスに変換します。
[ public, virtual, const ]
SFCError AsSFBSource(
    SFBSourceSmpPtr result   //  SFBSource インスタンスへのポインタ
);

引数

result

SFBSource インスタンスへのポインタを指定します。

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • このストレージが閉じているとき: SFERR_INVALID_STATE
  • result 引数が null のとき: SFERR_INVALID_PARAM

解説

この関数は、 このストレージが内部で管理する SFBSocket インスタンスを SFBSource インスタンスに変換します。

result 引数には、変換結果である SFBSource インスタンスへのポインタが返ります。

[Note] 注意

この関数は、内部で BREW API の BREW API ISOURCEUTIL_SourceFromSocket 関数を呼び出します。

[Note] 注意

この関数により、 このストレージを SFBSource インスタンスとして扱えます。

参照

SFBSocket | SFBSource | BREW API ISOURCEUTIL_SourceFromSocket


SFXSSLSocket::Bind
Bind (ソケットに端末のローカル IP アドレスとポート番号を関連付ける操作)を行います。
[ public ]
SFCError Bind(
    SFXSocketAddressConstRef address   // 端末のローカル IP アドレスとポート番号: ローカル IP アドレスには SFXInetAddress::LoopbackInetAddress() または SFXInetAddress.AnyInetAddress() のいずれかを指定する
);

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • ソケットが開いていないとき: SFERR_INVALID_STATE
  • 操作がブロックされたとき: AEE_NET_WOULDBLOCK
  • その他: BREW API の ISOCKET_GetLastError 関数が返すエラー値、またはAEE_NET_ERROR

解説

この関数は、Bind (ソケットに端末のローカル IP アドレスとポート番号を関連付ける操作)を行います。

ローカル IP アドレスは、 携帯端末内部でループバック通信するときは SFXInetAddress::LoopbackInetAddress 関数の戻り値、 外部と通信するときは SFXInetAddress::AnyInetAddress 関数の戻り値を指定します。 BREW SDK の制約により、これら以外の値はサポートされません。

この関数の戻り値が AEE_NET_WOULDBLOCK の場合、 SFXSSLSocket::ScheduleBind 関数でコールバック関数を登録し、 コールバック関数の中で再度この関数を呼び出す必要があります。

[Note] ポート番号のバインド

クライアント側ではこの関数の呼び出しを省略できますが、 その場合はデフォルトのポート番号がソケットに Bind されます。

[Note] 注意

この関数は、 内部で SFBSocket::Bind 関数を呼び出します。

[Note] 前提条件

この関数を呼び出す前に、 このソケットは SFXSSLSocket::Open 関数を呼び出して 開いている必要があります 。

[Caution] 注意

SFXSSLSocket クラスは SSL サーバー機能を提供しませんので、 SSL サーバーを構築する目的でこの関数を利用することはできません。

参照

SFXSSLSocket::Open | SFXSSLSocket::ScheduleBind | SFXInetAddress::LoopbackInetAddress | SFXInetAddress::AnyInetAddress | SFXSocketAddress | SFBSocket::Bind | BREW API ISOCKET_Bind | BREW API ISOCKET_GetLastError | BREW API AEE_BREW_LOOPBACK | BREW API AEE_INADDR_LOOPBACK | BREW API AEE_INADDR_ANY


SFXSSLSocket::Cancel
ソケット通信における各種操作をキャンセルします。
[ public, virtual ]
Void Cancel(Void);

解説

この関数は、ソケット通信における各種操作をキャンセルします。

具体的には、 キャンセル対象となる操作で登録したコールバックをキャンセルし、 その操作を行う直前の状態(1 つ前の状態)に戻します。

キャンセルの対象となる操作とキャンセル内容は、以下の表の通りです。

表 219. キャンセルの対象となる操作とキャンセル内容

キャンセルの対象となる操作 キャンセル内容
SFXSSLSocket::Connect 関数によるサーバーへの接続 コールバックをキャンセルし、SFXSSLSocket::Open 関数を実行した直後の状態に戻します。
SFXSSLSocket::ScheduleBind 関数による Bind のスケジュール コールバックをキャンセルし、SFXSSLSocket::Open 関数を実行した直後の状態に戻します。
SFXSSLSocket::ScheduleRead 関数による読み込み(受信)のスケジュール コールバックをキャンセルし、SFXSSLSocket::Connect 関数を実行した直後の接続が確立している状態に戻します。
SFXSSLSocket::ScheduleWrite 関数による書き込み(送信)のスケジュール コールバックをキャンセルし、SFXSSLSocket::Connect 関数を実行した直後の接続が確立している状態に戻します。
SFXSSLSocket::Negotiate 関数によるネゴシエート コールバックをキャンセルし、SFXSSLSocket::Connect 関数を実行した直後の接続が確立している状態に戻します。
[Note] 注意

この関数は、SFXSSLSocket::Close 関数から呼び出されます。

参照

SFXSSLSocket::Open | SFXSSLSocket::Connect | SFXSSLSocket::ScheduleBind | SFXSSLSocket::ScheduleRead | SFXSSLSocket::ScheduleWrite | SFXSSLSocket::Negotiate | SFXSSLSocket::Close


SFXSSLSocket::Close
ソケットを閉じます。
[ public ]
Void Close(Void);

解説

この関数は、このソケットを閉じます(このソケットを終了します)。

具体的には、 SFXSSLSocket::Cancel 関数を呼び出してソケット通信の各種操作をキャンセルし、 内部で管理している SFBNetMgr インスタンス、SFBSocket インスタンス、 および SFBSSL インスタンスを解放します。

[Note] 注意

登録されていたコールバックはキャンセルされます。

[Note] 注意

この関数は、SFXSSLSocket::~SFXSSLSocket デストラクタから呼び出されます。

[Tip] Tip

サスペンド時は、この関数を呼び出してリソースを解放します。

参照

SFXSSLSocket::Open | SFXSSLSocket::Cancel | SFXSSLSocket::~SFXSSLSocket | SFBNetMgr | SFBSocket | SFBSSL | BREW API INetMgr | BREW API ISocket | BREW API ISSL


SFXSSLSocket::Connect
サーバーに接続リクエストを送信して、接続を確立します。
[ public ]
SFCError Connect(
    SFXSocketAddressConstRef address   // サーバーのドメイン名(または IP アドレス)とポート番号
    CallbackSPP spp                    // 接続確立の通知を受け取るコールバック関数
    VoidPtr reference                  // コールバック関数に渡すデータ(参照値)
);

引数

address

サーバーのドメイン名(または IP アドレス)とポート番号を指定します。 (※)ドメイン名の解決は、内部で自動的に行われます。

spp

接続確立の通知を受け取るコールバック関数を指定します。

reference

コールバック関数に渡すデータを指定します。

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • ソケットが開かれた直後以外の状態のとき(閉じている状態、接続が確立している・確立中の状態などの場合): SFERR_INVALID_STATE
  • ドメイン名がないとき: SFERR_INVALID_STATE
  • SFBNetMgr インスタンスの作成に失敗したとき: SFERR_FAILED
  • メモリ不足のとき: SFERR_NO_MEMORY
  • ネットワークエラーのとき[※コールバック関数に通知される]: BREW API ISOCKET_GetLastError 関数が返すエラー値、またはAEE_NET_ERROR

解説

この関数は、引数に指定されたサーバーに接続リクエストを送信して、接続を確立します。 接続確立後は、このソケットを使用してサーバーと通信を行います。

接続確立についての結果(エラー値)は、この関数の戻り値では取得できません。 以下のエラー値が、引数に指定したコールバック関数の第 1 引数に通知されます。

  • AEE_NET_EADDRINUSE: 事前に ISOCKET_Bind() をコールして要求されたローカルアドレスが使用不可。
  • AEE_NET_EBADF: 無効なソケット記述子が指定された。
  • AEE_NET_ECONNREFUSED: 接続操作が拒否された。
  • AEE_NET_EIPADDRCHANGED: PPP の再同期化により IP アドレスが変更された。
  • AEE_NET_EINVAL: IP アドレスが無効か、ポートが指定されなかった。
  • AEE_NET_EISCONN: ソケットが接続済み (事前の Connect() コールの結果が既に戻っている)。
  • AEE_NET_EMFILE: この操作を完了するにはネットワークリソースが不充分 (使用中のソケット数が多過ぎる)。
  • AEE_NET_ENETDOWN: ネットワークが使用不可 (たとえば、ハンドセットが通信可能範囲外)。
  • AEE_NET_EOPNOTSUPP: ソケットタイプが STREAM でない。
  • AEE_NET_ETIMEDOUT: 接続試行がタイムアウトした。
  • AEE_NET_SUCCESS(SFERR_NO_ERROR): 接続が正常に完了し、ソケットがデータを読み書き可能な状態にある。

コールバック関数が呼び出されるまでは、「Connect 中の状態」になります。 コールバック関数が呼び出されたとき、 接続が確立している場合は、「接続確立の状態」になり、 失敗した場合は、この関数を呼び出す直前の状態(ソケットが開いている状態)に戻ります。

コールバック関数に接続確立の通知が行われる前に、 SFXSSLSocket::Cancel 関数を呼び出すと、 接続の確立はキャンセルされ、この関数を呼び出す直前の状態(ソケットが開いている状態)に戻ります。

なお、この関数の戻り値がエラー(SFERR_NO_ERROR 以外の値)の場合、コールバック関数は呼び出されません。

[Note] 注意

この関数は、 内部で SFBSocket::Connect 関数を呼び出します。

[Note] 前提条件

このソケットは SFXSSLSocket::Open 関数を呼び出した直後の開いた状態である必要があります。

参照

SFXSSLSocket::Open | SFXSSLSocket::Cancel | SFBSocket::Connect | SFXSocketAddress | SFBNetMgr | SFXStorage::CallbackSPP | BREW API INetMgr | BREW API ISOCKET_Connect | BREW API ISOCKET_GetLastError | BREW API ネットワークエラーコード


SFXSSLSocket::GetLocalAddress
ローカル IP アドレスとポート番号を取得します。
[ public, const ]
SFCError GetLocalAddress(
    SFXSocketAddressPtr result   // ローカル IP アドレスとポート番号の格納先へのポインタ
);

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • バインドされておらず、接続も確立されていないとき: SFERR_INVALID_STATE
  • result 引数が null のとき: SFERR_INVALID_PARAM
  • その他: BREW API の ISOCKET_GetLastError 関数が返すエラー値、またはAEE_NET_ERROR

解説

この関数は、このソケットのローカル IP アドレスとポートを取得します。

実際の物理的なローカル IP アドレスは、接続確立後のデータ送受信用ソケットから取得できます。 それまでの間は、SFXSSLSocket::Bind 関数で設定した値が返ります。

[Tip] Tip

実際の物理的なローカル IP アドレスは、 SFXInetAddress::LocalInetAddress 関数を呼び出して取得することも可能です。

[Note] 前提条件

ローカル IP アドレスとポートを取得するには、 このソケットが SFXSSLSocket::Bind 関数を呼び出してバインドしている、 または このソケットが SFXSSLSocket::Connect 関数により接続を確立している必要があります。

参照

SFXSSLSocket::Bind | SFXSSLSocket::Connect | SFXInetAddress::LocalInetAddress | SFXSocketAddress | BREW API ISOCKET_GetLastError


SFXSSLSocket::GetRemoteAddress
リモート IP アドレスとポート番号を取得します。
[ public, const ]
SFCError GetRemoteAddress(
    SFXSocketAddressPtr result   // リモート IP アドレスとポート番号の格納先へのポインタ
);

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • 接続が確立されていないとき: SFERR_INVALID_STATE
  • result 引数が null のとき: SFERR_INVALID_PARAM
  • その他: BREW API の ISOCKET_GetLastError 関数が返すエラー値、またはAEE_NET_ERROR

解説

この関数は、このソケットに接続されたピアのリモート IP アドレスとポートを取得します。

[Note] 注意

この関数は、 内部で SFBSocket::GetPeerName 関数を呼び出します。

[Note] 前提条件

リモート IP アドレスとポートを取得するには、 このソケットが SFXSSLSocket::Connect 関数により接続を確立している必要があります。

参照

SFBSocket::GetPeerName | SFXSSLSocket::Connect | SFXSocketAddress | BREW API ISOCKET_GetPeerName | BREW API ISOCKET_GetLastError


SFXSSLSocket::GetSFBNetMgr
内部で管理する SFBNetMgr インスタンスを取得します。
[ public, const ]
SFBNetMgrSmpConstRef GetSFBNetMgr(Void);

戻り値

このソケットが内部で管理する SFBNetMgr インスタンス

解説

この関数は、 このソケットが内部で管理する SFBNetMgr インスタンスを取得します。

参照

SFBNetMgr | BREW API INetMgr


SFXSSLSocket::GetSFBSSL
内部で管理する SFBSSL インスタンスを取得します。
[ public, const ]
SFBSSLSmpConstRef GetSFBSSL(Void);

戻り値

このソケットが内部で管理する SFBSSL インスタンス

解説

この関数は、 このソケットが内部で管理する SFBSSL インスタンスを取得します。

参照

SFBSSL | BREW API ISSL


SFXSSLSocket::GetSFBSocket
内部で管理する SFBSocket インスタンスを取得します。
[ public, const ]
SFBSocketSmpConstRef GetSFBSocket(Void);

戻り値

このソケットが内部で管理する SFBSocket インスタンス

解説

この関数は、 このソケットが内部で管理する SFBSocket インスタンスを取得します。

参照

SFBSocket | BREW API ISocket


SFXSSLSocket::GetStreamReader
データ受信用ストリームを取得します。
[ public, virtual ]
SFCError GetStreamReader(
    UInt32 size                 // バッファサイズ
    SFXStreamReaderPtr result   // データ受信用ストリームへのポインタ
);
[ public, virtual ]
SFCError GetStreamReader(
    SFXStreamReaderPtr result   // データ受信用ストリームへのポインタ
);

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • result 引数が null のとき: SFERR_INVALID_PARAM
  • 接続が確立されていないとき: SFERR_INVALID_STATE
  • メモリ不足のとき: SFERR_NO_MEMORY

解説

この関数は、データ受信用ストリームを取得します。

size 引数を指定する場合、ストリームバッファは指定したサイズで固定です。 指定しない場合は、ストリームバッファは可変長になり、 内部的に SFXElasticStreamReader クラスが利用されます。

[Tip] Tip
データ受信用ストリームは、受信するデータの種類に応じて SFXBinaryStreamReaderSFXAnsiStringStreamReader、または SFXWideStringStreamReader クラスを使い分けます。
[Note] 前提条件

データ受信用ストリームを取得するには、 SFXSSLSocket::Connect 関数により接続を確立している必要があります。

参照

SFXSSLSocket::GetStreamWriter | SFXBinaryStreamReader | SFXAnsiStringStreamReader | SFXWideStringStreamReader | SFXSSLSocket::Connect | ストリームバッファ


SFXSSLSocket::GetStreamWriter
データ送信用ストリームを取得します。
[ public, virtual ]
SFCError GetStreamWriter(
    UInt32 size                 // バッファサイズ
    SFXStreamWriterPtr result   // データ送信用ストリームへのポインタ
);
[ public, virtual ]
SFCError GetStreamWriter(
    SFXStreamWriterPtr result   // データ送信用ストリームへのポインタ
);

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • result 引数が null のとき: SFERR_INVALID_PARAM
  • ファイルが開いていないとき: SFERR_INVALID_STATE
  • メモリ不足のとき: SFERR_NO_MEMORY

解説

この関数は、データ送信用ストリームを取得します。

size 引数を指定する場合、ストリームバッファは指定したサイズで固定です。 指定しない場合は、ストリームバッファは可変長になり、 内部的に SFXElasticStreamWriter クラスが利用されます。

[Tip] Tip
データ送信用ストリームは、送信するデータの種類に応じて SFXBinaryStreamWriterSFXAnsiStringStreamWriter、または SFXWideStringStreamWriter クラスを使い分けます。
[Note] 前提条件

データ送信用ストリームを取得するには、 SFXSSLSocket::Connect 関数により接続を確立している必要があります。

参照

SFXSSLSocket::GetStreamReader | SFXBinaryStreamWriter | SFXAnsiStringStreamWriter | SFXWideStringStreamWriter | SFXSSLSocket::Connect | ストリームバッファ


SFXSSLSocket::GetTrustMode
SSL 認証モードを取得します。
[ public, const ]
UInt32 GetTrustMode(Void);

戻り値

SSL 認証モード

解説

この関数は、SSL 認証モードを取得します。

以下の 4 種類の SSL 認証モードの何れかが返却されます。

  • SSL_TRUST_MODE_FAIL: トラストエラーがあると接続が失敗します。[デフォルト]
  • SSL_TRUST_MODE_CHECK: トラストエラーの場合、チェックまたは無視できるように中断します。
  • SSL_TRUST_MODE_IGNORE: すべてのトラストエラーを無視します。
  • SSL_TRUST_MODE_ALWAYS: トラストをチェックできるように常に中断します。

参照

SFXSSLSocket::SetTrustMode | BREW API ISSL_NegotiateV


SFXSSLSocket::Negotiate
ネゴシエートを行います。
[ public ]
SFCError Negotiate(
    CallbackSPP spp     // コールバック関数
    VoidPtr reference   // コールバック関数に渡すデータ(参照値)
);

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • 接続が確立されていないとき: SFERR_INVALID_STATE
  • SFBSSLRootCerts インスタンスの生成に失敗したとき: SFERR_FAILED
  • メモリ不足のとき: SFERR_NO_MEMORY

解説

この関数は、SSL ソケットのネゴシエートを行います。 ネゴシエートは SFXSSLSocket::Connect 関数で接続を確立した後に行います。

[Note] 注意

この関数は、 内部で SFBSocket::Writeable / SFBSSL::SetSocket / SFBSSL::NegotiateV 関数を呼び出します。

また、SFBSSLRootCerts インスタンスを作成し、 BREW API ISSL_NegotiateV 関数に渡す BREW API WebOpt 構造体の設定を行います。

参照

SFXSSLSocket::Connect | SFBSSL::NegotiateV | SFBSocket::Writeable | SFBSSL::SetSocket | SFBSSLRootCerts | SFXStorage::CallbackSPP | BREW API ISSL_SetSocket | BREW API ISSL_NegotiateV | BREW API ISOCKET_Writeable | BREW API ISSLRootCerts | BREW API IWebOpts | BREW API WebOpt


SFXSSLSocket::Open
ソケットを開きます。
[ public ]
SFCError Open(
    SInt32 linger = -1   // リンガー時間( -1 のときは設定しない )
);

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • ソケットが閉じていないとき: SFERR_INVALID_STATE
  • SFBNetMgr または SFBSSL インスタンスの生成に失敗したとき: SFERR_FAILED
  • SFBSocket インスタンスの生成に失敗したとき: INETMGR_GetLastError() の戻り値
  • UINT16_MAXIMUM よりも大きなリンガー時間を設定したとき: SFERR_INVALID_PARAM

解説

この関数は、このソケットを開きます(このソケットを初期化します)。

具体的には、 SFXSSLSocket クラスが内部で管理する SFBNetMgr インスタンスを生成し、 BREW API INETMGR_OpenSocket 関数を呼び出して AEE_SOCK_STREAM タイプのソケット(SFBSocket インスタンス)を生成します。 また、SFXSSLSocket::SetTrustMode 関数で設定する SSL 認証モードを SSL_TRUST_MODE_FAIL に設定します。

SFBNetMgr / SFBSocket インスタンスは、 SFXSSLSocket::GetSFBNetMgr / SFXSSLSocket::GetSFBSocket 関数で取得することが可能です。 これらのインスタンスを利用して、詳細な設定が可能です。

[Note] リンガー時間(ネットワーク接続の待機時間)

BREW API INETMGR_SetLinger 関数で設定するリンガー時間(ネットワーク接続の待機時間)は、この関数の linger 引数で指定できます。 デフォルト値は -1 ですが、このときはリンガー時間は設定されません。 UINT16_MAXIMUM よりも大きなリンガー時間を設定すると、SFERR_INVALID_PARAM エラーが返ります。 リンガー時間の設定についての詳細は、 BREW API INETMGR_SetLinger 関数を参照してください。

[Tip] Tip

SFXSSLSocket::Close 関数を呼び出すと、 このソケットは閉じます。

参照

SFXSSLSocket::Close | SFXSSLSocket::GetSFBNetMgr | SFXSSLSocket::GetSFBSocket | SFXSSLSocket::SetTrustMode | SFBNetMgr | SFBSocket | BREW API INetMgr | BREW API ISocket | BREW API ISSL | BREW API INETMGR_SetLinger | BREW API INETMGR_OpenSocket


SFXSSLSocket::Permit
SSL を使わない通信の設定にします。
[ public ]
SFCError Permit(Void);

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • 接続が確立されていないとき、またはネゴシエートが確立した後のとき: SFERR_INVALID_STATE

解説

この関数は、SSL を使わない通信の設定にします。

接続を確立して、ネゴシエートを行う前やネゴシエートに失敗した後にこの関数を呼び出すと、 SSL を使わない通信、つまり、TCP 通信が行われます。

[Note] SFXSSLSocket::Permit 関数の存在意義

SFXSSLSocket::Permit 関数の目的は、SFXSSLSocket クラスを SFXTCPSocket クラスのように利用することです。

あるアプリでは、 設定内容によって SSL 通信を行ったり、TCP 通信を行います。

このとき、SFXSSLSocket::Permit 関数を呼び出すと、 SFXSSLSocket クラスは TCP モードとなり、 SSL 通信ではなく、TCP 通信を行います(SFXTCPSocket クラスを使用する必要ありません)。

SFXPOP3 / SFXSMTP 関数では、 この関数により、SFXSSLSocket クラスだけで TCP 通信と SSL 通信を行っています。

参照

SFXSSLSocket::Negotiate | SFXPOP3 | SFXSMTP


SFXSSLSocket::Read
Read(ストリームを使用しないソケットからのデータ受信)を行います。
[ public, virtual ]
SFCError Read(
    VoidPtr buffer   // 読み込むバッファ
    UInt32Ptr size   // 呼び出す前: データを読み込むバッファのサイズ。戻り値: 実際に読み込んだデータのサイズ
);

引数

buffer

データを読み込むバッファを指定します。

size

この関数を呼び出す時は、データを読み込むバッファのサイズを指定します。 この関数が戻ると、実際にバッファに読み込んだデータのサイズが格納されています。

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • 接続が確立されていないとき: SFERR_INVALID_STATE
  • size 引数が null のとき: SFERR_INVALID_PARAM
  • 再試行が必要なとき: AEE_NET_WOULDBLOCK
  • その他のネットワークエラーが発生したとき: SFBSocket::GetLastError 関数で得られるエラー値、またはAEE_NET_ERROR

解説

この関数は、Read(ストリームを使用しないソケットからのデータ受信)を行います。

ピアが接続を切断した場合、 この関数は SFERR_NO_ERROR を返し、かつ、 size 引数のポインタが指す場所に 0 が戻ります。

※ この関数が AEE_NET_WOULDBLOCK を返す場合、 SFXSSLSocket::ScheduleRead 関数でコールバック関数を登録し、 コールバック関数の中で再度この関数を呼び出して Read を行う必要があります。

[Note] 注意

この関数は、 内部で SFBAStream::Read 関数を呼び出します。

[Note] 前提条件

この関数を呼び出す前に、 このソケットは SFXSSLSocket::Connect 関数を呼び出して 接続を確立している必要があります 。

参照

SFXSSLSocket::ScheduleRead | SFBAStream::Read | BREW API ISOCKET_Read


SFXSSLSocket::ScheduleBind
Bind(ソケットに端末のローカル IP アドレスとポート番号を関連付ける操作)をスケジュールします。
[ public ]
SFCError ScheduleBind(
    CallbackSPP spp     // コールバック関数
    VoidPtr reference   // コールバック関数に渡すデータ(参照値)
);

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • ソケットが開いた以外の状態のとき(閉じている状態、接続が確立している・確立中の状態などの場合)、またはBind スケジュール中の状態のとき: SFERR_INVALID_STATE

解説

この関数は、Bind(ソケットに端末のローカル IP アドレスとポート番号を関連付ける操作)をスケジュールします。

具体的には、 SFXSSLSocket::Bind 関数を使用して Bind するコールバック関数を登録します。 登録されたコールバック関数は、Bind が可能になると BREW AEE により呼び出されます。

コールバック関数が呼び出されるまでは、「Bind スケジュール中の状態」になります。 コールバック関数が呼び出されると、この関数を呼び出す直前の状態(ソケットが開いている状態)に戻ります。

コールバック関数が呼び出される前に、 SFXSSLSocket::Cancel 関数を呼び出すと、 Bind のスケジュールはキャンセルされ、この関数を呼び出す直前の状態(ソケットが開いている状態)に戻ります。

なお、この関数の戻り値がエラー(SFERR_NO_ERROR 以外の値)の場合は、コールバック関数は呼び出されません。

SFXSSLSocket::Bind 関数の戻り値が AEE_NET_WOULDBLOCK である場合、 この関数を使用してコールバック関数を登録し、 再び Bind を試みます。

[Note] 注意

この関数は、 内部で SFBSocket::Writeable 関数を呼び出します。

[Note] 前提条件

この関数を呼び出す前に、 このソケットは SFXSSLSocket::Open 関数を呼び出して 開いている必要があります。 但し、接続が確立されている、もしくは、確立中の場合は、 SFERR_INVALID_STATE エラーが返ります。

また、既に Bind がスケジュールされている場合も、SFERR_INVALID_STATE エラーが返ります。

参照

SFXSSLSocket::Bind | SFBSocket::Writeable | SFXStorage::CallbackSPP | BREW API ISOCKET_Writeable


SFXSSLSocket::ScheduleRead
Read(ストリームを使用しないソケットからのデータ受信)をスケジュールします。
[ public, virtual ]
SFCError ScheduleRead(
    CallbackSPP spp     // コールバック関数
    VoidPtr reference   // コールバック関数に渡すデータ(参照値)
);

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • 接続が確立されていないとき、またはRead スケジュール中の状態のとき: SFERR_INVALID_STATE

解説

この関数は、Read(ストリームを使用しないソケットからのデータ受信)をスケジュールします。

具体的には、 SFXSSLSocket::Read 関数を使用して、 Read を行うコールバック関数を登録します。 登録されたコールバック関数は、Read が可能になると BREW AEE により呼び出されます。

コールバック関数が呼び出されるまでは、「Read スケジュール中の状態」になります。 コールバック関数が呼び出されると、この関数を呼び出す直前の状態(接続が確立している状態)に戻ります。

コールバック関数が呼び出される前に、 SFXSSLSocket::Cancel 関数を呼び出すと、 Read のスケジュールはキャンセルされ、この関数を呼び出す直前の状態(接続が確立している状態)に戻ります。

なお、この関数の戻り値がエラー(SFERR_NO_ERROR 以外の値)の場合、コールバック関数は呼び出されません。

SFXSSLSocket::Read 関数の戻り値が AEE_NET_WOULDBLOCK である場合、 この関数を使用してコールバック関数を登録し、 再び Read を試みます。

[Note] 注意

この関数は、 内部で SFBAStream::Readable 関数を呼び出します。

[Note] 前提条件

この関数を呼び出す前に、 このソケットは SFXSSLSocket::Connect 関数を呼び出して 接続を確立している必要があります 。

また、既に Read がスケジュールされている場合は、SFERR_INVALID_STATE エラーが返ります。

参照

SFXSSLSocket::Read | SFBAStream::Readable | SFXStorage::CallbackSPP | BREW API ISOCKET_Readable


SFXSSLSocket::ScheduleWrite
Write(ストリームを使用しないソケットへのデータ送信)をスケジュールします。
[ public, virtual ]
SFCError ScheduleWrite(
    CallbackSPP spp     // コールバック関数
    VoidPtr reference   // コールバック関数に渡すデータ(参照値)
);

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • 接続が確立されていないとき、またはWrite スケジュール中の状態のとき: SFERR_INVALID_STATE

解説

この関数は、Write(ストリームを使用しないソケットへのデータ送信)をスケジュールします。

具体的には、 SFXSSLSocket::Write 関数を使用して、 Write を行うコールバック関数を登録します。 登録されたコールバック関数は、Write が可能になると BREW AEE により呼び出されます。

コールバック関数が呼び出されるまでは、「Write スケジュール中の状態」になります。 コールバック関数が呼び出されると、この関数を呼び出す直前の状態(接続が確立している状態)に戻ります。

コールバック関数が呼び出される前に、 SFXSSLSocket::Cancel 関数を呼び出すと、 Write のスケジュールはキャンセルされ、この関数を呼び出す直前の状態(接続が確立している状態)に戻ります。

なお、この関数の戻り値がエラー(SFERR_NO_ERROR 以外の値)の場合、コールバック関数は呼び出されません。

SFXSSLSocket::Write 関数の戻り値が AEE_NET_WOULDBLOCK である場合、 この関数を使用してコールバック関数を登録し、 再び Write を試みます。

[Note] 注意

この関数は、 内部で SFBSocket::Writeable 関数を呼び出します。

[Note] 前提条件

この関数を呼び出す前に、 このソケットは SFXSSLSocket::Connect 関数を呼び出して 接続を確立している必要があります 。

また、既に Write がスケジュールされている場合は、SFERR_INVALID_STATE エラーが返ります。

参照

SFXSSLSocket::Write | SFBSocket::Writeable | SFXStorage::CallbackSPP | BREW API ISOCKET_Writeable


SFXSSLSocket::SetTrustMode
SSL 認証モードを設定します。
[ public ]
SFCError SetTrustMode(
    UInt32 param   // SSL 認証モード
);

引数

param

以下の 4 種類の何れかの SSL 認証モードを指定します。

  • SSL_TRUST_MODE_FAIL: デフォルトです。認証エラーがあると接続が失敗します。
  • SSL_TRUST_MODE_CHECK: 認証エラーの場合、チェックまたは無効にできるように中断します。
  • SSL_TRUST_MODE_IGNORE: すべての認証エラーを無効にします。
  • SSL_TRUST_MODE_ALWAYS: 認証をチェックできるように常に中断します。

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • ソケットが閉じているとき: SFERR_INVALID_STATE

解説

この関数は、SSL 認証モードを設定します。

設定された値は SFXSSLSocket::Close されるまで有効です。

この値を変更した直後に SFXSSLSocket::Connect 関数を呼び出したときに、 機種によっては SSL_RESULT_SERV_VERS エラーが発生することがあります。

SSL_RESULT_SERV_VERS エラーが発生した場合は、一旦 SFXSSLSocket::Close 関数を呼び出してこの SSL ソケットを閉じて、 再度この関数を呼び出して SSL 認証モードを設定し、SFXSSLSocket::Connect 関数を呼び出してサーバーに接続してください。

設定可能な SSL 認証モードは、 以下の 4 種類です(参照: BREW API ISSL_NegotiateV)。

  • SSL_TRUST_MODE_FAIL: トラストエラーがあると接続が失敗します。[デフォルト]
  • SSL_TRUST_MODE_CHECK: トラストエラーの場合、チェックまたは無視できるように中断します。
  • SSL_TRUST_MODE_IGNORE: すべてのトラストエラーを無視します。
  • SSL_TRUST_MODE_ALWAYS: トラストをチェックできるように常に中断します。

参照

SFXSSLSocket::GetTrustMode | SFXSSLSocket::Open | BREW API ISSL_NegotiateV


SFXSSLSocket::Write
Write(ストリームを使用しないソケットへのデータ送信)を行います。
[ public, virtual ]
SFCError Write(
    VoidConstPtr buffer   // データを書き込むバッファ
    UInt32Ptr size        // 呼び出す前: データを書き込むバッファのサイズ。戻り値: 実際に書き込んだデータのサイズ
);

引数

buffer

データを書き込むバッファを指定します。

size

この関数を呼び出す時は、データを書き込むバッファのサイズを指定します。 この関数が戻ると、実際にバッファに書き込んだデータのサイズが格納されています。

戻り値

  • 成功したとき: SFERR_NO_ERROR
  • 接続が確立されていないとき: SFERR_INVALID_STATE
  • size 引数が null のとき: SFERR_INVALID_PARAM
  • 再試行が必要なとき : AEE_NET_WOULDBLOCK
  • その他のネットワークエラーが発生したとき: SFBSocket::GetLastError 関数で得られるエラー値、またはAEE_NET_ERROR

解説

この関数は、Write(ストリームを使用しないソケットへのデータ送信)を行います。

※ この関数が AEE_NET_WOULDBLOCK を返す場合、 SFXSSLSocket::ScheduleWrite 関数でコールバック関数を登録し、 コールバック関数の中で再度この関数を呼び出して Write を行う必要があります。

[Note] 注意

この関数は、 内部で SFBSocket::Write 関数を呼び出します。

[Note] 前提条件

この関数を呼び出す前に、 このソケットは SFXSSLSocket::Connect 関数を呼び出して 接続を確立している必要があります 。

参照

SFXSSLSocket::ScheduleWrite | SFBSocket::Write | BREW API ISOCKET_Write