nl::Weave::Binding

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

Weave 통신의 의도된 대상과 관련 구성 정보를 캡처합니다.

요약

Binding 객체는 피어와의 통신 방법을 설명하는 구성 매개변수 집합과 함께 Weave 통신의 의도된 대상('피어'라고도 함)을 식별합니다. 바인딩은 두 당사자 간에 사용되는 애플리케이션 프로토콜과는 별개입니다. 따라서 커뮤니케이션의 '누구'와 '방법'은 포착하지만 '무엇'은 포착하지 않습니다.

구성

애플리케이션은 원하는 통신 채널 유형에 맞는 매개변수를 사용하여 Binding을 구성해야 합니다. 바인딩은 Weave Reliable Messaging을 사용한 TCP, UDP, UDP 및 Weave over BLE (WoBLE)를 포함한 다양한 네트워크 전송을 지원합니다. 또한 애플리케이션에서는 당사자 간에 전송된 메시지를 보호하기 위해 특정 보안 메커니즘의 사용을 요청할 수 있습니다. 여기에는 CASE 및 PASE 세션과 애플리케이션 그룹 키가 포함됩니다. Binding 구성을 위한 인터페이스는 선언적 API 스타일을 사용합니다. 이를 통해 애플리케이션이 통신 요구사항을 간단하게 명시할 수 있습니다.

자세한 내용은 Binding::Configuration 문서를 참고하세요.

준비

통신이 이루어지기 전에 Binding이 'prepared'되어야 합니다. 바인딩을 준비하는 작업에는 통신이 발생하는 데 필요한 상태를 설정하는 작업이 포함됩니다. 여기에는 피어의 네트워크 주소 확인, 네트워크 연결 설정, 보안 키 협상 등이 포함될 수 있습니다. 애플리케이션에서 구성한 후 Binding은 통신을 준비하는 데 필요한 모든 단계를 처리하고 프로세스가 완료되면 애플리케이션을 다시 호출합니다. 이런 식으로 바인딩은 통신의 메커니즘을 숨겨 애플리케이션이 상위 수준의 상호작용에 집중할 수 있게 해줍니다.

커뮤니케이션

결합이 준비되면 사용할 수 있습니다. 이 상태에서 애플리케이션 (또는 애플리케이션을 대신하여 작동하는 프로토콜 레이어 코드)은 Binding을 요청하여 Weave 교환 컨텍스트를 할당합니다. 결과로 반환되는 교환 컨텍스트는 통신에 대해 사전 구성되어 있으므로 애플리케이션이 피어와 Weave 교환을 즉시 시작할 수 있습니다. 애플리케이션은 결합이 종료되거나 일부 이벤트(예: 네트워크 장애)가 기본 통신 채널을 종료할 때까지 결합에서 교환 컨텍스트를 계속 요청할 수 있습니다.

바인딩 상태 변경사항

Binding은 사용하는 동안 애플리케이션에 API 이벤트를 전달하여 Binding 상태의 변경을 알립니다. 예를 들어 준비가 성공하면 애플리케이션은 결합을 사용할 준비가 되었음을 알리는 이벤트를 수신합니다. 마찬가지로 기본 통신 채널에 장애가 발생하면 애플리케이션에 이벤트가 전달되어 Binding이 더 이상 준비 상태가 아님을 알립니다.

API 이벤트는 Binding이 할당될 때 제공되는 이벤트 콜백 함수를 통해 애플리케이션에 전달됩니다.

바인딩 수명

