Академический Документы
Профессиональный Документы
Культура Документы
Trabajo de graduación:
Presentan:
OCTUBRE – 2007
RESUMEN
WDS es un sistema capaz de monitorear y controlar los servicios que presta uno o
mas servidores por medio de mensajes de texto SMS vía teléfono celular, es
altamente configurable e interactivo. Por el tipo de tecnología utilizada es una
solución que ofrece economía, seguridad y movilidad.
Las partes que componen el presente trabajo son las siguientes: Marco teórico el
cual nos proporciona los conocimientos para entender como funciona el proyecto
WDS; un análisis de la situación actual de la administración de servidores; la
propuesta de solución, explica por medio de casos de uso, diagramas de secuencia y
otro tipo de gráficos la forma de resolver el problema y justifica la elección de la
tecnología utilizada; la metodología, va detallando la instalación y configuración de
todos y cada uno de los componentes del proyecto WDS, indicando los pasos a
seguir para su correcto funcionamiento. Finalmente las pruebas realizadas para
demostrar la funcionalidad de este proyecto.
Página 2 de 82
Maestría en Informática Aplicada en Redes
Índice
Introducción .................................................................................................................... 4
Objetivos .......................................................................................................................... 6
I. Marco conceptual ...................................................................................................... 7
1.1 SMS.................................................................................................................... 7
1.2 SMSC ................................................................................................................. 7
1.3 Proyecto Gammu ............................................................................................. 8
1.4 MySql ............................................................................................................... 16
1.5 Java .................................................................................................................. 18
1.6 Eclipse.............................................................................................................. 22
1.7 Lomboz ............................................................................................................ 28
1.8 Hibernate ......................................................................................................... 28
1.9 PERL ................................................................................................................ 30
II. Análisis del problema............................................................................................ 32
2.1 Situación actual .............................................................................................. 32
2.2 Planteamiento del problema......................................................................... 34
III. Propuesta de solución ......................................................................................... 38
3.1 Diagrama de contexto (Nivel 0) ................................................................... 38
3.2 Diagrama de nivel 1 ....................................................................................... 40
3.3 Diagrama de nivel 2 ....................................................................................... 41
3.4 Software a utilizar:.......................................................................................... 43
IV. Metodología ....................................................................................................... 45
4.1 Estructura de Carpetas y archivos del sistema WDS .............................. 45
4.2 Requisitos del sistema WDS ........................................................................ 48
4.3 Instalación y configuración del proyecto WDS y de GAMMU................. 48
4.4 Scripts del sistema WDS............................................................................... 50
4.5 Aplicación Java............................................................................................... 57
V. Prototipo y resultados alcanzados ................................................................... 67
VI. Conclusiones generales ...................................................................................... 71
Bibliografía..................................................................................................................... 72
Anexos ............................................................................................................................ 72
Página 3 de 82
Maestría en Informática Aplicada en Redes
Introducción
Página 4 de 82
Maestría en Informática Aplicada en Redes
Página 5 de 82
Maestría en Informática Aplicada en Redes
Objetivos
Página 6 de 82
Maestría en Informática Aplicada en Redes
I. Marco conceptual
1.1 SMS
El servicio de mensajes cortos o SMS (Short Message Service) es un servicio
disponible en los teléfonos móviles que permite el envío de mensajes cortos (también
conocidos como mensajes de texto) entre teléfonos móviles, teléfonos fijos y otros
dispositivos de mano. SMS fue diseñado originalmente como parte del estándar de
telefonía móvil digital GSM, pero en la actualidad está disponible en una amplia
variedad de redes, incluyendo las redes 3G.
1.2 SMSC
Corresponde a las siglas en inglés Short Message Service Center (Central de
Servicio de Mensajes Cortos), es un elemento de la red de telefonía móvil, cuya
función es enviar y recibir mensajes de texto.
En el momento que un usuario envía un mensaje de texto (SMS) a otro usuario lo
que sucede es que el teléfono envía el mensaje a la SMSC correspondiente al
operador del usuario remitente. La SMSC guarda el mensaje y lo entrega a su
destinatario cuando este se encuentra en cobertura. Por lo general la SMSC, dentro
de los cientos de parámetros configurables que se puede modificar, dispone de un
tiempo máximo durante el cual el mensaje es guardado, si durante este tiempo el
destinatario no es localizado, el mensaje es descartado. También el usuario
remitente puede especificar este tiempo; pero siempre siendo el configurado en la
SMSC el determinante.
Para la transmisión y recepción de mensajes SMSs, las SMSCs utilizan interfaces de
red convencionales, así como algunos protocolos desarrollados específicamente
para las comunicaciones de red móviles.
Página 7 de 82
Maestría en Informática Aplicada en Redes
Gammu es un proyecto que derivo de gnokii (gnokii.org) que en sus inicios solo
daba soporte a celulares Nokia; pero evolucionó a otra variedad de marcas logrando
comunicación por cable, irda (infrarrojo) y Bluetooth.
La herramienta Gammu es un proyecto que abarca aplicaciones, scripts y drivers
para administrar varias funciones de teléfonos celulares y otros dispositivos similares.
Gammu permite al usuario acceder al sistema de archivos del teléfono celular y a las
funcionalidades especiales de control, como radios o cámaras integradas. Esta
herramienta se configura editando el archivo de configuración “gammurc” del
directorio de usuario, o bien, en /etc/gammurc para todos los usuarios.
Gammu también tiene la capacidad de enviar y recibir mensajes SMS (Servicio de
Mensajes cortos) por medio del demonio denominado SMSD. Para ejecutarlo se
tiene que editar primero el archivo de configuración de dicho demonio smsdrc,
configurar ciertas características de este modo de trabajo en tablas para
configuración en la base de datos smsd; finalmente ejecutar el script gammu.sh en
background desde la línea de comandos.
El paquete de instalación de Gammu en su ultima o previas versiones se puede
obtener desde su sitio oficial http://www.gammu.org
Configuración SMSD:
El archivo de configuración smsdrc puede estar ubicado en cualquier directorio y ser
guardado con cualquier nombre. Por defecto el archivo de configuración smsdrc se
ubica en el directorio docs/examples/config/ que viene en el paquete de instalación
de Gammu.
Su formato es el mismo utilizado en el archivo de configuración principal (gammurc).
Si el archivo smsdrc no es definido en la línea de comando los valores de
configuración son leídos desde gammurc.
Página 8 de 82
Maestría en Informática Aplicada en Redes
[gammu]
port = /dev/ttyS1
model = 6110
connection = dlr3
#synchronizetime = yes
logfile = gammulog
logformat = textall
use_locking = yes
#gammuloc = gammu.us
#startinfo = yes
El símbolo “#” nos indica que esa la línea se tomará como un comentario o parte de
documentación, si fuera necesario fijar algún dato diferente a estos por defecto
definidos se deben especificar en este archivo.
#[include_numbers]
#number1 = 1234
Removiendo los comentarios a la sección anterior es posible definir números de
teléfonos desde los cuales se podrán recibir mensajes tal que mensajes entrantes de
otros números telefónicos no definidos en este apartado serán eliminados, actuando
en alguna manera de forma inteligente.
#[exclude_numbers]
#number1 = 1234
Al quitar el comentario de la sección anterior es posible indicar a gammu de qué
números de teléfonos no se procesaran mensajes entrantes, es decir esta sería
tomada como la definición de la “Lista negra de teléfonos”.
Página 9 de 82
Maestría en Informática Aplicada en Redes
pc = localhost
database = smsd
Para que la aplicación Gammu pueda tener acceso a los recursos de la base de
datos es necesario definir ciertos privilegios al usuario de conexión.
Para la tabla de recepción de mensajes SMS
• Tabla Inbox - INSERT
Para enviar mensajes SMS:
• Tabla Outbox - SELECT, INSERT, DELETE y UPDATE
• Tabla Outbox_MultiPart - SELECT, INSERT y DELETE
• Tabla SentItems - INSERT y UPDATE
Otros parámetros para la configuración general son:
PIN Numero PIN de la tarjeta SIM del teléfono celular
logfile Nombre del archivo Log para información acerca de las acciones del
modulo smsd.
CommTimeout Define un tiempo en segundos que smsd espera para volver a repetir un
lazo de lectura escritura nuevamente. Por defecto: 1
phoneid Identificación del teléfono utilizado para enviar y recibir mensajes SMS.
Página 10 de 82
Maestría en Informática Aplicada en Redes
logfile = smsdlog
commtimeout = 1
sendtimeout = 10
#receivefrequency = 0
#resetfrequency = 0
#deliveryreport = no
#phoneid = MyPhone1
Tabla Inbox
Página 11 de 82
Maestría en Informática Aplicada en Redes
Tabla Outbox
Tabla para un mensaje SMS (o el primer mensaje de una secuencia) esperando para
ser enviado.
Página 12 de 82
Maestría en Informática Aplicada en Redes
Tabla Outbox_multipart
Tabla para la segunda y próxima secuencia de SMS esperando para ser enviados.
Campo Tipo Descripción
Página 13 de 82
Maestría en Informática Aplicada en Redes
Página 14 de 82
Maestría en Informática Aplicada en Redes
Modo de Archivos
Configuración
Las siguientes rutas pueden ser utilizadas con el trailing “/” o “\” dependiendo del
sistema operativo.
inboxpath Donde los mensajes SMS recibidos son
almacenados, por defecto el directorio actual.
Página 15 de 82
Maestría en Informática Aplicada en Redes
Ejemplo:
Inboxpath = /var/spool/sms/inbox/
outboxpath = /var/spool/sms/outbox/
sentsmspath = /var/spool/sms/sent/
errorsmspath = /var/spool/sms/error/
inboxformat = unicode
transmitformat = auto
1.4 MySql
MySQL, el sistema de gestión de bases de datos SQL Open Source más popular, lo
desarrolla, distribuye y soporta MySQL AB. MySQL AB es una compañía comercial,
fundada por los desarrolladores de MySQL. Es una compañía Open Source de
segunda generación que une los valores y metodología Open Source con un exitoso
modelo de negocio.
Página 16 de 82
Maestría en Informática Aplicada en Redes
Página 17 de 82
Maestría en Informática Aplicada en Redes
1.5 Java
Java es un lenguaje de programación orientado a objetos desarrollado por Sun
Microsystems a principios de los años 1990. Las aplicaciones Java están típicamente
compiladas en un bytecode, aunque la compilación en código máquina nativo
también es posible. En el tiempo de ejecución, el bytecode es normalmente
interpretado o compilado a código nativo para la ejecución, aunque la ejecución
directa por hardware del bytecode por un procesador Java también es posible.
Página 18 de 82
Maestría en Informática Aplicada en Redes
• Orientado a Objetos
Página 19 de 82
Maestría en Informática Aplicada en Redes
código que opera sobre los mismos, o viceversa. Esta separación en objetos
coherentes e independientes ofrece una base más estable para el diseño de
un sistema software. El objetivo es hacer que grandes proyectos sean fáciles
de gestionar y manejar, mejorando como consecuencia su calidad y
reduciendo el número de proyectos fallidos. Otra de las grandes promesas de
la programación orientada a objetos es la creación de entidades más
genéricas (objetos) que permitan la reutilización del software entre proyectos,
una de las premisas fundamentales de la Ingeniería del Software. Un objeto
genérico “cliente”, por ejemplo, debería en teoría tener el mismo conjunto de
comportamiento en diferentes proyectos, sobre todo cuando estos coinciden
en cierta medida, algo que suele suceder en las grandes organizaciones. En
este sentido, los objetos podrían verse como piezas reutilizables que pueden
emplearse en múltiples proyectos distintos, posibilitando así a la industria del
software a construir proyectos de envergadura empleando componentes ya
existentes y de comprobada calidad; conduciendo esto finalmente a una
reducción drástica del tiempo de desarrollo. Podemos usar como ejemplo de
objeto el aluminio. Una vez definidos datos (peso, maleabilidad, etc.), y su
“comportamiento” (soldar dos piezas, etc.), el objeto “aluminio” puede ser
reutilizado en el campo de la construcción, del automóvil, de la aviación, etc.
• Independencia de la plataforma
Página 20 de 82
Maestría en Informática Aplicada en Redes
programa una vez y que pueda ejecutarse en cualquier dispositivo, tal como
reza el lema de Java, ‘’’write once, run everywhere’’’.
Para ello, se compila el código fuente escrito en lenguaje Java, para generar
un código conocido como “bytecode” (específicamente Java bytecode)
instrucciones de máquina simplificadas específicas de la plataforma Java.
Esta pieza está “a medio camino” entre el código fuente y el código máquina
que entiende el dispositivo destino. El bytecode es ejecutado entonces en la
máquina virtual (VM), un programa escrito en código nativo de la plataforma
destino (que es el que entiende su hardware), que interpreta y ejecuta el
código. Además, se suministran librerías adicionales para acceder a las
características de cada dispositivo (como los gráficos, ejecución mediante
hebras o threads, la interfaz de red) de forma unificada. Se debe tener
presente que, aunque hay una etapa explícita de compilación, el bytecode
generado es interpretado o convertido a instrucciones máquina del código
nativo por el compilador JIT (Just In Time).
Página 21 de 82
Maestría en Informática Aplicada en Redes
1.6 Eclipse
• Arquitectura
Página 22 de 82
Maestría en Informática Aplicada en Redes
Los widgets de Eclipse están implementados por un herramienta de widget para Java
llamada SWT, a diferencia de la mayoría de las aplicaciones Java, que usan las
opciones estándar Abstract Window Toolkit (AWT) o Swing. La interfaz de usuario de
Eclipse también tiene una capa GUI intermedia llamada JFace, la cual simplifica la
construcción de aplicaciones basada en SWT.
El entorno integrado de desarrollo (IDE) de Eclipse emplea módulos (en inglés plug-
in) para proporcionar toda su funcionalidad al frente de la plataforma de cliente rico, a
diferencia de otros entornos monolíticos donde las funcionalidades están todas
incluidas, las necesite el usuario o no. Este mecanismo de módulos es una
plataforma ligera para componentes de software. Adicionalmente a permitirle a
Eclipse extenderse usando otros lenguajes de programación como son C/C++ y
Phyton, permite a Eclipse trabajar con lenguajes para procesado de texto como
LaTeX, aplicaciones en red como Telnet y Sistema de gestión de base de datos. La
arquitectura plugin permite escribir cualquier extensión deseada en el ambiente,
como seria Gestión de la configuración. Se provee soporte para Java y CVS en el
SDK de Eclipse. Y no tiene porque ser usado únicamente para soportar otros
lenguajes de programación.
Página 23 de 82
Maestría en Informática Aplicada en Redes
Características:
• Editor de texto
Página 24 de 82
Maestría en Informática Aplicada en Redes
• Refactorización
Proyectos Eclipse
Página 25 de 82
Maestría en Informática Aplicada en Redes
• Proyecto de Edición Visual (VE) una plataforma para crear constructores GUI
para Eclipse
Página 26 de 82
Maestría en Informática Aplicada en Redes
Página 27 de 82
Maestría en Informática Aplicada en Redes
• Proyecto IDE PHP trabaja para proveer un IDE completamente funcional para
PHP para la plataforma Eclipse.
1.7 Lomboz
Lomboz es un plugin gratuito y abierto para el entorno de desarrollo J2EE. Tiene
medios para desarrollar, probar, perfilar y desplegar aplicaciones web, Java, J2EE y
EJB. Lomboz admite la mayoría de los runtimes de servidores de aplicaciones J2EE
estándar, y admite la mayoría de los runtimes populares de código abierto tales como
JOnAS. Al igual que JOnAS, Lomboz está hospedado y desarrollado por el consorcio
ObjectWeb (el grupo de desarrollo se llama a sí mismo "eteration"). Esto está
distribuido bajo LGPL.
Lomboz suministra:
1.8 Hibernate
Hibernate es un servicio de persistencia objeto/relaciones y consultas para Java.
Hibernate facilita a los desarrolladores crear las clases de persistencia utilizando
Página 28 de 82
Maestría en Informática Aplicada en Redes
Página 29 de 82
Maestría en Informática Aplicada en Redes
1.9 PERL
Practical Extraction and Report Language es un sofisticado lenguaje de
programación diseñado a finales de los años 80 por el lingüista norteamericano Larry
Wall. PERL combina en forma concisa las mejores características de lenguajes como
C, sed, awk y sh. En general, es posible reducir extensos programas escritos en C a
pocas líneas de código de un programa PERL, con la ventaja adicional de que corren
sin cambio sobre casi cualquier plataforma existente, lo que convierte a PERL en el
lenguaje ideal para desarrollo de prototipos y aplicaciones robustas 100% portables.
Durante los últimos años la popularidad del lenguaje alcanzó niveles insospechados
a raíz de su utilización generalizada en soluciones Web. PERL es el estándar "no
oficial" para la construcción de compuertas CGI (Common Gateway Interface) que
generan páginas dinámicas en la Web.
Junto con las facilidades para el desarrollo de aplicaciones Web, PERL es útil en la
resolución de cualquier tarea y posee habilidades para integrarse con sistemas
operativos, bases de datos, redes, protocolos, ambientes gráficos, otros lenguajes de
programación (Java, C, etc. ), etc. Su versatilidad y eficiencia en el manejo de texto
Página 30 de 82
Maestría en Informática Aplicada en Redes
Página 31 de 82
Maestría en Informática Aplicada en Redes
Generalmente la administración de servidores se lleva a cabo “in situ”, por lo que hay
uno o varios administradores responsables del buen funcionamiento de dichos
servidores, de tal forma que si un servicio tiene algún problema, el responsable
deberá solucionarlo presencialmente.
Los costos de operación de los servidores por lo general son altos. Cuando dichos
servicios tienen cobertura 7/24 estos se elevan aun más, en términos económicos
para la empresa. El soporte se vuelve un problema para el especialista responsable
de los servidores, ya que las fallas pueden darse a cualquier hora del día y cualquier
día del año, debiendo optar por contratar personal de administración de servidor para
las 24 horas o hacer que el personal pueda desplazarse al lugar donde se
encuentren dicho servidor para solucionar cualquier fallo.
Página 32 de 82
Maestría en Informática Aplicada en Redes
Es vital para las empresas que sus operaciones no sean suspendidas por fallas en
los servicios prestados por sus servidores, ya que esto les podría causar retraso,
baja productividad e inclusive problemas con clientes que a la larga, redundan en la
paralización de su actividad empresarial.
Existen algunas aplicaciones Web desde las cuales se pueden realizar monitoreo de
servicios; pero dichas aplicaciones se quedan simplemente en el diagnostico de la
falla. Por ejemplo si un servidor MySql falla, el administrador podría saber cual es el
problema, pero no podrá levantar remotamente dicho servicio y comprobar
posteriormente su estado. Lo anterior nos lleva a decir que no se logra una
comunicación interactiva con el servidor de manera remota.
Existen formas de tomar control remoto de servidores, con aplicaciones tales como
X. Este recurso permite a empresas que tienen sus servidores con una IP pública,
poder tomar control remoto desde otra computadora distante.
Esta solución requiere tener una inversión fuerte en lo relativo a lo económico y a la
seguridad, lo primero, por tener seguramente contrato de servicios redundantes de
Internet, y lo segundo porque sus servidores de producción estarían expuestos
públicamente al Internet. Regularmente los servidores de producción no se pondrían
Página 33 de 82
Maestría en Informática Aplicada en Redes
Página 34 de 82
Maestría en Informática Aplicada en Redes
Página 35 de 82
Maestría en Informática Aplicada en Redes
Página 36 de 82
Maestría en Informática Aplicada en Redes
• Deberá ser una solución que permita interactuar con el servidor en ambas
vías, es decir lanzarle comandos y recibir respuestas del servidor.
• Deberá permitir soporte 7/24, es decir debe ser capaz de acceder al servidor
en cualquier día y hora.
• Deberá permitir controlar diversos servicios e inclusive diversas máquinas
(PC o Servidores).
• Deberá ser una solución de bajo presupuesto y de preferencia usando
software libre.
• Deberá vencer el problema de depender de una PC para operar un servidor,
se prefiere que el control se haga desde un dispositivo móvil.
• No deberá hacer depender a una empresa de contratar un ISP de Internet.
• Deberá vencer las barreras de Seguridad, ejecutando remotamente grupos
de comandos o instrucciones individuales de sistema operativo que permitan
realizar funciones de administración de servidor tales como la recuperación
de servicios y la consulta del estado de los mismos.
Página 37 de 82
Maestría en Informática Aplicada en Redes
textos desde su teléfono móvil para administrar los servicios prestados por equipos
Ordenes o
comandos
Página 38 de 82
Maestría en Informática Aplicada en Redes
WDS
«uses»
Ejecutar comando
Admin Fisico Admin Virtual
Página 39 de 82
Maestría en Informática Aplicada en Redes
Administrador Físico
Envía SMS
SMS
Comando
Envia Resultado
Envía SMS
El mensaje es recibido en el servidor. Para esto será necesario tener otro celular,
quien reciba el mensaje.
Ordenes o
comandos
El celular que recibe el mensaje, estará conectado al Server, por USB, bluetooth,
puerto infrarrojo u otros medios.
El mensaje será trasladado a una base de mySql, a través de un demonio
denominado smsd. Dicho demonio es parte del proyecto Gammu.
Página 40 de 82
Maestría en Informática Aplicada en Redes
WDS
Envía SMS
Gammu MySQL
JAVA
Admin Fisco
Comando a Ejecutar
Sistema
Operativo
Página 41 de 82
Maestría en Informática Aplicada en Redes
WDS
Command
Hibernate
i2ic Sistema
JAVA Operativo
Daemon
Página 42 de 82
Maestría en Informática Aplicada en Redes
Celular1 Celular2 Smsd Daemon Inbox Table I2ic Daemon Command Table JavaClient Os Outbox Table
Enviar Sms
Leer Sms
Insert Sms
Leer Sms
Marcar Leído
getId
getScriptName
Return Script
Mensaje1
Exe Command
getOutput
Prepare Outbox
Insert Outbox
Leer Sms
Escribir Sms
Send Sms
Página 43 de 82
Maestría en Informática Aplicada en Redes
Página 44 de 82
Maestría en Informática Aplicada en Redes
IV. Metodología
Página 45 de 82
Maestría en Informática Aplicada en Redes
Página 46 de 82
Maestría en Informática Aplicada en Redes
Página 47 de 82
Maestría en Informática Aplicada en Redes
Los requisitos para que el sistema WDS pueda ser instalado y configurado
correctamente son mostrados en la tabla 4.2.
GAMMU
Página 48 de 82
Maestría en Informática Aplicada en Redes
# . /configure
# make
# make shared
Instalar los binarios en las carpetas del sistema operativo
# make install
Instalar las librerias de GAMMU
# make installshared
Configurar las librerías de GAMMU dentro del sistema operativo
# vi /etc/ld.so.conf
# /sbin/ldconfig
Modificar el archivo wds-project/smsdrc de acuerdo a sus requerimientos
# vi ../../smsdrc
Para este caso en el que se utiliza el móvil Siemmens S55, la modificación del
contenido del archivo smsdrc es la que se muestra líneas abajo, observe que
en este, se encuentran las secciones de configuración de GAMMU con la
funcionalidad smsd activada.
[gammu]
port = /dev/ttyS0
connection = AT
logfile = gammulog
logformat = textall
use_locking = yes
# Los números de teléfonos incluidos en esta sección serán los unicos autorizados
# de interactuar con el sistema WDS en el envió de comandos y recepción de mensajes
[include_numbers]
number1 = 503.....
number2 = 503.....
number3 = 503.....
# Sustituya las elipses en esta sección escribiendo su propio usuario y clave de conexión a
# la base de datos MySQL.
[smsd]
PIN = 0000
logfile = smsdlog
commtimeout = 1
sendtimeout = 10
#--------------------------- smsd & MySQL configuration
user = ......
password = .....
pc = localhost
database = smsd
Página 49 de 82
Maestría en Informática Aplicada en Redes
use DBI;
use POSIX qw(setsid);
my $sql = '';
my (@inbox_regs) = ();
my (@command_regs) = ();
my (@segments) = ();
my ($i, $j) = (0, 0);
my ($Id, $TextDecoded, $processed, $SenderNumber, $SMSCNumber, $ReceivingDateTime) = (0, '', '', '', '', '');
my ($ScriptName, $ScriptLocation, $MaxSecondsTime) = ('', '', '');
my ($code, $status) = ('', '', '');
chdir $install_dir.'/bin';
umask 0;
defined( my ($pid, $ppid) = fork ) or die "Can't fork: $! ";
exit if $pid;
while(1) {
sleep(5);
Página 50 de 82
Maestría en Informática Aplicada en Redes
@inbox_regs = &query($sql);
$i = 0;
while ($i < ($#inbox_regs+1)) {
($Id, $TextDecoded, $processed, $SenderNumber, $SMSCNumber, $ReceivingDateTime) =
@{$inbox_regs[$i]};
&myDo($sql);
$sql = "select ScriptName, ScriptLocation, MaxSecondsTime from command where Code = '$code'";
@command_regs = &query($sql);
$j = 0;
while ($j < ($#command_regs + 1)){
($ScriptName, $ScriptLocation, $MaxSecondsTime) = @{$command_regs[$j]};
$j++;
}
if (!length($ScriptName)) {
$ScriptName = 'Error';
$ScriptLocation = '$install_dir/scripts';
}
&myDo($sql);
$i++;
exit(0);
sub query
{
my $dbh = DBI->connect($dsn, $db_user_name, $db_password, { RaiseError => 1, AutoCommit => 0 });
my $sth = '';
my $sql = @_[0];
my (@result) = ();
$sth = $dbh->prepare($sql);
$sth->execute;
$sth->finish();
$dbh->disconnect;
Página 51 de 82
Maestría en Informática Aplicada en Redes
return @result;
}
sub myDo {
my $sql = @_[0];
my $dbh = DBI->connect($dsn, $db_user_name, $db_password, { RaiseError => 1, AutoCommit => 0 });
$dbh->do($sql);
$dbh->disconnect;
}
#!/bin/bash
#
# prj es la carpeta actual de instalación del proyecto
#
prj=`cat /etc/wds.dir`.'/WDS'
export prj
export CLASSPATH
# Se ejecuta el aplicativo que procesara el nuevo mensaje recibido desde un cliente remoto
#
# $1 es el identificador del comando a ser procesado
#
java sv.edu.ufg.maestria.wds.negocio.Cliente $1
En este script se puede observar que se definen variables de entorno y luego la clase
sv.edu.ufg.maestria.wds.negocio.Cliente es ejecutada pasándole como argumento el
identificador del comando a procesar; también se observa que la capa de negocio de
la aplicación java interactúa con el daemon i2ic.pl como su única capa de
Página 52 de 82
Maestría en Informática Aplicada en Redes
Los objetos de la base de datos MySQL para el esquema smsd son creados a partir
del siguiente archivo script:
--
-- Table structure for table `gammu`
DROP TABLE IF EXISTS `gammu`;
CREATE TABLE `gammu` (
Página 53 de 82
Maestría en Informática Aplicada en Redes
--
-- Dumping data for table `gammu`
/*!40000 ALTER TABLE `gammu` DISABLE KEYS */;
LOCK TABLES `gammu` WRITE;
INSERT INTO `gammu` VALUES (7);
UNLOCK TABLES;
/*!40000 ALTER TABLE `gammu` ENABLE KEYS */;
--
-- Table structure for table `inbox`
DROP TABLE IF EXISTS `inbox`;
CREATE TABLE `inbox` (
`UpdatedInDB` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
`ReceivingDateTime` timestamp NOT NULL default '0000-00-00 00:00:00',
`Text` text NOT NULL,
`SenderNumber` varchar(20) NOT NULL default '',
`Coding` enum('Default_No_Compression','Unicode_No_Compression','8bit','Default_Compression','Unicode_Compression')
NOT NULL default '8bit',
`UDH` text NOT NULL,
`SMSCNumber` varchar(20) NOT NULL default '',
`Class` int(11) NOT NULL default '-1',
`TextDecoded` varchar(160) NOT NULL default '',
`ID` int(11) unsigned NOT NULL auto_increment,
`RecipientID` text NOT NULL,
`Processed` enum('false','true') NOT NULL default 'false',
UNIQUE KEY `ID` (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
--
-- Dumping data for table `inbox`
/*!40000 ALTER TABLE `inbox` DISABLE KEYS */;
LOCK TABLES `inbox` WRITE;
UNLOCK TABLES;
/*!40000 ALTER TABLE `inbox` ENABLE KEYS */;
--
-- Table structure for table `inboxCommand`
DROP TABLE IF EXISTS `inboxCommand`;
CREATE TABLE `inboxCommand` (
`Id` int(11) NOT NULL auto_increment,
`ScriptName` text NOT NULL,
`MaxSecondsTime` int(11) NOT NULL default '3600',
`SenderNumber` varchar(20) default NULL,
`SMSCNumber` varchar(20) default NULL,
`Status` varchar(20) default 'NoLeido',
`ScriptLocation` text,
`IdInbox` int(11) default NULL,
PRIMARY KEY (`Id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
--
-- Dumping data for table `inboxCommand`
/*!40000 ALTER TABLE `inboxCommand` DISABLE KEYS */;
LOCK TABLES `inboxCommand` WRITE;
UNLOCK TABLES;
/*!40000 ALTER TABLE `inboxCommand` ENABLE KEYS */;
--
-- Table structure for table `outbox`
DROP TABLE IF EXISTS `outbox`;
CREATE TABLE `outbox` (
`UpdatedInDB` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
`InsertIntoDB` timestamp NOT NULL default '0000-00-00 00:00:00',
`SendingDateTime` timestamp NOT NULL default '0000-00-00 00:00:00',
`Text` text,
`DestinationNumber` varchar(20) NOT NULL default '',
`Coding` enum('Default_No_Compression','Unicode_No_Compression','8bit','Default_Compression','Unicode_Compression')
default '8bit',
`UDH` text,
Página 54 de 82
Maestría en Informática Aplicada en Redes
--
-- Dumping data for table `outbox`
/*!40000 ALTER TABLE `outbox` DISABLE KEYS */;
LOCK TABLES `outbox` WRITE;
UNLOCK TABLES;
/*!40000 ALTER TABLE `outbox` ENABLE KEYS */;
--
-- Table structure for table `outbox_multipart`
DROP TABLE IF EXISTS `outbox_multipart`;
CREATE TABLE `outbox_multipart` (
`Text` text,
`Coding` enum('Default_No_Compression','Unicode_No_Compression','8bit','Default_Compression','Unicode_Compression')
default '8bit',
`UDH` text,
`Class` int(11) default '-1',
`TextDecoded` varchar(160) default NULL,
`ID` int(11) unsigned NOT NULL default '0',
`SequencePosition` int(11) NOT NULL default '1'
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
--
-- Dumping data for table `outbox_multipart`
/*!40000 ALTER TABLE `outbox_multipart` DISABLE KEYS */;
LOCK TABLES `outbox_multipart` WRITE;
UNLOCK TABLES;
/*!40000 ALTER TABLE `outbox_multipart` ENABLE KEYS */;
--
-- Table structure for table `pbk`
DROP TABLE IF EXISTS `pbk`;
CREATE TABLE `pbk` (
`GroupID` int(11) NOT NULL default '-1',
`Name` text NOT NULL,
`Number` text NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
--
-- Dumping data for table `pbk`
/*!40000 ALTER TABLE `pbk` DISABLE KEYS */;
LOCK TABLES `pbk` WRITE;
UNLOCK TABLES;
/*!40000 ALTER TABLE `pbk` ENABLE KEYS */;
--
-- Table structure for table `pbk_groups`
DROP TABLE IF EXISTS `pbk_groups`;
CREATE TABLE `pbk_groups` (
`Name` text NOT NULL,
`ID` int(11) NOT NULL auto_increment,
UNIQUE KEY `ID` (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
--
-- Dumping data for table `pbk_groups`
/*!40000 ALTER TABLE `pbk_groups` DISABLE KEYS */;
LOCK TABLES `pbk_groups` WRITE;
UNLOCK TABLES;
/*!40000 ALTER TABLE `pbk_groups` ENABLE KEYS */;
Página 55 de 82
Maestría en Informática Aplicada en Redes
--
-- Table structure for table `phones`
DROP TABLE IF EXISTS `phones`;
CREATE TABLE `phones` (
`ID` text NOT NULL,
`UpdatedInDB` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
`InsertIntoDB` timestamp NOT NULL default '0000-00-00 00:00:00',
`TimeOut` timestamp NOT NULL default '0000-00-00 00:00:00',
`Send` enum('yes','no') NOT NULL default 'no',
`Receive` enum('yes','no') NOT NULL default 'no',
`IMEI` text NOT NULL,
`Client` text NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
--
-- Dumping data for table `phones`
/*!40000 ALTER TABLE `phones` DISABLE KEYS */;
LOCK TABLES `phones` WRITE;
INSERT INTO `phones` VALUES ('','2006-11-13 20:42:35','2006-11-13 16:52:13','2006-11-13
20:42:45','yes','yes','351083521503632','Gammu 1.08.15, Linux, kernel 2.6.8-24-default, gcc 3.3');
UNLOCK TABLES;
/*!40000 ALTER TABLE `phones` ENABLE KEYS */;
--
-- Table structure for table `sentitems`
DROP TABLE IF EXISTS `sentitems`;
CREATE TABLE `sentitems` (
`UpdatedInDB` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
`InsertIntoDB` timestamp NOT NULL default '0000-00-00 00:00:00',
`SendingDateTime` timestamp NOT NULL default '0000-00-00 00:00:00',
`DeliveryDateTime` timestamp NOT NULL default '0000-00-00 00:00:00',
`Text` text NOT NULL,
`DestinationNumber` varchar(20) NOT NULL default '',
`Coding` enum('Default_No_Compression','Unicode_No_Compression','8bit','Default_Compression','Unicode_Compression')
NOT NULL default '8bit',
`UDH` text NOT NULL,
`SMSCNumber` varchar(20) NOT NULL default '',
`Class` int(11) NOT NULL default '-1',
`TextDecoded` varchar(160) NOT NULL default '',
`ID` int(11) unsigned NOT NULL default '0',
`SenderID` text NOT NULL,
`SequencePosition` int(11) NOT NULL default '1',
`Status`
enum('SendingOK','SendingOKNoReport','SendingError','DeliveryOK','DeliveryFailed','DeliveryPending','DeliveryUnknown','Error'
) NOT NULL default 'SendingOK',
`StatusError` int(11) NOT NULL default '-1',
`TPMR` int(11) NOT NULL default '-1',
`RelativeValidity` int(11) NOT NULL default '-1',
`CreatorID` text NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
--
-- Dumping data for table `sentitems`
/*!40000 ALTER TABLE `sentitems` DISABLE KEYS */;
LOCK TABLES `sentitems` WRITE;
UNLOCK TABLES;
/*!40000 ALTER TABLE `sentitems` ENABLE KEYS */;
Página 56 de 82
Maestría en Informática Aplicada en Redes
El script anterior es ejecutado por el gestor de base de datos a solicitud del instalador
del proyecto WDS (setup.sh).
enviarle la respuesta.
En la capa de dominio se han colocado las clases que son persistidas en la base de
datos a través del motor de persistencia hibernate, y que son los objetos que las
Página 57 de 82
Maestría en Informática Aplicada en Redes
import sv.edu.ufg.maestria.wds.datos.*;
Página 58 de 82
Maestría en Informática Aplicada en Redes
Página 59 de 82
Maestría en Informática Aplicada en Redes
package sv.edu.ufg.maestria.wds.dominio;
import sv.edu.ufg.maestria.wds.datos.*;
import java.sql.Timestamp;
this.setText(this.convertirCadenaAHexa(resultadoDelComando));
this.setTextDecoded(resultadoDelComando);
this.setDestinationNumber(ic.getSenderNumber());
this.setCoding("8bit");
this.setCreatorId(" ");
this.setRelativeValidity(-1);
this.setCLASS(-1);
this.setMultipart(false);
this.setDeliveryReport("default");
this.setSendingTimeOut(new java.sql.Timestamp(time1));
}
Página 60 de 82
Maestría en Informática Aplicada en Redes
Página 61 de 82
Maestría en Informática Aplicada en Redes
package sv.edu.ufg.maestria.wds.datos;
import sv.edu.ufg.maestria.wds.dominio.*;
Página 62 de 82
Maestría en Informática Aplicada en Redes
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import java.util.List;
package sv.edu.ufg.maestria.wds.datos;
import sv.edu.ufg.maestria.wds.dominio.*;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
return null;
}
Página 63 de 82
Maestría en Informática Aplicada en Redes
package sv.edu.ufg.wds.negocio;
import java.io.*;
import sv.edu.ufg.wds.dominio.*;
public class Administrador {
public String ejecutarComando(String comando){
try
{
if(comando == null){
comando = "/scripts/Error";
}
Process p = Runtime.getRuntime().exec (comando);
InputStream is = p.getInputStream();
BufferedReader br = new BufferedReader (new InputStreamReader (is));
return br.readLine();
}
catch (Exception e)
{
return e.getMessage();
}
}
package sv.edu.ufg.maestria.wds.negocio;
import sv.edu.ufg.maestria.wds.dominio.*;
String resultadoDelComando =
a.ejecutarComando(ic.getScriptLocation()+"/"+ic.getScriptName());
o.llenarValores(ic, resultadoDelComando);
System.out.print( a.enviarResultado(o));
}else{
System.out.print("ERR: NO ARGS");
}
}
}
Página 64 de 82
Maestría en Informática Aplicada en Redes
Archivo hibernate.cfg.xml
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost/smsd</property>
<property name="hibernate.connection.username"></property>
<property name="hibernate.connection.password"></property>
<property name="hibernate.connection.pool_size">10</property>
<property name="show_sql">true</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- Mapping files -->
<mapping resource="Outbox.hbm.xml"/>
<mapping resource="InboxCommand.hbm.xml"/>
</session-factory>
</hibernate-configuration>
Archivo InboxCommand.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="sv.edu.ufg.maestria.wds.dominio.InboxCommand" table="inboxCommand">
<id name="id" type="integer" column="ID" >
<generator class="assigned"/>
</id>
<property name="scriptName">
<column name="ScriptName" />
</property>
<property name="idInbox">
<column name="IDINBOX" />
</property>
<property name="status">
<column name="STATUS" />
</property>
<property name="maxSecondsTime">
<column name="MaxSecondsTime" />
</property>
<property name="senderNumber">
<column name="SenderNumber" />
Página 65 de 82
Maestría en Informática Aplicada en Redes
</property>
<property name="sMSCNumber">
<column name="SMSCNumber" />
</property>
<property name="scriptLocation">
<column name="ScriptLocation" />
</property>
</class>
</hibernate-mapping>
Archivo Outbox.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="sv.edu.ufg.maestria.wds.dominio.Outbox" table="outbox">
<id name="id" type="integer" column="ID" >
<generator class="assigned"/>
</id>
<property name="updatedInDb">
<column name="UPDATEDINDB" />
</property>
<property name="inserlnDB">
<column name="INSERTLNDB"/>
</property>
<property name="sendingDateTime">
<column name="SENDINGDATETIME"/>
</property>
<property name="text">
<column name="TEXT"/>
</property>
<property name="destinationNumber">
<column name="DESTINATIONNUMBER"/>
</property>
<property name="coding">
<column name="CODING"/>
</property>
<property name="udh">
<column name="UDH"/>
</property>
<property name="CLASS">
<column name="CLASS"/>
</property>
<property name="textDecoded">
<column name="TEXTDECODED"/>
</property>
<property name="multipart">
<column name="MULTIPART"/>
</property>
<property name="relativeValidity">
<column name="RELATIVEVALIDITY"/>
</property>
<property name="senderId">
<column name="SENDERID"/>
</property>
<property name="sendingTimeOut">
<column name="SENDINGTIMEOUT"/>
</property>
<property name="deliveryReport">
<column name="DELIVERYREPORT"/>
</property>
<property name="creatorId">
<column name="CREATORID"/>
</property>
</class>
</hibernate-mapping>
Página 66 de 82
Maestría en Informática Aplicada en Redes
En este capítulo se encuentran los pasos necesarios para usar el prototipo funcional
desarrollado en este proyecto, además se presentan los resultados de las pruebas
realizadas.
Tanto el sistema operativo del servidor como el modelo del celular usado para la
presente implementación pueden variar.
A continuación se detallan los pasos a seguir para experimentar con el prototipo:
Página 67 de 82
Maestría en Informática Aplicada en Redes
Con esto se puede concluir que todo el sistema está bien instalado y
configurado apropiadamente.
A partir de este punto, se podrán crear todos los scripts de acuerdo
a la necesidad del administrador.
Página 68 de 82
Maestría en Informática Aplicada en Redes
Dado que este comando no existe, habrá que crearlo. Primero se creará un script en
algún lenguaje de programación, en este caso, bash.
El script podrá llamarse apache_stop el cual se colocará en la carpeta scripts del
proyecto WDS
El contenido del archivo de script apache_stop es el siguiente:
#!/bin/bash
/etc/init.d/apache2 stop | grep done
Página 69 de 82
Maestría en Informática Aplicada en Redes
Página 70 de 82
Maestría en Informática Aplicada en Redes
Página 71 de 82
Maestría en Informática Aplicada en Redes
Bibliografía
• Villalobos S. Jorge A.
Fundamentos de programación aprendizaje activo basado en casos: un
enfoque moderno usando Java, UML, objetos y eclipse. 1ª Edición, México.
Editorial: Pearson Educación, 2006. 359 p. ISBN 970-26-0846-5.
• Wikipedia
Eclipse Software, 2006. Fecha de consulta: 23/11/2006
http://es.wikipedia.org/wiki/Eclipse_(computaci%C3%B3n)
• Wikipedia
Lomboz, [En linea] 2006. Fecha de consulta: 25/11/2007
http://es.wikipedia.org/wiki/Lomboz
• Brian Sam-Bodden
Beginning POJOs: From Novice to Professional. X. Editorial: Apress.
2004. 400 p. ISBN 1590595963.
• James Elliott
Hibernate: a developer's notebook. 1ª E dición, California, USA.
Publicado por O’Reilly media, Inc. 2004. 190 p. ISBN 0596006969.
• Tony Butcher
Sams Teach Yourself MySQL in 21 Days,. 1ª Edición. USA, Sams
Publishing, 2003. 640 p. ISBN 0672323923
• Managing your mobile phone with Gammu and Wammu Directory Services.
Linux Magazine [En línea] Citado: Septiembre de 2005. Disponible en Internet:
http://www.linux-magazine.com/issue/58/Gammu_und_Wammu.pdf
Página 72 de 82
Maestría en Informática Aplicada en Redes
Anexos
En este apartado se detallan las siguientes consideraciones.
Página 73 de 82
Maestría en Informática Aplicada en Redes
B.2 Beneficios
A pesar que los ahorros pueden derivarse de una gran cantidad de aspectos, al
menos uno que aplicará en todos los casos, es el recurso humano de planta, que se
ahorrará, pues este podrá controlar el servidor de manera remota.
Se ha tomando como base un salario de $1500.00 por mes para un administrador de
servidor Web (Web master), el cual podrá variar entre empresas, pero se considera
un promedio.
Página 74 de 82
Maestría en Informática Aplicada en Redes
En cada uno de los meses habrá que estimar el volumen de mensajes a enviar y
recibir desde el sistema WDS. Una cantidad de 30 mensajes por día resultaría en
210 por semana y esto a su vez significa 840 SMS por mes, a una tasa de $0.06 da
como resultado un costo mensual de $50.40
RECUPERACIÓN ANUAL
Mes costo beneficio neto
Mes 1 $995.00 1500 -$505.00
Mes 2 $50.40 1500 -$1,449.60
Mes 3 $50.40 1500 -$1,449.60
Mes 4 $50.40 1500 -$1,449.60
Mes 5 $50.40 1500 -$1,449.60
Mes 6 $50.40 1500 -$1,449.60
Mes 7 $50.40 1500 -$1,449.60
Mes 8 $50.40 1500 -$1,449.60
Mes 9 $50.40 1500 -$1,449.60
Mes 10 $50.40 1500 -$1,449.60
Mes 11 $50.40 1500 -$1,449.60
Mes 12 $50.40 1500 -$1,449.60
Total -$16,450.60
Página 75 de 82
Maestría en Informática Aplicada en Redes
Página 76 de 82
Maestría en Informática Aplicada en Redes
Página 77 de 82
Maestría en Informática Aplicada en Redes
La codificación de los mensajes de texto cortos enviados y recibidos por los teléfonos
móviles están definidos en la recomendación 03.38 y 03.40 de la ETSI (European
Telecommunications Standards Institute) las cuales especifican que los mensajes de
textos pueden ser:
Página 78 de 82
Maestría en Informática Aplicada en Redes
depende de la capacidad que el móvil receptor tiene para desplegar los caracteres
unicode UCS2.
Página 79 de 82
Maestría en Informática Aplicada en Redes
Página 80 de 82
Maestría en Informática Aplicada en Redes
52 Digit four 4 52
53 Digit five 5 53
54 Digit six 6 54
55 Digit seven 7 55
56 Digit eight 8 56
57 Digit nine 9 57
58 Colon : 58
59 Semicolon ; 59
60 Less-than sign < 60
61 Equals sign = 61
62 Greater-than sign > 62
63 Question mark ? 63
64 Inverted exclamation mark ¡ 161
65 Latin capital letter a A 65
66 Latin capital letter b B 66
67 Latin capital letter c C 67
68 Latin capital letter d D 68
69 Latin capital letter e E 69
70 Latin capital letter f F 70
71 Latin capital letter g G 71
72 Latin capital letter h H 72
73 Latin capital letter i I 73
74 Latin capital letter j J 74
75 Latin capital letter k K 75
76 Latin capital letter l L 76
77 Latin capital letter m M 77
78 Latin capital letter n N 78
79 Latin capital letter o O 79
80 Latin capital letter p P 80
81 Latin capital letter q Q 81
82 Latin capital letter r R 82
83 Latin capital letter s S 83
84 Latin capital letter t T 84
85 Latin capital letter u U 85
86 Latin capital letter v V 86
87 Latin capital letter w W 87
88 Latin capital letter x X 88
89 Latin capital letter y Y 89
Página 81 de 82
Maestría en Informática Aplicada en Redes
Página 82 de 82