nl::Weave::Binding

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

Captura el objetivo previsto de una comunicación de Weave y la información de configuración asociada.

Resumen

Un objeto Binding identifica el destino previsto de una comunicación de Weave (también conocida como "intercambio de tráfico") junto con un conjunto de parámetros de configuración que describen cómo debe ocurrir la comunicación con el par. Las vinculaciones son independientes del protocolo de la aplicación que se pronuncia entre las dos partes. Como tales, capturan el "quién" y el "cómo" de una comunicación, pero no el "qué".

Configuración

Las aplicaciones deben configurar una vinculación con parámetros específicos para el tipo de canal de comunicación deseado. Las vinculaciones proporcionan compatibilidad con varios transportes de red, incluidos TCP, UDP, UDP con Weave Reliable Messaging y Weave sobre BLE (WoBLE). Las aplicaciones también pueden solicitar el uso de mecanismos de seguridad específicos para proteger los mensajes enviados entre las partes. Estas incluyen sesiones CASE y PASE, y claves de grupos de aplicaciones. La interfaz para configurar una vinculación usa un estilo de API declarativa que permite a las aplicaciones indicar sus requisitos para la comunicación en términos simples.

Consulta la documentación de Binding::Configuration para obtener más detalles.

Preparación

Antes de que se produzca la comunicación, una Vinculación debe estar "preparada". El acto de preparar una vinculación implica establecer el estado necesario para que se produzca la comunicación. Esto puede incluir acciones como resolver la dirección de red del intercambio de tráfico, establecer una conexión de red y negociar llaves de seguridad. Una vez que la aplicación configura la vinculación, la Vinculación se encarga de todos los pasos necesarios para prepararse para la comunicación y vuelve a llamar a la aplicación cuando se completa el proceso. De esta manera, las vinculaciones ocultan la mecánica de la comunicación, lo que permite que las aplicaciones se concentren en las interacciones de alto nivel.

Comunicación

Una vez que se prepara una vinculación, está lista para usarse. En este estado, las aplicaciones (o, más comúnmente, el código de capa de protocolo que funciona en nombre de una aplicación) solicitan la Vinculación para asignar un contexto de intercambio de Weave. El contexto de intercambio resultante viene preconfigurado para la comunicación, lo que permite que la aplicación inicie inmediatamente un intercambio de Weave con el par. La aplicación puede continuar solicitando contextos de intercambio desde la Vinculación hasta que se cierre la Vinculación o hasta que algún evento (p.ej., una falla de la red) finalice el canal de comunicación subyacente.

Cambios de estado de vinculación

Durante su uso, una Vinculación enviará eventos de API a la aplicación para informarle sobre los cambios en el estado de la Vinculación. Por ejemplo, cuando la preparación se realiza con éxito, la aplicación recibirá un evento que le informará que la Binding está lista para usarse. De manera similar, si el canal de comunicación subyacente falla, se entrega un evento a la aplicación que le informa que la vinculación ya no está en el estado listo.

Los eventos de API se entregan a la aplicación a través de una función de devolución de llamada de eventos proporcionada cuando se asigna la Vinculación.

Vida útil de la vinculación

Las vinculaciones se cuentan como referencia para permitir el uso compartido entre varios componentes de software. Cuando se asigna una Vinculación, se crea una sola referencia a la vinculación. La aplicación es responsable de lanzar esta referencia en algún momento en el futuro de modo que la Vinculación sea libre para su reutilización.

Cuando una aplicación finaliza con una Binding, puede llamar a Close() en la vinculación. De esta manera, se libera la referencia de la aplicación a la Vinculación y se bloquea todas las entregas posteriores de eventos de la API. Cuando se libera la última referencia a una Vinculación, esta se cierra automáticamente.

Tipos públicos

@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

Atributos públicos

AppState
void *

Funciones públicas

