nl::Weave::Binding

#include <src/lib/core/WeaveBinding.h>

Capture la cible prévue d'une communication Weave et les informations de configuration associées.

Résumé

Un objet Binding identifie la cible d'une communication Weave (également appelée "peer") ainsi qu'un ensemble de paramètres de configuration décrivant le mode de communication avec le pair. Les liaisons sont indépendantes du protocole d'application parlé entre les deux parties. Ainsi, ils capturent le « qui » et le « comment » d'une communication, mais pas le « quoi ».

Configuration

Les applications doivent configurer une liaison avec des paramètres spécifiques au type de canal de communication souhaité. Les liaisons prennent en charge toute une gamme de transports réseau, y compris TCP, UDP, UDP avec Weave Expect Messaging et Weave over BLE (WoBLE). Les applications peuvent également demander l'utilisation de mécanismes de sécurité spécifiques pour protéger les messages échangés entre les parties. Il s'agit des sessions CASE et PASE, ainsi que des clés de groupe d'applications. L'interface de configuration d'une liaison utilise un style d'API déclaratif qui permet aux applications d'indiquer leurs exigences de communication en termes simples.

Pour en savoir plus, consultez la documentation sur Binding::Configuration.

Préparation

Avant la communication, une liaison doit être "préparée". La préparation d'une liaison implique d'établir l'état nécessaire à la communication. Il peut s'agir de résoudre l'adresse réseau du pair, d'établir une connexion réseau et de négocier des clés de sécurité. Une fois configurée par l'application, la liaison effectue toutes les étapes nécessaires à la préparation de la communication, en rappelant l'application une fois le processus terminé. De cette manière, les liaisons masquent le mécanisme de communication, ce qui permet aux applications de se concentrer sur les interactions de haut niveau.

Communication

Une fois qu'une Binding a été préparée, elle peut être utilisée. Dans cet état, les applications (ou, plus généralement, le code de couche de protocole travaillant pour le compte d'une application) demandent la liaison pour allouer un contexte d'échange Weave. Le contexte d'échange qui en résulte est préconfiguré pour la communication, ce qui permet à l'application d'initier immédiatement un échange Weave avec le pair. L'application peut continuer à demander des contextes d'échange à partir de la liaison jusqu'à ce que la liaison soit fermée ou qu'un événement (par exemple, une défaillance du réseau) mette fin au canal de communication sous-jacent.

Changements d'état de Liaison

Au cours de son utilisation, une liaison fournira des événements d'API à l'application pour l'informer des modifications de l'état de la liaison. Par exemple, une fois la préparation terminée, l'application reçoit un événement l'informant que la liaison est prête à être utilisée. De même, si le canal de communication sous-jacent échoue, un événement est envoyé à l'application pour l'informer que la liaison n'est plus à l'état "prêt".

Les événements d'API sont transmis à l'application via une fonction de rappel d'événement fournie lorsque la Binding est allouée.

Durée de vie de Binding

Les liaisons sont comptabilisées comme des références pour permettre une utilisation partagée entre plusieurs composants logiciels. Lorsqu'une liaison est allouée, une référence unique à la liaison est créée. L'application est tenue de publier cette référence à l'avenir afin que la liaison soit libre pour une réutilisation ultérieure.

Lorsqu'une application a terminé avec une Binding, elle peut appeler Close() sur la liaison. La référence de l'application à la Liaison est alors libérée et toute diffusion ultérieure d'événements d'API est bloquée. Lorsque la dernière référence à une liaison est libérée, elle est automatiquement fermée.

Types publics

@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

Attributs publics

AppState
void *

Fonctions publiques

