нл:: Переплетение:: Связывание

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

Захватывает предполагаемую цель связи Weave и связанную с ней информацию о конфигурации.

Краткое содержание

Объект Binding идентифицирует предполагаемую цель связи Weave (также известную как «одноранговый узел»), а также набор параметров конфигурации, описывающих, как должна происходить связь с одноранговым узлом. Привязки не зависят от протокола приложения, используемого между двумя сторонами. По существу, они фиксируют «кто» и «как» коммуникации, но не «что».

Конфигурация

Приложения должны настроить привязку с параметрами, соответствующими типу желаемого канала связи. Привязки обеспечивают поддержку ряда сетевых транспортов, включая TCP, UDP, UDP с Weave Reliable Messaging и Weave over BLE (WoBLE). Приложения также могут запрашивать использование определенных механизмов безопасности для защиты сообщений, передаваемых между сторонами. К ним относятся сеансы CASE и PASE, а также ключи групп приложений. Интерфейс для настройки привязки использует декларативный стиль API, который позволяет приложениям простыми словами заявлять свои требования к связи.

Дополнительную информацию см. в документации по Binding::Configuration .

Подготовка

Прежде чем произойдет обмен данными, привязка должна быть «подготовлена». Процесс подготовки привязки включает в себя установление необходимого состояния для осуществления связи. Это может включать в себя такие вещи, как определение сетевого адреса узла, установление сетевого подключения и согласование ключей безопасности. После настройки приложением Binding берет на себя все шаги, необходимые для подготовки к обмену данными, возвращаясь к приложению после завершения процесса. Таким образом, привязки скрывают механизм взаимодействия, позволяя приложениям сосредоточиться на взаимодействиях высокого уровня.

Коммуникация

Как только привязка подготовлена, она становится готовой к использованию. В этом состоянии приложения (или, чаще, код уровня протокола, работающий от имени приложения) запрашивают привязку для выделения контекста обмена Weave. Результирующий контекст обмена предварительно настроен для связи, что позволяет приложению немедленно инициировать обмен Weave с партнером. Приложение может продолжать запрашивать контексты обмена у Привязки до тех пор, пока Привязка не будет закрыта или какое-либо событие, например, сбой в сети, не завершит базовый канал связи.

Привязка изменений состояния

В ходе использования привязка будет доставлять события API приложению, информируя его об изменениях в состоянии привязки . Например, если подготовка прошла успешно, приложение получит событие, информирующее его о том, что привязка готова к использованию. Аналогичным образом, если базовый канал связи выходит из строя, приложению доставляется событие, информирующее его о том, что привязка больше не находится в состоянии готовности.

События API доставляются в приложение через функцию обратного вызова событий, предоставляемую при выделении привязки .

Срок действия привязки

Привязка учитывает количество ссылок, что позволяет совместно использовать несколько компонентов программного обеспечения. При выделении привязки создается одна ссылка на привязку. Приложение несет ответственность за выпуск этой ссылки в какой-то момент в будущем, чтобы привязка была свободна для последующего повторного использования.

Когда приложение завершает работу с привязкой, оно может вызвать Close() для привязки. Это освобождает ссылку приложения на привязку и блокирует всю дальнейшую доставку событий API. Когда последняя ссылка на привязку освобождается, она автоматически закрывается.

Публичные типы

@23 {
kGetPeerDescription_MaxLength = nl::Weave::kWeavePeerDescription_MaxLength
}
перечисление
EventCallback )(void *apAppState, EventType aEvent, const InEventParam &aInParam, OutEventParam &aOutParam) определение типа
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
}
перечисление
State перечисление

Публичные атрибуты

AppState
void *

Общественные функции