결합은 여러 소프트웨어 구성요소 간에 공유 사용을 허용하기 위해 참조로 계산됩니다. 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
기존 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
Binding에 대해 API 이벤트가 발생할 때 호출될 함수를 가져옵니다.
GetExchangeManager() const
GetKeyId(void) const
uint32_t
피어로 메시지를 암호화할 때 사용할 메시지 암호화 키의 ID를 검색합니다.
GetLogId(void) const
uint16_t
결합의 고유 ID를 가져옵니다.
GetMaxWeavePayloadSize(const System::PacketBuffer *msgBuf)
uint32_t
제공된 PacketBuffer에 들어갈 수 있는 최대 Weave 페이로드 크기를 가져옵니다.
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
결합 피어의 노드 ID를 가져옵니다.
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)
바인딩 대상인 피어와 통신하기 위해 새 Exchange 컨텍스트를 할당합니다.
Release(void)
void
결합 객체에 대한 참조를 해제합니다.
RequestPrepare()
결합을 구성하고 준비하도록 애플리케이션에 요청합니다.
Reset(void)
void
바인딩을 구성되지 않은 상태로 다시 재설정합니다.
SetDefaultResponseTimeout(uint32_t msec)
void
피어와 통신할 때 사용할 기본 교환 응답 제한 시간을 설정합니다.
SetDefaultWRMPConfig(const WRMPConfig & wrmpConfig)
void
피어와 통신할 때 사용할 기본 WRMP 구성을 설정합니다.
SetEventCallback(EventCallback aEventCallback)
void
Binding에 대해 API 이벤트가 발생할 때 호출될 애플리케이션 정의 함수를 설정합니다.
SetProtocolLayerCallback(EventCallback callback, void *state)
void
애플리케이션을 대신하여 Binding을 사용하여 프로토콜 레이어 코드에 대한 이벤트 콜백 함수를 설정합니다.

공개 정적 함수

DefaultEventHandler(void *apAppState, EventType aEvent, const InEventParam & aInParam, OutEventParam & aOutParam)
void
API 이벤트 결합을 위한 기본 핸들러입니다.

클래스

nl::Weave::Binding::Configuration

Binding 객체를 구성하고 준비하기 위한 선언적 스타일의 인터페이스를 제공합니다.

구조체

nl::Weave::Binding::InEventParam

Binding API 이벤트에 대한 입력 매개변수

nl::Weave::Binding::OutEventParam

Binding API 이벤트에 대한 출력 매개변수

공개 유형

@23

 @23
속성
kGetPeerDescription_MaxLength

GetPeerDescription()에서 반환하는 문자열의 최대 길이(NUL 문자 포함)입니다.

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 

기존 Exchange 컨텍스트를 다시 구성하여 응답 시간 제한을 조정합니다.

세부정보
매개변수
[in] apExchangeContext
재구성할 Exchange 컨텍스트 객체에 대한 포인터

AllocateRightSizedBuffer

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

BeginConfiguration

Configuration BeginConfiguration()

Binding을 구성하는 프로세스입니다.

애플리케이션은 피어와의 통신을 위해 준비하기 전에 BeginConfiguration()을 호출하여 Binding을 구성해야 합니다.

세부정보
반환
결합을 구성하는 데 사용할 수 있는 Binding::Configuration 객체

CanBePrepared

bool CanBePrepared(
  void
) const 

닫기

void Close(
  void
)

결합 객체를 닫고 참조를 해제합니다.

이 메서드를 호출하면 결합이 닫힘 상태로 전환됩니다. 진행 중인 결합 준비 작업이 모두 취소되고 결합에서 보유한 모든 외부 통신 리소스가 해제됩니다.

Close()를 호출하면 결합과 연결된 참조 수가 감소하며 참조 수가 0이 되면 객체가 해제됩니다.

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 

Binding에 대해 API 이벤트가 발생할 때 호출될 함수를 가져옵니다.

세부정보
반환
콜백 함수에 대한 포인터.

GetExchangeManager

WeaveExchangeManager * GetExchangeManager() const 

GetKeyId

uint32_t GetKeyId(
  void
) const 

피어로 메시지를 암호화할 때 사용할 메시지 암호화 키의 ID를 검색합니다.

GetLogId

uint16_t GetLogId(
  void
) const 

결합의 고유 ID를 가져옵니다.

GetMaxWeavePayloadSize

