nl:: Weave:: Binding
#include <src/lib/core/WeaveBinding.h>
تسجيل الهدف المقصود لاتصال Weave ومعلومات التهيئة ذات الصلة.
ملخّص
يحدد كائن الربط الهدف المقصود لاتصال Weave (المعروف أيضًا باسم "النظير")، إلى جانب مجموعة من معلمات التهيئة التي تصف كيفية حدوث الاتصال مع النظير. الالتزامات مستقلة عن بروتوكول التطبيق الذي يتم النطق به بين الطرفين. على هذا النحو، فهي تعبر عن "من" و "كيف" للاتصال، ولكن ليس "ماذا".
يجب أن تضبط التطبيقات عملية ربط باستخدام مَعلمات خاصة بنوع قناة الاتصال المطلوبة. توفر عمليات الربط الدعم لمجموعة من عمليات نقل الشبكة، بما في ذلك بروتوكول التحكم في الإرسال (TCP) وبروتوكول UDP وبروتوكول UDP مع خدمة Weave الموثوقة، وبروتوكول Weave عبر BLE (WoBLE). ويمكن للتطبيقات أيضًا طلب استخدام آليات أمان محدَّدة لحماية الرسائل المرسلة بين الطرفين. ويتضمن ذلك جلسات CASE وPASE ومفاتيح مجموعة التطبيقات. تستخدم واجهة تهيئة الربط نمطًا تعريفيًا لواجهة برمجة التطبيقات يسمح للتطبيقات بتحديد متطلباتها للاتصال بعبارات بسيطة.
للحصول على مزيد من التفاصيل، يمكنك الاطّلاع على وثائق الربط::الإعداد.
الإعداد
قبل إجراء التواصل، يجب أن يكون الربط "جاهزًا". تتضمن عملية تحضير الربط تحديد الحالة اللازمة لإجراء الاتصال. ويمكن أن يشمل ذلك أمورًا مثل: تحديد عنوان الشبكة للنظير وإجراء اتصال بالشبكة والتفاوض بشأن مفاتيح الأمان. بعد أن ينفِّذ التطبيق عملية الإعداد، يتولى الربط الاهتمام بجميع الخطوات اللازمة للتحضير للاتصال، ويعاود الاتصال بالتطبيق عند اكتمال العملية. بهذه الطريقة، تخفي الروابط آليات الاتصال، مما يسمح للتطبيقات بالتركيز على التفاعلات عالية المستوى.
التواصل
بعد إعداد الربط، يصبح جاهزًا للاستخدام. في هذه الحالة، تطلب التطبيقات (أو بشكل أكثر شيوعًا، رمز طبقة البروتوكول الذي يعمل نيابةً عن تطبيق) الربط لتخصيص سياق تبادل Weave. يأتي سياق التبادل الناتج مُعدًّا مسبقًا للتواصل، ما يسمح للتطبيق ببدء تبادل Weave مع النظير على الفور. يمكن أن يستمر التطبيق في طلب سياقات التبادل من الربط حتى يحين وقت إغلاق الربط، أو حتى يؤدي حدث ما، مثل تعطُّل الشبكة، إلى إنهاء قناة الاتصال الأساسية.
تغييرات الحالة الملزِمة
خلال فترة استخدامه، سيقدّم الربط أحداث واجهة برمجة التطبيقات إلى التطبيق لإبلاغه بالتغييرات في حالة الربط. على سبيل المثال، عندما ينجح الإعداد، سيتلقى التطبيق حدثًا يبلغه بأنّ الربط جاهز للاستخدام. وبالمثل، في حال تعذّرت قناة الاتصال الأساسية، يتم تسليم حدث إلى التطبيق يبلغه أن الربط لم يعد في حالة الاستعداد.
يتم تسليم أحداث واجهة برمجة التطبيقات إلى التطبيق من خلال دالة استدعاء أحداث يتم توفيرها عند تخصيص الربط.
فترة صلاحية الربط
الربط هو مرجع يتم احتسابه للسماح بالاستخدام المشترك بين مكوّنات البرنامج المتعدّدة. عند تخصيص ربط، يتم إنشاء مرجع واحد للربط. يكون التطبيق مسؤولاً عن إصدار هذا المرجع في مرحلة ما في المستقبل بحيث يصبح الربط مجانيًا لإعادة استخدامه لاحقًا.
عند الانتهاء من تطبيق باستخدام الربط، قد يستدعي Close() على الربط. يؤدي ذلك إلى إطلاق مرجع التطبيق إلى الربط وحظر جميع أحداث واجهة برمجة التطبيقات الإضافية. عندما يتم رفع المرجع الأخير إلى الربط، يتم إغلاقه تلقائيًا.
الأنواع العلنية |
|
---|---|
@23{
|
تعداد |
EventCallback)(void *apAppState, EventType aEvent, const InEventParam &aInParam, OutEventParam &aOutParam)
|
typedefvoid(*
|
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:: |
أدخِل المَعلمات في حدث واجهة برمجة تطبيقات الربط. |
nl:: |
مخرجات البيانات إلى حدث واجهة برمجة تطبيقات ربط |
الأنواع العلنية
@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() لضبط الربط قبل إعداده للتواصل مع النظير.
التفاصيل | |
---|---|
المرتجعات |
كائن الربط::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 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 (TCP أو UDP أو UDP مع WRMP). قبل بدء عملية التحضير، لا تتوفّر معلومات العنوان إلا إذا تم ضبطها صراحةً من قِبل التطبيق أثناء عملية الإعداد. خلال مرحلة الإعداد، تكون معلومات العنوان متاحة عند اكتمال إعداد العنوان (على سبيل المثال، بعد اكتمال التحويل باستخدام نظام أسماء النطاقات (DNS)). بعد أن يصبح الربط جاهزًا، تظل معلومات العنوان متاحة إلى أن تتم إعادة ضبط الربط.
التفاصيل | |||||||
---|---|---|---|---|---|---|---|
المَعلمات |
|
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_PrepareSuggested) الذي يطلب ضبطه وإعداد الربط للاستخدام.
لا يمكن استدعاء هذه الطريقة إلا في "عمليات الربط" في الحالة "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 )
المعالِج التلقائي لأحداث واجهة برمجة التطبيقات المرتبطة
ويُطلب من التطبيقات استدعاء هذه الطريقة لأي أحداث واجهة برمجة تطبيقات لا تتعرّف عليها أو تعالجها. يجب أن تكون المَعلمات المقدَّمة مماثلة للمَعلمات التي يتم تمريرها من خلال الربط بدالة معالج أحداث التطبيق.
التفاصيل | |||||||||
---|---|---|---|---|---|---|---|---|---|
المَعلمات |
|