AddRef (void)
void
Зарезервируйте ссылку на объект привязки.
AdjustResponseTimeout ( ExchangeContext *apExchangeContext) const
Перенастройте существующий контекст Exchange, чтобы настроить время ожидания ответа.
AllocateRightSizedBuffer (PacketBuffer *& buf, const uint32_t desiredSize, const uint32_t minSize, uint32_t & outMaxPayloadSize)
BeginConfiguration ()
Это процесс настройки Binding .
CanBePrepared (void) const
bool
Close (void)
void
Закройте объект привязки и освободите ссылку.
GetConnection () const
Получите объект соединения Weave, связанный с привязкой.
GetDefaultResponseTimeout () const
uint32_t
Получите тайм-аут ответа обмена по умолчанию, который будет использоваться при общении с партнером.
GetDefaultWRMPConfig (void) const
const WRMPConfig &
Получите конфигурацию WRMP по умолчанию, которая будет использоваться при общении с партнером.
GetEncryptionType (void) const
uint8_t
Получите тип шифрования сообщения, который будет использоваться при шифровании сообщений, поступающих и исходящих от однорангового узла.
GetEventCallback () const
EventCallback
Получите функцию, которая будет вызываться при возникновении события API для Binding .
GetExchangeManager () const
GetKeyId (void) const
uint32_t
Получите идентификатор ключа шифрования сообщения, который будет использоваться при шифровании сообщений к одноранговому узлу или от него.
GetLogId (void) const
uint16_t
Получите уникальный идентификатор для привязки.
GetMaxWeavePayloadSize (const System::PacketBuffer *msgBuf)
uint32_t
Получите максимальный размер полезных данных Weave, который может поместиться внутри предоставленного PacketBuffer.
GetPeerDescription (char *buf, uint32_t bufSize) const
void
Создает строку, описывающую одноранговый узел и связанную с ним информацию об адресе/соединении.
GetPeerIPAddress ( nl::Inet::IPAddress & address, uint16_t & port, InterfaceId & interfaceId) const
void
Получите информацию об IP-адресе узла, если таковая имеется.
GetPeerNodeId (void) const
uint64_t
Получите идентификатор узла узла привязки.
GetProtocolLayerCallback (EventCallback & callback, void *& state) const
void
GetState (void) const
State
Получить текущее состояние привязки.
IsAuthenticMessageFromPeer (const WeaveMessageInfo *msgInfo)
bool
Определите, пришло ли конкретное входящее сообщение от настроенного узла и прошло ли соответствующую проверку подлинности.
IsConnectionTransport () const
bool
IsPreparing (void) const
bool
IsReady (void) const
bool
IsUDPTransport () const
bool
IsUnreliableUDPTransport () const
bool
IsWRMTransport () const
bool
NewExchangeContext ( ExchangeContext *& appExchangeContext)
Выделите новый контекст обмена для связи с одноранговым узлом, который является целью привязки.
Release (void)
void
Освободите ссылку на объект привязки.
RequestPrepare ()
Запросите приложение для настройки и подготовки Binding .
Reset (void)
void
Верните привязку в ненастроенное состояние.
SetDefaultResponseTimeout (uint32_t msec)
void
Установите тайм-аут ответа обмена по умолчанию, который будет использоваться при общении с партнером.
SetDefaultWRMPConfig (const WRMPConfig & wrmpConfig)
void
Установите конфигурацию WRMP по умолчанию, которая будет использоваться при общении с партнером.
SetEventCallback (EventCallback aEventCallback)
void
Установите определяемую приложением функцию, которая будет вызываться при возникновении события API для Binding .
SetProtocolLayerCallback (EventCallback callback, void *state)
void
Установите функцию обратного вызова события для кода уровня протокола с помощью привязки от имени приложения.

Публичные статические функции

DefaultEventHandler (void *apAppState, EventType aEvent, const InEventParam & aInParam, OutEventParam & aOutParam)
void
Обработчик по умолчанию для привязки событий API.

Классы

nl:: Weave:: Привязка:: Конфигурация

Предоставляет интерфейс в декларативном стиле для настройки и подготовки объекта Binding .

Структуры

nl:: Weave:: Binding:: InEventParam

Входные параметры для события Binding API.

nl:: Weave:: Binding:: OutEventParam

Выходные параметры для события Binding API.

Публичные типы

@23

 @23
Характеристики
kGetPeerDescription_MaxLength

Максимальная длина строки (включая символ NUL), возвращаемой GetPeerDescription() .

Обратный вызов события

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

тип события

 EventType
Характеристики
kEvent_BindingFailed

Привязка не удалась, и ее больше нельзя использовать для связи с партнером.

kEvent_BindingReady

Действие подготовки к привязке выполнено успешно, и теперь привязку можно использовать для связи с партнером.

kEvent_ConnectionEstablished

