nl:: Weave:: Binding
#include <src/lib/core/WeaveBinding.h>
Erfasst das beabsichtigte Ziel einer Weave-Kommunikation und zugehörige Konfigurationsinformationen.
Zusammenfassung
Ein Binding-Objekt identifiziert das beabsichtigte Ziel einer Weave-Kommunikation (auch als "Peer" bezeichnet), zusammen mit einer Reihe von Konfigurationsparametern, die beschreiben, wie die Kommunikation mit dem Peer erfolgen soll. Bindungen sind unabhängig vom Anwendungsprotokoll, das zwischen den beiden Parteien gesprochen wird. So erfassen sie das „Wer“, und das „Wie“ Kommunikation, aber nicht das „Was“.
Anwendungen müssen eine Binding mit Parametern konfigurieren, die für den gewünschten Kommunikationskanal spezifisch sind. Bindungen unterstützen eine Reihe von Netzwerktransporten, einschließlich TCP, UDP, UDP mit Weave Reliable Messaging und Weave over BLE (WoBLE). Anwendungen können auch den Einsatz bestimmter Sicherheitsmechanismen anfordern, um Nachrichten zu schützen, die zwischen den Parteien gesendet werden. Dazu gehören CASE- und PASE-Sitzungen sowie Anwendungsgruppenschlüssel. Die Schnittstelle zum Konfigurieren einer Binding verwendet einen deklarativen API-Stil, über den Anwendungen ihre Anforderungen an die Kommunikation einfach formulieren können.
Weitere Informationen finden Sie in der Dokumentation zu Binding::Configuration.
Vorbereitung
Bevor eine Kommunikation stattfindet, muss eine Bindung vorbereitet werden. Bei der Vorbereitung einer Bindung wird der erforderliche Status für die Kommunikation geschaffen. Dazu gehören beispielsweise das Auflösen der Netzwerkadresse des Peers, das Herstellen einer Netzwerkverbindung und das Aushandeln von Sicherheitsschlüsseln. Nach der Konfiguration durch die Anwendung übernimmt die Binding alle Schritte, die zur Vorbereitung der Kommunikation erforderlich sind. Nach Abschluss des Vorgangs wird die Anwendung aufgerufen. Auf diese Weise verbergen Bindungen die Kommunikationsmechanismen, sodass sich Anwendungen auf die übergeordneten Interaktionen konzentrieren können.
Kommunikation
Sobald eine Binding vorbereitet wurde, ist sie einsatzbereit. In diesem Zustand fordern Anwendungen (oder häufiger Protokollschichtcode, der für eine Anwendung arbeitet) das Binding an, um einen Weave-Austauschkontext zuzuweisen. Der resultierende Austauschkontext ist für die Kommunikation vorkonfiguriert, sodass die Anwendung sofort einen Weave-Austausch mit dem Peer initiieren kann. Die Anwendung kann weiterhin Austauschkontexte aus der Bindung anfordern, bis die Bindung geschlossen wird oder ein Ereignis (z.B. ein Netzwerkfehler) den zugrunde liegenden Kommunikationskanal beendet.
Statusänderungen der Bindung
Im Laufe der Verwendung stellt ein Binding API-Ereignisse an die Anwendung bereit, um sie über Änderungen am Status der Bindung zu informieren. Wenn die Vorbereitung erfolgreich ist, erhält die Anwendung beispielsweise ein Ereignis, das sie darüber informiert, dass das Binding einsatzbereit ist. Wenn der zugrunde liegende Kommunikationskanal fehlschlägt, wird ein Ereignis an die Anwendung gesendet, um sie darüber zu informieren, dass die Binding nicht mehr im Status „Ready“ (Bereit) ist.
API-Ereignisse werden der Anwendung über eine Ereignis-Callback-Funktion gesendet, die beim Zuweisen der Binding bereitgestellt wird.
Bindunglebensdauer
Bindungen werden als Referenz gezählt, um die gemeinsame Nutzung über mehrere Softwarekomponenten hinweg zu ermöglichen. Wenn eine Binding zugewiesen wird, wird ein einzelner Verweis auf die Bindung erstellt. Die Anwendung ist dafür verantwortlich, diese Referenz an einem bestimmten Punkt in der Zukunft freizugeben, sodass die Bindung später kostenlos wiederverwendet werden kann.
Wenn eine Anwendung mit einem Binding abgeschlossen ist, kann sie Close() für die Bindung aufrufen. Dadurch wird der Verweis der Anwendung auf das Binding freigegeben und die weitere Übermittlung von API-Ereignissen blockiert. Wenn der letzte Verweis auf eine Binding freigegeben wird, wird er automatisch geschlossen.
Öffentliche Typen |
|
---|---|
@23{
|
enum |
EventCallback)(void *apAppState, EventType aEvent, const InEventParam &aInParam, OutEventParam &aOutParam)
|
typedef.void(*
|
EventType{
|
enum |
State
|
enum |
Öffentliche Attribute |
|
---|---|
AppState
|
void *
|
Öffentliche Funktionen |
|
---|---|
AddRef(void)
|
void
Reservieren Sie einen Verweis auf das Bindungsobjekt.
|
AdjustResponseTimeout(ExchangeContext *apExchangeContext) const
|
Konfigurieren Sie einen vorhandenen Exchange-Kontext neu, um das Antwortzeitlimit anzupassen.
|
AllocateRightSizedBuffer(PacketBuffer *& buf, const uint32_t desiredSize, const uint32_t minSize, uint32_t & outMaxPayloadSize)
|
|
BeginConfiguration()
|
Konfiguration der Binding.
|
CanBePrepared(void) const
|
bool
|
Close(void)
|
void
Schließen Sie das Binding-Objekt und geben Sie einen Verweis frei.
|
GetConnection() const
|
Ruft das mit der Bindung verknüpfte Weave-Verbindungsobjekt ab.
|
GetDefaultResponseTimeout() const
|
uint32_t
Rufen Sie das Standardzeitlimit für Austauschantworten ab, das bei der Kommunikation mit dem Peer verwendet werden soll.
|
GetDefaultWRMPConfig(void) const
|
const WRMPConfig &
Rufen Sie die WRMP-Standardkonfiguration ab, die bei der Kommunikation mit dem Peer verwendet werden soll.
|
GetEncryptionType(void) const
|
uint8_t
Rufen Sie den Nachrichtenverschlüsselungstyp ab, der beim Verschlüsseln von Nachrichten zum/vom Peer verwendet werden soll.
|
GetEventCallback() const
|
EventCallback
Ruft die Funktion ab, die aufgerufen wird, wenn ein API-Ereignis für die Binding eintritt.
|
GetExchangeManager() const
|
|
GetKeyId(void) const
|
uint32_t
Rufen Sie die ID des Nachrichtenverschlüsselungsschlüssels ab, der beim Verschlüsseln von Nachrichten zum/vom Peer verwendet werden soll.
|
GetLogId(void) const
|
uint16_t
Rufen Sie eine eindeutige ID für die Bindung ab.
|
GetMaxWeavePayloadSize(const System::PacketBuffer *msgBuf)
|
uint32_t
Rufen Sie die maximale Weave-Nutzlastgröße ab, die in den mitgelieferten PacketBuffer passt.
|
GetPeerDescription(char *buf, uint32_t bufSize) const
|
void
Erstellt einen String, der den Peer-Knoten und die zugehörigen Adress-/Verbindungsinformationen beschreibt.
|
GetPeerIPAddress(nl::Inet::IPAddress & address, uint16_t & port, InterfaceId & interfaceId) const
|
void
Rufen Sie die IP-Adressinformationen für den Peer ab, falls verfügbar.
|
GetPeerNodeId(void) const
|
uint64_t
Rufen Sie die Knoten-ID des Bindungs-Peers ab.
|
GetProtocolLayerCallback(EventCallback & callback, void *& state) const
|
void
|
GetState(void) const
|
State
Rufen Sie den aktuellen Status der Bindung ab.
|
IsAuthenticMessageFromPeer(const WeaveMessageInfo *msgInfo)
|
bool
Ermitteln, ob eine bestimmte eingehende Nachricht von dem konfigurierten Peer stammt und angemessen authentifiziert wurde.
|
IsConnectionTransport() const
|
bool
|
IsPreparing(void) const
|
bool
|
IsReady(void) const
|
bool
|
IsUDPTransport() const
|
bool
|
IsUnreliableUDPTransport() const
|
bool
|
IsWRMTransport() const
|
bool
|
NewExchangeContext(ExchangeContext *& appExchangeContext)
|
Weisen Sie einen neuen Exchange-Kontext für die Kommunikation mit dem Peer zu, der das Ziel der Bindung ist.
|
Release(void)
|
void
Geben Sie einen Verweis auf das Binding-Objekt frei.
|
RequestPrepare()
|
Fordern Sie die Anwendung zum Konfigurieren und Vorbereiten der Binding an.
|
Reset(void)
|
void
Setzen Sie die Bindung auf einen nicht konfigurierten Status zurück.
|
SetDefaultResponseTimeout(uint32_t msec)
|
void
Legen Sie das Standardzeitlimit für die Austauschantwort fest, das bei der Kommunikation mit dem Peer verwendet werden soll.
|
SetDefaultWRMPConfig(const WRMPConfig & wrmpConfig)
|
void
Legen Sie die WRMP-Standardkonfiguration fest, die bei der Kommunikation mit dem Peer verwendet werden soll.
|
SetEventCallback(EventCallback aEventCallback)
|
void
Legen Sie fest, welche anwendungsdefinierte Funktion aufgerufen werden soll, wenn ein API-Ereignis für die Binding eintritt.
|
SetProtocolLayerCallback(EventCallback callback, void *state)
|
void
Legen Sie mithilfe von Binding im Namen einer Anwendung eine Ereignis-Callback-Funktion für Protokollschichtcode fest.
|
Öffentliche statische Funktionen |
|
---|---|
DefaultEventHandler(void *apAppState, EventType aEvent, const InEventParam & aInParam, OutEventParam & aOutParam)
|
void
Standard-Handler für Bindungen von API-Ereignissen.
|
Klassen |
|
---|---|
nl:: |
Stellt eine Schnittstelle zum deklarativen Stil zum Konfigurieren und Vorbereiten eines Binding-Objekts bereit. |
Strukturen |
|
---|---|
nl:: |
Eingabeparameter für ein Binding-API-Ereignis. |
nl:: |
Ausgabeparameter für ein Binding-API-Ereignis |
Öffentliche Typen
23
@23
Attribute | |
---|---|
kGetPeerDescription_MaxLength
|
Maximale Länge des Strings (einschließlich NUL-Zeichen), die von GetPeerDescription() zurückgegeben wird. |
EventCallback
void(* EventCallback)(void *apAppState, EventType aEvent, const InEventParam &aInParam, OutEventParam &aOutParam)
EventType
EventType
Attribute | |
---|---|
kEvent_BindingFailed
|
Die Bindung ist fehlgeschlagen und kann nicht mehr für die Kommunikation mit dem Peer verwendet werden. |
kEvent_BindingReady
|
Die Vorbereitungsaktion für die Bindung war erfolgreich und die Bindung kann jetzt für die Kommunikation mit dem Peer verwendet werden. |
kEvent_ConnectionEstablished
|
Die angeforderte Weave-Verbindung wurde hergestellt. |
kEvent_DefaultCheck
|
Wird verwendet, um die korrekte Verarbeitung von Standardereignissen in der Anwendung zu prüfen. |
kEvent_PASEParametersRequested
|
Von der Anwendung werden Parameter angefordert, die während der Einrichtung einer PASE-Sitzung verwendet werden sollen. |
kEvent_PrepareFailed
|
Die Vorbereitungsaktion für die Bindung ist fehlgeschlagen. |
kEvent_PrepareRequested
|
Die Anwendung wird aufgefordert, die Bindung zu konfigurieren und für die Verwendung durch den Netzwerkstack vorzubereiten. |
kEvent_TAKEParametersRequested
|
Von der Anwendung werden Parameter angefordert, die beim Einrichten einer TAKE-Sitzung verwendet werden sollen. |
Status
State
Öffentliche Attribute
AppState
void * AppState
Öffentliche Funktionen
AddRef
void AddRef( void )
Reservieren Sie einen Verweis auf das Bindungsobjekt.
AdjustResponseTimeout
WEAVE_ERROR AdjustResponseTimeout( ExchangeContext *apExchangeContext ) const
Konfigurieren Sie einen vorhandenen Exchange-Kontext neu, um das Antwortzeitlimit anzupassen.
Details | |||
---|---|---|---|
Parameter |
|
AllocateRightSizedBuffer
WEAVE_ERROR AllocateRightSizedBuffer( PacketBuffer *& buf, const uint32_t desiredSize, const uint32_t minSize, uint32_t & outMaxPayloadSize )
BeginConfiguration
Configuration BeginConfiguration()
Konfiguration der Binding.
Anwendungen müssen BeginConfiguration() aufrufen, um die Binding zu konfigurieren, bevor sie für die Kommunikation mit dem Peer vorbereitet werden kann.
Details | |
---|---|
Rückgabe |
Ein Binding::Configuration-Objekt, mit dem die Bindung konfiguriert werden kann.
|
CanBePrepared
bool CanBePrepared( void ) const
Schließen
void Close( void )
Schließen Sie das Binding-Objekt und geben Sie einen Verweis frei.
Wenn diese Methode aufgerufen wird, wechselt die Bindung in den Status „Geschlossen“. Alle laufenden Vorbereitungsaktionen für die Bindung werden abgebrochen und alle externen Kommunikationsressourcen der Bindung freigegeben.
Durch den Aufruf von Close() wird die mit der Bindung verknüpfte Referenzanzahl verringert. Das Objekt wird freigegeben, wenn die Referenzanzahl null wird.
GetConnection
WeaveConnection * GetConnection() const
Ruft das mit der Bindung verknüpfte Weave-Verbindungsobjekt ab.
Details | |
---|---|
Rückgabe |
Ein Zeiger auf ein WeaveConnection-Objekt oder auf NULL, wenn der Bindung keine Verbindung zugeordnet ist.
|
GetDefaultResponseTimeout
uint32_t GetDefaultResponseTimeout() const
Rufen Sie das Standardzeitlimit für Austauschantworten ab, das bei der Kommunikation mit dem Peer verwendet werden soll.
Details | |
---|---|
Rückgabe |
Antwortzeitlimit in ms.
|
GetDefaultWRMPConfig
const WRMPConfig & GetDefaultWRMPConfig( void ) const
Rufen Sie die WRMP-Standardkonfiguration ab, die bei der Kommunikation mit dem Peer verwendet werden soll.
Details | |
---|---|
Rückgabe |
Ein Verweis auf eine WRMPConfig-Struktur, die die Standardkonfigurationswerte enthält.
|
GetEncryptionType
uint8_t GetEncryptionType( void ) const
Rufen Sie den Nachrichtenverschlüsselungstyp ab, der beim Verschlüsseln von Nachrichten zum/vom Peer verwendet werden soll.
GetEventCallback
EventCallback GetEventCallback() const
Ruft die Funktion ab, die aufgerufen wird, wenn ein API-Ereignis für die Binding eintritt.
Details | |
---|---|
Rückgabe |
Ein Zeiger auf die Callback-Funktion.
|
GetExchangeManager
WeaveExchangeManager * GetExchangeManager() const
GetKeyId
uint32_t GetKeyId( void ) const
Rufen Sie die ID des Nachrichtenverschlüsselungsschlüssels ab, der beim Verschlüsseln von Nachrichten zum/vom Peer verwendet werden soll.
GetLogId
uint16_t GetLogId( void ) const
Rufen Sie eine eindeutige ID für die Bindung ab.
GetMaxWeavePayloadSize
uint32_t GetMaxWeavePayloadSize( const System::PacketBuffer *msgBuf )
Rufen Sie die maximale Weave-Nutzlastgröße ab, die in den mitgelieferten PacketBuffer passt.
Bei UDP, einschließlich UDP mit WRM, sorgt die zurückgegebene maximale Nutzlastgröße dafür, dass die resultierende Weave-Nachricht die konfigurierte UDP-MTU nicht überläuft.
Außerdem sorgt diese Methode dafür, dass die Weave-Nutzlast den bereitgestellten PacketBuffer nicht überläuft.
Details | |||
---|---|---|---|
Parameter |
|
||
Rückgabe |
Die maximale Weave-Nutzlastgröße.
|
GetPeerDescription
void GetPeerDescription( char *buf, uint32_t bufSize ) const
Erstellt einen String, der den Peer-Knoten und die zugehörigen Adress-/Verbindungsinformationen beschreibt.
Details | |||||
---|---|---|---|---|---|
Parameter |
|
GetPeerIPAddress
void GetPeerIPAddress( nl::Inet::IPAddress & address, uint16_t & port, InterfaceId & interfaceId ) const
Rufen Sie die IP-Adressinformationen für den Peer ab, falls verfügbar.
Die Verfügbarkeit der IP-Adressinformationen des Peers hängt vom Status und der Konfiguration der Bindung ab. Informationen zu IP-Adressen sind nur bei Verwendung eines IP-basierten Transports (TCP, UDP oder UDP mit WRMP) verfügbar. Vor Beginn der Vorbereitung sind Adressinformationen nur verfügbar, wenn sie bei der Konfiguration ausdrücklich von der Anwendung festgelegt wurden. Während der Vorbereitungsphase sind Adressinformationen verfügbar, wenn die Adressvorbereitung abgeschlossen ist, z.B. nach Abschluss der DNS-Auflösung. Nachdem die Bindung bereit ist, bleiben die Adressinformationen verfügbar, bis die Bindung zurückgesetzt wird.
Details | |||||||
---|---|---|---|---|---|---|---|
Parameter |
|
GetPeerNodeId
uint64_t GetPeerNodeId( void ) const
Rufen Sie die Knoten-ID des Bindungs-Peers ab.
Erst gültig, wenn das Binding-Objekt vorbereitet wurde.
Details | |
---|---|
Rückgabe |
Weave-Knoten-ID des Peers
|
GetProtocolLayerCallback
void GetProtocolLayerCallback( EventCallback & callback, void *& state ) const
GetState
State GetState( void ) const
Rufen Sie den aktuellen Status der Bindung ab.
Details | |
---|---|
Rückgabe |
Der Bindungsstatus.
|
IsAuthenticMessageFromPeer
bool IsAuthenticMessageFromPeer( const WeaveMessageInfo *msgInfo )
Ermitteln, ob eine bestimmte eingehende Nachricht von dem konfigurierten Peer stammt und angemessen authentifiziert wurde.
Mit dieser Methode werden die folgenden Details zur angegebenen Nachricht bestätigt:
- Die Nachricht stammt vom Peer-Knoten der Bindung
- Die Nachricht wurde über denselben Transporttyp wie die Bindung empfangen. Wenn die Nachricht über eine Verbindung empfangen wurde, bestätigt die Methode auch, dass die Nachricht über genau die Verbindung empfangen wurde, die der Bindung zugeordnet ist.
- Der Verschlüsselungsschlüssel und der Verschlüsselungstyp, die zum Verschlüsseln der Nachricht verwendet werden, entsprechen den in der Bindung konfigurierten Daten. Bei Bindungen, die ohne Sicherheit konfiguriert wurden, bestätigt die Methode, dass die eingehende Nachricht NICHT verschlüsselt ist.
Diese Methode ist für die Verwendung in Protokollen wie WDM vorgesehen, bei denen Peers nach einem ersten Austausch vom Knoten zum Peer spontan den Austausch zurück zum lokalen Knoten initiieren können. In solchen Fällen ermöglicht die Methode dem lokalen Knoten zu bestätigen, dass die eingehende unerwünschte Nachricht vom zugehörigen Peer gesendet wurde. Für Bindungen, die ohne Nachrichtenverschlüsselung konfiguriert wurden, bietet diese Assertion aus Sicherheitsgründen keinen Mehrwert. Er bestätigt lediglich, dass die Senderknoten-ID und die Transporttypen übereinstimmen.)
Wenn sich die Bindung nicht im Status „Bereit“ befindet, gibt diese Methode immer „false“ zurück.
Details | |||
---|---|---|---|
Parameter |
|
||
Rückgabe |
"True", wenn die Nachricht authentisch vom Peer stammt.
|
IsConnectionTransport
bool IsConnectionTransport() const
IsPreparing
bool IsPreparing( void ) const
Details | |
---|---|
Rückgabe |
"True", wenn die Binding gerade vorbereitet wird.
|
IsReady
bool IsReady( void ) const
Details | |
---|---|
Rückgabe |
"True", wenn die Binding im Status „Bereit“ ist.
|
IsUDPTransport
bool IsUDPTransport() const
IsUnreliableUDPTransport
bool IsUnreliableUDPTransport() const
IsWRMTransport
bool IsWRMTransport() const
NewExchangeContext
WEAVE_ERROR NewExchangeContext( ExchangeContext *& appExchangeContext )
Weisen Sie einen neuen Exchange-Kontext für die Kommunikation mit dem Peer zu, der das Ziel der Bindung ist.
Details | |||||||||
---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||
Rückgabewerte |
|
Release
void Release( void )
Geben Sie einen Verweis auf das Binding-Objekt frei.
Wenn es keine weiteren Verweise auf das Bindungsobjekt gibt, wird die Bindung geschlossen und freigegeben.
RequestPrepare
WEAVE_ERROR RequestPrepare()
Fordern Sie die Anwendung zum Konfigurieren und Vorbereiten der Binding an.
Code der Protokollschicht kann diese Methode für eine Binding verwenden, die nicht konfiguriert wurde oder fehlgeschlagen ist, um ein Ereignis für die Anwendung (kEvent_PrepareRequested) auszulösen und die Bindung zu konfigurieren und für die Verwendung vorzubereiten.
Diese Methode kann nur für Bindungen mit dem Status „Nicht konfiguriert“ oder „Fehlgeschlagen“ aufgerufen werden.
Wenn die Anwendung die On-Demand-Konfiguration/Vorbereitung von Bindungen nicht unterstützt, schlägt die Methode mit dem Fehler WEAVE_ERROR_NOT_IMPLEMENTED fehl.
Zurücksetzen
void Reset( void )
Setzen Sie die Bindung auf einen nicht konfigurierten Status zurück.
Wenn Reset() aufgerufen wird, werden alle laufenden Vorbereitungsaktionen für die Bindung abgebrochen und alle externen Kommunikationsressourcen, die von der Bindung gehalten werden, freigegeben. Durch Reset() wird die Bindung in den Status „Nicht konfiguriert“ gesetzt. Danach kann sie wieder konfiguriert und vorbereitet werden.
Durch Reset() wird die Referenzanzahl der Bindung nicht geändert.
SetDefaultResponseTimeout
void SetDefaultResponseTimeout( uint32_t msec )
Legen Sie das Standardzeitlimit für die Austauschantwort fest, das bei der Kommunikation mit dem Peer verwendet werden soll.
Details | |||
---|---|---|---|
Parameter |
|
SetDefaultWRMPConfig
void SetDefaultWRMPConfig( const WRMPConfig & wrmpConfig )
Legen Sie die WRMP-Standardkonfiguration fest, die bei der Kommunikation mit dem Peer verwendet werden soll.
Details | |||
---|---|---|---|
Parameter |
|
SetEventCallback
void SetEventCallback( EventCallback aEventCallback )
Legen Sie fest, welche anwendungsdefinierte Funktion aufgerufen werden soll, wenn ein API-Ereignis für die Binding eintritt.
Details | |||
---|---|---|---|
Parameter |
|
SetProtocolLayerCallback
void SetProtocolLayerCallback( EventCallback callback, void *state )
Legen Sie mithilfe von Binding im Namen einer Anwendung eine Ereignis-Callback-Funktion für Protokollschichtcode fest.
Diese Funktion wird zusätzlich zur anwendungsdefinierten Callback-Funktion aufgerufen, wenn für das Binding API-Ereignisse auftreten.
Details | |||||
---|---|---|---|---|---|
Parameter |
|
Öffentliche statische Funktionen
DefaultEventHandler
void DefaultEventHandler( void *apAppState, EventType aEvent, const InEventParam & aInParam, OutEventParam & aOutParam )
Standard-Handler für Bindungen von API-Ereignissen.
Anwendungen müssen diese Methode für alle API-Ereignisse aufrufen, die sie nicht erkennen oder verarbeiten. Die angegebenen Parameter müssen denjenigen entsprechen, die von der Bindung an die Ereignis-Handler-Funktion der Anwendung übergeben werden.
Details | |||||||||
---|---|---|---|---|---|---|---|---|---|
Parameter |
|