nl:: Weave:: Binding
#include <src/lib/core/WeaveBinding.h>
Captura o alvo pretendido de uma comunicação do Weave e as informações de configuração associadas.
Resumo
Um objeto Binding identifica o alvo pretendido de uma comunicação do Weave (também conhecido como "peering"), com um conjunto de parâmetros de configuração que descreve como a comunicação com o peering deve ocorrer. As vinculações são independentes do protocolo do aplicativo falado entre as duas partes. Assim, eles capturam o "quem" e o “como” de uma comunicação, mas não "o quê".
Os aplicativos precisam configurar uma Binding com parâmetros específicos ao tipo de canal de comunicação desejado. As vinculações oferecem suporte a vários transportes de rede, incluindo TCP, UDP, UDP com Weave Reliable Messaging e Weave over BLE (WoBLE). Os aplicativos também podem solicitar o uso de mecanismos de segurança específicos para proteger as mensagens enviadas entre as partes. Isso inclui sessões CASE e PASE, além de chaves de grupos de aplicativos. A interface para configurar uma Binding usa um estilo de API declarativa que permite que os aplicativos declarem os requisitos de comunicação em termos simples.
Consulte a documentação de Binding::Configuration para ver mais detalhes.
Preparação
Antes da comunicação, uma Vinculação precisa ser "preparada". O ato de preparar uma Binding envolve o estabelecimento do estado necessário para a comunicação. Isso inclui resolver o endereço de rede do peer, estabelecer uma conexão de rede e negociar chaves de segurança. Depois de configurada pelo aplicativo, a Binding cuida de todas as etapas necessárias de preparação para a comunicação, chamando o aplicativo de volta quando o processo estiver concluído. Dessa forma, as vinculações escondem a mecânica da comunicação, permitindo que os aplicativos se concentrem nas interações de alto nível.
Comunicação
Depois que uma Binding for preparada, ela estará pronta para uso. Nesse estado, os aplicativos (ou, mais comumente, o código da camada de protocolo que trabalha em nome de um aplicativo) solicitam Binding para alocar um contexto de troca do Weave. O contexto de troca resultante vem pré-configurado para comunicação, permitindo que o aplicativo inicie imediatamente uma troca do Weave com o par. O aplicativo pode continuar solicitando contextos de troca de Binding até que a Binding seja encerrada ou que algum evento, como uma falha de rede, encerre o canal de comunicação subjacente.
Mudanças no estado de vinculação
Ao longo do uso, uma Binding vai entregar eventos de API ao aplicativo, informando sobre mudanças no estado de Binding. Por exemplo, quando a preparação é bem-sucedida, o aplicativo recebe um evento informando que Binding está pronta para uso. Da mesma forma, se o canal de comunicação subjacente falhar, um evento será entregue ao aplicativo informando que Binding não está mais no estado pronto.
Os eventos da API são entregues ao aplicativo por uma função de callback de evento fornecida quando Binding é alocada.
Ciclo de vida da vinculação
Vinculação são referências contadas para permitir o uso compartilhado entre vários componentes de software. Quando uma Binding é alocada, uma única referência à vinculação é criada. O aplicativo é responsável por lançar essa referência em algum momento no futuro, de modo que Binding fique livre para reutilização posterior.
Quando um aplicativo termina de usar uma Binding, ele pode chamar Close() na vinculação. Isso libera a referência do aplicativo para Binding e bloqueia todas as outras entregas de eventos de API. Quando a última referência a uma Binding é liberada, ela é automaticamente fechada.
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 *
|
Funções públicas |
|
---|---|
AddRef(void)
|
void
Reserve uma referência ao objeto de vinculação.
|
AdjustResponseTimeout(ExchangeContext *apExchangeContext) const
|
Reconfigurar um Contexto do Exchange atual para ajustar o tempo limite de resposta.
|
AllocateRightSizedBuffer(PacketBuffer *& buf, const uint32_t desiredSize, const uint32_t minSize, uint32_t & outMaxPayloadSize)
|
|
BeginConfiguration()
|
O processo de configuração da Vinculação.
|
CanBePrepared(void) const
|
bool
|
Close(void)
|
void
Feche o objeto de vinculação e libere uma referência.
|
GetConnection() const
|
Acessa o objeto de conexão do Weave associado à vinculação.
|
GetDefaultResponseTimeout() const
|
uint32_t
Consiga o tempo limite de resposta da troca padrão que será usado na comunicação com o peer.
|
GetDefaultWRMPConfig(void) const
|
const WRMPConfig &
Consiga a configuração WRMP padrão a ser usada na comunicação com o terminal.
|
GetEncryptionType(void) const
|
uint8_t
Recupera o tipo de criptografia de mensagens a ser usado ao criptografar mensagens de/para o peering.
|
GetEventCallback() const
|
EventCallback
Acesse a função que será chamada quando ocorrer um evento de API para Binding.
|
GetExchangeManager() const
|
|
GetKeyId(void) const
|
uint32_t
Recupera o ID da chave de criptografia de mensagens a ser usada ao criptografar mensagens de/para o peer.
|
GetLogId(void) const
|
uint16_t
Receba um ID exclusivo para a vinculação.
|
GetMaxWeavePayloadSize(const System::PacketBuffer *msgBuf)
|
uint32_t
Recebe o tamanho máximo do payload do Weave que pode caber dentro do PackageBuffer fornecido.
|
GetPeerDescription(char *buf, uint32_t bufSize) const
|
void
Constrói uma string que descreve o nó de peering e as informações de endereço / conexão associadas.
|
GetPeerIPAddress(nl::Inet::IPAddress & address, uint16_t & port, InterfaceId & interfaceId) const
|
void
Recupere as informações de endereço IP do peer, se disponíveis.
|
GetPeerNodeId(void) const
|
uint64_t
Recupere o ID do nó do peer de vinculação.
|
GetProtocolLayerCallback(EventCallback & callback, void *& state) const
|
void
|
GetState(void) const
|
State
Recupera o estado atual da vinculação.
|
IsAuthenticMessageFromPeer(const WeaveMessageInfo *msgInfo)
|
bool
Determine se uma mensagem recebida específica é do ponto configurado e está devidamente autenticada.
|
IsConnectionTransport() const
|
bool
|
IsPreparing(void) const
|
bool
|
IsReady(void) const
|
bool
|
IsUDPTransport() const
|
bool
|
IsUnreliableUDPTransport() const
|
bool
|
IsWRMTransport() const
|
bool
|
NewExchangeContext(ExchangeContext *& appExchangeContext)
|
Alocar um novo contexto do Exchange para se comunicar com o peering que é o destino da vinculação.
|
Release(void)
|
void
Libere uma referência ao objeto de vinculação.
|
RequestPrepare()
|
Solicite que o aplicativo configure e prepare a Binding.
|
Reset(void)
|
void
Redefinir a vinculação para um estado não configurado.
|
SetDefaultResponseTimeout(uint32_t msec)
|
void
Defina o tempo limite padrão de resposta da troca que será usado na comunicação com o peer.
|
SetDefaultWRMPConfig(const WRMPConfig & wrmpConfig)
|
void
Defina a configuração WRMP padrão a ser usada na comunicação com o terminal.
|
SetEventCallback(EventCallback aEventCallback)
|
void
Configure a função definida pelo aplicativo a ser chamada quando ocorrer um evento de API para Binding.
|
SetProtocolLayerCallback(EventCallback callback, void *state)
|
void
Defina uma função de callback do evento para o código da camada de protocolo usando Binding em nome de um aplicativo.
|
Funções estáticas públicas |
|
---|---|
DefaultEventHandler(void *apAppState, EventType aEvent, const InEventParam & aInParam, OutEventParam & aOutParam)
|
void
Gerenciador padrão para eventos da API de vinculação.
|
Classes |
|
---|---|
nl:: |
Fornece uma interface de estilo declarativo para configurar e preparar um objeto Binding. |
Estruturas |
|
---|---|
nl:: |
Parâmetros de entrada para um evento Binding da API. |
nl:: |
Parâmetros de saída para um evento de API Binding. |
Tipos públicos
@23
@23
Propriedades | |
---|---|
kGetPeerDescription_MaxLength
|
Tamanho máximo da string (incluindo o caractere NUL) retornado por GetPeerDescription(). |
EventCallback
void(* EventCallback)(void *apAppState, EventType aEvent, const InEventParam &aInParam, OutEventParam &aOutParam)
EventType
EventType
Propriedades | |
---|---|
kEvent_BindingFailed
|
A vinculação falhou e não pode mais ser usada para se comunicar com o peering. |
kEvent_BindingReady
|
A ação de preparo na vinculação foi bem-sucedida e a vinculação agora pode ser usada para se comunicar com o peering. |
kEvent_ConnectionEstablished
|
A conexão do Weave solicitada foi estabelecida. |
kEvent_DefaultCheck
|
Usado para verificar o tratamento correto do evento padrão no aplicativo. |
kEvent_PASEParametersRequested
|
É necessário que o aplicativo forneça os parâmetros a serem usados durante o estabelecimento da sessão de PASE. |
kEvent_PrepareFailed
|
Falha na ação de preparação na vinculação. |
kEvent_PrepareRequested
|
É solicitado que o aplicativo configure e prepare a vinculação para uso pela pilha de rede. |
kEvent_TAKEParametersRequested
|
É necessário que o aplicativo forneça os parâmetros a serem usados durante o estabelecimento da sessão TAKE. |
Estado
State
Atributos públicos
AppState
void * AppState
Funções públicas
AddRef
void AddRef( void )
Reserve uma referência ao objeto de vinculação.
AdjustResponseTimeout
WEAVE_ERROR AdjustResponseTimeout( ExchangeContext *apExchangeContext ) const
Reconfigurar um Contexto do Exchange atual para ajustar o tempo limite de resposta.
Detalhes | |||
---|---|---|---|
Parâmetros |
|
AllocateRightSizedBuffer
WEAVE_ERROR AllocateRightSizedBuffer( PacketBuffer *& buf, const uint32_t desiredSize, const uint32_t minSize, uint32_t & outMaxPayloadSize )
BeginConfiguration
Configuration BeginConfiguration()
O processo de configuração da Vinculação.
Os aplicativos precisam chamar BeginConfiguration() para configurar a Vinculação antes de prepará-la para se comunicar com o app semelhante.
Detalhes | |
---|---|
Retornos |
Um objeto Binding::Configuration que pode ser usado para configurar a vinculação.
|
CanBePrepared
bool CanBePrepared( void ) const
Fechar
void Close( void )
Feche o objeto de vinculação e libere uma referência.
Quando chamado, esse método faz com que a vinculação entre no estado Fechado. Todas as ações de preparação em andamento para a vinculação são canceladas, e todos os recursos de comunicações externas mantidos pela vinculação são liberados.
Chamar Close() diminui a contagem de referência associada à vinculação, liberando o objeto se a contagem de referência se tornar zero.
GetConnection
WeaveConnection * GetConnection() const
Acessa o objeto de conexão do Weave associado à vinculação.
Detalhes | |
---|---|
Retornos |
Um ponteiro para um objeto WeaveConnection ou NULL se não houver uma conexão associada à vinculação.
|
GetDefaultResponseTimeout
uint32_t GetDefaultResponseTimeout() const
Consiga o tempo limite de resposta da troca padrão que será usado na comunicação com o peer.
Detalhes | |
---|---|
Retornos |
Tempo limite de resposta em ms.
|
GetDefaultWRMPConfig
const WRMPConfig & GetDefaultWRMPConfig( void ) const
Consiga a configuração WRMP padrão a ser usada na comunicação com o terminal.
Detalhes | |
---|---|
Retornos |
Uma referência a uma estrutura WRMPConfig que contém os valores de configuração padrão.
|
GetEncryptionType
uint8_t GetEncryptionType( void ) const
Recupera o tipo de criptografia de mensagens a ser usado ao criptografar mensagens de/para o peering.
GetEventCallback
EventCallback GetEventCallback() const
Acesse a função que será chamada quando ocorrer um evento de API para Binding.
Detalhes | |
---|---|
Retornos |
Um ponteiro para a função de callback.
|
GetExchangeManager
WeaveExchangeManager * GetExchangeManager() const
GetKeyId
uint32_t GetKeyId( void ) const
Recupera o ID da chave de criptografia de mensagens a ser usada ao criptografar mensagens de/para o peer.
GetLogId
uint16_t GetLogId( void ) const
Receba um ID exclusivo para a vinculação.
GetMaxWeavePayloadSize
uint32_t GetMaxWeavePayloadSize( const System::PacketBuffer *msgBuf )
Recebe o tamanho máximo do payload do Weave que pode caber dentro do PackageBuffer fornecido.
Para UDP, incluindo UDP com WRM, o tamanho máximo de payload retornado garantirá que a mensagem do Weave resultante não ultrapasse a MTU UDP configurada.
Além disso, esse método garante que o payload do Weave não estoure o PackageBuffer fornecido.
Detalhes | |||
---|---|---|---|
Parâmetros |
|
||
Retornos |
O tamanho máximo de payload do Weave.
|
GetPeerDescription
void GetPeerDescription( char *buf, uint32_t bufSize ) const
Constrói uma string que descreve o nó de peering e as informações de endereço / conexão associadas.
Detalhes | |||||
---|---|---|---|---|---|
Parâmetros |
|
GetPeerIPAddress
void GetPeerIPAddress( nl::Inet::IPAddress & address, uint16_t & port, InterfaceId & interfaceId ) const
Recupere as informações de endereço IP do peer, se disponíveis.
A disponibilidade das informações de endereço IP do peering depende do estado e da configuração da vinculação. As informações de endereço IP só estão disponíveis ao usar um transporte baseado em IP (TCP, UDP ou UDP com WRMP). Antes de começar a preparação, as informações de endereço só estarão disponíveis se tiverem sido definidas expressamente pelo aplicativo durante a configuração. Durante a fase de preparação, as informações de endereço ficam disponíveis quando esse processo é concluído (por exemplo, após a resolução de DNS). Depois que a Vinculação estiver pronta, as informações de endereço vão permanecer disponíveis até que a Vinculação seja redefinida.
Detalhes | |||||||
---|---|---|---|---|---|---|---|
Parâmetros |
|
GetPeerNodeId
uint64_t GetPeerNodeId( void ) const
Recupere o ID do nó do peer de vinculação.
Válido somente depois que o objeto de vinculação tiver sido preparado.
Detalhes | |
---|---|
Retornos |
ID do nó do Weave do peering
|
GetProtocolLayerCallback
void GetProtocolLayerCallback( EventCallback & callback, void *& state ) const
GetState
State GetState( void ) const
Recupera o estado atual da vinculação.
Detalhes | |
---|---|
Retornos |
O estado da vinculação.
|
IsAuthenticMessageFromPeer
bool IsAuthenticMessageFromPeer( const WeaveMessageInfo *msgInfo )
Determine se uma mensagem recebida específica é do ponto configurado e está devidamente autenticada.
Esse método confirma os seguintes detalhes sobre a mensagem fornecida:
- A mensagem foi originada no nó de peering da vinculação
- A mensagem foi recebida com o mesmo tipo de transporte que a vinculação. Se a mensagem foi recebida por uma conexão, o método também confirmará se a mensagem foi recebida pela conexão exata associada à vinculação.
- O tipo e a chave de criptografia usados para criptografar a mensagem correspondem aos configurados na vinculação. Para vinculações configuradas sem o uso da segurança, o método confirma que a mensagem recebida NÃO está criptografada.
Esse método deve ser usado em protocolos como WDM, em que os pares podem iniciar espontaneamente as trocas de volta ao nó local após uma troca inicial entre o nó e o outro. Nesses casos, o método permite que o nó local confirme que a mensagem não solicitada recebida foi enviada pelo ponto associado. Obviamente, para vinculações configuradas sem o uso de criptografia de mensagens, essa declaração não fornece valor do ponto de vista da segurança. Ela apenas confirma que o ID do nó do remetente e os tipos de transporte correspondem.
Se a vinculação não estiver no estado Pronto, esse método sempre retornará "falso".
Detalhes | |||
---|---|---|---|
Parâmetros |
|
||
Retornos |
Verdadeiro se a mensagem for autêntica do ponto.
|
IsConnectionTransport
bool IsConnectionTransport() const
IsPreparing
bool IsPreparing( void ) const
Detalhes | |
---|---|
Retornos |
Verdadeiro se a Vinculação estiver sendo preparada no momento.
|
IsReady
bool IsReady( void ) const
Detalhes | |
---|---|
Retornos |
Verdadeiro se Vinculação estiver no estado "Pronto".
|
IsUDPTransport
bool IsUDPTransport() const
IsUnreliableUDPTransport
bool IsUnreliableUDPTransport() const
IsWRMTransport
bool IsWRMTransport() const
NewExchangeContext
WEAVE_ERROR NewExchangeContext( ExchangeContext *& appExchangeContext )
Alocar um novo contexto do Exchange para se comunicar com o peering que é o destino da vinculação.
Detalhes | |||||||||
---|---|---|---|---|---|---|---|---|---|
Parâmetros |
|
||||||||
Valores de retorno |
|
Versão
void Release( void )
Libere uma referência ao objeto de vinculação.
Se não houver mais referências ao objeto de vinculação, a vinculação será fechada e liberada.
RequestPrepare
WEAVE_ERROR RequestPrepare()
Solicite que o aplicativo configure e prepare a Binding.
O código da camada de protocolo pode usar esse método em uma Binding que não foi configurada ou que falhou para acionar um evento para o aplicativo (kEvent_PrepareRequested) solicitando a configuração e a preparação da vinculação para uso.
Esse método só pode ser chamado em vinculações nos estados "NotConfigured" ou "Failed".
Se o aplicativo não oferecer suporte à configuração/preparação de vinculações sob demanda, o método falhará com WEAVE_ERROR_NOT_IMPLEMENTED.
Redefinir
void Reset( void )
Redefinir a vinculação para um estado não configurado.
Quando Reset() é chamado, todas as ações de preparação em andamento para a vinculação são canceladas, e todos os recursos de comunicação externa mantidos pela vinculação são liberados. Reset() coloca a vinculação no estado "Não configurado", depois do qual pode ser configurada e preparada novamente.
Reset() não altera a contagem de referência da vinculação.
SetDefaultResponseTimeout
void SetDefaultResponseTimeout( uint32_t msec )
Defina o tempo limite padrão de resposta da troca que será usado na comunicação com o peer.
Detalhes | |||
---|---|---|---|
Parâmetros |
|
SetDefaultWRMPConfig
void SetDefaultWRMPConfig( const WRMPConfig & wrmpConfig )
Defina a configuração WRMP padrão a ser usada na comunicação com o terminal.
Detalhes | |||
---|---|---|---|
Parâmetros |
|
SetEventCallback
void SetEventCallback( EventCallback aEventCallback )
Configure a função definida pelo aplicativo a ser chamada quando ocorrer um evento de API para Binding.
Detalhes | |||
---|---|---|---|
Parâmetros |
|
SetProtocolLayerCallback
void SetProtocolLayerCallback( EventCallback callback, void *state )
Defina uma função de callback do evento para o código da camada de protocolo usando Binding em nome de um aplicativo.
Essa função será chamada além da função de callback definida pelo aplicativo quando ocorrerem eventos de API para Binding.
Detalhes | |||||
---|---|---|---|---|---|
Parâmetros |
|
Funções estáticas públicas
DefaultEventHandler
void DefaultEventHandler( void *apAppState, EventType aEvent, const InEventParam & aInParam, OutEventParam & aOutParam )
Gerenciador padrão para eventos da API de vinculação.
Os aplicativos precisam chamar esse método para qualquer evento da API que não reconheçam ou não consigam processar. Os parâmetros fornecidos precisam ser os mesmos passados pela vinculação para a função de manipulador de eventos do aplicativo.
Detalhes | |||||||||
---|---|---|---|---|---|---|---|---|---|
Parâmetros |
|