Запрошенное соединение Weave установлено.

kEvent_DefaultCheck

Используется для проверки правильности обработки событий по умолчанию в приложении.

kEvent_PASEParametersRequested

Приложению предлагается предоставить параметры, которые будут использоваться во время установления сеанса PASE.

kEvent_PrepareFailed

Не удалось выполнить действие подготовки к привязке.

kEvent_PrepareRequested

Приложению предлагается настроить и подготовить привязку для использования сетевым стеком.

kEvent_TAKEParametersRequested

Приложению предлагается предоставить параметры, которые будут использоваться во время установления сеанса TAKE.

Состояние

 State

Публичные атрибуты

состояние приложения

void * AppState

Общественные функции

ДобавитьСсылку

void AddRef(
  void
)

Зарезервируйте ссылку на объект привязки.

НастроитьResponseTimeout

WEAVE_ERROR AdjustResponseTimeout(
  ExchangeContext *apExchangeContext
) const 

Перенастройте существующий контекст Exchange, чтобы настроить время ожидания ответа.

Подробности
Параметры
[in] apExchangeContext
Указатель на объект контекста Exchange, который необходимо перенастроить.

ВыделитьRightSizedBuffer

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

Началоконфигурации

Configuration BeginConfiguration()

Это процесс настройки Binding .

Приложения должны вызвать BeginConfiguration() , чтобы настроить привязку перед ее подготовкой к обмену данными с одноранговым узлом.

Подробности
Возврат
Объект Binding::Configuration , который можно использовать для настройки привязки.

CanBePrepared

bool CanBePrepared(
  void
) const 

Закрывать

void Close(
  void
)

Закройте объект привязки и освободите ссылку.

При вызове этот метод переводит привязку в закрытое состояние. Все текущие действия по подготовке привязки отменяются, а все внешние коммуникационные ресурсы, удерживаемые привязкой, освобождаются.

Вызов Close() уменьшает счетчик ссылок, связанный с привязкой, освобождая объект, если счетчик ссылок становится равным нулю.

GetConnection

WeaveConnection * GetConnection() const 

Получите объект соединения Weave, связанный с привязкой.

Подробности
Возврат
Указатель на объект WeaveConnection или NULL, если с привязкой не связано соединение.

GetDefaultResponseTimeout

uint32_t GetDefaultResponseTimeout() const 

Получите тайм-аут ответа обмена по умолчанию, который будет использоваться при общении с партнером.

Подробности
Возврат
Таймаут ответа в мс.

GetDefaultWRMPConfig

const WRMPConfig & GetDefaultWRMPConfig(
  void
) const 

Получите конфигурацию WRMP по умолчанию, которая будет использоваться при общении с партнером.

Подробности
Возврат
Ссылка на структуру WRMPConfig , содержащую значения конфигурации по умолчанию.

GetEncryptionType

uint8_t GetEncryptionType(
  void
) const 

Получите тип шифрования сообщения, который будет использоваться при шифровании сообщений, поступающих и исходящих от однорангового узла.

GetEventCallback

EventCallback GetEventCallback() const 

Получите функцию, которая будет вызываться при возникновении события API для Binding .

Подробности
Возврат
Указатель на функцию обратного вызова.

GetExchangeManager

WeaveExchangeManager * GetExchangeManager() const 

GetKeyId

uint32_t GetKeyId(
  void
) const 

Получите идентификатор ключа шифрования сообщения, который будет использоваться при шифровании сообщений к одноранговому узлу или от него.

GetLogId

uint16_t GetLogId(
  void
) const 

Получите уникальный идентификатор для привязки.

GetMaxWeavePayloadSize

uint32_t GetMaxWeavePayloadSize(
  const System::PacketBuffer *msgBuf
)

Получите максимальный размер полезных данных Weave, который может поместиться внутри предоставленного PacketBuffer.

Для UDP, включая UDP с WRM, максимальный возвращаемый размер полезных данных гарантирует, что результирующее сообщение Weave не переполнит настроенный UDP MTU.

Кроме того, этот метод гарантирует, что полезная нагрузка Weave не переполнит предоставленный PacketBuffer.

Подробности
Параметры
[in] msgBuf
Указатель на PacketBuffer, в который будут записаны полезные данные сообщения.
Возврат
Максимальный размер полезной нагрузки Weave.