AddRef(void)
void
Réservez une référence à l'objet de liaison.
AdjustResponseTimeout(ExchangeContext *apExchangeContext) const
Reconfigurez un contexte Exchange existant pour ajuster le délai avant expiration de la réponse.
AllocateRightSizedBuffer(PacketBuffer *& buf, const uint32_t desiredSize, const uint32_t minSize, uint32_t & outMaxPayloadSize)
BeginConfiguration()
En cours de configuration de la liaison.
CanBePrepared(void) const
bool
Close(void)
void
Fermez l'objet de liaison et libérez une référence.
GetConnection() const
Obtenez l'objet de connexion Weave associé à la liaison.
GetDefaultResponseTimeout() const
uint32_t
Permet d'obtenir le délai avant expiration par défaut de la réponse de l'échange à utiliser lors de la communication avec le pair.
GetDefaultWRMPConfig(void) const
const WRMPConfig &
Obtenez la configuration WRMP par défaut à utiliser lors de la communication avec le pair.
GetEncryptionType(void) const
uint8_t
Récupérez le type de chiffrement des messages à utiliser pour chiffrer les messages à destination/en provenance du pair.
GetEventCallback() const
EventCallback
Obtenez la fonction qui sera appelée lorsqu'un événement d'API se produit pour la liaison.
GetExchangeManager() const
GetKeyId(void) const
uint32_t
Récupérez l'ID de la clé de chiffrement des messages à utiliser lors du chiffrement des messages vers/depuis le pair.
GetLogId(void) const
uint16_t
Obtenez un identifiant unique pour la liaison.
GetMaxWeavePayloadSize(const System::PacketBuffer *msgBuf)
uint32_t
Permet d'obtenir la taille maximale de la charge utile Weave pouvant tenir dans le PaquetBuffer fourni.
GetPeerDescription(char *buf, uint32_t bufSize) const
void
Construit une chaîne décrivant le nœud pair et les informations de connexion ou d'adresse qui lui sont associées.
GetPeerIPAddress(nl::Inet::IPAddress & address, uint16_t & port, InterfaceId & interfaceId) const
void
Récupérez les informations sur l'adresse IP du pair, le cas échéant.
GetPeerNodeId(void) const
uint64_t
Récupérez l'ID de nœud du pair de liaison.
GetProtocolLayerCallback(EventCallback & callback, void *& state) const
void
GetState(void) const
State
Récupérez l'état actuel de la liaison.
IsAuthenticMessageFromPeer(const WeaveMessageInfo *msgInfo)
bool
Déterminez si un message entrant particulier provient du pair configuré et s'il est correctement authentifié.
IsConnectionTransport() const
bool
IsPreparing(void) const
bool
IsReady(void) const
bool
IsUDPTransport() const
bool
IsUnreliableUDPTransport() const
bool
IsWRMTransport() const
bool
NewExchangeContext(ExchangeContext *& appExchangeContext)
Allouez un nouveau contexte Exchange pour communiquer avec le pair cible de la liaison.
Release(void)
void
Libérez une référence à l'objet de liaison.
RequestPrepare()
Demandez à l'application de configurer et de préparer la liaison.
Reset(void)
void
Rétablissez la liaison à un état non configuré.
SetDefaultResponseTimeout(uint32_t msec)
void
Définissez le délai avant expiration par défaut de la réponse de l'échange à utiliser lors de la communication avec le pair.
SetDefaultWRMPConfig(const WRMPConfig & wrmpConfig)
void
Définissez la configuration WRMP par défaut à utiliser lors de la communication avec le pair.
SetEventCallback(EventCallback aEventCallback)
void
Définissez la fonction définie par l'application à appeler lorsqu'un événement d'API se produit pour la liaison.
SetProtocolLayerCallback(EventCallback callback, void *state)
void
Définissez une fonction de rappel d'événement pour le code de la couche de protocole à l'aide de la liaison pour le compte d'une application.

Fonctions statiques publiques

DefaultEventHandler(void *apAppState, EventType aEvent, const InEventParam & aInParam, OutEventParam & aOutParam)
void
Gestionnaire par défaut pour les événements de liaison de l'API

Classes

nl::Weave::Binding::Configuration

Fournit une interface de style déclaratif permettant de configurer et de préparer un objet Binding.

Structs

nl::Weave::Binding::InEventParam

Paramètres d'entrée pour un événement d'API Binding.

nl::Weave::Binding::OutEventParam

Paramètres de sortie d'un événement d'API Binding.

Types publics

@23

 @23
Propriétés
kGetPeerDescription_MaxLength

Longueur maximale de la chaîne (caractère NUL compris) renvoyée par GetPeerDescription().

EventCallback

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

EventType

 EventType
Propriétés
kEvent_BindingFailed

La liaison a échoué et ne peut plus être utilisée pour communiquer avec le pair.

kEvent_BindingReady

L'action de préparation sur la liaison a réussi, et la liaison peut maintenant être utilisée pour communiquer avec le pair.

kEvent_ConnectionEstablished

La connexion Weave demandée a été établie.

kEvent_DefaultCheck

Permet de vérifier que les événements par défaut sont correctement gérés dans l'application.

kEvent_PASEParametersRequested

L'application est invitée à fournir les paramètres à utiliser lors de l'établissement d'une session PASE.

