nl::Weave::Binding

#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 с одноранговым узлом. Приложение может продолжать запрашивать контексты обмена у привязки до тех пор, пока привязка не будет закрыта или какое-либо событие, например сбой сети, не приведет к закрытию базового канала связи.

Изменения состояния привязки

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

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

Привязка (за все время)

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

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

Общедоступные типы

@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 : перечисление

Общедоступные атрибуты

AppState
void *

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

AddRef(void)
void
Сохраните ссылку на объект привязки.
AdjustResponseTimeout(ExchangeContext *apExchangeContext) const
Настроить существующий контекст обмена, чтобы изменить время ожидания ответа.
AllocateRightSizedBuffer(PacketBuffer *& buf, const uint32_t desiredSize, const uint32_t minSize, uint32_t & outMaxPayloadSize)
BeginConfiguration()
Процесс настройки привязки.
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()
Запросите у приложения настроить и подготовить привязку.
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::Configuration

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

Структуры

nl::Weave::Binding::InEventParam

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

nl::Weave::Binding::OutEventParam

Передавать параметры в событие API Binding.

Общедоступные типы

@23

 @23
Свойства
kGetPeerDescription_MaxLength

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

EventCallback

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

EventType

 EventType
Свойства
kEvent_BindingFailed

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

kEvent_BindingReady

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

kEvent_ConnectionEstablished

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

kEvent_DefaultCheck

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

kEvent_PASEParametersRequested

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

kEvent_PrepareFailed

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

kEvent_PrepareRequested

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

kEvent_TAKEParametersRequested

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

Штат

 State

Общедоступные атрибуты

AppState

void * AppState

Общедоступные функции

AddRef

void AddRef(
  void
)

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

AdjustResponseTimeout

WEAVE_ERROR AdjustResponseTimeout(
  ExchangeContext *apExchangeContext
) const 

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

Сведения
Параметры
[in] apExchangeContext
Указатель на объект контекста обмена, который нужно перенастроить.

AllocateRightSizedBuffer

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

BeginConfiguration

Configuration BeginConfiguration()

Процесс настройки привязки.

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

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

CanBePrepared

bool CanBePrepared(
  void
) const 

Закрыть

void Close(
  void
)

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

При вызове этого метода привязка переходит в состояние Closed (Закрыто). Все выполняемые действия по подготовке привязки отменяются, а все ресурсы внешней связи, удерживаемые привязкой, освобождаются.

Вызов 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.

GetPeerIPAddress

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 для устройства-конкурента

GetProtocolLayerCallback

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

GetState

State GetState(
  void
) const 

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

Сведения
Возвраты
Состояние привязки.

IsAuthenticMessageFromPeer

bool IsAuthenticMessageFromPeer(
  const WeaveMessageInfo *msgInfo
)

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

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

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

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

Если привязка не находится в состоянии "Готово", этот метод всегда возвращает значение false.

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

IsConnectionTransport

bool IsConnectionTransport() const 

IsPreparing

bool IsPreparing(
  void
) const 

Сведения
Возвраты
True, если привязка в настоящее время подготавливается.

IsReady

bool IsReady(
  void
) const 

Сведения
Возвраты
True, если Binding находится в состоянии Ready.

IsUDPTransport

bool IsUDPTransport() const 

IsUnreliableUDPTransport

bool IsUnreliableUDPTransport() const 

IsWRMTransport

bool IsWRMTransport() const 

NewExchangeContext

WEAVE_ERROR NewExchangeContext(
  ExchangeContext *& appExchangeContext
)

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

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

Освободить

void Release(
  void
)

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

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

RequestPrepare

WEAVE_ERROR RequestPrepare()

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

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

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

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

Сбросить

void Reset(
  void
)

Сбросить привязку до состояния "Не настроено".

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

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

SetDefaultResponseTimeout

void SetDefaultResponseTimeout(
  uint32_t msec
)

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

Сведения
Параметры
[in] timeout
Новое время ожидания ответа в миллисекундах.

SetDefaultWRMPConfig

void SetDefaultWRMPConfig(
  const WRMPConfig & wrmpConfig
)

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

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

SetEventCallback

void SetEventCallback(
  EventCallback aEventCallback
)

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

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

SetProtocolLayerCallback

void SetProtocolLayerCallback(
  EventCallback callback,
  void *state
)

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

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

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

Общедоступные статические функции

DefaultEventHandler

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

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

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

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