GetPeerDescription

void GetPeerDescription(
  char *buf,
  uint32_t bufSize
) const 

Создает строку, описывающую одноранговый узел и связанную с ним информацию об адресе/соединении.

Подробности
Параметры
[in] buf
Указатель на буфер, в который должна быть записана строка. Предоставляемый буфер должен быть по крайней мере такого же размера, как kGetPeerDescription_MaxLength. Если задан меньший буфер, строка будет усечена, чтобы соответствовать размеру. Во всех случаях выходные данные будут содержать символ завершения NUL.
[in] bufSize
Размер буфера, на который указывает buf.

ПолучитьPeerIP-адрес

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

Получите информацию об IP-адресе узла, если таковая имеется.

Доступность информации об IP-адресе узла зависит от состояния и конфигурации привязки. Информация об IP-адресе доступна только при использовании транспорта на основе IP (TCP, UDP или UDP с WRMP). До начала подготовки информация об адресе доступна только в том случае, если она была явно задана приложением при настройке. На этапе подготовки информация об адресе доступна после завершения подготовки адреса (например, после завершения разрешения DNS). После того как привязка готова, информация об адресе остается доступной до тех пор, пока привязка не будет сброшена.

Подробности
Параметры
[out] address
Ссылка на объект IPAddress, который получит IP-адрес узла. Если информация об IP-адресе узла недоступна, для этого значения будет установлено значение IPAddress::Any .
[out] port
Ссылка на целое число, которое получит номер порта узла. Если информация об IP-адресе узла недоступна, это значение не определено.
[out] interfaceId
Ссылка на целое число, которое получит идентификатор сетевого интерфейса, через который можно связаться с узлом. Если информация об IP-адресе узла недоступна, это значение не определено.

GetPeerNodeId

uint64_t GetPeerNodeId(
  void
) const 

Получите идентификатор узла узла привязки.

Действует только после подготовки объекта привязки.

Подробности
Возврат
Идентификатор узла Weave узла

Обратный вызов GetProtocolLayer

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

GetState

State GetState(
  void
) const 

Получить текущее состояние привязки.

Подробности
Возврат
Обязательное состояние.

IsAuthenticMessageFromPeer

bool IsAuthenticMessageFromPeer(
  const WeaveMessageInfo *msgInfo
)

Определите, пришло ли конкретное входящее сообщение от настроенного узла и прошло ли соответствующую проверку подлинности.

Этот метод подтверждает следующие сведения о данном сообщении:

  • Сообщение исходило от однорангового узла привязки.
  • Сообщение было получено по тому же типу транспорта, что и привязка. Если сообщение было получено через соединение, метод также подтверждает, что сообщение было получено через точное соединение, связанное с привязкой.
  • Ключ шифрования и тип, используемые для шифрования сообщения, соответствуют тем, которые настроены в привязке. Для привязок, настроенных без использования безопасности, метод подтверждает, что входящее сообщение НЕ зашифровано.

Этот метод предназначен для использования в таких протоколах, как WDM, где одноранговые узлы могут спонтанно инициировать обмен обратно с локальным узлом после первоначального обмена от узла к одноранговому узлу. В таких случаях метод позволяет локальному узлу подтвердить, что входящее незапрошенное сообщение было отправлено соответствующим узлом. (Конечно, для привязок, настроенных без использования шифрования сообщений, это утверждение не имеет никакой ценности с точки зрения безопасности. Оно просто подтверждает, что идентификатор узла отправителя и типы транспорта совпадают.)

Обратите внимание: если привязка не находится в состоянии Ready, этот метод всегда будет возвращать false.

Подробности
Параметры
[in] msgInfo
Информация сообщения Weave для входящего сообщения.
Возврат
Истинно, если сообщение действительно получено от узла.

IsConnectionTransport

bool IsConnectionTransport() const 

IsPreparing

bool IsPreparing(
  void
) const 

Подробности
Возврат
Истинно, если привязка в данный момент готовится.

Готово

bool IsReady(
  void
) const 

Подробности
Возврат
Истинно, если привязка находится в состоянии готовности.

ИсУДПТранспорт

bool IsUDPTransport() const 

IsUnreliableUDPTransport