kEvent_PrepareFailed

Échec de l'action de préparation sur la liaison.

kEvent_PrepareRequested

L'application est invitée à configurer et à préparer la liaison en vue de son utilisation par la pile réseau.

kEvent_TAKEParametersRequested

L'application est invitée à fournir les paramètres à utiliser lors de l'établissement de la session TAKE.

État

 State

Attributs publics

AppState

void * AppState

Fonctions publiques

AddRef

void AddRef(
  void
)

Réservez une référence à l'objet de liaison.

AdjustResponseTimeout

WEAVE_ERROR AdjustResponseTimeout(
  ExchangeContext *apExchangeContext
) const 

Reconfigurez un contexte Exchange existant pour ajuster le délai avant expiration de la réponse.

Détails
Paramètres
[in] apExchangeContext
Un pointeur vers un objet de contexte Exchange à reconfigurer

AllocateRightSizedBuffer

WEAVE_ERROR AllocateRightSizedBuffer(
  PacketBuffer *& buf,
  const uint32_t desiredSize,
  const uint32_t minSize,
  uint32_t & outMaxPayloadSize
)

BeginConfiguration

Configuration BeginConfiguration()

En cours de configuration de la liaison.

Les applications doivent appeler BeginConfiguration() pour configurer la liaison avant de la préparer à communiquer avec le pair.

Détails
Renvoie
Un objet Binding::Configuration qui peut être utilisé pour configurer la liaison.

CanBePrepared

bool CanBePrepared(
  void
) const 

Fermer

void Close(
  void
)

Fermez l'objet de liaison et libérez une référence.

Lorsqu'elle est appelée, cette méthode fait passer la liaison à l'état Fermée. Toute action de préparation en cours pour la liaison est annulée et toutes les ressources de communication externe détenues par la liaison sont libérées.

Appeler Close() décrémente le nombre de références associé à la liaison, libérant l'objet si le nombre de références passe à zéro.

GetConnection

WeaveConnection * GetConnection() const 

Obtenez l'objet de connexion Weave associé à la liaison.

Détails
Renvoie
Pointeur vers un objet WeaveConnection ou valeur NULL si aucune connexion n'est associée à la liaison.

GetDefaultResponseTimeout

uint32_t GetDefaultResponseTimeout() const 

Permet d'obtenir le délai avant expiration par défaut de la réponse de l'échange à utiliser lors de la communication avec le pair.

Détails
Renvoie
Délai avant expiration de la réponse en millisecondes.

GetDefaultWRMPConfig

const WRMPConfig & GetDefaultWRMPConfig(
  void
) const 

Obtenez la configuration WRMP par défaut à utiliser lors de la communication avec le pair.

Détails
Renvoie
Référence à une structure WRMPConfig contenant les valeurs de configuration par défaut.

GetEncryptionType

uint8_t GetEncryptionType(
  void
) const 

Récupérez le type de chiffrement des messages à utiliser pour chiffrer les messages à destination/en provenance du pair.

GetEventCallback

EventCallback GetEventCallback() const 

Obtenez la fonction qui sera appelée lorsqu'un événement d'API se produit pour la liaison.

Détails
Renvoie
Un pointeur vers la fonction de rappel.

GetExchangeManager

WeaveExchangeManager * GetExchangeManager() const 

GetKeyId

uint32_t GetKeyId(
  void
) const 

Récupérez l'ID de la clé de chiffrement des messages à utiliser lors du chiffrement des messages vers/depuis le pair.

GetLogId

uint16_t GetLogId(
  void
) const 

Obtenez un identifiant unique pour la liaison.

GetMaxWeavePayloadSize

uint32_t GetMaxWeavePayloadSize(
  const System::PacketBuffer *msgBuf
)

Permet d'obtenir la taille maximale de la charge utile Weave pouvant tenir dans le PaquetBuffer fourni.

Pour UDP, y compris UDP avec WRM, la taille de charge utile maximale renvoyée garantit que le message Weave généré ne dépassera pas le MTU UDP configuré.

De plus, cette méthode garantit que la charge utile Weave ne dépasse pas le PaquetBuffer fourni.

Détails
Paramètres
[in] msgBuf
Pointeur vers le TametBuffer dans lequel la charge utile du message sera écrite.
Renvoie
Taille maximale de la charge utile Weave.

GetPeerDescription

void GetPeerDescription(
  char *buf,
  uint32_t bufSize
) const 

