desarrollo e implementacion de una aplicación para el envio de

Anuncio
DESARROLLO E IMPLEMENTACION DE UNA APLICACIÓN PARA EL ENVIO
DE MENSAJES CORTOS A CORREO ELECTRONICO, MEDIANTE
DISPOSITIVOS MOVILES CELULARES
LEONARDO ERNESTO VALDERRAMA MESA
SAMUEL RICARDO SANCHEZ GUEVARA
UNIVERSIDAD DE SAN BUENAVENTURA BOGOTA
FACULTADA DE INGENIERIA
PROGRAMA INGENIERIA DE SISTEMAS
BOGOTA D.C.
2006
DESARROLLO E IMPLEMENTACION DE UNA APLICACIÓN PARA EL ENVIO
DE MENSAJES CORTOS A CORREO ELECTRONICO, MEDIANTE
DISPOSITIVOS MOVILES CELULARES
LEONARDO ERNESTO VALDERRAMA MESA
SAMUEL RICARDO SANCHEZ GUEVARA
UNIVERSIDAD DE SAN BUENAVENTURA BOGOTA
FACULTADA DE INGENIERIA
PROGRAMA INGENIERIA DE SISTEMAS
BOGOTA D.C.
2006
DESARROLLO E IMPLEMENTACION DE UNA APLICACIÓN PARA EL ENVIO
DE MENSAJES CORTOS A CORREO ELECTRONICO, MEDIANTE
DISPOSITIVOS MOVILES CELULARES
LEONARDO ERNESTO VALDERRAMA MESA
SAMUEL RICARDO SANCHEZ GUEVARA
Tesis de grado para optar por el titulo de
Ingeniero de Sistemas
Asesor
PROFESOR ING. OSCAR FIGUEREDO
UNIVERSIDAD DE SAN BUENAVENTURA BOGOTA
FACULTADA DE INGENIERIA
PROGRAMA INGENIERIA DE SISTEMAS
BOGOTA D.C.
2006
Nota de aceptación
_____________________________
_____________________________
_____________________________
_____________________________
Presidente del Jurado
______________________________
Jurado
______________________________
Jurado
______________________________
Bogotá D.C., Enero 16 de 2006
AGRADECIMIENTOS
“A todos los que nos han apoyado durante el transcurso de nuestros estudios, a
nuestras familias por su apoyo incondicional, a nuestro director de carrera por
guiarnos en este largo camino, a nuestro asesor por compartir su experiencia y
cocimiento con nosotros y finalmente a todos los grandes ingenieros, científicos y
profesionales que han sido nuestra mayor inspiración para realizar este proyecto”.
CONTENIDO
Página
INTRODUCCION
1
1. PLANTEAMIENTO DEL PROBLEMA
2
1.1 Antecedentes
2
1.1.1 INSTASMS
2
1.1.2 EXCELL
3
1.2 Descripción y Formulación del Problema
4
1.3 Justificación
5
1.4 Objetivos de la Investigación
7
1.4.1 Objetivo General
7
1.4.2 Objetivos específicos
7
1.5 Alcances y Limitaciones del Proyecto
7
1.5.1 Alcances
7
1.5.2 Limitaciones
7
2. MARCO DE REFERENCIA
8
2.1 Marco Conceptual
8
2.1.1 SMS (Short Message Service)
8
2.1.2 Pasarela SMS (SMS Gateway)
9
2.1.3 Servlets
11
2.1.3.1 Otros usos de los servlets
12
2.1.4 Sockets
12
2.1.5 J2ME
13
2.1.6 MIDlets
13
2.1.6.1 Ciclo de vida de un MIDlet
14
2.1.7 Comunicaciones http
15
2.1.8 PHP
15
2.1.8.1 Usos de PHP
15
2.1.8.2 Características de un lenguaje de scripts
16
2.1.9 Servidor Web
17
2.1.10 Servidor de Correo
18
2.1.11 Bases de Datos
18
2.1.11.1Componentes de una Base de Datos
19
2.1.11.2 Mysql Server
19
2.2 Marco Teórico
20
2.2.1 Aplicaciones de una pasarela de mensajería SMS
20
2.2.2 Kannel
23
2.2.2.1 Arquitectura Kannel
24
2.2.3 Alamin
26
2.2.3.1 Arquitectura Alamin
27
2.2.4 SMS Link
29
2.2.5 SMS Tools
29
2.2.6 Oxygen SMS Gateway
30
2.2.7 Now SMS E-mail Gateway
30
3. METODOLOGIA
32
3.1 Extreme Programming
32
3.1.1 Ciclo de Vida de un proyecto XP
38
3.2 Enfoque de la investigación
41
3.3 Línea de Investigación de la USB
41
3.4 Hipótesis
41
4. PRESENTACION Y ANALISIS DE RESULTADOS
42
5. DESARROLLO INGENIERIL
44
5.1 Fase de Exploración
44
5.1.1 Historias de Usuario (Requerimientos del Sistema)
44
5.1.2 Casos de uso del sistema
45
5.1.3 Herramientas
47
5.1.4 Desarrollo
47
5.1.5 Entorno de Ejecución
47
5.1.6 Tecnología y Plataformas
47
5.2 Planificación de Entregas
48
5.2.1 Estimación de Esfuerzo
48
5.2.1.1 Implementación del entorno de Ejecución
48
5.2.1.2 Desarrollo de Funcionalidad General
49
5.2.1.3 Gestión de Usuarios y listas de Distribución
49
5.2.2 Planificación
50
5.3 Iteraciones
51
5.3.1 Primera Iteración: Entorno de Ejecución
51
5.3.1.1 Test de Aceptación Primera Iteración: Entorno de Ejecución
57
5.3.2 Segunda Iteración: Lógica del Sistema
59
5.3.2.1 Test de Aceptación Segunda Iteración: Lógica del Sistema
67
5.3.3 Tercera Iteración: Aplicativo Web
68
5.3.3.1 Test de Aceptación Tercera Iteración: Aplicativo Web
72
5.4 Producción
73
6. CONCLUSIONES
74
7. RECOMENDACIONES
75
GLOSARIO
76
BIBLIOGRAFIA
81
ANEXOS
83
A. Script Base de Datos
83
B. Servlet
87
C. MIDlet
93
D. Configuración XML
99
E. Diagrama de Procesos
100
F. Diagrama de Secuencia
101
G. Diagrama de Flujo de Datos
102
H. Diagrama de Despliegue SMS
103
I. Fuente Aplicación WEB
104
J. Manual de Usuario
142
INDICE DE FIGURAS
Figura 1. Diagrama de Pasarela SMS
Figura 2. Descripción de la Arquitectura de Servlets
Figura 3. Ciclo de vida de un MIDlet
Figura 4. Arquitectura Kannel
Figura 5. Arquitectura Alamin
Figura 6. Ciclos de Planeación y Retroalimentación
Figura 7. Consola de MDemon
Figura 8. Configuración Dominio MDaemon
Figura 9. Configuración DNS MDaemon
Figura 10. Configuración Pasarela SMS
Figura 11. Socket Midlet en espera
Figura 12. Socket Midlet Invocando al servlet
Figura 13. Envío a un solo destino
Figura 14. Envío a grupo
Figura 15. Entrada al Aplicativo Web sms2mail
Figura 16. Gestión de Listas de Distribución
INDICE DE DIAGRAMAS
Diagrama 1. Funcionamiento Físico sms2mail
Diagrama 2. Caso de uso de Envió de sms2mail
Diagrama 3. Casos de uso Aplicativo Web
Diagrama 4. Diagrama de Base de Datos
Diagrama 5. Esquema lógico de sms2mail
Diagrama 6. Diagrama de clases de Socket Midlet
Diagrama 7. Funcionamiento con SMS Gateway
Diagrama 8. Esquema Funcionamiento utilizando un Socket-Midlet
Diagrama 9. Diagrama de transacción web
Diagrama 10. Diagrama de despliegue de componentes
INDICE DE TABLAS
Tabla 1. Abonados Móviles en Colombia.
Tabla 2. Estimación de Esfuerzo Entorno de Ejecución
Tabla 3. Estimación de Esfuerzo Funcionalidad General
Tabla 4. Estimación de Esfuerzo Gestión de Usuarios y listas de Distribución
Tabla 5. Planificación de entregas e iteraciones
Tabla 6. Primera Iteración
Tabla 7. Tareas desarrolladas Primera Iteración
Tabla 8. Aspectos evaluados Primera Iteración
Tabla 9. Segunda Iteración
Tabla 10. Parámetros de Salida de Pasarela SMS
Tabla 11. Tareas desarrolladas Segunda Iteración
Tabla 12. Aspectos evaluados Segunda Iteración
Tabla 13. Tercera Iteración
Tabla 14. Tareas desarrolladas Tercera Iteración
Tabla 15. Aspectos evaluados Tercera Iteración
INTRODUCCIÓN
En los últimos años y a medida que el número de abonados de las empresas de
telefonía celular crece en el país, estas se ven en la necesidad de ofrecer más y
mejores servicios debido a la competencia. Uno de estos servicios que esta siendo
impulsado actualmente en Colombia, aunque ya hace algún tiempo esta
disponible, es el de mensajes cortos o SMS (Short Message Service). El cual
permite, en un limitado espacio, enviar pequeños comunicados de gran urgencia o
por lo contrario información que no tiene que ser comunicada por voz;
inmediatamente, hacia otro dispositivo celular receptor.
La gran desventaja es la cantidad de caracteres y limitación del servicio, es decir
solo puede ser enviado a otro celular, pero ¿y si fuera posible enviar desde un
dispositivo móvil un mensaje a una cuenta de correo cualquiera?
Por supuesto sería una gran innovación que captaría de inmediato la atención de
los usuarios celulares y agregaría un servicio más al portafolio de las empresas de
telefonía celular, lo cual se traduciría en un mayor beneficio económico. Por esta
razón nace la idea de este proyecto que busca hacer esto posible pasando por las
fases de investigación, desarrollo, prueba, implementación e implantación.
1. PLANTEAMIENTO DEL PROBLEMA
1.1 Antecedentes
En el mundo actualmente se vive la tendencia de la convergencia de servicios. Se
busca que desde un mismo dispositivo la persona tenga muchas posibilidades de
interacción.
Existen servicios similares al que propone este proyecto, principalmente en
Europa y Asia, implementados con éxito por algunos operadores celulares así
como empresas pequeñas que ofrecen al servicio a través de los operadores.
A continuación se muestran las características y funcionamiento de algunos de
estos servicios.
1.1.1 INSTASMS
Instasms hace parte de la empresa de telefonía móvil InstaPhone que opera
principalmente en Pakistán, y ofrece el servicio de envió de correos electrónicos a
través de sms y viceversa.
Cualquier abonado de la compañía tiene acceso a este servicio, no es necesario
ningún tipo de inscripción previa.
Cobra aproximadamente 100 pesos por cada mensaje de texto saliente.
Tiene un funcionamiento muy sencillo. El usuario debe enviar el mensaje de texto
a un número predeterminado (en este caso 320) con un formato especial, que
permite identificar la dirección de correo electrónico aparte del cuerpo del
mensaje.
1.1.2 EXCELL
eXcell es un proyecto desarrollado por la compañía italiana Bware Technologies
en el año 2000 aproximadamente que ofrece la posibilidad de enviar y recibir
correos electrónicos por medio de mensajes de texto. El usuario móvil debe
registrarse en la página para acceder al servicio, que opera con redes de
diferentes países y compañías de Europa.
El mensaje de texto debe tener un formato especial y ser enviado a un número
predeterminado.
Actualmente cuenta con 217.019 usuarios registrados, pero el servicio perdió
credibilidad y aceptación debido a problemas técnicos así como cierto nivel de
complejidad en el envío del mensaje, ya que el formato de este demandaba
mucha atención y cuidado del usuario. También presentaron problemas con el
envío de los mensajes a cuentas de usuarios de Hotmail. Actualmente varios de
los servicios de esta compañía se encuentran deshabilitados.
1.2 Descripción y Formulación del problema
Actualmente el mundo de la tecnología está dirigiendo gran parte de sus esfuerzos
hacia el área de los dispositivos móviles. Debido a que el ciudadano actual busca
tener la mayor cantidad de servicios a la mano, de forma tal que no este no
malgaste su tiempo en tareas comunes que podría realizar estando en cualquier
lugar y en cualquier momento. Una de estas tareas es el envió de correos
electrónicos, para lo cual, debe disponer de un computador con acceso a Internet,
algo que no se encuentra al alcance de una persona en todo momento. Esto se
podría solucionar utilizando para este fin un dispositivo que la persona puede
llevar consigo a todas partes, como es el teléfono móvil.
Tomando como referencia la experiencia de países más desarrollados en lo que a
tecnología y servicios móviles se refiere, se sabe que es un área que actualmente
ofrece muchas posibilidades y que su aplicación puede darse en una gran
diversidad de campos.
Uno de estos es lograr el envío de correos electrónicos desde un dispositivo móvil
celular cualquiera a través de SMS, utilizando una pasarela SMS. Lo que
representaría para las compañías de servicios móviles un nuevo campo de acción
y por consiguiente mayores beneficios económicos.
El mercado Colombiano de telefonía celular, es un campo que se encuentra en
expansión actualmente donde la competencia genera la necesidad de ofrecer
cada vez nuevos y mejores servicios a los usuarios. Esta es un área con
capacidad de desarrollo ilimitado debido al mejoramiento tecnológico tanto de sus
redes como de los dispositivos, que ahora ofrecen integración total de servicios.
En un país como Colombia el acceso a estos dispositivos de parte de la gente del
común es muy limitado debido a los costos; por esto se busca aprovechar las
posibilidades que dan equipos desde la gama más baja como lo es el envió de
mensajes cortos SMS.
¿Cómo enviar correos electrónicos desde un dispositivo móvil celular a través de
SMS?
1.3 Justificación
La importancia de esta investigación y posterior desarrollo de la aplicación radica
en los beneficios que puede implicar para una empresa o una persona del común
tener acceso barato y desde cualquier lugar para algo tan cotidiano como lo es el
envío de un correo electrónico. El prestador del servicio se verá beneficiado
económicamente debido a que este actualmente está dirigido únicamente hacia el
sector de grandes empresas que son las únicas que pueden adquirirlo debido a su
elevado costo, lo que hace que muy pocas personas se muestren interesadas en
el producto. Esta aplicación logrará que el servicio sea accesible a todas las
personas que posean un teléfono celular y/o un computador, logrando que la
facilidad de adquisición cree un interés generalizado; asimismo el usuario final se
verá beneficiado por las múltiples bondades del producto, aumentando sus
posibilidades de comunicación con las demás personas, tan importante para los
empresarios actuales, reduciendo la perdida de información y aprovechando su
tiempo de disponibilidad al máximo.
Las personas del común verán que la oferta de tecnologías para la comunicación
crece, expandiendo cada vez más su campo de acción logrando que la atracción
por la telefonía móvil aumente, y por consiguiente logrando un nuevo crecimiento
del nivel tecnológico del país.
En nuestro caso específicamente encontramos que por falta de investigación y de
apoyo local e institucional, el acceso a nuevas tecnologías de comunicación se ha
visto truncado por aspectos económicos y posiciónales. Dentro del entorno
tecnológico, es importante desarrollar nuevas tecnologías al alcance de nuestra
economía y desarrollo informático. Por eso se propone el diseño e implementación
de
un sistema que acople estos dos ambientes (Telefonía móvil y
correo
electrónico) para agilizar de una forma fácil y confiable el proceso de envió de mail
desde n-plataforma celular.
Colombia no cuenta con infraestructura tecnológica como para dar cobertura total
o en su mayoría sobre nuevas tecnologías de comunicación, está demostrado que
solo una fracción de la población tiene acceso a un computador personal y menos
a Internet pero es creciente la adquisición de nuevas líneas celulares en Colombia
como lo muestra la siguiente tabla.
Tabla 1. Abonados Móviles en Colombia.
Abonados
en
2001
2002
2003
2004
2005*
Movistar(Bellsouth) 1.187
1.526
2.082
3.297
5.225
Comcel
2.078
3.071
3.674
5.814
11.333
Colombia Móvil
-
-
430
1.300
1.827
Total
3.265
4.597
6.186
10.400
18.385
servicio
* Cifras a Septiembre 2005.
Se ha llegado a un crecimiento tal, que ha superado el número de líneas fijas en
Colombia lo que nos lleva a pensar que el futuro de la comunicación está en este
campo.
1.4. Objetivos de la Investigación
1.4.1. Objetivo General

Diseñar e implementar una aplicación que permita el envió de un SMS
desde un dispositivo móvil celular a un correo electrónico.
1.4.2. Objetivos Específicos

Determinar la viabilidad técnica de la aplicación.

Seleccionar las tecnologías necesarias para el desarrollo de la aplicación.

Diseñar e implementar la aplicación que logrará la interacción entre las dos
plataformas.

Realizar pruebas en un entorno simulado.
1.5 Alcances y Limitaciones del Proyecto
1.5.1 Alcances

Diseño e implementación de la aplicación.

Lograr el envió de un mail por medio de pruebas en un ambiente simulado.
1.5.2 Limitaciones

Existe una limitación técnica, debido a que los equipos necesarios para las
pruebas en un ambiente real de la aplicación solo los poseen las empresas de
telefonía móvil, por lo cual deberíamos conseguir el apoyo de una de estas,
que nos permita utilizar dichos equipos o trabajar en cooperación para lograr el
desarrollo final.

