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 aplicación que se habla entre las dos partes. Así, capturan "quién" y el "cómo" de una comunicación, pero no el "qué".
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 un rango de transportes de red, incluidos TCP, UDP, UDP con mensajes confiables de Weave y Weave a través de BLE (WoBLE). Las aplicaciones también pueden solicitar el uso de mecanismos de seguridad específicos para proteger los mensajes enviados entre las partes. Entre ellas, se incluyen las sesiones CASE y PASE, además de las claves de grupo de aplicaciones. La interfaz para configurar una vinculación usa un estilo de API declarativo 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 llevar a cabo la comunicación, se debe "preparar" una Vinculación. El acto de preparar una vinculación implica establecer el estado necesario para que se produzca la comunicación. Esto puede incluir tareas 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 la configura, 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 a las aplicaciones concentrarse en las interacciones de alto nivel.
Comunicación
Una vez que se haya preparado una Binding, estará lista para usarse. En este estado, las aplicaciones (o, más comúnmente, el código de la 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 de inmediato un intercambio de Weave con el par. La aplicación puede continuar solicitando contextos de intercambio de la Vinculación hasta que se cierre la Vinculación o hasta que algún evento, p.ej., una falla de la red, cancele el canal de comunicación subyacente.
Cambios de estado de la vinculación
En el transcurso de su uso, una vinculación entregará eventos de API a la aplicación informándole de los cambios en el estado de la vinculación. Por ejemplo, cuando la preparación se realiza correctamente, la aplicación recibirá un evento que le informa 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 Binding ya no está lista.
Los eventos de la API se entregan a la aplicación a través de una función de devolución de llamada de evento que se proporciona cuando se asigna la Binding.
Duración de la vinculación
Las vinculaciones se cuentan como referencias para permitir el uso compartido entre varios componentes de software. Cuando se asigna una Vinculación, se crea una única referencia a la vinculación. La aplicación es responsable de liberar esta referencia en algún momento en el futuro, de modo que la Binding sea gratuita para su posterior reutilización.
Cuando una aplicación finaliza con una Binding, puede llamar a Close() en la vinculación. Esto libera la referencia de la aplicación a la vinculación y bloquea todas las demás entregas de eventos de la API. Cuando se libera la última referencia a una Binding, esta se cierra automáticamente.
Tipos públicos |
|
---|---|
@23{
|
enum |
EventCallback)(void *apAppState, EventType aEvent, const InEventParam &aInParam, OutEventParam &aOutParam)
|
typedefvoid(*
|
EventType{
|
enum |
State
|
enum |
Atributos públicos |
|
---|---|
AppState
|
void *
|
Funciones públicas |
|
---|---|
AddRef(void)
|
void
Reserva una referencia para el objeto de vinculación.
|
AdjustResponseTimeout(ExchangeContext *apExchangeContext) const
|
Reconfigura 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 Binding
|
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 respuesta del intercambio que se debe usar cuando te comunicas con el par.
|
GetDefaultWRMPConfig(void) const
|
const WRMPConfig &
Obtén la configuración de WRMP predeterminada que se usará cuando te comuniques con el par.
|
GetEncryptionType(void) const
|
uint8_t
Recupera el tipo de encriptación de mensajes que se usará al encriptar mensajes entre pares.
|
GetEventCallback() const
|
EventCallback
Obtén la función a la que se llamará cuando se produzca un evento de la 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á al encriptar mensajes hacia o 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 packageBuffer proporcionado.
|
GetPeerDescription(char *buf, uint32_t bufSize) const
|
void
Construye una cadena que describe el nodo de intercambio de tráfico y su dirección o información de conexión asociada.
|
GetPeerIPAddress(nl::Inet::IPAddress & address, uint16_t & port, InterfaceId & interfaceId) const
|
void
Recupera la información de la dirección IP del par, 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 se autenticó correctamente.
|
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 comunicarse con el par que es el destino de la vinculación.
|
Release(void)
|
void
Libera una referencia al objeto de vinculación.
|
RequestPrepare()
|
Solicita 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
Configura el tiempo de espera predeterminado de respuesta de intercambio que se usará cuando te comuniques con el par.
|
SetDefaultWRMPConfig(const WRMPConfig & wrmpConfig)
|
void
Establece la configuración de WRMP predeterminada que se usará cuando te comuniques con el par.
|
SetEventCallback(EventCallback aEventCallback)
|
void
Configura la función definida por la aplicación que se llamará cuando se produzca un evento de API para la vinculación.
|
SetProtocolLayerCallback(EventCallback callback, void *state)
|
void
Establece una función de devolución de llamada de evento para el código de 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 API.
|
Clases |
|
---|---|
nl:: |
Proporciona una interfaz de estilo declarativo para configurar y preparar un objeto Binding. |
Structs |
|
---|---|
nl:: |
Parámetros de entrada a un evento de la API de Binding |
nl:: |
Parámetros de salida a un evento de la API de Binding. |
Tipos públicos
@23
@23
Propiedades | |
---|---|
kGetPeerDescription_MaxLength
|
Longitud máxima de la 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 en la vinculación se realizó correctamente. Ahora, la vinculación se puede usar para comunicarse con el par. |
kEvent_ConnectionEstablished
|
Se estableció la conexión de Weave solicitada. |
kEvent_DefaultCheck
|
Se usa para verificar el manejo correcto de eventos predeterminados en la aplicación. |
kEvent_PASEParametersRequested
|
La aplicación debe proporcionar los parámetros que se utilizarán durante el establecimiento de la sesión PASE. |
kEvent_PrepareFailed
|
No se pudo preparar la acció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 utilizarán durante el establecimiento de la sesión take. |
Estado
State
Atributos públicos
AppState
void * AppState
Funciones públicas
AddRef
void AddRef( void )
Reserva una referencia para el objeto de vinculación.
AdjustResponseTimeout
WEAVE_ERROR AdjustResponseTimeout( ExchangeContext *apExchangeContext ) const
Reconfigura un contexto de Exchange existente para ajustar el tiempo de espera de respuesta.
Detalles | |||
---|---|---|---|
Parámetros |
|
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 Binding
Las aplicaciones deben llamar a BeginConfiguration() para configurar la Binding antes de prepararla para comunicarse con el par.
Detalles | |
---|---|
Resultado que se 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 pase al estado Closed. Se cancelarán todas las acciones de preparación en curso para la vinculación y se liberarán todos los recursos de comunicaciones externas que retenga la vinculación.
Llamar a Close() disminuye el recuento de referencias asociado con la vinculación y libera el objeto si el recuento de referencias se vuelve cero.
GetConnection
WeaveConnection * GetConnection() const
Obtén el objeto de conexión de Weave asociado con la vinculación.
Detalles | |
---|---|
Resultado que se muestra |
Un puntero para un objeto WeaveConnection, o NULL si no hay ninguna conexión asociada con la vinculación.
|
GetDefaultResponseTimeout
uint32_t GetDefaultResponseTimeout() const
Obtiene el tiempo de espera predeterminado de respuesta del intercambio que se debe usar cuando te comunicas con el par.
Detalles | |
---|---|
Resultado que se muestra |
Tiempo de espera de respuesta en ms.
|
GetDefaultWRMPConfig
const WRMPConfig & GetDefaultWRMPConfig( void ) const
Obtén la configuración de WRMP predeterminada que se usará cuando te comuniques con el par.
Detalles | |
---|---|
Resultado que se muestra |
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á al encriptar mensajes entre pares.
GetEventCallback
EventCallback GetEventCallback() const
Obtén la función a la que se llamará cuando se produzca un evento de la API para la vinculación.
Detalles | |
---|---|
Resultado que se 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á al encriptar mensajes hacia o 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 packageBuffer proporcionado.
Para UDP, incluido UDP con WRM, el tamaño máximo de la carga útil que se muestra 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 packageBuffer proporcionado.
Detalles | |||
---|---|---|---|
Parámetros |
|
||
Resultado que se muestra |
El tamaño máximo de la carga útil de Weave.
|
GetPeerDescription
void GetPeerDescription( char *buf, uint32_t bufSize ) const
Construye una cadena que describe el nodo de intercambio de tráfico y su dirección o información de conexión asociada.
Detalles | |||||
---|---|---|---|---|---|
Parámetros |
|
GetPeerIPAddress
void GetPeerIPAddress( nl::Inet::IPAddress & address, uint16_t & port, InterfaceId & interfaceId ) const
Recupera la información de la dirección IP del par, 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 la 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 está disponible cuando se completa 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 permanece disponible hasta que se restablece la Vinculación.
Detalles | |||||||
---|---|---|---|---|---|---|---|
Parámetros |
|
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 | |
---|---|
Resultado que se 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 | |
---|---|
Resultado que se muestra |
El estado de vinculación.
|
IsAuthenticMessageFromPeer
bool IsAuthenticMessageFromPeer( const WeaveMessageInfo *msgInfo )
Determina si un mensaje entrante específico proviene del par configurado y se autenticó correctamente.
Este método confirma los siguientes detalles sobre el mensaje proporcionado:
- El mensaje se originó en el nodo de intercambio de tráfico de la vinculación
- El mensaje se recibió en 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ó a través de la conexión exacta asociada con la vinculación.
- La clave de encriptación y el tipo que se usan para encriptar el mensaje coinciden con los configurados en la vinculación. En el caso de las vinculaciones configuradas sin el uso de 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 intercambios de tráfico pueden iniciar espontáneamente intercambios de vuelta al nodo local después de un intercambio inicial entre el nodo y el par. En esos casos, el método permite que el nodo local confirme que el mensaje entrante no solicitado fue enviado por el par asociado. (Por supuesto, para las vinculaciones configuradas sin la encriptación de mensajes, esta aserción no proporciona ningún valor desde una perspectiva de seguridad. Solo confirma que coinciden el ID del nodo del remitente y los tipos de transporte).
Ten en cuenta que, si la vinculación no se encuentra en estado Listo, este método siempre mostrará un valor falso.
Detalles | |||
---|---|---|---|
Parámetros |
|
||
Resultado que se muestra |
Verdadero si el mensaje es auténtico de la app similar.
|
IsConnectionTransport
bool IsConnectionTransport() const
IsPreparing
bool IsPreparing( void ) const
Detalles | |
---|---|
Resultado que se muestra |
Es verdadero si se está preparando la Binding.
|
IsReady
bool IsReady( void ) const
Detalles | |
---|---|
Resultado que se 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 comunicarse con el par que es el destino de la vinculación.
Detalles | |||||||||
---|---|---|---|---|---|---|---|---|---|
Parámetros |
|
||||||||
Valores de retorno |
|
Lanzamiento
void Release( void )
Libera una referencia al objeto de vinculación.
Si no hay más referencias al objeto de vinculación, la vinculación se cierra y se libera.
RequestPrepare
WEAVE_ERROR RequestPrepare()
Solicita a la aplicación que configure y prepare la Vinculación.
El código de capa de protocolo puede usar este método en una vinculación que no se configuró, o que falló, para activar un evento en la aplicación (kEvent_PrepareRequested) y que solicita que configure y prepare la vinculación para su uso.
Solo se puede llamar a este método en vinculaciones en los estados NotConfigured o Failed.
Si la aplicación no admite la configuración o preparación de vinculaciones a pedido, el método fallará y mostrará el mensaje 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 externas que retiene la vinculación. Reset() coloca la vinculación en el estado No configurado. Después de eso, se puede configurar y preparar de nuevo.
Reset() no altera el recuento de referencias de la vinculación.
SetDefaultResponseTimeout
void SetDefaultResponseTimeout( uint32_t msec )
Configura el tiempo de espera predeterminado de respuesta de intercambio que se usará cuando te comuniques con el par.
Detalles | |||
---|---|---|---|
Parámetros |
|
SetDefaultWRMPConfig
void SetDefaultWRMPConfig( const WRMPConfig & wrmpConfig )
Establece la configuración de WRMP predeterminada que se usará cuando te comuniques con el par.
Detalles | |||
---|---|---|---|
Parámetros |
|
SetEventCallback
void SetEventCallback( EventCallback aEventCallback )
Configura la función definida por la aplicación que se llamará cuando se produzca un evento de API para la vinculación.
Detalles | |||
---|---|---|---|
Parámetros |
|
SetProtocolLayerCallback
void SetProtocolLayerCallback( EventCallback callback, void *state )
Establece una función de devolución de llamada de evento para el código de 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 |
|
Funciones estáticas públicas
DefaultEventHandler
void DefaultEventHandler( void *apAppState, EventType aEvent, const InEventParam & aInParam, OutEventParam & aOutParam )
Controlador predeterminado para vincular eventos de API.
Las aplicaciones deben llamar a este método para cualquier evento de la API que no reconozcan o no controlen. Los parámetros proporcionados deben ser los mismos que los que pasa la vinculación a la función del controlador de eventos de la aplicación.
Detalles | |||||||||
---|---|---|---|---|---|---|---|---|---|
Parámetros |
|