nl:: Weave:: Binding
#include <src/lib/core/WeaveBinding.h>
מתעד את היעד המיועד של תקשורת Weave ומידע על ההגדרות האישיות המשויכות.
סיכום
אובייקט Binding מזהה את היעד המיועד של תקשורת Weave (נקרא גם 'עמית', יחד עם קבוצת פרמטרים של הגדרה שמתארת איך תתנהל התקשורת עם האפליקציה להשוואה). הקישורים אינם תלויים בפרוטוקול של האפליקציה המדוברת בין שני הצדדים. לכן, הן מקליטות את ה"מי" והמודל "איך", של תקשורת, אבל לא של מה.
האפליקציות צריכות להגדיר קישור עם פרמטרים ספציפיים לסוג ערוץ התקשורת הרצוי. Bindings מספקים תמיכה למגוון רחב של העברות ברשת, כולל TCP , UDP , UDP עם Weave Trusted Messaging ו-Weave over BLE (WoBLE). האפליקציות יכולות גם לבקש שימוש במנגנוני אבטחה ספציפיים כדי להגן על הודעות שנשלחות בין הצדדים. המפתחות האלה כוללים סשנים של CASE ו-PASE, ומפתחות של קבוצות של אפליקציות. הממשק להגדרה של Binding משתמש בסגנון API הצהרתי שמאפשר לאפליקציות לציין בשפה פשוטה את הדרישות שלהן לתקשורת.
פרטים נוספים זמינים במסמכי התיעוד בנושא Binding::Configuration.
הכנה
יש להכין את הקישור לפני התקשורת. תהליך ההכנה של הקישור כולל יצירת המצב ההכרחי כדי שהתקשורת תתבצע. דוגמאות לנתונים כאלה: איתור כתובת הרשת של הרשת השכנה, יצירת חיבור לרשת וניהול משא ומתן למפתחות אבטחה. אחרי שהאפליקציה מגדירה את הקישור, ה-Binding מבצע את כל השלבים שדרושים כדי להתכונן לתקשורת, וחוזר לאפליקציה בסיום התהליך. באופן הזה, Bindings מסתירים את המכניקה של התקשורת ומאפשרים לאפליקציות להתמקד באינטראקציות ברמה גבוהה.
תקשורת
לאחר הכנת הקישור, הוא מוכן לשימוש. במצב הזה, אפליקציות (או קוד של שכבת פרוטוקול שפועל בשם אפליקציה) מבקשים את ה-Binding להקצאת הקשר של Weave. ההקשר של ההחלפה שמתקבל מוגדר מראש לתקשורת, וכך מאפשר לאפליקציה ליזום באופן מיידי החלפה של Weave עם האפליקציה השכנה. האפליקציה יכולה להמשיך לבקש הקשרים של חילופי המרות מהקישור עד שהקישור ייסגר, או שאירוע מסוים (למשל, כשל ברשת) יגרום לסיום של ערוץ התקשורת הבסיסי.
שינויים במצב הקישור
במהלך השימוש, Binding יספק אירועי API לאפליקציה ויודיעו לה על שינויים במצב ה-Binding. לדוגמה, כשתהליך ההכנה מסתיים בהצלחה, הבקשה תקבל אירוע שיודיע לה שהקישור מוכן לשימוש. באופן דומה, אם ערוץ התקשורת הבסיסי נכשל, אירוע נשלח לאפליקציה ומודיע לה שהקישור כבר לא במצב מוכן.
אירועי API נשלחים לאפליקציה באמצעות פונקציית קריאה חוזרת של אירוע (callback) שמסופקת על ידי הקצאת ה-Binding.
משך החיים של הקישורים
קישורים הם הפניות נספרות כדי לאפשר שימוש משותף במספר רכיבי תוכנה. כאשר מוקצה קישור, נוצרת הפניה אחת לקישור. האפליקציה אחראית לפרסום קובץ העזר הזה בשלב כלשהו בעתיד, כך שהקישור יהיה זמין לשימוש חוזר בחינם.
כשאפליקציה מתבצעת באמצעות Binding, היא עשויה לקרוא ל-Close() בקישור. הפעולה הזו מבטלת את ההפניה של האפליקציה ל-Binding ומונעת שליחה של אירועי API נוספים. כשההפניה האחרונה לקישור משוחררת, היא נסגרת באופן אוטומטי.
סוגים ציבוריים |
|
---|---|
@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
מקבלים את הזמן הקצוב לתפוגה של תגובה מ-Exchange כברירת מחדל לשימוש בתקשורת עם אפליקציה להשוואה.
|
GetDefaultWRMPConfig(void) const
|
const WRMPConfig &
הגדרת ברירת המחדל של WRMP לשימוש בתקשורת עם האפליקציה השכנה.
|
GetEncryptionType(void) const
|
uint8_t
אחזור סוג הצפנת ההודעה לשימוש בזמן הצפנת הודעות אל אפליקציה להשוואה.
|
GetEventCallback() const
|
EventCallback
מקבלים את הפונקציה שתיקרא כשיתרחש אירוע API עבור ה-Binding.
|
GetExchangeManager() const
|
|
GetKeyId(void) const
|
uint32_t
אחזור המזהה של מפתח הצפנת ההודעה לשימוש בזמן הצפנת הודעות אל השותף או ממנו.
|
GetLogId(void) const
|
uint16_t
מקבלים מזהה ייחודי לקישור.
|
GetMaxWeavePayloadSize(const System::PacketBuffer *msgBuf)
|
uint32_t
מקבלים את גודל המטען הייעודי (payload) המקסימלי של 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
צריך להגדיר את הזמן הקצוב לתפוגה של תגובה ל-Exchange שישמש כברירת מחדל בתקשורת עם האפליקציה השכנה.
|
SetDefaultWRMPConfig(const WRMPConfig & wrmpConfig)
|
void
צריך להגדיר את הגדרות ברירת המחדל של WRMP שישמשו בתקשורת עם האפליקציה השכנה.
|
SetEventCallback(EventCallback aEventCallback)
|
void
מגדירים את הפונקציה שמוגדרת באפליקציה כך שתתבצע קריאה כשמתרחש אירוע API בשביל ה-Binding.
|
SetProtocolLayerCallback(EventCallback callback, void *state)
|
void
מגדירים פונקציית קריאה חוזרת של אירוע לקוד שכבת הפרוטוקול באמצעות Binding מטעם אפליקציה.
|
פונקציות סטטיות ציבוריות |
|
---|---|
DefaultEventHandler(void *apAppState, EventType aEvent, const InEventParam & aInParam, OutEventParam & aOutParam)
|
void
handler ברירת המחדל לקישור אירועי API.
|
שיעורים |
|
---|---|
nl:: |
ממשק בסגנון הצהרתי להגדרה ולהכנה של אובייקט Binding. |
מבנים |
|
---|---|
nl:: |
צריך להזין פרמטרים לאירוע Binding API. |
nl:: |
פרמטרים של פלט לאירוע Binding API. |
סוגים ציבוריים
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()
להיות התהליך של הגדרת ה-Binding.
האפליקציות חייבות לקרוא ל-BeginConfiguration() כדי להגדיר את ה-Binding לפני הכנתו לתקשורת עם אפליקציה להשוואה.
פרטים | |
---|---|
החזרות |
אובייקט Binding::Configuration שיכול לשמש להגדרת הקישור.
|
CanBePrepared
bool CanBePrepared( void ) const
סגירה
void Close( void )
סוגרים את אובייקט הקישור ומשחררים את קובץ העזר.
כאשר מתבצעת קריאה, שיטה זו גורמת לקישור לעבור למצב סגור. כל פעולות ההכנה לקישור יבוטלו וכל משאבי התקשורת החיצוניים שמוחזקים בקישור ישוחררו.
קריאה ל-Close() מקטינה את מספר ההפניות שמשויכות לקישור, וכך האובייקט מתפנה אם מספר ההפניות הופך לאפס.
GetConnection
WeaveConnection * GetConnection() const
מקבלים את אובייקט החיבור של Weave שמשויך לקישור.
פרטים | |
---|---|
החזרות |
מצביע לאובייקט WeaveConnection או NULL אם אין חיבור המשויך לקישור.
|
GetDefaultResponseTimeout
uint32_t GetDefaultResponseTimeout() const
מקבלים את הזמן הקצוב לתפוגה של תגובה מ-Exchange כברירת מחדל לשימוש בתקשורת עם אפליקציה להשוואה.
פרטים | |
---|---|
החזרות |
הזמן הקצוב לתפוגה של תגובה באלפיות השנייה.
|
GetDefaultWRMPConfig
const WRMPConfig & GetDefaultWRMPConfig( void ) const
הגדרת ברירת המחדל של WRMP לשימוש בתקשורת עם האפליקציה השכנה.
פרטים | |
---|---|
החזרות |
הפניה למבנה WRMPConfig שמכיל את ערכי ברירת המחדל של ההגדרות האישיות.
|
GetEncryptionType
uint8_t GetEncryptionType( void ) const
אחזור סוג הצפנת ההודעה לשימוש בזמן הצפנת הודעות אל אפליקציה להשוואה.
GetEventCallback
EventCallback GetEventCallback() const
מקבלים את הפונקציה שתיקרא כשיתרחש אירוע API עבור ה-Binding.
פרטים | |
---|---|
החזרות |
מצביע אל פונקציית הקריאה החוזרת.
|
GetExchangeManager
WeaveExchangeManager * GetExchangeManager() const
GetKeyId
uint32_t GetKeyId( void ) const
אחזור המזהה של מפתח הצפנת ההודעה לשימוש בזמן הצפנת הודעות אל השותף או ממנו.
GetLogId
uint16_t GetLogId( void ) const
מקבלים מזהה ייחודי לקישור.
GetMaxWeavePayloadSize
uint32_t GetMaxWeavePayloadSize( const System::PacketBuffer *msgBuf )
מקבלים את גודל המטען הייעודי (payload) המקסימלי של Weave שיכול להתאים ל-PacketBuffer שסופק.
ב-UDP, כולל UDP עם WRM, הגודל המרבי של המטען הייעודי (payload) שיוחזר מבטיח שהודעת Weave שמתקבלת לא תחרוג מ-UDP MTU שהוגדר.
בנוסף, השיטה הזו תבטיח שהמטען הייעודי (payload) של Weave לא ימלא את ה- PacketBuffer שסופק.
פרטים | |||
---|---|---|---|
פרמטרים |
|
||
החזרות |
הגודל המקסימלי של המטען הייעודי (payload) של 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
מאחזרים את מזהה הצומת של האפליקציה לקישור.
תקף רק לאחר שאובייקט הקישור מוכן.
פרטים | |
---|---|
החזרות |
מזהה צומת Weave של העמית
|
GetProtocolLayerCallback
void GetProtocolLayerCallback( EventCallback & callback, void *& state ) const
GetState
State GetState( void ) const
מאחזרים את המצב הנוכחי של הקישור.
פרטים | |
---|---|
החזרות |
מצב הקישור.
|
IsAuthenticMessageFromPeer
bool IsAuthenticMessageFromPeer( const WeaveMessageInfo *msgInfo )
אפשר לקבוע אם הודעה נכנסת מסוימת מגיעה מהעמית שהוגדר והיא מאומתת כמו שצריך.
השיטה הזו מאשרת את הפרטים הבאים לגבי ההודעה הנתונה:
- ההודעה הגיעה מהצומת של הרשת השכנה של הקישור
- ההודעה התקבלה באותו סוג העברה כמו הקישור. אם ההודעה התקבלה באמצעות חיבור, השיטה גם תאשר שההודעה התקבלה באמצעות החיבור המדויק המשויך לקישור.
- מפתח ההצפנה וסוג ההצפנה ששימשו להצפנת ההודעה תואמים את אלו שהוגדרו בקישור. לקישורים שהוגדרו ללא שימוש באבטחה, השיטה מאשרת שההודעה הנכנסת לא מוצפנת.
השיטה הזו מיועדת לשימוש בפרוטוקולים כמו WDM, שבהם עמיתים יכולים ליזום באופן ספונטני החלפות בחזרה לצומת המקומי לאחר החלפה ראשונית מהצומת לעמית. במקרים כאלה, ה-method מאפשרת לצומת המקומי לאמת שההודעה הנכנסת ללא אישור מצד המשתמש נשלחה. (כמובן, לקישורים שהוגדרו ללא שימוש בהצפנת הודעה, הטענה הזו לא מספקת ערך מבחינה אבטחה. הוא רק מאשר שמזהה הצומת של השולח וסוגי התעבורה תואמים.)
שימו לב שאם הקישור לא במצב 'מוכן', השיטה הזו תמיד תחזיר את הערך 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()
מבקשים מהאפליקציה להגדיר ולהכין את הקישור.
קוד שכבת הפרוטוקול יכול להשתמש בשיטה הזו בקישור שלא הוגדר או נכשל, כדי להפעיל אירוע לאפליקציה (kEvent_PrepareRequested) כדי להגדיר את הקישור ולהכין אותו לשימוש.
ניתן לקרוא לשיטה הזו רק ב'קישורים' במצב 'לא הוגדר' או 'נכשל'.
אם האפליקציה לא תומכת בתצורה/בהכנה של קישורים על פי דרישה, השיטה תיכשל עם WEAVE_ERROR_NOT_IMPLEMENTED.
איפוס
void Reset( void )
SetDefaultResponseTimeout
void SetDefaultResponseTimeout( uint32_t msec )
צריך להגדיר את הזמן הקצוב לתפוגה של תגובה ל-Exchange שישמש כברירת מחדל בתקשורת עם האפליקציה השכנה.
פרטים | |||
---|---|---|---|
פרמטרים |
|
SetDefaultWRMPConfig
void SetDefaultWRMPConfig( const WRMPConfig & wrmpConfig )
צריך להגדיר את הגדרות ברירת המחדל של WRMP שישמשו בתקשורת עם האפליקציה השכנה.
פרטים | |||
---|---|---|---|
פרמטרים |
|
SetEventCallback
void SetEventCallback( EventCallback aEventCallback )
מגדירים את הפונקציה שמוגדרת באפליקציה כך שתתבצע קריאה כשמתרחש אירוע API בשביל ה-Binding.
פרטים | |||
---|---|---|---|
פרמטרים |
|
SetProtocolLayerCallback
void SetProtocolLayerCallback( EventCallback callback, void *state )
מגדירים פונקציית קריאה חוזרת של אירוע לקוד שכבת הפרוטוקול באמצעות Binding מטעם אפליקציה.
תתבצע קריאה לפונקציה הזו בנוסף לפונקציית הקריאה החוזרת המוגדרת על ידי האפליקציה כאשר יתקיימו אירועי API עבור ה-Binding.
פרטים | |||||
---|---|---|---|---|---|
פרמטרים |
|
פונקציות סטטיות ציבוריות
DefaultEventHandler
void DefaultEventHandler( void *apAppState, EventType aEvent, const InEventParam & aInParam, OutEventParam & aOutParam )
handler ברירת המחדל לקישור אירועי API.
אפליקציות נדרשות לקרוא ל-method הזה לכל אירועי API שהם לא מזהים או לא מטפלים בהם. הפרמטרים שסופקו חייבים להיות זהים לפרמטרים שמועברים על ידי הקישור אל פונקציית המטפל באירועים של האפליקציה.
פרטים | |||||||||
---|---|---|---|---|---|---|---|---|---|
פרמטרים |
|