Articulo de referencia

Intercambio de objetos

OBEX (abreviatura de OBject EXchange , también conocido como IrOBEX ) es un protocolo de comunicación que facilita el intercambio de objetos binarios entre dispositivos. Es mant...

OBEX (abreviatura de OBject EXchange , también conocido como IrOBEX ) es un protocolo de comunicación que facilita el intercambio de objetos binarios entre dispositivos. Es mantenido por la Infrared Data Association , pero también ha sido adoptado por el Bluetooth Special Interest Group y la rama SyncML de la Open Mobile Alliance (OMA). Una de las primeras aplicaciones populares de OBEX fue la Palm III . Esta PDA y sus numerosos sucesores utilizan OBEX para intercambiar tarjetas de visita, datos e incluso aplicaciones.

Aunque OBEX fue diseñado inicialmente para infrarrojos, ahora ha sido adoptado por Bluetooth y también se utiliza a través de RS-232 , USB , WAP y en dispositivos como los bolígrafos inteligentes Livescribe .

Comparación con HTTP

OBEX es similar en diseño y funcionamiento a HTTP, ya que proporciona al cliente un transporte fiable para conectarse a un servidor y, posteriormente, solicitar o proporcionar objetos. Sin embargo, OBEX difiere en muchos aspectos importantes:

  • HTTP normalmente se implementa sobre un enlace TCP/IP . OBEX también puede hacerlo, pero comúnmente se implementa sobre una pila IrLAP / IrLMP / TinyTP en un dispositivo IrDA . En Bluetooth , OBEX se implementa sobre una pila Baseband / ACL / L2CAP (y, para usos heredados, RFCOMM ). Son posibles otras "enlaces" de OBEX, como a través de USB .
  • HTTP utiliza texto legible para humanos, pero OBEX utiliza tripletas de tipo-longitud-valor en formato binario llamadas "Encabezados" para intercambiar información sobre una solicitud o un objeto. Estas son mucho más fáciles de analizar para dispositivos con recursos limitados.
  • Las transacciones HTTP son inherentemente sin estado; por lo general, un cliente HTTP abre una conexión, realiza una única solicitud, recibe su respuesta y, posteriormente, cierra la conexión o realiza otras solicitudes no relacionadas . En OBEX, una única conexión de transporte puede contener muchas operaciones relacionadas. De hecho, las recientes incorporaciones a la especificación OBEX permiten reanudar una transacción cerrada abruptamente conservando toda la información de estado.

objetos

OBEX funciona mediante el intercambio de objetos , que se utilizan para diversos fines: establecer los parámetros de una conexión, enviar y solicitar datos, cambiar la ruta actual o los atributos de un archivo.

Los objetos son campos y encabezados . Por ejemplo, el siguiente podría ser el objeto utilizado para solicitar la agenda telefónica desde un teléfono móvil:

Este objeto contiene dos campos (comando y longitud) y dos encabezados. El primer campo (comando) especifica que se trata de una solicitud de datos ( GET). El segundo campo es el tamaño total del objeto, incluyendo los dos campos.

Este objeto también contiene dos encabezados, específicamente un "ID de conexión" y un "Nombre". El primer byte de cada encabezado es el nombre del encabezado y su tipo de contenido. En este caso:

  • 0xCBsignifica que este encabezado es un "ID de conexión", un número obtenido previamente; los dos bits de orden más alto de 0xCBson 11, y este par especifica que esto es una cantidad de 4 bytes;
  • El primer byte del segundo encabezado es 0x01; este byte identifica este encabezado como uno de "Nombre"; los dos primeros bits de 0x01son , lo que significa que el contenido de este encabezado es una cadena Unicode00 terminada en nulo (en formato UCS-2 ), precedida por el número de bytes que la componen ( ).0x00 0x1e

Una posible respuesta, que contenga los datos solicitados, podría ser:

En este ejemplo, se supone que la agenda telefónica es lo suficientemente corta como para estar contenida en un único objeto de respuesta. El único encabezado tiene 0x49como identificador, lo que significa que es un "Fin del Cuerpo", el último fragmento de información (también el único, en este caso). Los dos primeros bits de 0x49son 01, lo que significa que el contenido de este encabezado son datos con prefijo de longitud: los dos bytes siguientes 0x00 0x2Findican la longitud de estos datos (en decimal, 47), los subsiguientes son los datos, en este caso una agenda telefónica que comprende solo una vCard vacía de 47 bytes.

Este ejemplo muestra un solo GETcomando y su respuesta, siendo los únicos encabezados involucrados el ID de conexión, el nombre y el final del cuerpo. Antes de emitirlo, CONNECTse debería haber enviado un comando para establecer algunos parámetros de la conexión, incluido el ID de conexión. Otros comandos son PUT, SETPATH, ACTION, ABORT, y DISCONNECT. Algunos otros encabezados notables incluyen tipo , tiempo , descripción , destino .

Sesión

Después de que el cliente (por ejemplo, una computadora) se conecta al servidor (por ejemplo, un dispositivo móvil), una sesión típica consiste en que el cliente envía una serie de objetos y recibe sus respuestas del servidor. Como ejemplo:

  • CONNECT: uno de los campos especifica el tamaño máximo de los paquetes que el cliente puede recibir; un TARGETencabezado especifica el tipo de servicio que el cliente espera (exploración de archivos, sincronización , acceso a la agenda telefónica); el servidor responde con la longitud máxima de su paquete, el ID de conexión y otros datos.
  • GETEl cliente solicita un archivo, especificando el ID de conexión, el nombre del archivo y/o su tipo; el servidor responde con el contenido del archivo, o solo una parte del mismo; en este último caso, el cliente tiene que enviar otros GETobjetos para obtener el resto del archivo.
  • SETPATH: el cliente le indica al servidor que cambie a una carpeta de archivos diferente, especificando el ID de conexión y el nombre de la carpeta en dos encabezados.
  • GET: el cliente solicita una lista del contenido de la carpeta enviando un objeto con el ID de conexión y un TYPEencabezado apropiado (por ejemplo, x-obex/folder-listingpara transferencia de archivos, x-bt/vcard-listingpara acceso a la agenda telefónica).
  • PUTEl cliente envía un archivo al servidor; si es demasiado grande para caber en un solo paquete, el servidor solicitará la siguiente parte con una respuesta CONTINUE.
  • DISCONNECTEl cliente informa al servidor que está cerrando la sesión.

