nl:: Weave:: Binding
#include <src/lib/core/WeaveBinding.h>
Nắm bắt mục tiêu dự kiến của hoạt động giao tiếp trên Weave và thông tin cấu hình liên quan.
Tóm tắt
Đối tượng Binding xác định mục tiêu dự kiến của hoạt động giao tiếp Weave (còn gọi là "ngang hàng"), cùng với một tập hợp các tham số cấu hình mô tả cách quá trình giao tiếp với ứng dụng ngang hàng sẽ diễn ra. Các liên kết độc lập với giao thức ứng dụng được đọc giữa hai bên. Do vậy, chúng nắm bắt được "ai" và câu hỏi "cách thức" về giao tiếp mà không phải là "cái gì".
Ứng dụng phải định cấu hình Liên kết với các tham số cụ thể cho loại kênh liên lạc mong muốn. Các mối liên kết hỗ trợ nhiều phương thức truyền tải mạng, bao gồm TCP, UDP, UDP với Weave Trusted Messaging và Weave over BLE (WoBLE). Ứng dụng cũng có thể yêu cầu sử dụng các cơ chế bảo mật cụ thể để bảo vệ thư được gửi giữa các bên. Chúng bao gồm các phiên CASE và PASE cũng như các khoá nhóm ứng dụng. Giao diện để định cấu hình Liên kết sử dụng kiểu API khai báo cho phép các ứng dụng nêu rõ yêu cầu giao tiếp theo cách đơn giản.
Hãy xem tài liệu về Binding::Configuration để biết thêm chi tiết.
Chuẩn bị
Trước khi quá trình giao tiếp diễn ra, một Liên kết phải được "chuẩn bị". Hành động chuẩn bị Ràng buộc bao gồm việc thiết lập trạng thái cần thiết để quá trình giao tiếp diễn ra. Chẳng hạn như: phân giải địa chỉ mạng của ứng dụng ngang hàng, thiết lập kết nối mạng và thương lượng khoá bảo mật. Sau khi ứng dụng định cấu hình, Liên kết sẽ xử lý tất cả các bước cần thiết để chuẩn bị giao tiếp, gọi lại ứng dụng khi quá trình hoàn tất. Bằng cách này, Ràng buộc ẩn cơ chế giao tiếp, cho phép các ứng dụng tập trung vào những hoạt động tương tác cấp cao.
Liên lạc
Khi đã chuẩn bị, Binding (Liên kết) sẽ sẵn sàng để sử dụng. Ở trạng thái này, các ứng dụng (hay phổ biến hơn là mã lớp giao thức hoạt động thay mặt cho ứng dụng) yêu cầu Binding để phân bổ ngữ cảnh trao đổi Weave. Bối cảnh trao đổi kết quả được định cấu hình sẵn để giao tiếp, cho phép ứng dụng ngay lập tức bắt đầu một hoạt động trao đổi Weave với ứng dụng ngang hàng. Ứng dụng có thể tiếp tục yêu cầu ngữ cảnh trao đổi từ Liên kết cho đến khi Liên kết được đóng, hoặc một số sự kiện (ví dụ: lỗi mạng) chấm dứt kênh liên lạc cơ bản.
Các thay đổi về trạng thái Binding
Trong quá trình sử dụng, Binding (Liên kết) sẽ gửi các sự kiện API đến ứng dụng để thông báo cho ứng dụng về những thay đổi đối với trạng thái của Binding. Ví dụ: khi chuẩn bị thành công, ứng dụng sẽ nhận được một sự kiện thông báo rằng Liên kết đã sẵn sàng để sử dụng. Tương tự, nếu kênh liên lạc cơ bản bị lỗi, một sự kiện sẽ được gửi đến ứng dụng để thông báo rằng Binding không còn ở trạng thái sẵn sàng nữa.
Các sự kiện API được phân phối đến ứng dụng thông qua hàm callback sự kiện được cung cấp khi phân bổ Binding.
Thời gian tồn tại của Binding
Liên kết được tính để cho phép sử dụng chung trên nhiều thành phần phần mềm. Khi một Liên kết được phân bổ, một tham chiếu duy nhất đến liên kết đó sẽ được tạo. Ứng dụng sẽ chịu trách nhiệm phát hành tệp đối chiếu này vào một thời điểm trong tương lai sao cho Liên kết được miễn phí để sử dụng lại sau này.
Khi hoàn tất quá trình Liên kết, ứng dụng có thể gọi Close() trên liên kết. Thao tác này sẽ huỷ bỏ tham chiếu đến Binding của ứng dụng và chặn tất cả việc phân phối thêm sự kiện API. Khi tham chiếu cuối cùng đến một Liên kết được giải phóng, nó sẽ tự động đóng.
Loại công khai |
|
---|---|
@23{
|
enum |
EventCallback)(void *apAppState, EventType aEvent, const InEventParam &aInParam, OutEventParam &aOutParam)
|
typedefvoid(*
|
EventType{
|
enum |
State
|
enum |
Các thuộc tính công khai |
|
---|---|
AppState
|
void *
|
Hàm công khai |
|
---|---|
AddRef(void)
|
void
Đặt trước tệp tham chiếu đến đối tượng liên kết.
|
AdjustResponseTimeout(ExchangeContext *apExchangeContext) const
|
Định cấu hình lại một Ngữ cảnh Exchange hiện có để điều chỉnh thời gian chờ phản hồi.
|
AllocateRightSizedBuffer(PacketBuffer *& buf, const uint32_t desiredSize, const uint32_t minSize, uint32_t & outMaxPayloadSize)
|
|
BeginConfiguration()
|
Là quá trình định cấu hình Liên kết.
|
CanBePrepared(void) const
|
bool
|
Close(void)
|
void
Đóng đối tượng liên kết và giải phóng một tham chiếu.
|
GetConnection() const
|
Lấy đối tượng kết nối Weave được liên kết với liên kết.
|
GetDefaultResponseTimeout() const
|
uint32_t
Lấy thời gian chờ phản hồi mặc định của sàn giao dịch để sử dụng khi giao tiếp với ứng dụng ngang hàng.
|
GetDefaultWRMPConfig(void) const
|
const WRMPConfig &
Nhận cấu hình WRMP mặc định để sử dụng khi giao tiếp với ứng dụng ngang hàng.
|
GetEncryptionType(void) const
|
uint8_t
Truy xuất loại mã hoá thư sẽ được sử dụng khi mã hoá thư đến/từ ứng dụng ngang hàng.
|
GetEventCallback() const
|
EventCallback
Lấy hàm sẽ được gọi khi sự kiện API xảy ra đối với Binding.
|
GetExchangeManager() const
|
|
GetKeyId(void) const
|
uint32_t
Truy xuất mã nhận dạng của khoá mã hoá thư sẽ dùng khi mã hoá thư đến/từ ứng dụng ngang hàng.
|
GetLogId(void) const
|
uint16_t
Nhận mã nhận dạng duy nhất cho liên kết.
|
GetMaxWeavePayloadSize(const System::PacketBuffer *msgBuf)
|
uint32_t
Lấy kích thước tải trọng Weave tối đa có thể vừa với PacketBuffer đã cung cấp.
|
GetPeerDescription(char *buf, uint32_t bufSize) const
|
void
Tạo một chuỗi mô tả nút ngang hàng và thông tin địa chỉ / kết nối liên quan.
|
GetPeerIPAddress(nl::Inet::IPAddress & address, uint16_t & port, InterfaceId & interfaceId) const
|
void
Truy xuất thông tin địa chỉ IP của ứng dụng ngang hàng, nếu có.
|
GetPeerNodeId(void) const
|
uint64_t
Truy xuất mã nút của ứng dụng ngang hàng liên kết.
|
GetProtocolLayerCallback(EventCallback & callback, void *& state) const
|
void
|
GetState(void) const
|
State
Truy xuất trạng thái hiện tại của liên kết.
|
IsAuthenticMessageFromPeer(const WeaveMessageInfo *msgInfo)
|
bool
Xác định xem một thư đến cụ thể có phải là từ ứng dụng ngang hàng đã định cấu hình và được xác thực phù hợp hay không.
|
IsConnectionTransport() const
|
bool
|
IsPreparing(void) const
|
bool
|
IsReady(void) const
|
bool
|
IsUDPTransport() const
|
bool
|
IsUnreliableUDPTransport() const
|
bool
|
IsWRMTransport() const
|
bool
|
NewExchangeContext(ExchangeContext *& appExchangeContext)
|
Phân bổ một Ngữ cảnh Exchange mới để giao tiếp với ứng dụng ngang hàng là mục tiêu của liên kết.
|
Release(void)
|
void
Giải phóng mục tham chiếu đến đối tượng liên kết.
|
RequestPrepare()
|
Yêu cầu ứng dụng định cấu hình và chuẩn bị Binding.
|
Reset(void)
|
void
Đặt lại liên kết trở lại trạng thái chưa được định cấu hình.
|
SetDefaultResponseTimeout(uint32_t msec)
|
void
Đặt thời gian chờ mặc định của phản hồi trao đổi để sử dụng khi giao tiếp với ứng dụng ngang hàng.
|
SetDefaultWRMPConfig(const WRMPConfig & wrmpConfig)
|
void
Đặt cấu hình WRMP mặc định được sử dụng khi giao tiếp với ứng dụng ngang hàng.
|
SetEventCallback(EventCallback aEventCallback)
|
void
Đặt hàm do ứng dụng xác định sẽ được gọi khi sự kiện API xảy ra cho sự kiện Binding.
|
SetProtocolLayerCallback(EventCallback callback, void *state)
|
void
Đặt một hàm callback sự kiện cho mã lớp giao thức bằng cách sử dụng Binding thay mặt cho ứng dụng.
|
Hàm tĩnh công khai |
|
---|---|
DefaultEventHandler(void *apAppState, EventType aEvent, const InEventParam & aInParam, OutEventParam & aOutParam)
|
void
Trình xử lý mặc định cho các sự kiện API liên kết.
|
Lớp |
|
---|---|
nl:: |
Cung cấp giao diện kiểu khai báo để định cấu hình và chuẩn bị đối tượng Binding. |
Cấu trúc |
|
---|---|
nl:: |
Nhập tham số vào sự kiện Binding API. |
nl:: |
Xuất các tham số cho một sự kiện API Binding. |
Loại công khai
@23 tuổi
@23
Thuộc tính | |
---|---|
kGetPeerDescription_MaxLength
|
Độ dài tối đa của chuỗi (bao gồm cả ký tự NUL) do GetPeerDescription() trả về. |
EventCallback
void(* EventCallback)(void *apAppState, EventType aEvent, const InEventParam &aInParam, OutEventParam &aOutParam)
EventType
EventType
Thuộc tính | |
---|---|
kEvent_BindingFailed
|
Không liên kết được và không thể dùng để giao tiếp với ứng dụng ngang hàng nữa. |
kEvent_BindingReady
|
Hành động chuẩn bị trên liên kết đã thành công và liên kết này hiện có thể được dùng để giao tiếp với ứng dụng ngang hàng. |
kEvent_ConnectionEstablished
|
Đã thiết lập kết nối Weave yêu cầu. |
kEvent_DefaultCheck
|
Dùng để xác minh cách xử lý sự kiện mặc định chính xác trong ứng dụng. |
kEvent_PASEParametersRequested
|
Ứng dụng được yêu cầu cung cấp các tham số dùng trong quá trình thiết lập phiên PASE. |
kEvent_PrepareFailed
|
Hành động chuẩn bị đối với liên kết không thành công. |
kEvent_PrepareRequested
|
Ứng dụng cần phải định cấu hình và chuẩn bị liên kết để ngăn xếp mạng sử dụng. |
kEvent_TAKEParametersRequested
|
Ứng dụng được yêu cầu cung cấp các tham số sẽ dùng trong quá trình thiết lập phiên GET. |
Tiểu bang
State
Các thuộc tính công khai
AppState
void * AppState
Hàm công khai
AddRef
void AddRef( void )
Đặt trước tệp tham chiếu đến đối tượng liên kết.
AdjustResponseTimeout
WEAVE_ERROR AdjustResponseTimeout( ExchangeContext *apExchangeContext ) const
Định cấu hình lại một Ngữ cảnh Exchange hiện có để điều chỉnh thời gian chờ phản hồi.
Chi tiết | |||
---|---|---|---|
Tham số |
|
AllocateRightSizedBuffer
WEAVE_ERROR AllocateRightSizedBuffer( PacketBuffer *& buf, const uint32_t desiredSize, const uint32_t minSize, uint32_t & outMaxPayloadSize )
BeginConfiguration
Configuration BeginConfiguration()
Là quá trình định cấu hình Liên kết.
Các ứng dụng phải gọi BeginConfiguration() để định cấu hình Binding trước khi chuẩn bị giao tiếp với ứng dụng ngang hàng.
Chi tiết | |
---|---|
Trả về |
Bạn có thể dùng đối tượng Binding::Configuration để định cấu hình liên kết.
|
CanBePrepared
bool CanBePrepared( void ) const
Đóng
void Close( void )
Đóng đối tượng liên kết và giải phóng một tham chiếu.
Khi được gọi, phương thức này sẽ khiến liên kết chuyển sang trạng thái Đóng. Mọi hành động chuẩn bị đang diễn ra cho liên kết đều bị huỷ và mọi tài nguyên giao tiếp bên ngoài mà liên kết nắm giữ sẽ được giải phóng.
Việc gọi Close() sẽ giảm số lượng tham chiếu liên kết với liên kết, giải phóng đối tượng nếu số lượng tham chiếu trở thành 0.
GetConnection
WeaveConnection * GetConnection() const
Lấy đối tượng kết nối Weave được liên kết với liên kết.
Chi tiết | |
---|---|
Trả về |
Con trỏ trỏ đến đối tượng WeaveConnection hoặc NULL nếu không có kết nối nào được liên kết với liên kết.
|
GetDefaultResponseTimeout
uint32_t GetDefaultResponseTimeout() const
Lấy thời gian chờ phản hồi mặc định của sàn giao dịch để sử dụng khi giao tiếp với ứng dụng ngang hàng.
Chi tiết | |
---|---|
Trả về |
Thời gian chờ phản hồi tính bằng mili giây.
|
GetDefaultWRMPConfig
const WRMPConfig & GetDefaultWRMPConfig( void ) const
Nhận cấu hình WRMP mặc định để sử dụng khi giao tiếp với ứng dụng ngang hàng.
Chi tiết | |
---|---|
Trả về |
Tham chiếu đến cấu trúc WRMPConfig chứa các giá trị cấu hình mặc định.
|
GetEncryptionType
uint8_t GetEncryptionType( void ) const
Truy xuất loại mã hoá thư sẽ được sử dụng khi mã hoá thư đến/từ ứng dụng ngang hàng.
GetEventCallback
EventCallback GetEventCallback() const
Lấy hàm sẽ được gọi khi sự kiện API xảy ra đối với Binding.
Chi tiết | |
---|---|
Trả về |
Con trỏ trỏ đến hàm callback.
|
GetExchangeManager
WeaveExchangeManager * GetExchangeManager() const
GetKeyId
uint32_t GetKeyId( void ) const
Truy xuất mã nhận dạng của khoá mã hoá thư sẽ dùng khi mã hoá thư đến/từ ứng dụng ngang hàng.
GetLogId
uint16_t GetLogId( void ) const
Nhận mã nhận dạng duy nhất cho liên kết.
GetMaxWeavePayloadSize
uint32_t GetMaxWeavePayloadSize( const System::PacketBuffer *msgBuf )
Lấy kích thước tải trọng Weave tối đa có thể vừa với PacketBuffer đã cung cấp.
Đối với UDP, bao gồm cả UDP với WRM, kích thước tải trọng tối đa được trả về sẽ đảm bảo thông báo Weave nhận được sẽ không làm tràn MTU UDP đã định cấu hình.
Ngoài ra, phương pháp này sẽ đảm bảo tải trọng Weave sẽ không làm tràn PacketBuffer đã cung cấp.
Chi tiết | |||
---|---|---|---|
Tham số |
|
||
Trả về |
Kích thước tải trọng Weave tối đa.
|
GetPeerDescription
void GetPeerDescription( char *buf, uint32_t bufSize ) const
Tạo một chuỗi mô tả nút ngang hàng và thông tin địa chỉ / kết nối liên quan.
Chi tiết | |||||
---|---|---|---|---|---|
Tham số |
|
GetPeerIPAddress
void GetPeerIPAddress( nl::Inet::IPAddress & address, uint16_t & port, InterfaceId & interfaceId ) const
Truy xuất thông tin địa chỉ IP của ứng dụng ngang hàng, nếu có.
Tính sẵn có của thông tin địa chỉ IP của ứng dụng ngang hàng phụ thuộc vào trạng thái và cấu hình của liên kết. Thông tin địa chỉ IP chỉ xuất hiện khi sử dụng phương thức truyền tải dựa trên IP (TCP, UDP hoặc UDP với WRMP). Trước khi bắt đầu chuẩn bị, thông tin địa chỉ chỉ có sẵn nếu ứng dụng đã đặt rõ ràng thông tin này trong quá trình định cấu hình. Trong giai đoạn chuẩn bị, thông tin địa chỉ sẽ xuất hiện khi quá trình chuẩn bị địa chỉ hoàn tất (ví dụ: sau khi quá trình phân giải DNS hoàn tất). Sau khi Liên kết đã sẵn sàng, thông tin địa chỉ sẽ vẫn còn cho đến khi Liên kết được đặt lại.
Chi tiết | |||||||
---|---|---|---|---|---|---|---|
Tham số |
|
GetPeerNodeId
uint64_t GetPeerNodeId( void ) const
Truy xuất mã nút của ứng dụng ngang hàng liên kết.
Chỉ hợp lệ sau khi đối tượng liên kết đã được chuẩn bị.
Chi tiết | |
---|---|
Trả về |
Mã nút dệt của ứng dụng ngang hàng
|
GetProtocolLayerCallback
void GetProtocolLayerCallback( EventCallback & callback, void *& state ) const
GetState
State GetState( void ) const
Truy xuất trạng thái hiện tại của liên kết.
Chi tiết | |
---|---|
Trả về |
Trạng thái liên kết.
|
IsAuthenticMessageFromPeer
bool IsAuthenticMessageFromPeer( const WeaveMessageInfo *msgInfo )
Xác định xem một thư đến cụ thể có phải là từ ứng dụng ngang hàng đã định cấu hình và được xác thực phù hợp hay không.
Phương thức này xác nhận các thông tin chi tiết sau về thông báo đã cho:
- Thông báo bắt nguồn từ nút ngang hàng của liên kết
- Thông báo được nhận qua cùng một loại truyền tải với liên kết. Nếu thư được nhận qua một kết nối, phương thức này cũng sẽ xác nhận rằng thư được nhận qua kết nối chính xác được liên kết với liên kết.
- Khoá mã hoá và loại dùng để mã hoá thư khớp với khoá và kiểu được định cấu hình trong liên kết. Đối với các mối liên kết được định cấu hình mà không sử dụng tính năng bảo mật, phương thức này xác nhận rằng tin nhắn đến KHÔNG được mã hoá.
Phương thức này được dùng trong các giao thức như WDM, trong đó các ứng dụng ngang hàng có thể tự động bắt đầu trao đổi trở lại nút cục bộ sau quá trình trao đổi ban đầu từ nút tới nút ngang hàng. Trong những trường hợp như vậy, phương thức này cho phép nút cục bộ xác nhận rằng tin nhắn không mong muốn đến đã được gửi bởi ứng dụng ngang hàng đã liên kết. (Tất nhiên, đối với các Liên kết được định cấu hình mà không sử dụng tính năng mã hoá thư, xác nhận này không cung cấp giá trị nào về khía cạnh bảo mật. Phương thức này chỉ xác nhận rằng mã nhận dạng nút của người gửi và kiểu truyền tải khớp nhau.)
Lưu ý rằng nếu liên kết không ở trạng thái Sẵn sàng, thì phương thức này sẽ luôn trả về giá trị false.
Chi tiết | |||
---|---|---|---|
Tham số |
|
||
Trả về |
Đúng nếu tin nhắn đó là của đối tác chính xác.
|
IsConnectionTransport
bool IsConnectionTransport() const
IsPreparing
bool IsPreparing( void ) const
Chi tiết | |
---|---|
Trả về |
Đúng nếu Liên kết hiện đang được chuẩn bị.
|
IsUDPTransport
bool IsUDPTransport() const
IsUnreliableUDPTransport
bool IsUnreliableUDPTransport() const
IsWRMTransport
bool IsWRMTransport() const
NewExchangeContext
WEAVE_ERROR NewExchangeContext( ExchangeContext *& appExchangeContext )
Phân bổ một Ngữ cảnh Exchange mới để giao tiếp với ứng dụng ngang hàng là mục tiêu của liên kết.
Chi tiết | |||||||||
---|---|---|---|---|---|---|---|---|---|
Tham số |
|
||||||||
Giá trị trả về |
|
Bản phát hành
void Release( void )
Giải phóng mục tham chiếu đến đối tượng liên kết.
Nếu không có thêm tham chiếu nào đến đối tượng liên kết, liên kết sẽ được đóng và giải phóng.
RequestPrepare
WEAVE_ERROR RequestPrepare()
Yêu cầu ứng dụng định cấu hình và chuẩn bị Binding.
Mã lớp giao thức có thể sử dụng phương thức này trên một Binding chưa được định cấu hình hoặc không thành công để kích hoạt một sự kiện đến ứng dụng (kEvent_PrepareRequested) yêu cầu ứng dụng định cấu hình và chuẩn bị liên kết để sử dụng.
Phương thức này chỉ có thể được gọi trên các Liên kết ở trạng thái Chưa định cấu hình hoặc Không thành công.
Nếu ứng dụng không hỗ trợ cấu hình/chuẩn bị liên kết theo yêu cầu, thì phương thức này sẽ không thành công với WEAVE_ERROR_NOT_IMPLEMENTED.
Đặt lại
void Reset( void )
Đặt lại liên kết trở lại trạng thái chưa được định cấu hình.
Khi gọi Reset(), mọi hành động chuẩn bị đang tiến hành cho liên kết đều sẽ bị huỷ và mọi tài nguyên giao tiếp bên ngoài mà liên kết nắm giữ sẽ được giải phóng. Reset() đặt liên kết ở trạng thái Chưa định cấu hình, sau đó liên kết có thể được định cấu hình và chuẩn bị lại.
Reset() không làm thay đổi số lượng tham chiếu của liên kết.
SetDefaultResponseTimeout
void SetDefaultResponseTimeout( uint32_t msec )
Đặt thời gian chờ mặc định của phản hồi trao đổi để sử dụng khi giao tiếp với ứng dụng ngang hàng.
Chi tiết | |||
---|---|---|---|
Tham số |
|
SetDefaultWRMPConfig
void SetDefaultWRMPConfig( const WRMPConfig & wrmpConfig )
Đặt cấu hình WRMP mặc định được sử dụng khi giao tiếp với ứng dụng ngang hàng.
Chi tiết | |||
---|---|---|---|
Tham số |
|
SetEventCallback
void SetEventCallback( EventCallback aEventCallback )
Đặt hàm do ứng dụng xác định sẽ được gọi khi sự kiện API xảy ra cho sự kiện Binding.
Chi tiết | |||
---|---|---|---|
Tham số |
|
SetProtocolLayerCallback
void SetProtocolLayerCallback( EventCallback callback, void *state )
Đặt một hàm callback sự kiện cho mã lớp giao thức bằng cách sử dụng Binding thay mặt cho ứng dụng.
Hàm này sẽ được gọi cùng với hàm callback do ứng dụng xác định khi các sự kiện API xảy ra cho thao tác Binding.
Chi tiết | |||||
---|---|---|---|---|---|
Tham số |
|
Hàm tĩnh công khai
DefaultEventHandler
void DefaultEventHandler( void *apAppState, EventType aEvent, const InEventParam & aInParam, OutEventParam & aOutParam )
Trình xử lý mặc định cho các sự kiện API liên kết.
Các ứng dụng cần phải gọi phương thức này cho mọi sự kiện API mà ứng dụng không nhận dạng hoặc xử lý được. Tham số được cung cấp phải giống với tham số được liên kết chuyển đến hàm trình xử lý sự kiện của ứng dụng.
Chi tiết | |||||||||
---|---|---|---|---|---|---|---|---|---|
Tham số |
|