bool IsUnreliableUDPTransport() const 

IsWRMTransport

bool IsWRMTransport() const 

НовыйExchangeContext

WEAVE_ERROR NewExchangeContext(
  ExchangeContext *& appExchangeContext
)

Выделите новый контекст обмена для связи с одноранговым узлом, который является целью привязки.

Подробности
Параметры
[out] appExchangeContext
Ссылка на указатель, который получит вновь выделенный объект контекста Exchange. Указатель будет установлен в NULL в случае сбоя метода.
Возвращаемые значения
WEAVE_NO_ERROR
Если контекст обмена был успешно выделен.
WEAVE_ERROR_NO_MEMORY
Если не было доступной памяти для выделения контекста обмена.
WEAVE_ERROR_INCORRECT_STATE
Если привязка не находится в состоянии «Готово».
other
Другие ошибки, связанные с настройкой контекста обмена на основе конфигурации привязки.

Выпускать

void Release(
  void
)

Освободите ссылку на объект привязки.

Если ссылок на объект привязки больше нет, привязка закрывается и освобождается.

ЗапросПодготовка

WEAVE_ERROR RequestPrepare()

Запросите приложение для настройки и подготовки Binding .

Код уровня протокола может использовать этот метод для привязки , которая не была настроена или произошла ошибка, чтобы инициировать событие для приложения (kEvent_PrepareRequested), запрашивающее настройку и подготовку привязки к использованию.

Этот метод можно вызвать только для привязок в состояниях NotConfigured или Failed.

Если приложение не поддерживает настройку/подготовку привязок по требованию, метод завершится с ошибкой WEAVE_ERROR_NOT_IMPLEMENTED.

Перезагрузить

void Reset(
  void
)

Верните привязку в ненастроенное состояние.

При вызове Reset() все выполняемые действия по подготовке привязки отменяются, а все внешние коммуникационные ресурсы, удерживаемые привязкой, освобождаются. Reset() переводит привязку в ненастроенное состояние, после чего ее можно настроить и подготовить снова.

Reset() не изменяет счетчик ссылок привязки.

SetDefaultResponseTimeout

void SetDefaultResponseTimeout(
  uint32_t msec
)

Установите тайм-аут ответа обмена по умолчанию, который будет использоваться при общении с партнером.

Подробности
Параметры
[in] timeout
Новый таймаут ответа в мс.

Установить по умолчаниюWRMPConfig

void SetDefaultWRMPConfig(
  const WRMPConfig & wrmpConfig
)

Установите конфигурацию WRMP по умолчанию, которая будет использоваться при общении с партнером.

Подробности
Параметры
[in] aWRMPConfig
Ссылка на структуру WRMPConfig , содержащую новую конфигурацию по умолчанию.

SetEventCallback

void SetEventCallback(
  EventCallback aEventCallback
)

Установите определяемую приложением функцию, которая будет вызываться при возникновении события API для Binding .

Подробности
Параметры
[in] aEventCallback
Указатель на функцию обратного вызова.

SetProtocolLayerОбратный вызов

void SetProtocolLayerCallback(
  EventCallback callback,
  void *state
)

Установите функцию обратного вызова события для кода уровня протокола с помощью привязки от имени приложения.

Эта функция будет вызываться в дополнение к функции обратного вызова, определяемой приложением, когда для Binding происходят события API.

Подробности
Параметры
[in] callback
Указатель на функцию обратного вызова.
[in] state
Указатель на объект состояния, который будет передан в код уровня протокола при выполнении обратного вызова уровня протокола.

Публичные статические функции

Обработчик событий по умолчанию

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

Обработчик по умолчанию для привязки событий API.

Приложения должны вызывать этот метод для любых событий API, которые они не распознают или не обрабатывают. Предоставляемые параметры должны быть такими же, как те, которые передаются привязкой к функции обработчика событий приложения.

Подробности
Параметры
[in] apAppState
Указатель на определяемую приложением информацию о состоянии, связанную с привязкой.
[in] aEvent
Идентификатор события, передаваемый обратным вызовом события
[in] aInParam
Ссылка на параметры входного события, передаваемые обратным вызовом события
[in] aOutParam
Ссылка на параметры выходного события, передаваемые обратным вызовом события