Construit une chaîne décrivant le nœud pair et les informations de connexion ou d'adresse qui lui sont associées.

Détails
Paramètres
[in] buf
Pointeur vers un tampon dans lequel la chaîne doit être écrite. La taille du tampon fourni doit être au moins égale à celle de kGetPeerDescription_MaxLength. Si vous fournissez un tampon plus petit, la chaîne sera tronquée. Le résultat inclut un caractère de fin NUL dans tous les cas.
[in] bufSize
Taille du tampon indiqué par buf.

GetPeerIPAddress

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

Récupérez les informations sur l'adresse IP du pair, le cas échéant.

La disponibilité des informations sur l'adresse IP du pair dépend de l'état et de la configuration de la liaison. Les informations d'adresse IP ne sont disponibles que lors de l'utilisation d'un transport basé sur l'adresse IP (TCP, UDP ou UDP avec WRMP). Avant le début de la préparation, les informations d'adresse ne sont disponibles que si elles ont été expressément définies par l'application lors de la configuration. Au cours de la phase de préparation, des informations d'adresse sont disponibles une fois la préparation de l'adresse terminée (par exemple, une fois la résolution DNS terminée). Une fois que la Liaison est prête, les informations d'adresse restent disponibles jusqu'à ce que la Liaison soit réinitialisée.

Détails
Paramètres
[out] address
Référence à un objet IPAddress qui recevra l'adresse IP du pair. Si les informations sur l'adresse IP du pair ne sont pas disponibles, la valeur sera définie sur IPAddress::Any.
[out] port
Référence à un entier qui recevra le numéro de port du pair. Si les informations sur l'adresse IP du pair ne sont pas disponibles, cette valeur n'est pas définie.
[out] interfaceId
Référence à un entier qui recevra l'identifiant de l'interface réseau via laquelle le pair peut être atteint. Si les informations sur l'adresse IP du pair ne sont pas disponibles, cette valeur n'est pas définie.

GetPeerNodeId

uint64_t GetPeerNodeId(
  void
) const 

Récupérez l'ID de nœud du pair de liaison.

Valide uniquement une fois que l'objet de liaison a été préparé.

Détails
Renvoie
ID du nœud Weave du pair

GetProtocolLayerCallback

void GetProtocolLayerCallback(
  EventCallback & callback,
  void *& state
) const 

GetState

State GetState(
  void
) const 

Récupérez l'état actuel de la liaison.

Détails
Renvoie
État de liaison.

IsAuthenticMessageFromPeer

bool IsAuthenticMessageFromPeer(
  const WeaveMessageInfo *msgInfo
)

Déterminez si un message entrant particulier provient du pair configuré et s'il est correctement authentifié.

Cette méthode permet de vérifier les informations suivantes concernant le message donné:

  • Le message provient du nœud pair de la liaison
  • Le message a été reçu via le même type de transport que la liaison. Si le message a été reçu via une connexion, la méthode confirme également que le message a été reçu via la connexion exacte associée à la liaison.
  • La clé de chiffrement et le type utilisés pour chiffrer le message correspondent à ceux configurés dans la liaison. Pour les liaisons configurées sans utiliser la sécurité, la méthode confirme que le message entrant n'est PAS chiffré.

Cette méthode est destinée aux protocoles tels que WDM, où les pairs peuvent initier spontanément des échanges vers le nœud local après un échange initial entre le nœud et le pair. Dans ce cas, la méthode permet au nœud local de confirmer que le message entrant non sollicité a bien été envoyé par le pair associé. Bien entendu, pour les liaisons configurées sans chiffrement des messages, cette assertion ne fournit aucune valeur du point de vue de la sécurité. Elle confirme simplement que l'ID du nœud émetteur et les types de transport correspondent.)

Notez que si la liaison n'est pas à l'état prêt, cette méthode renvoie toujours la valeur "false".

Détails
Paramètres
[in] msgInfo
Informations sur le message Weave pour le message entrant.
Renvoie
"True" si le message provient de manière authentique du pair.

IsConnectionTransport

bool IsConnectionTransport() const 

IsPreparing

bool IsPreparing(
  void
) const 

Détails
Renvoie
Vrai si la liaison est en cours de préparation.

IsReady

bool IsReady(
  void
) const 

Détails
Renvoie
Vrai si la liaison est à l'état Prêt.

IsUDPTransport

bool IsUDPTransport() const 

IsUnreliableUDPTransport

bool IsUnreliableUDPTransport() const 

IsWRMTransport

