Marketing de Proximidad y Open Source :-: Sesion 2
1. Marketing de proximidad y
Herramientas OpenSource
GCDS09
Roberto Dí az Ortega (info@rdiaz.es)
Gema Socorro Rodrí guez (info@gemasr.com)
Universidad de Las Palmas de Gran Canaria
2. Sesión 2
Librería Bluez
Funcionalidades
Arquitectura
Ejemplo de uso
Librería Bluecove
Estructura
Ejemplo de uso
Diversas demos sobre funcionamiento de BlueZ y bluecove
3. ¿Qué es BlueZ?
BlueZ proporciona soporte para el núcleo de Bluetooth y sus
protocolos, además dispone de interesantes características
como:
✔ Implementación completamente modular
✔ Sistema Multithread
✔ Soporte para multiples dispositivos Bluetooth
✔ Abstracción real del hardware
✔ Socket standard para todas las capas
✔ Soporte de seguridad a nivel de dispositivo y servicio
4. ¿Qué es BlueZ? (II)
Actualmente Bluez implementa los siguientes módulos:
✔ Bluetooth kernel subsystem core
✔ Capas L2CAP y SCO audio kernel
✔ RFCOMM, BNEP, CMTP y HIDP kernel
✔ HCI, UART, USB PCMCIA y virtual devices drivers
✔ Librerias generales y librerias SDP así como demonios
✔ Utilidades de configuración y testeo
✔ Decodificadores de protocolo y herramientas de análisis
8. Empieza la acción....
La librería BlueZ esta disponible en la mayoría de las
distribuciones linux actuales:
La instalación en distribuciones tipo debian:
apt-get install libbluetooth-dev bluez-utils
La instalación en distribuciones tipo fedora:
yum install bluez-devel
Para envíos bluetooth también es necesario instalar ObexFTP
9. Empieza la accion... (II)
Una vez instalada la librería BlueZ en el equipo se tiene acceso
directo desde la consola de comandos al dispositivo bluetooth:
Inicio del servicio de bluetooth en el equipo:
/etc/init.d/bluetooth start
Una vez iniciado el servicio comenzamos a trabajar con el
hcitool, la herramienta del controlador del interfaz.
10. hcitool
Una vez instalada la libreria BlueZ se tiene acceso directo al
dispositivo bluetooth desde el equipo.
El comando hcitool permite obtener y configurar gran parte de
las características bluetooth:
✔ dev: Listado de dispositivos locales
✔ inq: Busqueda de dispositivos remotos
✔ scan: Busqueda de dispositivos remotos
✔ name <bdaddr>: Nombre de un dispositivo remoto
✔ info <bdaddr>: Información de un dispositvo remoto
✔ con: listado de conexiones abiertas
✔ rssi: nivel de potencia de señal recibida
12. sdptool
Una vez se conocen los dispositivos por medio del hcitool.
sdptool permite obtener los servicios bluetooth asociados a
cada dispositivo remote:
✔ search <bdaddr> service: búsqueda de servicios
✔ browser <bdaddr>: Listado de servicios remotos
14. rfcomm
El servicio rfcomm implementa un puerto serie vía bluetooth:
✔ bind <dev> <bdaddr> <canal>: Abre una conexión
RFCOMM
✔ release <dev>: Cierra conexión abierta
15. Comandos AT (hacking mode ON ...)
Los comandos AT permiten acceder a las capacidades de
comunicación de los dispositivos remotos a través de bluetooth:
✔ ATI: Devuelve el fabricante del dispositivo
✔ AT+CGMM: Devuelve el modelo del dispositivo
✔ AT+CGMR: Devuelve el firmware del dispositivo
✔ AT+CGSN: IMEI del terminal
✔ AT+CBC: Devuelve la carga de la batería
✔ ATD<numero>;: Inicia una llamada de teléfono
17. obexftp y el marketing
Obexftp es una aplicación que permite el envío de archivos
a través del protolo OBEX:
obexftp -b <dbaddr> -B <canal Obex> -U -p <fichero>
19. Integrando todo .... (demo)
Llegados a este punto se disponen de todas las herramientas
necesarias para llevar a cabo la integración y creación del
primer emisor bluetooth
20. Bluecove
Bluecove es una libreria java que implementa la especificación
JSR-82 multiplataforma.
✔ La librería soporta los siguientes perfiles bluetooth:
✔ SDAP: Perfil de descubrimiento de servicios
✔ RFCOMM: Emulación del puerto serie
✔ L2CAP: Enlace lógico y protocolo de adaptación
✔ OBEX:Protocolo de intercambio de archivos
22. Bluecove (LocalDevice)
La clase LocalDevice define las funciones básicas de bluetooth
sobre el dispositivo local
✔ getBluetoothAdress: obtiene la dirección local
✔ getDeviceClass: Obtiene la clase del dispositivo local
✔ getDiscoverable: Permite saber si el dispositivo es descubrible
✔ getDiscoveryAgent: Obtiene el discovery agent del dispositivo
✔ getFriendlyName: Obtiene el nombre del dispositivo
✔ getLocalDevice: Obtiene el control del dispositivo local
✔ setDiscoverable: Configuración descubrible
23. Bluecove (RemoteDevice)
La clase RemoteDevice define las funciones básicas de bluetooth
sobre el dispositivo remoto
✔ getBluetoothAdress: obtiene la dirección remoto
✔ getFriendlyName: Obtiene el nombre del dispositivo
✔ getRemoteDevice: Control del dispositivo remoto bajo un
protocolo determinado por conn
24. Bluecove (DiscoveryAgent)
La clase DiscoveryAgent proporciona los métodos necesarios para
la búsqueda de dispositivos y servicios
✔ cancelInquiry: detiene la búsqueda de dispostivos
✔ cancelServiceSearch: Detiene la búsqueda de servicios
✔ searchService: Implementa la búsqueda del servicio indicado
por UUID
✔ startInquiry: Inicia la búsqueda de dispositivos
25. Bluecove (DiscoveryListener)
La interfaz DiscoveryListener incluye los diferentes métodos que
se ejecutan durante la búsqueda de dispositivos y servicios
✔ deviceDiscovered: Se ejecuta al encuentrar un dispositivo
✔ inquiryCompleted: Ejecutado al finalizar la búsqueda
✔ serviceDiscovered:Se ejecuta al encontrar un dispositivo
✔ serviceSearchCompleted: Ejecutado al finalizar la búsqueda
de servicios
26. Bluecove (UUID)
La clase UUIDdefine los identificadores de cada uno de los
servicios de bluetooth
Servicios UUID
SDP 0x0001
RFCOMM 0x0003
OBEX 0x0008
HTTP 0x000C
L2CAP 0x0100
BNEP 0x000F
Serial Port 0x1101
ServiceDiscoveryServerServiceClassID 0x1000
BrowseGroupDescriptorServiceClassID 0x1001
PublicBrowseGroup 0x1002
OBEX Object Push Profile 0x1105
OBEX File Transfer Profile 0x1106
Personal Area Networking User 0x1115
Network Access Point 0x1116
Group Network 0x1117
27. OBEX (ClientSession)
La interfaz ClientSession proporciona los métodos para peticiones
OBEX, estableciendo las cabeceras de conexión de OBEX.
✔ connect: Establece una conexión OBEX
✔ disconnect: Cierra la conexión OBEX actual
✔ createHeaderSet: Crea una cabecera OBEX para una conexión
✔ put: Realiza una operación de envío de comando
28. OBEX (HeaderSet)
La interfaz HeaderSet establece las cabeceras de la comunicación
a través de OBEX y recibe las respuestas del dispositivo remoto
✔ getResponseCode: Obtiene la respuesta del dispositivo
✔ setHeader: Configura parámetros de la cabecera
29. OBEX (Operation)
La clase Operation implementa los métodos para la manipulación
de operaciones de PUT y GET simples a través de OBEX
Hereda de la clase io los métodos de openInputStream y
openOutputStream
30. Estructura de un emisor bluetooth
Un sistema de marketing de proximidad esta compuesto por los siguientes
bloques:
Monitorización y logs
Gestión de dispositivos
Gestión de envíos
remotos
obexFTP
Bluez
31. Gestión de dispositivos remotos
inicio
Busqueda de dispositivos
Busqueda de servicios inicio
si
Baneado
no
Envío
32. Gestión de dispositivos remotos
registrar
Solicitud de envio Banear
Enviar archivo
si
Aceptado registrar
no Banear
si
Rechazado
no
inicio
33. Monitorización y Logs
Este módulo constituye una base de datos donde se almacenan
los datos de envíos aceptados, rechazados ignorados.
Gracias a estos ficheros de logs se puede evitar que el sistema
envíe a un usuario que haya rechazado una nueva petición de
envío.
Se pueden establecer políticas de reenvío en función de
parámetros como tiempo desde el último envío rechazado.
34. nodo bluecove (demo)
Una imagen vale más que mil palabras
pero ocupa más memoria....
proverbio freak