AddRef(void)
void
Reserva una referencia al objeto de vinculación.
AdjustResponseTimeout(ExchangeContext *apExchangeContext) const
Volver a configurar un contexto de Exchange existente para ajustar el tiempo de espera de respuesta
AllocateRightSizedBuffer(PacketBuffer *& buf, const uint32_t desiredSize, const uint32_t minSize, uint32_t & outMaxPayloadSize)
BeginConfiguration()
Ser el proceso de configuración de la vinculación.
CanBePrepared(void) const
bool
Close(void)
void
Cierra el objeto de vinculación y libera una referencia.
GetConnection() const
Obtén el objeto de conexión de Weave asociado con la vinculación.
GetDefaultResponseTimeout() const
uint32_t
Obtiene el tiempo de espera predeterminado de la respuesta de intercambio que se usará cuando se comunique con el par.
GetDefaultWRMPConfig(void) const
const WRMPConfig &
Obtén la configuración WRMP predeterminada que se usará cuando se comunique con el par.
GetEncryptionType(void) const
uint8_t
Recupera el tipo de encriptación de mensajes que se usará cuando se encripten mensajes hacia y desde el par.
GetEventCallback() const
EventCallback
Obtén la función que se llamará cuando se produzca un evento de API para la Vinculación.
GetExchangeManager() const
GetKeyId(void) const
uint32_t
Recupera el ID de la clave de encriptación de mensajes que se usará cuando se encripten mensajes hacia y desde el par.
GetLogId(void) const
uint16_t
Obtén un ID único para la vinculación.
GetMaxWeavePayloadSize(const System::PacketBuffer *msgBuf)
uint32_t
Obtén el tamaño máximo de carga útil de Weave que puede caber en el PacketBuffer proporcionado.
GetPeerDescription(char *buf, uint32_t bufSize) const
void
Construye una cadena que describe el nodo par y su dirección / información de conexión asociada.
GetPeerIPAddress(nl::Inet::IPAddress & address, uint16_t & port, InterfaceId & interfaceId) const
void
Recupera la información de dirección IP del intercambio de tráfico si está disponible.
GetPeerNodeId(void) const
uint64_t
Recupera el ID del nodo del par de vinculación.
GetProtocolLayerCallback(EventCallback & callback, void *& state) const
void
GetState(void) const
State
Recupera el estado actual de la vinculación.
IsAuthenticMessageFromPeer(const WeaveMessageInfo *msgInfo)
bool
Determina si un mensaje entrante específico proviene del par configurado y si está autenticado adecuadamente.
IsConnectionTransport() const
bool
IsPreparing(void) const
bool
IsReady(void) const
bool
IsUDPTransport() const
bool
IsUnreliableUDPTransport() const
bool
IsWRMTransport() const
bool
NewExchangeContext(ExchangeContext *& appExchangeContext)
Asigna un nuevo contexto de Exchange para comunicarte con el par que es el destino de la vinculación.
Release(void)
void
Libera una referencia al objeto de vinculación.
RequestPrepare()
Solicitar a la aplicación que configure y prepare la Vinculación
Reset(void)
void
Restablece la vinculación a un estado no configurado.
SetDefaultResponseTimeout(uint32_t msec)
void
Establece el tiempo de espera predeterminado de la respuesta de intercambio que se usará para comunicarse con el par.
SetDefaultWRMPConfig(const WRMPConfig & wrmpConfig)
void
Establece la configuración de WRMP predeterminada que se usará durante la comunicación con el par.
SetEventCallback(EventCallback aEventCallback)
void
Configura la función definida por la aplicación a la que se llamará cuando ocurra un evento de API para la vinculación.
SetProtocolLayerCallback(EventCallback callback, void *state)
void
Configura una función de devolución de llamada de evento para el código de la capa de protocolo mediante Binding en nombre de una aplicación.

Funciones estáticas públicas

DefaultEventHandler(void *apAppState, EventType aEvent, const InEventParam & aInParam, OutEventParam & aOutParam)
void
Controlador predeterminado para vincular eventos de la API.

Clases

nl::Weave::Binding::Configuration

Proporciona una interfaz de estilo declarativo para configurar y preparar un objeto Binding.

Structs

nl::Weave::Binding::InEventParam

Los parámetros de entrada a un evento de la API Binding.

nl::Weave::Binding::OutEventParam

Genera los parámetros de salida a un evento de la API Binding.

Tipos públicos

@23

 @23
Propiedades
kGetPeerDescription_MaxLength

Longitud máxima de una string (incluido el carácter NUL) que muestra GetPeerDescription().

EventCallback

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

EventType

 EventType
Propiedades
kEvent_BindingFailed

La vinculación falló y ya no se puede usar para comunicarse con el par.

kEvent_BindingReady

La acción de preparación de la vinculación se realizó correctamente y la vinculación ahora se puede usar para comunicarse con el par.

kEvent_ConnectionEstablished

Se estableció la conexión de Weave solicitada.