Los mensajes SMS, como su nombre lo indica, son cortos, por consiguiente el
cuerpo del correo electrónico tendrá una longitud de aproximadamente 130
caracteres.
2. MARCO DE REFERENCIA
2.1 Marco Conceptual
Para esta investigación, se deben tener en claro varios conceptos, que darán el
inicio conceptual de lo que se quiere y hacia donde se va. Primero se explicarán
conceptos básicos de mensajera corta (SMS), dando algunas definiciones de
términos que se utilizaran durante el proyecto, luego pasando por tecnologías
cliente servidor para peticiones http, ya que en este concepto se basa gran parte
del proyecto, involucrando conceptos de JAVA en su arquitectura empresarial
J2EE, la que soporta la plataforma de inteligencia de negocio en su porción más
interna, la cual se explicará más a fondo en el transcurso de este documento. Otra
parte importante, es que sms2mail no sólo es un desarrollo dentro de una
arquitectura lógica, sino también involucra una implementación física y un
desarrollo en entorno web, que facilita la interacción entre usuario y sistema.
2.1.1 SMS (Short Message Service)
Los mensajes SMS son herederos directos de los mensajes de los equipos
localizadores de personas, los buscapersonas, pero extendiendo su funcionalidad
para permitir que desde cualquier dispositivo de telefonía móvil se pueda realizar
un envío a otro equipo sin mediar comunicación vocal con un operador.
El éxito de este servicio, el SMS, parece provenir de la sencillez y facilidad de
manejo, por un lado, y de que "hay alguien al otro lado" con quien realizar el acto
de la comunicación. Estos dos factores han provocado dicho éxito, aún teniendo
en contra el precio del servicio en algunos casos y las limitadas características de
esta comunicación.
Las posibilidades de comunicación mediante (SMS) son
muchas y muy variadas, pero siempre limitadas por las características de estos
mensajes, 160 caracteres, muy baja velocidad (en comparación con las líneas
telefónicas convencionales), duración limitada (24 ó 48 horas normalmente, si no
se entregan antes son cancelados), no es un servicio garantizado (el mensaje
suele llegar pero no hay garantía de ello, ni que lleguen en el orden en que se han
enviado) y posibilidad de comunicación sólo entre teléfonos celulares entre los que
haya "visibilidad" (que los operadores de los dos teléfonos, emisor y receptor,
tengan convenio de intercambio de mensajes).
Existen muchas especificaciones de formato de mensaje para los servicios
prestados a través de SMS que les dotan de gran potencia y complejidad. Pero es
en el uso básico con un sistema de enlace sencillo donde se están obteniendo los
mejores resultados, tanto de cantidad de mensajes enviados como de servicios
que se están utilizando. En todo caso, estas posibilidades resultan suficientes
aprovechadas de forma adecuada, y una de esas formas es tener uno de los lados
de la comunicación manejado por un servicio automático que se encargue de
responder a las peticiones recibidas desde múltiples teléfonos celulares. La
automatización de la recepción de los mensajes SMS, su procesado y posterior
respuesta es lo que conforma la funcionalidad de una pasarela SMS.
2.1.2 Pasarela SMS (SMS Gateway)
El acceso a la red GSM se puede obtener de diferentes formas. El método más
sencillo es utilizando directamente un terminal GSM conectado al computador que
actúa de pasarela. En realidad este terminal puede ser un teléfono GSM normal
con su kit de conexión a PC (cable y software) o un modem GSM (igual que los
módems convencionales de red telefónica básica pero su medio de transmisión es
la red GSM, no el par de hilos de cobre).
Figura 1. Diagrama de Pasarela SMS
La comunicación entre el computador y el terminal se suele realizar por un puerto
de comunicaciones serie. Casi todos los teléfonos móviles actuales incluyen un
modem GSM en su interior, de manera que la forma de comunicar computador y
teléfono/modem GSM es la misma que con un MODEM convencional. Si el
teléfono no incluye un modem GSM en su interior, es necesario comunicarse con
el teléfono utilizando las especificaciones del protocolo que el fabricante haya
utilizado (normalmente se trata de protocolos propietarios, aunque cada vez
menos). En GNU/Linux se puede utilizar el proyecto Gnokii, que trata de
implementar el paquete de software Nokia Data Suite para la comunicación con
estos teléfonos que implementan un protocolo propietario de Nokia.
El otro método más habitual para acceder a la red GSM es contactar directamente
con un centro servidor de mensajes (SMSC) del operador de telefonía. Los SMSC
de cada fabricante incorporan también protocolos propietarios, por lo que es
necesario realizar en cada caso un diálogo diferente con cada tipo de SMSC,
además de que el medio de conexión también puede variar de unos a otros (IP,
Frame Relay, X.25, RDSI).
2.1.3 Servlets
Los Servlets son módulos que extienden los servidores orientados a peticiónrespuesta, como los servidores web compatibles con Java. Por ejemplo, un servlet
podría ser responsable de tomar los datos de un formulario de entrada de pedidos
en HTML y aplicarle la lógica de negocios utilizada para actualizar la base de
datos de pedidos de la compañía.
Figura 2. Descripción de la Arquitectura de Servlets
Los servlets pueden ser incluidos en muchos servidores diferentes porque el API
Servlet, el que se utiliza para escribir Servlets, no asume nada sobre el entorno o
protocolo del servidor. Los servlets se están utilizando ampliamente dentro de
servidores HTTP.
Los Servlets son un reemplazo efectivo para los scripts CGI. Proporcionan una
forma de generar documentos dinámicos que son fáciles de escribir y rápidos en
ejecutarse. Los Servlets también solucionan el problema de hacer la programación
del lado del servidor con APIs específicos de la plataforma: están desarrollados
con el API Java Servlet, una extensión estándar de Java.
Por eso se utilizan los servlets para manejar peticiones de cliente HTTP. Por
ejemplo, tener un servlet procesando datos enviados por POST sobre HTTP
utilizando un formulario HTML.
2.1.3.1 Otros usos de los Servlets
Permitir la colaboración entre la gente. Un servlet puede manejar múltiples
peticiones concurrentes, y puede sincronizarlas. Esto permite a los servlets
soportar sistemas como conferencias on-line.
Reenviar peticiones. Los Servlets pueden reenviar peticiones a otros servidores y
servlets. Con esto los servlets pueden ser utilizados para cargar balances desde
varios servidores que reflejan el mismo contenido, y para particionar un único
servicio lógico en varios servidores, de acuerdo con los tipos de tareas o la
organización compartida.
2.1.4 Sockets
Java proporciona mecanismos potentes y a la vez sencillos para construir
programas para redes tales como Internet. Entre las clases que permiten la
comunicación tenemos la clase URL en un nivel superior y las clases Socket y
ServerSocket a un nivel más bajo.
Mediante la clase Socket incluida en el paquete java.net se pueden crear
conexiones de flujo, que son las que utilizan el protocolo TCP, entre dos
ordenadores. El tipo de datos en la comunicación puede ser cualquiera, y por ello
el protocolo TCP es usado por http, ftp, telnet, etc.
Los Sockets o enchufes son semejantes a conexiones telefónicas entre dos
ordenadores remotos, la comunicación es continúa y finaliza cuando uno de los
dos ordenadores cierra su conexión.
La clase ServerSocket es una clase incluida en java.net que sirve para atender
peticiones de conexiones, lo cual es útil a la hora de crear un servidor. En un
servidor hay un bucle infinito donde se llama al método accept de la clase
ServerSocket quedando a la espera de aceptar una conexión. Cuando esta
conexión se produce esta clase devuelve un objeto de tipo socket que es el que
utiliza el servidor para comunicarse con el cliente, de este socket se puede
conseguir una corriente de entrada y otra de salida.
2.1.5 J2ME
Esta versión de Java está enfocada a la aplicación de la tecnología Java en
dispositivos electrónicos con capacidades computacionales y gráficas muy
reducidas, tales como teléfonos móviles, PDAs o electrodomésticos inteligentes.
Esta edición tiene unos componentes básicos que la diferencian de las otras
versiones, como el uso de una máquina virtual denominada KVM (Kilo Virtual
Machine), debido a que requiere sólo unos pocos Kilobytes de memoria para
funcionar) en vez del uso de la JVM clásica, inclusión de un pequeño y rápido
recolector de basura.
Todas las tecnologías Java comparten un conjunto más o menos amplio de APIs
básicas del lenguaje, agrupadas principalmente en los paquetes java.lang y
java.io.
J2ME contiene una mínima parte de las APIs de Java. Esto es debido a que la
edición estándar de APIs de Java ocupa 20 Mb, y los dispositivos pequeños
disponen de una cantidad de memoria mucho más reducida. En concreto, J2ME
usa 37 clases de la plataforma J2SE provenientes de los paquetes java.lang,
java.io, java.util. Esta parte de la API que se mantiene fija forma parte de lo que se
denomina configuración. Otras diferencias con la plataforma J2SE vienen dadas
por el uso de una máquina virtual distinta de la clásica JVM denominada KVM.
Esta KVM tiene unas restricciones que hacen que no posea todas las capacidades
incluidas en la JVM.
2.1.6 MIDlets
Los MIDlets son aplicaciones creadas usando la especificación MIDP. Están
diseñados para ser ejecutados, en dispositivos con poca capacidad gráfica, de
cómputo y de memoria. En estos dispositivos no se dispone de líneas de
comandos donde poder ejecutar las aplicaciones, si no que reside en él un
software que es el encargado de ejecutar los MIDlets y gestionar los recursos que
éstos ocupan.
2.1.6.1 Ciclo de vida de un MIDlet
El ciclo de vida de un MIDlet esta compuesto por 3 estados durante su ejecución,
activo, pausa y destruido.
Figura 3. Ciclo de vida de un MIDlet
• Activo: El MIDlet está actualmente en ejecución.
• Pausa: El MIDlet no está actualmente en ejecución. En este estado el MIDlet no
debe usar ningún recurso compartido. Para volver a pasar a ejecución tiene que
cambiar su estado a Activo.
• Destruido: El MIDlet no está en ejecución ni puede transitar a otro estado.
Además se liberan todos los recursos ocupados por el MIDlet.
Un MIDlet puede cambiar de estado mediante una llamada a los métodos
MIDlet.startApp(),
MIDlet.pauseApp()
o
MIDlet.destroyApp().
El
gestor
de
aplicaciones cambia el estado de los MIDlets haciendo una llamada a cualquiera
de los métodos anteriores. Un MIDlet también puede cambiar de estado por sí
mismo.
2.1.7 Comunicaciones HTTP
El protocolo HTTP es un protocolo de tipo petición/respuesta. El funcionamiento
de este protocolo es el siguiente: El cliente realiza una petición al servidor y
espera a que éste le envíe una respuesta. Normalmente, esta comunicación es la
que suele realizarse entre un navegador web (cliente) y un servidor web (servidor).
Este protocolo es implementado en java por la interfaz HttpConnection.
2.1.8 PHP
PHP significa (siglas que originalmente significaban Personal Home Page) y
actualmente significa Hypertext Preprocessor, fue primero escrito por Rasmus
Lerdorf como un simple conjunto de scripts de Perl para guiar a los usuarios en
sus páginas. Luego para satisfacer inquietudes del mismo tipo por parte de otra
gente lo reescribe, pero esta vez como un lenguaje de script agregándole entre
otras características soporte para formularios. Al ver como la popularidad del
lenguaje aumenta, un grupo de desarrolladores crea para él un API,
convirtiéndose así en el PHP3. Fue en ese momento cuando el parser de scripts
PHP es completamente reescrito (el Zend Engine) dando vida al PHP4 mucho
mas rápido, tal y como lo conocemos en la actualidad.
2.1.8.1 Usos de PHP

Programación de páginas web dinámicas, habitualmente en combinación con
el motor de base datos MySQL, aunque cuenta con soporte nativo para otros
motores, incluyendo el estándar ODBC, lo que amplia en gran medida sus
posibilidades de conexión.

Programación en consola, al estilo de Perl, en Linux, Windows y Macintosh.

Creación de aplicaciones gráficas independientes del navegador, por medio de
la combinación de PHP y GTK (GIMP Tool Kit), que permite desarrollar
aplicaciones de escritorio tanto para los sistemas operativos basados en Unix,
como para Windows y Mac OS X.
2.1.8.2 Características de un lenguaje de scripts

Velocidad: No sólo la velocidad de ejecución, que es importante, sino además
no crear demoras en la máquina. Por esta razón no debe requerir demasiados
recursos de sistema. PHP se integra muy bien junto a otro software,
especialmente bajo ambientes Unix, cuando se configura como módulo de
Apache.

Estabilidad: La velocidad no sirve de mucho si el sistema se cae cada cierta
cantidad de ejecuciones. PHP utiliza su propio sistema de administración de
recursos y dispone de un sofisticado método de manejo de variables,
conformando un sistema robusto y estable.

Seguridad: El sistema debe poseer protecciones contra ataques. PHP provee
diferentes niveles de seguridad, estos pueden ser configurados desde el
archivo .ini.

Simplicidad: Permite a los programadores generar código productivamente en
el menor tiempo posible.

PHP dispone de una amplia gama de librerías, y agregarle extensiones es muy
fácil. Esto le permite al PHP ser utilizado en muchas áreas diferentes, tales
como encriptado, gráficos, XML y otras.
2.1.9 Servidor Web
Un servidor web es un programa que implementa el protocolo HTTP (hypertext
transfer protocol). Este protocolo está diseñado para transferir hipertextos, páginas
web o páginas HTML (hypertext markup language): textos complejos con enlaces,
figuras, formularios, botones y objetos incrustados como animaciones o
reproductores de sonidos. Sin embargo, el hecho de que HTTP y HTML estén
íntimamente ligados no debe dar lugar a confundir ambos términos. HTML es un
formato de archivo y HTTP es un protocolo.
Un servidor web se encarga de mantenerse a la espera de peticiones HTTP
llevada a cabo por un cliente HTTP que suele conocerse como navegador. El
navegador realiza una petición al servidor y éste le responde con el contenido que
el cliente solicita.
Sobre el servicio web clásico se puede disponer de aplicaciones web. Éstas son
fragmentos de código que se ejecutan cuando se realizan ciertas peticiones o
respuestas HTTP.
Es necesario distinguir entre las aplicaciones del cliente y las del servidor.

Aplicaciones en el lado del cliente, donde el cliente web es el encargado de
ejecutarlas en la máquina del usuario. Son las aplicaciones tipo Java o
Javascript, el servidor proporciona el código de las aplicaciones al cliente y
éste, mediante el navegador, las ejecuta. Es necesario, por tanto, que el cliente
disponga de un navegador con capacidad para ejecutar aplicaciones (también
llamadas
scripts).
Normalmente,
los
navegadores
permiten
ejecutar
aplicaciones escritas en lenguaje javascript y java, aunque pueden añadirse
más lenguajes mediante el uso de plugins.

Aplicaciones en el lado del servidor: el servidor web ejecuta la aplicación; ésta,
una vez ejecutada, genera cierto código HTML; el servidor toma este código
recién creado y lo envía al cliente por medio del protocolo HTTP.
Las aplicaciones de servidor suelen ser la opción por la que se opta en la mayoría
de las ocasiones para realizar aplicaciones web. La razón es que, al ejecutarse
ésta en el servidor y no en la máquina del cliente, éste no necesita ninguna
capacidad adicional, como sí ocurre en el caso de querer ejecutar aplicaciones
javascript o java. Así pues, cualquier cliente dotado de un navegador web básico
puede utilizar este tipo de aplicaciones.
2.1.10 Servidor de Correo
Un servidor de correo es una aplicación que permite enviar mensajes (correos) de
unos usuarios a otros con independencia de la red que dichos usuarios estén
utilizando.
Para lograrlo se definen una serie de protocolos, cada uno con una finalidad
concreta:

SMTP, Simple Mail Transfer Protocol: Es el protocolo que se utiliza para
que dos servidores de correo intercambien mensajes.

POP, Post Office Protocol: Se utiliza para obtener los mensajes guardados
en el servidor y pasárselos al usuario.

IMAP, Internet Message Access Protocol: Protocolo de red de acceso a
mensajes electrónicos almacenados en un servidor. Mediante IMAP se
puede tener acceso al correo electrónico desde cualquier equipo que tenga
una conexión a Internet. Una vez configurada la cuenta IMAP, puede
especificar las carpetas que desea mostrar y las que desea ocultar, esta
característica lo hace diferente del protocolo POP.
Así pues, un servidor de correo consta en realidad de dos servidores: un servidor
SMTP que es el encargado de enviar y recibir mensajes, y un servidor POP/IMAP
que es el que permite a los usuarios obtener sus mensajes.
Para obtener los mensajes del servidor, los usuarios se sirven de clientes, es
decir, programas que implementan un protocolo POP/IMAP.
2.1.11 Bases de Datos
Una base de datos es una colección de datos integrados, con redundancia
controlada y con una estructura que refleje las interrelaciones y restricciones
existentes en el mundo real; los datos, que han de ser compartidos por diferentes
usuarios y aplicaciones, deben mantenerse independientes de éstas, y su
definición y descripción, únicas para cada tipo de datos, han de estar
almacenadas junto con los mismos. Los procedimientos de actualización y
recuperación, comunes y bien determinados, habrán de ser capaces de conservar
la integridad, seguridad y confidencialidad del conjunto de los datos.
2.1.11.1 Componentes de una BD
Un sistema de bases de datos contempla los siguientes componentes:

La base de datos.

El Sistema de Gestión de Bases de Datos (SGBD, DBMS) o motor, tal
como Oracle, Sybase, Mysql etc.

Programas de aplicación.

Un conjunto de usuarios (finales, DBA, programadores de aplicaciones,
etc.)

Máquinas de producción.

Programas utilitarios (generadores de informes, de interfaces, herramientas
de desarrollo, de administración, etc.)
2.1.11.2 Mysql Server
MySQL es un gestor de base de datos sencillo de usar y rápido. También es uno
de los motores de base de datos más usados en Internet, la principal razón de
esto es que es de uso libre para aplicaciones no comerciales.

Características principales de MySQL :

Es un gestor de base de datos. Una base de datos es un conjunto de
datos y un gestor de base de datos es una aplicación capaz de manejar
este conjunto de datos de manera eficiente y cómoda.

Es una base de datos relacional. Una base de datos relacional es un
conjunto de datos que están almacenados en tablas que establecen
unas relaciones para manejar los datos de una forma eficiente y segura.
Para usar y gestionar una base de datos relacional se usa el lenguaje
estándar de programación SQL.

Es Open Source. El código fuente de MySQL se puede descargar y está
accesible a cualquiera, por otra parte, usa la licencia GPL para
aplicaciones no comerciales.

