nl:: Weave:: Binding
#include <src/lib/core/WeaveBinding.h>
Weave 通信の意図するターゲットと、関連する設定情報をキャプチャします。
概要
Binding オブジェクトは、Weave 通信のターゲット(「ピア」とも呼ばれます)を、ピアとの通信方法を記述する一連の構成パラメータとともに指定します。バインディングは、両者間でやり取りされるアプリケーション プロトコルに依存しません。つまり、「どのように」「何を」ではなく「何」というのかです。
アプリケーションでは、目的の通信チャネルのタイプに応じたパラメータを使用してバインディングを構成する必要があります。バインディングは、TCP、UDP、Weave Reliable Messaging を使用した UDP、Weave over BLE(WoBLE)など、さまざまなネットワーク トランスポートをサポートしています。アプリケーションは、当事者間で送信されるメッセージを保護するために、特定のセキュリティ メカニズムの使用をリクエストすることもできます。これには、CASE セッションと PASE セッション、アプリケーション グループ キーが含まれます。Binding を構成するインターフェースは宣言型 API スタイルを使用します。このスタイルでは、アプリケーションが通信の要件を簡単な言葉で記述できます。
詳細については、Binding::Configuration のドキュメントをご覧ください。
準備
通信が行われる前に、Binding を「準備」する必要があります。バインディングを準備する作業には、通信が行われるために必要な状態を確立することが含まれます。これには、ピアのネットワーク アドレスの解決、ネットワーク接続の確立、セキュリティ キーのネゴシエーションなどが含まれます。アプリケーションによって設定されると、Binding は通信の準備に必要なすべてのステップを行い、プロセスが完了するとアプリケーションにコールバックします。このように、バインディングは通信の仕組みを隠し、アプリは高度なインタラクションに集中できます。
コミュニケーション
Binding の準備が整うと、使用できるようになります。この状態では、アプリケーション(より一般的にはアプリケーションに代わって動作するプロトコル レイヤ コード)は、Weave 交換コンテキストを割り当てるように Binding をリクエストします。結果として得られる交換コンテキストは通信用に事前構成されているため、アプリケーションはすぐにピアとの Weave 交換を開始できます。Binding が閉じられるか、なんらかのイベント(ネットワーク障害など)によって基盤となる通信チャネルが終了するまで、アプリケーションは Binding から交換コンテキストを要求し続けることができます。
バインディング状態の変化
Binding は、その使用過程で、アプリケーションに API イベントを配信し、Binding の状態の変化を通知します。たとえば、準備に成功すると、アプリケーションは Binding が使用可能になったことを通知するイベントを受け取ります。同様に、基盤となる通信チャネルに障害が発生した場合、イベントがアプリケーションに配信され、Binding が準備完了状態ではなくなったことが通知されます。
API イベントは、Binding が割り当てられたときに指定されるイベント コールバック関数を介してアプリに配信されます。
バインディングの有効期間
バインディングは、複数のソフトウェア コンポーネント間で共有するためにカウントされる参照です。Binding が割り当てられると、バインディングへの単一の参照が作成されます。Binding が後で再利用できるように、この参照を将来的にリリースする責任はアプリにあります。
Binding を指定して実行したアプリは、バインディングで Close() を呼び出すことができます。これにより、アプリケーションの Binding へのリファレンスが解放され、以降の API イベントの配信はすべてブロックされます。Binding への最後の参照が解放されると、自動的に閉じます。
公開タイプ |
|
---|---|
@23{
|
enum |
EventCallback)(void *apAppState, EventType aEvent, const InEventParam &aInParam, OutEventParam &aOutParam)
|
typedefvoid(*
|
EventType{
|
enum |
State
|
enum |
パブリック属性 |
|
---|---|
AppState
|
void *
|
パブリック関数 |
|
---|---|
AddRef(void)
|
void
バインディング オブジェクトへの参照を予約します。
|
AdjustResponseTimeout(ExchangeContext *apExchangeContext) const
|
既存の Exchange コンテキストを再構成して、応答タイムアウトを調整します。
|
AllocateRightSizedBuffer(PacketBuffer *& buf, const uint32_t desiredSize, const uint32_t minSize, uint32_t & outMaxPayloadSize)
|
|
BeginConfiguration()
|
Binding を設定するプロセスである。
|
CanBePrepared(void) const
|
bool
|
Close(void)
|
void
バインディング オブジェクトを閉じて参照を解放します。
|
GetConnection() const
|
バインディングに関連付けられている Weave 接続オブジェクトを取得します。
|
GetDefaultResponseTimeout() const
|
uint32_t
ピアとの通信時に使用するデフォルトの交換レスポンス タイムアウトを取得します。
|
GetDefaultWRMPConfig(void) const
|
const WRMPConfig &
ピアとの通信時に使用するデフォルトの WRMP 設定を取得します。
|
GetEncryptionType(void) const
|
uint8_t
ピアとの間のメッセージを暗号化するときに使用するメッセージ暗号化タイプを取得します。
|
GetEventCallback() const
|
EventCallback
Binding の API イベントが発生したときに呼び出される関数を取得します。
|
GetExchangeManager() const
|
|
GetKeyId(void) const
|
uint32_t
ピアとの間のメッセージを暗号化するときに使用するメッセージ暗号鍵の ID を取得します。
|
GetLogId(void) const
|
uint16_t
バインディングの一意の ID を取得します。
|
GetMaxWeavePayloadSize(const System::PacketBuffer *msgBuf)
|
uint32_t
提供された PacketBuffer 内に収まる Weave ペイロードの最大サイズを取得します。
|
GetPeerDescription(char *buf, uint32_t bufSize) const
|
void
ピアノードとそれに関連するアドレス / 接続情報を記述する文字列を作成します。
|
GetPeerIPAddress(nl::Inet::IPAddress & address, uint16_t & port, InterfaceId & interfaceId) const
|
void
ピアの IP アドレス情報を取得します(利用可能な場合)。
|
GetPeerNodeId(void) const
|
uint64_t
バインディング ピアのノード ID を取得します。
|
GetProtocolLayerCallback(EventCallback & callback, void *& state) const
|
void
|
GetState(void) const
|
State
バインディングの現在の状態を取得します。
|
IsAuthenticMessageFromPeer(const WeaveMessageInfo *msgInfo)
|
bool
特定の受信メッセージが構成済みのピアからのものであり、適切に認証されているかどうかを確認します。
|
IsConnectionTransport() const
|
bool
|
IsPreparing(void) const
|
bool
|
IsReady(void) const
|
bool
|
IsUDPTransport() const
|
bool
|
IsUnreliableUDPTransport() const
|
bool
|
IsWRMTransport() const
|
bool
|
NewExchangeContext(ExchangeContext *& appExchangeContext)
|
バインディングのターゲットであるピアと通信するための新しい Exchange コンテキストを割り当てます。
|
Release(void)
|
void
バインディング オブジェクトへの参照を解放します。
|
RequestPrepare()
|
Binding を構成して準備するようアプリケーションにリクエストします。
|
Reset(void)
|
void
バインディングをリセットして未設定の状態に戻します。
|
SetDefaultResponseTimeout(uint32_t msec)
|
void
ピアとの通信時に使用するデフォルトの交換レスポンス タイムアウトを設定します。
|
SetDefaultWRMPConfig(const WRMPConfig & wrmpConfig)
|
void
ピアとの通信時に使用するデフォルトの WRMP 構成を設定します。
|
SetEventCallback(EventCallback aEventCallback)
|
void
Binding の API イベントが発生したときに呼び出すアプリケーション定義関数を設定します。
|
SetProtocolLayerCallback(EventCallback callback, void *state)
|
void
アプリケーションの代わりに Binding を使用して、プロトコル レイヤ コードのイベント コールバック関数を設定します。
|
静的パブリック関数 |
|
---|---|
DefaultEventHandler(void *apAppState, EventType aEvent, const InEventParam & aInParam, OutEventParam & aOutParam)
|
void
API イベントをバインドするためのデフォルト ハンドラ。
|
クラス |
|
---|---|
nl:: |
Binding オブジェクトを設定および準備するための宣言型インターフェースを提供します。 |
構造体 |
|
---|---|
nl:: |
Binding API イベントに入力パラメータ。 |
nl:: |
Binding API イベントにパラメータを出力します。 |
公開タイプ
EventCallback
void(* EventCallback)(void *apAppState, EventType aEvent, const InEventParam &aInParam, OutEventParam &aOutParam)
EventType
EventType
プロパティ | |
---|---|
kEvent_BindingFailed
|
バインディングに失敗したため、ピアとの通信に使用できなくなりました。 |
kEvent_BindingReady
|
バインディングに対する準備アクションが正常に完了し、バインディングを使用してピアと通信できるようになりました。 |
kEvent_ConnectionEstablished
|
要求された Weave 接続は確立されています。 |
kEvent_DefaultCheck
|
アプリケーションでの適切なデフォルトのイベント処理を検証するために使用されます。 |
kEvent_PASEParametersRequested
|
アプリケーションは、PASE セッションの確立中に使用するパラメータを指定するよう要求されます。 |
kEvent_PrepareFailed
|
バインディングの準備アクションが失敗しました。 |
kEvent_PrepareRequested
|
アプリケーションが、ネットワーク スタックで使用するバインディングを構成して準備するようリクエストされます。 |
kEvent_TAKEParametersRequested
|
アプリケーションは、TAKE セッションの確立中に使用するパラメータを提供するよう要求されます。 |
州
State
パブリック属性
AppState
void * AppState
パブリック関数
AddRef
void AddRef( void )
バインディング オブジェクトへの参照を予約します。
AdjustResponseTimeout
WEAVE_ERROR AdjustResponseTimeout( ExchangeContext *apExchangeContext ) const
既存の Exchange コンテキストを再構成して、応答タイムアウトを調整します。
詳細 | |||
---|---|---|---|
パラメータ |
|
AllocateRightSizedBuffer
WEAVE_ERROR AllocateRightSizedBuffer( PacketBuffer *& buf, const uint32_t desiredSize, const uint32_t minSize, uint32_t & outMaxPayloadSize )
BeginConfiguration
Configuration BeginConfiguration()
Binding を設定するプロセスである。
アプリケーションは、ピアとの通信に備える前に、BeginConfiguration() を呼び出して Binding を設定する必要があります。
詳細 | |
---|---|
戻り値 |
バインディングの構成に使用できる Binding::Configuration オブジェクト。
|
CanBePrepared
bool CanBePrepared( void ) const
閉じる
void Close( void )
バインディング オブジェクトを閉じて参照を解放します。
このメソッドが呼び出されると、バインディングが Closed 状態になります。バインディングに対して進行中の準備アクションはすべてキャンセルされ、バインディングが保持している外部通信リソースはすべて解放されます。
Close() を呼び出すと、バインディングに関連付けられている参照カウントが減少し、参照カウントがゼロになるとオブジェクトが解放されます。
GetConnection
WeaveConnection * GetConnection() const
バインディングに関連付けられている Weave 接続オブジェクトを取得します。
詳細 | |
---|---|
戻り値 |
WeaveConnection オブジェクトへのポインタ。バインディングに関連付けられた接続がない場合は NULL。
|
GetDefaultResponseTimeout
uint32_t GetDefaultResponseTimeout() const
ピアとの通信時に使用するデフォルトの交換レスポンス タイムアウトを取得します。
詳細 | |
---|---|
戻り値 |
レスポンス タイムアウト(ミリ秒)。
|
GetDefaultWRMPConfig
const WRMPConfig & GetDefaultWRMPConfig( void ) const
GetEncryptionType
uint8_t GetEncryptionType( void ) const
ピアとの間のメッセージを暗号化するときに使用するメッセージ暗号化タイプを取得します。
GetEventCallback
EventCallback GetEventCallback() const
GetExchangeManager
WeaveExchangeManager * GetExchangeManager() const
GetKeyId
uint32_t GetKeyId( void ) const
ピアとの間のメッセージを暗号化するときに使用するメッセージ暗号鍵の ID を取得します。
GetLogId
uint16_t GetLogId( void ) const
バインディングの一意の ID を取得します。
GetMaxWeavePayloadSize
uint32_t GetMaxWeavePayloadSize( const System::PacketBuffer *msgBuf )
提供された PacketBuffer 内に収まる Weave ペイロードの最大サイズを取得します。
WRM を使用する UDP を含む UDP の場合、返される最大ペイロード サイズによって、結果の Weave メッセージが設定済みの UDP MTU を超えないようにすることができます。
また、このメソッドにより、提供された PacketBuffer を Weave ペイロードがオーバーフローしなくなります。
詳細 | |||
---|---|---|---|
パラメータ |
|
||
戻り値 |
Weave ペイロードの最大サイズ。
|
GetPeerDescription
void GetPeerDescription( char *buf, uint32_t bufSize ) const
ピアノードとそれに関連するアドレス / 接続情報を記述する文字列を作成します。
詳細 | |||||
---|---|---|---|---|---|
パラメータ |
|
GetPeerIPAddress
void GetPeerIPAddress( nl::Inet::IPAddress & address, uint16_t & port, InterfaceId & interfaceId ) const
ピアの IP アドレス情報を取得します(利用可能な場合)。
ピアの IP アドレス情報が利用できるかどうかは、バインディングの状態と構成によって異なります。IP アドレス情報は、IP ベースのトランスポート(TCP、UDP、または UDP と WRMP)を使用している場合にのみ使用できます。準備の開始前は、住所情報を利用できるのは、設定時にアプリケーションで明示的に設定された住所のみです。準備段階では、アドレスの準備が完了したとき(DNS の解決の完了後など)に、アドレス情報を入手できます。Binding の準備が整うと、Binding がリセットされるまで住所情報を利用できます。
詳細 | |||||||
---|---|---|---|---|---|---|---|
パラメータ |
|
GetPeerNodeId
uint64_t GetPeerNodeId( void ) const
バインディング ピアのノード ID を取得します。
バインディング オブジェクトの準備が完了している場合にのみ有効です。
詳細 | |
---|---|
戻り値 |
ピアの Weave ノード ID
|
GetProtocolLayerCallback
void GetProtocolLayerCallback( EventCallback & callback, void *& state ) const
GetState
State GetState( void ) const
バインディングの現在の状態を取得します。
詳細 | |
---|---|
戻り値 |
バインディング状態。
|
IsAuthenticMessageFromPeer
bool IsAuthenticMessageFromPeer( const WeaveMessageInfo *msgInfo )
特定の受信メッセージが構成済みのピアからのものであり、適切に認証されているかどうかを確認します。
このメソッドは、指定されたメッセージについて以下の詳細を確認します。
- バインディングのピアノードから発信されたメッセージ
- メッセージがバインディングと同じトランスポート タイプで受信されました。メッセージが接続を介して受信された場合、このメソッドは、バインディングに関連付けられた正確な接続を介してメッセージが受信されたことも確認します。
- メッセージの暗号化に使用される暗号鍵と種類は、バインディングで構成されているものと一致します。セキュリティを使用せずに構成されたバインディングの場合、このメソッドでは、受信メッセージが暗号化されていないことが確認されます。
この方法は、ノードからピアへの最初の交換の後、ピアが自発的にローカルノードへの交換を開始できる WDM などのプロトコルで使用されることを意図しています。このような場合、このメソッドにより、着信メッセージが関連ピアによって送信されたことをローカルノードが確認できます。(もちろん、メッセージ暗号化を使用せずに構成されたバインディングでは、このアサーションはセキュリティの観点からは意味がありません。送信者ノード ID とトランスポート タイプが一致していることを確認するだけです)。
バインディングが Ready 状態でない場合、このメソッドは常に false を返します。
詳細 | |||
---|---|---|---|
パラメータ |
|
||
戻り値 |
メッセージがピアからの真正な場合は true。
|
IsConnectionTransport
bool IsConnectionTransport() const
IsUDPTransport
bool IsUDPTransport() const
IsUnreliableUDPTransport
bool IsUnreliableUDPTransport() const
IsWRMTransport
bool IsWRMTransport() const
NewExchangeContext
WEAVE_ERROR NewExchangeContext( ExchangeContext *& appExchangeContext )
バインディングのターゲットであるピアと通信するための新しい Exchange コンテキストを割り当てます。
詳細 | |||||||||
---|---|---|---|---|---|---|---|---|---|
パラメータ |
|
||||||||
戻り値 |
|
リリース
void Release( void )
バインディング オブジェクトへの参照を解放します。
バインディング オブジェクトへの参照がこれ以上なくなると、バインディングは閉じられて解放されます。
RequestPrepare
WEAVE_ERROR RequestPrepare()
Binding を構成して準備するようアプリケーションにリクエストします。
プロトコル レイヤのコードは、まだ構成されていない、または失敗した Binding でこのメソッドを使用して、アプリケーションにイベント(kEvent_PrepareRequested)をトリガーし、バインディングの構成と使用準備をリクエストします。
このメソッドは、NotConfigured または Failed 状態のバインディングでのみ呼び出すことができます。
アプリケーションがバインディングのオンデマンドの設定/準備をサポートしていない場合、メソッドは WEAVE_ERROR_NOT_IMPLEMENTED で失敗します。
リセット
void Reset( void )
SetDefaultResponseTimeout
void SetDefaultResponseTimeout( uint32_t msec )
ピアとの通信時に使用するデフォルトの交換レスポンス タイムアウトを設定します。
詳細 | |||
---|---|---|---|
パラメータ |
|
SetDefaultWRMPConfig
void SetDefaultWRMPConfig( const WRMPConfig & wrmpConfig )
SetEventCallback
void SetEventCallback( EventCallback aEventCallback )
SetProtocolLayerCallback
void SetProtocolLayerCallback( EventCallback callback, void *state )
静的パブリック関数
DefaultEventHandler
void DefaultEventHandler( void *apAppState, EventType aEvent, const InEventParam & aInParam, OutEventParam & aOutParam )
API イベントをバインドするためのデフォルト ハンドラ。
アプリケーションで認識または処理できない API イベントに対しては、このメソッドを呼び出す必要があります。指定するパラメータは、バインディングによってアプリケーションのイベント ハンドラ関数に渡されるパラメータと同じである必要があります。
詳細 | |||||||||
---|---|---|---|---|---|---|---|---|---|
パラメータ |
|