kEvent_DefaultCheck

Se usa para verificar la correcta administración predeterminada de los eventos en la aplicación.

kEvent_PASEParametersRequested

Se le solicita a la aplicación que proporcione los parámetros que se usarán durante el establecimiento de la sesión de PASE.

kEvent_PrepareFailed

No se pudo realizar la acción de preparación en la vinculación.

kEvent_PrepareRequested

Se solicita a la aplicación que configure y prepare la vinculación para que la use la pila de red.

kEvent_TAKEParametersRequested

Se solicita a la aplicación que proporcione los parámetros que se usarán durante el establecimiento de la sesión de Take.

Estado

 State

Atributos públicos

AppState

void * AppState

Funciones públicas

AddRef

void AddRef(
  void
)

Reserva una referencia al objeto de vinculación.

AdjustResponseTimeout

WEAVE_ERROR AdjustResponseTimeout(
  ExchangeContext *apExchangeContext
) const 

Volver a configurar un contexto de Exchange existente para ajustar el tiempo de espera de respuesta

Detalles
Parámetros
[in] apExchangeContext
Un puntero a un objeto de contexto de Exchange que se debe reconfigurar

AllocateRightSizedBuffer

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

BeginConfiguration

Configuration BeginConfiguration()

Ser el proceso de configuración de la vinculación.

Las aplicaciones deben llamar a BeginConfiguration() para configurar la Vinculación antes de prepararla para comunicarse con el par.

Detalles
Qué muestra
Un objeto Binding::Configuration que se puede usar para configurar la vinculación.

CanBePrepared

bool CanBePrepared(
  void
) const 

Cerrar

void Close(
  void
)

Cierra el objeto de vinculación y libera una referencia.

Cuando se lo llama, este método hace que la vinculación entre en estado Closed. Se cancelan todas las acciones de preparación en curso para la vinculación y se liberan todos los recursos de comunicación externos que posee la vinculación.

Llamar a Close() disminuye el recuento de referencias asociado con la vinculación, lo que libera el objeto si el recuento de referencias llega a cero.

GetConnection

WeaveConnection * GetConnection() const 

Obtén el objeto de conexión de Weave asociado con la vinculación.

Detalles
Qué muestra
Un puntero para un objeto WeaveConnection o NULL si no hay una conexión asociada con la vinculación.

GetDefaultResponseTimeout

uint32_t GetDefaultResponseTimeout() const 

Obtiene el tiempo de espera predeterminado de la respuesta de intercambio que se usará cuando se comunique con el par.

Detalles
Qué muestra
Tiempo de espera de respuesta en ms.

GetDefaultWRMPConfig

const WRMPConfig & GetDefaultWRMPConfig(
  void
) const 

Obtén la configuración WRMP predeterminada que se usará cuando se comunique con el par.

Detalles
Qué muestra
Es una referencia a una estructura WRMPConfig que contiene los valores de configuración predeterminados.

GetEncryptionType

uint8_t GetEncryptionType(
  void
) const 

Recupera el tipo de encriptación de mensajes que se usará cuando se encripten mensajes hacia y desde el par.

GetEventCallback

EventCallback GetEventCallback() const 

Obtén la función que se llamará cuando se produzca un evento de API para la Vinculación.

Detalles
Qué muestra
Un puntero para la función de devolución de llamada.

GetExchangeManager

WeaveExchangeManager * GetExchangeManager() const 

GetKeyId

uint32_t GetKeyId(
  void
) const 

Recupera el ID de la clave de encriptación de mensajes que se usará cuando se encripten mensajes hacia y desde el par.

GetLogId

uint16_t GetLogId(
  void
) const 

Obtén un ID único para la vinculación.

GetMaxWeavePayloadSize

uint32_t GetMaxWeavePayloadSize(
  const System::PacketBuffer *msgBuf
)

Obtén el tamaño máximo de carga útil de Weave que puede caber en el PacketBuffer proporcionado.

Para UDP, incluido UDP con WRM, el tamaño máximo de la carga útil que se mostrará garantizará que el mensaje de Weave resultante no desborde la MTU de UDP configurada.

Además, este método garantizará que la carga útil de Weave no desborde el PacketBuffer proporcionado.

Detalles
Parámetros
[in] msgBuf
Un puntero para el PacketBuffer en el que se escribirá la carga útil del mensaje.
Qué muestra
El tamaño máximo de carga útil de Weave.

