nl:: Weave:: Binding
#include <src/lib/core/WeaveBinding.h>
التقاط الهدف المقصود لاتصال Weave ومعلومات الإعداد ذات الصلة.
ملخّص
يحدد كائن الربط الهدف المقصود لاتصال Weave (المعروف أيضًا باسم "النظير")، إلى جانب مجموعة من معلمات التهيئة التي تصف كيفية إجراء الاتصال مع التطبيقات المشابهة. وتكون الروابط مستقلة عن بروتوكول التطبيق الذي يتم قوله بين الطرفين. وبالتالي، فهي تلتقط "مَن" و"كيف" من الاتصال، ولكن ليس "ماذا".
يجب أن تضبط التطبيقات ربط بمَعلمات خاصة بنوع قناة الاتصال المطلوبة. توفر الارتباطات دعمًا لمجموعة من عمليات نقل الشبكات، بما في ذلك TCP وUDP وUDP مع خدمة Weave Reliable Messaging وWeave over BLE (WoBLE). ويمكن للتطبيقات أيضًا طلب استخدام آليات أمان معينة لحماية الرسائل المرسلة بين الطرفين. يتضمن ذلك جلسات CASE وPASE ومفاتيح مجموعة التطبيقات. تستخدم واجهة إعداد الربط نمط واجهة برمجة تطبيقات تعريفيًا يسمح للتطبيقات بتوضيح متطلباتها للاتصال بعبارات بسيطة.
راجِع مستندات Binding::Configuration للحصول على مزيد من التفاصيل.
الإعداد
قبل إجراء الاتصال، يجب "الاستعداد" للربط. تتضمّن عملية إعداد الربط إنشاء الحالة اللازمة لإجراء الاتصال. وقد يتضمن ذلك أشياء مثل: حل عنوان الشبكة لأحد الأجهزة المشابهة، وإجراء اتصال بالشبكة، والتفاوض على مفاتيح الأمان. بعد أن يضبط التطبيق طريقة الربط، يتولى الربط تنفيذ جميع الخطوات اللازمة للاستعداد للاتصال، ويعيد الاتصال بالتطبيق عند اكتمال العملية. بهذه الطريقة، تخفي الروابط آليات الاتصال، مما يسمح للتطبيقات بالتركيز على التفاعلات عالية المستوى.
التواصل
بعد إعداد الربط، تصبح جاهزة للاستخدام. في هذه الحالة، تطلب التطبيقات (أو بشكلٍ أكثر شيوعًا، رمز طبقة البروتوكول الذي يعمل نيابةً عن أحد التطبيقات) الربط لتخصيص سياق تبادل Weave. يأتي سياق التبادل الناتج مُهيئًا مسبقًا للاتصال، ما يسمح للتطبيق ببدء تبادل Weave مع الزملاء على الفور. يمكن للتطبيق مواصلة طلب تبادل السياقات من خلال الربط إلى أن يتم إغلاق قناة الاتصال الأساسية، مثل إغلاق الربط، أو عند حدوث حدث ما، مثل تعطُّل الشبكة.
تغييرات حالة الربط
خلال عملية الربط، سيتم إرسال أحداث واجهة برمجة التطبيقات إلى التطبيق لإبلاغه بالتغييرات في حالة الربط. على سبيل المثال، عند نجاح الإعداد، سيتلقّى التطبيق حدثًا يعلمه بأنّ الربط أصبح جاهزًا للاستخدام. وبالمثل، إذا فشلت قناة الاتصال الأساسية، يتم تسليم حدث إلى التطبيق لإبلاغه بأنّ الربط لم يعُد في حالة الاستعداد.
يتم إرسال أحداث واجهة برمجة التطبيقات إلى التطبيق من خلال دالة استدعاء حدث يتم توفيرها عند تخصيص الربط.
مدة الربط
الربط هو مرجع يتم احتسابه للسماح بالاستخدام المشترك بين مكوّنات البرنامج المتعددة. عند تخصيص ربط، يتم إنشاء مرجع واحد للربط. يتحمل التطبيق مسؤولية إطلاق هذا المرجع في وقت ما في المستقبل، لكي يكون الربط مجانيًا لإعادة استخدامه لاحقًا.
عند إتمام تطبيق باستخدام الربط، قد يستدعي العملية Close() في عملية الربط. يؤدي ذلك إلى إصدار مرجع التطبيق إلى الربط وحظر أي عمليات عرض أخرى لأحداث واجهة برمجة التطبيقات. عند إصدار آخر مرجع لعملية ربط، يتم إغلاقه تلقائيًا.
الأنواع العامة |
|
---|---|
@23{
|
تعداد |
EventCallback)(void *apAppState, EventType aEvent, const InEventParam &aInParam, OutEventParam &aOutParam)
|
تعريف الكتابةvoid(*
|
EventType{
|
تعداد |
State
|
تعداد |
السمات العامة |
|
---|---|
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
احصل على الدالة التي سيتم طلبها عند وقوع حدث واجهة برمجة التطبيقات لعملية الربط.
|
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)
|
تخصيص سياق Exchange جديد للتواصل مع النظير المستهدف للربط.
|
Release(void)
|
void
حرر مرجع لكائن الربط.
|
RequestPrepare()
|
اطلب من التطبيق ضبط الربط وإعداده.
|
Reset(void)
|
void
يمكنك إعادة ضبط الربط إلى حالة لم يتم ضبطها.
|
SetDefaultResponseTimeout(uint32_t msec)
|
void
يمكنك ضبط المهلة التلقائية لاستجابة التبادل ليتم استخدامها عند التواصل مع التطبيقات المشابهة.
|
SetDefaultWRMPConfig(const WRMPConfig & wrmpConfig)
|
void
يمكنك ضبط إعدادات WRMP التلقائية لاستخدامها عند الاتصال بالنظير.
|
SetEventCallback(EventCallback aEventCallback)
|
void
يمكنك ضبط الدالة المحدّدة في التطبيق ليتم طلبها عند وقوع حدث في واجهة برمجة التطبيقات لعملية الربط.
|
SetProtocolLayerCallback(EventCallback callback, void *state)
|
void
إعداد دالة استدعاء حدث لرمز طبقة البروتوكول باستخدام الربط نيابةً عن التطبيق
|
الدوال الثابتة العامة |
|
---|---|
DefaultEventHandler(void *apAppState, EventType aEvent, const InEventParam & aInParam, OutEventParam & aOutParam)
|
void
المعالِج التلقائي لربط أحداث واجهة برمجة التطبيقات
|
صفوف |
|
---|---|
nl:: |
توفِّر واجهة بنمط البيان لإعداد عنصر الربط وإعداده. |
بُنى |
|
---|---|
nl:: |
أدخِل المَعلمات في حدث Binding في واجهة برمجة التطبيقات. |
nl:: |
يمكنك إخراج المَعلمات لحدث 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
يمكنك إعادة ضبط سياق Exchange الحالي لضبط مهلة الاستجابة.
التفاصيل | |||
---|---|---|---|
المعلمات |
|
AllocateRightSizedBuffer
WEAVE_ERROR AllocateRightSizedBuffer( PacketBuffer *& buf, const uint32_t desiredSize, const uint32_t minSize, uint32_t & outMaxPayloadSize )
BeginConfiguration
Configuration BeginConfiguration()
جارٍ ضبط الربط.
يجب استدعاء التطبيقات BeginConfiguration() لضبط الربط قبل إعداده للتواصل مع التطبيقات المشابهة.
التفاصيل | |
---|---|
المرتجعات |
كائن Binding::Configuration الذي يمكن استخدامه لضبط الربط
|
CanBePrepared
bool CanBePrepared( void ) const
إغلاق
void Close( void )
أغلِق كائن الربط وأفلِت مرجعًا.
وعند استدعائها، تؤدي هذه الطريقة إلى دخول الربط في الحالة "مغلق". ويتم إلغاء أي إجراءات تحضيرية قيد التقدم للربط ويتم إلغاء جميع موارد الاتصالات الخارجية التي تحتفظ بها عملية الربط.
يؤدي طلب الإجراء 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
احصل على الدالة التي سيتم طلبها عند وقوع حدث واجهة برمجة التطبيقات لعملية الربط.
التفاصيل | |
---|---|
المرتجعات |
يشير هذا المصطلح إلى مؤشر يؤدي إلى دالة رد الاتصال.
|
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 التي تم إعدادها.
بالإضافة إلى ذلك، ستضمن هذه الطريقة عدم تجاوز حمولة 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). قبل بدء عملية الإعداد، لا تتوفّر معلومات العنوان إلا إذا تم ضبطها صراحةً من خلال التطبيق أثناء عملية الإعداد. أثناء مرحلة الإعداد، تتوفر معلومات العنوان عند اكتمال إعداد العنوان (على سبيل المثال، بعد اكتمال تحليل نظام أسماء النطاقات). بعد أن يصبح الربط جاهزًا، ستظل معلومات العنوان متوفّرة إلى أن تتم إعادة ضبط الربط.
التفاصيل | |||||||
---|---|---|---|---|---|---|---|
المعلمات |
|
GetPeerNodeId
uint64_t GetPeerNodeId( void ) const
استرداد معرّف العقدة لنظير الربط.
صالحة فقط بعد إعداد كائن الربط.
التفاصيل | |
---|---|
المرتجعات |
معرّف عقدة نسج النظير
|
GetProtocolLayerCallback
void GetProtocolLayerCallback( EventCallback & callback, void *& state ) const
GetState
State GetState( void ) const
استرداد الحالة الحالية للربط.
التفاصيل | |
---|---|
المرتجعات |
حالة الربط.
|
IsAuthenticMessageFromPeer
bool IsAuthenticMessageFromPeer( const WeaveMessageInfo *msgInfo )
يمكنك تحديد ما إذا كانت رسالة واردة معيّنة من التطبيقات المشابهة التي تم ضبطها وتمت مصادقتها بشكل مناسب.
تؤكد هذه الطريقة التفاصيل التالية حول الرسالة المحددة:
- نشأت الرسالة من عقدة النظير للربط
- تم استلام الرسالة على نوع النقل نفسه مثل الربط. إذا تم استلام الرسالة عبر اتصال، فإن الطريقة تؤكد أيضًا أن الرسالة تم استلامها من خلال الاتصال الدقيق المرتبط بالربط.
- يتطابق مفتاح التشفير والنوع المُستخدَمان لتشفير الرسالة مع تلك التي تم ضبطها في عملية الربط. بالنسبة إلى عمليات الربط التي تم ضبطها بدون استخدام الأمان، تؤكد الطريقة على أن الرسالة الواردة غير مشفّرة.
تم تصميم هذه الطريقة للاستخدام في البروتوكولات مثل WDM حيث يمكن للأقران بدء عمليات التبادل بشكل تلقائي إلى العقدة المحلية بعد التبادل الأولي من العقدة إلى النظير. في هذه الحالات، تسمح هذه الطريقة للعقدة المحلية بتأكيد أنّ الرسالة الواردة غير المرغوب فيها قد تم إرسالها من خلال التطبيقات المشابهة. (بالنسبة إلى "عمليات الربط" التي يتم ضبطها بدون استخدام تشفير الرسائل، لا يقدّم هذا التأكيد أي قيمة من منظور الأمان). وإنما يؤكّد فقط تطابق معرّف عقدة المُرسِل وأنواع النقل).
لاحظ أنه إذا لم يكن الربط في حالة جاهز، فإن هذه الطريقة ستعرض دائمًا false.
التفاصيل | |||
---|---|---|---|
المعلمات |
|
||
المرتجعات |
صحيح إذا كانت الرسالة أصلية من النظير.
|
IsConnectionTransport
bool IsConnectionTransport() const
IsPreparing
bool IsPreparing( void ) 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()
اطلب من التطبيق ضبط الربط وإعداده.
يمكن لرمز طبقة البروتوكول أن يستخدم هذه الطريقة على الربط الذي لم يتم إعداده أو الذي تعذّر تشغيله، وذلك لتشغيل حدث للتطبيق (kEvent_Prepare وإلى) يطلب منه ضبط الربط وإعداده للاستخدام.
لا يمكن استدعاء هذه الطريقة إلا في Bindings في حالات NotConfigured أو الإخفاق.
إذا كان التطبيق لا يتيح إعداد/إعداد الروابط عند الطلب، ستفشل الطريقة مع WEAVE_ERROR_NOT_IMPLEMENTED.
إعادة الضبط
void Reset( void )
يمكنك إعادة ضبط الربط إلى حالة لم يتم ضبطها.
عند استدعاء الدالة Reset()، يتم إلغاء أي إجراءات تحضيرية قيد التقدّم للربط ويتم إلغاء جميع موارد الاتصالات الخارجية التي تحتفظ بها عملية الربط. تضع Reset() الربط في حالة "لم يتم الضبط"، وبعدها يمكن إعداده وإعداده مرة أخرى.
لا تغيّر الدالة Reset() عدد المراجع لعملية الربط.
SetDefaultResponseTimeout
void SetDefaultResponseTimeout( uint32_t msec )
يمكنك ضبط المهلة التلقائية لاستجابة التبادل ليتم استخدامها عند التواصل مع التطبيقات المشابهة.
التفاصيل | |||
---|---|---|---|
المعلمات |
|
SetDefaultWRMPConfig
void SetDefaultWRMPConfig( const WRMPConfig & wrmpConfig )
يمكنك ضبط إعدادات WRMP التلقائية لاستخدامها عند الاتصال بالنظير.
التفاصيل | |||
---|---|---|---|
المعلمات |
|
SetEventCallback
void SetEventCallback( EventCallback aEventCallback )
يمكنك ضبط الدالة المحدّدة في التطبيق ليتم طلبها عند وقوع حدث في واجهة برمجة التطبيقات لعملية الربط.
التفاصيل | |||
---|---|---|---|
المعلمات |
|
SetProtocolLayerCallback
void SetProtocolLayerCallback( EventCallback callback, void *state )
إعداد دالة استدعاء حدث لرمز طبقة البروتوكول باستخدام الربط نيابةً عن التطبيق
سيتم استدعاء هذه الدالة بالإضافة إلى دالة معاودة الاتصال التي يحددها التطبيق عند وقوع أحداث واجهة برمجة التطبيقات لعملية الربط.
التفاصيل | |||||
---|---|---|---|---|---|
المعلمات |
|
الدوال الثابتة العامة
DefaultEventHandler
void DefaultEventHandler( void *apAppState, EventType aEvent, const InEventParam & aInParam, OutEventParam & aOutParam )
المعالِج التلقائي لربط أحداث واجهة برمجة التطبيقات
ويجب أن تطلب التطبيقات هذه الطريقة لأي أحداث واجهة برمجة تطبيقات لا يمكنها التعرّف عليها أو معالجتها. يجب أن تكون المَعلمات المقدَّمة مماثلة للمعلَمات التي يتم تمريرها من خلال الربط بدالة معالِج الحدث في التطبيق.
التفاصيل | |||||||||
---|---|---|---|---|---|---|---|---|---|
المعلمات |
|