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{
|
enum : перечисление |
EventCallback)(void *apAppState, EventType aEvent, const InEventParam &aInParam, OutEventParam &aOutParam)
|
typedefvoid(*
|
EventType{
|
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:: |
Предоставляет интерфейс в декларативном стиле для настройки и подготовки объекта Binding. |
Структуры |
|
|---|---|
|
nl:: |
Входные параметры для события API Binding. |
|
nl:: |
Передавать параметры в событие 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
Измените настройки существующего контекста обмена, чтобы скорректировать время ожидания ответа.
| Сведения | |||
|---|---|---|---|
| Параметры |
|
||
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.
| Сведения | |||
|---|---|---|---|
| Параметры |
|
||
| Возвраты |
Максимальный размер полезной нагрузки Weave.
|
||
GetPeerDescription
void GetPeerDescription( char *buf, uint32_t bufSize ) const
Создает строку с описанием узла и связанной с ним информации об адресе или подключении.
| Сведения | |||||
|---|---|---|---|---|---|
| Параметры |
|
||||
GetPeerIPAddress
void GetPeerIPAddress( nl::Inet::IPAddress & address, uint16_t & port, InterfaceId & interfaceId ) const
Получите информацию об IP-адресе для узла, если она доступна.
Доступность информации об IP-адресе зависит от состояния и конфигурации привязки. Информация об IP-адресе доступна только при использовании транспорта на основе IP (TCP, UDP или UDP с WRMP). До начала подготовки информация об адресе доступна, только если она была явно задана приложением во время настройки. На этапе подготовки информация об адресе доступна после завершения подготовки адреса (например, после завершения DNS-преобразования). После того как привязка будет готова, информация об адресе останется доступной до сброса привязки.
| Сведения | |||||||
|---|---|---|---|---|---|---|---|
| Параметры |
|
||||||
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.
| Сведения | |||
|---|---|---|---|
| Параметры |
|
||
| Возвраты |
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 )
Выделите новый контекст обмена для связи с узлом, который является целью привязки.
| Сведения | |||||||||
|---|---|---|---|---|---|---|---|---|---|
| Параметры |
|
||||||||
| Возвращаемые значения |
|
||||||||
Освободить
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 )
Установите тайм-аут ответа по умолчанию, который будет использоваться при обмене данными с другим устройством.
| Сведения | |||
|---|---|---|---|
| Параметры |
|
||
SetDefaultWRMPConfig
void SetDefaultWRMPConfig( const WRMPConfig & wrmpConfig )
Задайте конфигурацию WRMP по умолчанию, которая будет использоваться при взаимодействии с узлом.
| Сведения | |||
|---|---|---|---|
| Параметры |
|
||
SetEventCallback
void SetEventCallback( EventCallback aEventCallback )
Задает функцию, определенную приложением, которая будет вызываться при возникновении события API для Binding.
| Сведения | |||
|---|---|---|---|
| Параметры |
|
||
SetProtocolLayerCallback
void SetProtocolLayerCallback( EventCallback callback, void *state )
Задайте функцию обратного вызова для кода уровня протокола, используя Binding от имени приложения.
Эта функция будет вызываться в дополнение к функции обратного вызова, определенной приложением, когда для Binding происходят события API.
| Сведения | |||||
|---|---|---|---|---|---|
| Параметры |
|
||||
Общедоступные статические функции
DefaultEventHandler
void DefaultEventHandler( void *apAppState, EventType aEvent, const InEventParam & aInParam, OutEventParam & aOutParam )
Обработчик по умолчанию для привязки событий API.
Приложения должны вызывать этот метод для любых событий API, которые они не распознают или не обрабатывают. Указанные параметры должны совпадать с теми, которые передаются привязкой в функцию обработчика событий приложения.
| Сведения | |||||||||
|---|---|---|---|---|---|---|---|---|---|
| Параметры |
|
||||||||