OBEX (abreviatura del objeto de Exchange , también denominado IrOBEX ) es un protocolo de comunicaciones que facilita el intercambio de objetos binarias entre dispositivos. Es mantenido por la Asociación de Datos Infrarrojos, pero también ha sido adoptado por el Grupo de Interés Especial de Bluetooth y el ala SyncML de la Open Mobile Alliance (OMA). Una de las primeras aplicaciones populares de OBEX estaba en Palm III . Esta PDA y sus muchos sucesores utilizan OBEX para intercambiar tarjetas de visita, datos e incluso aplicaciones.
Aunque OBEX se diseñó 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 función a HTTP al proporcionar al cliente un transporte confiable para conectarse a un servidor y luego puede solicitar o proporcionar objetos. Pero OBEX se diferencia en muchos aspectos importantes:
- HTTP normalmente se superpone a un enlace TCP / IP . OBEX también puede serlo, pero comúnmente se implementa en una pila IrLAP / IrLMP / Tiny TP en un dispositivo IrDA . En Bluetooth , OBEX se implementa en una pila Baseband / ACL / L2CAP (y, para usos heredados, RFCOMM ). Son posibles otras "vinculaciones" de OBEX, como a través de USB .
- HTTP usa texto legible por humanos, pero OBEX usa tripletes de tipo, longitud y valor con formato binario llamados "Encabezados" para intercambiar información sobre una solicitud o un objeto. Estos son mucho más fáciles de analizar mediante dispositivos con recursos limitados.
- Las transacciones HTTP son inherentemente sin estado; generalmente, un cliente HTTP abre una conexión, realiza una sola solicitud, recibe su respuesta y cierra la conexión o realiza otras solicitudes no relacionadas . En OBEX, una sola conexión de transporte puede soportar muchas operaciones relacionadas. De hecho, las adiciones recientes a la especificación OBEX permiten reanudar una transacción cerrada abruptamente con toda la información de estado intacta.
Objetos
OBEX funciona intercambiando objetos , que se utilizan para una variedad de propósitos: 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 . Como ejemplo, el siguiente puede ser el objeto utilizado para solicitar la agenda desde un móvil:
Objeto | Campos | Mando | OBTENER, Final | 0x83 |
---|---|---|---|---|
Largo | longitud total del objeto | 0x00 0x29 | ||
Encabezados | ID de conexión | 1 | 0xCB 0x00 0x00 0x00 0x01 | |
Nombre | "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 |
Este objeto contiene dos campos (comando y longitud) y dos encabezados. El primer campo (comando) especifica que es una solicitud de datos (GET). El segundo campo es el tamaño total del objeto, incluidos 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:
- 0xCB significa que este encabezado es un "ID de conexión", un número obtenido previamente; los dos bits de orden más alto de 0xCB son 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 un "Nombre"; los dos primeros bits de 0x01 son 00, lo que significa que el contenido de este encabezado es una cadena Unicode terminada en nulo (en forma UCS-2 ), precedida por el número de bytes que lo componen (0x00 0x1e).
Una posible respuesta, que contenga los datos solicitados, podría ser:
Respuesta | Campos | Código de respuesta | OK, final | 0xA0 |
---|---|---|---|---|
Largo | longitud total del objeto | 0x00 0x35 | ||
Encabezados | Extremo del cuerpo | "COMIENZO: VCARD ..." | 0x49 0x00 0x2F 0x42 0x45 0x47 0x49 0x4e 0x3a 0x56 0x43 0x41 0x52 0x44 |
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 0x49 como su 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 0x49 son 01, lo que significa que el contenido de este encabezado son datos con prefijo de longitud: los dos bytes siguientes 0x00 0x2F indican la longitud de estos datos (en decimal, 47), los siguientes son los datos, en este En el caso de una agenda telefónica que comprende solo una vCard vacía de 47 bytes.
Este ejemplo muestra un solo comando GET y su respuesta, los únicos encabezados involucrados son el ID de conexión, el nombre y el final del cuerpo. Antes de emitirlo, debería haberse enviado un comando CONNECT para establecer algunos parámetros de la conexión, incluido el ID de la conexión. Otros comandos son: poner, establecer ruta, acción, abortar, desconectar. Algunos otros encabezados notables incluyen: tipo, hora, descripción, destino.
Sesión
Después de que el cliente (por ejemplo, una computadora) se conecta al servidor (por ejemplo, un móvil), una sesión típica consiste en que el cliente envíe una serie de objetos y obtenga sus respuestas del servidor. Como ejemplo:
- CONECTAR: uno de los campos especifica el tamaño más grande de paquetes que el cliente puede recibir; un encabezado TARGET especifica el tipo de servicio que espera el cliente (exploración de archivos, sync-ml, acceso a la agenda telefónica); el servidor responde con su longitud máxima de paquete, la identificación de la conexión y otros datos
- GET: el 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 objetos GET para obtener el resto del archivo
- SETPATH: el cliente le dice 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
- OBTENER: el cliente solicita una lista del contenido de la carpeta enviando un objeto con el ID de conexión y un encabezado TIPO apropiado (por ejemplo, "x-obex / folder-Listing" para la transferencia de archivos, "x-bt / vcard-Listing" para acceso a la agenda)
- PUT: el 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 CONTINUAR
- DESCONECTAR: el cliente informa al servidor que cierra la sesión
El intercambio puede diferir significativamente según el servicio. Por ejemplo, SyncML no usa SETPATH, mientras que una inserción OBEX se hace solo con CONNECT (sin un encabezado TARGET), PUT y un DISCONNECT opcional.
Protocolos
Los siguientes protocolos se ejecutan sobre OBEX o tienen enlaces para hacerlo:
- OBEX Push
- Transfiere un archivo del autor de la solicitud al destinatario; se envía un objeto CONNECTION que no contiene ningún objetivo, luego se usa PUT para transferir el archivo
- Protocolo de transferencia de archivos OBEX
- Almacena y recupera archivos, 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 siguientes objetos GET, PUT, SETPATH y ACTION.
- Acceso a la agenda telefónica
- Similar a la transferencia de archivos, pero utiliza un objetivo {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 enumerar (con varios posibles ordenamientos y filtros) y recuperar de ciertos directorios en telecomunicaciones / usando GET y SETPATH
- IrMC
- IrMC fue diseñado para el intercambio de entradas de directorio telefónico, entradas de calendario, tarjetas de presentación digitales y listas de tareas pendientes . En su forma sin conexión, se utiliza un solo PUT para transferir datos; de lo contrario, se pueden recuperar o enviar varios archivos y carpetas dentro de telecomunicaciones /; un encabezado de destino {'I', 'R', 'M', 'C', '-', 'S', 'Y', 'N', 'C'} se puede usar en las solicitudes GET para diferenciar el tipo de indexación utilizada
- SyncML
- SyncML puede sincronizar directorios telefónicos, calendarios, notas y otros datos. En su enlace OBEX, el destino del objeto CONNECT es {'S', 'Y', 'N', 'C', 'M', 'L', '-', 'S', 'Y', ' N ',' C '}; una sesión luego consiste en una secuencia de pares PUT-GET donde se envían y reciben archivos XML o WBXML sin nombre , a su vez.
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 conectarse a través de IrDA , Bluetooth , USB y TCP / IP , construir objetos y manejar los datos recibidos. Un ejemplo de esquema de una aplicación cliente es:
void callback_function (...) { / * procesar datos recibidos * / }int main () { OBEX_Init (..., función de devolución de llamada ); 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 ( manejar ); OBEX_Cleanup ( manejar ); }
Los objetos son enviados por OBEX_Request
. Después de llamar OBEX_HandleInput
, los datos recibidos se procesan en la función de devolución de llamada (que se especificó al llamar 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 while
bucle que 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 de manos libres Bluetooth para facilitar las pruebas OBEX en sistemas de información y entretenimiento automotrices. [3]
Perfiles
OBEX es la base de muchos "perfiles" de capa superior:
Clasificación | Perfil |
---|---|
IrDA | Perfil de apuntar y disparar |
Perfil de mensajería financiera por infrarrojos (IrFM) | |
Bluetooth SIG | Perfil de intercambio de objetos genérico |
Object Push Profile (transferencias de teléfono a teléfono) | |
Perfil de transferencia de archivos (transferencias de teléfono a PC) | |
Perfil de sincronización | |
Perfil de imagen básico | |
Perfil de impresión básico | |
OMA | SyncML vinculante |
Dispositivos soportados
- Todas las Palms desde Palm III , excepto Palm Pre, Palm Pre Plus, Palm Pixi y Palm Pixi Plus.
- La mayoría de los teléfonos Sharp , Motorola , Samsung , Sony Ericsson , HTC y Nokia con puerto de infrarrojos o Bluetooth
- LG EnV Touch (VX11000)
- Muchas otras PDA desde 2003
- Muchos otros teléfonos con puerto de infrarrojos o Bluetooth
- Dispositivos Android en la versión 2.1 y superior
- Dispositivos con Windows Phone 7.8 y 8 (limitado a la transferencia de imágenes, música y videos a través de una aplicación 'Bluetooth Share').
Ver también
- Acceso a archivos compartidos
- Lista de perfiles de Bluetooth
Referencias
- ^ API javax.obex
- ^ PyOBEX
- ^ nOBEX
enlaces externos
- Especificación OBEX en IrDA.org
- Perfiles de Bluetooth , incluidas especificaciones para protocolos OBEX y basados en OBEX (GOEP, FTP, OBEX push, SYNC)
- OpenOBEX una implementación de código abierto del protocolo OBEX