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{
  kGetPeerDescription_MaxLength = nl::Weave::kWeavePeerDescription_MaxLength
}
enum
EventCallback)(void *apAppState, EventType aEvent, const InEventParam &aInParam, OutEventParam &aOutParam) typedef
void(*
EventType{
  kEvent_ConnectionEstablished = 1,
  kEvent_BindingReady = 2,
  kEvent_PrepareFailed = 3,
  kEvent_BindingFailed = 4,
  kEvent_PrepareRequested = 5,
  kEvent_PASEParametersRequested = 6,
  kEvent_TAKEParametersRequested = 7,
  kEvent_DefaultCheck = 100
}
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::Weave::Binding::Configuration

Binding オブジェクトを設定および準備するための宣言型インターフェースを提供します。

構造体

nl::Weave::Binding::InEventParam

Binding API イベントに入力パラメータ。

nl::Weave::Binding::OutEventParam

Binding API イベントにパラメータを出力します。

公開タイプ

@23

 @23
プロパティ
kGetPeerDescription_MaxLength

GetPeerDescription() によって返される文字列の最大長(null 文字を含む)。

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 コンテキストを再構成して、応答タイムアウトを調整します。

詳細
パラメータ
[in] apExchangeContext
再構成する 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 

ピアとの通信時に使用するデフォルトの WRMP 設定を取得します。

詳細
戻り値
デフォルトの設定値を含む WRMPConfig 構造体への参照。

GetEncryptionType

uint8_t GetEncryptionType(
  void
) const 

ピアとの間のメッセージを暗号化するときに使用するメッセージ暗号化タイプを取得します。

GetEventCallback

EventCallback GetEventCallback() const 

Binding の API イベントが発生したときに呼び出される関数を取得します。

詳細
戻り値
コールバック関数へのポインタ。

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 ペイロードがオーバーフローしなくなります。

詳細
パラメータ
[in] msgBuf
メッセージ ペイロードの書き込み先となる PacketBuffer へのポインタ。
戻り値
Weave ペイロードの最大サイズ。

GetPeerDescription

void GetPeerDescription(
  char *buf,
  uint32_t bufSize
) const 

ピアノードとそれに関連するアドレス / 接続情報を記述する文字列を作成します。

詳細
パラメータ
[in] buf
文字列を書き込むバッファへのポインタ。指定したバッファは、kGetPeerDescription_MaxLength 以上のサイズにしてください。指定されたバッファが小さいと、文字列は適合するように切り捨てられます。いずれの場合も、出力には NUL 終端文字が含まれます。
[in] bufSize
buf が指すバッファのサイズ。

GetPeerIPAddress

void GetPeerIPAddress(
  nl::Inet::IPAddress & address,
  uint16_t & port,
  InterfaceId & interfaceId
) const 

ピアの IP アドレス情報を取得します(利用可能な場合)。

ピアの IP アドレス情報が利用できるかどうかは、バインディングの状態と構成によって異なります。IP アドレス情報は、IP ベースのトランスポート(TCP、UDP、または UDP と WRMP)を使用している場合にのみ使用できます。準備の開始前は、住所情報を利用できるのは、設定時にアプリケーションで明示的に設定された住所のみです。準備段階では、アドレスの準備が完了したとき(DNS の解決の完了後など)に、アドレス情報を入手できます。Binding の準備が整うと、Binding がリセットされるまで住所情報を利用できます。

詳細
パラメータ
[out] address
ピアの IP アドレスを受け取る IPAddress オブジェクトへの参照。ピアの IP アドレス情報が利用できない場合、この値は IPAddress::Any に設定されます。
[out] port
ピアのポート番号を受け取る整数への参照。ピアの IP アドレス情報が利用できない場合、この値は定義されません。
[out] interfaceId
ピアに到達するためのネットワーク インターフェースの ID を受け取る整数への参照。ピアの IP アドレス情報が利用できない場合、この値は定義されません。

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 を返します。

詳細
パラメータ
[in] msgInfo
受信メッセージの Weave メッセージ情報。
戻り値
メッセージがピアからの真正な場合は true。

IsConnectionTransport

bool IsConnectionTransport() const 

IsPreparing

bool IsPreparing(
  void
) const 

詳細
戻り値
Binding が現在準備されている場合は true。

IsReady

bool IsReady(
  void
) const 

詳細
戻り値
Binding の状態が Ready の場合は true。

IsUDPTransport

bool IsUDPTransport() const 

IsUnreliableUDPTransport

bool IsUnreliableUDPTransport() const 

IsWRMTransport

bool IsWRMTransport() const 

NewExchangeContext

WEAVE_ERROR NewExchangeContext(
  ExchangeContext *& appExchangeContext
)

バインディングのターゲットであるピアと通信するための新しい Exchange コンテキストを割り当てます。

詳細
パラメータ
[out] appExchangeContext
新しく割り当てられた Exchange Context オブジェクトを受け取るポインタへの参照。メソッドが失敗した場合は、ポインタが NULL に設定されます。
戻り値
WEAVE_NO_ERROR
交換コンテキストが正常に割り当てられたかどうか。
WEAVE_ERROR_NO_MEMORY
交換コンテキストの割り当てに利用できるメモリがない場合。
WEAVE_ERROR_INCORRECT_STATE
バインディングが準備完了状態でない場合。
other
バインディングの構成に基づくエクスチェンジ コンテキストの構成に関連するその他のエラー。

リリース

void Release(
  void
)

バインディング オブジェクトへの参照を解放します。

バインディング オブジェクトへの参照がこれ以上なくなると、バインディングは閉じられて解放されます。

RequestPrepare

WEAVE_ERROR RequestPrepare()

Binding を構成して準備するようアプリケーションにリクエストします。

プロトコル レイヤのコードは、まだ構成されていない、または失敗した Binding でこのメソッドを使用して、アプリケーションにイベント(kEvent_PrepareRequested)をトリガーし、バインディングの構成と使用準備をリクエストします。

このメソッドは、NotConfigured または Failed 状態のバインディングでのみ呼び出すことができます。

アプリケーションがバインディングのオンデマンドの設定/準備をサポートしていない場合、メソッドは WEAVE_ERROR_NOT_IMPLEMENTED で失敗します。

リセット

void Reset(
  void
)

バインディングをリセットして未設定の状態に戻します。

Reset() が呼び出されると、バインディングに対して進行中の準備アクションがキャンセルされ、バインディングが保持している外部通信リソースがすべて解放されます。Reset() によってバインディングが「未設定」の状態になります。その後、再度構成して準備できます。

Reset() は、バインディングの参照カウントを変更しません。

SetDefaultResponseTimeout

void SetDefaultResponseTimeout(
  uint32_t msec
)

ピアとの通信時に使用するデフォルトの交換レスポンス タイムアウトを設定します。

詳細
パラメータ
[in] timeout
新しいレスポンス タイムアウト(ミリ秒)。

SetDefaultWRMPConfig

void SetDefaultWRMPConfig(
  const WRMPConfig & wrmpConfig
)

ピアとの通信時に使用するデフォルトの WRMP 構成を設定します。

詳細
パラメータ
[in] aWRMPConfig
新しいデフォルト構成を含む WRMPConfig 構造体への参照。

SetEventCallback

void SetEventCallback(
  EventCallback aEventCallback
)

Binding の API イベントが発生したときに呼び出すアプリケーション定義関数を設定します。

詳細
パラメータ
[in] aEventCallback
コールバック関数へのポインタ。

SetProtocolLayerCallback

void SetProtocolLayerCallback(
  EventCallback callback,
  void *state
)

アプリケーションの代わりに Binding を使用して、プロトコル レイヤ コードのイベント コールバック関数を設定します。

この関数は、Binding の API イベントが発生すると、アプリが定義したコールバック関数に加えて呼び出されます。

詳細
パラメータ
[in] callback
コールバック関数へのポインタ。
[in] state
プロトコル レイヤのコールバックが発生したときにプロトコル レイヤのコードに渡される状態オブジェクトへのポインタ。

静的パブリック関数

DefaultEventHandler

void DefaultEventHandler(
  void *apAppState,
  EventType aEvent,
  const InEventParam & aInParam,
  OutEventParam & aOutParam
)

API イベントをバインドするためのデフォルト ハンドラ。

アプリケーションで認識または処理できない API イベントに対しては、このメソッドを呼び出す必要があります。指定するパラメータは、バインディングによってアプリケーションのイベント ハンドラ関数に渡されるパラメータと同じである必要があります。

詳細
パラメータ
[in] apAppState
バインディングに関連付けられたアプリケーション定義の状態情報へのポインタ。
[in] aEvent
イベントのコールバックによって渡されたイベント ID
[in] aInParam
イベント コールバックによって渡される入力イベント パラメータの参照
[in] aOutParam
イベント コールバックによって渡される出力イベント パラメータの参照