uint32_t GetMaxWeavePayloadSize(
  const System::PacketBuffer *msgBuf
)

제공된 PacketBuffer에 들어갈 수 있는 최대 Weave 페이로드 크기를 가져옵니다.

WRM이 있는 UDP를 포함한 UDP의 경우 반환되는 최대 페이로드 크기를 통해 결과 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 기반 전송 (WRMP와 함께 TCP, UDP 또는 UDP)을 사용하는 경우에만 사용할 수 있습니다. 준비가 시작되기 전에는 구성 중에 애플리케이션에서 명시적으로 설정한 주소 정보만 사용할 수 있습니다. 준비 단계에서 주소 준비가 완료되면 (예: DNS 변환이 완료된 후) 주소 정보를 사용할 수 있습니다. Binding이 준비되면 Binding이 재설정될 때까지 주소 정보를 사용할 수 있습니다.

세부정보
매개변수
[out] address
피어의 IP 주소를 수신할 IPAddress 객체에 대한 참조입니다. 피어의 IP 주소 정보를 사용할 수 없으면 이 값이 IPAddress::Any로 설정됩니다.
[out] port
피어의 포트 번호를 수신할 정수에 대한 참조입니다. 피어의 IP 주소 정보를 사용할 수 없는 경우 이 값은 정의되지 않습니다.
[out] interfaceId
피어에 도달할 수 있는 네트워크 인터페이스의 ID를 수신하는 정수에 대한 참조입니다. 피어의 IP 주소 정보를 사용할 수 없는 경우 이 값은 정의되지 않습니다.

GetPeerNodeId

uint64_t GetPeerNodeId(
  void
) const 

결합 피어의 노드 ID를 가져옵니다.

결합 객체가 준비된 후에만 유효합니다.

세부정보
반환
피어의 Weave 노드 ID

GetProtocolLayerCallback

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

GetState

State GetState(
  void
) const 

결합의 현재 상태를 가져옵니다.

세부정보
반환
결합 상태입니다.

IsAuthenticMessageFromPeer

bool IsAuthenticMessageFromPeer(
  const WeaveMessageInfo *msgInfo
)

특정 수신 메시지가 구성된 피어에서 온 것이고 적절하게 인증되었는지 확인합니다.

이 메서드는 지정된 메시지에 대한 다음 세부정보를 확인합니다.

  • 바인딩의 피어 노드에서 시작된 메시지
  • 메시지가 결합과 동일한 전송 유형을 통해 수신되었습니다. 또한, 연결이 연결을 통해 수신된 경우, 이 메서드는 메시지가 바인딩과 연결된 정확한 연결을 통해 수신되었는지도 확인합니다.
  • 메시지를 암호화하는 데 사용되는 암호화 키와 유형은 바인딩에 구성된 키 및 유형과 일치합니다. 보안을 사용하지 않고 구성된 바인딩의 경우, 이 메서드는 수신 메일이 암호화되지 않았는지 확인합니다.

이 메서드는 노드에서 피어로의 초기 교환 후 피어가 다시 로컬 노드로 교환을 자발적으로 시작할 수 있는 WDM과 같은 프로토콜에서 사용하기 위한 것입니다. 이 경우, 이 메서드를 통해 로컬 노드는 수신되는 원치 않는 메시지가 연결된 피어에 의해 전송되었는지 확인할 수 있습니다. 물론 메시지 암호화를 사용하지 않고 구성된 Binding의 경우 이 어설션은 보안 관점에서 값을 제공하지 않습니다. 단지 발신자 노드 ID와 전송 유형이 일치하는지 확인하기만 합니다.)

결합이 준비 상태가 아닌 경우 이 메서드는 항상 false를 반환합니다.

세부정보
매개변수
[in] msgInfo
수신 메일의 Weave 메시지 정보입니다.
반환
메시지가 피어에서 실제로 전송된 경우 true입니다.

IsConnectionTransport

