تبادل الكائنات
بروتوكول OBEX (اختصار لـ OBject EXchange ، ويُعرف أيضًا باسم IrOBEX ) هو بروتوكول اتصال يُسهّل تبادل البيانات الثنائية بين الأجهزة. تتولى جمعية بيانات الأشعة تحت الحمراء (Infrared Data Association) صيانته ، كما اعتمدته أيضًا مجموعة Bluetooth Special Interest Group وقسم SyncML التابع لتحالف Open Mobile Alliance (OMA). كان جهاز Palm III من أوائل التطبيقات الشائعة لبروتوكول OBEX ، حيث استخدمه هذا الجهاز والعديد من الأجهزة اللاحقة لتبادل بطاقات العمل والبيانات وحتى التطبيقات.
على الرغم من أن تقنية OBEX صُممت في البداية للأشعة تحت الحمراء، إلا أنها اعتُمدت الآن بواسطة تقنية Bluetooth ، كما أنها تُستخدم أيضًا عبر RS-232 و USB و WAP وفي أجهزة مثل أقلام Livescribe الذكية.
مقارنة ببروتوكول HTTP
يُشابه بروتوكول OBEX بروتوكول HTTP في التصميم والوظيفة ، حيث يوفر للعميل وسيلة نقل موثوقة للاتصال بالخادم، ومن ثم طلب أو إرسال الكائنات. إلا أن OBEX يختلف عنه في العديد من الجوانب المهمة:
- عادةً ما يُطبّق بروتوكول HTTP فوق اتصال TCP/IP . يمكن تطبيق OBEX أيضًا، ولكنه يُطبّق عادةً على حزمة بروتوكولات IrLAP / IrLMP / Tiny TP على جهاز IrDA . في تقنية Bluetooth ، يُطبّق OBEX على حزمة بروتوكولات Baseband / ACL / L2CAP (وفي التطبيقات القديمة، على حزمة بروتوكولات RFCOMM ). توجد أيضًا طرق أخرى لربط OBEX، مثل الربط عبر USB .
- يستخدم بروتوكول HTTP نصًا قابلًا للقراءة البشرية، بينما يستخدم بروتوكول OBEX ثلاثيات ثنائية التنسيق من النوع والطول والقيمة تُسمى "الرؤوس" لتبادل المعلومات حول الطلب أو الكائن. يسهل تحليل هذه الرؤوس بشكل كبير على الأجهزة ذات الموارد المحدودة.
- تتميز معاملات HTTP بطبيعتها بأنها عديمة الحالة؛ ففي العادة، يفتح عميل HTTP اتصالاً، ويرسل طلباً واحداً، ويتلقى الرد، ثم إما يغلق الاتصال أو يرسل طلبات أخرى غير ذات صلة . أما في OBEX، فقد يحمل اتصال نقل واحد العديد من العمليات المترابطة. في الواقع، تسمح الإضافات الحديثة لمواصفات OBEX باستئناف معاملة أُغلقت فجأة مع الحفاظ على جميع معلومات الحالة سليمة.
أشياء
يعمل OBEX عن طريق تبادل الكائنات ، والتي تستخدم لأغراض متنوعة: تحديد معلمات الاتصال، وإرسال البيانات وطلبها، وتغيير المسار الحالي أو سمات الملف.
الكائنات هي الحقول والعناوين . على سبيل المثال، قد يكون الكائن التالي هو المستخدم لطلب دليل الهاتف من هاتف محمول:
| هدف | الحقول | يأمر | GET، أخير | 0x83 |
|---|---|---|---|---|
| طول | الطول الإجمالي للجسم | 0x00 0x29 | ||
| العناوين | معرف الاتصال | 1 | 0xCB 0x00 0x00 0x00 0x01 | |
| اسم | "telecom/pb.vcf" | 0x01 0x00 0x1e 0x00 0x74 0x00 0x65 0x00 0x6c 0x00 0x65 0x00 0x63 0x00 0x6f 0x00 0x6d 0x00 0x2f 0x00 0x70 0x00 0x62 0x00 0x2e 0x00 0x76 0x00 0x63 0x00 0x66 0x00 0x00 |
يحتوي هذا الكائن على حقلين (الأمر والطول) ورأسين. يحدد الحقل الأول (الأمر) أنه طلب بيانات GET. أما الحقل الثاني فهو الحجم الإجمالي للكائن، بما في ذلك الحقلين.
يحتوي هذا الكائن أيضًا على رأسين، وهما "معرّف الاتصال" و"الاسم". يمثل البايت الأول من كل رأس اسم الرأس ونوع محتواه. في هذه الحالة:
0xCBيعني هذا أن هذا العنوان هو "معرف الاتصال"، وهو رقم تم الحصول عليه مسبقًا؛ أعلى بتين من0xCBهما11، وهذا الزوج يحدد أن هذا هو كمية 4 بايت؛- البايت الأول من الرأس الثاني هو
0x01؛ يحدد هذا البايت هذا الرأس على أنه رأس "اسم" ؛ أول بتين من0x01هما00، مما يعني أن محتوى هذا الرأس عبارة عن سلسلة Unicode منتهية بـ null ( بصيغة UCS-2 )، مسبوقة بعدد البايتات التي تتكون منها (0x00 0x1e).
قد يكون الرد المحتمل، الذي يحتوي على البيانات المطلوبة، كالتالي:
| إجابة | الحقول | رمز الاستجابة | OK، أخير | 0xA0 |
|---|---|---|---|---|
| طول | الطول الإجمالي للجسم | 0x00 0x35 | ||
| العناوين | نهاية الجسم | "BEGIN:VCARD..." | 0x49 0x00 0x2F 0x42 0x45 0x47 0x49 0x4e 0x3a 0x56 0x43 0x41 0x52 0x44 |
في هذا المثال، يُفترض أن دليل الهاتف قصير بما يكفي ليتم تضمينه في كائن استجابة واحد. يحتوي العنوان الوحيد 0x49على مُعرّف، مما يعني أنه "نهاية الجسم"، أي الجزء الأخير من المعلومات (وهو الجزء الوحيد في هذه الحالة). أول بتين من هذا العنوان 0x49هما 01، مما يعني أن محتوى هذا العنوان عبارة عن بيانات مسبوقة بطول: يُشير البايتان التاليان إلى طول هذه البيانات (47 بايت بالنظام العشري)، أما البايتات اللاحقة فهي البيانات، وفي هذه الحالة دليل هاتف يتكون من بطاقة vCard فارغة بحجم 47 بايت 0x00 0x2Fفقط .
يوضح هذا المثال أمرًا واحدًا GETواستجابته، حيث تقتصر العناوين على معرّف الاتصال واسمه ونهاية نص الاستجابة. قبل تنفيذ الأمر، CONNECTكان ينبغي إرسال أمر لتحديد بعض معلمات الاتصال، بما في ذلك معرّف الاتصال. من الأوامر الأخرى PUT: SETPATHو ACTIONو ABORTو و و DISCONNECT. تتضمن بعض العناوين المهمة الأخرى: النوع ، والوقت ، والوصف ، والهدف .
حصة
بعد اتصال العميل (مثل جهاز الكمبيوتر) بالخادم (مثل الهاتف المحمول)، تتألف الجلسة النموذجية من إرسال العميل لعدد من البيانات واستلام ردودها من الخادم. على سبيل المثال:
CONNECTيُحدد أحد الحقول الحد الأقصى لحجم الحزم التي يمكن للعميل استقبالها؛TARGETويُحدد رأس الطلب نوع الخدمة التي يتوقعها العميل (تصفح الملفات، المزامنة ، الوصول إلى دفتر الهاتف)؛ ويُجيب الخادم بأقصى طول للحزمة، ومعرّف الاتصال، وبيانات أخرى.GETيطلب العميل ملفًا، مُحددًا مُعرّف الاتصال واسم الملف ونوعه؛ فيُجيب الخادم بمحتوى الملف، أو جزء منه فقط؛ وفي الحالة الأخيرة، يتعين على العميل إرسالGETكائنات أخرى للحصول على باقي الملف.SETPATHيُخبر العميل الخادم بالتبديل إلى مجلد ملفات مختلف، مُحددًا مُعرّف الاتصال واسم المجلد في رأسين.GETيطلب العميل قائمة بمحتويات المجلد عن طريق إرسال كائن يحتوي على معرف الاتصال ورأس مناسبTYPE(على سبيل المثال،x-obex/folder-listingلنقل الملفات،x-bt/vcard-listingللوصول إلى دفتر الهاتف) .PUTيرسل العميل ملفًا إلى الخادم؛ إذا كان حجمه كبيرًا جدًا بحيث لا يتسع في حزمة واحدة، فسيطلب الخادم الجزء التالي برسالة "متابعة" (CONTINUE).DISCONNECTيُبلغ العميل الخادم بأنه يُغلق الجلسة
قد يختلف التبادل بشكل كبير حسب الخدمة. على سبيل المثال، لا يستخدم SyncMLSETPATH ، بينما يتم إرسال OBEX فقط CONNECT(بدون رأس TARGET)، PUTو اختياري DISCONNECT.
البروتوكولات
تعمل البروتوكولات التالية عبر OBEX، أو تحتوي على روابط للقيام بذلك:
- دفع OBEX
- ينقل ملفًا من مُرسِل الطلب إلى المُستلِم؛ حيث يتم إرسال كائن اتصال لا يحتوي على وجهة، ثم يُستخدم أمر PUT لنقل الملف.
- بروتوكول نقل الملفات OBEX
- يخزن الملفات ويسترجعها، على غرار بروتوكول نقل الملفات (FTP) . رأس الهدف لكائن الاتصال هو `<Track>`
{0xF9, 0xEC, 0x7B, 0xC4, 0x95, 0x3C, 0x11, 0xD2, 0x98, 0x4E, 0x52, 0x54, 0x00, 0xDC, 0x9E, 0x09}؛ تحتوي الاستجابة على معرّف الاتصال الذي سيتم استخدامه في كائناتGET`<Track> ` و`<Track>PUT` و`SETPATH< Track>` اللاحقةACTION. - الوصول إلى دليل الهاتف
- يشبه نقل الملفات، ولكنه يستخدم وجهة محددة ؛ حيث
{0x79, 0x61, 0x35, 0xF0, 0xF0, 0xC5, 0x11, 0xD8, 0x09, 0x66, 0x08, 0x00, 0x20, 0x0C, 0x9A, 0x66}يمكن سرد إدخالات دفتر الهاتف (مع ترتيبات وفلاتر مختلفة) واسترجاعها من أدلة معينةtelecom/باستخدامGETSETPATH - المجلس الأيرلندي للمشي لمسافات طويلة
- صُممت بروتوكولات IrMC لتبادل بيانات دليل الهاتف، ومواعيد التقويم، وبطاقات العمل الرقمية، وقوائم المهام . في شكلها غير المتصل،
PUTتُستخدم حزمة واحدة لنقل البيانات؛ وإلا، يمكن استرجاع أو إرسال ملفات ومجلدات مختلفة داخل مجلد telecom/؛{'I', 'R', 'M', 'C', '-', 'S', 'Y', 'N', 'C'}ويمكن استخدام رأس الوجهة فيGETالطلبات لتمييز نوع الفهرسة المستخدمة. - SyncML
- يُمكن لبرنامج SyncML مزامنة دفاتر الهاتف والتقاويم والملاحظات وغيرها من البيانات. في ربط OBEX الخاص به، يكون هدف الكائن
CONNECTهو{'S', 'Y', 'N', 'C', 'M', 'L', '-', 'S', 'Y', 'N', 'C'}؛ وتتألف الجلسة حينها من سلسلة من أزواجPUT-GETحيث يتم إرسال واستقبال ملفات XML أو WBXML غير المسماة ، بالتناوب.
التطبيقات
javax.obex
توفر الحزمة الاختيارية javax.obex في واجهات برمجة تطبيقات Java لتقنية Bluetooth تطبيقًا لـ OBEX في Java . [ 1 ]
أوبن أوبكس
OpenObex هو تطبيق مفتوح المصدر لـ OBEX مكتوب بلغة C. يوفر وظائف للاتصال عبر IrDA و Bluetooth و USB و TCP/IP ، وإنشاء الكائنات ومعالجة البيانات المستلمة. مثال على مخطط تطبيق عميل:
void callback_function (...) { /* معالجة البيانات المستلمة */ }int main () { OBEX_Init (..., callback_function ); OBEX_TransportConnect (...);object = OBEX_ObjectNew (...); OBEX_ObjectAddHeader ( object , ...); OBEX_ObjectAddHeader ( object , ...); OBEX_Request (..., object ); while (...) OBEX_HandleInput (...)object = OBEX_ObjectNew (...); OBEX_ObjectAddHeader ( object , ...); OBEX_Request (..., object ); while (...) OBEX_HandleInput (...)/* ... */OBEX_TransportDisconnect ( handle ); OBEX_Cleanup ( handle ); }يتم إرسال الكائنات بواسطة الدالة OBEX_Request`. بعد استدعاء الدالة ` OBEX_HandleInput، تتم معالجة البيانات المستلمة في دالة الاستدعاء (التي تم تحديدها عند استدعاء الدالة OBEX_Init`). تستطيع دالة الاستدعاء تحديد ما إذا كانت الاستجابة قد تم استلامها بالكامل، وبالتالي ما إذا كان بإمكان البرنامج الرئيسي الخروج من whileالحلقة التي يقوم بتنفيذها.
PyOBEX و nOBEX
يوفر PyOBEX دعمًا جزئيًا لـ OBEX في بايثون . [ 2 ] أما nOBEX فهو نسخة معدلة من PyOBEX مع دعم أكثر اكتمالًا لـ OBEX، ودعم لملف تعريف Bluetooth Hands Free لتسهيل اختبار OBEX على أنظمة المعلومات والترفيه في السيارات. [ 3 ]
الملفات الشخصية
OBEX هو الأساس للعديد من "الملفات الشخصية" ذات الطبقات العليا:
| تصنيف | حساب تعريفي |
|---|---|
| هيئة تنمية الاستثمار في أيرلندا | ملف تعريف التصوير الفوري |
| نبذة عن نظام الرسائل المالية بالأشعة تحت الحمراء (IrFM) | |
| Bluetooth SIG | ملف تعريف تبادل الكائنات العامة |
| ملف تعريف نقل الكائنات (نقل البيانات من هاتف إلى هاتف) | |
| ملف تعريف نقل الملفات (نقل الملفات من الهاتف إلى الكمبيوتر) | |
| ملف تعريف المزامنة | |
| ملف تعريف التصوير الأساسي | |
| ملف تعريف الطباعة الأساسي | |
| أوما | ربط SyncML |
الأجهزة المدعومة
- أجهزة أندرويد بالإصدار 2.1 "إكلير" وما فوق
- جميع أجهزة بالم منذ بالم III ، باستثناء أجهزة webOS: بالم بري، بالم بري بلس، بالم بيكسي وبالم بيكسي بلس.
- معظم هواتف شارب ، موتورولا ، سامسونج ، سوني إريكسون ، إتش تي سي ، ونوكيا غير العاملة بنظام أندرويد والمزودة بمنفذ الأشعة تحت الحمراء أو البلوتوث . أجهزة أندرويد مدعومة ، ولكن هذا يعني أنها مدعومة أيضاً.
- إل جي إن في تاتش (VX11000)
- ظهرت العديد من أجهزة المساعد الرقمي الشخصي الأخرى منذ عام 2003، حتى تراجع استخدامها بسبب استبدالها بالهواتف الذكية.
- العديد من الهواتف الأخرى مزودة بمنفذ الأشعة تحت الحمراء أو البلوتوث
- أجهزة ويندوز فون 7.8 و 8 (يقتصر على نقل الصور والموسيقى والفيديوهات عبر تطبيق "مشاركة البلوتوث").
انظر أيضاً
مراجع
روابط خارجية
- مواصفات OBEX على موقع IrDA.org
- تم أرشفة ملفات تعريف Bluetooth في 31 ديسمبر 2013 على Wayback Machine ، بما في ذلك مواصفات بروتوكولات OBEX والبروتوكولات القائمة على OBEX (GOEP، FTP، OBEX push، SYNC).
- OpenOBEX هو تطبيق مفتوح المصدر لبروتوكول OBEX
- رابطة بيانات الأشعة تحت الحمراء
- بلوتوث
