nl::Weave::Profiles::ServiceDirectory::WeaveServiceManager

#include <src/lib/profiles/service-directory/ServiceDirectory.h>

O objeto gerenciador para o diretório de serviço Weave.

Resumo

O gerenciador do serviço Weave é a interface principal de aplicativos para o serviço de diretório. Dessa forma, ele oculta as complicações inerentes à busca da entrada de diretório associada a um endpoint de serviço, realizando busca DNS em um ou mais dos nomes de host encontrados, tentando se conectar, protegendo a conexão e assim por diante. Ele também pode gerenciar um cache de informações do diretório de serviços.

Construtores e destrutores

WeaveServiceManager(void)
Esse método inicializa a instância WeaveServiceManager.
~WeaveServiceManager(void)
Este método destrói a instância do WeaveServiceManager.

Tipos públicos

@303{
  kWeave_DefaultSendTimeout = 15000
}
enum
OnConnectBegin)(struct ServiceConnectBeginArgs &args) nl::Weave::Profiles::ServiceDirectory::WeaveServiceManager::OnConnectBegin
void(*
Um callback de aplicativo feito imediatamente antes do estabelecimento da conexão.
OnServiceEndpointQueryBegin)(void) nl::Weave::Profiles::ServiceDirectory::WeaveServiceManager::OnServiceEndpointQueryBegin
void(*
Um callback de aplicativo para marcar o horário de uma consulta de saída do diretório de serviços.
OnServiceEndpointQueryEndWithTimeInfo)(uint64_t timeQueryReceiptMsec, uint32_t timeProcessMsec) nl::Weave::Profiles::ServiceDirectory::WeaveServiceManager::OnServiceEndpointQueryEndWithTimeInfo
void(*
Um callback de aplicativo para entregar valores de tempo de uma resposta do diretório de serviços.
RootDirectoryAccessor)(uint8_t *aDirectory, uint16_t aLength) nl::Weave::Profiles::ServiceDirectory::WeaveServiceManager::RootDirectoryAccessor
Uma função de acessor para as informações do diretório raiz.
StatusHandler)(void *anAppState, WEAVE_ERROR anError, StatusReport *aStatusReport) nl::Weave::Profiles::ServiceDirectory::WeaveServiceManager::StatusHandler
void(*
Um gerenciador para condições de erro e status.

Funções públicas

SetConnectBeginCallback(OnConnectBegin aConnectBegin)
void
Defina uma função de retorno de chamada a ser chamada imediatamente antes do estabelecimento da conexão.
cancel(uint64_t aServiceEp, void *aAppState)
void
Esse método cancela uma solicitação de conexão.
clearCache(void)
void
Esse método limpa o estado e o cache do gerenciador se o estado estiver no estado do terminal kServiceMgrState_Resolved, o que significa que a resposta do endpoint do Diretório de serviços foi recebida.
connect(uint64_t aServiceEp, WeaveAuthMode aAuthMode, void *aAppState, StatusHandler aStatusHandler, WeaveConnection::ConnectionCompleteFunct aConnectionCompleteHandler, const uint32_t aConnectTimeoutMsecs, const InterfaceId aConnectIntf)
As solicitações desse método se conectam a um serviço Weave.
init(WeaveExchangeManager *aExchangeMgr, uint8_t *aCache, uint16_t aCacheLen, RootDirectoryAccessor aAccessor, WeaveAuthMode aDirAuthMode, OnServiceEndpointQueryBegin aServiceEndpointQueryBegin, OnServiceEndpointQueryEndWithTimeInfo aServiceEndpointQueryEndWithTimeInfo, OnConnectBegin aConnectBegin)
Esse método inicializa o objeto do gerenciador de serviços.
lookup(uint64_t aServiceEp, HostPortList *outHostPortList)
Esse método pesquisa informações de diretório para um endpoint de serviço.
lookup(uint64_t aServiceEp, uint8_t *aControlByte, uint8_t **aDirectoryEntry)
Esse método pesquisa informações de diretório para um endpoint de serviço.
onConnectionClosed(WEAVE_ERROR aError)
void
Esse método lida com o evento de conexão encerrada informado pelo contexto de troca do Weave associado.
onConnectionComplete(WEAVE_ERROR aError)
void
Esse método processa o evento de conexão concluída para a transação de consulta do endpoint do serviço.
onResponseReceived(uint32_t aProfileId, uint8_t aMsgType, PacketBuffer *aMsg)
void
Esse método lida com qualquer mensagem de resposta na conversa com o serviço de diretório.
onResponseTimeout(void)
void
Este método lida com o evento de tempo limite, no qual nenhuma resposta foi recebida do serviço de diretório.
relocate(WEAVE_ERROR aError)
void
Esse método realoca o cache do diretório de serviços.
relocate(void)
void
Esse método realoca o cache do diretório de serviços.
replaceOrAddCacheEntry(uint16_t port, const char *hostName, uint8_t hostLen, uint64_t serviceEndpointId)
Adicione a entrada de diretório modificada de um nome do host e um ID de porta no início da lista de diretórios.
reset(WEAVE_ERROR aError)
void
Esse método redefine o gerenciador de serviço para o estado inicial.
reset(void)
void
Esse método redefine o gerenciador de serviço para o estado inicial.
unresolve(WEAVE_ERROR aError)
void
Este método invalida o cache do diretório de serviços.
unresolve(void)
void
Este método invalida o cache do diretório de serviços.

Aulas

nl::Weave::Profiles::ServiceDirectory::WeaveServiceManager::ConnectRequest

Essa classe representa uma única transação gerenciada pelo gerenciador do serviço.

Tipos públicos

@303

 @303
Propriedades
kWeave_DefaultSendTimeout

Número de milissegundos em que uma resposta precisa ser recebida para a consulta de diretório antes que o contexto da troca atinja o tempo limite.

OnConnectBegin

void(* OnConnectBegin)(struct ServiceConnectBeginArgs &args)

Um callback de aplicativo feito imediatamente antes do estabelecimento da conexão.

Esse callback pode ser usado por aplicativos para observar e, opcionalmente, alterar os argumentos passados para #WeaveConnection::Connect() durante o estabelecimento de uma conexão de serviço. Esse callback será chamado para a conexão com o endpoint do serviço de destino e com o endpoint do Diretório de serviços, caso seja necessário fazer uma pesquisa no diretório.

OnServiceEndpointQueryBegin

void(* OnServiceEndpointQueryBegin)(void)

Um callback de aplicativo para marcar o horário de uma consulta de saída do diretório de serviços.

É chamado quando estamos prestes a enviar uma solicitação de consulta de endpoint de serviço. É usado para corresponder a OnServiceEndpointQueryEnd para compensar o tempo de veiculação da mensagem.

OnServiceEndpointQueryEndWithTimeInfo

void(* OnServiceEndpointQueryEndWithTimeInfo)(uint64_t timeQueryReceiptMsec, uint32_t timeProcessMsec)

Um callback de aplicativo para entregar valores de tempo de uma resposta do diretório de serviços.

Isso é chamado quando recebemos informações de tempo da resposta de consulta do diretório de serviços. Esse callback só aconteceria se uma resposta fosse analisada com êxito e as informações de tempo fossem incluídas

Detalhes
Parâmetros
[in] timeQueryReceiptMsec
O número de ms desde a época POSIX, quando a consulta foi recebida no lado do servidor.
[in] timeProcessMsec
O número de ms gasto no processamento desta consulta.

RootDirectoryAccessor

WEAVE_ERROR(* RootDirectoryAccessor)(uint8_t *aDirectory, uint16_t aLength)

Uma função de acessor para as informações do diretório raiz.

Você tem que começar em algum lugar e, com o diretório de serviços, comece com um diretório de stub que contenha o endereço de um servidor que você possa usar para acessar todo o resto. Como a disposição e a procedência dessas informações provavelmente variam de acordo com o dispositivo, fornecemos um callback do acessador aqui.

Detalhes
Parâmetros
[out] aDirectory
Um ponteiro para um buffer para gravar as informações do diretório.
[in] aLength
O tamanho do buffer especificado em bytes.
Retorna
WEAVE_NO_ERROR em caso de sucesso. Caso contrário, o processo de carregamento será cancelado.

StatusHandler

void(* StatusHandler)(void *anAppState, WEAVE_ERROR anError, StatusReport *aStatusReport)

Um gerenciador para condições de erro e status.

Um usuário do gerenciador de serviço pode ser informado sobre problemas na tentativa de executar uma solicitação de conexão de duas maneiras. Ele pode receber um relatório de status do serviço ou um WEAVE_ERROR gerado internamente. Em ambos os casos, as informações são enviadas por esse callback.

Detalhes
Parâmetros
[in] anAppState
Um ponteiro para um objeto do aplicativo que foi transmitido para a chamada conect() correspondente.
[in] anError
Um código do Weave indicando que ocorreu um erro no processo de tentativa de executar a solicitação de conexão. Será WEAVE_NO_ERROR quando não houver erro e um relatório de status estiver disponível.
[in] aStatusReport
Um ponteiro para um relatório de status gerado pelo serviço de diretório remoto. Esse argumento deverá ser NULL caso não haja relatório de status e um erro interno seja passado no argumento anterior.

Funções públicas

SetConnectBeginCallback

void SetConnectBeginCallback(
  OnConnectBegin aConnectBegin
)

Defina uma função de retorno de chamada a ser chamada imediatamente antes do estabelecimento da conexão.

Detalhes
Parâmetros
[in] aConnectBegin
Um ponteiro para a função de callback. O valor NULL desativa o callback.

WeaveServiceManager

 WeaveServiceManager(
  void
)

Esse método inicializa a instância WeaveServiceManager.

Observe que init() precisa ser chamado para inicializar essa instância ainda mais.

cancelar

void cancel(
  uint64_t aServiceEp,
  void *aAppState
)

Esse método cancela uma solicitação de conexão.

Esse método cancela uma solicitação de conexão considerando o ID do endpoint do serviço e o objeto de estado do aplicativo transmitido no momento da solicitação como identificadores. Se for a última solicitação de conexão, esse método também limpará qualquer estado de conexão pendente do diretório de serviços.

Detalhes
Parâmetros
[in] aServiceEp
O ID do endpoint do serviço da solicitação que está sendo cancelada.
[in] anAppState
Um ponteiro para o objeto de estado do app fornecido para a chamada de connect().

clearCache

void clearCache(
  void
)

Esse método limpa o estado e o cache do gerenciador se o estado estiver no estado do terminal kServiceMgrState_Resolved, o que significa que a resposta do endpoint do Diretório de serviços foi recebida.

conecte-se

WEAVE_ERROR connect(
  uint64_t aServiceEp,
  WeaveAuthMode aAuthMode,
  void *aAppState,
  StatusHandler aStatusHandler,
  WeaveConnection::ConnectionCompleteFunct aConnectionCompleteHandler,
  const uint32_t aConnectTimeoutMsecs,
  const InterfaceId aConnectIntf
)

As solicitações desse método se conectam a um serviço Weave.

Esta é a chamada de conexão de nível superior. Essencialmente, ele produz uma conexão segura com o serviço Weave dado um endpoint de serviço e um modo de autenticação ou falha ao tentar.

Esse método só pode ser chamado após uma chamada para init() bem-sucedida, e uma solicitação de conexão pode ser cancelada por cancel().

Esse método pode ser chamado antes que o cache local seja preenchido com dados provisionados padrão ou uma viagem ao serviço de diretório. O Service Manager apenas coloca a solicitação em fila antes que o conteúdo do cache possa ser determinado.

Detalhes
Parâmetros
[in] aServiceEp
O identificador do endpoint do serviço, conforme definido em ServiceDirectory.h, para o serviço de interesse.
[in] aAuthMode
O modo de autenticação a ser usado ao se conectar ao serviço de interesse.
[in] aAppState
Um ponteiro para um objeto de estado do aplicativo, transmitido para os callbacks como um argumento.
[in] aStatusHandler
Um callback para invocar no caso de um erro que ocorre antes da conclusão da conexão.
[in] aConnectionCompleteHandler
Um callback a ser invocado quando a conexão solicitada for concluída. A conexão pode falhar com um código de erro do Weave.
[in] aConnectTimeoutMsecs
O tempo limite de conexão TCP opcional em milissegundos.
[in] aConnectIntf
A interface opcional em que a conexão será estabelecida.
Retorna
WEAVE_NO_ERROR em caso de sucesso. Caso contrário, o código do erro correspondente.

init

WEAVE_ERROR init(
  WeaveExchangeManager *aExchangeMgr,
  uint8_t *aCache,
  uint16_t aCacheLen,
  RootDirectoryAccessor aAccessor,
  WeaveAuthMode aDirAuthMode,
  OnServiceEndpointQueryBegin aServiceEndpointQueryBegin,
  OnServiceEndpointQueryEndWithTimeInfo aServiceEndpointQueryEndWithTimeInfo,
  OnConnectBegin aConnectBegin
)

Esse método inicializa o objeto do gerenciador de serviços.

Para ser usado, um objeto do gerenciador de serviço precisa ser inicializado. Após uma chamada bem-sucedida para esse método, os clientes podem começar a chamar connect(), lookup() e outros métodos.

Detalhes
Parâmetros
[in] aExchangeMgr
Um ponteiro para o gerenciador de trocas que será usado em todas as trocas de perfis do diretório de serviços.
[in] aCache
Um ponteiro para um buffer que pode ser usado para armazenar informações do diretório em cache.
[in] aCacheLen
O tamanho em bytes do cache.
[in] aAccessor
O callback, conforme definido em ServiceDirectory.h para invocar a fim de carregar o diretório raiz como ponto de partida para a pesquisa do diretório.
[in] aDirAuthMode
O modo de autenticação a ser usado ao se comunicar com o serviço de diretório.
[in] aServiceEndpointQueryBegin
Um ponteiro de função do tipo OnServiceEndpointQueryBegin, que é chamado no início de uma solicitação de diretório de serviços e permite que o código do aplicativo marque o horário caso ele queira usar a sincronização de horário oferecida pelo protocolo do diretório de serviços.
[in] aServiceEndpointQueryEndWithTimeInfo
Um ponteiro de função do tipo OnServiceEndpointQueryEndWithTimeInfo, que é chamado ao receber um diretório de serviços que permite que os aplicativos sincronizem com o serviço Weave usando os campos de tempo fornecidos na resposta. Esse callback seria feito depois que o gerente de serviço recebesse uma resposta com informações de tempo. O cache já deve ter sido preenchido antes que o callback seja feito.
[in] aConnectBegin
Um ponteiro de função do tipo OnConnectBegin, que é chamado imediatamente antes do estabelecimento da conexão e permite que os aplicativos observem e, opcionalmente, alterem os argumentos passados para #WeaveConnection::Connect(). Um valor de NULL (padrão) desativa o retorno de chamada.
Retorna
WEAVE_ERROR_INVALID_ARGUMENT se um argumento da função for inválido. Caso contrário, WEAVE_NO_ERROR.

lookup

WEAVE_ERROR lookup(
  uint64_t aServiceEp,
  HostPortList *outHostPortList
)

Esse método pesquisa informações de diretório para um endpoint de serviço.

Se o diretório de serviço tiver sido resolvido, ou seja, se houver uma operação connect() bem-sucedida, esse método preencherá o objeto HostPortList fornecido.

Observação: a HostPortList está vinculada ao objeto WeaveServiceManager. Ela continuará válida até que o cache do diretório de serviços seja limpo ou até que outra pesquisa do diretório de serviços ocorra.

Detalhes
Parâmetros
[in] aServiceEp
O identificador do endpoint do serviço a ser pesquisado.
[out] outHostPortList
O ponteiro para a HostPortList que será preenchida após a pesquisa bem-sucedida da entrada do diretório. Não pode ser NULL.
Valores de retorno
WEAVE_NO_ERROR
em caso de êxito. Caso contrário, os códigos do erro correspondentes.
WEAVE_ERROR_INVALID_SERVICE_EP
caso o endpoint de serviço fornecido não seja encontrado.
WEAVE_ERROR_INVALID_DIRECTORY_ENTRY_TYPE
se o diretório contiver um tipo de entrada de diretório desconhecido.

lookup

WEAVE_ERROR lookup(
  uint64_t aServiceEp,
  uint8_t *aControlByte,
  uint8_t **aDirectoryEntry
)

Esse método pesquisa informações de diretório para um endpoint de serviço.

Se o diretório de serviços tiver sido resolvido, ou seja, se houver uma operação connect() bem-sucedida, esse método retornará uma entrada de diretório, considerando um identificador de endpoint de serviço.

Esse método expõe os detalhes da implementação interna do diretório de serviços. As implementações devem priorizar o uso da variante desse método que gera a HostPortList.

Detalhes
Parâmetros
[in] aServiceEp
O identificador do endpoint do serviço a ser pesquisado.
[out] aControlByte
Um ponteiro para o local em que o byte de controle de entrada do diretório será gravado.
[out] aDirectoryEntry
Um ponteiro de ponteiro a ser direcionado para a entrada do diretório.
Valores de retorno
WEAVE_NO_ERROR
em caso de êxito. Caso contrário, os códigos do erro correspondentes.
WEAVE_ERROR_INVALID_SERVICE_EP
caso o endpoint de serviço fornecido não seja encontrado.
WEAVE_ERROR_INVALID_DIRECTORY_ENTRY_TYPE
se o diretório contiver um tipo de entrada de diretório desconhecido.

onConnectionClosed

void onConnectionClosed(
  WEAVE_ERROR aError
)

Esse método lida com o evento de conexão encerrada informado pelo contexto de troca do Weave associado.

Detalhes
Parâmetros
[in] aError
Um erro do Weave indicando o motivo do encerramento dessa conexão.

onConnectionComplete

void onConnectionComplete(
  WEAVE_ERROR aError
)

Esse método processa o evento de conexão concluída para a transação de consulta do endpoint do serviço.

Há algumas possibilidades. Primeiro, a conexão pode ter falhado. Nesse caso, terminamos o processo. Caso contrário, a conexão estará realmente concluída e o que queremos fazer é abrir um contexto de troca e enviar uma consulta de diretório.

Detalhes
Parâmetros
[in] aError
Um erro do Weave se houver algum erro durante a configuração da conexão.

onResponseReceived

void onResponseReceived(
  uint32_t aProfileId,
  uint8_t aMsgType,
  PacketBuffer *aMsg
)

Esse método lida com qualquer mensagem de resposta na conversa com o serviço de diretório.

Detalhes
Parâmetros
[in] aProfileId
O ID do perfil da mensagem recebida.
[in] aMsgType
O tipo específico do perfil para esta mensagem.
[in] aMsg
O conteúdo da mensagem.

onResponseTimeout

void onResponseTimeout(
  void
)

Este método lida com o evento de tempo limite, no qual nenhuma resposta foi recebida do serviço de diretório.

transferir

void relocate(
  WEAVE_ERROR aError
)

Esse método realoca o cache do diretório de serviços.

Quando um ponto de extremidade de serviço retorna um relatório de status com o código de status kStatus_Relocations, o aplicativo pode chamar unresolve() para limpar o cache e cancelar solicitações de conexão. Esse método simplifica o tratamento de erros chamando unresolve() na primeira vez e reset() se o problema ainda não tiver sido resolvido.

Essa versão do método, aqui para compatibilidade com versões anteriores, toma e registra um erro, depois chama relocate(void) .

Detalhes
Parâmetros
[in] aError
um erro a ser registrado.
Consulte também:
relocate(void)

transferir

void relocate(
  void
)

Esse método realoca o cache do diretório de serviços.

Quando um ponto de extremidade de serviço retorna um relatório de status com o código de status kStatus_Relocations, o aplicativo pode chamar unresolve() para limpar o cache e cancelar solicitações de conexão. Esse método simplifica o tratamento de erros chamando unresolve() na primeira vez e reset() se o problema ainda não tiver sido resolvido.

Consulte também:
relocate(WEAVE_ERROR)

replaceOrAddCacheEntry

WEAVE_ERROR replaceOrAddCacheEntry(
  uint16_t port,
  const char *hostName,
  uint8_t hostLen,
  uint64_t serviceEndpointId
)

Adicione a entrada de diretório modificada de um nome do host e um ID de porta no início da lista de diretórios.

redefinir

void reset(
  WEAVE_ERROR aError
)

Esse método redefine o gerenciador de serviço para o estado inicial.

Esse método redefine todos os estados do gerenciador de serviços, incluindo o estado das comunicações, do cache e de todas as solicitações de conexão pendentes.

Esta versão do método, aqui para compatibilidade com versões anteriores, toma e registra um erro e depois chama reset(void) .

Detalhes
Parâmetros
[in] aError
O erro que acionou esta operação.
Consulte também:
reset(void)

redefinir

void reset(
  void
)

Esse método redefine o gerenciador de serviço para o estado inicial.

Esse método redefine todos os estados do gerenciador de serviços, incluindo o estado das comunicações, do cache e de todas as solicitações de conexão pendentes.

Consulte também:
reset(WEAVE_ERROR)

não resolvido

void unresolve(
  WEAVE_ERROR aError
)

Este método invalida o cache do diretório de serviços.

Esse método define o estado do cache do diretório de serviços para que, na próxima solicitação, o gerenciador de serviços emita uma consulta ao diretório de serviços.

Esta versão do método, aqui para compatibilidade com versões anteriores, toma e registra um erro e depois chama unresolve(void) .

Detalhes
Parâmetros
[in] aError
O erro que acionou esta operação.
Consulte também:
unresolve(void)

não resolvido

void unresolve(
  void
)

Este método invalida o cache do diretório de serviços.

Esse método define o estado do cache do diretório de serviços para que, na próxima solicitação, o gerenciador de serviços emita uma consulta ao diretório de serviços.

Consulte também:
unresolve(WEAVE_ERROR)

~WeaveServiceManager

 ~WeaveServiceManager(
  void
)

Este método destrói a instância do WeaveServiceManager.