GetPeerDescription

void GetPeerDescription(
  char *buf,
  uint32_t bufSize
) const 

Construye una cadena que describe el nodo par y su dirección / información de conexión asociada.

Detalles
Parámetros
[in] buf
Un puntero para un búfer en el que se debe escribir la string. El búfer proporcionado debe ser al menos tan grande como kGetPeerDescription_MaxLength. Si se proporciona un búfer más pequeño, la cadena se truncará para que quepa. El resultado incluirá un carácter de finalización NUL en todos los casos.
[in] bufSize
Tamaño del búfer al que apunta buf.

GetPeerIPAddress

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

Recupera la información de dirección IP del intercambio de tráfico si está disponible.

La disponibilidad de la información de la dirección IP del par depende del estado y la configuración de la vinculación. La información de la dirección IP solo está disponible cuando se usa un transporte basado en IP (TCP, UDP o UDP con WRMP). Antes del inicio de la preparación, la información de dirección solo está disponible si la aplicación la estableció expresamente durante la configuración. Durante la fase de preparación, la información de la dirección estará disponible cuando se complete la preparación de la dirección (p.ej., después de que se complete la resolución de DNS). Una vez que la Vinculación esté lista, la información de la dirección permanecerá disponible hasta que se restablezca la Vinculación.

Detalles
Parámetros
[out] address
Una referencia a un objeto IPAddress que recibirá la dirección IP del par. Si la información de la dirección IP del par no está disponible, este valor se establecerá como IPAddress::Any.
[out] port
Una referencia a un número entero que recibirá el número de puerto del par. Si la información de la dirección IP del par no está disponible, este valor no está definido.
[out] interfaceId
Es una referencia a un número entero que recibirá el ID de la interfaz de red a través de la cual se puede acceder al par. Si la información de la dirección IP del par no está disponible, este valor no está definido.

GetPeerNodeId

uint64_t GetPeerNodeId(
  void
) const 

Recupera el ID del nodo del par de vinculación.

Solo es válido una vez que se prepara el objeto de vinculación.

Detalles
Qué muestra
ID de nodo de Weave del intercambio de tráfico

GetProtocolLayerCallback

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

GetState

State GetState(
  void
) const 

Recupera el estado actual de la vinculación.

Detalles
Qué muestra
El estado de vinculación.

IsAuthenticMessageFromPeer

bool IsAuthenticMessageFromPeer(
  const WeaveMessageInfo *msgInfo
)

Determina si un mensaje entrante específico proviene del par configurado y si está autenticado adecuadamente.

Este método confirma los siguientes detalles sobre el mensaje dado:

  • El mensaje se originó en el nodo de par de la vinculación
  • El mensaje se recibió mediante el mismo tipo de transporte que la vinculación. Si el mensaje se recibió a través de una conexión, el método también confirma que el mensaje se recibió con la conexión exacta asociada con la vinculación.
  • La clave y el tipo de encriptación que se usan para encriptar el mensaje coinciden con los configurados en la vinculación. Para las vinculaciones configuradas sin seguridad, el método confirma que el mensaje entrante NO está encriptado.

Este método está diseñado para usarse en protocolos como WDM, en los que los pares pueden iniciar intercambios espontáneamente de vuelta al nodo local después de un intercambio inicial del nodo al intercambio de tráfico. En esos casos, el método permite que el nodo local confirme que el mensaje no solicitado entrante lo envió el intercambio de tráfico asociado. (Por supuesto, para las vinculaciones configuradas sin la encriptación de mensajes, esta aserción no proporciona valor desde la perspectiva de la seguridad. Solo confirma que coincidan el ID de nodo del remitente y los tipos de transporte).

Ten en cuenta que, si la vinculación no está en estado Listo, este método siempre mostrará el valor falso.

Detalles
Parámetros
[in] msgInfo
La información del mensaje de Weave para el mensaje entrante.
Qué muestra
Es verdadero si el mensaje es auténtico del par.

IsConnectionTransport

bool IsConnectionTransport() const 

IsPreparing

bool IsPreparing(
  void
) const 

Detalles
Qué muestra
Es verdadero si se está preparando la Vinculación actualmente.

IsReady

bool IsReady(
  void
) const 

Detalles
Qué muestra
Es verdadero si la Vinculación está en estado Listo.

IsUDPTransport

bool IsUDPTransport() const 

IsUnreliableUDPTransport