Es una base de datos muy rápida, segura y fácil de usar. es una de las
bases de datos más usadas en Internet.
2.2
Marco Teórico
En el mundo se han desarrollado varios proyectos enfocados al uso de las
pasarelas SMS, algunos se encuentran actualmente en funcionamiento y otros
nunca llegaron a ser implantados. En Colombia organizaciones como W@P
Colombia, de la Universidad del Cauca, apoyan la investigación y desarrollo de
aplicaciones dirigidas a dispositivos móviles, dedicándose también en parte a la
utilización de SMS Gateways.
2.2.1 Aplicaciones de una pasarela de mensajería SMS
Los posibles usos que se pueden dar a una pasarela SMS entre las redes
celulares son muy extensos.

Distribución de mensajes SMS. Al igual que funcionan las listas de correo
electrónico, en las que un mensaje es reenviado a lo suscriptores de la lista,
en la lista de distribución de mensajes SMS, la pasarela permite el
mantenimiento (alta/baja/consulta) de suscriptores y envía al resto de
suscriptores de la lista los mensajes que no son comandos de actuación
sobre la propia pasarela.

Recepción de alarmas de los sistemas de monitoreo de servicios.
Aplicaciones como "mon", "hearthbeat", agentes "snmp", etc. generan
avisos cuando se alcanzan ciertos eventos. Estos avisos pueden ser
encaminados mediante mensaje SMS dependiendo de su importancia, para
que ciertas personas sean avisadas inmediatamente.

Transporte de contenidos Web. El SMS es utilizado como paquete de
transporte para hacer llegar desde el móvil al servidor la petición de una
página Web y desde el servidor al móvil el contenido de dicha página una
vez filtrada para eliminar imágenes, tags html, cabeceras de página, etc.

Concursos de preguntas y respuestas. Ante una solicitud desde el teléfono
móvil para comenzar el concurso, la pasarela envía mensajes con
preguntas, recibe respuestas y mantiene un contador de resultados para
cada participante, de manera que se pueden generar clasificaciones.

Sistemas de seguimiento de flotas de vehículos. Un teléfono celular unido a
un módulo GPS permite enviar información acerca de la posición exacta del
portador del teléfono, de manera que para flotas de vehículos se reciben
sus notificaciones de posición en la pasarela y ésta actualiza una base de
datos consultable por otras aplicaciones que pueden mostrar la situación de
cada elemento de la flota.

Notificación de estado de dispositivos aislados. Máquinas de vending,
dispositivos de control de temperatura y presencia, etc. que se encuentren
aislados y sin comunicación con una red mediante enlace físico pueden
hacer uso de los mensajes SMS para recibir ordenes y para notificar su
estado (queda poca bebida, la temperatura ha superado los 45 grados,
etc.). Normalmente esta comunicación se realiza sin intervención manual,
por lo que realmente se conectan equipos automáticos en ambos lados. Es
lo que Nokia denomina M2M (machine to machine).
Además, de inmediato, a cada persona le surgen nuevas aplicaciones, orientadas
a su área de conocimiento:

Consulta de bases de datos.

Mantenimiento de sistemas. Consultas de estado de servicios, reinicio de
los mismos, reinicio de equipos.

Notificación de informaciones académicas. Notas, convocatorias de
examen, etc.

Banca GSM. Servicios financieros y alarmas para el seguimiento de
operaciones de valores.

Cualquier otro tipo de alarmas debido a caídas de tensión, detección de
intrusos en firewalls, etc.

Domótica1. Control y consulta de dispositivos a distancia.

Avisos de intervención para equipos médicos, mantenimiento, rescate, etc.
Dadas las características de la red GSM que permiten la movilidad de los
terminales (teléfonos) en su zona de cobertura, su pueden imaginar aplicaciones
que aprovechen la posibilidad de localización de un teléfono, en base a la estación
base de la red que en ese momento tiene conexión con él. Sin embargo, esta
información no es directamente accesible desde el exterior de la red del operador
de telefonía, por lo que, salvo aplicaciones fuertemente integradas con la red del
operador, no es posible su utilización.
Podría imaginarse una aplicación que permitiera emitir mensajes SMS a teléfonos
móviles entre las 2 y las 3 de la tarde en la zona de cobertura de una estación
base situada junto a un restaurante que contratará los servicios de publicidad que
un operador pudiera ofrecer, para que todos los que por allí cerca pasaran
supieran donde está dicho restaurante. Al margen de la aplicación, podrían surgir
problemas con la utilización de la posición de los terminales para operaciones no
solicitadas por el propietario del terminal, ya que al fin y al cabo, la situación de
cada terminal es información privada del propietario.
De cualquier manera, la pasarela de mensajería sólo trata de servir de
intermediario y facilitar la labor de desarrollo de las extensiones móviles para una
aplicación dada.
1
Domótica: es el conjunto de sistemas automatizados de una vivienda que aportan servicios de gestión
energética, seguridad, bienestar y comunicación, y que pueden estar integrados por medio de redes interiores
y exteriores de comunicación.
La pasarela de mensajería SMS/IP trata de ser como un servidor Web, realiza sus
tareas de cambio de formato y ajuste del mensaje, pero precisa de contenidos que
realmente le den una utilidad, aunque en este caso los contenidos son pequeñas o
grandes aplicaciones que permiten interactuar al usuario móvil con otro programa.
También tiene un comportamiento similar al de un Agente de Transferencia de
Mensajes de correo (MTA) ya que, de alguna forma, ésa también es su tarea: el
encolado, conmutado y entrega de mensajes.
Para finalizar con las utilidades de las pasarelas de mensajería SMS/IP, añadir
que no hay un estándar para que las aplicaciones comuniquen con las pasarelas,
en general, sino que cada una define su propio interfaz, que es diferente en todos
los casos. En este aspecto queda mucho camino por recorrer para, quizás, definir
un wrapper, un interfaz intermedio, normalizado, que permita la utilización de
diferentes pasarelas SMS sin necesidad de realizar cambios en la aplicación.
A continuación se muestran las principales características de los proyectos más
reconocidos en este campo.
2.2.2 Kannel
Kannel utiliza la licencia BSD.
Kannel fue en primer lugar una pasarela WAP, pero amplió sus funcionalidades
posteriormente para dar soporte a WAP usando SMS como transporte de los
datos y para obtener páginas Web.
El código ahora es bastante estable, estando reconocido y certificado por el
WapForum como una pasarela que se ajusta a los estándares WAP. Detrás de
Kannel hay un numeroso grupo de desarrolladores y colaboradores. La empresa
que comenzó a desarrollar Kannel se llamaba WapIt. Recientemente tuvo
problemas económicos y cerró. Desde entonces, han tratando de crear una
fundación que dé apoyo al mantenimiento del desarrollo de Kannel.
Kannel es un proyecto grande, con una estructura detallada que le convierte en
"demasiado complejo" para algunas instalaciones. Sin embargo, su objetivo
principal es la escalabilidad y alta disponibilidad desde su planteamiento inicial.
Básicamente, en una instalación mínima, aparece lo que en Kannel denominan
"BearerBox", el componente que comunica con el centro servidor de mensajes
(SMSC) o un teléfono WAP que puede sustituirlo en parte. Con este BearerBox
comunican los otros componentes, "SMSBox" y "WAPBox", que se encargan de
acceder a los servidores HTTP que tienen el contenido que se desea acceder, y
que realizan las conversiones/compresiones que establece el protocolo WAP para
el envío de los mismos a los teléfonos.
2.2.2.1
Arquitectura de Kannel
Kannel utiliza la licencia BSD. Kannel fue en primer lugar una pasarela WAP, pero
amplió sus funcionalidades posteriormente para dar soporte a WAP usando SMS
como transporte de los datos y para obtener páginas Web.
El código ahora es bastante estable, estando reconocido y certificado por el
WapForum como una pasarela que se ajusta a los estándares WAP. Detrás de
Kannel hay un numeroso grupo de desarrolladores y colaboradores. La empresa
que comenzó a desarrollar Kannel se llamaba WapIt. Recientemente tuvo
problemas económicos y cerró. Desde entonces, han tratando de crear una
fundación que dé apoyo al mantenimiento del desarrollo de Kannel, pero las
últimas noticias que aparecen en el sitio Web de Kannel no son muy recientes.
Kannel es un proyecto grande, con una estructura detallada que le convierte en
"demasiado complejo" para algunas instalaciones. Sin embargo, su objetivo
principal es la escalabilidad y alta disponibilidad desde su planteamiento inicial.
Básicamente, en una instalación mínima, aparece lo que en Kannel denominan
"BearerBox", el componente que comunica con el centro servidor de mensajes
(SMSC) o un teléfono WAP que puede sustituirlo en parte. Con este BearerBox
comunican los otros componentes, "SMSBox" y "WAPBox", que se encargan de
acceder a los servidores HTTP que tienen el contenido que se desea acceder, y
que realizan las conversiones/compresiones que establece el protocolo WAP para
el envío de los mismos a los teléfonos.
Figura 4. Arquitectura Kannel
En una instalación orientada a SMS, desde el teléfono celular se envía un mensaje
que es recibido por el SMSC u otro teléfono móvil, que recibe el mensaje para
pasárselo al BearerBox; el mensaje es encaminado al SMSBox, que accede a una
página Web (puede ser un cgi que genere la página dinámicamente, para ejecutar
comandos o lanzar programas, por ejemplo) y el resultado es devuelto al
BearerBox de nuevo para ser devuelto al teléfono.
Kannel está orientado principalmente al trabajo directo con centros servidores de
mensajes (SMSC) e implementa muchos protocolos de acceso a SMSCs de
diferentes fabricantes. Es en la conexión directa con un SMSC cuando se obtienen
los mejores resultados de rendimiento; sin embargo, no siempre se tiene
disponible una conexión de este tipo con la red GSM, por lo que también
implementa conexión mediante modem GSM o teléfono móvil con modem
incorporado.
2.2.3 Alamin
Alamin utiliza la licencia GPL. Alamin nació inicialmente con el objetivo de poder
lanzar sencillas líneas de comando desde un teléfono móvil. En Marzo de 1998 se
implementó un servicio que monitorizaba un buzón de correo y recibía sus
mensajes, interpretaba su contenido y realizaba alguna acción, devolviendo un
resultado también por correo electrónico. El acceso al teléfono móvil se realizaba
mediante una pasarela sms/email.
Esta pequeña pasarela estaba realizada en Perl y sus especificaciones se pueden
encontrar en http://andressh.alamin.org/SSJP/. Este servicio no llegó a ser puesto
en marcha en ninguna instalación real.
Posteriormente, a mediados de 1999, el proyecto Gnokii permitió acceso directo a
la red GSM. Ya existían los módems GSM, pero estaban muy poco extendidos,
eran caros y difíciles de conseguir.
Alamin utilizó primero Gnokii como medio de acceso a la red GSM, y, al evitar usar
otra pasarela a más bajo nivel, se ganó en fiabilidad. En mayo de 2000 se
pusieron en marcha las primeras instalaciones en explotación de Alamin.
Alamin se compone principalmente de dos componentes: el manejador de
mensajes (gsgmdd, Message Distpatcher) y el núcleo que gestiona las peticiones
desde la red IP (gsgcmd, Core Module).
2.2.3.1
Arquitectura de Alamin
Figura 5. Arquitectura Alamin
El Core Module es el que centra la gestión del servicio, el control de acceso de las
peticiones desde la red IP, despliega los alias en los números que corresponda y
prepara las solicitudes para ser enviadas. La comunicación entre los clientes de la
red IP y el Core Module se realiza mediante el protocolo smsqp, que utiliza por
defecto el puerto 11201/TCP para su comunicación. Este protocolo no está
terminado de especificar, ya que se está desarrollando con Alamin.
El Message Dispatcher se encarga de la entrega de los mensajes desde las colas
de prioridades al dispositivo GSM, comprueba la existencia de mensajes entrantes
y lanza programas externos para el tratamiento de los mensajes que han llegado.
Inicialmente, el Message Dispatcher utilizaba Gnokii para realizar estas tareas,
pero ahora ya usa comunicación directa con módems GSM mediante comandos
AT. En el momento actual de desarrollo, sólo se permite un dispositivo GSM por
cada Message Dispatcher. En sucesivas versiones se podrá utilizar múltiples
dispositivos GSM, tablas de rutas para decidir por dónde se envía un mensaje, y
su arquitectura será cambiada para facilitar que se puedan añadir de forma
sencilla nuevos "controladores" para otros dispositivos GSM o para utilizar otras
pasarelas en cascada ( http, accesos directos a SMSC, protocolos de otras
pasarelas, etc.)
Adicionalmente a estos dos componentes van a ser añadidos otros que
implementan
diferentes
protocolos
para
permitir
que
otras
aplicaciones,
directamente, sin cambios, accedan a la red GSM. Uno de ellos, que ya está
incluido en la distribución de la pasarela y que implementa el protocolo SMTP, es
gsgsmtpd (SMTP interfase). De esta forma, la pasarela traduce directamente
mensajes de correo a SMS.
Están pendientes de implementación otros protocolos, como POP, que permitirá
que desde cualquier cliente de correo se puedan recibir mensajes SMS
convertidos a mensajes de correo electrónico. También está pendiente de
implementar el modo PDU en el envío de mensajes para módems GSM. Sólo se
soporta, temporalmente, el modo texto. El modo PDU en el envío de mensajes
SMS mediante comandos AT permite enviar caracteres no imprimibles, es decir,
no solo letras, números y algunos caracteres especiales, si no que cualquier valor
desde 0 a 255 puede ser utilizado. Es necesario para el envío de mensajes en
formatos avanzados o el envío de melodías y logotipos.
2.2.4 SMSLink
SMSLink utiliza la licencia GPL; es similar en muchos aspectos a Alamin, pero
tiene ciertas diferencias de arquitectura.
En principio, sólo hay un proceso corriendo, y lanza nuevos hilos para cada
petición de envío de mensaje recibido de la red IP. El acceso concurrente al
dispositivo GSM se gestiona mediante un sistema de bloqueos y semáforos.
Permite el uso de múltiples dispositivos GSM desde su comienzo. Para la
recepción de mensajes, existe la opción de almacenar los mensajes entrantes y
enviarlos a un programa que los procese.
Los dispositivos GSM soportados son todos los que soporten comandos AT
extendidos, esto es, módems GSM y teléfonos con modem incorporado. Tanto el
modo PDU como el modo texto están disponibles para el envió de mensajes.
En este momento no incorpora todavía gestión de colas, prioridades, usuarios y
permisos por usuario. Estas son las deficiencias con respecto a Alamin, sin
embargo, Alamin solo puede manejar un dispositivo GSM, y en caso de ser un
modem, no puede usar el modo PDU para envío de mensajes con melodías y
logotipos.
2.2.5 SMSTools
SMSTools utiliza la licencia GPL. La filosofía general de la aplicación es la misma
que Alamin y SMSLink. Tan solo hay diferencias en detalles de implementación.
Soporta hasta 32 dispositivos GSM simultáneos. Gestiona una cola por cada
dispositivo y se pueden establecer rutas de manera que ciertos mensajes se
envíen solo por un dispositivo determinado.
También permite establecer qué programa debe ser lanzado cada vez que se
recibe o se envía un mensaje. No resulta muy flexible en redes con problemas de
transmisión o en momentos de mucha carga de la red, ya que la configuración de
reintentos no resulta flexible. Tampoco, como SMSLink, incorpora todavía gestión
de colas, prioridades, usuarios y permisos por usuario.
2.2.6 Oxygen SMS Gateway
Oxygen SMS Gateway permite comunicación continua entre personas sin importar
el servicio que utilicen. La versión actual soporta 3 servicios diferentes: SMS, email y ICQ. Esto significa que las personas que posean al menos uno de estos
servicios pueden comunicarse con cualquiera de los otros.
La ventaja principal de Oxygen SMS Gateway sobre los demás servicios smsemail es que este es bidireccional.
La persona puede enviar SMS a una dirección de email, e-mails a una cuenta de
ICQ y viceversa. Luego podrá recibir la respuesta, contestar esta respuesta y así
sucesivamente.
La Oxygen SMS Gateway opera bajo Microsoft Windows 95/98/NT/ME/2000
y soporta los siguientes teléfonos Nokia GSM: 3210, 3310, 3330, 5110, 5130,
5190, 6110, 6130, 6150, 6190, 6210, 6250, 7110, 7190, 8210, 8250, 8290, 8810,
8850,8890.
2.2.7 Now SMS E-Mail Gateway
La pasarela SMS/E-mail NOW es un software que proporciona soporte
bidireccional de SMS a e-mail, permitiendo que e-mails sean enviados a
receptores SMS, y estos respondan por medio de SMS siendo enviados a un
buzón de e-mail.
Esta pasarela acepta mensajes SMTP y los enruta a receptores SMS, el formato
de dirección de e-mail seria numerodetelefono@dominio.
NOW permite que el usuario de SMS envíe mensajes de Internet de dos formas,
como respuesta a un mensaje recibido por medio de la pasarela, o un mensaje
completamente nuevo.
Para enviar un nuevo mensaje SMS hacia un buzón de correo, el encabezado del
mensaje debe ser la dirección de e-mail que va a recibir el mensaje.
La respuesta de un SMS a un e-mail es soportada por dos métodos diferentes,
dependiendo de la configuración de la pasarela.

Si 20 o más números de teléfono están localizados en la pasarela, cada
vez que la pasarela enrute un mensaje hacia un receptor de SMS, un
número diferente de teléfono de envío es utilizado. Cuando el usuario
responde, basado en el número de teléfono al que respondieron, el
mensaje es enrutado a la dirección de e-mail apropiada que género el
mensaje que fue respondido.

Si un solo número de teléfono está localizado en la pasarela, un código
es incluido con cada mensaje enrutado a un receptor SMS por medio de
la pasarela. Cuando un usuario responde un mensaje, debe incluir dicho
código como el primer texto de la respuesta SMS.
Esta pasarela requiere una conexión SMPP(Short Message Peer-to-Peer Protocol)
a un SMSC (Short Message Service Center), con la capacidad de enviar y recibir
mensajes.
3. METODOLOGIA
Para el desarrollo de este proyecto se siguieron las directrices marcadas por la
metodología XP (Extreme Programming).
3.1 eXtreme Programming
La metodología XP hace parte de las llamadas metodologías ágiles, las cuales se
rigen por el siguiente manifiesto.

Software que funcione es más importante que documentación exhaustiva.
Desarrollar
software
que
funciona
más
que
conseguir
una
buena
documentación. La regla a seguir es no producir documentos a menos que
sean necesarios de forma inmediata para tomar un decisión importante. Estos
documentos deben ser cortos y centrarse en lo fundamental.

