nl::Weave::Binding

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

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

요약

Binding 객체는 피어와의 통신이 이루어지는 방식을 설명하는 구성 매개변수 집합과 함께 Weave 통신의 의도한 대상('피어'라고도 함)을 식별합니다. 바인딩은 양 당사자가 말하는 애플리케이션 프로토콜과는 별개입니다. 따라서 '누가' '방법' '무엇을'가 아니라 커뮤니케이션의 핵심입니다.

구성

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

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

준비

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

커뮤니케이션

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

바인딩 상태 변경

Binding은 사용 과정에서 API 이벤트를 애플리케이션에 전달하여 Binding의 상태 변경을 알립니다. 예를 들어 준비가 완료되면 애플리케이션에서 Binding을 사용할 준비가 되었음을 알리는 이벤트를 수신합니다. 마찬가지로 기본 통신 채널이 실패하면 이벤트가 애플리케이션에 전달되어 Binding이 더 이상 준비 상태가 아님을 알립니다.

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

바인딩 수명

바인딩은 여러 소프트웨어 구성요소에서 공유 사용을 허용하기 위해 참조로 계산됩니다. 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()
바인딩을 구성하는 프로세스입니다.
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 Context를 할당합니다.
Release(void)
void
결합 객체에 대한 참조를 해제합니다.
RequestPrepare()
애플리케이션에 바인딩을 구성하고 준비하도록 요청합니다.
Reset(void)
void
결합을 구성되지 않은 상태로 다시 재설정합니다.
SetDefaultResponseTimeout(uint32_t msec)
void
피어와 통신할 때 사용할 기본 Exchange 응답 제한 시간을 설정합니다.
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()

바인딩을 구성하는 프로세스입니다.

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

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

CanBePrepared

bool CanBePrepared(
  void
) const 

닫기

void Close(
  void
)

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

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

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

세부정보
매개변수
[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과 같은 프로토콜에 사용하기 위한 것입니다. 이러한 경우, 메서드는 수신 메시지 메시지가 관련 피어에 의해 전송되었음을 로컬 노드가 확인할 수 있게 합니다. 물론 메시지 암호화를 사용하지 않고 구성된 바인딩의 경우 이 어설션은 보안 관점에서 가치가 없습니다. 발신자 노드 ID와 전송 유형이 일치하는지만 확인할 뿐입니다.)

바인딩이 준비 상태가 아니면 이 메서드는 항상 false를 반환합니다.

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

IsConnectionTransport

bool IsConnectionTransport() const 

IsPreparing

bool IsPreparing(
  void
) const 

세부정보
반환
바인딩이 현재 준비 중이면 참입니다.

IsReady

bool IsReady(
  void
) const 

세부정보
반환
바인딩이 준비 상태이면 참입니다.

IsUDPTransport

bool IsUDPTransport() const 

IsUnreliableUDPTransport

bool IsUnreliableUDPTransport() const 

IsWRMTransport

bool IsWRMTransport() const 

NewExchangeContext

WEAVE_ERROR NewExchangeContext(
  ExchangeContext *& appExchangeContext
)

바인딩의 대상인 피어와 통신하기 위한 새 Exchange Context를 할당합니다.

세부정보
매개변수
[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 상태인 바인딩에서만 호출할 수 있습니다.

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

재설정

void Reset(
  void
)

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

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

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

SetDefaultResponseTimeout

void SetDefaultResponseTimeout(
  uint32_t msec
)

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

세부정보
매개변수
[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
이벤트 콜백이 전달한 출력 이벤트 매개변수의 참조입니다.