nl:: Weave:: Binding
#include <src/lib/core/WeaveBinding.h>
לוכד את היעד המיועד של תקשורת Weave ומידע על הגדרות אישיות.
סיכום
אובייקט Binding מזהה את היעד של תקשורת Weave (שנקרא גם "peer"), ביחד עם קבוצה של פרמטרים של הגדרות המתארים כיצד תתרחש התקשורת עם הרשת השכנה. הקישורים אינם תלויים בפרוטוקול האפליקציה המדובר בין שני הצדדים. לכן, הם מתעדים את ה "מי" וה "איך" של התקשורת, אבל לא את ה "מה".
אפליקציות צריכות להגדיר קישור עם פרמטרים שספציפיים לסוג של ערוץ התקשורת הרצוי. Binding מספק תמיכה למגוון העברות רשת, כולל TCP, UDP, UDP עם Weave Trusted Messaging ו-Weave over BLE (WoBLE). האפליקציות יכולות גם לבקש שימוש במנגנוני אבטחה ספציפיים כדי להגן על הודעות שנשלחות בין הצדדים. המפתחות האלה כוללים סשנים מסוג CASE ו-PASE, ומפתחות של קבוצות אפליקציות. הממשק להגדרת קישור משתמש בסגנון API מוצהר שמאפשר לאפליקציות לציין את הדרישות שלהן לתקשורת בשפה פשוטה.
אפשר לקרוא פרטים נוספים במסמכי התיעוד בנושא Binding::Configuration.
הכנה
לפני האינטראקציה, הקישור צריך להיות "מוכן". הכנת קישור כוללת קביעת המצב הנדרש כדי שתתקיים תקשורת. למשל: זיהוי כתובת הרשת של הצד השני, יצירת חיבור לרשת וניהול משא ומתן על מפתחות אבטחה. לאחר ההגדרה באפליקציה, הקישור מבצע את כל השלבים הנדרשים כדי להתכונן לתקשורת, וכשהתהליך יושלם, הוא יחזור לאפליקציה. באופן הזה, Bindings מסתירים את המכניקה של התקשורת ומאפשרים לאפליקציות להתמקד באינטראקציות ברמות הגבוהות.
תקשורת
אחרי הכנת קישור הוא יהיה מוכן לשימוש. במצב הזה, אפליקציות (או בדרך כלל קוד של שכבת פרוטוקול שפועל מטעם אפליקציה) מבקשות את הקישור כדי להקצות הקשר ל-Weave Exchange. הקשר החילופין שמתקבל מוגדר מראש לתקשורת, ומאפשר לאפליקציה ליזום באופן מיידי חילופי Weave עם העמית. האפליקציה יכולה להמשיך לבקש הקשרים של החלפה מהקישור עד לסגירת הקישור, או עד שערוץ כלשהו יסיים את ערוץ התקשורת המקורי, למשל כשל ברשת.
שינויים במצב מחייב
במהלך השימוש, קישור יספק לאפליקציה אירועי API כדי ליידע אותה על שינויים במצב הקישור. לדוגמה, כשההכנה תסתיים בהצלחה, האפליקציה תקבל אירוע שמודיע לה שהקישור מוכן לשימוש. באופן דומה, אם ערוץ התקשורת הבסיסי נכשל, יישלח לאפליקציה אירוע עם הודעה על כך שהקישור כבר לא במצב מוכן.
אירועי API מועברים לאפליקציה באמצעות פונקציית קריאה חוזרת של אירועים, שמסופקת כאשר מוקצית ה-Binding.
קישור לכל החיים
קישור נספרים כדי לאפשר שימוש משותף בין רכיבי תוכנה מרובים. כשמקצה קישור, נוצרת הפניה אחת לקישור. האפליקציה אחראית להפיץ את ההפניה הזו בשלב כלשהו בעתיד, כך שהקישור יהיה בחינם לשימוש חוזר בעתיד.
כשאפליקציה מסיימת את פונקציית Binding היא עשויה להפעיל את Close() בקישור. הפעולה הזו מבטלת את ההפניה של האפליקציה לקישור וחוסמת כל שליחה נוספת של אירועי 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()
|
הוא תהליך ההגדרה של הקישור.
|
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:: |
מזינים פרמטרים לאירוע API Binding. |
nl:: |
פרמטרים של פלט לאירוע API 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
|
האפליקציה צריכה לספק פרמטרים לשימוש במהלך יצירת הסשן של Takeout. |
ארץ
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 לפני שמכינים אותו לתקשורת עם אפליקציה להשוואה.
פרטים | |
---|---|
החזרות |
אובייקט 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, גודל המטען הייעודי המקסימלי שמוחזר יבטיח שההודעה שמתקבלת ב-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, שבהם רשתות שכנות יכולות ליזום באופן ספונטני חילופים חזרה לצומת המקומי אחרי החלפה ראשונית מהצומת לעמית. במקרים כאלה, השיטה מאפשרת לצומת המקומי לאשר שההודעה הנכנסת הלא רצויה נשלחה על ידי העמית המשויך. (כמובן שבקישורים שהוגדרו ללא שימוש בהצפנת הודעות, הטענה הזו לא מספקת ערך מבחינת האבטחה. הוא רק מוודא שמזהה הצומת של השולח וסוגי ההעברה תואמים).
שימו לב שאם הקישור לא במצב 'מוכן', השיטה הזו תמיד תחזיר 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 מטעם אפליקציה.
הקריאה לפונקציה הזו תתבצע בנוסף לפונקציית הקריאה החוזרת (callback) שהוגדרה על ידי האפליקציה כשמתרחשים אירועי API עבור הקישור.
פרטים | |||||
---|---|---|---|---|---|
פרמטרים |
|
פונקציות סטטיות ציבוריות
DefaultEventHandler
void DefaultEventHandler( void *apAppState, EventType aEvent, const InEventParam & aInParam, OutEventParam & aOutParam )
handler שמוגדר כברירת מחדל לאירועי API מקשרים.
אפליקציות נדרשות לקרוא לשיטה הזו עבור כל אירועי API שהם לא מזהים או לא מטפלים בה. הפרמטרים המסופקים חייבים להיות זהים לפרמטרים שמועברים באמצעות הקישור לפונקציית הגורם המטפל באירועים של האפליקציה.
פרטים | |||||||||
---|---|---|---|---|---|---|---|---|---|
פרמטרים |
|