bool IsUnreliableUDPTransport() const 

IsWRMTransport

bool IsWRMTransport() const 

NewExchangeContext

WEAVE_ERROR NewExchangeContext(
  ExchangeContext *& appExchangeContext
)

Asigna un nuevo contexto de Exchange para comunicarte con el par que es el destino de la vinculación.

Detalles
Parámetros
[out] appExchangeContext
Una referencia a un puntero que recibirá el objeto de contexto de intercambio recién asignado. El puntero se fijará en NULL en caso de que el método falle.
Valores que se muestran
WEAVE_NO_ERROR
Si el contexto de intercambio se asignó correctamente.
WEAVE_ERROR_NO_MEMORY
Si no había memoria disponible para asignar el contexto de intercambio
WEAVE_ERROR_INCORRECT_STATE
Si la vinculación no está en estado Listo
other
Otros errores relacionados con la configuración del contexto de intercambio según la configuración de la vinculación.

Lanzamiento

void Release(
  void
)

Libera una referencia al objeto de vinculación.

Si no hay más referencias al objeto de vinculación, se cierra y se libera la vinculación.

RequestPrepare

WEAVE_ERROR RequestPrepare()

Solicitar a la aplicación que configure y prepare la Vinculación

El código de la capa de protocolo puede usar este método en una Binding que no se configuró o que falló para activar un evento a la aplicación (kEvent_PrepareRequested) para solicitarle que configure y prepare la vinculación para su uso.

Este método solo se puede llamar en vinculaciones en los estados NotConfigured o con errores.

Si la aplicación no admite la configuración o preparación a pedido de vinculaciones, el método fallará y mostrará WEAVE_ERROR_NOT_IMPLEMENTED.

Restablecer

void Reset(
  void
)

Restablece la vinculación a un estado no configurado.

Cuando se llama a Reset(), se cancelan todas las acciones de preparación en curso para la vinculación y se liberan todos los recursos de comunicaciones externos que retiene la vinculación. Reset() coloca la vinculación en el estado No configurada, después del cual se puede configurar y preparar de nuevo.

Reset() no altera el recuento de referencia de la vinculación.

SetDefaultResponseTimeout

void SetDefaultResponseTimeout(
  uint32_t msec
)

Establece el tiempo de espera predeterminado de la respuesta de intercambio que se usará para comunicarse con el par.

Detalles
Parámetros
[in] timeout
El nuevo tiempo de espera de respuesta en ms.

SetDefaultWRMPConfig

void SetDefaultWRMPConfig(
  const WRMPConfig & wrmpConfig
)

Establece la configuración de WRMP predeterminada que se usará durante la comunicación con el par.

Detalles
Parámetros
[in] aWRMPConfig
Una referencia a una estructura WRMPConfig que contiene la nueva configuración predeterminada.

SetEventCallback

void SetEventCallback(
  EventCallback aEventCallback
)

Configura la función definida por la aplicación a la que se llamará cuando ocurra un evento de API para la vinculación.

Detalles
Parámetros
[in] aEventCallback
Un puntero para la función de devolución de llamada.

SetProtocolLayerCallback

void SetProtocolLayerCallback(
  EventCallback callback,
  void *state
)

Configura una función de devolución de llamada de evento para el código de la capa de protocolo mediante Binding en nombre de una aplicación.

Se llamará a esta función además de la función de devolución de llamada definida por la aplicación cuando se produzcan eventos de API para la Vinculación.

Detalles
Parámetros
[in] callback
Un puntero para la función de devolución de llamada.
[in] state
Un puntero a un objeto de estado que se suministrará al código de la capa de protocolo cuando se produzca una devolución de llamada de la capa de protocolo.

Funciones estáticas públicas

DefaultEventHandler

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

Controlador predeterminado para vincular eventos de la API.

Se requiere que las aplicaciones llamen a este método para cualquier evento de API que no reconozcan o no manejen. Los parámetros proporcionados deben ser los mismos que los que pasó la vinculación a la función del controlador de eventos de la aplicación.

Detalles
Parámetros
[in] apAppState
Un puntero para la información de estado definida por la aplicación asociada con la vinculación.
[in] aEvent
ID de evento que pasa la devolución de llamada del evento
[in] aInParam
Referencia de parámetros de eventos de entrada pasados por la devolución de llamada de eventos
[in] aOutParam
Referencia de parámetros de eventos de salida pasados por la devolución de llamada del evento