La colaboración con el cliente es más importante que la negociación de
contratos.
Se propone que exista una interacción constante entre el cliente y el equipo de
desarrollo. Esta colaboración entre ambos será la que marque la marcha del
proyecto y asegure su éxito.

La respuesta ante el cambio es más importante que el seguimiento de un plan.
Responder a los cambios más que seguir estrictamente un plan. La habilidad
de responder a los cambios que puedan surgir a los largo del proyecto
(cambios en los requisitos, en la tecnología, en el equipo, etc.) determina
también el éxito o fracaso del mismo. Por lo tanto, la planificación no debe ser
estricta sino flexible y abierta.
XP se fundamenta en doce prácticas, descritas a continuación:

Planificación incremental
La Programación Extrema asume que la planificación nunca será perfecta, y
que variará en función de cómo varíen las necesidades del negocio. Por tanto,
el valor real reside en obtener rápidamente un plan inicial, y contar con
mecanismos de feedback que permitan conocer con precisión dónde estamos.
Como es lógico, la planificación es iterativa: un representante del negocio
decide al comienzo de cada iteración qué características concretas se van a
implementar.
El objetivo de la XP es generar versiones de la aplicación tan pequeñas como
sea posible, pero que proporcionen un valor adicional claro, desde el punto de
vista del negocio. A estas versiones se las denomina releases.
Un release cuenta con un cierto número de historias. La historia es la unidad
de funcionalidad en un proyecto XP, y corresponde a la mínima funcionalidad
posible que tiene valor desde el punto de vista del negocio. Durante cada
iteración se cierran varias historias, lo que hace que toda iteración añada un
valor tangible para el cliente.
La obtención de feedback que permita llevar a cabo estimaciones precisas es
fundamental. Se hacen estimaciones para cada historia, de modo que en
cuanto se comienzan a tener datos históricos, éstos se utilizan para hacer que
las siguientes estimaciones sean más precisas.

Gran parte de la eficacia de este modelo de planificación deriva de una
división clara de responsabilidades, que tiene en cuenta las necesidades
del negocio en todo momento.
Las responsabilidades del equipo de desarrollo son las siguientes:

Estimar cuánto tiempo llevará una historia: este feedback es
fundamental para el cliente, y puede llevarle a reconsiderar qué historias
se deben incluir en una iteración.

Proporcionar información sobre el coste de utilizar distintas opciones
tecnológicas.

Organizar el equipo.

Estimar el riesgo de cada historia.

Decidir el orden de desarrollo de historias dentro de la iteración.

Testing
La ejecución automatizada o manual de tests es un elemento clave de la XP.
Existen tanto tests internos (o tests de unidad), para garantizar que el mismo
es correcto, como tests de aceptación, para garantizar que el código hace lo
que debe hacer. El cliente es el responsable de definir los tests de aceptación,
no necesariamente de implementarlos. Él es la persona mejor calificada para
decidir cuál es la funcionalidad más valiosa.
Desde el punto de vista de la XP, si no hay tests, las cosas sólo funcionan en
apariencia.
El objetivo de los tests no es corregir errores, sino prevenirlos. Elaborar los
tests exige pensar por adelantado cuáles son los problemas más graves que
se pueden presentar, y cuáles son los puntos dudosos. Esto evita muchos
problemas y dudas, en lugar de dejar que aparezcan sobre el desarrollo
Un efecto lateral importante de los tests es que dan una gran seguridad a los
desarrolladores, es posible llegar a hacer cambios más o menos importantes
sin miedo a problemas inesperados. La existencia de tests hace el código muy
maleable.

Programación en parejas
La XP incluye, como una de sus prácticas estándar, la programación en
parejas. Nadie programa en solitario, siempre hay dos personas delante de la
computadora. Ésta es una de las características que más se cuestiona al
comienzo de la adopción de la XP dentro de un equipo, pero en la práctica se
acepta rápidamente y de forma entusiasta.
El principal argumento contra la programación en parejas es que es
improductiva. Esta idea se basa en el hecho de que dos programadores
"programan el doble por separado". Esto sería así si no fuera por las siguientes
razones:

El hecho de que todas las decisiones las tomen al menos dos personas
proporciona un mecanismo de seguridad enormemente valioso.

Con dos personas responsabilizándose del código en cada momento, es
muy difícil que dos personas se salten tareas por descuido o
negligencia.

El hecho de programar en parejas permite la dispersión de know-how
por todo el equipo. Este efecto es difícil de conseguir de otro modo, y
hace que la incorporación de nuevos miembros al equipo sea mucho
más rápida y eficaz.

El código siempre está siendo revisado por otra persona. La revisión de
código es el método más eficaz de conseguir código de calidad, algo
corroborado por numerosos estudios, muchos de los cuáles son
anteriores a la Programación Extrema.

En contra de lo que pueda parecer, los dos desarrolladores no hacen lo
mismo: mientras el que tiene el teclado adopta un rol más táctico, el otro
adopta un rol más estratégico, preguntándose constantemente si lo que
se está haciendo tiene sentido desde un punto de vista global.

Refactorización

A la hora de la verdad, el código de la mayor parte de las aplicaciones
empieza en un razonable buen estado, para luego deteriorarse de forma
progresiva. El costo desorbitado del mantenimiento, modificación y
ampliación de aplicaciones ya existente se debe en gran parte a este
hecho.

Uno de los objetivos de la XP es mantener la curva de costos tan plana
como sea posible, por lo que existen una serie de mecanismos
destinados a mantener el código en buen estado, modificándolo
activamente para que conserve claridad y sencillez. A este proceso
básico para mantener el código en buena forma se le llama
refactorización.

La refactorización no sólo sirve para mantener el código legible y
sencillo: también se utiliza cuando resulta conveniente modificar código
existente para hacer más fácil implementar nueva funcionalidad.

Diseño simple
Otra práctica fundamental de la Programación Extrema es utilizar diseños tan
simples como sea posible. El principio es utilizar el diseño más sencillo que
consiga que todo funcione.
Si no se van a anticipar futuras necesidades, se debe poder modificar el diseño
si alguna de estas se materializa. La XP soporta estas modificaciones gracias a
los tests. La refactorización, que hace que el código existente sea claro y
sencillo, también ayuda a hacer factibles las modificaciones.
La XP define un "diseño tan simple como sea posible" como aquél que:

Pasa todos los tests.

No contiene código duplicado.

Deja clara la intención de los programadores (enfatiza el qué, no el
cómo) en cada línea de código.


Contiene el menor número posible de clases y métodos.
Propiedad colectiva del código
La XP aboga por la propiedad colectiva del código. En otras palabras, todo el
mundo tiene autoridad para hacer cambios a cualquier código, y es
responsable de ellos. Esto permite no tener que estar esperando a otros
cuando todo lo que hace falta es algún pequeño cambio.
Por último, vale la pena tener en cuenta que la existencia de tests impide que
se produzca un desarrollo anárquico, al ser cada persona responsable de que
todos los tests se ejecuten con éxito al incorporar los cambios que ha
introducido al programa.

Integración continua
En muchos casos la integración de código produce efectos laterales
imprevistos, y en ocasiones la integración puede llegar a ser realmente
traumática, cuando dejan de funcionar cosas por motivos desconocidos. La
Programación Extrema hace que la integración sea permanente, con lo que
todos los problemas se manifiestan de forma inmediata, en lugar de durante
una fase de integración más o menos remota.

Cliente en el equipo
La XP intenta resolver este tipo de problemas integrando un representante del
negocio dentro del equipo de desarrollo. Ésta persona siempre está disponible
para resolver dudas y para decidir qué y qué no se hace en cada momento, en
función de los intereses del negocio. Debido a su inmersión dentro del equipo,
y a que es él quien decide qué y qué no se hace, junto con los tests que
verifican si la funcionalidad es la correcta y deseada, esta persona obtiene un
feedback absolutamente realista del estado del proyecto.

Releases pequeñas (Entregas pequeñas)
Siguiendo la política de la XP de dar el máximo valor posible en cada
momento, se intenta liberar nuevas versiones de las aplicaciones con
frecuencia. Éstas deben ser tan pequeñas como sea posible, aunque deben
añadir suficiente valor como para que resulten valiosas para el cliente.

Semanas de 40 horas
La Programación Extrema lleva a un modo de trabajo en que el equipo está
siempre al 100%. Una semana de 40 horas en las que se dedica la mayor
parte del tiempo a tareas que suponen un avance puede dar mucho de sí, y
hace innecesario recurrir a sobreesfuerzos -excepto en casos extremos.
Además, el sobreesfuerzo continuado pronto lleva a un rendimiento menor y a
un deterioro de la moral de todo el equipo.

Estándares de codificación
Para conseguir que el código se encuentre en buen estado y que cualquier
persona del equipo pueda modificar cualquier parte del código es
imprescindible que el estilo de codificación sea consistente.
Sin embargo, la XP también es pragmática en esto, y apuesta por establecer
un número mínimo de reglas: el resto se irán pactando de-facto. Esto evita un
ejercicio inicial más o menos estéril.

Uso de Metáforas
La comunicación fluida es uno de los valores más importantes de la
Programación Extrema: la programación en parejas, el hecho de incorporar al
equipo una persona que represente los intereses del negocio y otras prácticas
son
valiosas
entre
otras
cosas
porque
potencian
enormemente
la
comunicación.
3.1.1 Ciclo de vida de un proyecto XP
El ciclo de vida ideal XP consiste de seis fases:

Exploración
En esta fase, los clientes plantean a grandes rasgos las historias de usuario que
son de interés para la primera entrega del producto. Al mismo tiempo el equipo de
desarrollo se familiariza con las herramientas, tecnologías y prácticas que se
utilizarán en el proyecto. Se prueba la tecnología y se exploran las posibilidades
de la arquitectura del sistema construyendo un prototipo. La fase de exploración
toma de pocas semanas a pocos meses, dependiendo del tamaño y familiaridad
que tengan los programadores con la tecnología.

Planificación de la Entrega (Release)
En esta fase el cliente establece la prioridad de cada historia de usuario, y
correspondientemente, los programadores realizan una estimación del esfuerzo
necesario de cada una de ellas. Se toman acuerdos sobre el contenido de la
primera entrega y se determina un cronograma en conjunto con el cliente. Una
entrega debería obtenerse en no más de tres meses. Esta fase dura unos pocos
días. Las estimaciones de esfuerzo asociado a la implementación de las historias
la establecen los programadores utilizando como medida el punto. Un punto,
equivale a una semana ideal de programación. Las historias generalmente valen
de 1 a 3 puntos. La planificación se puede realizar basándose en el tiempo o el
alcance. La velocidad del proyecto es utilizada para establecer cuántas historias
se pueden implementar antes de una fecha determinada o cuánto tiempo tomará
implementar un conjunto de historias. Al planificar por tiempo, se multiplica el
número de iteraciones por la velocidad del proyecto, determinándose cuántos
puntos se pueden completar. Al planificar según alcance del sistema, se divide la
suma de puntos de las historias de usuario seleccionadas entre la velocidad del
proyecto,
obteniendo
el
número
de
iteraciones
necesarias
para
su
implementación.

Iteraciones
Esta fase incluye varias iteraciones sobre el sistema antes de ser entregado. El
Plan de Entrega está compuesto por iteraciones de no más de tres semanas. En la
primera iteración se puede intentar establecer una arquitectura del sistema que
pueda ser utilizada durante el resto del proyecto. Esto se logra escogiendo las
historias que fuercen la creación de esta arquitectura, sin embargo, esto no
siempre es posible ya que es el cliente quien decide qué historias se
implementarán en cada iteración (para maximizar el valor de negocio). Al final de
la última iteración el sistema estará listo para entrar en producción. Los elementos
que deben tomarse en cuenta durante la elaboración del Plan de la Iteración son:
historias de usuario no abordadas, velocidad del proyecto, pruebas de aceptación
no superadas en la iteración anterior y tareas no terminadas en la iteración
anterior. Todo el trabajo de la iteración es expresado en tareas de programación,
cada una de ellas es asignada a un programador como responsable, pero llevadas
a cabo por parejas de programadores.

Producción
La fase de producción requiere de pruebas adicionales y revisiones de rendimiento
antes de que el sistema sea trasladado al entorno del cliente. Al mismo tiempo, se
deben tomar decisiones sobre la inclusión de nuevas características a la versión
actual, debido a cambios durante esta fase. Es posible que se rebaje el tiempo
que toma cada iteración, de tres a una semana. Las ideas que han sido
propuestas y las sugerencias son documentadas para su posterior implementación
(por ejemplo, durante la fase de mantenimiento).

Mantenimiento
Mientras la primera versión se encuentra en producción, el proyecto XP debe
mantener el sistema en funcionamiento al mismo tiempo que desarrolla nuevas
iteraciones. Para realizar esto se requiere de tareas de soporte para el cliente. De
esta forma, la velocidad de desarrollo puede bajar después de la puesta del
sistema en producción.

Muerte del Proyecto
Es cuando el cliente no tiene más historias para ser incluidas en el sistema. Esto
requiere que se satisfagan las necesidades del cliente en otros aspectos como
rendimiento y confiabilidad del sistema. Se genera la documentación final del
sistema y no se realizan más cambios en la arquitectura. La muerte del proyecto
también ocurre cuando el sistema no genera los beneficios esperados por el
cliente.
Figura 6. Ciclos de Planeación y Retroalimentación
3.2
Enfoque de la Investigación
Empírico – analítico
El proyecto responde a este enfoque ya que se realizará una investigación técnica
con pocos precedentes en el campo, y tiene un impacto en servicios que afectan a
la sociedad en común.
3.3
Línea de Investigación de la USB / Sub Línea de Facultad/ Campo
Temático del Programa
Tecnologías Actuales Y Sociedad / Sistemas de información, comunicación y
robótica. / Desarrollo de aplicaciones
3.4
Hipótesis
Es posible el envío de correos electrónicos desde un dispositivo móvil celular por
medio de SMS.
4. PRESENTACION Y ANALISIS DE RESULTADOS
Teniendo en cuenta la hipótesis y objetivos planteados, luego de probar diferentes
vías de atacar el problema, se encontró, que es posible lograr el envío de un
correo electrónico a través de un mensaje de texto (SMS) convencional desde
cualquier dispositivo móvil celular.
Luego de pasar por la fase de levantamiento de información e investigación se
concluyó que la aplicación era viable técnicamente, debido a que se podía lograr
generar un ambiente simulado apropiado para afrontar la fase de pruebas a la que
sería sometida.
Al ver su viabilidad se seleccionaron las tecnologías de desarrollo más apropiadas
y el diseño de la aplicación, el cual quedo definido por un modem GSM conectado
a un servidor donde se encuentra la SMS Gateway (pasarela SMS), que invoca
mediante un parámetro GET un Java Servlet contenido en el servidor de
aplicaciones, el cual luego de validar contra la base de datos los contactos del
remitente genera el envió del correo electrónico deseado (Diagrama 1).
Antes de llegar a esta solución, se implemento otra que logra su cometido
mediante un entorno totalmente simulado, utilizando un Java Socket-Midlet y un
Java Servlet, mediante el Java Wireless Toolkit y su consola de WMA (Wireless
Messaging API), que simula el remitente del SMS inicial (Diagrama 7).
Respetando la metodología y actividades propuestas y superando la fase de
pruebas correspondiente al entorno de ejecución para llegar al desarrollo final de
la aplicación, se espera que ésta tenga un gran nivel de aceptación debido a su
innovación y simplicidad.
Diagrama 1. Funcionamiento Físico sms2mal
5. DESARROLLO INGENIERIL
5.1 Fase de Exploración
De acuerdo a la metodología (Programación Extrema) acordada para el desarrollo
e implementación del sistema, hemos de empezar por la primera fase, que es la
exploración, fase en la que se plantean las historias de usuario (user stories) o
requisitos del sistema al mismo tiempo que el equipo de desarrollo se familiariza
con las herramientas, tecnologías y prácticas que se utilizarán en el proyecto. Se
prueba la tecnología y se exploran las posibilidades de la arquitectura del sistema
construyendo un prototipo.
5.1.1 Historias de Usuario (Requerimientos del Sistema)
Para poder llevar a cabo el desarrollo, empezamos por indagar cuales son los
requerimientos del sistema, combinamos este proceso con la documentación de
casos de uno de UML para poder documentar bien la aplicación.
A continuación se describen brevemente las características que el sistema debe
tener desde la perspectiva del usuario.
o Enviar un correo electrónico por medio del celular, por el método de
SMS.
o Poder consultar cuantos correos han sido enviados.
o Poder agregar listas distribución a grupos determinados.
o Establecer un formato de envió por SMS para reducir error.
o Gestión de Listas de distribución por medio de una pagina Web.
o Registrarse como usuario del servicio, por medio Web.
o Autenticación de usuarios en la Web, para mantener un control sobre el
servicio.
5.1.2 Casos de uso del sistema
Los casos de uso del sistema, fueron orientados a la funcionalidad, desde el
dispositivo móvil en el que se va a enviar el correo por medio de SMS y desde el
desarrollo del aplicativo Web, para el registro de listas de distribución.
Diagrama 2. Caso de uso de Envió de sms2mail
En la figura anterior, se ven los casos de uso para el envió de SMS a correo
electrónico. En el cual se identifican, los dos tipos de validación que debe hacer el
sistema para el envió del correo.
En el siguiente diagrama se detallan los casos de uso para el aplicativo Web que
se encargara de la inscripción en el sistema para las listas de distribución.
Diagrama 3. Casos de uso Aplicativo Web
5.1.3 Herramientas
En el desarrollo de este proyecto las herramientas utilizadas en su mayoría son
tecnologías libres, aunque la plataforma esta sobre Windows XP.
5.1.4 Desarrollo

Java™ 2 SDK, Standard Edition 1.5 Sun Microsystems

Java Wireless ToolKit 2.5 Beta (Emulador para entornos móviles)

Marcromedia DreamWeaver MX 2004

PHP Designer 2005

Smart Draw Suite Edition

Microsoft Visio 2003
5.1.5 Entorno de Ejecución

Apache Tomcat 5.5

