stringtranslate.com

Intercambio de objetos

OBEX (abreviatura de OBject EXchange , también denominado IrOBEX ) es un protocolo de comunicación que facilita el intercambio de objetos binarios entre dispositivos. Lo mantiene la Asociación de Datos Infrarrojos , pero también lo ha adoptado 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 fue la 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 difiere en muchos aspectos importantes:

Objetos

OBEX funciona intercambiando 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 . A modo de ejemplo, el siguiente puede ser el objeto utilizado para solicitar la agenda desde un móvil:

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:

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

En este ejemplo, se supone que la guía telefónica es lo suficientemente corta como para estar contenida en un único objeto de respuesta. El único encabezado tiene 0x49 como identificador, lo que significa que es un "Fin del cuerpo", el último fragmento de información (también el único, en este caso). Los primeros dos 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 este caso, una agenda telefónica compuesta únicamente por una vCard vacía de 47 bytes.

Este ejemplo muestra un único comando GET y su respuesta, los únicos encabezados involucrados son la identificación de la conexión, el nombre y el final del cuerpo. Antes de emitirlo, se debería haber enviado un comando CONNECT para establecer algunos parámetros de la conexión, incluida la identificación de la conexión. Otros comandos son: poner, establecer ruta, acción, abortar, desconectar. Algunos otros encabezados notables incluyen: tipo, hora, descripción, objetivo.

Sesión

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

El cambio puede diferir significativamente según el servicio. Por ejemplo, SyncML no usa SETPATH, mientras que una inserción OBEX se realiza 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:

Empuje OBEX
Transfiere un archivo del autor de la solicitud al destinatario; Se envía un objeto CONNECTION que no contiene ningún destino, 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 la identificación de la conexión que se utilizará en los objetos GET, PUT, SETPATH ​​y ACTION posteriores.
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 enumerar (con varios ordenamientos y filtros posibles) y recuperarse de ciertos directorios en telecomunicaciones/ usando GET y SETPATH.
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, se utiliza un único PUT para transferir datos; de lo contrario, se pueden recuperar o enviar varios archivos y carpetas dentro de telecom/; se puede utilizar un encabezado de destino {'I', 'R', 'M', 'C', '-', 'S', 'Y', 'N', 'C'} en solicitudes GET para diferenciar el tipo de indexación utilizada
SincronizaciónML
SyncML puede sincronizar guías telefónicas, calendarios, notas y otros datos. En su enlace OBEX, el objetivo del objeto CONNECT es {'S', 'Y', 'N', 'C', 'M', 'L', '-', 'S', 'Y', ' N', 'C'}; Una sesión consiste entonces en una secuencia de pares PUT-GET donde se envían y reciben, por turno, archivos XML o WBXML sin nombre.

Implementaciones

javax.obex

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

AbrirObex

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 datos recibidos. Un esquema de ejemplo de una aplicación cliente es:

void callback_function (...) { /* procesar datos recibidos */ }   int main () { OBEX_Init (..., función_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 ( identificador ); OBEX_Cleanup ( manija ); } 

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 completamente y, por tanto, si el programa principal puede salir del whilebucle que se está ejecutando.

PyOBEX y nOBEX

PyOBEX proporciona soporte parcial para OBEX en Python . [3] 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. [4]

Perfiles

OBEX es la base de muchos "perfiles" de niveles superiores:

Dispositivos soportados

Ver también

Referencias

  1. ^ "Introducción y descripción general", Liderazgo educativo , Cambridge University Press, págs. 1 a 5, 22 de enero de 2007, doi :10.1017/cbo9781139168564.001, ISBN 978-0-521-68512-2, recuperado el 16 de febrero de 2024
  2. ^ API javax.obex
  3. ^ PyOBEX
  4. ^ NOBEX

enlaces externos