bool IsWRMTransport() const 

NewExchangeContext

WEAVE_ERROR NewExchangeContext(
  ExchangeContext *& appExchangeContext
)

Allouez un nouveau contexte Exchange pour communiquer avec le pair cible de la liaison.

Détails
Paramètres
[out] appExchangeContext
Référence à un pointeur qui recevra l'objet de contexte Exchange nouvellement alloué. Le pointeur est défini sur NULL en cas d'échec de la méthode.
Valeurs de retour
WEAVE_NO_ERROR
Si le contexte de la place de marché a bien été alloué.
WEAVE_ERROR_NO_MEMORY
Si aucune mémoire n'était disponible pour allouer le contexte de l'échange.
WEAVE_ERROR_INCORRECT_STATE
Si la liaison n'est pas à l'état "Prêt".
other
Autres erreurs liées à la configuration du contexte de l'échange en fonction de la configuration de la liaison.

Version

void Release(
  void
)

Libérez une référence à l'objet de liaison.

S'il n'y a plus de références à l'objet de liaison, la liaison est fermée et libérée.

RequestPrepare

WEAVE_ERROR RequestPrepare()

Demandez à l'application de configurer et de préparer la liaison.

Le code de la couche de protocole peut utiliser cette méthode sur une liaison qui n'a pas été configurée ou qui a échoué, afin de déclencher un événement vers l'application (kEvent_PrepareRequested) pour qu'elle configure et prépare la liaison en vue de son utilisation.

Cette méthode ne peut être appelée que sur des liaisons dont l'état est NotConfigured ou Failed.

Si l'application ne prend pas en charge la configuration/préparation à la demande des liaisons, la méthode échouera avec WEAVE_ERROR_NOT_IMPLEMENTED.

Réinitialiser

void Reset(
  void
)

Rétablissez la liaison à un état non configuré.

Lorsque la méthode Reset() est appelée, toutes les actions de préparation en cours pour la liaison sont annulées et toutes les ressources de communication externe détenues par la liaison sont libérées. Reset() place la liaison à l'état "Non configuré", après quoi elle peut être configurée et préparée à nouveau.

Reset() ne modifie pas le nombre de références de la liaison.

SetDefaultResponseTimeout

void SetDefaultResponseTimeout(
  uint32_t msec
)

Définissez le délai avant expiration par défaut de la réponse de l'échange à utiliser lors de la communication avec le pair.

Détails
Paramètres
[in] timeout
Nouveau délai avant expiration de la réponse en millisecondes.

SetDefaultWRMPConfig

void SetDefaultWRMPConfig(
  const WRMPConfig & wrmpConfig
)

Définissez la configuration WRMP par défaut à utiliser lors de la communication avec le pair.

Détails
Paramètres
[in] aWRMPConfig
Référence à une structure WRMPConfig contenant la nouvelle configuration par défaut.

SetEventCallback

void SetEventCallback(
  EventCallback aEventCallback
)

Définissez la fonction définie par l'application à appeler lorsqu'un événement d'API se produit pour la liaison.

Détails
Paramètres
[in] aEventCallback
Un pointeur vers la fonction de rappel.

SetProtocolLayerCallback

void SetProtocolLayerCallback(
  EventCallback callback,
  void *state
)

Définissez une fonction de rappel d'événement pour le code de la couche de protocole à l'aide de la liaison pour le compte d'une application.

Cette fonction sera appelée en plus de la fonction de rappel définie par l'application lorsque des événements d'API se produisent pour la liaison.

Détails
Paramètres
[in] callback
Un pointeur vers la fonction de rappel.
[in] state
Pointeur vers un objet d'état qui sera fourni au code de la couche de protocole lors d'un rappel de la couche de protocole.

Fonctions statiques publiques

DefaultEventHandler

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

Gestionnaire par défaut pour les événements de liaison de l'API

Les applications doivent appeler cette méthode pour tous les événements d'API qu'elles ne reconnaissent ou ne gèrent pas. Les paramètres fournis doivent être identiques à ceux transmis par la liaison à la fonction de gestionnaire d'événements de l'application.

Détails
Paramètres
[in] apAppState
Pointeur vers les informations d'état définies par l'application associées à la liaison.
[in] aEvent
ID d'événement transmis par le rappel d'événement
[in] aInParam
Référence des paramètres d'événement d'entrée transmis par le rappel d'événement
[in] aOutParam
Référence des paramètres d'événement de sortie transmis par le rappel d'événement