Java 2 Platform, Micro Edition (J2ME)

AppServer 2.4.4ª

Mysql 5.0 Win 32

Now SMS Gateway

Mdaemon 8.1 Servidor de Correo
5.1.6 Tecnología y Plataformas

PC Pentium 4 3000 HT, 1 Gb RAM

PC AMD 64bits 3000, 512 RAM

Móvil Siemens c66
5.2
Planificación de Entregas
En esta fase, estimaremos las iteraciones necesarias y su frecuencia de entrega,
tanto como su estimación de esfuerzo para el equipo desarrollador según algunas
métricas explicadas en el punto 3.1 en el apartado que hace referencia a la
planificación de entregas. A continuación se muestran las tareas a desarrollar
durante el proyecto de a cuerdo a los requerimientos y los casos de uso del
sistema expuestos anteriormente.

Instalación y Configuración de Servidor de Aplicaciones

Implementación de servidor de Correo

Implementación de Pasarela SMS

Integración entre servicios de SMS con servidor HTTP

Desarrollo lógica del Sistema

Validación de usuarios

Desarrollo socket Midlet

Funcionalidad General

Creación de Usuarios

Gestión de Listas de Distribución

Validación de Usuarios
5.2.1 Estimación de Esfuerzo
5.2.1.1
Implementación del entorno de Ejecución
Tabla 2. Estimación de Esfuerzo Entorno de Ejecución
Instalación y Configuración de Servidor de Aplicaciones
1
Implementación de servidor de Correo
2
Diseño e implementación de la Base de Datos
1
Implementación de Pasarela SMS
2
5.2.1.2
Desarrollo de Funcionalidad General
Tabla 3. Estimación de Esfuerzo Funcionalidad General
5.2.1.3
Integración entre servicios de SMS con servidor HTTP
3
Desarrollo lógica del Sistema
3
Validación de usuarios
2
Desarrollo socket Midlet
2
Funcionalidad General
3
Gestión de Usuarios y listas de Distribución
Tabla 4. Estimación de Esfuerzo Gestión de Usuarios y listas de Distribución
Creación de Usuarios
1
Gestión de Listas de Distribución
2
Validación de Usuarios
1
5.2.2 Planificación
Partiendo de los requerimientos anteriores se realiza una planificación en cuatro
iteraciones basándose en el tiempo y procurando agrupar la funcionalidad
relacionada en la misma iteración.
Tabla 5. Planificación de entregas e iteraciones
Segunda
Primera
Tercera
Segunda
Semana de
Semana de
Semana de
Semana de
Octubre
Noviembre
Noviembre
Diciembre
0.1
0.2
0.3
0.1
0.2
0.3
Instalación y
Configuración
de Servidor de
0.1
Aplicaciones
Diseño e
implementación
de la Base de
0.1
Datos
Implementación
de servidor de
0.1
0.2
0.1
0.2
Correo
Implementación
de Pasarela
SMS
Integración
entre servicios
de SMS con
servidor HTTP
Desarrollo
lógica del
Sistema
Validación de
usuarios
0.1
0.2
0.1
0.2
0.2
0.3
Móviles
Desarrollo
socket Midlet
Funcionalidad
0.1
General
Creación de
0.1
Usuarios
Gestión de
Listas de
0.1
0.2
Distribución
Validación de
0.1
Usuarios WEB
5.3 Iteraciones
5.3.1 Primera Iteración: Entorno de Ejecución
En esta iteración, se implementan las herramientas y el entorno de ejecución que
permitirá el desarrollo del proyecto. Algunas de las dificultades se vieron en el
momento de configurar algunas herramientas que no eran conocidas y tenían
necesariamente que pasar por un proceso de aprendizaje.
Tabla 6.
Primera Iteración
Instalación y Configuración de Servidor de Aplicaciones
1
Implementación de servidor de Correo
2
Diseño e implementación de la Base de Datos
1
Implementación de Pasarela SMS
2
ESTIMACION INICIAL
6
ESTIMACION REAL
6
El tiempo de entrega fue óptimo, no se encontraron problemas en la implantación
del entorno de ejecución.

Instalación y configuración de Servidor de Aplicaciones:
Es necesario para el comienzo del proyecto, configurar adecuadamente el
servidor de aplicaciones, en el cual va residir la lógica del sistema y la
publicación del aplicativo.
Tomcat es una poderosa herramienta desarrollada por Apache Foundation
para que sea compatible completamente con las plataformas J2EE, En este
caso el servlet que será el encargado de mediar entre los servicios de sms
gateway con http. Puede verse la configuración de XML para la publicación del
servlet a continuación. La ruta de la publicación del servlet es
\\apache software foundation\Tomcat 5.5\webapps\correo\WEB
INF\classes\correosevlet2.

Implementación del Servidor de Correo:
MDaemon es un servidor de e-mail estándar SMTP/POP/IMAP que ofrece un
amplio rango de funcionalidad. Entre sus funciones principales protege contra
el spam, ofrece acceso web al e-mail, permite la administración remota y
cuando es combinado con el MDaemon AntiVirus, asegura el sistema contra
virus de terminales. MDaemon está probado como un servidor seguro, fiable y
versátil. Lo primero que se tiene que hacer es bajar la última versión de
MDaemon de http://www.alt-n.com/. El programa es shareware.
Figura 7. Consola de MDemon
o Instalación y Configuración de MDaemon
En la instalación MDaemon pregunta las direcciones de los servidores DNS.
Hay que utilizar las del ISP si se tiene uno configurado o sino se puede colocar
el nombre del pc en que va a estar instalado. De todos modos se configurara
para que siempre intente usar los servidores DNS que en cada momento estén
activos en el sistema; así MDaemon funcionará tanto en Internet como en
redes locales, incluso si se cambia de ISP. También preguntará, en caso de
que tengamos Windows NT o 2000, si queremos ejecutar MDaemon como
servicio. Es recomendable decirle que sí, ya que los servicios siempre son más
estables que las aplicaciones de segundo plano, salvo que vayamos a ejecutar
MDaemon sólo ocasionalmente.
Una vez instalado, hay que tener en cuenta que por defecto escucha por los
puertos 25 (SMTP), 110 (POP) y 143 (IMAP). Esto es importante por si la
plataforma cuenta con firewall. Si se va a usar MDaemon sólo para enviar
correo, se puede deshabilitar los servidores POP e IMAP. Para que funcione
se tiene que ir a Setup > Primary Domain e introducir los siguientes datos:
Primary Domain: "localhost" o "127.0.0.1" o el nombre de la máquina en
nuestra red local.
Figura 8. Configuración Dominio MDaemon
HELO Domain es el nombre de dominio que usa para reconocer a las
conexiones entrantes.
Domain IP: "127.0.0.1" o bien la dirección IP de la
máquina en la red LAN. Para eso se a elegido la opción "Attempt To Send All
Mail Direct Without Using An Intermediate Host".
También se usa la opción de utilizar los servidores DNS establecidos en la
configuración de Windows XP para eso se marca la primera opción, "Try to
use DNS servers defined in windows TCP/IP settings". Por último, a Setup >
Security settings > Relay y se desactivan todas las opciones. Después queda
configurar el cliente de correo electrónico que se utiliza
correo saliente SMTP "localhost", "127.0.0.1" .
Figura 9. Configuración DNS MDaemon
como servidor de

Diseño e implementación de la Base de Datos
Diagrama 4. Diagrama de Base de Datos

Implementación pasarela SMS:
NowSMS, es una pasarela que hace de intermediaria entre los servicios de
SMS y http, para lo cual se tiene que instalar en el servidor, y configurar con un
modem el cual será el receptor de los mensajes de texto entrantes al sistema,
la pasarela los recibe y llama a la lógica del sistema para que los despache.
Este queda como un servicio, el cual e configura en la pestaña de 2-way, que
la encargada de hacer la comunicación entre el dispositivo y la lógica del
sistema.
Figura 10. Configuración Pasarela SMS
5.3.1.1
Test de Aceptación Primera Iteración: Entorno de Ejecución.
Tabla 7. Tareas desarrollada Primera Iteración
Instalación y Configuración de Servidor de Aplicaciones
1
Implementación de servidor de Correo
2
Implementación de Pasarela SMS
2
ESTIMACION INICIAL
5
ESTIMACION REAL
5

Checklist Test de Aceptación Primera Iteración:
Tabla 8. Aspectos evaluados Primera Iteración
SI
Apache Tomcat Instalado
y Configurado
Creación de ficheros de
trabajo y configuración
de XML en Apache
Tomcat
MDaemon Instalado y
Configurado
MDaemon no genera
ninguna alerta al iniciarse
Es posible el envió local
de Correo electrónico por
medio de MDaemon
Existe la cuenta
[email protected]
Existen cuentas de
administración en
MDaemon
Creación de reglas de
cuentas de usuarios de
MDaemon
Configuración de Relay
en MDaemon
Instalacion de Pasarela
SMS
Comunicación exitosa
entre Modem Celular y
Pasarela
X
X
X
X
X
X
X
X
X
X
X
NO
5.3.2 Segunda Iteración: Lógica del Sistema
En esta iteración, es donde se establece la funcionalidad del sistema, también la
validación de listas de distribución de usuarios, cotejando y comparando con la
base de datos.
Se encontraron algunos tipos de dificultad, al tener que adaptarnos ala curva de
aprendizaje del lenguaje de programación utilizado (JAVA).
Asimismo se desarrolla un segundo escenario para la implementación del servicio
sms2mail, por medio del que es llamado Socket-Midlet, ya que es un componente
que reside en el dispositivo móvil receptor de SMS y que también hará la tarea de
Pasarela SMS, por medio de una aplicación escrita en J2ME con su perfil MIDP
2.0.
Tabla 9. Segunda Iteración

Integración entre servicios de SMS con servidor HTTP
3
Desarrollo lógica del Sistema
2
Validación de usuarios
2
Desarrollo socket Midlet
2
Funcionalidad General
3
ESTIMACION INICIAL
12
ESTIMACION REAL
15
Integración entre servicios de SMS con servidor http:
Se configura el entorno de funcionamiento, ya descrito en la primera iteración.
A base de pruebas realizadas es posible hacer llamado del servlet que se
encarga de la lógica, este tiene varios parámetros de entrada que son propios
de la pasarela SMS antes configurada. Estos parámetros de entrada son
explicados en la siguiente tabla:
Tabla 10. Parámetros de Salida de Pasarela SMS
El numero de teléfono de donde
@@SENDER@@
proviene el SMS origen.
@@SMSPREFIX@@
La primera palabra del SMS.
El contenido del SMS sin el
@@SMS@@
SMSPREFIX.
@@FULLSMS@@
Todo el contenido del SMS.
El numero celular del teléfono receptor
@@RECIP@@
del mensaje.
Con estos parámetros se construye una URL que invocara posteriormente
al servlet por medio de un parámetro GET. Este parámetro GET en este
caso quedaría así:
http://192.168.0.16:8080/correo/servlet/correoServlet2?celular=@@SENDE
R@@&mensaje=@@FULLSMS@@

Desarrollo lógica del sistema:
En este paso se
desarrolla el
componente que implementa la lógica y
soportara la funcionalidad del sistema. Integrando los cuatro componentes o
capas de sms2mail, como se muestra en el Diagrama 4.
Por un parámetro GET invoca al Java Servlet teniendo como parámetros el
número del remitente y el texto completo del mensaje.
El servlet captura estos parámetros, abre una conexión con el servidor de base
de datos contra el cual valida la existencia del número celular del remitente
entre los usuarios inscritos en el aplicativo
adelante.
Web que se describirá mas
Diagrama 5. Esquema lógico de sms2mail
Al comprobar su existencia, el parámetro recibido como el mensaje completo,
mediante manejo de cadenas, determina si es un mensaje dirigido a un solo
destinatario o a un grupo. En el primer caso, el servlet separa la dirección de
correo del destino del cuerpo del mensaje, y genera el envío del e-mail el cual
se hace a través del servidor de correo. Si la dirección es correcta el remitente
recibe un SMS de confirmación con el texto “Email enviado por SMS2MAIL”, o
por el contrario un mensaje de error.

Validación de Usuarios:
El sistema sms2mail puede funcionar tanto si el usuario esta inscrito en el
sistema o no. La única diferencia entre si esta o no esta inscrito es que el
primero puede mandar a listas de distribución, en cambio el otro tipo de usuario
solo puede mandar una cuenta de correo su mensaje, por eso es necesario
validar en la base de datos si esta en el sistema para luego ver si tiene una
lista de distribución valida. El servlet, también mediante el manejo de cadenas,
separa el nombre del grupo del resto del mensaje, y compara este nombre de
grupo con los que el usuario inscribió previamente en el servicio Web, si existe,
el servlet ejecuta una consulta SQL en la base de datos, y toma los contactos
pertenecientes a ese grupo y genera el envío del e-mail a cada uno de ellos.

Desarrollo de Socket-Midlet:
Una de las mayores ventajas que se encontró en el transcurso del proyecto,
fue el hecho de aprovechar la capacidad de los dispositivos móviles actuales
que soportan una buena capacidad de procesamiento. Socket-Midlet, es una
combinación entre las funciones propias de un socket y el entorno de
funcionamiento de un Midlet que se encuentra embebida dentro del mismo
dispositivo receptor, programado enteramente con j2me.
Diagrama 6. Diagrama de clases de Socket Midlet
Figura 11. Socket Midlet en espera
Simplemente el midlet abre un puerto por el cual espera que llegue un SMS
enviado por un usuario, cuando llega este SMS, lo recibe e invoca el servlet
haciendo la vez de SMS gateway. Este método de recepción implementa un
objeto runnable, el cual tiene que ser un hilo que instancia el sms recibido con
el parámetro GET o POST por el cual será invocado el servlet. En este caso se
muestra el envió por medio de la utilidad de envió de SMS de Sun Java Toolkit.
Figura 12. Socket Midlet Invocando al servlet
La desventaja de este método es que puede estar sujeto a las capacidades de
recepción del móvil celular, por lo tanto podría haber un bloqueo de memoria o
de procesamiento de SMS´s entrantes y tener una perdida significativa de
información. Todo esto sujeto a que en un entorno real de aplicación (operador
celular), haya un volumen de datos mucho más grande que en u entorno
simulado.

Funcionalidad General
Se toma como fuente inicial un mensaje de texto (SMS), enviado desde un
dispositivo móvil celular de un operador cualquiera hacia un número
previamente definido perteneciente a un módem GSM (ya sea simulado o real),
a través de la plataforma ya existente, es recibido por el SMSC (Short Message
Service Center) del operador y este se encarga de enrutarlo hacia el dispositivo
GSM, el cual se encuentra conectado directamente a un servidor de
aplicaciones.
Figura 13. Envío a un solo destino
El mensaje que llega al dispositivo debe tener un formato especial, con la
dirección de correo electrónico a la cual se desea enviar el mensaje de ser
para un solo destinatario (ver Figura 14), o en su defecto si desea ser enviado
a un grupo de direcciones, el nombre del grupo que fue inscrito previamente
por el usuario en el servicio Web de sms2mail (ver Figura 15), el cual será
detallado a fondo mas adelante(Diagrama 8); y a continuación el texto que
desea conforme el cuerpo del e-mail.
Figura 14. Envío a grupo
El no utilizar este formato provocará que el correo no pueda ser enviado
satisfactoriamente y el usuario reciba un mensaje de error.
Diagrama 7. Funcionamiento con SMS Gateway
Diagrama 8. Esquema Funcionamiento utilizando un Socket-Midlet
5.3.2.1
Test de Aceptación Segunda Iteración: Lógica del Sistema
Tabla 11. Tareas desarrolladas Segunda Iteración
Integración entre servicios de SMS con servidor HTTP
3
Desarrollo lógica del Sistema
2
Validación de usuarios
2
Desarrollo socked Midlet
2
Funcionalidad General
3
ESTIMACION INICIAL
12
ESTIMACION REAL
15

Checklist Test de Aceptación Segunda Iteración
Tabla 12. Aspectos evaluados Segunda Iteración
SI
NO
Existe conexión de doble
vía con Apache tomcat y
X
el Modem GSM
Es posible el envió de
mail a través de
X
parámetros GET
Existen datos de prueba
X
en la base de datos
El sistema valida listas
X
de distribución
Es posible el envió de
correo electrónico desde
X
un celular cualquiera
Ejecución de SocketMidlet en entorno
X
Simulado
Es posible el envió de
Correo electrónico a
X
través de Socket-Midlet
5.3.3 Tercera Iteración: Aplicativo Web
En esta iteración se construye el aplicativo Web, que dará a los usuarios un uso
más transparente del sistema, los requerimientos de este aplicativo se pueden ver
más detalladamente en el diagrama de casos de uso expuesto en la fase de
exploración (Diagrama 3).
En este diagrama se aprecia claramente la interacción del usuario con el sistema,
empezando por su inscripción en el servicio Web, donde tiene la posibilidad de
crear listas de contactos, modificarlas y borrarlas. Por otro lado se ve el caso del
envío del correo, que inicia con la validación tanto del usuario como de su lista de
contactos o dirección de correo al que desea enviar el mensaje y termina con el
envío del correo y la respectiva confirmación al usuario en el caso en que el
proceso se cumpla satisfactoriamente.
Tabla 13. Tercera Iteración
Creación de Usuarios
1
Gestión de Listas de Distribución
2
Validación de Usuarios
1
ESTIMACION INICIAL
4
ESTIMACION REAL
4
El aplicativo Web se desarrolla completamente en PHP, por su versatilidad y
adaptación, y aprovechando que se tenía alguna base de conocimiento sobre este
mismo.
Mediante el modelo de transacción web podemos ver más a fondo el
funcionamiento del servicio web de inscripción SMS2MAIL (Diagrama 8) que se
explicara en el siguiente punto.

