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{
|
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
|
기존 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:: |
Binding 객체를 구성하고 준비하기 위한 선언적 스타일의 인터페이스를 제공합니다. |
구조체 |
|
---|---|
nl:: |
Binding API 이벤트에 대한 입력 매개변수 |
nl:: |
Binding API 이벤트에 대한 출력 매개변수 |
공개 유형
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 컨텍스트를 다시 구성하여 응답 시간 제한을 조정합니다.
세부정보 | |||
---|---|---|---|
매개변수 |
|
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
GetDefaultResponseTimeout
uint32_t GetDefaultResponseTimeout() const
피어와 통신할 때 사용할 기본 교환 응답 제한 시간을 가져옵니다.
세부정보 | |
---|---|
반환 |
응답 제한 시간(밀리초)
|
GetDefaultWRMPConfig
const WRMPConfig & GetDefaultWRMPConfig( void ) const
GetEncryptionType
uint8_t GetEncryptionType( void ) const
피어에서 메시지를 암호화할 때 사용할 메시지 암호화 유형을 검색합니다.
GetEventCallback
EventCallback GetEventCallback() const
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를 오버플로하지 않도록 합니다.
세부정보 | |||
---|---|---|---|
매개변수 |
|
||
반환 |
최대 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 기반 전송 (WRMP와 함께 TCP, UDP 또는 UDP)을 사용하는 경우에만 사용할 수 있습니다. 준비가 시작되기 전에는 구성 중에 애플리케이션에서 명시적으로 설정한 주소 정보만 사용할 수 있습니다. 준비 단계에서 주소 준비가 완료되면 (예: DNS 변환이 완료된 후) 주소 정보를 사용할 수 있습니다. Binding이 준비되면 Binding이 재설정될 때까지 주소 정보를 사용할 수 있습니다.
세부정보 | |||||||
---|---|---|---|---|---|---|---|
매개변수 |
|
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를 반환합니다.
세부정보 | |||
---|---|---|---|
매개변수 |
|
||
반환 |
메시지가 피어에서 실제로 전송된 경우 true입니다.
|
IsConnectionTransport
bool IsConnectionTransport() const
IsUDPTransport
bool IsUDPTransport() const
IsUnreliableUDPTransport
bool IsUnreliableUDPTransport() const
IsWRMTransport
bool IsWRMTransport() const
NewExchangeContext
WEAVE_ERROR NewExchangeContext( ExchangeContext *& appExchangeContext )
바인딩 대상인 피어와 통신하기 위해 새 Exchange 컨텍스트를 할당합니다.
세부정보 | |||||||||
---|---|---|---|---|---|---|---|---|---|
매개변수 |
|
||||||||
반환 값 |
|
출시
void Release( void )
결합 객체에 대한 참조를 해제합니다.
결합 객체에 대한 참조가 더 이상 없으면 결합이 닫히고 해제됩니다.
RequestPrepare
WEAVE_ERROR RequestPrepare()
초기화
void Reset( void )
SetDefaultResponseTimeout
void SetDefaultResponseTimeout( uint32_t msec )
피어와 통신할 때 사용할 기본 교환 응답 제한 시간을 설정합니다.
세부정보 | |||
---|---|---|---|
매개변수 |
|
SetDefaultWRMPConfig
void SetDefaultWRMPConfig( const WRMPConfig & wrmpConfig )
SetEventCallback
void SetEventCallback( EventCallback aEventCallback )
SetProtocolLayerCallback
void SetProtocolLayerCallback( EventCallback callback, void *state )
공개 정적 함수
DefaultEventHandler
void DefaultEventHandler( void *apAppState, EventType aEvent, const InEventParam & aInParam, OutEventParam & aOutParam )
API 이벤트 결합을 위한 기본 핸들러입니다.
애플리케이션에서 인식하지 못하거나 처리하지 않는 모든 API 이벤트에 대해 이 메서드를 호출해야 합니다. 제공된 매개변수는 바인딩을 통해 애플리케이션의 이벤트 핸들러 함수에 전달되는 매개변수와 동일해야 합니다.
세부정보 | |||||||||
---|---|---|---|---|---|---|---|---|---|
매개변수 |
|