bool IsConnectionTransport() const 

IsPreparing

bool IsPreparing(
  void
) const 

세부정보
반환
Binding이 현재 준비 중인 경우 true입니다.

IsReady

bool IsReady(
  void
) const 

세부정보
반환
Binding이 준비 상태인 경우 true입니다.

IsUDPTransport

bool IsUDPTransport() const 

IsUnreliableUDPTransport

bool IsUnreliableUDPTransport() const 

IsWRMTransport

bool IsWRMTransport() const 

NewExchangeContext

WEAVE_ERROR NewExchangeContext(
  ExchangeContext *& appExchangeContext
)

바인딩 대상인 피어와 통신하기 위해 새 Exchange 컨텍스트를 할당합니다.

세부정보
매개변수
[out] appExchangeContext
새로 할당된 Exchange Context 객체를 수신할 포인터에 대한 참조입니다. 메서드가 실패하면 포인터가 NULL로 설정됩니다.
반환 값
WEAVE_NO_ERROR
교환 컨텍스트가 할당되었는지 여부
WEAVE_ERROR_NO_MEMORY
교환 컨텍스트를 할당하는 데 사용할 수 있는 메모리가 없는 경우
WEAVE_ERROR_INCORRECT_STATE
바인딩이 준비 상태가 아닌 경우
other
바인딩 구성에 따른 교환 컨텍스트 구성과 관련된 기타 오류입니다.

출시

void Release(
  void
)

결합 객체에 대한 참조를 해제합니다.

결합 객체에 대한 참조가 더 이상 없으면 결합이 닫히고 해제됩니다.

RequestPrepare

WEAVE_ERROR RequestPrepare()

결합을 구성하고 준비하도록 애플리케이션에 요청합니다.

프로토콜 레이어 코드는 구성되지 않았거나 실패한 Binding에서 이 메서드를 사용하여, 사용할 결합을 구성하고 준비하도록 요청하는 애플리케이션 (kEvent_PrepareRequested)에 이벤트를 트리거할 수 있습니다.

이 메서드는 NotConfigured 또는 Failed 상태의 Binding에서만 호출할 수 있습니다.

애플리케이션에서 주문형 바인딩 구성/준비를 지원하지 않으면 메서드가 WEAVE_ERROR_NOT_IMPLEMENTED와 함께 실패합니다.

초기화

void Reset(
  void
)

바인딩을 구성되지 않은 상태로 다시 재설정합니다.

Reset()이 호출되면 진행 중인 바인딩 준비 작업이 취소되고 바인딩에서 보유한 모든 외부 통신 리소스가 해제됩니다. Reset()은 바인딩을 구성되지 않음 상태로 설정하며, 그 후에는 다시 구성하고 준비할 수 있습니다.

Reset()은 결합의 참조 수를 변경하지 않습니다.

SetDefaultResponseTimeout

void SetDefaultResponseTimeout(
  uint32_t msec
)

피어와 통신할 때 사용할 기본 교환 응답 제한 시간을 설정합니다.

세부정보
매개변수
[in] timeout
새 응답 제한 시간(밀리초)입니다.

SetDefaultWRMPConfig

void SetDefaultWRMPConfig(
  const WRMPConfig & wrmpConfig
)

피어와 통신할 때 사용할 기본 WRMP 구성을 설정합니다.

세부정보
매개변수
[in] aWRMPConfig
새 기본 구성이 포함된 WRMPConfig 구조에 대한 참조입니다.

SetEventCallback

void SetEventCallback(
  EventCallback aEventCallback
)

Binding에 대해 API 이벤트가 발생할 때 호출될 애플리케이션 정의 함수를 설정합니다.

세부정보
매개변수
[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
이벤트 콜백에서 전달한 이벤트 ID
[in] aInParam
이벤트 콜백에서 전달한 입력 이벤트 매개변수 참조
[in] aOutParam
이벤트 콜백에서 전달한 출력 이벤트 매개변수 참조