Creación de Usuarios
La aplicacion Web se desarrolla para ofrecer mayor facilidad y más opciones al
usuario durante el proceso de envió de correo electrónico desde su celular.
Mediante este servicio Web podrá registrar usuarios nuevos, crear listas de
distribución y modificarlas a su antojo.
Como vemos en el diagrama de despliegue de componente (Diagrama 9), el
servicio Web esta distribuido en 3 capas, las cuales están separadas tanto lógica
como físicamente. En primer lugar encontramos un servidor Web, encargado de
dar publicación al aplicativo Web, este se encuentra ubicado en un hosting para
efectos de rapidez y seguridad en la presentación de la Web.
Figura 15. Entrada al Aplicativo Web sms2mail
La aplicación ofrece seguridad al usuario mediante una validación contra la base
de datos de Mysql de su número celular y su contraseña, que permite comprobar
su existencia y darle acceso a sus listas ya inscritas, con la posibilidad de
editarlas.
En el siguiente diagrama se ve completamente el funcionamiento del aplicativo
web, mostrando como está conformado, sus métodos y validaciones.
Diagrama 9. Diagrama de transacción Web
La interacción entre los diferentes componentes que intervienen en el
funcionamiento de la aplicación web se puede obsevar en el siguiente diagrama.
Diagrama 10. Diagrama de despliegue de componentes

Gestión de Listas de Distribución:
En este paso se desarrollan las interfaces para que el usuario pueda gestionar sus
listas de distribución. Aquí el usuario observa sus listas actualmente inscritas con
las opción de modificarlas, o crear una nueva.
Figura 16. Gestión de Listas de Distribución
5.3.3.1
Test de aceptación Tercera Iteración: Aplicativo Web
Tabla 14. Tareas desarrolladas Tercera Iteración
Creación de Usuarios
1
Gestión de Listas de Distribución
2
Validación de Usuarios
1
ESTIMACION INICIAL
4
ESTIMACION REAL
4

Checklist Test de aceptacion Tercera Iteración
Tabla 15. Aspectos evaluados Tercera Iteración
SI
NO
Es posible inscripción de
usuarios al servicio por
X
medio del la pagina WEB
Es posible la creación y
edición de listas de
distribución y contactos
X
por medio de la pagina
WEB
Es optima la navegación
X
por el sitio WEB
Existe algún tipo de
autenticación para los
X
usuarios
Es amigable el entorno
X
de la pagina WEB
5.4 Producción
En esta fase, se ha puesto a disposición el servicio al público en general, con el fin
de saber la aceptación del mismo. En el aplicativo Web se darán las instrucciones
del manejo de sms2mail y luego la opción de votar si el servicio le ha parecido
bueno o malo en su funcionamiento o si satisfizo las expectativas.
Es posible que para el futuro, se creen nuevos servicios basados en esta
implementación, también se tiene que esperar la retroalimentación de los usuarios
para ver las necesidades hacia nuevos horizontes.
6. CONCLUSIONES
En el transcurso del proyecto se encontraron varios aspectos importantes a
mencionar, y que resultan de la experiencia del equipo de desarrollo en su trabajo.

El proyecto sms2mail, proporciona una visión sobre las futuras aplicaciones
que podrían estar desarrolladas por medio de este entorno. Los SMS son
un método de comunicación muy popular y de bajo costo, por lo cual es un
ámbito a explotar.

El sistema provee transparencia al usuario que es indiferente a la lógica del
mismo. Haciendo fácil la utilización del servicio.

Esta claro que el futuro de la informática en general esta en las
comunicaciones móviles, por lo cual se enfatiza en la utilización de esta
tecnología en el proyecto. La convergencia de tecnologías es una mega
tendencia y sms2mail no es ajena a ella.

Java proporciona una clara ventaja ante otras tecnologías de desarrollo, por
su robustez y gran aplicabilidad en diferentes entornos de producción.
Sms2mail es un sistema distribuido en capas con integración de diferentes
componentes tales como son, mensajería corta, servicios de correo
electrónico y aplicaciones Web, por lo cual lo hace mas que un desarrollo
de software típico.

La aplicación de la metodología de la programación extrema demostró su
efectividad y favorabilidad al utilizarla en proyectos a corto plazo,
demostrando por qué actualmente es una de las más utilizadas en este
campo.
7. RECOMENDACIONES

Para una implantación futura debe considerarse la opción de utilizar la
plataforma Linux como una solución para reducir costos y dar mas
estabilidad al entorno de ejecución.

Sms2mail al ser un servicio que tiene impacto sobre el usuario común de
telefonía móvil, se recomienda que pase por una fase de pruebas
exhaustivas antes de ser implantado en el mercado y a ser tarifado.
GLOSARIO
API
Application Programming Interface. Especificación de una librería o utilidad que
documenta su interfaz y permite su uso sin conocimiento de su interior.
ASF
Apache Software Foundation, http://www.apache.org. Fundación que proporciona
soporte a proyectos open source, formando una comunidad de desarrolladores y
usuarios con una gran reputación por la calidad y el éxito de muchos de sus
proyectos. Dentro de la comunidad Java participa activamente, formando parte de
los comités estandarizadores.
CSS
Cascading Style Sheets. Tecnología que permite crear páginas web con un diseño
más exacto, añadiendo mayores posibilidades a HTML y permitiendo una mayor
separación entre la información y la presentación.
Framework
Conjunto de APIs y herramientas destinadas a la construcción de un determinado
tipo de aplicaciones de manera general.
HTML
Hypertext Markup Language. Lenguage de tags estandarizado para la creación de
documentos para la web.
HTTP
Hypertext
Transfer
Protocol.
Protocolo
de
nivel
extensivamente en Internet para el acceso a documentos.
de
aplicación
usado
ISO
Federación de alcance mundial integrada por cuerpos de estandarización
nacionales de gran número de países, que promueve el desarrollo de la
estandarización.
J2EE
Java 2, Enterprise Edition. Versión avanzada de la plataforma Java de Sun
Microsystems, destinada al desarrollo de aplicaciones empresariales.
J2SE
Java 2, Standard Edition. Versión básica del conjunto de herramientas y APIs de
Sun Microsystems destinadas a la creación de aplicaciones en plataforma Java.
Java
Plataforma para el desarrollo de software creada por Sun Microsystems,
ampliamente extendida hoy en día, que otorga independencia de plataforma al
software creado en ella y lo provee de una gran cantidad de APIs estandarizados.
JavaDoc
Documentación HTML embebida en el código Java de una aplicación, que
mediante la herramienta del mismo nombre puede ser convertida en un árbol de
páginas HTML que muestre la documentación del API de la aplicación de manera
detallada.
JDBC
Java DataBase Connectivity. API de la plataforma Java para el acceso a sistemas
gestores de base de datos.
Open Source
Calificación de software que cumple una serie de requisitos, principalmente aquel
que permite una libre redistribución, distribuye el código fuente, y permite
modificaciones y trabajos derivados.
Shareware
Es otra modalidad de comercialización de software todavía más extendida, el
programa se distribuye con limitaciones, bien como versión de demostración o
evaluación, con funciones o características limitadas o con un uso restringido a un
límite de tiempo establecido (por ejemplo 30 días). Así, se le da al usuario la
oportunidad de probar el producto antes de comprarlo y, más tarde, adquirir la
versión completa del programa.
GPL (General Public License o licencia pública general)
Es una licencia creada por la Free Software Foundation y orientada principalmente
a los términos de distribución, modificación y uso de software. Su propósito es
declarar que el software cubierto por esta licencia es software libre.
OSI
Open Source Initiative, http://www.opensource.org. Organización sin ánimo de
lucro
dedicada
a
la
gestión
y
promoción
del
software
open
source,
específicamente a través del programa de certificación de software open source.
SSL
Secure Socket Layer. Protocolo que proporciona servicios de seguridad cifrando
los datos intercambiados entre el servidor y el cliente.
UML
Unified Modeling Language. Lenguaje de modelado visual que se usa para
especificar, visualizar, construir y documentar artefactos de un sistema de
software.
XML
eXtensible Markup Language. Formato estándar para el intercambio de datos
basado en archivos de texto plano con una estructura de tags.
XP
eXtreme Programming. Metodología de desarrollo de software basada en valores
como simplicidad, comunicación, retroalimentación y coraje.
Aplicación
Sistema independiente que tiene como objetivo realizar tareas específicas para la
colaboración con el cumplimiento de un objetivo común. Las aplicaciones son
locales cuando estas se encuentran ejecutándose en el computador que las
accede, o remotas en caso contrario.
Dispositivos
Son el hardware que compone la red, y que permite que esta preste el servicio
indicado a los usuarios finales. Cuando se utiliza este término en este documento
se hace referencia a todo el hardware inteligente y con soporte SNMP que hace
parte de la red administrada.
Navegación / Navegabilidad
Es el proceso compuesto por una o varias pantallas diferentes, presentadas al
usuario final, que llevan a una finalidad específica dentro del sistema de
administración de red.
Transparencia
Este término es utilizado dentro de este manual cuando se hace referencia al no
conocimiento del usuario final, de cómo el sistema se encuentra trabajando en los
servidores que lo componen, ya que cuando este accede desde un equipo con
conexión a la red, siempre lo observará y utilizará de la misma forma como lo ha
hecho anteriormente.
Web
Cuando se hace referencia a este término, se busca enfatizar en una de las
opciones de acceso remoto que tiene el sistema sms2mail, que en este caso
especial es el acceso desde una máquina con soporte de browser.
BIBLIOGRAFIA

http://wapcolombia.unicauca.edu.co

Andrés Seco Hernández, Alamin GSM SMS Gateway, Proyecto Alamin,
disponible en http://www.alamin.org

Gwenael Le Bodic,
Mobile Messaging Technologies and Services:
SMS, EMS and MMS

Pavel
Janik
and
others,
Gnokii,
Gnokii
project,
disponible
en
http://www.gnokii.org

Philippe Andersson, SMS Link, CreoScitex Europe, S.A., disponible en
http://smslink.sourceforge.net

Mauricio
Julio
Fernández
Pradier
y
otros,
ESMS,
disponible
en
http://esms.sourceforge.net

Stefan Frings, SMSTools

Christophe
Calmejane,
SMSSend,
disponible
en
http://zekiller.skytech.org/smssend_menu_en.html

Angelo Masci, SMSClient, disponible en http://www.styx.demon.co.uk

ETSI, European Telecommunications Standards Institute, disponible en
http://www.etsi.org .

ISBN 84-205-3151-0 Castro Elizabeth. “XML”. Prentice Hall. Madrid,
España. 2001

ISBN 84-8322-002-4 Hansen Gary W., Hansen James V. “Diseño y
Administración de Bases de Datos”. Prentice Hall. Madrid, España. 1997

ISBN 84-7829-036-2 Jacobson Ivar, Booch Grady, Rumbaugh James. “El
Proceso Unificado de Desarrollo de Software”. Addison Wesley. Madrid,
España. 2000

