VÝMĚNA OBJEKTŮ - OBject EXchange

OBEX (zkratka VÝMĚNA OBJEKTŮ, také nazývané IrOBEX) je komunikační protokol, který usnadňuje výměnu binárních objektů mezi zařízeními. Je udržován Sdružení infračervených dat ale byl rovněž přijat Bluetooth Speciální zájmová skupina a SyncML křídlo Otevřete mobilní alianci (OMA). Jedna z prvních populárních aplikací OBEX byla v Palm III. Tento PDA a jeho mnoho nástupců používá OBEX k výměně vizitek, dat a dokonce i aplikací.

Ačkoli byl OBEX původně navržen pro infračervené záření, nyní jej přijal Bluetooth, a je také používán opakovaně RS-232, USB, WAP a v zařízeních, jako je Livescribe inteligentní pera.

Srovnání s HTTP

OBEX je podobný z hlediska designu a funkce HTTP při poskytování klientovi spolehlivý přenos pro připojení k serveru a poté může požadovat nebo poskytovat objekty. Ale OBEX se liší v mnoha důležitých ohledech:

  • HTTP je obvykle navrstvený nad a TCP / IP odkaz. OBEX může také být, ale běžně se implementuje na IrLAP /IrLMP /Drobný TP stoh na IrDA přístroj. v Bluetooth, OBEX je implementován na a Základní pásmo /ACL /L2CAP (a pro starší použití RFCOMM ) zásobník. Jsou možná další taková „vazba“ OBEX, například přes USB.
  • HTTP používá text čitelný člověkem, ale OBEX používá binární formát typ-délka-hodnota trojčata s názvem „Záhlaví“ pro výměnu informací o požadavku nebo objektu. Ty je mnohem snazší analyzovat pomocí zařízení s omezeným zdrojem.
  • Transakce HTTP jsou ze své podstaty bez státní příslušnosti; klient HTTP obvykle otevře připojení, odešle jeden požadavek, obdrží odpověď a buď uzavře připojení, nebo dává další nesouvisející požadavky. V OBEXu může jediné dopravní spojení nést mnoho souvisejících operací. Ve skutečnosti nedávné dodatky ke specifikaci OBEX umožňují obnovení náhle uzavřené transakce s neporušenými všemi informacemi o stavu.

Objekty

OBEX funguje výměnou předměty, které se používají pro různé účely: stanovení parametrů připojení, odesílání a vyžádání dat, změna aktuální cesty nebo atributů souboru.

Objekty jsou pole a záhlaví. Jako příklad může být následující objekt použitý pro vyžádání telefonního seznamu z mobilního telefonu:

ObjektPolePříkazZÍSKAT, finále0x83
Délkacelková délka objektu0x00 0x29
ZáhlavíID připojení10xCB 0x00 0x00 0x00 0x01
název„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

Tento objekt obsahuje dvě pole (příkaz a délku) a dvě záhlaví. První pole (příkaz) určuje, že jde o požadavek na data (GET). Druhé pole je celková velikost objektu, včetně dvou polí.

Tento objekt také obsahuje dvě záhlaví, konkrétně „ID připojení“ a „Název“. První bajt každé záhlaví je název záhlaví a jeho typ obsahu. V tomto případě:

  • 0xCB znamená, že tato hlavička je „ID připojení“, číslo získané dříve; dva bity nejvyššího řádu 0xCB jsou 11 a tato dvojice určuje, že je to jako 4bajtová veličina;
  • první bajt druhé hlavičky je 0x01; tento bajt identifikuje tuto hlavičku jako „Jméno“; první dva bity 0x01 jsou 00, což znamená, že obsah této hlavičky je řetězec Unicode zakončený nulou (v UCS-2 form) s předponou počtu bytů, ze kterých je vytvořen (0x00 0x1e).

Možná odpověď obsahující požadovaná data může být:

OdezvaPoleKód odpovědiDobře, konečné0xA0
Délkacelková délka objektu0x00 0x35
ZáhlavíKonec těla„ZAČÁTEK: VCARD ...“0x49 0x00 0x2F 0x42 0x45 0x47 0x49 0x4e 0x3a 0x56 0x43 0x41 0x52 0x44

V tomto příkladu se telefonní seznam předpokládá dostatečně krátký na to, aby byl obsažen v jediném objektu odpovědi. Jediná hlavička má jako identifikátor 0x49, což znamená, že se jedná o „konec těla“, poslední část informací (v tomto případě také jedinou). První dva bity 0x49 jsou 01, což znamená, že obsah této hlavičky jsou data s předponou délky: dva další bajty 0x00 0x2F říká délku těchto dat (v desítkové soustavě, 47), následující jsou data, v tomto v případě telefonního seznamu obsahujícího pouze prázdný vCard 47 bajtů.

Tento příklad ukazuje jediný příkaz GET a jeho odpověď, přičemž hlavičkami jsou pouze ID připojení, název a konec těla. Před jeho vydáním by měl být odeslán příkaz CONNECT pro vytvoření některých parametrů připojení, včetně ID připojení. Další příkazy jsou: put, setpath, action, abort, odpojit. Některé další pozoruhodné záhlaví zahrnují: typ, čas, popis, cíl.

Zasedání