El intercambio puede variar significativamente según el servicio. Por ejemplo, SyncML no utiliza SETPATH, mientras que un envío OBEX se compone únicamente de CONNECT(sin un encabezado TARGET) PUTy un opcional DISCONNECT.

Protocolos

Los siguientes protocolos se ejecutan sobre OBEX o tienen enlaces para hacerlo:

Empuje de OBEX
Transfiere un archivo desde el origen de la solicitud al destinatario; se envía un objeto CONNECTION que no contiene un destino, luego se utiliza PUT para transferir el archivo.
Protocolo de transferencia de archivos OBEX
Almacena y recupera archivos, de forma similar a FTP . El encabezado de destino del objeto CONNECTION es {0xF9, 0xEC, 0x7B, 0xC4, 0x95, 0x3C, 0x11, 0xD2, 0x98, 0x4E, 0x52, 0x54, 0x00, 0xDC, 0x9E, 0x09}; la respuesta contiene el ID de conexión que se utilizará en los objetos subsiguientes GET, PUT, SETPATHy ACTION.
Acceso a la agenda telefónica
Similar a la transferencia de archivos, pero utiliza un destino {0x79, 0x61, 0x35, 0xF0, 0xF0, 0xC5, 0x11, 0xD8, 0x09, 0x66, 0x08, 0x00, 0x20, 0x0C, 0x9A, 0x66}; las entradas de la agenda telefónica se pueden listar (con varios posibles ordenamientos y filtros) y recuperar de ciertos directorios mediante telecom/el uso GETde ySETPATH
IrMC
IrMC fue diseñado para el intercambio de entradas de agenda telefónica, entradas de calendario, tarjetas de presentación digitales y listas de tareas pendientes . En su forma sin conexión, PUTse utiliza un único para transferir datos; de lo contrario, se pueden recuperar o enviar varios archivos y carpetas dentro de telecom/; {'I', 'R', 'M', 'C', '-', 'S', 'Y', 'N', 'C'}se puede utilizar un encabezado de destino en GETlas solicitudes para diferenciar el tipo de indexación utilizada.
Sincronización de aprendizaje automático
SyncML puede sincronizar agendas telefónicas, calendarios, notas y otros datos. En su enlace OBEX, el destino del CONNECTobjeto es {'S', 'Y', 'N', 'C', 'M', 'L', '-', 'S', 'Y', 'N', 'C'}; una sesión consiste entonces en una secuencia de pares PUT- GETdonde se envían y reciben archivos XML o WBXML sin nombre , alternativamente.

Implementaciones

javax.obex

El paquete opcional javax.obex en las API de Java para Bluetooth proporciona una implementación de OBEX en Java . [ 1 ]

OpenObex

OpenObex es una implementación de código abierto de OBEX en C. Proporciona funciones para la conexión a través de IrDA , Bluetooth , USB y TCP/IP , la creación de objetos y el manejo de los datos recibidos. Un ejemplo de esquema de una aplicación cliente es:

void callback_function (...) { /* procesar los datos recibidos */ }int main () { OBEX_Init (..., callback_function ); OBEX_TransportConnect (...);objeto = OBEX_ObjectNew (...); OBEX_ObjectAddHeader ( objeto , ...); OBEX_ObjectAddHeader ( objeto , ...); OBEX_Request (..., objeto ); mientras (...) OBEX_HandleInput (...)objeto = OBEX_ObjectNew (...); OBEX_ObjectAddHeader ( objeto , ...); OBEX_Request (..., objeto ); mientras (...) OBEX_HandleInput (...)/* ... */OBEX_TransportDisconnect ( manejador ); OBEX_Cleanup ( manejador ); }

Los objetos se envían mediante OBEX_Request. Tras llamar a OBEX_HandleInput, los datos recibidos se procesan en la función de devolución de llamada (que se especificó al llamar a OBEX_Init). La función de devolución de llamada puede determinar si la respuesta se ha recibido por completo y, por lo tanto, si el programa principal puede salir del whilebucle en el que se está ejecutando.

PyOBEX y nOBEX

PyOBEX proporciona soporte parcial para OBEX en Python . [ 2 ] nOBEX es una bifurcación de PyOBEX con soporte OBEX más completo y soporte para el perfil Bluetooth Hands Free para facilitar las pruebas OBEX en sistemas de infoentretenimiento automotriz. [ 3 ]

Perfiles

OBEX es la base de muchos "perfiles" de nivel superior:

Dispositivos compatibles

Véase también

Referencias

  1. API javax.obex
  2. PyOBEX
  3. nOBEX
  • Especificación OBEX en IrDA.org
  • Perfiles Bluetooth archivados el 31/12/2013 en Wayback Machine , incluyendo especificaciones para OBEX y protocolos basados ​​en OBEX (GOEP, FTP, OBEX push, SYNC).
  • OpenOBEX es una implementación de código abierto del protocolo OBEX.
Obtenido de " https://en.wikipedia.org/w/index.php?title=OBject_EXchange&oldid=1363224520 "