ISBN 84-7829-028-1 Jacobson Ivar, Booch Grady, Rumbaugh James. ”El
Lenguaje Unificado de Modelado”. Addison Wesley. Madrid, España. 1999
ANEXOS
A. Script Base de Datos
CREATE TABLE `contacto` (
`id_contacto` int(6) NOT NULL auto_increment,
`correo_contacto` varchar(100) NOT NULL default '',
`id_lista` int(11) NOT NULL default '0',
PRIMARY KEY (`id_contacto`)
) TYPE=MyISAM AUTO_INCREMENT=8 ;
#
# Dumping data for table `contacto`
#
INSERT INTO `contacto` VALUES (1, '[email protected]', 1);
INSERT INTO `contacto` VALUES (2, '[email protected]', 1);
INSERT INTO `contacto` VALUES (7, '[email protected]', 1);
INSERT INTO `contacto` VALUES (6, '[email protected]', 1);
INSERT INTO `contacto` VALUES (5, '[email protected]', 3);
#
# Table structure for table `historial`
#
CREATE TABLE `historial` (
`Id_sms` varchar(100) NOT NULL default '',
`Celular_usuario` varchar(100) NOT NULL default '',
`Destino` varchar(100) NOT NULL default '',
`fecha` varchar(100) NOT NULL default '',
PRIMARY KEY (`Id_sms`)
) TYPE=MyISAM;
#
# Dumping data for table `historial`
#
# Table structure for table `lista`
#
CREATE TABLE `lista` (
`id_lista` int(11) NOT NULL auto_increment,
`nombre_lista` varchar(20) NOT NULL default '',
`celular_usuario` varchar(10) NOT NULL default '0',
PRIMARY KEY (`id_lista`)
) TYPE=MyISAM AUTO_INCREMENT=9 ;
#
# Dumping data for table `lista`
#
INSERT INTO `lista` VALUES (1, 'Amigos', '3157862425');
INSERT INTO `lista` VALUES (2, 'familia', '3157862425');
INSERT INTO `lista` VALUES (8, 'profesores', '3157862425');
INSERT INTO `lista` VALUES (6, 'trabajo', '3157862425');
INSERT INTO `lista` VALUES (7, 'banco', '3157862425');
# Table structure for table `lista_contacto`
#
CREATE TABLE `lista_contacto` (
`Id_lista` varchar(100) NOT NULL default '',
`Id_contacto` varchar(100) NOT NULL default ''
) TYPE=MyISAM;
#
# Dumping data for table `lista_contacto`
#
# --------------------------------------------------------
#
# Table structure for table `operador`
#
CREATE TABLE `operador` (
`Cod_operador` varchar(100) NOT NULL default '',
`Nombre_operador` varchar(100) NOT NULL default '',
PRIMARY KEY (`Cod_operador`)
) TYPE=MyISAM;
#
# Dumping data for table `operador`
#
# --------------------------------------------------------
#
# Table structure for table `usuario`
#
CREATE TABLE `usuario` (
`nombre` varchar(20) NOT NULL default '',
`celular_usuario` varchar(11) NOT NULL default '',
`password` varchar(10) NOT NULL default '',
PRIMARY KEY (`celular_usuario`)
) TYPE=MyISAM;
#
# Dumping data for table `usuario`
#
INSERT INTO `usuario` VALUES ('Samuel Sanchez', '3157862425', '12345');
INSERT INTO `usuario` VALUES ('Leonardo Valderrama', '3103490078', '123');
INSERT INTO `usuario` VALUES ('Carlos Sanchez', '3101111111', '123');
INSERT INTO `usuario` VALUES ('prueba', '2222222', '123');
INSERT INTO `usuario` VALUES ('prueba2', '3333333333', '123');
B. Servlet
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import sun.net.smtp.SmtpClient;
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.sql.*;
import java.lang.*;
public class correoServlet2 extends HttpServlet{
private String de = "[email protected]";
private String celular = null;
private String para= null;
private String mensaje = null;
private String msn = null;
private boolean sam=false;
private String p=null;
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException{
doPost(req, res);
}
public void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException{
celular = req.getParameter("celular");
mensaje = req.getParameter("mensaje");
para =mensaje.substring(0, mensaje.indexOf(" ", 0));
msn= mensaje.substring(mensaje.indexOf(" ", 0)+1);
int a=para.indexOf("@");
System.out.println(a);
if(a>=0){
enviarmail(res, para, msn);
}
else{
conectar(res, celular);
System.out.println(sam);
}
}
public void conectar(HttpServletResponse res, String celular) throws
IOException{
String url = "jdbc:mysql://192.168.0.1/sms2mail";
String query = "SELECT nombre FROM usuario WHERE
celular_usuario="+celular;
String query2= "SELECT id_lista FROM lista WHERE
nombre_lista='"+para+"' AND celular_usuario="+celular;
try{
Class.forName ("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection( url,
"sms2mail", "" );
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery (query);
if(rs.next()){
sam=true;
if (sam!=false){
ResultSet rs2=stmt.executeQuery(query2);
lista(res, rs2);
if(p!=null){
System.out.println(p);
String query3= "SELECT contacto.correo_contacto
FROM usuario inner join lista on usuario.celular_usuario = lista.celular_usuario
inner join contacto on lista.id_lista= contacto.id_lista WHERE lista.id_lista="+p;
ResultSet rs3=stmt.executeQuery(query3);
contactos(res, rs3);
}
enviarmail(res, para, msn);
}
}
else{
sam=false;
}
rs.close();
stmt.close();
con.close();
}catch (SQLException ex) {
PrintWriter out = res.getWriter();
res.setContentType("text/html");
while (ex != null) {
out.println ("SQL Exception: " + ex.getMessage ());
ex = ex.getNextException ();
} // end while
} // end catch SQLException
catch (java.lang.Exception ex) {
PrintWriter out = res.getWriter();
res.setContentType("text/html");
out.println ("Exception: " + ex.getMessage ());
}
}
public void enviarmail(HttpServletResponse res, String para, String msn)throws
IOException{
try {
//Pasa un String que contiene el nombre del servidor smtp
// como parametro del constructor
SmtpClient smtp = new SmtpClient("192.168.0.1");
//Pasa la direccion del remitente
smtp.from(de);
//Pasa la direccion del destinatario
smtp.to(para);
//Hace un output stream para el mensaje
PrintStream msg = smtp.startMessage();
//Escribe el encabezado del mail en el output stream.
msg.println("To: "+para);
msg.println("Subject: Mail enviado a traves de SMS2MAIL");
msg.println();
//Escribe el cuerpo del mensaje en el output stream
msg.println("Este mail ha sido enviado por: "+celular+" "+msn);
msg.println(new java.util.Date());//pone la fecha y hora del envio
//Cierra el stream y envia el mensaje
smtp.closeServer();
//Notifica a la pasarela el envio del mail
res.setContentType("text/plain");
PrintWriter out = res.getWriter();
out.println("Email enviado por SMS2MAIL");
}catch( Exception e ) {
e.printStackTrace();
}
}
public void lista ( HttpServletResponse res, ResultSet rs2 )
throws SQLException {
try {
int numCols = rs2.getMetaData().getColumnCount ();
while ( rs2.next() ) {
for (int i=1; i<=numCols; i++) {
p=rs2.getString(i);
}
} // end while
}// end try
catch ( Exception except) {
} // end catch
} // end
public void contactos ( HttpServletResponse res, ResultSet rs3 )
throws SQLException {
para="";
try {
int numCols = rs3.getMetaData().getColumnCount ();
while ( rs3.next() ) {
for (int i=1; i<=numCols; i++) {
p=rs3.getString(i);
para=para.concat(p+",");
}
} // end while
}// end try
catch ( Exception except) {
System.out.println(except.getMessage());
} // end catch
} // end contactos
}
C. MIDlet
import javax.microedition.midlet.*;
import javax.microedition.io.*;
import javax.microedition.lcdui.*;
import javax.wireless.messaging.*;
import java.io.*;
import java.io.IOException;
public class SMS extends MIDlet
implements CommandListener, Runnable, MessageListener {
Command exitCommand = new Command("Exit", Command.EXIT, 2);
/** Permiten mostrar una pantalla de texto durante un tiempo o hasta que se
* produzca un comando de tipo OK. Se utiliza para mostrar errores u otro tipo
* de mensajes al usuario.*/
Alert contenido;
Display display;
/**Hilo para la conexion asincrona. */
Thread hilo;
/** Conexiones detectadas al inicio. */
String[] conexiones;
/** Flag para señalar el final del proceso. */
boolean fin;
/** SMS message connection para mensajes de texto entrantes. */
MessageConnection smsconn;
/** Mensaje actual de la red. */
Message msg;
/** Direccion del remitente */
String remite;
String msn;
Displayable screen;
public SMS() {
display = Display.getDisplay(this);
contenido = new Alert("SMS");
contenido.setTimeout(Alert.FOREVER);
contenido.addCommand(exitCommand);
contenido.setCommandListener(this);
contenido.setString("Recibiendo...");
screen = contenido;
}
public void startApp() {
/** Conexion SMS a ser leida. */
String smsConnection = "sms://:" + "50000";
/** Abre la conexion del mensaje. */
if (smsconn == null) {
try {
smsconn = (MessageConnection) Connector.open(smsConnection);
smsconn.setMessageListener(this);
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
conexiones = PushRegistry.listConnections(true);
if (conexiones == null || conexiones.length == 0) {
contenido.setString("Esperando SMS en el puerto 50000...");
}
fin = false;
hilo = new Thread(this);
hilo.start();
display.setCurrent(screen);
}
public void notifyIncomingMessage(MessageConnection conn) {
if (hilo == null) {
fin = false;
hilo = new Thread(this);
hilo.start();
}
}
/** Hilo de lectura del mensaje. */
public void run() {
/** Revisa la conexion SMS. */
try {
do{
msg = smsconn.receive();
if (msg != null && msg instanceof TextMessage) {
remite = msg.getAddress();
msn=((TextMessage)msg).getPayloadText();
contenido.setTitle("De: " + remite);
System.out.println(msn);
invokeServlet("http://localhost:8080/correo/servlet/correoservlet?celular="+encode
url(remite)+"&mensaje="+encodeurl(msn));
contenido.setString(((TextMessage)msg).getPayloadText());
display.setCurrent(contenido);
}
}while(fin=true);
} catch (IOException e) {
// e.printStackTrace();
}
}
public void pauseApp() {
fin = true;
hilo = null;
screen = display.getCurrent();
}
public void destroyApp(boolean unconditional) {
fin = true;
hilo = null;
if (smsconn != null) {
try {
smsconn.close();
} catch (IOException e) {
}
}
}
public void commandAction(Command c, Displayable s) {
try {
if (c == exitCommand || c == Alert.DISMISS_COMMAND) {
destroyApp(false);
notifyDestroyed();
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
void invokeServlet(String url) throws IOException {
HttpConnection c = null;
InputStream is = null;
StringBuffer b = new StringBuffer();
TextBox t = null;
try {
c = (HttpConnection)Connector.open(url);
c.setRequestMethod(HttpConnection.GET);
is = c.openDataInputStream();
int ch;
while ((ch = is.read()) != -1) {
b.append((char) ch);
System.out.print((char)ch);
}
t = new TextBox("Mensaje", b.toString(), 1024, 0);
} finally {
if(is!= null) {
is.close();
}
if(c != null) {
c.close();
}
}
}
/*Modifica los espacios en el contenido de las cadenas para ser enviadas en el
url*/
String encodeurl(String str){
String temp="";
for(int i=0;i<str.length();i++)
if(str.charAt(i)==' ')
temp+='+';
else
temp+=str.charAt(i);
return temp;
}
}
D. Configuración XML
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>prueba</display-name>
<description>prueba</description>
<servlet>
<servlet-name> correoservlet2</servlet-name>
<servlet-class>correoservlet2</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name> correoservlet2</servlet-name>
<url-pattern>/servlet/ correoservlet2</url-pattern>
</servlet-mapping>
</web-app>
E. Diagrama de Procesos
F. Diagrama de Secuencia
G. Diagrama de Flujo de Datos
H. Diagrama de Despliegue SMS
I. Fuentes Aplicación WEB

Index.php
<?php
require_once('Connections/sms2mail.php'); ?>
<?php
session_start();
$loginFormAction = $_SERVER['PHP_SELF'];
if (isset($accesscheck)) {
$GLOBALS['PrevUrl'] = $accesscheck;
session_register('PrevUrl');
}
if (isset($_POST['usuario'])) {
$loginUsername=$_POST['usuario'];
$password=$_POST['contrasena'];
$MM_fldUserAuthorization = "";
$MM_redirectLoginSuccess = "usuario.php";
$MM_redirectLoginFailed = "error.php";
$MM_redirecttoReferrer = false;
mysql_select_db($database_sms2mail, $sms2mail);
$LoginRS__query=sprintf("SELECT celular_usuario, password FROM usuario
WHERE celular_usuario='%s' AND password='%s'",
get_magic_quotes_gpc() ? $loginUsername : addslashes($loginUsername),
get_magic_quotes_gpc() ? $password : addslashes($password));
$LoginRS = mysql_query($LoginRS__query, $sms2mail) or
die(mysql_error());
$loginFoundUser = mysql_num_rows($LoginRS);
if ($loginFoundUser) {
$loginStrGroup = "";
$GLOBALS['MM_Username'] = $loginUsername;
$GLOBALS['MM_UserGroup'] = $loginStrGroup;
session_register("MM_Username");
session_register("MM_UserGroup");
if (isset($_SESSION['PrevUrl']) && false) {
$MM_redirectLoginSuccess = $_SESSION['PrevUrl'];
}
header("Location: " . $MM_redirectLoginSuccess );
}
else {
header("Location: ". $MM_redirectLoginFailed );
}
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<HEAD>
<TITLE>SMS2MAIL</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html;
charset=windows-1251">
<link rel="stylesheet" href="main.css" type="text/css">
<style type="text/css">
<!-.Estilo1 {font-size: 18px}
-->
</style>
</HEAD>
<BODY BGCOLOR=#FFFFFF LEFTMARGIN=0 TOPMARGIN=0
MARGINWIDTH=0 MARGINHEIGHT=0 background="images/bgb.gif">
<table width="780" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="336"><img src="images/index_01.jpg" width=336 height=95
alt=""></td>
<td width="444" valign="top" bgcolor="#FFFFFF">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td background="images/index_02.gif" height="30"> </td>
</tr>
<tr>
<td nowrap background="images/index_09.gif"><a
href="index.php"><img src="images/index_04.gif" width=90 height=47 alt=""
border="0"></a>
<a href="registro.php"><img src="images/index_08.gif" width=90
height=47 alt="" border="0"></a>
<a href="#"><img src="images/index_06.gif" width=90 height=47
alt="" border="0"></a>
<a href="#"><img src="images/index_05.gif" width=90 height=47
alt="" border="0"></a>
</td>
</tr>
</table>
</td>
</tr>
</table>
<table width="780" border="0" cellspacing="0" cellpadding="0">
<tr>
<td>
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflas
h.cab#version=6,0,29,0" width="778" height="153">
<param name="movie" value="banner.swf">
<param name="quality" value="high">
<embed src="banner.swf" quality="high"
pluginspage="http://www.macromedia.com/go/getflashplayer"
type="application/x-shockwave-flash" width="778"
height="153"></embed></object></td>
</tr>
</table>
<table width="780" border="0" cellspacing="0" cellpadding="0"
background="images/index_14.gif">
<tr>
<td width="161"><img src="images/index_13.gif" width=161 height=35
alt=""></td>
<td width="538"> </td>
<td width="81"><a href="#"><img src="images/index_16.gif" width=22
height=35 alt="" border="0"></a><a href="#"><img src="images/index_17.gif"
width=27 height=35 alt="" border="0"></a><a href="#"><img
src="images/index_18.gif" width=23 height=35 alt="" border="0"></a></td>
</tr>
</table>
<table width="780" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<td width="161" background="images/index_20.gif">
<table width="161" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="161">   
<form name="autenticacion" method="POST" action="<?php echo
$loginFormAction; ?>">
<p>
<span class="t11g"> usuario<br>
<input name="usuario" type="text" id="usuario" size="12">
</span><span class="t11g"><br>
 co ntraseña<br>
<input name="contrasena" type="password" id="contrasena" size="12">
</span></p>
<p><span class="t11g">
<input type="submit" name="Submit" value="Enviar">
</span>
</form>
</p>
</td>
</tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td height="20"><img src="images/index_37.gif" width=161
height=6 alt=""></td>
</tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td><div align="center"><b class="t11g"><img
src="images/mysql.gif" width="100" height="52"></b></div></td>
</tr>
</table>
<table width="93%" height="121" border="0" cellpadding="0"
cellspacing="0">
<tr>
<td height="106"><p align="center"><img src="images/php.jpg"
width="99" height="67">
</p>
</td>
</tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td align="right"><div align="center"><img
src="images/java_logo.gif" width="98"
height="80">   </div></td>
</tr>
</table>
<div align="center"><img src="images/siemens.gif" width="129"
height="20"></div></td>
<td background="images/index_28.gif">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td><p><img src="images/index_24.gif" width=335 height=47
alt=""></p>
</td>
</tr>
</table>
<table width="619" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="309">
<table width="100%" border="0" cellspacing="0"
cellpadding="5">
<tr>
<td class="v11r">• 1er paso: Inscribete! </td>
</tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="10">
<tr>
<td class="v11g"> <br>
<br>
<span class="v11r">• 2do Paso: Agrega tus Listas de
Correo </span><br>
<br>
</td>
</tr>
</table>
</td>
<td width="310">
<table width="100%" border="0" cellspacing="0"
cellpadding="5">
<tr>
<td class="v11r">• Manda Mails a donde quieras </td>
</tr>
</table>
<table width="100%" border="0" cellspacing="0"
cellpadding="10">
<tr>
<td valign="top" class="v11g"> <br>
<br>
<span class="v11r">• 4to Paso: Envia sms2mail
</span><br>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
<table width="780" border="0" cellspacing="0" cellpadding="0" height="34"
background="images/index_48.gif">
<tr>
<td> </td>
</tr>
</table>
<table width="780" border="0" cellspacing="0" cellpadding="0" height="65"
background="images/index_51.gif">
<tr>
<td width="390" align="center" class="bottom"> <b><b><a href="#"
class="bottom"><font color="#FAA6A6"><span class="v11r">Terminos de Uso
</span></font></a><span class="v11r"><font color="#FAA6A6"> | <a href="#"
class="v11r">Sobre sms2mail.com</a> | <a href="#"
class="v11r">USB</a></font></span></b></b></td>
<td width="390" align="center" class="v11r">©2005 sms2mail Universidad
de San Buenaventura</td>
</tr>
</table>
</BODY>
</HTML>
Registro.php

<?php require_once('Connections/sms2mail.php'); ?>
<?php
function GetSQLValueString($theValue, $theType, $theDefinedValue = "",
$theNotDefinedValue = "")
{
$theValue = (!get_magic_quotes_gpc()) ? addslashes($theValue) : $theValue;
switch ($theType) {
case "text":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "long":
case "int":
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
break;
case "double":
$theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
break;
case "date":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "defined":
$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
break;
}
return $theValue;
}
if (($_POST['conf_pass'])==($_POST['password']))
{
$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
$editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
$insertSQL = sprintf("INSERT INTO usuario (nombre, celular_usuario,
password) VALUES (%s, %s, %s)",
GetSQLValueString($_POST['nombre'], "text"),
GetSQLValueString($_POST['celular_usuario'], "text"),
GetSQLValueString($_POST['password'], "text"));
mysql_select_db($database_sms2mail, $sms2mail);
$Result1 = mysql_query($insertSQL, $sms2mail) or die(mysql_error());
$insertGoTo = "index.php";
if (isset($_SERVER['QUERY_STRING'])) {
$insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
$insertGoTo .= $_SERVER['QUERY_STRING'];
}
header(sprintf("Location: %s", $insertGoTo));
}
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<HEAD>
<TITLE>SMS2MAIL</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html;
charset=windows-1251">
<link rel="stylesheet" href="main.css" type="text/css">
</HEAD>
<BODY BGCOLOR=#FFFFFF LEFTMARGIN=0 TOPMARGIN=0
MARGINWIDTH=0 MARGINHEIGHT=0 background="images/bgb.gif">
<table width="780" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="336"><img src="images/index_01.jpg" width=336 height=95
alt=""></td>
<td width="444" valign="top" bgcolor="#FFFFFF">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td background="images/index_02.gif" height="30"> </td>
</tr>
<tr>
<td nowrap background="images/index_09.gif"><a
href="index.php"><img src="images/index_04.gif" width=90 height=47 alt=""
border="0"></a>
<a href="#"><img src="images/index_08.gif" width=90 height=47
alt="" border="0"></a>
<a href="#"><img src="images/index_06.gif" width=90 height=47
alt="" border="0"></a>
<a href="#"><img src="images/index_05.gif" width=90 height=47
alt="" border="0"></a>
</td>
</tr>
</table>
</td>
</tr>
</table>
<table width="780" border="0" cellspacing="0" cellpadding="0">
<tr>
<td>
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflas
h.cab#version=6,0,29,0" width="778" height="153">
<param name="movie" value="banner.swf">
<param name="quality" value="high">
<embed src="banner.swf" quality="high"
pluginspage="http://www.macromedia.com/go/getflashplayer"
type="application/x-shockwave-flash" width="778"
height="153"></embed></object></td>
</tr>
</table>
<table width="780" border="0" cellspacing="0" cellpadding="0"
background="images/index_14.gif">
<tr>
<td width="161"><img src="images/index_13.gif" width=161 height=35
alt=""></td>
<td width="538"> </td>
<td width="81"><a href="#"><img src="images/index_16.gif" width=22
height=35 alt="" border="0"></a><a href="#"><img src="images/index_17.gif"
width=27 height=35 alt="" border="0"></a><a href="#"><img
src="images/index_18.gif" width=23 height=35 alt="" border="0"></a></td>
</tr>
</table>
<table width="780" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<td width="161" background="images/index_20.gif">
<table width="161" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="161">   
<form name="autenticacion" method="POST" action="<?php echo
$loginFormAction; ?>">
<p>
<span class="t11g"> usuario<br>
<input name="usuario" type="text" id="usuario" size="12">
</span><span class="t11g"><br>
 co ntraseña<br>
<input name="contrasena" type="password" id="contrasena" size="12">
</span></p>
<p><span class="t11g">
<input type="submit" name="Submit" value="Enviar">
</span><span class="t11g">
</span>
</form>
</p>
</td>
</tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td height="20"><img src="images/index_37.gif" width=161
height=6 alt=""></td>
</tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td><div align="center"><b class="t11g"><img
src="images/mysql.gif" width="100" height="52"></b></div></td>
</tr>
</table>
<table width="93%" height="121" border="0" cellpadding="0"
cellspacing="0">
<tr>
<td height="106"><p align="center"><img src="images/php.jpg"
width="99" height="67">
</p>
</td>
</tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td align="right"><div align="center"><img
src="images/java_logo.gif" width="98"
height="80">   </div></td>
</tr>
</table>
<div align="center"><img src="images/siemens.gif" width="129"
height="20"></div></td>
<td background="images/index_28.gif">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td background="images/index_25.gif"><p class="v11r">Inscribase
como usuario primero, para acceder a nuestros servicios </p>
</tr>
</table>
</td>
<form method="post" name="form1" action="<?php echo
$editFormAction; ?>">
<table align="left">
<tr valign="baseline">
<td align="right" nowrap class="v11r">Nombre Completo:</td>
<td class="v11r">
<input type="text" name="nombre" value="" size="32">
</td>
</tr>
<tr valign="baseline">
<td align="right" nowrap class="v11r">Movil Usuario :</td>
<td class="v11r">
<input name="celular_usuario" type="text" value="" size="32"
maxlength="10">
</td>
</tr>
<tr valign="baseline">
<td align="right" nowrap class="v11r">Password:</td>
<td class="v11r">
<input type="password" name="password" value="" size="32">
</td>
</tr>
<td align="right" nowrap class="v11r">Confirme Password:</td>
<td class="v11r">
<input type="password" name="conf_pass" value="" size="32">
</td>
</tr>
<tr valign="baseline">
<td align="right" nowrap class="v11r">*Edad:</td>
<td class="v11r">
<input type="text" name="password" value="" size="32">
</td>
</tr>
<tr valign="baseline">
<td align="right" nowrap class="v11r">*Ciudad:</td>
<td class="v11r">
<input type="text" name="password" value="" size="32">
</td>
</tr>
<tr valign="baseline">
<td align="right" nowrap class="v11r">*Sexo:</td>
<td class="v11r">
<input type="text" name="password" value="" size="32">
</td>
</tr>
<tr valign="baseline">
<td align="right" nowrap class="v11r">Operador:</td>
<td class="v11r">
<input type="text" name="password" value="" size="32">
</td>
</tr>
<tr valign="baseline">
<td nowrap align="right"> </td>
<td class="v11r">
<input name="submit" type="submit" value="Insertar registro">
</td>
</tr>
</table>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p><span class="v11r">*Estos campos no son requeridos</span>
<input type="hidden" name="MM_insert" value="form1">
</p>
</form>
<p> </p>
<td width="150">
<table width="150%" height="435" border="0"
cellpadding="10" cellspacing="0">
<tr>
<td class="v11g">
<p><img
src="images/sms.jpg" width="170" height="231"></p></td>
</tr>
</table>
</tr>
</table>
</td>
</tr>
</table>
<table width="780" border="0" cellspacing="0" cellpadding="0" height="34"
background="images/index_48.gif">
<tr>
<td> </td>
</tr>
</table>
<table width="780" border="0" cellspacing="0" cellpadding="0" height="65"
background="images/index_51.gif">
<tr>
<td width="390" align="center" class="bottom"> <b><b><a href="#"
class="bottom"><font color="#FAA6A6"><span class="v11r">Terminos de Uso
</span></font></a><span class="v11r"><font color="#FAA6A6"> | <a href="#"
class="v11r">Sobre sms2mail.com</a> | <a href="#"
class="v11r">USB</a></font></span></b></b></td>
<td width="390" align="center" class="v11r">©2005 sms2mail Universidad
de San Buenaventura</td>
</tr>
</table>
</BODY>
</HTML>
usuario.php

<?php require_once('Connections/sms2mail.php'); ?>
<?php
function GetSQLValueString($theValue, $theType, $theDefinedValue = "",
$theNotDefinedValue = "")
{
$theValue = (!get_magic_quotes_gpc()) ? addslashes($theValue) : $theValue;
switch ($theType) {
case "text":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "long":
case "int":
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
break;
case "double":
$theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
break;
case "date":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "defined":
$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
break;
}
return $theValue;
}
if (($_POST['conf_pass'])==($_POST['password']))
{
$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
$editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
$insertSQL = sprintf("INSERT INTO usuario (nombre, celular_usuario,
password) VALUES (%s, %s, %s)",
GetSQLValueString($_POST['nombre'], "text"),
GetSQLValueString($_POST['celular_usuario'], "text"),
GetSQLValueString($_POST['password'], "text"));
mysql_select_db($database_sms2mail, $sms2mail);
$Result1 = mysql_query($insertSQL, $sms2mail) or die(mysql_error());
$insertGoTo = "index.php";
if (isset($_SERVER['QUERY_STRING'])) {
$insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
$insertGoTo .= $_SERVER['QUERY_STRING'];
}
header(sprintf("Location: %s", $insertGoTo));
}
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<HEAD>
<TITLE>SMS2MAIL</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html;
charset=windows-1251">
<link rel="stylesheet" href="main.css" type="text/css">
</HEAD>
<BODY BGCOLOR=#FFFFFF LEFTMARGIN=0 TOPMARGIN=0
MARGINWIDTH=0 MARGINHEIGHT=0 background="images/bgb.gif">
<table width="780" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="336"><img src="images/index_01.jpg" width=336 height=95
alt=""></td>
<td width="444" valign="top" bgcolor="#FFFFFF">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td background="images/index_02.gif" height="30"> </td>
</tr>
<tr>
<td nowrap background="images/index_09.gif"><a
href="index.php"><img src="images/index_04.gif" width=90 height=47 alt=""
border="0"></a>
<a href="#"><img src="images/index_08.gif" width=90 height=47
alt="" border="0"></a>
<a href="#"><img src="images/index_06.gif" width=90 height=47
alt="" border="0"></a>
<a href="#"><img src="images/index_05.gif" width=90 height=47
alt="" border="0"></a>
</td>
</tr>
</table>
</td>
</tr>
</table>
<table width="780" border="0" cellspacing="0" cellpadding="0">
<tr>
<td>
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflas
h.cab#version=6,0,29,0" width="778" height="153">
<param name="movie" value="banner.swf">
<param name="quality" value="high">
<embed src="banner.swf" quality="high"
pluginspage="http://www.macromedia.com/go/getflashplayer"
type="application/x-shockwave-flash" width="778"
height="153"></embed></object></td>
</tr>
</table>
<table width="780" border="0" cellspacing="0" cellpadding="0"
background="images/index_14.gif">
<tr>
<td width="161"><img src="images/index_13.gif" width=161 height=35
alt=""></td>
<td width="538"> </td>
<td width="81"><a href="#"><img src="images/index_16.gif" width=22
height=35 alt="" border="0"></a><a href="#"><img src="images/index_17.gif"
width=27 height=35 alt="" border="0"></a><a href="#"><img
src="images/index_18.gif" width=23 height=35 alt="" border="0"></a></td>
</tr>
</table>
<table width="780" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<td width="161" background="images/index_20.gif">
<table width="161" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="161">   
<form name="autenticacion" method="POST" action="<?php echo
$loginFormAction; ?>">
<p>
<span class="t11g"> usuario<br>
<input name="usuario" type="text" id="usuario" size="12">
</span><span class="t11g"><br>
 co ntraseña<br>
<input name="contrasena" type="password" id="contrasena" size="12">
</span></p>
<p><span class="t11g">
<input type="submit" name="Submit" value="Enviar">
</span><span class="t11g">
</span>
</form>
</p>
</td>
</tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td height="20"><img src="images/index_37.gif" width=161
height=6 alt=""></td>
</tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td><div align="center"><b class="t11g"><img
src="images/mysql.gif" width="100" height="52"></b></div></td>
</tr>
</table>
<table width="93%" height="121" border="0" cellpadding="0"
cellspacing="0">
<tr>
<td height="106"><p align="center"><img src="images/php.jpg"
width="99" height="67">
</p>
</td>
</tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td align="right"><div align="center"><img
src="images/java_logo.gif" width="98"
height="80">   </div></td>
</tr>
</table>
<div align="center"><img src="images/siemens.gif" width="129"
height="20"></div></td>
<td background="images/index_28.gif">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td background="images/index_25.gif"><p class="v11r">Inscribase
como usuario primero, para acceder a nuestros servicios </p>
</td>
</tr>
</table>
<form method="post" name="form1" action="<?php echo
$editFormAction; ?>">
<table align="left">
<tr valign="baseline">
<td align="right" nowrap class="v11r">Nombre Completo:</td>
<td class="v11r">
<input type="text" name="nombre" value="" size="32">
</td>
</tr>
<tr valign="baseline">
<td align="right" nowrap class="v11r">Movil Usuario :</td>
<td class="v11r">
<input name="celular_usuario" type="text" value="" size="32"
maxlength="10">
</td>
</tr>
<tr valign="baseline">
<td align="right" nowrap class="v11r">Password:</td>
<td class="v11r">
<input type="password" name="password" value="" size="32">
</td>
</tr>
<td align="right" nowrap class="v11r">Confirme Password:</td>
<td class="v11r">
<input type="password" name="conf_pass" value="" size="32">
</td>
</tr>
<tr valign="baseline">
<td align="right" nowrap class="v11r">*Edad:</td>
<td class="v11r">
<input type="text" name="password" value="" size="32">
</td>
</tr>
<tr valign="baseline">
<td align="right" nowrap class="v11r">*Ciudad:</td>
<td class="v11r">
<input type="text" name="password" value="" size="32">
</td>
</tr>
<tr valign="baseline">
<td align="right" nowrap class="v11r">*Sexo:</td>
<td class="v11r">
<input type="text" name="password" value="" size="32">
</td>
</tr>
<tr valign="baseline">
<td align="right" nowrap class="v11r">Operador:</td>
<td class="v11r">
<input type="text" name="password" value="" size="32">
</td>
</tr>
<tr valign="baseline">
<td nowrap align="right"> </td>
<td class="v11r">
<input name="submit" type="submit" value="Insertar registro">
</td>
</tr>
</table>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p><span class="v11r">*Estos campos no son requeridos</span>
<input type="hidden" name="MM_insert" value="form1">
</p>
</form>
<p> </p>
<td width="150">
<table width="150%" height="435" border="0"
cellpadding="10" cellspacing="0">
<tr>
<td class="v11g">
<p><img
src="images/sms.jpg" width="170" height="231"></p></td>
</tr>
</table>
</tr>
</table>
</td>
</tr>
</table>
<table width="780" border="0" cellspacing="0" cellpadding="0" height="34"
background="images/index_48.gif">
<tr>
<td> </td>
</tr>
</table>
<table width="780" border="0" cellspacing="0" cellpadding="0" height="65"
background="images/index_51.gif">
<tr>
<td width="390" align="center" class="bottom"> <b><b><a href="#"
class="bottom"><font color="#FAA6A6"><span class="v11r">Terminos de Uso
</span></font></a><span class="v11r"><font color="#FAA6A6"> | <a href="#"
class="v11r">Sobre sms2mail.com</a> | <a href="#"
class="v11r">USB</a></font></span></b></b></td>
<td width="390" align="center" class="v11r">©2005 sms2mail Universidad
de San Buenaventura</td>
</tr>
</table>
</BODY>
</HTML>

reg_listas.php
<?php require_once('Connections/sms2mail.php'); ?>
<?php
session_start();
$usuario=$MM_Username;
function GetSQLValueString($theValue, $theType, $theDefinedValue = "",
$theNotDefinedValue = "")
{
$theValue = (!get_magic_quotes_gpc()) ? addslashes($theValue) : $theValue;
switch ($theType) {
case "text":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "long":
case "int":
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
break;
case "double":
$theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
break;
case "date":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "defined":
$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
break;
}
return $theValue;
}
$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
$editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}
$nombre_lista=$_POST['nombre_lista'];
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
$insertSQL = sprintf("INSERT INTO lista (nombre_lista, celular_usuario)
VALUES ('$nombre_lista', '$usuario')");
mysql_select_db($database_sms2mail, $sms2mail);
$Result1 = mysql_query($insertSQL, $sms2mail) or die(mysql_error());
}
//$datoslista=$_POST["lista_seleccion"];
mysql_select_db($database_sms2mail, $sms2mail);
$query_registro_usuario = "SELECT usuario.nombre, usuario.celular_usuario,
lista.nombre_lista, lista.id_lista, contacto.correo_contacto FROM usuario inner
join lista on usuario.celular_usuario = lista.celular_usuario inner join contacto
on lista.id_lista= contacto.id_lista";
$registro_usuario = mysql_query($query_registro_usuario, $sms2mail) or
die(mysql_error());
$row_registro_usuario = mysql_fetch_assoc($registro_usuario);
$totalRows_registro_usuario = mysql_num_rows($registro_usuario);
$maxRows_listas = 10;
$pageNum_listas = 0;
if (isset($_GET['pageNum_listas'])) {
$pageNum_listas = $_GET['pageNum_listas'];
}
$startRow_listas = $pageNum_listas * $maxRows_listas;
mysql_select_db($database_sms2mail, $sms2mail);
$query_listas = "SELECT distinct(lista.nombre_lista), lista.id_lista FROM
usuario inner join lista on usuario.celular_usuario = lista.celular_usuario
WHERE lista.celular_usuario='$usuario'";
//$query_limit_listas = sprintf("%s LIMIT %d, %d", $query_listas,
$startRow_listas, $maxRows_listas);
$listas = mysql_query($query_listas, $sms2mail) or die(mysql_error());
$row_listas = mysql_fetch_assoc($listas);
if (isset($_GET['totalRows_listas'])) {
$totalRows_listas = $_GET['totalRows_listas'];
} else {
$all_listas = mysql_query($query_listas);
$totalRows_listas = mysql_num_rows($all_listas);
}
$totalPages_listas = ceil($totalRows_listas/$maxRows_listas)-1;
$Lista_correo=$_POST['lista_seleccion'];
mysql_select_db($database_sms2mail, $sms2mail);
$query_correos = "SELECT contacto.correo_contacto FROM usuario inner join
lista on usuario.celular_usuario = lista.celular_usuario inner join contacto on
lista.id_lista= contacto.id_lista WHERE lista.id_lista='$Lista_correo'";
$correos = mysql_query($query_correos, $sms2mail) or die(mysql_error());
$row_correos = mysql_fetch_assoc($correos);
$totalRows_correos = mysql_num_rows($correos);
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<HEAD>
<TITLE>SMS2MAIL</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html;
charset=windows-1251">
<link rel="stylesheet" href="main.css" type="text/css">
<style type="text/css">
<!-.Estilo1 {
color: #6600CC;
font-weight: bold;
}
-->
</style>
</HEAD>
<BODY BGCOLOR=#FFFFFF LEFTMARGIN=0 TOPMARGIN=0
MARGINWIDTH=0 MARGINHEIGHT=0 background="images/bgb.gif">
<table width="780" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="336"><img src="images/index_01.jpg" width=336 height=95
alt=""></td>
<td width="444" valign="top" bgcolor="#FFFFFF">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td background="images/index_02.gif" height="30"> </td>
</tr>
<tr>
<td nowrap background="images/index_09.gif"><a
href="index.php"><img src="images/index_04.gif" width=90 height=47 alt=""
border="0"></a>
<a href="registro.php"><img src="images/index_08.gif" width=90
height=47 alt="" border="0"></a>
<a href="#"><img src="images/index_06.gif" width=90 height=47
alt="" border="0"></a>
<a href="#"><img src="images/index_05.gif" width=90 height=47
alt="" border="0"></a>
</td>
</tr>
</table>
</td>
</tr>
</table>
<table width="780" border="0" cellspacing="0" cellpadding="0">
<tr>
<td>
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflas
h.cab#version=6,0,29,0" width="778" height="153">
<param name="movie" value="banner.swf">
<param name="quality" value="high">
<embed src="banner.swf" quality="high"
pluginspage="http://www.macromedia.com/go/getflashplayer"
type="application/x-shockwave-flash" width="778"
height="153"></embed></object></td>
</tr>
</table>
<table width="780" border="0" cellspacing="0" cellpadding="0"
background="images/index_14.gif">
<tr>
<td width="161"> </td>
<td width="538"> </td>
<td width="81"><a href="#"><img src="images/index_16.gif" width=22
height=35 alt="" border="0"></a><a href="#"><img src="images/index_17.gif"
width=27 height=35 alt="" border="0"></a><a href="#"><img
src="images/index_18.gif" width=23 height=35 alt="" border="0"></a></td>
</tr>
</table>
<table width="780" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<td width="161" background="images/index_20.gif">
<table width="161" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="161">  
</td>
</tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td height="20"><img src="images/index_37.gif" width=161
height=6 alt=""></td>
</tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td><b class="t11g">    </b></td>
</tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
</tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td align="right">   </td>
</tr>
</table>
</td>
<td background="images/index_28.gif">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td background="images/index_25.gif"><img
src="images/index_24.gif" width=335 height=47 alt=""><?php echo $usuario
?></td>
</tr>
</table>
<table width="619" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="309">
<table width="100%" border="0" cellspacing="0"
cellpadding="5">
<tr>
<td class="v11r"><p>• Tu Grupos de Contactos... </p>
<p> 
</p>
<form method="post" name="form1" action="<?php echo
$editFormAction; ?>">
<table align="center">
<tr valign="baseline">
<td nowrap align="right">Nombre de la Lista :</td>
<td><input type="text" name="nombre_lista" value=""
size="32"></td>
</tr>
<tr valign="baseline">
<td nowrap align="right"> </td>
<td><input type="submit" value="Ingresar Lista"></td>
</tr>
</table>
<input type="hidden" name="MM_insert" value="form1">
</form>
<p> </p></td>
</tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="10">
<tr>
<td class="v11g"><form name="lista" method="post"
action="">
<p>
Escoja lista o sino cree una...
</p>
<p>
<select name="lista_seleccion">
<?php
do {
?>
<option value="<?php echo $row_listas['id_lista']?>"><?php echo
$row_listas['nombre_lista']?></option>
<?php
} while ($row_listas = mysql_fetch_assoc($listas));
$rows = mysql_num_rows($listas);
if($rows > 0) {
mysql_data_seek($listas, 0);
$row_listas = mysql_fetch_assoc($listas);
}
?>
</select>
<input type="submit" name="Submit" value="Enviar">
</p>
<table border="1">
<tr>
<td width="212"><span class="Estilo1">Correos electronicos de
la lista </span></td>
</tr>
<?php do { ?>
<tr>
<td><?php echo $row_correos['correo_contacto']; ?></td>
</tr>
<?php } while ($row_correos = mysql_fetch_assoc($correos)); ?>
</table>
</form></td>
</tr>
</table>
</td>
<td width="310"><div align="center"><img src="images/celu2.jpg"
width="220" height="242">
</div></td>
</tr>
</table>
</td>
</tr>
</table>
<table width="780" border="0" cellspacing="0" cellpadding="0" height="34"
background="images/index_48.gif">
<tr>
<td> </td>
</tr>
</table>
<table width="780" border="0" cellspacing="0" cellpadding="0" height="65"
background="images/index_51.gif">
<tr>
<td width="390" align="center" class="bottom"> <b><a href="#"
class="bottom"><font color="#FAA6A6"><span class="v11r">Terminos de Uso
</span></font></a><span class="v11r"><font color="#FAA6A6"> | <a href="#"
class="v11r">Sobre sms2mail.com</a> | <a href="#"
class="v11r">USB</a></font></span></b></td>
<td width="390" align="center" class="v11r">©2005 sms2mail Universidad
de San Buenaventura </td>
</tr>
</table>
</BODY>
</HTML>
<?php
mysql_free_result($registro_usuario);
mysql_free_result($listas);
mysql_free_result($correos);
?>
J. Manual de Usuario
Aplicación Web
1. La aplicación inicia por la pantalla principal donde el usuario debe elegir entre
dos opciones, registrarse como usuario nuevo o acceder a su cuenta previamente
creada.
En el primer caso el usuario encuentra un formulario que solicita información
básica sobre este, como es su nombre, número celular y contraseña.
Al ingresar toda la información correctamente y hacer click en aceptar, recibirá una
página que confirma su registro exitoso.
En el segundo caso el usuario debe ingresar su número celular y su contraseña
que serán validadas en la base de datos y permitirá el acceso a su cuenta.
2. Al ingresar a su cuenta el usuario encuentra una pantalla donde se muestran
sus listas de contactos anteriormente creadas, y la opción de crear una nueva.
2. Si el usuario selecciona la opción de crear una nueva lista, ingresa el nombre
deseado y ésta se actualiza en la selección de listas para tener las mismas
opciones que con las listas existentes.
Al elegir la lista deseada se muestra una página con los contactos que conforman
dicha lista así como las opciones de modificar, borrar o añadir un contacto.
Envío de Mensaje
1. El usuario debe acceder a la opción enviar mensaje de texto en su dispositivo
celular.
En el número de destino debe escribir 3103490078.
Si desea que este mensaje sea enviado a un único correo electrónico, el formato
del cuerpo del mensaje debe ser, la dirección de correo electrónico del destinatario
seguida de un espacio y a continuación el mensaje deseado, como se puede
observar en la imagen de la izquierda.
Por lo contrario si desea que el mensaje sea enviado a todos los contactos de una
lista previamente creada en su cuenta de la aplicación web, el formato debe ser, el
nombre de la lista de contactos seguida de un espacio y a continuación el mensaje
deseado como se puede observar en la imagen de la derecha.
Descargar