Poté, co se klient (např. Počítač) připojí k serveru (např. Mobil), typická relace spočívá v tom, že klient odešle několik objektů a získá jejich odpovědi ze serveru. Jako příklad:

  • PŘIPOJIT: jedno z polí určuje největší velikost paketů, které může klient přijmout; záhlaví TARGET určuje druh služby, kterou klient očekává (procházení souborů, synchronizace-ml, přístup k telefonnímu seznamu); odpověď serveru s maximální délkou paketu, ID připojení a dalšími údaji
  • ZÍSKAT: klient požaduje soubor s uvedením ID připojení, názvu souboru a / nebo jeho typu; odpověď serveru s obsahem souboru nebo jen s jeho částí; v druhém případě musí klient poslat další objekty GET, aby získal zbytek souboru
  • SETPATH: klient řekne serveru, aby přepnul do jiné složky se soubory, přičemž ve dvou hlavičkách uvede ID připojení a název složky
  • ZÍSKAT: klient požaduje výpis obsahu složky odesláním objektu s ID připojení a příslušnou hlavičkou TYPE (např. „X-obex / folder-listing“ pro přenos souborů, „x-bt / vcard-listing“ pro přístup do telefonního seznamu)
  • PUT: klient odešle soubor na server; pokud je příliš velká na to, aby se vešla do jednoho paketu, server si vyžádá další část s odpovědí POKRAČOVAT
  • DISCONNECT: klient informuje server, který uzavírá relaci

Výměna se může výrazně lišit v závislosti na službě. Například, SyncML nepoužívá SETPATH, zatímco OBEX tlačit je vyroben pouze z CONNECT (bez záhlaví TARGET), PUT a volitelného DISCONNECT.

Protokoly

Následující protokoly běží přes OBEX nebo k tomu mají vazby:

OBEX Push
Přenese soubor od původce požadavku příjemci; je odeslán objekt CONNECTION, který neobsahuje žádný cíl, pak se k přenosu souboru použije PUT
Protokol pro přenos souborů OBEX
Ukládá a načítá soubory podobně jako FTP. Cílová hlavička objektu CONNECTION je {0xF9, 0xEC, 0x7B, 0xC4, 0x95, 0x3C, 0x11, 0xD2, 0x98, 0x4E, 0x52, 0x54, 0x00, 0xDC, 0x9E, 0x09}; odpověď obsahuje ID připojení, které se použije v následném objektu GET, PUT, SETPATH ​​a ACTION.
Přístup do telefonního seznamu
Podobně jako přenos souborů, ale používá cíl {0x79, 0x61, 0x35, 0xF0, 0xF0, 0xC5, 0x11, 0xD8, 0x09, 0x66, 0x08, 0x00, 0x20, 0x0C, 0x9A, 0x66}; položky telefonního seznamu mohou být uvedeny (s různými možnými objednávkami a filtry) a načteny z určitých adresářů pod telekomunikací / pomocí GET a SETPATH
IrMC
IrMC byl navržen pro výměnu položek telefonního seznamu, položek kalendáře, digitálních vizitek a seznamy úkolů. Ve formě bez připojení se k přenosu dat používá jediný PUT; jinak lze načíst nebo odeslat různé soubory a složky v rámci telekomunikací /; v požadavcích GET může být použito cílové záhlaví {'I', 'R', 'M', 'C', '-', 'S', 'Y', 'N', 'C'} pro rozlišení druhu použitého indexování
SyncML
SyncML může synchronizovat telefonní seznamy, kalendáře, poznámky a další data. Ve vazbě OBEX je cílem objektu CONNECT {'S', 'Y', 'N', 'C', 'M', 'L', '-', 'S', 'Y', ' N ',' C '}; relace pak spočívá v posloupnosti párů PUT-GET, kde jsou bezejmenné XML nebo WBXML soubory jsou zasílány a přijímány.

Implementace

javax.obex

Volitelný balíček javax.obex v Java API pro Bluetooth poskytuje implementaci OBEX v Jáva.[1]

OpenObex

OpenObex je open-source implementace OBEX v C. Poskytuje funkce pro připojení IrDA, Bluetooth, USB a TCP / IP, stavební objekty a nakládání s přijatými daty. Příklad schématu klientské aplikace je:

prázdnota callback_function(...) {  / * zpracovat přijatá data * /}int hlavní() {  OBEX_Init(..., callback_function);  OBEX_TransportConnect(...);  objekt = OBEX_ObjectNový(...);  OBEX_ObjectAddHeader(objekt, ...);  OBEX_ObjectAddHeader(objekt, ...);  OBEX_Request(..., objekt);  zatímco (...)    OBEX_HandleInput(...)  objekt = OBEX_ObjectNový(...);  OBEX_ObjectAddHeader(objekt, ...);  OBEX_Request(..., objekt);  zatímco (...)    OBEX_HandleInput(...)  /* ... */  OBEX_Transport Odpojit(Rukojeť);  OBEX_Cleanup(Rukojeť);}

Objekty jsou odesílány uživatelem OBEX_Request. Po zavolání OBEX_HandleInput, přijatá data jsou zpracována ve funkci zpětného volání (která byla zadána při volání OBEX_Init). Funkce zpětného volání může určit, zda byla odpověď zcela přijata, a tedy zda může hlavní program opustit zatímco smyčka, kterou provádí.

PyOBEX a nOBEX

PyOBEX poskytuje částečnou podporu pro OBEX v Krajta.[2] nOBEX je vidlice PyOBEX s úplnější podporou OBEX a podporou Bluetooth Hands free profil usnadnit testování OBEX na informačních a zábavních systémech pro automobily.[3]

Profily

OBEX je základem pro mnoho „vrstev“ vyšších vrstev:

Profily
KlasifikaceProfil
IrDANamiřte a vystřelte profil
Infračervené finanční zprávy (IrFM) profil
Bluetooth SIGObecný profil výměny objektů
Profil push objektu (přenosy z telefonu na telefon)
Profil přenosu souborů (přenosy z telefonu na PC)
Synchronizační profil
Základní zobrazovací profil
Základní profil tisku
OMASyncML vazba

Podporovaná zařízení

Viz také

Reference

externí odkazy