pasarela x25 ip - IIT - Universidad Pontificia Comillas

Anuncio
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
INGENIERO EN INFORMÁTICA
PROYECTO FIN DE CARRERA
PASARELA X25 IP
AUTOR: JOSÉ LUIS PEDROSA MONTES MADRID, JUNIO 2007
Autoriza la entrega del proyecto del alumno:
José Luis Pedrosa Montes
EL DIRECTOR DE PROYECTO
Alejandro Besada Juez
Fdo.: Fecha: / / Vº Bº del Coordinador de Proyectos
David Contreras Bárcena
Fdo.: Fecha: / / Pasarela X25­IP
“Sentir gratitud y no expresarla es como envolver un regalo y no darlo”
William Arthur Ward
AGRADECIMIENTOS
Realizar este proyecto ha sido muy interesante y ha sido una gran aportación tanto académica como profesional, no obstante no ha sido una tarea sencilla y ha requerido mucho esfuerzo, el cual ha sido canalizado hacia un fin gracias a mi director de proyecto Alejandro Besada Juez, sin el cual este proyecto habría sido prácticamente imposible. A la Universidad Pontificia Comillas y en especial a la Facultad de Ingeniería Informática por haberme dado la oportunidad de realizar los estudios de Ingeniera Superior Informática, así como a los catedráticos que me impartieron clase, por haberme brindado sus conocimientos e ideas.
Dentro del marco de la universidad a David Contreras el coordinador del proyecto, por aportarme una visión profesional del proyecto, uniendo los entornos laboral y universitario. A Mario Castro Ponce, coordinador de este proyecto en sus primeros estadios y profesor durante todos mis años de carrera, sin él la pila de protocolos sería un misterio sin resolver. Quiero agradecer también a Pedro Sánchez Fuentes, antiguo alumno de ésta escuela, por su compresión en el trabajo, y el permitirme compatibilizar los estudios de mi ultimo año de carrera con el desempeño laboral en la empresa.
A mis padres José Luis y Mercedes, por el hábito que me inculcaron hacia el estudio en forma de superación y que me enseñaron que es la mejor herencia que se puede recibir.
Asimismo reconozco la contribución personal de cada uno de mis familiares y amigos, pues cada uno con su propio estilo me han ofrecido su apoyo moral y su amistad.
Aunque la memoria me traicione y no mencione a otras tantas, no son menos importantes, en momentos especiales las recuerdo y agradezco de corazón el apoyo que recibí de ellos.
José Luis Pedrosa Montes
III
Pasarela X25­IP
RESUMEN
Actualmente la tecnología X25 esta cada vez mas en desuso, a pesar de ello, en ciertos
entornos sobre todo en los relacionados con el mundo de las transacciones económicas, como
pueden ser las entidades bancarias, sigue siendo la manera estándar de establecer comunicaciones
entre distintas empresas, este es el caso del cliente de Ansib, corporación cuyo principal negocio es
el de hacer de intermediario entre los comercios, grandes superficies o entidades recargadoras de
menor tamaño y los distintos operadores de telefonía móvil, con los que se “recargan” los móviles
prepago de estas compañías.
El objetivo principal de éste proyecto es el desarrollo e implantación de una aplicación
Linux, que sirva de pasarela entre los comercios que realizan recargas y la entidad recargadora. En
la actualidad ya existe un software realizando estas funciones, sin embargo se ha elegido hacer el
desarrollo de una nueva pasarela, por los siguientes motivos:
Un movimiento global de la empresa hacia tecnologías basadas en software libre, como
por ejemplo la migración de los distintos servidores a Linux, ofreciendo sus servicios web a través
de servidores Apache ó Tomcat.
Uno de los motivos para basarse en soluciones GNU, es la posesión del código fuente,
muy necesario en un negocio que cambia con mucha rapidez, ya que con mucha frecuencia surge la
necesidad de modificar cierto comportamiento o añadir alguna funcionalidad en alguna de las
múltiples piezas que integran el sistema.
La empresa cliente no sólo acepta transacciones por X25, sino también por RTB e IP,
con diferentes protocolos para cada uno de los interfaces. Las transacciones recibidas a través de
X25 están formadas con el protocolo PRA. Este protocolo ha sido recientemente actualizado a su
versión 4, el cual ofrece mejoras significativas respecto sus versiones anteriores. Ayudando a
conseguir una mayor fiabilidad en el estado de las transacciones.
Debido al gran número de conexiones, el cliente demanda un mayor control e
información del estado de las comunicaciones, es por ello que se desarrollará un interfaz web que
muestre el estado de la misma, así como control sobre la máquina y el proceso.
José Luis Pedrosa Montes
IV
Pasarela X25­IP
ABSTRACT
Nowadays X.25 technology is becoming more and more uncommon, despite of this, in
some business, mainly in economical transactions environments, such as banks, it still is the
standard way of establishing communications between different companies. This is the case of
AnSiB's client, a corporation dedicated to intermediate between shops, malls or cell phone resellers
and the others cell phone carriers, which adds the credit on the customeraccount.
The prime goal of this project is the development and implementation of a Linux
application, which serves as a gateway between the retailers which provide the customer with credit
and the carrier.
In this moment there is already a software gateway solving this problem,
nevertheless, the coporation has decided to develop a new gateway because of the following
reasons:
A global movement of the corporation towards technologies based on open source
software, such as the migration of the different servers to Linux, offering their web services through
Apache or Tomcat server.
One of the main reasons for using GNU or GPL software is the possession of the
source code, absolutely unavoidable in a business that changes very fast, especially taking into
account that in many cases there is the need to modify a behavior or to add a function in one of the
many pieces that conform the system.
AnSiB's client not only accepts transactions through X25 interfaces, but also through
PSTN an IP with different protocols for each interfaces; in the case of the X25 interface
communications are made using a protocol called PRA. This PRA protocol has been rencently
updated to version 4, which offers relevant advantages being compared to earlier versions, one of
them is to provide with an accurate state of the transaction. Depending on the customer profile who
connects, this protocol can be also used on TCP/IP connexions. Nevertheless this question exceeds
the scope of the project.
Because of the huge amount of connexions, whether the number or the different
networks in which this corporation works on, the client demands a higher control and information
level of the system state; that is why a web interface will be developed, showing the state of the
gateway providing control over itself.
José Luis Pedrosa Montes
V
Pasarela X25­IP
José Luis Pedrosa Montes
VI
Pasarela X25­IP
INDICE
0 AnSiB Net Solutions...............................................................................................
...........................1
1 JUSTIFICACIÓN DEL PROYECTO.....................................................................
...........................4
1.1 Justificación académica.................................................................................
.............................4
1.2 Justificación económica......................................................................................................
........4
2 PLANTEAMIENTO DEL PROYECTO.........................................................................................
...5
2.1 Organigrama de los componentes............................................................................................
...5
2.2 Descripción de los integrantes...................................................................................................
.5
2.3 Estimación......................................................................................................
............................6
2.4 Presupuesto..............................................................................................................
...................6
2.5 Elección Hardware..................................................................................................................
....7
2.6 Elección Software...........................................................................................................
............9
2.7 Metodología de desarrollo.........................................................................................
...............10
2.8 Programación temporal.........................................................................................................
....13
3 ANÁLISIS DE REQUISITOS.................................................................................
........................14
4 PROTOCOLO PRA V.4.................................................................................................
..................24
4.1 Introducción..........................................................................................................
....................25
4.2 Descripción del protocolo........................................................................................................
.26
4.3 Tramas del terminal al host...........................................................................
...........................29
4.4 Mensaje de solicitud de recarga.......................................................................................
.........31
4.5 Mensaje de solicitud de recarga por tarjeta....................................................................
..........33
4.6 Anulación...........................................................................................................................
.......38
4.7 Consulta................................................................................................................
....................39
4.8 Resumen de códigos de respuestas..............................................................................
.............41
4.9 Tramas contables (fin de día)..............................................................................
.....................42
5 DISEÑO DE LA PASARELA...............................................................................
..........................45
5.1 X25 y Api Eicon................................................................................................
.......................46
5.2 Clases................................................................................................................
........................51
5.3 Aplicación Web.....................................................................................................................
....78
6 INSTALACIÓN DEL HARDWARE Y SOFTWARE.....................................................................91
6.1 Instalación Hardware.........................................................................................
.......................92
6.2 Pasarela................................................................................................................
.....................99
6.3 Bastionado del servidor...................................................................................
.......................102
6.4 Entorno Web...................................................................................................
........................105
7 FICHERO DE CONFIGURACIÓN....................................................................................
...........107
8 CONCLUSIONES........................................................................................................
..................109
BIBLIOGRAFÍA................................................................................................................................
110
José Luis Pedrosa Montes
VII
Pasarela X25­IP
GLOSARIO.............................................................................................................................
...........111
ANEXO A CONECTORES X25...............................................................................................
........116
ANEXO B CODIGOS X25...............................................................................................................
118
José Luis Pedrosa Montes
VIII
Pasarela X25­IP
0 AnSiB Net Solutions
AnSiB Net Solutions SL, es un empresa que nace a finales del año 2003 como Consultora orientada a servicios, productos y proyectos tecnológicos.
En muy poco tiempo se desarrolla ampliamente en el ámbito de la tecnología, prestando sus servicios de telecomunicaciones y desarrollo tanto a grandes multinacionales como a la Banca, administraciones públicas y consultoría.
En la actualidad continúa su crecimiento en las distintas líneas de negocio a las que se dedica. Su expansión no sólo se centra en España, también en Europa y Latinoamérica.
Tiene un único objetivo, y es ser una compañía líder dentro del campo de servicios tecnológicos y desarrollo de productos y proyectos de calidad profesional, que satisfagan a nuestros clientes. El diálogo entre todos los implicados en el proyecto, cliente, empleados y compañía, es un principio a la hora de obtener un óptimo resultado.
Para AnSiB, la satisfacción y el éxito del cliente es su éxito y para alcanzarlo, se compromete a encontrar las mejores soluciones a través de unos profesionales muy capacitados e implicados en ello.
AnSiB, tiene un importante compromiso empresarial, pero no sólo con el cliente, también lo tiene con sus propios empleados y con la actividad que lleva a cabo:
Con el Cliente
Porque es el primer objetivo de la empresa, AnSiB, le aporta las mejores soluciones y le asegura el éxito del proyecto:
●
El éxito de nuestros clientes es el nuestro: alineamos objetivos (win-win)
●
Generar la confianza del cliente es el primer objetivo de cada proyecto
●
Modelo de Interlocutor Único: un gestor de cliente para satisfacer todas sus peticiones
Con los Empleados
La empresa tiene unos empleados formados, de calidad y con talento, que además
cuentan con el soporte y los recursos necesarios para llevar a cabo un trabajo efectivo. Y elabora un
diseño conjunto de cada plan de carrera para generar una relación a largo plazo: cada empleado
José Luis Pedrosa Montes
1
Pasarela X25­IP
tiene “su” proyecto laboral.
El buen trabajo se hace con buenas herramientas: formación adecuada, soporte técnico,
recursos. La cultura de AnSiB se retro-alimenta de los empleados que la componen.
Con la Actividad
La perfecta ejecución de la actividad es sin duda la meta de la empresa, consiguiendo
así la máxima satisfacción del cliente, dicho de otra manera la excelencia es nuestra meta: lo que no
está bien ejecutado, está inacabado. En un entorno cambiante, adaptarse al cambio es la norma:
avanzamos con la tecnología. La calidad la genera el empleado con talento que está capacitado,
tiene recursos, está satisfecho y tiene un proyecto laboral. La labor beneficiosa es siempre
proactiva: (3P) Previsión, Planificación y Prevención.
Misión, Visión y Valores de AnSiB
Misión
Ser una compañía líder dedicada a la prestación de servicios tecnológicos y el desarrollo de productos/ proyectos fundamentados en la excelencia profesional y la satisfacción de nuestros clientes.
Visión
Actuar en sus iniciativas tecnológicas alineando los intereses de todos los implicados, clientes, empleados y compañía, para obtener los mejores resultados en base al talento, el compromiso y la sinergia de las partes en un ecosistema equilibrado y productivo.
Valores
●
La satisfacción del cliente es la medida del éxito.
●
El compromiso en la búsqueda de las mejores soluciones.
●
El capital humano como principal activo de la compañía.
●
La ética del trabajo y del esfuerzo aplicada 360º.
●
La equidad y el diálogo como principios de relación entre las partes.
●
La flexibilidad en la búsqueda de las mejores soluciones para nuestros clientes.
La empresa acoge varias líneas de negocio que a continuación se describen:
●
Ansiva
Pasarela de comunicaciones para datáfonos/tpv’s multiprotocolo
José Luis Pedrosa Montes
2
Pasarela X25­IP
●
TransMit
Sistema transaccional de gestión de recargas para móviles
●
Consultoría
Sistemas y Redes
Plataformas y desarrollos SW
SQA: Aseguramiento de la calidad del SW
Seguridad informática
●
Desarrollo
Aplicaciones Llave en Mano en cliente­servidor (C++, .Net, Visual Studio, java)
Bajo entornos Windows, Unix, Linux
Subcontratación de recursos especializados Desarrollo Plataformas: Oracle, Vignette, CRM, ERP
● Formación
Cursos específicos
Planes y proyectos de formación
Outsourcing de sistemas
Arquitectura y Planes de sistemas
●
Mantenimiento y evolución de plataformas y sistemas
Diseño y configuración de CPDs
Redes y comunicaciones
● Outsourcing de aplicaciones
Mantenimiento y evolución de plataformas y aplicaciones existentes
Proyectos de desarrollo y mantenimiento asociado, tanto en cliente como externamente Calidad del Software (SQA)
Oficinas de Proyectos
José Luis Pedrosa Montes
3
Pasarela X25­IP
1 JUSTIFICACIÓN DEL PROYECTO
1.1 Justificación académica:
1. Profundizar en los conocimientos sobre Linux
2. Practicar los conocimientos sobre la comunicación entre aplicaciones
3. Profundizar en la teoría Cliente/Servidor
4. Utilización y estudio del lenguaje C++
5. Desarrollo de aplicaciones utilizando la plataformas de bajo nivel
1.2 Justificación económica:
1. Una mayor estabilidad implica una menor pérdida de transacciones.
2. Mayor seguridad al filtrar por NRI + CUD
3. Implementación del protocolo v4, con paquetes de confirmación simplificando las conciliaciones de facturación entre empresas.
4. Uso de hardware con soporte para back­up de X25 por RDSI
5. Mayor control sobre el estado y comportamiento de la pasarela (entorno web)
José Luis Pedrosa Montes
4
Pasarela X25­IP
2 PLANTEAMIENTO DEL PROYECTO
2.1 Organigrama de los componentes:
2.2 Descripción de los integrantes:
Director : Alejandro Besada Juez, es el responsable de dar las especificaciones técnicas, orientar al alumno en las decisiones tecnológicas así como de la marcha del proyecto. Como representante de la empresa en el proyecto, es el responsable de suministrar los equipos hardware y software necesarios para el desarrollo del proyecto.
Coordinador: David Contreras Bárcena, su misión consiste en realizar revisiones periódicas del estado del proyecto. Al final del proyecto deberá validarlo, y también actuará como el responsable en última instancia de la calificación final del proyecto, teniendo en cuenta las valoraciones del director. Es el responsable administrativo del proyecto.
Alumno: José Luis Pedrosa, es el responsable de la planificación del proyecto, bajo la supervisión del coordinador y el director. El alumno diseñara, programara e implantará la pasarela. Diseñara y ejecutará las pruebas de carga para la posterior validación por parte del director José Luis Pedrosa Montes
5
Pasarela X25­IP
2.3 Estimación:
A continuación se adjunta una tabla con la estimación de horas requeridas para la consecución del desarrollo.
Rol
Director
Coordinador
Alumno
Sep Oct Nov Dic Ene Feb Mar Abril May Jun
2
2
1
30
1
40
2
1
1
1 0
45 30
0
35
2
3
4
Horas
Tarifa
€
5
4
26
50
1300
1
2
2
3
30 40 45 50
4
45
15
390
Total:
45
25
675
9750
11725
2.4 Presupuesto:
Teniendo en cuenta las estimaciones sobre las horas requeridas para el desarrollo del proyecto, tomando unas tarifas estándar y el precio aproximado de un servidor de las características necesarias, se genera el siguiente presupuesto:
Personal
Concepto
Presupuesto Pasarela X25-IP
Cantidad
Precio/ud.
Horas Director
27
50
1350
Horas Coordinador
20
45
900
400
25
10000
Horas Alumno
Sub Total:
Equipos
Total €
12250
Instalación Línea X25
1
300
300
Alquiler Línea X25
9
100
900
Servidor Dell PowerEdge
1
1500
Sub Total:
1500
2700
José Luis Pedrosa Montes
6
Pasarela X25­IP
2.5 Elección Hardware:
Dado que los productos X25 no son muy abundantes en el mercado, no fue muy complicada la elección de la tarjeta a utilizar, se incluyen las dos tarjetas que se consideraron como opciones.
FarSync X25 T1U
●
50MHz AMD Am186­CH (FS6140, FS6240)
●
1 Mbyte zero wait state SRAM
●
Intelligent Universal bus mastering PCI card
●
Short card (height 107mm, length 167mm)
●
PCI­X compatible
●
PCI v2.2 compliant
●
X.21 (V.11, RS422) ­ 15 pin male D type
●
V.35 ­ MRAC­34 male 'brick' type
●
RS232C (V.24, X.21bis) ­ 25 pin male D type
●
RS530 ­ 25 pin male D type
●
G.703 and G.704 BNC / RJ45 with I/F converters
José Luis Pedrosa Montes
7
Pasarela X25­IP
EICON C91 V2
●
MCP850 protocol processor
●
512KB RAM ●
Bus Type: PCI 2.2 32bit / 66MHz (3V PCI­X compatible)
●
Plug and Play ●
One V.24 connector ●
One ISDN S/T interface
●
V.24 DB­25 • CCITT V.24 Signaling ●
CCITT V.28 Electrical
●
CCITT X.21bis Electrical and signaling
●
EIA RS­232­C Electrical and signaling
Los dos fabricantes ofrecían una garantía de 5 años, la tecnología X25 esta mas que desarrollada y establecida, ninguna de las dos tarjetas ofrecían diferencias tecnológicas significativas y ambas compañías tienen un gran prestigio en el hardware de comunicaciones.
El factor determinante que hizo decantarnos por la tarjeta de Eicon, fue el hecho de que era la única que tenía soporte para back­up por RDSI. Esta capacidad tiene que estar acompañada por la contratación de la línea X25 con soporte RDSI, servicio que sí ofrece Telefónica, único proveedor de X25 en España.
José Luis Pedrosa Montes
8
Pasarela X25­IP
2.6 Elección Software:
La empresa cliente para la que se desarrolla el proyecto, se halla en un proceso de transición hacia soluciones basadas en software libre, eso hace que la mejor opción como sistema operativo sea Linux.
El lenguaje idóneo para esta clase de procesos es C/C++:
Debido a la naturaleza del proyecto, una pasarela de comunicaciones, tiene mas similitud con un programa en tiempo real que a una aplicación de tratamiento de datos. Dentro de los lenguajes de alto nivel, C y su extensión C++, son los que permiten un acceso a funciones de bajo nivel como pueden ser los semáforos, herramienta que en Java ha sido ocultada por funciones de sincronización. Esta clase de aplicaciones tienen una íntima relación con las funciones que ofrece el sistema operativo, solo accesibles normalmente desde C. Su velocidad de ejecución así como una gran potencia para hacer procesos de bajo nivel como gestión de memoria operaciones a nivel de bit, acceso a registros, hacen de C el lenguaje ideal, no obstante se ha elegido C++ como lenguaje para el desarrollo ya que permite la creación de clases, facilitando el diseño así como su mantenibilidad. Como se explicó en el anterior apartado, uno de los principales motivos para la elección de la tarjeta Eicon fue su potente API para C.
Siguiendo esta misma filosofía basada en software libre para el interfaz web, se hará uso de la arquitectura LAMP:
Un servidor de paginas web (A), montado sobre Linux(L), dejando a elección de la empresa el usar la misma máquina o no para este fin, usando MySql(M) como motor de base de datos, y PHP(P) para la programación de los interfaces web.
Debido al aislamiento que tendrá la máquina de desarrollo, no será posible tener acceso físico a la misma salvo el día de la instalación, esto hace que no se pueda instalar el correspondiente IDE gráfico, por otro lado tampoco es posible desarrollar la aplicación en una estación de trabajo, puesto que las librerías del hardware no se instalan correctamente en un ordenador sin la tarjeta físicamente conectada. Todos estos factores hacen que la opción mas recomendable para la codificación de la pasarela sea a través de sesiones de terminal remoto (SSH) y el editor VIM. José Luis Pedrosa Montes
9
Pasarela X25­IP
2.7 Metodología de desarrollo:
La empresa AnSiB Net solutions esta especializada en sistemas transaccionales, siendo una parte fundamental del negocio las pasarelas, AnSiB ha desarrollado una gran variedad de pasarelas entre distintos protocolos así como interfaces hardware. La experiencia personal del alumno en esta empresa de la cual es empleado desde hace dos años, nos ha hecho descartar el uso de una metodología de desarrollo de software tradicional, como pueda ser la metodología en cascada.
A priori la estructura de la pasarela ya estaba decidida, pues es común con otros proyectos, no requiriendo un estudio detallado. La experiencia nos dice que en esta clase de proyectos, es óptimo utilizar una metodología en espiral, haciendo un prototipo inicial que contenga una estructura sólida y que pueda ser modificada con facilidad. Las funcionalidades necesarias para el correcto funcionamiento se añaden en sucesivas iteraciones, evolucionando el prototipo inicial. Normalmente este tipo de pasarelas, dependen en exceso del comportamiento de las diferentes API's que proporciona el fabricante, no obteniendo el comportamiento que se podría extraer de los documentos técnicos. En este caso debido al tipo de negocio, no se puede proporcionar el cliente software que ha de usar la pasarela, y los diferentes nodos que se conectan a través de IPX25D implementan el protocolo PRA de maneras mas o menos laxas, este comportamiento obliga en numerosas ocasiones a modificar el software, por lo que una vez mas la fase de diseño no habría echo una gran aportación.
Son muchos los motivos que hacen diferente un pasarela de una aplicación, de esta última se espera flexibilidad, una interfaz de usuario cómoda e intuitiva, facilidad de uso, consumo de la menor cantidad de recursos posibles. Sin embargo lo que se le exige a una pasarela es fundamentalmente:
Estabilidad: son procesos sin los cuales los sistemas transaccionales se paran, y por lo tanto el negocio en si. Suelen ser aplicaciones que no se detienen jamas salvo por actualizaciones de software o mantenimiento. La pasarela debe tener un tiempo de funcionamiento sin fallos del orden de meses, requisito que no suele ser necesario en aplicaciones cliente. Es muy importante la correcta gestión de la memoria que no genere ningún “Memory Leak” es decir, uso de memoria José Luis Pedrosa Montes
10
Pasarela X25­IP
dinámica que crece indefinidamente, haciendo que la aplicación se detenga después de algunos horas o días. Su comportamiento ante la misma entrada siempre debe ser la misma salida. Tiempo de respuesta: Para todo problema siempre hay diferentes soluciones, dentro de las adecuadas, unas son mas lentas que otras usando menos recursos, en las pasarelas esto no es así siempre que se pueda se ha de elegir la solución que genere un tiempo de respuesta mas bajo, aun teniendo una peor relación recursos/velocidad.
Es decir, la mayor parte del tiempo de desarrollo en esta clase de proyectos se emplea en optimización, muchas pequeñas modificaciones del comportamiento y corrección de errores en tiempo de ejecución. Una vez mas la experiencia en proyectos de este tipo en el que se usa metodología en espiral, es necesario tener un control absoluto sobre las diferentes versiones se han ido desarrollado en las diferentes fases.
Para conseguir este control se ha usado el sistema de identificadores usado en la empresa cliente, ya que el proyecto se desarrollará en sus instalaciones. No se usará ningún programa o control riguroso de gestión de la configuración debido al escaso tamaño del proyecto. Se usará una carpeta en red en la que se almacenaran las diferentes versiones así como un registro de cambios (Changelog.txt)
Todo elemento entregable, documental o ejecutable se ajustara a la siguiente nomenclatura:
●
Tres caracteres alfanúmeros con las iniciales del cliente del proyecto.
●
Tres caracteres numéricos con el orden correlativo del proyecto para este cliente, empezando en cero y aumentando de uno en uno.
Documentales:
●
Tres caracteres fijos con el valor DOC.
●
Tres caracteres con el tipo de documento, dentro de la siguiente lista:
○
ACT: Actas de reunión.
○
ISE: Informes de seguimiento
○
EVA: Evaluación
José Luis Pedrosa Montes
11
Pasarela X25­IP
●
Dos caracteres numéricos para indicar la versión, la primera versión será siempre la 1
●
Un punto “.”
●
Dos caracteres numéricos con la revisión del documento, empezando en 0
Software:
●
Tres caracteres fijos con el valor SOF.
●
Tres caracteres con el tipo de documento, dentro de la siguiente lista:
○
SRC: Fichero con código fuente.
○
BIN: Fichero ejecutable.
○
LIB: Fichero con librerías
○
SRI: Fichero con script
○
CNF: Ficheros de configuración
○
MAN: Ficheros de ayuda integrados en programa
○
MKC: Ficheros de compilación automatizada
○
PRJ: Ficheros de definición del proyecto en el IDE
●
Hasta un máximo de 8 caracteres describiendo el elemento, en proyectos con orientación a objetos se usará el nombre de clase
●
Dos caracteres numéricos para indicar la versión, la primera versión será siempre la 1
●
Un punto “.”
●
Dos caracteres numéricos con la revisión del objeto, empezando en 0
●
Un punto “.”
●
Dos caracteres numéricos con el parche del objeto, empezando en 0
José Luis Pedrosa Montes
12
Pasarela X25­IP
2.8 Programación temporal:
Para la finalización del proyecto, AnSiB no ha puesto inconvenientes en establecer como fecha para la finalización del proyecto el fin del año lectivo, se ha dado como plazo hasta el mes de Junio. Se adjunta un diagrama con la planificación realizada: Se ha excluido la parte de pruebas del proyecto, ya que una vez desarrollado, y realizadas las
pruebas con el emulador, es necesario, ponerse en contacto con las diversas entidades que usa esta
pasarela e informarles de que será necesario que actualicen su software para implementar la versión
4 del protocolo, esto requiere un cierto tiempo de margen hasta que lo hayan desarrollado, una vez
los clientes estén listos comenzará la última parte de pruebas y refinamiento.
José Luis Pedrosa Montes
13
Pasarela X25­IP
3 ANÁLISIS DE REQUISITOS
José Luis Pedrosa Montes
14
Pasarela X25­IP
HOJA DE REQUISITOS
Proyecto: X25IPD
Fecha: Jefe proyecto:Alejandro Besada
Versión: 1.0
Fuente: Alejandro Besada Juez Estado: Aceptado
Pag: 1/10
Prioridad: Normal
Cliente: Identificador Requisito: R01
Tipo Requisito: Otros
Descripción Requisito: Todas las partes software utilizado ha de ser GNU
Beneficios: Acceso al código fuente de todas las partes del sistema.
Capacidad de depuración de problemas
Modificación del comportamiento
Comentarios / Soluciones requeridas:
Documentos relacionados:
GNU license
Requisitos relacionados: José Luis Pedrosa Montes
15
Pasarela X25­IP
HOJA DE REQUISITOS
Proyecto: IPX25D
Fecha: Jefe proyecto:Alejandro Besada
Versión: 1.0
Fuente: Alejandro Besada Juez
Estado: Pag: 2/10
Prioridad: Critica
Cliente: Identificador Requisito: R02
Tipo Requisito: Otros
Descripción Requisito: Registro de transacciones en fichero
Beneficios: Posibilidad de seguir las transacciones a lo largo del sistema transaccional.
Resolver posibles incidencias de facturación.
Comentarios / Soluciones requeridas:
Documentos relacionados:
Requisitos relacionados: José Luis Pedrosa Montes
16
Pasarela X25­IP
HOJA DE REQUISITOS
Proyecto: IPX25D
Fecha: Jefe proyecto:Alejandro Besada
Versión: 1.0
Fuente: Alejandro Besada
Estado: Aceptado
Pag: 3/10
Prioridad: Baja / Opcional
Cliente: Identificador Requisito: R03
Tipo Requisito: Funcional
Descripción Requisito: Registro en syslog
Beneficios: Syslog permite la redirección automática de ficheros, permitiendo así un copia de seguridad constante
Comentarios / Soluciones requeridas:
Se trata de un complemento a añadir no un requisito.
Documentos relacionados:
Requisitos relacionados: Es complementario a R02
José Luis Pedrosa Montes
17
Pasarela X25­IP
HOJA DE REQUISITOS
Proyecto: IPX25D
Fecha: Jefe proyecto: Alejandro Besada
Versión: 1.0
Fuente: Alejandro Besada Juez
Estado: Aceptado
Pag: 4/10
Prioridad: Alta
Cliente: Identificador Requisito: R04
Tipo Requisito: Otros
Descripción Requisito: Back Up RDSI de X25
Beneficios: El sistema transaccional no se detiene ante una incidencia de comunicaciones
Comentarios / Soluciones requeridas:
Elección del Hardware adecuado que soporte este tipo de back­up
Documentos relacionados:
Requisitos relacionados: José Luis Pedrosa Montes
18
Pasarela X25­IP
HOJA DE REQUISITOS
Proyecto: IPX25D
Fecha: Jefe proyecto: Alejandro Besada
Versión: 1.0
Fuente: Alejando Besada Juez
Estado: Pag: 5/10
Prioridad: Alta
Cliente: Identificador Requisito: R05
Tipo Requisito: Funcional
Descripción Requisito: Control de acceso
Beneficios: Evitar accesos indebidos
Comentarios / Soluciones requeridas:
Se ha de filtrar las llamadas X25 por RNI+CUD
Documentos relacionados:
Requisitos relacionados: José Luis Pedrosa Montes
19
Pasarela X25­IP
HOJA DE REQUISITOS
Proyecto: IPX25D
Fecha: Jefe proyecto: Alejandro Besada
Versión: 1.0
Fuente: Alejandro Besada Juez
Estado: Pag: 6/10
Prioridad: Alta
Cliente: Identificador Requisito: R06
Tipo Requisito: Funcional
Descripción Requisito: Herramienta monitorización y control multiplataforma
Beneficios: Capacidad para parar y arrancar la pasarela de manera remota.
Información sobre el estado y transacciones cursadas
Comentarios / Soluciones requeridas:
Diseñar una página web que ofrezca estas funcionalidades, usando ssh para el control, y MySql
para las estadísticas
Documentos relacionados:
Requisitos relacionados: José Luis Pedrosa Montes
20
Pasarela X25­IP
HOJA DE REQUISITOS
Proyecto: IPX25D
Fecha: Jefe proyecto:Alejandro Besada
Versión: 1.0
Fuente: Alejandro Besada
estado: Aceptado
Pag: 7/10
Prioridad: Media
Cliente:
Identificador Requisito: R07
Tipo Requisito: Funcional
Descripción Requisito: Cambio de tablas de rutas y/o control de acceso sin reinicio
Beneficios: Dar de alta nuevos clientes, o cambiar su servidor de manera dinámica
Comentarios / Soluciones requeridas:
Al ser un proceso demonio, no es posible interactuar con el de una manera habitual, sera necesario usar IPC y señales.
Documentos relacionados:
Requisitos relacionados: José Luis Pedrosa Montes
21
Pasarela X25­IP
HOJA DE REQUISITOS
Proyecto: IPX25D
Fecha: Jefe proyecto:Alejandro Besada
Versión: 1.0
Fuente: Alejandro Besada Juez Estado: Aceptado
Pag: 8/10
Prioridad: Alta
Cliente: Identificador Requisito: R08
Tipo Requisito: Funcional
Descripción Requisito: Modos de funcionamiento: único, secuencial y concurrente
Beneficios: No es necesario forzar a los clientes a un protocolo rígido.
Mayor aprovechamiento de las lineas X25 al soportar concurrencia.
Comentarios / Soluciones requeridas:
Las entidades que realicen conexiones operan de tres maneras diferentes:
Único: Llamada, petición, respuesta y liberación del circuito
Secuencial: Llamada, petición, respuesta, petición, respuesta.... liberación del circuito.
Concurrente: Llamada, varias peticiones en vuelo, respuesta/s.... liberación del circuito.
Documentos relacionados:
Requisitos relacionados: José Luis Pedrosa Montes
22
Pasarela X25­IP
HOJA DE REQUISITOS
Proyecto: IPX25D
Fecha: Jefe proyecto:Alejandro Besada
Versión: 1.0
Fuente: Estado: Aceptado
Pag: 9/10
Prioridad: Alta
Cliente:
Identificador Requisito: R09
Tipo Requisito: Funcional
Descripción Requisito: Soporte protocolo PRA v.1 hasta v.4
Beneficios: Comentarios / Soluciones requeridas:
Documentos relacionados:
Especificaciones Protocolo PRA v.4, se adjunta a continuación Requisitos relacionados: José Luis Pedrosa Montes
23
Pasarela X25­IP
4 PROTOCOLO PRA V.4
José Luis Pedrosa Montes
24
Pasarela X25­IP
4.1 Introducción
El objeto del presente protocolo es servir de pasarela entre entidades externas y el servicio de recarga electrónica. Actualmente la conexión a través de esta pasarela se puede realizar vía IP o X25.
Las conexiones IP se establecen a través de líneas punto a punto o bien vía VPN y la conexión X25 se realiza a una línea asignada, de esta forma se ofrecen varios servicios de recarga electrónica:
Online, se envían los datos de la petición al operador final, que valida y ejecuta la operación. El servicio Online comprende las siguientes transacciones, dependiendo del operador:
•
Recargas.
•
Anulaciones.
•
Consultas.
Offline, se proporciona un código que el cliente final debe usar siguiendo las instrucciones de cada operador. Finalmente el operador ejecuta y valida la operación. No admite devolución. El servicio Offline comprende las siguientes transacciones:
•
Recargas.
•
Consultas.
Tarjeta, el cliente proporciona una tarjeta de recarga. Los datos de la tarjeta y de la recarga se envían al operador final, que valida y ejecuta la operación. Incluye los dos tipos de servicio anteriores, las transacciones pueden ser recargas y consultas pero las anulaciones solo se pueden hacer si están permitidas por el operador de la tarjeta.
La entidad externa realiza las anteriores operaciones enviando tramas en el formato definido por este protocolo.
José Luis Pedrosa Montes
25
Pasarela X25­IP
4.2 Descripción del protocolo:
En las operaciones de recarga correctas es imprescindible enviar una trama de confirmación para asegurar que el terminal recibió correctamente la respuesta. Cuando en una recarga se devuelve un error, no es necesario confirmar la recepción de dicho error.
Con cada petición de recarga se envía información sobre el resultado de la recarga anterior en el campo resultado previo (cabecera). Ante cualquier error que se genere en el terminal una vez enviada la confirmación se debe informar a través de este campo de dicho error. De esta forma se registra impresiones erróneas de tickets, desconexiones de corriente y cualquier otro tipo de error accidental que no permita la visualización de la información de la recarga.
Recarga offline (resultado previo = ‘00’):
TERMINAL
ENTIDAD EXTERNA
HOST
(1)RCG
­­­­­­­­­­­­­­>
­­­­­­­­­­­­­­>
<­­­­­­­­­­­­­­
<­­­­­­­­­­­­­­
REF
CONF
­­­­­­­­­­­­­­>
­­­­­­­­­­­­­­>
Recarga online (resultado previo = ‘01’):
TERMINAL
ENTIDAD EXTERNA
HOST
José Luis Pedrosa Montes
26
Pasarela X25­IP
(2)RCG
­­­­­­­­­­­­­­>
­­­­­­­­­­­­­­>
Registra error
<­­­­­­­­­­­­­­
<­­­­­­­­­­­­­­
REF
CONF
­­­­­­­­­­­­­­>
­­­­­­­­­­­­­­>
Cuando se recibe un código de error (NAK) no es necesario el envío de la trama de confirmación:
Recarga errónea:
TERMINAL
ENTIDAD EXTERNA
HOST
RCG
­­­­­­­­­­­­­­>
­­­­­­­­­­­­­­>
<­­­­­­­­­­­­­­
<­­­­­­­­­­­­­­
NAK
Tampoco es necesario el envío de la trama de confirmación para las transacciones de devolución (ANL), consulta (EST) y fin de día (FIN):
Devolución:
TERMINAL
ENTIDAD EXTERNA
HOST
ANL
­­­­­­­­­­­­­­>
­­­­­­­­­­­­­­>
José Luis Pedrosa Montes
27
Pasarela X25­IP
<­­­­­­­­­­­­­­
<­­­­­­­­­­­­­­
RAL
Consulta:
TERMINAL
ENTIDAD EXTERNA
HOST
EST
­­­­­­­­­­­­­­>
<­­­­­­­­­­­­­­
<­­­­­­­­­­­­­­
REN
Fin de día:
TERMINAL
ENTIDAD EXTERNA
HOST
FIN
­­­­­­­­­­­­­­>
<­­­­­­­­­­­­­­
<­­­­­­­­­­­­­­
José Luis Pedrosa Montes
FIN
28
Pasarela X25­IP
4.3 Tramas del terminal al host
Pre­cabecera:
Todas las entidades externas que acceden vía IP deben llevar este campo. Para las conexiones X25 no es necesario enviar este campo.
Campo
LONGITUD
Descripción
Valor fijo “00”
F/V Formato Longitud
F Alfanumérico 2 (bytes)
La respuesta desde el host son 2 bytes cuya traducción de hexadecimal a decimal es la longitud de la trama. El primer byte indica si se sobrepasa la longitud de 255 caracteres y cuantas veces, por ejemplo:
0x03 0x37  3 55  (3*255)+55= 820 caracteres de longitud (cabecera +
cuerpo de la trama)
0x00 0x63  0 99  0+99= 99 caracteres de longitud (cabecera + cuerpo de
la trama)
Cabecera:
Permite al sistema de recargas de la entidad externa identificar cada transacción para poder entregar correctamente la respuestas.
El campo RESULTADO PREVIO confirma que la transacción anterior fue correcta, este valor va asociado al código de comercio y al código de terminal. Se debe enviar la información correcta para cada recarga.
Se adjunta una tabla describiendo cada uno de los campos de la trama, sus posibles valores y el tipo José Luis Pedrosa Montes
29
Pasarela X25­IP
de dato:
Campo
Versión
Dial Indicator
DAD
RESULTADO
PREVIO
REFERENCIA
CÓDIGO
MERCHANT
CÓDIGO
COMERCIO
CÓDIGO
TERMINAL
TSC
OPERADOR
IMPORTE
Descripción
F/V Formato
• Versión 04. Valor fijo
F
Numérico
“04”.
• Nº De reintentos
generados por el
F
terminal para esta
transacción. Solo aplica
sobre terminales RTB
• Nº telefónico marcado
para establecer
comunicación.
Confirma la transacción
anterior. Valores posibles:
• Recarga anterior
F
Numérico
correcta. Valor “00”.
• Recarga anterior
incorrecta. Valor “01”.
Valor incremental con
respecto a la transacción del F
terminal.
código de Merchant,
F
Numérico
Proporcionado por la entidad
Longitud
2
2
6
Proporcionado por Entidad
F
Numérico
8
Proporcionado por Entidad.
F
Numérico
8
SECUENCIA +TIME_STAMP. En
formato ‘YYYYMMDD
F
Numérico
HHMMSSMS’ + Modificador
GTM
Identifica el operador al que
se envía la recarga. Es
F Alfanumérico
proporcionado por Entidad
Identifica el producto
F
Numérico
asociado al operador.
20
4
8
Confirma la transacción anterior. Valores posibles:
Recarga anterior correcta, el terminal recibió la respuesta a la recarga (REF). Valor “00”. Recarga anterior incorrecta, el terminal no recibió la respuesta. Valor “01”.
José Luis Pedrosa Montes
30
Pasarela X25­IP
4.4 Mensaje de solicitud de recarga
Campo
Descripción
F/V Formato Longitud
PRELa misma que se envió en
CABECERA+CABECE
F Alfanumérico
64
la petición de recarga.
RA
código de operación
Separador
cantidad
Tipo de mensaje: RLOA
Espacio, usado para
F Alfanumérico
delimitar campo = '|' pipe
Importes definidos por el
operador. Se añaden dos
ceros por la derecha para
los decimales y se completa
la longitud del campo con F
Numérico
espacios por la derecha.
p.e.: “500
“,”15000
José Luis Pedrosa Montes
4
1
6
”
Espacio, usado para
delimitar campo = '<FS>'
Número de teléfono a
recargar.
De tratarse de una recarga
extranjera, se usara el nº
Número
del cliente en el país de
origen de la tarjeta
obviando códigos
internacionales
Espacio, usado para
Separador
delimitar campo = '<DLE>'
Sector al que pertenece
terminal de la entidad
Sector
recargadora, asignado por
convenio.
Espacio, usado para
Separador
delimitar campo = '<CR>'
Código de provincia, desde
donde se realiza la recarga,
código de provincia
ver tablas de
correspondencia entre
códigos y provincia
Separador
Espacio, usado para
Separador
F Alfanumérico
F Alfanumérico
F
Numérico
1
15
F Alfanumérico
1
F Alfanumérico
20
F Alfanumérico
1
F Alfanumérico
2
F Alfanumérico
1
31
Pasarela X25­IP
Campo
Referencia
Separador
Impuesto
Separador
Identificador de
Moneda
Trailer ó Cola
CheckSum
José Luis Pedrosa Montes
Descripción
F/V Formato Longitud
delimitar campo = '<LF>'
Referencia local de la
entidad externa. Este
campo debe ser único
F
Numérico
20
para cada operación de
recarga y controlado por
la entidad
Espacio, usado para
F Alfanumérico
1
delimitar campo = '#'
Valores posibles:
1: 16% (Península Y
Baleares)
2: 4% (Ceuta)
3: 3% (Melilla)
F
Numérico
1
4: 0% (Canarias)
Este valor se refiere al
emplazamiento físico desde
el cual se realizo la recarga,
no el de la empresa.
Espacio, usado para
F Alfanumérico.
1
delimitar campo = '*'
Consultar tabla de
correspondencia entre
F Hexadecimal
1
códigos y monedas, para la
zona euro valor A
Valor constante usado
como delimitador de trama, V Hexadecimal
4
Secuencia fija =FAAF
CheckSum de 2 bytes
V Hexadecimal
2
32
Pasarela X25­IP
4.5 Mensaje de solicitud de recarga por tarjeta
Similar a la petición de recarga normal. Se añaden los detalles de la tarjeta del operador.
Campo
Descripción
F/V Formato Longitud
PRELa misma que se envió en
CABECERA+CABECER
F Alfanumérico
64
la petición de recarga.
A
Espacio, usado para
Separador
F Alfanumérico
1
delimitar campo = '<LF>'
código
Tipo de mensaje: CLOA
F Alfanumérico
4
Espacio, usado para
Separador
F Alfanumérico
1
delimitar campo = '|' pipe
Importes definidos por el
operador. Se añaden dos
ceros por la derecha para
los decimales y se
cantidad
completa la longitud del
F
Numérico
5
campo con espacios por la
derecha.
Separador
tarjeta de recarga
p.e.: “500
“,”15000 ”
Espacio, usado para
delimitar campo = '<FS>'
La información
capturada de la pista 2
de la banda magnética
por el terminal:
• Número de tarjeta
• Carácter “=”
• Fecha de
caducidad
Espacio, usado para
delimitar campo = '<LS>'
Clave de la entidad
clave_cliente_operador
recargadora
Clave de la entidad
clave_cliente
externa, definida por esta
última.
Espacio, usado para
Separador
delimitar campo = '#'
Separador
José Luis Pedrosa Montes
F Alfanumérico
F
Numérico
1
50
F Alfanumérico
1
F Alfanumérico
20
F Alfanumérico
20
F Alfanumérico
1
33
Pasarela X25­IP
Campo
Descripción
F/V Formato Longitud
Código de provincia, desde
donde se realiza la recarga,
código de provincia
ver tablas de
F Alfanumérico
2
correspondencia entre
códigos-provincia
Espacio, usado para
Separador
F Alfanumérico
1
delimitar campo = '#'
Referencia local de la
Referencia
F
Numérico
20
entidad externa.
Espacio, usado para
Separador
F Alfanumérico
1
delimitar campo = '|' pipe
Valores posibles:
1: 16% (Península Y
Baleares)
2: 4% (Ceuta)
3: 3% (Melilla)
Impuesto
F
Numérico
1
4: 0% (Canarias)
Este valor se refiere al
emplazamiento físico desde
el cual se realizo la recarga,
no el de la empresa.
Espacio, usado para
Separador
F Alfanumérico
1
delimitar campo = '#'
Consultar tabla de
correspondencia entre
Identificador de Moneda
F Hexadecimal
1
códigos y monedas, para la
zona euro valor A
Valor constante usado
Trailer ó Cola
como delimitador de trama, V Hexadecimal
4
Secuencia fija =FAAF
CheckSum
CheckSum de 2 bytes
V Hexadecimal
2
José Luis Pedrosa Montes
34
Pasarela X25­IP
Mensaje de respuesta para una recarga correcta
Campo
Descripción
F/V Formato Longitud
PRELa misma que se envió en la
CABECERA+CAB
F Alfanumérico
64
petición de recarga.
ECERA
código
F Alfanumérico
4
Tipo de mensaje: REFL
Espacio, usado para delimitar
Separador
F Alfanumérico
1
campo = '<FS>'
• Offline, número de
referencia local enviada
por la entidad externa
Referencia
F Alfanumérico
20
(LOCAL_REF).
• Online: referencia del
operador.
Espacio, usado para delimitar
Separador
F Alfanumérico
1
campo = '<FS>'
• Offline:
CÓD. ADMIN. (Longitud 20)
CÓD. ACTIV. (Longitud 20)
Código
Se completan longitudes con
F Alfanumérico
40
espacios por la derecha.
• Online, se completa con
espacios.
Espacio, usado para delimitar
Separador
F Alfanumérico
1
campo = '<FS>'
Texto
Mensajes.
V Alfanumérico
700
Espacio, usado para delimitar
Separador
F Alfanumérico
1
campo = '<FS>'
Adicionalmente se informa a la
entidad recargadora en caso de
que haya insuficiencia de
crédito o este cerca de
crédito
F Alfanumérico
1
agitarse:
Limite Crédito. Posibles Valores:
1.- CRÉDITO BAJO.
2.- CREDITO SUFICIENTE.
Valor constante usado como
Trailer ó Cola
delimitador de trama,
V Hexadecimal
4
Secuencia fija =FAAF
CheckSum
CheckSum de 2 bytes
V Hexadecimal
2
José Luis Pedrosa Montes
35
Pasarela X25­IP
Mensaje de respuesta de recarga errónea:
Campo
Descripción
F/V Formato Longitud
PRELa misma que se envió en la
CABECERA+CABE
F Alfanumérico
64
petición de recarga.
CERA
CODIGO
F Alfanumérico
3
Tipo de mensaje: NOP
Espacio, usado para
Separador
F Alfanumérico
1
delimitar campo = '<FS>'
Códigos de error e
interpretación. Posibles
valores:
CODRESP
01 - Error en número de
teléfono.
02 - Operación no permitida
en tarjeta.
03 - Cantidad incorrecta.
04 - Error de aplicación.
05 - Error de protocolo.
06 – Tiempo sobrepasado.
07 - Otro error.
F
Numérico
2
F
F
Alfanumérico
Alfanumérico
1
40
V
Hexadecimal
4
V
Hexadecimal
2
Otros errores:
11 - La transacción ya
existe.
12 - CIF o SFID incorrecto.
13 - SFID bloqueado.
14 – Crédito entidad
agotado.
Separador
Texto
Trailer ó Cola
CheckSum
Espacio
Texto descriptivo del error.
Valor constante usado como
delimitador de trama,
Secuencia fija =FAAF
CheckSum de 2 bytes
José Luis Pedrosa Montes
36
Pasarela X25­IP
Trama de confirmación de recarga
La entidad externa confirma que ha recibido la trama de respuesta a la
recarga.
Campo
Descripción
F/V Formato Longitud
PRELa misma que se envió en la
CABECERA+CAB
F Alfanumérico
64
petición de recarga.
ECERA
Espacio, usado para delimitar
Separador
F Alfanumérico
1
campo = '<FS>'
Valor constante usado como
Trailer ó Cola
delimitador de trama,
V Hexadecimal
4
Secuencia fija =FAAF
CheckSum
CheckSum de 2 bytes
V Hexadecimal
2
José Luis Pedrosa Montes
37
Pasarela X25­IP
4.6 Anulación
Las peticiones de anulación se realizan mediante la referencia local enviada por la entidad externa.
Campo
PRECABECERA+CAB
ECERA
Código
Separador
Referencia
Trailer ó Cola
CheckSum
Descripción
F/V
Formato
Longitud
La pre-cabecera recoge la
longitud y la cabecera
F
Alfanumérico
54
identifica la transacción.
F
Alfanumérico
4
Tipo de mensaje: DEVP
Espacio, usado para delimitar
F
Alfanumérico
1
campo = '<FS>'
Referencia local de la entidad
F
Numérico
20
externa.
Valor constante usado como
delimitador de trama,
V
Hexadecimal
4
Secuencia fija =FAAF
CheckSum de 2 bytes
V
Hexadecimal
2
Mensaje de respuesta a la anulación:
Campo
Descripción
F/V
Formato Longitud
PRESe responden los mismos
CABECERA+CAB
F Alfanumérico
54
valores que se enviaron.
ECERA
Código
F Alfanumérico
3
Tipo de mensaje: DEVR
Espacio, usado para delimitar
Separador
F Alfanumérico
1
campo = '<FS>'
Referencia local de la
Referencia
F Alfanumérico
20
recarga.
Espacio, usado para delimitar
Separador
F Alfanumérico
1
campo = '<FS>'
Códigos de respuesta e
interpretación. Posibles
Código Respuestavalores:
F
Numérico
5
Se especifican mas adelante
los posibles valores
Espacio, usado para delimitar
Separador
F Alfanumérico
1
campo = '<FS>'
Texto
Texto descriptivo de error.
F Alfanumérico
40
Valor constante usado como
Trailer ó Cola
delimitador de trama,
V Hexadecimal
4
Secuencia fija =FAAF
CheckSum
CheckSum de 2 bytes
V Hexadecimal
2
José Luis Pedrosa Montes
38
Pasarela X25­IP
4.7 Consulta
A continuación se describe las tramas de consulta y sus respuestas
Mensaje de consulta:
Campo
Descripción
F/V Formato Longitud
PRELa pre-cabecera recoge la
Alfanuméric
CABECERA+CAB
longitud y la cabecera
F
54
o
ECERA
identifica la transacción.
Alfanuméric
Código
F
3
Tipo de mensaje: EST
o
Espacio, usado para delimitar
Alfanuméric
Separador
F
1
campo = '<FS>'
o
Referencia local de la entidad
Referencia
F Numérico
20
externa.
Valor constante usado como
Hexadecima
Trailer ó Cola
delimitador de trama,
V
4
l
Secuencia fija =FAAF
Hexadecima
CheckSum
CheckSum de 2 bytes
V
2
l
Mensaje de respuesta a la consulta:
Campo
PRECABECERA+CAB
ECERA
Código
Descripción
Se responden los mismos
valores que se enviaron.
Tipo de mensaje: REN
Espacio, usado para delimitar
Separador
campo = '<FS>'
Offline, referencia
Online, referencia del
Referencia
operador. Se completa con
espacios a la derecha.
Código RespuestaCódigos de respuesta e
interpretación. Posibles
valores:
José Luis Pedrosa Montes
F/V
Formato
Longitu
d
F Alfanumérico
54
F Alfanumérico
3
F Alfanumérico
1
F
F
Numérico
2
39
Pasarela X25­IP
Campo
Separador
Texto
Separador
Trailer ó Cola
CheckSum
José Luis Pedrosa Montes
Descripción
Se especifican mas adelante
los posibles valores
Espacio, usado para delimitar
campo = '<FS>'
Texto descriptivo de error.
Espacio, usado para delimitar
campo = '<FS>'
Valor constante usado como
delimitador de trama,
Secuencia fija =FAAF
CheckSum de 2 bytes
F/V
Formato
F Alfanumérico
Alfanumérico
Longitu
d
1
40
F Alfanumérico
1
F Hexadecimal
4
F Hexadecimal
2
40
Pasarela X25­IP
4.8 Resumen de códigos de respuestas
VENTAS
ACK ­ Transacción realizada.
NOP 01 – Identificador de Terminal incorrecto
NOP 02 – Clave cliente errónea
NOP 03 ­ Cantidad incorrecta.
NOP 04 ­ Error de aplicación.
NOP 05 ­ Error de protocolo.
NOP 06 – Trama mal formada
NOP 07 ­ Otro error.
NOP 08 – Impuesto no valido para provincia
NOP 11 ­ La transacción ya existe.
NOP 12 ­ CIF o SFID incorrecto.
NOP 14 – Clave operador errónea
NOP 15 ­ Operación no permitida en esta tarjeta.
NOP 16 – Operación rechazada
NOP 17 ­ Numero de teléfono no corresponde al operador.
NOP 18 – Error interno al servidor.
NOP 19 – Tiempo sobrepasado.
NOP 20 – Servicio no disponible temporalmente.
DEVOLUCIONES
DEV 00 ­ Devolución realizada.
DEV 01 – Transacción ya anulada.
DEV 02 ­ No se acepta la anulación (el crédito es inferior a la cantidad a anular).
CONSULTAS
CON 00 ­ Transacción realizada.
CON 02 ­ La transacción no existe.
CON 03 ­ Transacción en proceso.
José Luis Pedrosa Montes
41
Pasarela X25­IP
4.9 Tramas contables (fin de día)
El proceso contable de transacciones se realiza a través de una petición contable. Esta operación proporciona la información sobre las recargas realizadas por un terminal en el sistema. Se debe lanzar diariamente y es una operación de carácter informativo.
Devuelve la información ordenada por operador y tipo de recarga. La información final es el operador, el tipo de recarga, el número de recargas efectivas (aquellas sobre las que no se ha realizado una anulación) y el importe total de estas.
Para cerrar la información sobre las recargas realizadas, el terminal envía una trama que desencadena la generación de los totales de las recargas realizadas ordenadas por operador y tipo de operación.
Trama de petición.
Longitud
CABECERA
Versión
Resultado
previo
Usuario
Administrador
Código
comercio
Código
terminal
Fecha
Operador
Producto
Longitud de la trama
F
Alfanumérico.
2
Valor fijo: “04”
Solo utilizado para
recargas.
Se permite a la entidad,
asignar un usuario de
seguridad que sera
validado en la recepción
de la petición
Identifica el comercio
(Merchant).
Identifica el terminal
asociado al comercio.
‘ddmmaaaahhmmss’
Solo utilizado para
recargas, devoluciones y
consultas. Completar con
ceros por defecto.
F
Numérico
2
F
Numérico
2
F
Alfanumérico
F
Numérico
8
F
Alfanumérico
8
F
Numérico
17
F
Numérico
4
F
Numérico
8
Solo utilizado para
recargas, devoluciones y
consultas. Completar con
ceros por defecto.
José Luis Pedrosa Montes
42
Pasarela X25­IP
Longitud
CUERPO DE
LA TRAMA
Código
Separador
Trailer ó Cola
CheckSum
Longitud de la trama
F
Alfanumérico.
2
Identifica el tipo de
operación:
F
Alfanumérico
3
F
Alfanumérico
1
F
Hexadecimal
4
F
Hexadecimal
2
FDDI
Espacio, usado para
delimitar campo =
'<FS>'
Valor constante usado
como delimitador de
trama, Secuencia fija
=FAAF
CheckSum de 2 bytes
Respuesta petición correcta
En el caso de no haber recargas desde el último fin de día la trama de respuesta coincide con la de petición.
Campo
V/F
PRE-CABECERA
Descripción
Se responde la misma
cabecera que llega con la
petición.
Tipo de operación:
Código
FIN
Separador
Separador
Tipo de
operación
Separador
Operador 1
Separador
Espacio
Pipe (|)
off – Operación offline.
onl – Operación online.
Pipe (|)
Nombre del operador.
Pipe (|)
Número de recargas
efectivas.
Pipe (|)
Valor en euros del total de
recargas.
Valor constante usado
como delimitador de
trama, Secuencia fija
Recargas
Separador
Importe
Trailer ó Cola
José Luis Pedrosa Montes
Formato
Longitud
Alfanumérico
54
f
Alfanumérico
3
f
f
Alfanumérico
Alfanumérico
1
1
f
Alfanumérico
3
f
f
f
Alfanumérico
Alfanumérico
Alfanumérico
1
Variable
1
f
Numérico
Variable
f
Alfanumérico
1
f
Numérico
Variable
F
Hexadecimal
4
43
Pasarela X25­IP
Campo
Descripción
=FAAF
CheckSum de 2 bytes
CheckSum
V/F
Formato
Longitud
F
Hexadecimal
2
Respuesta petición incorrecta
Todos los valores de los campos son fijos.
Campo
PRECABECERA
CABECERA
CUERPO DE
LA TRAMA
Código
Descripción
Se responde la misma
cabecera que llega con la
petición.
V/F
Formato
Longitud
Alfanumérico
54
Alfanumérico
3
Espacio
Alfanumérico
1
Único valor posible “0”
Numérico
1
Espacio
“PETICIÓN INCORRECTA”
Valor constante usado
como delimitador de
trama, Secuencia fija
=FAAF
CheckSum de 2 bytes
Alfanumérico
Alfanumérico
1
19
F
Hexadecimal
4
F
Hexadecimal
2
Identifica el tipo de
operación que se realiza
en el sistema, valor:
FIN
Separador
Código de
respuesta
Separador
Mensaje
Trailer ó Cola
CheckSum
José Luis Pedrosa Montes
44
Pasarela X25­IP
5 DISEÑO DE LA PASARELA
José Luis Pedrosa Montes
45
Pasarela X25­IP
5.1 X25 y Api Eicon
X25 es un estándar UIT-T para redes de área amplia de conmutación de paquetes. Su
protocolo de enlace, LAPB, está basado en el protocolo HDLC proveniente de IBM. Establece
mecanismos de direccionamiento entre usuarios, negociación de características de comunicación y
técnicas de recuperación de errores. Los servicios públicos de conmutación de paquetes admiten
numerosos tipos de estaciones de distintos fabricantes. Por lo tanto, es de suma importancia definir
la interfaz entre el equipo del usuario final y la red.
La norma X25 es el estándar para redes de paquetes recomendado por CCITT, el cual
emitió el primer borrador en 1974. Este original sería revisado en 1976, en 1978 y en 1980, y de
nuevo en 1984, para dar lugar al texto definitivo publicado en 1985. El documento inicial incluía
una serie de propuestas sugeridas por Datapac, Telenet y Tymnet, tres nuevas redes de conmutación
de paquetes.
La X25 se define como la interfaz entre equipos terminales de datos y
equipos de terminación del circuito de datos para terminales que trabajan en modo paquete sobre
redes de datos públicas. Las redes utilizan la norma X25 para establecer los procedimientos
mediante los cuales dos ETD que trabajan en modo paquete se comunican a través de la red. Este
estándar pretende proporcionar procedimientos comunes de establecimiento de sesión e
intercambio de datos entre un ETD y una red de paquetes (ETCD). Entre estos procedimientos se
encuentran funciones como las siguientes: identificación de paquetes procedentes de ordenadores y
terminales concretos, asentimiento de paquetes, rechazo de paquetes, recuperación de errores y
control de flujo. Además, X25 proporciona algunas facilidades muy útiles, como por ejemplo en la
facturación a estaciones ETD distintas de la que genera el tráfico. Dentro de la perspectiva de X25,
una red opera en gran parte como un sistema telefónico. Una red X25 se asume como si estuviera
formada por complejos conmutadores de paquetes que tienen la capacidad necesaria para el
enrutamiento de paquetes. Los anfitriones no están comunicados de manera directa a los cables de
comunicación de la red. En lugar de ello, cada anfitrión se comunica con uno de los conmutadores
de paquetes por medio de una línea de comunicación serial. En cierto sentido la comunicación entre
un anfitrión y un conmutador de paquetes X25 es una red miniatura que consiste en un enlace
serial. El anfitrión puede seguir un complicado procedimiento para transferir paquetes hacia la red.
El estándar X25 no incluye algoritmos de , pero conviene resaltar que, aunque los interfaces
ETD/ETCD de ambos extremos de la red son independientes uno de otro, X25 interviene desde un
José Luis Pedrosa Montes
46
Pasarela X25­IP
extremo hasta el otro, ya que el tráfico seleccionado se encamina desde el principio hasta el final. A
pesar de ello, el estándar recomendado es asimétrico ya que solo se define un lado de la interfaz
con la red(ETD/ETCD).
Ha sido la base para la implementación de varios protocolos. Entre los protocolos comúnmente asociados con el modelo OSI, el conjunto de protocolos conocido como X25 es probablemente el mejor conocido y el más ampliamente utilizado. X25 fue establecido como una recomendación de la ITU­TS (Telecommunications Section de la International Telecommunications Union), una organización internacional que recomienda estándares para los servicios telefónicos internacionales. X25 ha sido adoptado para las redes públicas de datos y es especialmente popular en Europa.
La recomendación X25 para el nivel de paquetes coincide con una de las recomendaciones del tercer nivel OSI. X25 abarca el tercer nivel y también los dos niveles más bajos. El interfaz de nivel físico recomendado entre el ETD y el ETCD es el X21. X25 asume que el nivel físico X21 mantiene activados los circuitos T(transmisión) y R(recepción) durante el intercambio de paquetes. Asume también, que el X21 se encuentra en estado 13S(enviar datos), 13R(recibir datos) o 13(transferencia de datos). Supone también que los canales C(control) e I(indicación) de X21 están activados. Por todo esto X25 utiliza el interfaz X21 que une el ETD y el ETCD como un "conducto de paquetes", en el cual los paquetes fluyen por las líneas de transmisión(T) y de recepción(R). El nivel físico de X25 no desempeña funciones de control significativas. Se trata más bien de un conducto pasivo, de cuyo control se encargan los niveles de enlace y de red.
En X25 se supone que el nivel de enlace es LAPB. Este protocolo de línea es un conjunto de HDLC. LAPB y X25 interactúan de la siguiente forma: En la trama LAPB, el paquete X25 se transporta dentro del campo I(información). Es LAPB el que se encarga de que lleguen correctamente los paquetes X25 que se transmiten a través de un canal susceptible de errores, desde o hacia la interfaz ETD/ETCD. La diferencia entre paquete y trama es que los paquetes se crean en el nivel de red y se insertan dentro de una trama, la cual se crea en nivel de enlace. Para funcionar bajo el entorno X25, LAPB José Luis Pedrosa Montes
47
Pasarela X25­IP
utiliza un subconjunto específico de HDLC. Los comandos que maneja son: ●
Información(I), ●
Receptor Preparado(RR), ●
Rechazo(REJ), ●
Receptor No Preparado(RNR), ●
Desconexión(DSC), ●
Activar Modo de Respuesta Asíncrono(SARM) ●
Activar Modo Asíncrono Equilibrado(SABM). Las respuestas utilizadas son las siguientes: Receptor Preparado(RR), Rechazo(REJ),
Receptor No Preparado(RNR), Asentimiento No Numerado(UA), Rechazo de Trama(FRMR) y
Desconectar Modo(DM). Los datos de usuario del campo I no pueden enviarse como respuesta. De
acuerdo con las reglas de direccionamiento HDLC, ello implica que las tramas I siempre
contendrán la dirección de destino con lo cual se evita toda posible ambigüedad en la interpretación
de la trama. X25 exige que LAPB utilice direcciones específicas dentro del nivel de enlace. Tanto
X25 como LAPB utilizan números de envió(S) y de recepción(R) para contabilizar el tráfico que
atraviesan sus respectivos niveles. En LAPB los números se denotan como N(S) y N(R), mientras
que en X25 la notación de los números de secuencia es P(S) y P(R).
A continuación adjunto un esquema en el que se puede ver de una manera gráfica la
relación X25 con la capa de protocolos OSI
José Luis Pedrosa Montes
48
Pasarela X25­IP
Por los motivos expuestos anteriormente se ha comprado una tarjeta X25 eicon C95 v.2. La API
proporcionada no es un estándar, por lo tanto requiere un estudio en detalle, ya que puede
condicionar el diseño de la pasarela, al desconocer las funcionalidades que implementa y a que
nivel.
La API en C para el uso de estas tarjetas, consta esencialmente de unos fichero de
cabeceras, en el que se definen los tipos de datos, así como los prototipos de las funciones, en el
momento del compilado, se enlaza la pasarela con las librerías, que son las encargadas de
relacionarse con el modulo del kernel (driver). Adjunto un diagrama explicativo:
José Luis Pedrosa Montes
49
Pasarela X25­IP
Al usar las librerías, se nos libera de todas las capas de protocolos inferiores, salvo
acceder a algunos bit característicos de niveles inferiores, no obstante, la arquitectura X25 no se
adapta al modelo IP al que estamos acostumbrados, apoyándonos directamente en TCP o UDP,
pudiendo tener cualquier protocolo en la capa de enlace/físico.
José Luis Pedrosa Montes
50
Pasarela X25­IP
5.2 Clases
Dentro de la lista de requisitos, es necesario tener en cuenta el numero 5 (R05 control
de acceso) a la hora de plantear la estructura del programa. Se nos indico que la pasarela ha de tener
control de acceso, pero ninguna de las versiones del protocolo PRA tiene en cuenta esta
funcionalidad, normalmente en X25 a tales efectos se usa un campo llamado Call User Data. Al
tratarse de una red de comunicación de paquetes exclusiva, junto con el hecho es con conexión, es
decir, hay un procedimiento de llamada, la hace muy segura, es decir, es como si se tratase de una
llamada módem a módem en un red TRC, la única manera de interceptar las comunicaciones es a
nivel físico, por todo esto, no se implementaran medidas de seguridad adicionales.
Cuando realizamos una llamada, se incluye un campo de como máximo 12 bytes, este es el CALL
USER DATA, CUD en adelante, la pasarela debe recoger ese campo y usarlo para validar el acceso,
así como decidir a que IP:PUERTO encaminarla.
A continuación se puede ver un paquete de llamada X25: José Luis Pedrosa Montes
51
Pasarela X25­IP
El campo CUD en detalle:
Si buscamos en la API, nos encontramos la siguiente función:
OSEXTERN OSINT OSFNDEF x25xlisten (
OSINT OSDTPTR cid,
OSINT waitmode,
OSINT port,
OSINT info,
struct x25data OSDTPTR facility,
struct x25data OSDTPTR udata,
char OSDTPTR remote,
char OSDTPTR local,
void (OSFNPTR post)(struct x25doneinfo *));
Esta función nos permite “escuchar” llamadas X25, antes de ser ejecutada, la variable local, debe estar inicializada con el NRI local en el que queremos escuchar, es instalaciones sencillas esto es simplemente en NRI de la linea en la que escuchamos, no obstante, no siempre es trivial, ya que es muy común el uso de extensiones (similares a las de una PBX), que puede ser indicadas en el proceso de marcado como un único numero. Las librerías esperan una cadena típica de C, es decir ASCII, con un '\0' al final de la cadena, también soportan el uso de caracteres comodines como '*' y '?'.
José Luis Pedrosa Montes
52
Pasarela X25­IP
La variable PORT, se usa para indicar la tarjeta que debe realizar esta acción, la numeración en Linux empieza en 1 y acaba en 48.
El campo CID, intenta imitar el comportamiento de file descriptor de Linux, cuando la llamada a esta función termina (sin errores) nos asigna un entero con el descriptor de la conexión, no obstante esto pese a intentar facilitar la programación, lleva a una confusión puesto que no es compatible con las funciones de Linux que soportan FILE DESCRIPTORS como pueda ser la función SELECT, en la cual puedes “interrogar” tantos FD's como se quiera, pudiendo ser de diferentes tipos, por ejemplo, un socket, y el descriptor de la entrada por consola. Lo cual nos lleva a analizar en detalle los modos de funcionamiento de las librerías, estos modos son elegidos mediante el campo WAITMODE, siendo desde un punto de vista lógico, síncrono y asíncrono: Si especificamos la macro X25NOWAIT, las llamadas a las funciones son asíncronas, es decir, simplemente manda la orden a las librerías y devuelve el control a la pasarela, siendo necesario llamar a x25done para comprobar el estado de la operación. En modo X25WAIT, tenemos el funcionamiento síncrono, es decir, la llamada a la función espera a que se complete (satisfactoriamente o no) y regresa al programa. Estos modos de funcionamiento pese a parecer un pequeño detalle a la hora de codificar la aplicación, resulta fundamental y determinante a la hora de elegir el diseño, este apartado se vera en detalle cuando se analicen en detalle el requisito R06.
El resto de parámetros de la función son asignados por la librería cuando se ha completado la llamada, el campo UDATA, es el que contendrá el contenido del campo CUD de la llamada recibida:
José Luis Pedrosa Montes
53
Pasarela X25­IP
Con el campo REMOTE, tendremos el NRI que generó la llamada, es importante señalar, que esta función no acepta las llamadas, simplemente nos notifica de ellas, siendo necesario, posteriormente llamar bien a X25XACEPT para aceptar la llamada o X25HANGUP para rechazarla, la analogía con IP es bastante explicita (listen y accept).
Teniendo en cuenta esto, una vez completada la función LISTEN, tenemos todos los datos que necesitábamos para aceptar una llamada o rechazarla y saber a que IP:PORT debería encaminarla. Ya que estos dos campos unidos, representan una “clave” es decir, siempre para un mismo NRI + CUD, siempre vamos a encaminarla hacia un mismo destino, puede ser usado como la clave de una tabla hash, en la que se almacenen las configuraciones de los destinos a encaminar.
Experiencias anteriores a este proyecto (otras pasarelas), recomiendan resolver una única vez, al inicio los nombres de maquina, guardar la dirección IP y usarla en futuras ocasiones ya convertida. Por esto al leer el fichero de configuración se resolverán y se guardaran en una estructura, que se puede ver en el fichero gateway.h:
typedef struct gwcnf
{
struct in_addr addr;
char nri[X25_ADDRLEN+X25_ADDREXT+2];
int port;
char cud[9];
José Luis Pedrosa Montes
54
Pasarela X25­IP
struct x25data udata;
char key[32];
}gwcnf;
Al leer el fichero, la llamada hostinfo=gethostbyname(ip), resuelve, para después
guardarlo en una gwcnf, addr.s_addr=((struct in_addr *)hostinfo->h_addr_list[0])->s_addr;
Como hash table se usara un Map de las librerías standart de C++, usando como clave
el propio valor KEY de la estructura, esto es mas conveniente que usar una clave externa a la
estructura, por que de esta manera, es mas sencilla la gestión de la memoria:
En un MAP de C++ no es sencillo trabajar con claves de tipo “(const) char *” que son
las adecuadas para este caso, ya que si al insertar un nuevo elemento con una variable de una
función local, al salir de esa función, ese puntero deja de tener el sentido que tenia en esa función,
ya que el stack no es el mismo, sin tener en cuenta de que si se añadiesen dos elementos a la hash
en una misma función solo tendría validez el último ya que el puntero seria el mismo.
La pasarela tiene la funcionalidad de recargar el fichero de configuración siempre que
se quiera, ejecutando “/etc/init.d/x25ipd reload” siendo necesario liberar toda la memoria usada, si
las claves fuesen externas a la estructura almacenada seria mas complejo.
Por todas estas razones se he definido la tabla hash de la siguiente manera:
struct strCmp
{
bool operator()( const char* s1, const char* s2 ) const
{
return (strcmp( s1, s2 ) < 0);
}
};
map
<const char*, gwcnf*, strCmp> gwtable;
Pese a ser una cantidad pequeña de memoria, evitamos un “memory leak” siempre desaconsejable.
José Luis Pedrosa Montes
55
Pasarela X25­IP
Los campos CUD y NRI no eran estrictamente necesarios, se han incluido para poder presentar mas
adecuadamente los datos en un registro de log.
Esta tabla hash se rellena durante el inicio del programa (o al ejecutar un reload), teniendo todos los
datos necesarios, para encontrar de manera eficiente las configuraciones. Buscar en un MAP
requiere mas lineas de lo que pudiera parecer intuitivamente, para mejorar la legibilidad del código,
se ha codificado la función: gwcnf *isValid(char *key), a la que se le pasa una clave de hash y
devuelve la estructura con la configuración asociada o NULLen el caso de no ser valida.
doService
X25CALL
HASH TABLE
NRI+CUD
GWCONFIG Manage
throwThread
En el diagrama se han nombrado las funciones que realizan cada paso, serán analizadas en
profundidad mas adelante.
Como se puede observar, la API de Eicon no es estándar, y podría dificultar el uso de
otro hardware X25 como puede ser las también excelentes FarSync, para facilitar el cambio en caso
de así considerarlo necesario, se ha creado una clase para representar la conexión.
Se han creado métodos de abstracción de todas las funciones, de manera que la pasarela en ningún
momento llama a funciones de los drivers de eicon, apoyándose en esta clase para todas las
José Luis Pedrosa Montes
56
Pasarela X25­IP
interacciones.
Sin tener acceso a las API's de otros fabricantes, se ha intentado ser lo mas genérico
posible, con una función Init, listen, accept, send y recv, también se han programado setters para
poder introducir variables de configuración por lo que es probable que si se decidiese el cambio,
bastaría con cambiar la clase interfaz de la línea y la pasarela funcionaría correctamente. Esta clase
se llama X25if, puede encontrase en X25interface.h y cpp, la cual se representa con el siguiente
diagrama de clase:
Es imprescindible llamar al método Init(), ya que es el que ejecuta X25Init(), llamada
que inicializa las librerías EICON.
SendData y getData, se comportan como los clásicos send y recv, pero se les ha
añadido la funcionalidad extra de poder esperar solo durante un cierto periodo de tiempo,
especificado en el valor de timeout.
Anterior mente he hecho referencia a que la pasarela ha de ser un demonio y el hecho de que es
complicado interactuar con el, a continuación voy a hacer un análisis en detalle de los porqués.
Un demonio, daemon ó dæmon es un tipo especial de proceso que se ejecuta en
segundo plano en vez de ser controlado directamente por el usuario (es un proceso no interactivo).
José Luis Pedrosa Montes
57
Pasarela X25­IP
Este tipo de programas se ejecutan de forma continua (infinita) , vale decir, que funciona sin tener
relación con una terminal o consola y, consecuentemente, sin interactuar con un humano.
En informática se utiliza el término daemon como abreviación de "Disk And Environment
MONitor" o monitor de entorno y disco, con el cual se hace referencia al software encargados de
administrador y controlar los servicios de red.
●
No disponen de una interfaz directa con un humano, ya sea gráfica o textual.
●
No hacen uso de la entradas y salidas estándar para comunicar errores o registrar su
funcionamiento, sino que usan archivos del sistema en zonas especiales (/var/log/ en los
UNIX más modernos) o utilizan otros demonios especializados en dicho registro como el
syslogd
Existen varios motivos para que este comportamiento sea así: seguridad, de esta manera nadie
puede interactuar con el, también hace que pueda ser cargado al inicio de sistema al entrar en el
RUNLEVEL que queramos, típicamente después de haber arrancado la red (3), de manera que se
comporta como un servicio de red. Se consiguen otras ventajas, por ejemplo que no pueda ser
arrancado dos veces, ya que al forzosamente ser lanzado desde “/etc/init.d” el script de lanzamiento
comprueba que exista otro proceso del mismo tipo, no obstante dado que ese es un paso
fundamental, el propio proceso establece un fichero de LOCK con el pid del proceso.
Durante el arranque, la pasarela debe realizar ciertas operaciones para convertirse en un demonio:
1. Comprobar que no existe el fichero de LOCK:
string fName=GetFileLockName();
if(access(fName.c_str(), F_OK)!=0)
2. Separarse de la SHELL que lo ejecuto, esto se consigue con un FORK
pid=fork();
3. Convertirse en el id de la sesión para no ser un proceso huérfano:
sid=setsid();
José Luis Pedrosa Montes
58
Pasarela X25­IP
4. Por motivos de seguridad cambiar el directorio de trabajo así como ajustar los permisos:
chdir("/");
umask(0);
5. Crear el fichero de LOCK.
Este comportamiento a la vez reviste un problema practico, como interactuar con un
proceso que ha sido diseñado para que sea hermético. Se ha encontrado un equilibrio entre
totalmente hermético e interactivo.
El proceso una vez arrancado escucha ciertas señales (SIGNAL), estas señales pueden
ser enviadas desde una consola con el mandato kill o bien otro proceso.
Se puede ver en las siguientes líneas de código:
void handler(int sig_number)
{switch (sig_number)
{
case SIGUSR2:
signalLog->doAppLog("Reloading configuration file... (user request)\n");
pthis->readConfiguration():
break;
default:
bRing=false;
break;
}
}struct sigaction sa;
memset(&sa, 0, sizeof(sa));
sa.sa_handler= &handler;
José Luis Pedrosa Montes
59
Pasarela X25­IP
sigaction(SIGTERM, &sa, NULL);
sigaction(SIGUSR1, &sa, NULL);
sigaction(SIGUSR2, &sa, NULL);
Con estas líneas se define, cual tiene que ser la función que maneje las señales, y la propia función,
en la que se ve un switch que realiza el log adecuada para cada señal y la propia acción.
Toda la gestión del proceso, señales, lectura y parseo del fichero de configuración se ha hecho con
dos clases, para conseguir un código reutilizable, una clase con algunos métodos virtuales
(abstractos) que deben ser implementados por los que hereden de ella (Cdaemon) y la clase que la
hereda (daemongw) los diagramas de clase se adjuntan a continuación:
José Luis Pedrosa Montes
60
Pasarela X25­IP
Como se puede ver en el diagrama, los métodos RUN e INITDEMON, son virtuales y es Demongw
quien los implementa, esto es lógico puesto que es dependiente de cada proceso. Se ha creado un
método getTotalMemory, que accede al sistema virtual /proc y captura el uso de memoria, aparte
de motivos informativos, (se muestra al llamar a showStatus), es un dato importante a la hora de
saber si hay alguna fuga de memoria, ya que este proceso debe estar corriendo durante el mayor
tiempo posible (meses), y de haber algún problema quedaría plasmado pues se iría degradando el
uso de memoria, que crecería indefinidamente en lugar de mantenerse dentro de unas cotas tanto
inferior, como superior, es decir: se usa memoria dinámica durante la ejecución, cuanta mas carga
de trabajo, mas memoria consumirá, pero siempre dentro de unos limites, cosa que no ocurriría si
alguna parte de esa memoria no se liberase.
En algunos de estos métodos así como en funciones externas a la clase, se pueden observar variables del tipo puntero al mismo objeto, esto se debe a que las funciones que proporciona el sistema operativo, no admiten como argumentos métodos sino que tienen que recibir funciones externas a una clase, han de crearse métodos auxiliares dentro de la clase que llamen a funciones externas para que se puedan ejecutar las llamadas del sistema operativo, expongo un ejemplo:
Para el manejo de señales, como expuesto arriba, es necesario indicar que función debe ser llamada cuando llega una señal:
Crear una variable del tipo sigaction y limpiarla:
struct sigaction sa; memset(&sa, 0, sizeof(sa));
Asignar que función ha de ser llamada:
sa.sa_handler= &handler;
Notificar al sistema operativo:
sigaction(SIGTERM, &sa, NULL);
La función handler es externa a una clase, si pusiéramos un método de una clase con los tipos de José Luis Pedrosa Montes
61
Pasarela X25­IP
datos correctos:
void DemonPasarell::Demo(int sig)
{}
Indicamos que esta es la función:
sa.sa_handler= &DemonPasarell::Demo;
Al compilar nos encontramos con el siguiente error:
demongw.cpp:40: error: cannot convert ‘void (Demongw::*)(int)’ to ‘void (*)(int)’ in assignment
Error que tampoco es solucionable con casting, esos son los motivos de que algunos de los que deberían ser métodos de una clase, se hayan implementado como funciones. Pese a este inconveniente este modelo de procesos, cumple todos los requisitos de seguridad, y nos permite dar un cierto nº de ordenes a la pasarela, una de las cuales como se comento unas lineas antes es la de reload, funcionalidad que no fue especificada como requisito, pero durante el desarrollo del proyecto se considero muy recomendable, permitiéndonos cambiar “en caliente” las rutas sin necesidad de reiniciarla y tener que o bien echar a los clientes o bien esperar indefinidamente a que todos se vayan.
Para hacer esto posible, junto con el uso de señales el método READCONFIGURATION, en primer lugar comprueba la tabla hash actual, eliminando todos sus elementos así como liberando la memoria asociada a cada una de sus filas, para después parsear el fichero de configuración y llenar la tabla con los nuevos contenidos.
Para adaptarse al estilo de ficheros de configuración de demonios en Linux, se ha hecho uso de las librerías “iniParser: stand­alone ini Parser library in ANSI C”. El fichero de configuración será explicado en profundidad en el capítulo de instalación, simplemente expongo una parte para reflejar “estilo demonio Linux”
[GLOBAL]
localnri = "111111111111"; Nri en el que escucha la aplicación (obligatorio)
José Luis Pedrosa Montes
62
Pasarela X25­IP
syslog = yes; si la apliaccion debe hacer sislog
app_path = "/var/log/x25ipd/x25ipd.log"
trx_path = "/var/log/x25ipd/x25trx.log"
deb_path = "/var/log/x25ipd/x25deb.log"
[SECTOR/1]
nombre = "XXXXXXX"; nombre descriptivo para el sector
nri_cud1 = "1111111111:414E4453"; Nri+CUD del cual se aceptaran peticiones
ip_port1 = "10.42.4.110:1500"
Visto este fichero, considero conveniente explicar como se resolvió el requisito R02, el registro de transacciones en Log y syslog. La experiencia en el cliente para el que se desarrolla la pasarela nos dice que este punto es vital, ya que en numerosas ocasiones en necesario seguir el recorrido que hizo una determinada transacción. Se ha diseñado una clase de log, que puede manejar 3 ficheros diferentes simultáneamente. Expongo su diagrama de clase para poder explicarlo con mayor facilidad:
José Luis Pedrosa Montes
63
Pasarela X25­IP
Lo que mas llama la atención de esta clase es la variable singleton, acompaño una rápida explicación de singleton:
El patrón de diseño singleton (instancia única) está diseñado para restringir la creación de objetos pertenecientes a una clase o el valor de un tipo a un único objeto.
Su intención consiste en garantizar que una clase sólo tenga una instancia y proporcionar un punto de acceso global a ella.
El patrón singleton se implementa creando en nuestra clase un método que crea una instancia del objeto sólo si todavía no existe alguna. Para asegurar que la clase no puede ser instanciada nuevamente se regula el alcance del constructor (con atributos como protegido o privado).
La instrumentación del patrón puede ser delicada en programas con múltiples hilos de ejecución. Si dos hilos de ejecución intentan crear la instancia al mismo tiempo y esta no existe todavía, sólo uno de ellos debe lograr crear el objeto. La solución clásica para este problema es utilizar exclusión mutua en el método de creación de la clase que implementa el patrón.
Las situaciones más habituales de aplicación de este patrón son aquellas en las que dicha clase controla el acceso a un recurso físico único (como puede ser el ratón o un archivo abierto en modo exclusivo) o cuando cierto tipo de datos debe estar disponible para todos los demás objetos de la aplicación.
El patrón singleton provee una única instancia global gracias a que:
•
La propia clase es responsable de crear la única instancia. •
Permite el acceso global a dicha instancia mediante un método de clase. •
Declara el constructor de clase como privado para que no sea instanciable directamente. Todavía no se ha explicado el apartado mas complejo de la pasarela que es en cuantas hebras debe estar separado el proceso, cuantas por cliente etc... aun así adelanto que se usarán mas de una, y es muy conveniente este tipo de patrón. Simplicidad de código, así como claridad son otros de las ventajas añadidas de usar este tipo de patrón, ya que si no fuese instanciable desde José Luis Pedrosa Montes
64
Pasarela X25­IP
cualquier parte del código sería necesario pasar una referencia del objeto a una gran cantidad de métodos, ya que gran partes del código necesitan dejar registro de las operaciones realizadas así como el resultado de las mismas.
Como el patrón indica los constructores son privados y solo pueden ser ejecutados desde dentro de la propia clase, para conseguir una referencia (puntero) a él, es necesario ejecutar el método getInstance(), que regula la creación del objeto. Al tratarse de un singleton y no ser accesible su constructor es necesario un método Init(), el cual abre los ficheros, antes se ha debido llamar a setXXXPath para indicarle la ruta del fichero.
Como se puede ver en el diagrama hay 3 ficheros de log, uno destinado a transacciones (doTrxLog), funcionamiento de la aplicación (doAppLog), y otro con fines de depuración (doDebLog), como se puede ver para el registro de transacciones se ha sobrecargado con uno y dos operadores, en uno de ellos simplemente se le pasa el mensaje a escribir, y en otro se le pasa además un identificador de transacción.
Debido al carácter multihilo de esta aplicación es necesario incorporar un semáforo para evitar que distintos hilos accedan al mismo fichero de manera recurrente. Solo se ha considerado oportuno añadirlo en el fichero de transacciones que es el que realmente esta expuesto a esta clase de colisiones. Esto nos asegura que las lineas del fichero de log sean consecuentes así como evitar posibles errores en el programa:
int logClass::doTrxLog(char *mes)
{
pthread_mutex_lock(&trxSem);
int res=­1;
if (transFd>0)
{
char charTime[100]="";
char logMes[5*1024]="";
time_t t;
José Luis Pedrosa Montes
65
Pasarela X25­IP
struct tm *sTM;
t=time(NULL);
sTM= localtime(&t);
strftime(charTime, 100, "%Y/%m/%d %H:%M:%S", sTM);
res=sprintf(logMes,"%s %s", charTime, mes);
res=write(transFd, logMes, res);
}
pthread_mutex_unlock(&trxSem);
return (res);
}
Como puede verse las operaciones que se realicen dentro de este método están aseguradas por trxSem, también se ha contado con la posibilidad de que algún fichero de texto no quiera ser usado y por lo tanto no se haya inicializado, y se comprueba el valor del descriptor del fichero, se devuelve el número de bytes escritos o ­1 en caso de error.
Una vez mas la experiencia en el cliente, y saber su manera de trabajar, nos ha hecho decidirnos por el uso de ficheros sin buffer intermedio (por defecto en tipos FILE*). Es muy usual en una empresa monitorizar el estado de un proceso o pasarela como en este caso mediante el comando “tail ­f FILENAME” el cual imprime el final del fichero, la opción ­f hace que sea de manera continua, si se usan ficheros con buffer, las escrituras se retardan hasta que el sistema operativo considera adecuado por rendimiento volcarlo, lo cual genera que el fichero sea mostrado a grandes saltos en lugar de secuencialmente línea a línea, para ello se abren los ficheros de la siguiente manera: transFd = open(transPath, O_WRONLY | O_APPEND | O_CREAT, S_IRWXU);
De un modo mas intuitivo: abre el fichero para escritura, creándolo si no existe, y posicionando el indicador al final del fichero (añadir).
A continuación se explica el diseño final de la parte software que hace realmente de pasarela, la clase gateway:
José Luis Pedrosa Montes
66
Pasarela X25­IP
Empezaré comentando la clase mas trivial, HUMANTEXT: como se ha podido ver en el documento que describe el protocolo PRA, contiene caracteres no imprimibles como puede ser el código ASCII 28 (decimal), esta función convierte el buffer enviado y reemplaza esos caracteres por una representación de su valor, por ejemplo el mencionado 28 se substituiría por cuatro caracteres: “<FS>”. Esto hace que los ficheros de registro de transacciones sean mucho mas legibles y se detecten problemas con mayor rapidez.
Como en todo demonio hay una función en la que el programa esta perpetuamente, normalmente en un bucle del tipo “while(true)”, en el caso de X25ipd esta función, es DOSERVICE(). En este caso no se ha usado un “while(true)”, ya que se desea poder parar la aplicación, al tratarse de transacciones, no es factible matar el proceso, se requiere una salida ordenada, para conseguir tal efecto se ha escogido la siguiente solución:
while(bRing)
{
José Luis Pedrosa Montes
67
Pasarela X25­IP
ESCUCHAR LLAMADAS X25 }
La variable bRing (boolean Running) es la que controla que el programa no termina, para cambiar el valor de esta variable se usa el método anteriormente explicado de capturas de señales, de manera que cuando llega una señal SIGKILL SIGSTOP, esa variable pasa a tomar valor FALSE y abandona el bucle principal, esperando a que las transacciones en vuelo acaben, pero no aceptando mas llamadas. Ahora paso a comentar como se ha satisfecho el requisito R08, los diferentes posibles modos de funcionamiento:
Los hosts PRA solo soportan una transacción por cada conexión TCP, a simple vista pudiera parecer trivial, pero hace que la pasarela tenga que llevar una lógica del contenido de las transacciones, ya que tenemos que hacer corresponder una relación del tipo 1 (x25) a N (IP) para cada uno de los clientes que se conectan. Antes de continuar incorporo un gráfico explicativo:
Como se aprecia, por cada cliente X25 tenemos N conexiones TCP lo cual nos obliga a saber para cada paquete X25 que conexión TCP corresponde. Esto ibliga a analizar las tramas recibidas y por lo tanto el protocolo PRA: Mirando los diferentes campos de las tramas del protocolo, parece haber un campo muy prometedor para ser considerado como diferente para trama (clave) , llamado Terminal Identifier, José Luis Pedrosa Montes
68
Pasarela X25­IP
(TID en adelante). El equipo técnico del cliente nos informó que dependiendo del medio por el que se efectúen las transacciones, se usan Terminales Virtuales, de manera que toda una entidad usa un único terminal, obligándonos a descartar el TID como identificador de trama. Se consideró un segundo campo como clave el “TimeStamp + Nº de secuencia”, una vez mas los técnicos nos informaron de que ese campo no es necesariamente obligatorio y simplemente esta destinado para ayudar a los clientes a gestionar sus transacciones, y de hecho muchos de ellos lo rellenan con ceros. El mismo equipo técnico nos resolvió este problema indicándonos que la cabecera entera de la trama es lo único que identifica una transacción unívocamente, permaneciendo constante durante todo su recorrido: peticiones, respuestas y confirmaciones.
Esto significa que por cada trama X25 se ha de buscar la transacción a la que pertenece y por lo tanto su conexión TCP asociada, y en caso de no existir crear una nueva. De manera análoga a como se hizo con las llamadas (NRI y CUD) y encontrar su configuración IP asociada, he considerado idóneo el uso de una tabla hash, en la que el campo clave es la cabecera de la transacción y el elemento asociado es un objeto del tipo transacción que se crea a tales efectos. Antes de proseguir con el estudio del diseño, describo someramente la clase Transacción. José Luis Pedrosa Montes
69
Pasarela X25­IP
En primer lugar y para corregir posibles perdidas de paquetes o conexión, se ha incluido un time stamp (starttm struct timeval), que se marca con la hora del sistema al ejecutar la el método START(). A través del método setSockFd(), guardamos el handler o descriptor de fichero de la conexión asociada a esa transacción. Complementario a este método es HASEXPIRED(), que comprueba la fecha inicial con la actual y nos devuelve un true o false en función de si esa diferencia alcanza el tiempo de timeout.
A modo informativo, tiene diversos métodos para obtener los diferentes campos de la trama: GUESSOPERATION, GUESSVERSION, a ambos se les pasa como argumento el buffer leído, guardando en las variables internas al objeto los valores apropiados. Una vez mas se ha incluido el campo clave de la hash dentro de la clase, por los mismos motivos que se explicaron en el caso de las configuraciones IP, los métodos GETKEY y SETKEY son la interfaz para acceder a esas variables.
Dado que una transacción tiene siempre un FD asociado,he considerado oportuno codificar los métodos SENDATA Y RECVDATA, comportándose de una manera análoga a send y recv entandar de sockets.
El protocolo nos indica que hay ciertas transacciones que requieren confirmación y otras no, información necesaria para eliminar y cerrar transacciones, al llamar a los métodos GUESSOPERATION y GUESSVERSION, automáticamente el objeto determina si necesita o no confirmación esa transacción en concreto. Una vez con estos puntos claros, se puede comenzar a hacer un estudio de las diferentes posibilidades estructurales que se contemplaron y por que se eligió una frente a las otras.
Modelo 1: Secuencial monohilo, tiene grandes inconvenientes, el mas determinante es los retardos que introduce en el sistema en condiciones de bajo uso, ya que se ha de esperar secuencialmente a mensajes X25 y después IP. Para descartar este modelo, es imperativo indicar la manera de funcionar de las librerías Eicon. Al no tratarse de FD's entandar no se les puede interrogar con un select, que genera una muy buena relación entre carga de CPU y tiempo de respuestas, desde un punto de vista conceptual, esta función actúa como un polling de eventos. Eicon no proporciona una herramienta similar, simplemente nos da dos opciones, modo síncrono José Luis Pedrosa Montes
70
Pasarela X25­IP
X25WAIT y asíncrono X25NOWAIT, si usásemos el modo X25WAIT nos quedaríamos indefinidamente esperando mensajes, y en el caso de trabajar con varias transacciones simultaneas, se daría el caso de que deberíamos estar escuchando IP y sin embargo la función estar “estancada” en X25 provocando la perdida de transacciones, también es importante tener en cuenta que en ocasiones, si se produce un error y nos encontramos recibiendo, puede ser que la función no regrese jamas dejando los recursos muertos, este comportamiento es bastante poco frecuente, pero ocurre, y es importante tenerlo en cuenta en aplicaciones que no pueden reiniciarse y deber tener un uptime muy largo. En la página siguiente se muestra el esquema lógico:
José Luis Pedrosa Montes
71
Pasarela X25­IP
Modelo 2: Doble hilo: Este modelo (el finalmente escogido), se compone de dos hilos, uno de ellos se encarga del lado X25 y otro del lado IP así como de la lógica transaccional. Este modelo tiene un claro problema, la comunicación entre procesos, como intercambiar lo recibido a través de hilo X25 para ser enviado por el hilo.
Para conseguir esto, se ha creado una clase especial, llamada mtbuffer (multi thread safe buffer), un buffer orientado a linea protegido con semáforos, no trata la memoria como un continuo, sino como un conjunto de lineas, declarando una matriz no un array, esto es especialmente útil, para determinar que mensaje corresponde a cada transacción. Adjunto un esquema antes de seguir explicándolo:
Este esquema se reproducirá tantas veces como llamadas X25 concurrentes.
Como se puede observar la función (método) que se encarga de la conexión X25 se llama X25SIDE, la cual simplemente cicla entre recibir a través de la linea para escribir en el buffer de recepción y leer del buffer de envío para enviarlo al cliente.
Es la función encargada del lado IP quien además de enviar y recibir (bufferA­>IP, IP­>bufferB) se encarga de la gestión de la lógica de las transacciones, haciendo uso de los métodos proporcionados por la clase transacción. Son muchas las ventajas de este diseño, la “lógica de negocio” se traslada a la clase transacción, y basta con cambiar esa clase para implementar otro protocolo distinto, así mismo se reducen considerablemente los tiempos muertos en los que pudiera haber paquetes José Luis Pedrosa Montes
72
Pasarela X25­IP
esperando a ser recibidos o enviados, ya que hay un hilo para cada interfaz. Para las conexiones TCP se utilizara la función SELECT, permite añadir un número N de sockets y dormir el proceso durante un tiempo Y hasta que al menos uno de ellos tiene datos o expira el contador.
Esta clase no requiere mayor explicación salvo indicar que esta protegida con semáforos, de manera que es adecuada usarla en entornos multi­proceso. Simplemente indicar que es necesario pasarle como argumento la variable en la que queremos que nos deje la linea leída, devuelve el numero de bytes copiados o ­1 en caso de error. ISEMPTY nos devuelve un bool indicándonos si la pila de “mensajes” esta llena o vacía.
Modelo 3: 4 hilos: Se consideró la opción de usar una arquitectura de 4 hilos por cliente:
Esta arquitectura se descartó puesto a que los sockets ip no son “Thread Safe”, y no pueden ser usados simultáneamente en dos hilos y si se limitase su uso mediante semáforos (evitando así la concurrencia) no aportarían ninguna ventaja (frente a dos hilos), complicando José Luis Pedrosa Montes
73
Pasarela X25­IP
código sin necesidad. De estas tres opciones, como se ha explicado anteriormente se escogió la de dos hilos, cada uno de ellos implementado en los métodos IPSIDE y X25SIDE, usando como “lanzadera de hilos” void *throwX25Thread(void *thrparam) y void *throwIpThread(void *thrparam).
En el diseño de la pasarela se tuvo que tomar la decisión sobre que mecanismo de paralelización usar, pthread o fork.
La operación de fork, realiza un duplicado exacto en memoria del proceso que efectúa esta llamada, de manera que tenemos dos procesos independientes:
FO
RK
()
Pthread_create, por el contrario, usa parte del stack del proceso que llama a pthread en forma de stack del nuevo hilo creado, habrá tantos “sub­stacks” en el proceso como threads se hallan llamado.
Estos son liberados en distintos momentos, dependiendo del tipo de modo de José Luis Pedrosa Montes
74
Pasarela X25­IP
funcionamiento elegido para el hilo. Si se marca el hilo como “attached”, el proceso solo se libera una vez se espera o comprueba el resultado de su ejecución con pthread_join. Si por el contrario el hilo es del tipo detached, ( pthread_detach), todos los recursos del hilo son liberados cuando el hilo finaliza. Es importante recalcar que si un hilo realiza un exit(), no termina el propio hilo sino toda la aplicación, para terminar un hilo es necesario usar pthread_exit() o bien return.
PT
HR
EA
D_
CR
EA
TE
()
De esta manera el proceso crece en tamaño, pero sigue siendo un único proceso, desde el punto de vista del sistema operativo. Los hilos creados por pthread, son denominados procesos ligeros, en contraposición con los creados a través de Fork. Al cambiar de un proceso a otro se ha proceder a lo que se conoce como cambio de contexto, como se sabe los sistemas operativos actuales, no ejecutan una única tarea, si no varias en paralelo (simulado por slots de tiempo), de esta manera, los cambios de contexto entre hilos del mismo proceso es mucho mas rápida que entre procesos independientes, lo que consigue una mejora notoria en el rendimiento de las aplicaciones. José Luis Pedrosa Montes
75
Pasarela X25­IP
A continuación se adjunta una tabla con un benchmark usando las dos opciones:
Este benchmark es simplemente un bucle que lanza operaciones de pthread o fork. Como se puede ver, el coste de realizar los fork es mucho mas costoso que el de pthread. El programa de demo simplemente hace un sleep en cada uno de los hilos, por lo que tampoco queda reflejado lo que beneficia a los cambios de contexto entre procesos. Aun así es suficiente para dejar claro que pthread es la mejor opción a utilizar.
Esta es la clase que realmente realiza el trabajo de pasarela, por cada cliente se creara una nueva instancia. A manera de recapitulación, se ha realizado un diagrama UML con todas las clases codificadas para que se pueda ver la aplicación de una manera mas general:
José Luis Pedrosa Montes
76
Pasarela X25­IP
José Luis Pedrosa Montes
77
Pasarela X25­IP
5.3 Aplicación Web
Con este diseño, la pasarela se cumplen satisfactoriamente todos los requisitos excepto
una interfaz de control y monitorización, para ello se utilizará una interfaz web, que resuma las
transacciones realizadas, y permita operaciones de control.
Se utilizara una base de datos en la que se guarde registro de cada transacción
procesada, datos a partir de los cuales la propia página generará los informes.
Como se ha explicado en este documento, el retardo es un factor fundamental, la
pasarela debe intentar retrasar el envío y recepción de paquetes lo menor posible, por otro lado cada
transacción ha de ser enviada a un servidor de Base de Datos (MySql), lo que introduce un retardo
en ciertas condiciones como pueda ser que la base de datos no este en la misma red que la pasarela,
situación que se producía en el cliente sucede.
La solución por la que se ha optado es por hacer inserciones diferidas en la base de
datos, se ha creado una clase especial para soportar este comportamiento. Una cola de “querys” que
va siendo procesada por un hilo independiente a los hilos de los clientes, cada transacción
simplemente copia los datos de la “query” en memoria para ser procesada por el hilo.
Este diseño aporta mas ventajas a parte de eliminar los retardos (o reducirlos drásticamente):
●
Protección ante caídas del gestor de base de datos, ya que esa cola se ha dimensionado para
que soporte (estadísticamente) una caída de aproximadamente 10 minutos, si pasado ese
tiempo no se recuperase la base de datos, las transacciones serian volcadas a fichero en
forma de archivo SQL para ser procesadas manualmente mas tarde.
●
Uso de una única conexión a base de datos, ya que la clase que la instancia que tendría la
conexión a la base de datos, seria única (el hilo independiente), así se hace una menor
sobrecarga del gestor, se obtiene un mejor uso del ancho de banda al eliminar todas las
conexiones de cada hilo.
●
Lógica de base de datos, ya que el hilo gestor, contiene la lógica de como responder ante
que tipo de fallos, por ejemplo datos incorrectos provenientes de errores en la transmisión,
o una caída de la linea, solo recolectando en los casos necesarios.
●
Protección ante errores de red o DNS, si el servidor de DNS o la red se cae, el intento de
José Luis Pedrosa Montes
78
Pasarela X25­IP
conectar puede tardar hasta dos minutos (tiempo máximo TCP), si ese caso sucede, no se
podría atender a ningún cliente, puesto que al primer acceso de base de datos el hilo
quedaría suspendido durante hasta dos minutos.
El diagrama UML se muestra a continuación: Como se puede ver hay un método init, que inicializa todas las variables y lanza el hilo
que gestiona la conexión, se han incluido un getUsage, que devuelve el porcentaje de la cola de
mensajes usada, getStatus que informa de si esta la conexión esta activa.
Cada hilo de los clientes al terminar una transacción, construyen la query y ejecutan el
método addQuerytoqueue, el cual lo copia a la cola, es importante recalcar que se trata de una copia
y no de la misma memoria, y que se puede reutilizar la misma variable, disminuyendo la
complejidad de la memoria dinámica, ya que los hilos pueden hacer uso de una variable local y no
tener que esperar a que se procese la query para liberarla.
José Luis Pedrosa Montes
79
Pasarela X25­IP
Con estos datos ya insertados en la base de datos la pagina es capaz de obtener
estadísticas y mostrar información sobre las transacciones, aun es necesario solucionar como se va
a tener control sobre la aplicación y el servidor de BBDD.
Es importante tener en cuenta que MySql no tiene por que estar necesariamente
instalado en una maquina Linux, por lo tanto las funciones deben ser independientes de las
plataforma.
Para poder controlar y monitorizar los servicios instalados en maquinas bajo Microsoft
Windows ha hecho uso de las librerías win32services de código libre para PHP. Estas librerías
aportan la funcionalidad necesaria para preguntar por el estado de un servicio, pararlo o arrancarlo.
Típicamente los servicios en Linux se arrancan o paran mediante scripts habilitados a
tal efecto en el directorio /etc/init.d/ por ejemplo “/etc/init.d/SERVICE start|stop|status”, esto
devuelve mensajes standart informando de si el servicio se encuentra en ejecución, o no. Para
poder acceder a un servidor Linux existen diversos tipos de conexiones, el mas usado:
SSH: es el nombre de un protocolo y del programa que lo implementa, y sirve para acceder a
máquinas remotas a través de una red. Permite manejar por completo el ordenador mediante un
intérprete de comandos. Este programa, permite interactuar con máquinas remotas, de manera
segura, cada nueva sesión, genera una nueva clave pública que se intercambian mediante cifrado
asimétrico, con esta clave, se hace cifrado simétrico para toda la conexión.
TSH: muy similar a SSH pero con medidas de seguridad no tan estrictas, tiene la ventaja de ser mas
rápido en la conexión que ssh.
Para usar ssh desde PHP tenemos dos opciones:
●
Uso de la función PHP ssh2, ssh2_exec ( resource session, string command [, string pty [,
array env [, int width [, int height [, int width_height_type]]]]] )
●
función exec passthru ( string comando [, int &var_retorno] ), incluyendo dentro la función
a ejecutar el propio mandato ssh
La función passthru es mas versátil, pero, resulta mas complicada de configurar, es
necesario
habilitar en el servidor permisos para permitir el acceso sin contraseña usando
certificados, lo que requiere generar certificados en cada cliente que se tenga que conectar.
José Luis Pedrosa Montes
80
Pasarela X25­IP
Si se quiere poder usar TSH por velocidad en lugar de SSH, es necesario usar passthru
ya que PHP no proporciona ninguna función para esta shell remota.
Este planteamiento se ha hecho teniendo en cuenta que se va a usar un servidor Linux
para generar estas páginas, ya que Windows no dispone de estas herramientas. No obstante es
posible instalarlos mediante Cygwin: entorno de emulación de Linux sobre Windows, se trata de
una DLL que proporciona la API de Linux, y un gran conjunto de herramientas, entre las que se
puede encontrar SSH y TSH.
Para soportar ambos sistemas simultáneamente se ha creado un archivo de funciones a
modo de “librería” llamado services.inc que puede ser incluido en cualquier script PHP. Estas
librerías consultan tablas mysql en las que se “registran” los servidores sobre los que se quiere
tener control (el diagrama de base de datos se incluye mas abajo), esencialmente esa tabla contiene
por cada fila, el sistema operativo (Linux o Windows), el nombre o ip del host, el nombre con el
que el servicio esta registrado en la máquina y a modo informativo un displayName que se usará
para mostrar un texto o nombre descriptivo del servicio. Por ejemplo, apache normalmente esta
registrado como httpd y en el nombre usamos Servidor Apache, de esta manera no es necesario
conocer el nombre exacto de cada servicio.
Las librerías proporcionan las siguientes funciones:
getTypes():
Por comodidad se ha añadido un campo type, para poder agrupar servidores, por ejemplo “x25gw”.
Esta función nos devuelve los diferentes tipos de servidores
getServicesOfType():
Dado un tipo de servidor nos devuelve todos los servidores del grupo.
stopService():
Se le pasa como argumento un servicio, y lo detiene.
startService():
Complementario a stopService()
getStatusOfService();
También recibe como argumento un servicio, al terminar esta función devuelve el estado del
José Luis Pedrosa Montes
81
Pasarela X25­IP
servicio, de acuerdo con las librerías win32services:
●
4: el servicio esta ejecutándose
●
1: el servicio esta detenido
●
0: el servicio no responde
printService():
Imprime el estado de un servicio, con las correspondientes imágenes, esta función se apoya en la
anterior.
Con
esta
librería tenemos acceso a
un
servicio
a
cualquier
maquina,
independientemente de la plataforma en la que este instalada.
Para la monitorización también se han creado otras librerías, que generan ficheros con
la información que necesita la página:
Siguiendo el estilo UNIX se ha tomado el patrón de 5, 10 y 15 minutos, por cada
cliente se muestra la cantidad de transacciones correctas durante esos tres periodos de tiempo.
Toda la información mencionada anteriormente es de gran utilidad, pero es necesaria
alguna herramienta que proporcione una información mas detallada, separando información por
cada uno de los servidores o tarjetas, para conseguir una información lo mas parecido a tiempo real,
se ha incluido un applet con gráficas con el numero de transacciones entrantes, correctas y los
diferentes tipos de error, los paquetes de JfreeChart son la herramienta perfecta para conseguir
unos gráficos interactivos.
Para conseguir que los datos se actualicen, se han incluido unas tareas periódicas en el
crontab que generan los ficheros para los applets. Se contempló la opción de que fuese las request
de los navegadores los que generaran las consultas a base de datos y los ficheros para los applets,
pero se estimo que las consultas eran demasiado pesadas como para se realizasen por cada uno de
los clientes conectados.
El cron es una utilidad derivada de UNIX, un administrador regular de procesos en
segundo plano (demonio) que ejecuta programas a intervalos regulares (por ejemplo, cada minuto,
día, semana o mes). Los procesos que deben ejecutarse y la hora en la que deben hacerlo se
José Luis Pedrosa Montes
82
Pasarela X25­IP
especifican en el archivo crontab.
Cron se podría definir como el "equivalente" a Tareas Programadas de Windows. Los
usuarios habilitados para crear su archivo crontab se especifican en el archivo cron.allow. De
manera análoga, los que no lo tienen permitido figuran en /etc/cron.d/cron.deny, o /etc/cron.deny,
dependiendo de la versión de Unix.
El momento de ejecución se específica de acuerdo con la siguiente tabla:
1. Minutos: (0-59)
2. Horas: (0-23)
3. Días: (1-31)
4. Mes: (1-12)
5. Día de la semana: (0-6), siendo 1=Lunes, 2=Martes, ... 6=sábado y 0=Domingo
Para especificar todos los valores posibles de una variable se utiliza un asterisco (*).
Por ejemplo:
30 10 * * 1 /usr/bin/who >> /home/quien.tex
Ejecuta la orden who todos los lunes a las 10:30 y guarda la salida en el archivo quien.tex
Con esta herramienta programamos una tarea para que genere los ficheros con la
frecuencia que queramos, se sugiere el valor de un minuto, es decir, todos los campos a *.
El comando a lanzar sera “$(PHP_HOME)/php $(X25IPD_HOME)/filetochar.php”
Este script en php lanza unas consultas a la base de datos preguntado por el numero de
transacciones en el último minuto, después contabiliza el numero total de peticiones recibidas, el
numero de correctas y el de erróneas.
La principal tabla dentro de MySql para la estadísticas se llama trx (transacciones),
cada una de las pasarelas introduce una fila por cada transacción. El código de error es el principal
indicador, en caso de que la transacción sea correcta, este campo toma el valor 0, se incluye la
configuración (NRI + CUD) de la que proviene esa transacción de esa manera se puede saber el
cliente que inició la transacción, estos dos campos, nos permites obtener unas estadísticas de el
José Luis Pedrosa Montes
83
Pasarela X25­IP
estado global de la pasarela sabiendo si se están produciendo demasiados errores, determinando si
se trata de un problema localizado de un cliente, o de toda la pasarela. Adicionalmente ayuda a
detectar problemas en las líneas X25 al dejar de ver transacciones bien correctas o incorrectas.
Para ayudar a determinar si se trata de un problema en una de las líneas o se trata de un
problema aislado, se ha integrado un applet usando JfreeChart que muestra en tiempo real el
numero de transacciones por minuto, mediante dos indicadores, translaciones correctas e
incorrectas.
Estas gráficas requieren que en cada una de las transacciones se registre el host donde
se ejecuta la pasarela, este campo se añadió a la tabla trx. Así mismo, para saber en que momento se
produce la transacción es necesario registrar la fecha con precisión de segundo. Durante la fase de
pruebas del proyecto, se detectó que era de gran utilidad disponer no solo de la fecha en la que se
realizó la transacción si no también saber la fecha en la que se realizó la inserción en la base de
datos.
Con los dos datos adicionalmente se puede determinar si a una hora determinada de un
día que no se registraron transacciones se debía a una caída de base de datos o a una incidencia de
alguna linea o problema en las pasarelas. también ayuda a detectar la caída ya que las gráficas al
levantarse el servicio de base de datos se incrementa repentinamente.
Para poder generar estos datos, se deben hacer consultas a la base de datos cada poco
tiempo, se estimo que tener los datos actualizados cada minuto ofrecía la funcionalidad adecuada.
Durante un periodo de un mes, se calcula que aproximadamente se registrarán uno o dos millones
de transacciones al mes, para agilizar el proceso de la obtención de datos se ha creado un índice
sobre la columna host y fecha.
Entrando en mas detalle, la linea del cron que guarda en archivos el numero de
transacciones realizadas para esto se realiza la siguiente query:
“ $query="SELECT localserver, count(*) as countTrx FROM trx where error='0' and
insert_date>=DATE_ADD(now(), INTERVAL -".$minutes." MINUTE) group by localserver;";”
Esta
query
se
ha
José Luis Pedrosa Montes
incluido
en
las
librerías
PHP
en
una
función
llamada
84
Pasarela X25­IP
getLastTRXByServer($minutes, $status). El primer argumento indica de cuantos minutos tiene que
ser el conteo, y status puede tener dos valores 'ok' y 'error', en el caso de error no se devuelve un
único dato sino una “matriz” en el que el primer campo es el código de error y en el segundo el nº
de esos errores para un servidor.
El resultado de estas querys se van almacenando en un fichero mediante un script que
se encuentra en la carpeta cron. Este script PHP se encarga de que solo haya un determinado
numero de lineas en el fichero de datos, ya que si no el Applet de java no se representa
correctamente ocupando mas pixeles de los destinados a el. Se generaran tantos ficheros de datos
como servidores corriendo el servicio de pasarela definidos en la tabla Servers y Services de la base
de datos.
José Luis Pedrosa Montes
85
Pasarela X25­IP
José Luis Pedrosa Montes
86
Pasarela X25­IP
Una vez que esta todo el sistema preparado, las pasarelas, el servidor MySql, el servidor apache con los módulos de PHP y win32services, estamos listos para usarlo, para ello basta con abrir un navegador e introducir la URL donde se haya hospedado:
El resultado es esta página:
Desde esta página se pueden ver el estado de cada servidor así como de los servicios, permitiendo ver la tasa de errores global. En la siguiente página explicaré en detalle cada uno de los cuadros que se presentan:
José Luis Pedrosa Montes
87
Pasarela X25­IP
El cuadro de control:
Este cuadro nos permite ver los diferentes servidores dados de alta en la base de datos, para poder interactuar con ellos simplemente se seleccionan el o los checkbox deseados, y se pulsa uno de los dos botones, el verde los arranca y el rojo los para en analogía con un equipo de música. La flecha circular de la esquina inferior derecha nos permite recargar la página.
El cuadro de errores:
En este cuadro se representan los errores mas comunes globalmente, es decir teniendo en cuenta todas las pasarelas. Siguiendo el estilo UNIX se muestran los porcentajes de error en los últimos 5, 10 y 15 minutos.
José Luis Pedrosa Montes
88
Pasarela X25­IP
Cuadro de gráficas:
En este cuadro se puede ver el applet con los gráficos de cada una de las pasarelas, informando del numero de transacciones correctas y erróneas, lineas verde y roja respectivamente.
Cuadro de estado de MySql:
Se muestran las principales variables que ofrece MySql mediante la ejecución de
diferentes comandos, como por ejemplo “show variables”
José Luis Pedrosa Montes
89
Pasarela X25­IP
Cuadro de entidades:
Este cuadro sirve para monitorizar las transacciones realizadas por las diferentes
entidades conectadas, mostrando por cada una de ellas el numero de correctas e incorrectas, el
tamaño de los colores representa de manera gráfica el porcentaje de correctas.
José Luis Pedrosa Montes
90
Pasarela X25­IP
6 INSTALACIÓN DEL HARDWARE Y SOFTWARE
José Luis Pedrosa Montes
91
Pasarela X25­IP
6.1 Instalación Hardware
Pese haberse hecho una clase (C++) específica para representar la conexión X25 y poder migrarlo en caso de que se considere necesario a otro hardware X25, es necesario la utilización de una tarjeta eicon (DiaLogic), en principio cualquiera de sus modelos que soporte X25 implementa el mismo interfaz y usan las mismas librerías, por lo tanto son absolutamente compatibles, esto fue comprobado en la fase de desarrollo ya que fue necesario codificar un cliente­
emulador en otra maquina independiente, usando un multiplexador. En esta maquina se instalo y configuro un modelo inferior de la tarjeta x25 una C90, que carecía de backup por RDSI así como menos rendimiento.
Por lo tanto, si se desea tener soporte para Backup por RDSI se debe usar el modelo C91 v.2, en caso contrario cualquier modelo de eicon es valido, todos ellos se conectan en un puerto PCI 32Bits. Como consecuencia del tipo de licencia del driver, el código fuente no esta disponible, por lo que no es posible compilar los módulos del kernel en la distribución o arquitectura deseada, estos drivers solo están disponibles para sistemas 32bits (y solo algunas distribuciones), lo que restringe su uso a procesadores Intel 32, o en su defecto una arquitectura x86_64 trabajando en modo 32 bits, desperdiciando gran capacidad de la máquina.
Durante las diversas instalaciones (entorno de pruebas y producción) no se encontraron conflictos con ningún otro dispositivo.
Pruebas:
■
Intel Pentium 4 ■
Controladoras IDE
■
Vídeo AGP
Desarrollo:
●
Intel Xeon
José Luis Pedrosa Montes
92
Pasarela X25­IP
●
Controladora SAS
●
Vídeo PCIX integrado en placa
●
3com Gbit Ethernet
Cabe señalar que Eicon usa un interfaz propietario, y en la mayoría de los casos el extremo que va a la línea X25 no concuerda con el usado habitualmente en España, es necesario adquirir un adaptador entre ellos.
Como se ha explicado en el capítulo anterior, debido los driver de Dialogic no son software libre, por lo que no pueden ser compilados para una distribución de Linux cualquiera, sino que por el contrario solo los tenemos disponibles para unas ciertas versiones del kernel en pocas distribuciones, en la actualidad los siguientes:
●
SuSE Linux Enterprise Server (SLES) 9 (kernel 2.6.5­X)
●
SuSE Linux Enterprise Server (SLES) 10 (kernel 2.6.5­X) ●
Red Hat Enterprise Linux 4.0 (kernel 2.6.X.EL) + Updates
Los diferentes drivers están disponibles para su descarga on­line en la pagina oficial de Eicon: http://www.eicon.com/worldwide/products/WAN/cn4linux.htm
Para el cliente se eligió RedHat 4 update 4, ya se considero como el mas común de entre estas dos opciones.
El proceso de configuración de la X25 es muy dependiente de la instalación especifica en la que se este haciendo, por lo que no se pueden dar un proceso definido, simplemente indicar que antes de poder usar la tarjeta es necesario ejecutar el proceso de configuración que se encuentra ubicado en /usr/lib/eicon/eccfg. Intentare dar una guía de los aspectos mas importantes: al arrancar el configurador nos encontramos con esta pantalla que nos informa del hardware detectado:
José Luis Pedrosa Montes
93
Pasarela X25­IP
Pulsamos F4 para continuar, nos encontramos con el menu principal:
Mediante el tabulador seleccionamos X25, como queda en el dialogo y volvemos a pulsar F4 para configurar la linea:
José Luis Pedrosa Montes
94
Pasarela X25­IP
El punto principal de este menú, es elegir si nuestra tarjeta X25 actua como DTE o como DCE, si se han contrado PVC con un derminado NRI es necesario especificarlo aqui, asi como si usaremos HDLC o SLDL, el resto de opciones se dejaron por defecto.
Si volvemos a pulsar F4 llegamos a otra pantalla en la que podemos especificar ajustar tiempos de time­out, asi como configuraciones mas precisas.
En nuestra instalación tampoco fue preciso modificar ningun valor. Si pulsamos dos veces F3 volvemos al menu principal:
José Luis Pedrosa Montes
95
Pasarela X25­IP
Selcionamos: Dialer selection y una vez mas F4 y podemos ver la configuracion general de la conexión entre la tarjeta y la línea:
Aqui podremos especificar algunos time­out, tampoco se modificaron sus valores, ahora pulsando F4 podremos especificar el tipo de conexión:
José Luis Pedrosa Montes
96
Pasarela X25­IP
Aquí especificamos RS232 en nuestro caso (puerto serie), contabamos. Ahora solo queda salir guardando los cambios y reiniciar el adaptador. José Luis Pedrosa Montes
97
Pasarela X25­IP
Para esto, basta con dirigirse a la misma carpeta en la que se encuentra el instalador y ejecutar „./eccard stop && ./eccard start“
Si al ejecutar el comando nos encontramos con un mesaje similar a este, quiere decir que no se ha especificado correctamente bien el interfaz o si la UTR o la tarjeta es quien marca el reloj.
El driver tambien queda instalado como un servicio pudiendo arrancarse desde /etc/init.d/EC_start y detenerse con /etc/init.d/EC_shut, tambien desde las librerias directamente con /usr/lib/eicon/eccard
A continuación especifico los componentes software/librerias necesarias para el
correcto funcionamiento de lapasarela así como de su interfaz web.
José Luis Pedrosa Montes
98
Pasarela X25­IP
6.2 Pasarela
En primer lugar, si se desea compilar en la máquina en la que se usará en lugar de en el objeto ya compilado, es necesario el compilador GCC++ version 4.x, el proceso de compilado esta automatizado mediante su correspondiente fichero Makefile, por lo tanto es necesario GNU Make 3.8 en adelante.
Para su interacción con MySql son necesarias las librerías cliente, normalmente conocidas como mysqlclient, una vez mas si se desea compilar en la misma máquina es necesario el correspondiente paquete develop mysqlclient­dev, que contiene las cabeceras, necesarias para el proceso de compilado. Es necesario bajar el paquete de la página de Mysql y después en el directorio en el que se descargo ejecutar:
„rpm ­U ­­nodeps mysql*“
Un a vez instalado, están todas las dependencias solucionadas, ya podemos compilar la pasarela: no movemos a la carpeta src y ejecutamos: „make“
Tras unos segundos el ejecutable estará en la misma carpeta. Posteriormente es necesario crear el directorio de instalacion de la pasarela
„mkdir /opt/x25ipd“
A continuación se moverá el ejecutable a esa carpeta:
„mv x25ipd /opt/x25ipd“
Para arrancar la pasarela es necesario crear un fichero de configuración: /opt/x25ipd/x25ipd.conf, o se puede copiar el que viene por defecto para tener una guía. En este fichero aparecen unos path por defecto para los ficheros de log, es necesario que la carpeta donde estan contenidos esos ficheros, si no se especifican valores a /var/log/x25ipd/ y es necesario que exista si no se especifica otro path.
José Luis Pedrosa Montes
99
Pasarela X25­IP
Los ficheros de configuración de la pasarela son leídos con la ayuda de la librería iniparser, no obstante no esta disponible en todas las distribuciones por lo que se ha incluido el código y al compilar se incluyen dentro del binario, por lo que no es necesaria su instalación, no obstante, en el Makefile se ha incluido una opción para que no se compilen y sean cargadas como una librería en tiempo de ejecución.
Normalmente las pasarelas de comunicaciones desean ser arrancadas como servicios, a tales efectos se ha incluido fichero de arranque para la distribución RedHat 4 que debe ser copiado en /etc/init.d, ajustandose al estándar de facto en Linux, de manera que puede ser arrancada o parada manuelamente mediante /etc/init.d/x25ipd, como opciones recibe:
●
start: arranca el proceso
●
stop: para la paserela
●
reload: vuelve a leer el fichero de configuración y carga los nuevos valores sin dejar de dar servicio a ningún cliente, de manera que solo las nuevas llamadas usaran esta configuración.
Si se desea que la pasarela arranque automáticamente durante al arranque es necesario ejecutar estos comandos que lo añaden al proceso de boot:
„chmod 755 /etc/init.d/ansiva
chkconfig ­­add ansiva
chkconfig ­­level 35 ansiva on
chkconfig ­­level 60 ansiva off“
En la maquina en la que se vaya a instalar el servidor MySql, ejecutamos:
„rpm ­U ­­nodeps mysql*“
Si no se ha creado ningún otro usuario, usuario root y contraseña vacia nos dan acceso a la base de datos:
José Luis Pedrosa Montes
100
Pasarela X25­IP
„mysqlclient ­u root“
Ese comando nos da acceso a consola de Mysql, una vez dentro ejecutamos el fichero que contiene la estructura de la base de datos. En primer lugar creara la base de datos ipx25d y después la estructura de las tablas, insertando una fila de ejemplo en cada una de ellas:
„source ipx25d.sql“
Este script no añade permisos para ningún usuario, es conveniente crear un usuario para que accedan tanto la pasarela como el servidor web.
José Luis Pedrosa Montes
101
Pasarela X25­IP
6.3 Bastionado del servidor
A continuación voy a explicar los pasos que se siguieron una vez terminada la instalación para conseguir mejorar la seguridad. Por defecto la instalación de RED HAT Enterprise 4 instala muchos servicios que la pasarela no necesita y los deja habilitados, a continuación se explica como deshabilitarlos todos aquellos que no eran necesarios para el proyecto según la funcionalidad descrita en el documento, no obstante en otras instalaciones es posible que fueran necesarios.
“chkconfig cups off”
“chkconfig cups­config­daemon off”
Estos son los servicios de impresión de Linux
“chkconfig ntpd on”
Este es el demonio de sincronización de reloj, es muy recomendable para tener una hora precisa de la realización de las transacciones.
“chkconfig iptables off”
El servicio iptables es un firewall para Linux, en el entorno de producción donde se instaló el servidor no era necesario un firewall por ordenador ya que toda la subred esta protegida.
“chkconfig portmap off”
Portmap se usa para poder recibir peticiones en las que se desconoce el puerto del servicio al que se quiere acceder. El servidor no recibe conexiones IP por lo que no es necesario.
“chkconfig netfs off”
Este servicio permite montar unidades remotas.
“chkconfig anacron off”
José Luis Pedrosa Montes
102
Pasarela X25­IP
“chkconfig atd off”
Estos dos servicios son programadores de tareas para Linux, son similares a Cron y no son necesarios, ya que se usara cron original
“chkconfig pcmcia off”
Servicio que permite usar hardware en tarjetas Pcmcia
“chkconfig sendmail off”
Agente de transporte de correo, solo para servidores de correo.
“chkconfig nfs off”
“chkconfig nfslock off”
NFS: (Network File System), usado para poder usar unidades de red como sistema de ficheros, permite el montaje.
“chkconfig rhnsd off”
Demonio para redes Red Hat tampoco es necesario.
“chkconfig smartd off”
Monitorización automática de los discos. Tal como se explico en el apartado de la web, es posible querer el habilitar el acceso por tsh en lugar de ssh, perdiendo seguridad pero ganando en rapidez, si así fuera es necesario ejecutar los siguientes comandos para habilitarlo:
“chkconfig ­­add tshd”
José Luis Pedrosa Montes
103
Pasarela X25­IP
“chkconfig ­­level 35 tshd on”
“chkconfig ­­level 60 tshd off”
Se aconseja editar el fichero /boot/grub/grub.conf y añadir esta opción al kernel, ya que permite ver muchas mas lineas de consola:
“vga=791”
José Luis Pedrosa Montes
104
Pasarela X25­IP
6.4 Entorno Web
A continuación se va a explicar como instalar en una Red HAT los componentes necesarios para el
entorno Web de la pasarela.
Servidor Web Apache v. 2.x, en nuestra instalación el servidor de bases de datos no
estaba en la misma maquina que el servidor web (muy habitual LAMP), de manera que también es
necesario el cliente MySQL en este servidor, al estar dentro de la red interna de la empresa, aislado
de la DMZ, no se han tomado consideraciones de seguridad mas allá de nombre de usuario y
contraseña.
Para instalar el servidor apache basta con ejecutar la siguiente secuencia de comandos una vez
introducido el CD de red-hat.
“mount /mnt/cdrom”
“rpm -Uvh apache-2.X.rpm”
“mount -t iso9660 /dev/cdrom /mnt/cdrom”
Dado que las paginas web están realizadas en scripting PHP es necesario la instalación del
modulo de ejecución PHP para apache. Para el desarrollo y entorno de producción se usó la versión
5.0. Desafortunadamente no existe el paquete para instalar en Red Hat (Oficial), a continuación se
explica como conseguir el modulo paraPHP:
En primer lugar es necesario descargar el archivo con los fuentes de la página oficial de php
http://php.net, se descarga en formato bzip o tar. El siguiente paso es descomprimir los fuentes
“tar xvf php*”
Crear los ficheros Makefile con el script:
“./configure”
Compilar los archivos
“make”
José Luis Pedrosa Montes
105
Pasarela X25­IP
Copiarlos a sus lugares de trabajo
“make install”
Si este proceso generase problemas en la instalación particular, siempre es posible
bajarse el paquete de la distribución Fedora Core, e instalarlo, pese a no ser para la misma
distribución
funciona
mcorrectamente.
http://redhat.download.fedoraproject.org/pub/fedora/linux/core/5/source/SRPMS/php-5.1.25.src.rpm
A continuación es necesario descargar las librerías para el manejo de servicios bajo
Windows, la url desde donde se puede acceder a dicho contenido: “http://snaps.php.net/win32/”, ha
de ser copiado en la carpeta “/lib/”, es necesario editar el fichero de configuración de apache,
normalmente ubicado en “/etc/httpd/modules.conf”, la linea para que sea capaz de usar PHP esta
comentada, basta con descomentarla para activarlo. Para las librerías de servicios, basta con copiar
esta linea y sustituir el modulo PHP por el de servicio.
La página web contiene HTML y el aplet de JfreeChart para las gráficas, el cual ya ha
sido incluido en los fuentes del proyecto, por lo que no es necesaria una descarga adicional.
Para el correcto funcionamiento de la interfaz web, es necesario que el cliente tenga la JRE o JDK
al menos 1.5. Este entorno web ha sido probado satisfactoriamente en los siguientes clientes :
●
Microsoft Internet Explorer, v. 6.x y 7.x
●
Mozilla Firfox v 1.5.x y 2.0.x
●
Mozilla Seamonkey
●
Opera WebBrowser
José Luis Pedrosa Montes
106
Pasarela X25­IP
7 FICHERO DE CONFIGURACIÓN
Para poder configurar la pasarela, al tratarse de un demonio y no tratarse de un proceso interactivo, es necesario, crear un fichero de configuración en “/opt/x25ipd/x25ipd.conf”, por defecto hay uno con valores de ejemplo. El fichero sigue la costumbre GNU:
[SECCIÓN]
Atributo 1 = valor1
Empezaré por describir las diferentes secciones: la principal es GLOBAL, que define los parámetros generales de la aplicación, BBDD en la cual se indican los valores necesarios para realizar la conexión contra MySql, SECTORN, las diferentes combinaciones de CUD y NRI validas así como donde enrutarlas, N debe empezar en 1. A continuación describiré cada uno de los campos de los sectores:
GLOBAL
localnri: NRI que esta asociado a la linea conectada a la tarjeta X25, si se posee centralita X25 que de extensiones, se pueden configurar en este campo. Este valor es obligatorio, sin el la aplicación no arrancará
syslog: esta variable solo puede tomar dos valores, yes o no, este parámetro no es obligatorio y de no ser especificado toma el valor no, así como si el valor no es correcto.
app_path: path completo al fichero que se desea que contenga el registro de log de la marcha de la pasarela. Este valor es opcional, de no ser especificado se usara: “var/log/x25ipd/x25ipd.log”
trx_path: se comporta de manera idéntica a la variable app_path, pero en este fichero se José Luis Pedrosa Montes
107
Pasarela X25­IP
registran las transacciones procesadas por la pasarela, valor por defecto: /var/log/x25ipd/x25trx.log
deb_path: path al fichero de debug, si es especificado, la pasarela registra en ese fichero las operaciones que realiza a un nivel mucho mas detallado, su fin es encontrar problemas con algún cliente.
BBDD
active: Puede tomar los valores “yes” o “no”, en caso de no especificarse se tomara como no
esto hace que la pasarela guarde o no registro de transacciones en base de datos, obsérvese que si se deshabilita esta opción la pagina de monitorización solo permitirá parar y arrancar y no se mostraran estadísticas
ip: ip al host que alberga la base de datos.
user: usuario para la conexión
password: contraseña para la conexión
port:puerto en el que escucha MySql si no se ha cambiado en la configuración es el puerto 3306, si no se encuentra este valor, se usara el valor por defecto
database: base de datos en la que se encuentran las tablas, esta dato es obligatorio, el script de creación de tablas, crea una base de datos ipx25d, a no ser que haya sido cambiada ese es valor correcto
queuetime: Este campo nos indica cada cuanto tiempo el hilo de base de datos debe intentar vaciar la cola con las querys pendientes, para unas 300 transacciones por minuto se aconseja un valor de entorno a 2000. Este valor se especifica en milisegundos. filecheck = 300 ; Seconds between file dump check && reconnect
José Luis Pedrosa Montes
108
Pasarela X25­IP
8 CONCLUSIONES
Durante la realización de este proyecto, he podido tener una mayor familiarización con
el sistema Linux, usando técnicas de programación de alto rendimiento, teniendo un mayor control
sobre lo que se esta produciendo en cada momento, las opciones de compilación, etc.
He podido aprender las ventajas e inconvenientes de la programación remota en
consola frente a los cada día mas extendidos IDE's. Los entornos de desarrollo integrado ofrecen
indudablemente unas grandes ventajas, como son la automatización de Sripts de compilado, ayuda
integrada, corrección de código dinámica, sugerencias ante errores. Sin embargo con estos IDE's en
el proceso de ayuda al desarrollador toman decisiones sin la intervención del usuario, tomando
usualmente valores por defecto, haciendo en muchos casos que se desconozca esa opción o el valor
que tomó, estos problemas no se dan al codificar desde un entorno mucho mas simple, como pueda
ser VIM, que simplemente ofrece “cuadros” de consola, y coloreado de texto.
El no tener acceso físico al servidor en el cual se desarrolla el proyecto tiene grandes
inconvenientes, como los depuradores remotos, GDB, pero obligan a tener un control mas
exhaustivo del proceso, como por ejemplo la memoria, eso implica que cada operación que se hace
ha de ser elegida tras considerar distintas opciones, consiguiendo un comportamiento mas
predecible y estable.
Pese a ser una tecnología de los años 70, este tipo de conexiones, siguen estando
vigentes en algunos contextos, ofreciendo un servicio prácticamente de banda estrecha pero un
muy buen rendimiento, con muy poco retraso comparado con una conexión a través de Internet.
Otro motivo de que estas lineas continúen vigentes es la resistencia al cambio, ya que en entornos
económicos, las evoluciones tecnológicas son vistas con gran reticencia.
José Luis Pedrosa Montes
109
Pasarela X25­IP
BIBLIOGRAFÍA
●
[BARR01] Barranco de Areba, Jesús, “Metodología del análisis estructurado de sistemas”, Universidad Pontificia Comillas, 2001
●
[WELL03] Welling, luke., Thomson, Laura., “Desarrollo Web con PHP y MySQl” Anaya 2003
●
[GALL03] Gallego Vazquez, José Antonio., “Desarrollo Web con PHP y MySQL”, Anaya 2003
●
[PD02] Dubois Paul., “MySQL”, Prentice Hall 2002
●
[MIMA]Mitchell, Mark, Oldham, Jeffrey, Advanced Linux Programming ­Threads­
●
Bradford Nichols, Dick Buttlar, Jacqueline Proulx Farrell PThreads Programming ­ A POSIX Standard for Better Multiprocessing ●
Mark Mitchell, Jeffrey Oldham, and Alex Samuel Advanced Linux Programming ­ Interprocess Communication
●
Protocolo de recargas para – Incluido en el documento.
●
Eiconcard Connections for Linux User’s Guide ●
[BEEJ]Beej's Guide to Network Programming - http://beej.us/guide/bgnet/
José Luis Pedrosa Montes
110
Pasarela X25­IP
GLOSARIO
Apache: Software diseñado para servidores Web.
API: (del inglés Application Programming Interface ­ Interfaz de Programación de Aplicaciones) es el conjunto de funciones y procedimientos (o métodos si se refiere a programación orientada a objetos) que ofrece cierta librería para ser utilizado por otro software como una capa de abstracción.
Applet: es un componente de software que corre en el contexto de otro programa, por ejemplo un navegador web.
BUS: bus puede conectar lógicamente varios periféricos (o computadores) sobre el mismo conjunto de cables CUD: Call user data
C++: es un lenguaje de programación, diseñado a mediados de los años 1980, por Bjarne Stroustrup, como extensión del lenguaje de programación C.
DMZ: “De­Militarized Zone” (Zona Desmilitarizada).
DNS: “Domain Name System” (Sistema de Nombres de Dominio).
GCC: GNU C Compiler (Compilador C GNU). GCC es una colección de compiladores que admite varios
Clase: son declaraciones o abstracciones de objetos.
GNU: acrónimo recursivo que significa GNU No es Unix (GNU is Not Unix).
CRON: administrador regular de procesos en segundo plano (demonio) que ejecuta programas a intervalos regulares Demonio: daemon ó dæmon es un tipo especial de proceso informático que se ejecuta en segundo plano en vez de ser controlado directamente por el usuario
José Luis Pedrosa Montes
111
Pasarela X25­IP
Driver: ó controlador de dispositivo es un programa informático que permite al sistema operativo interactuar con un periférico, haciendo una abstracción del hardware
Lenguajes: C, C++, Objective C, Chill, Fortran y Java así como también las librerías para éstos. Surgió de la imposibilidad de compilar en un entorno que no fuese PC bajo MS­DOS.
Firewall: (cortafuegos), es un elemento de hardware o software utilizado en una red de computadoras para controlar las comunicaciones, permitiéndolas o prohibiéndolas según las políticas de red
GDB: “GNU Debugger” (Deopurador GNU).
Hilo: un proceso que representa una secuencia simple de instrucciones ejecutada en paralelo con otras secuencias.
HTML: “HyperText Markup Language” (Lenguaje de Marcas de Hipertexto).
HTTP: “Hypertext Transport Protocol” (Protocolo de transferencia de Hipertexto).
HDLC: (High­Level Data Link Control) es un protocolo de comunicaciones de datos punto a punto entre dos elementos basado en el ISO 3309
IP: “Internet Protocol” (Protocolo de Internet).
JAVA: Es un lenguaje de programación orientado a Internet con el cual se escriben aplicaciones para servidores Web y para clientes. Permite ejecutar animaciones y elementos interactivos de una página Web con un interprete de dicho lenguaje del que disponen todos los navegadores de Internet modernos.
JDK: “Java Development Kit”
LAPB : (Link Access Procedure, Balanced) es un protocolo de nivel de enlace de datos dentro del conjunto de protocolos de la norma X.25. LAPB está orientado al bit y deriva de HDLC. Modifica a este último para que cualquiera de los dos nodos pueda iniciar la transmisión, por esto se ha denominado balanceado.
Librería: es un conjunto de procedimientos y funciones (subprogramas) agrupadas en un archivo José Luis Pedrosa Montes
112
Pasarela X25­IP
con el fin de ser aprovechadas por otros programas. Al proceso de hacer accesibles estos subprogramas al programa principal se le llama enlace (link).
Log: Fichero, normalmente de texto plano en el que se registran los sucesos de un programa.
Modulo: tareas útiles del sistema (generalmente denominadas servicios) se delegan a pequeños fragmentos de software conocidos como módulos. En general, estos módulos se pueden cargar y descargar del sistema
Memory Leak: Es un tipo de consumo inintencionado de memoria por un programa
MYSQL: Es un Sistema Gestor de Bases de Datos Relacionales (RDBMS, Relational data­ base Management System).
NUA: Network User Address.
NRI: NUA.
OPENSSL: El software OpenSSL es un proyecto de software desarrollado por lo miembros de la comunidad Open Source. Es un robusto juego de herramientas que le ayudan a su sistema a implementar el Secure Sockets Layer (SSL), así como otros protocolos relacionados con la seguridad, tales como el Transport Layer Security (TLS).
OSI: Organización Internacional para la Estandarización o International Organization for Standarization (ISO)
PHP: Es uno de los lenguajes de lado servidor más extendidos en la Web. Nacido en 1994, se trata de un lenguaje de creación relativamente creciente que ha tenido una gran aceptación en la comunidad de webmasters debido sobre todo a la potencia y simplicidad que lo caracterizan.
PCI: Peripheral Component Interconnect (PCI, "Interconexión de Componentes Periféricos") consiste en un bus de ordenador estándar para conectar dispositivos periféricos directamente a su placa base
PVC: Permanent Virtual Circuit
Red Hat: compañía responsable de la creación y mantenimiento de una distribución del sistema José Luis Pedrosa Montes
113
Pasarela X25­IP
operativo GNU/Linux que lleva el mismo nombre: Red Hat Linux.
RPM: “Redhat Package Manager” Sistema utilizado en Unix para ayudar a la instalación de diferentes paquetes de software. Similar a lo que seria un “.exe” en Windows. SQL: “Structured Query Language” (Lenguaje estructurado de consultas).
RS­232: (también conocido como Electronic Industries Alliance RS­232C) es una interfaz que designa una norma para el intercambio serie de datos binarios entre un DTE (Equipo terminal de datos) y un DCE (Data Communication Equipment, Equipo de terminación del circuito de datos), aunque existen otras situaciones en las que también se utiliza la interfaz RS­232.
Script: es un programa usualmente simple, que generalmente se almacena en un archivo de texto plano. Semáforo: es una variable especial protegida (o tipo abstracto de datos) que constituye el método clásico para restringir o permitir el acceso a recursos compartidos
Socket: designa un concepto abstracto por el cual dos programas (posiblemente situados en computadoras distintas) pueden intercambiarse cualquier flujo de datos, generalmente de manera fiable y ordenada.
SSH: (Secure SHell) es el nombre de un protocolo y del programa que lo implementa, y sirve para acceder a máquinas remotas a través de una red.
SSL: “Secure Sockets Layer” (Protocolo de Seguridad).
Syslog: es un estándar de facto para el envío de mensajes de registro en una red informática IP. Por syslog se conoce tanto al protocolo de red como a la aplicación o biblioteca que envía los mensajes de registro.
Tabla hash: mapa hash: es una estructura de datos que asocia llaves o claves con valores. La operación principal que soporta de manera eficiente es la búsqueda
TCP: “Trasmision Control Protocol” (Protocolo de Control de Trasmisiones).
TCP/IP: “Trasmision Control Protocol/ Internet Protocol”. José Luis Pedrosa Montes
114
Pasarela X25­IP
UML: por sus siglas en inglés, (Unified Modeling Language) es el lenguaje de modelado de sistemas de software por excelencia
URL: “Uniform Resource Locator” (Localizador uniforme de recursos).
URI: Uniform Resource Identifier, identificador uniforme de recursos
X.25: estándar UIT-T para redes de área amplia de conmutación de paquetes.
José Luis Pedrosa Montes
115
Pasarela X25­IP
ANEXO A CONECTORES X25
Debido a los múltiples estándar a los que se ha adaptado X25, y a las diversas formas en las que se entrega al cliente las lineas X25 se incluye a continuación los esquemas de conexión entre los conectores mas comunes. Por otro lado, es muy complicado encontrar algún distribuidor o empresa que tenga estos cables, por lo tanto, los mas probable es que sea necesario construirlos dependiendo de la instalación o llevar el esquema a alguna establecimiento especializado en electrónica José Luis Pedrosa Montes
116
Pasarela X25­IP
José Luis Pedrosa Montes
117
Pasarela X25­IP
ANEXO B CODIGOS X25
A continuación se incluye una lista con los códigos de error que proporcionan las librerías del driver de Eicon. El segundo campo de esta tabla son los correspondientes “defines” de la Api que nos proporciona. Durante el desarrollo del proyecto muchos de estos defines han sido usados para conseguir el comportamiento idóneo, solo abortando la comunicación en casos de errores no recuperables.
Errores de la API
José Luis Pedrosa Montes
118
Pasarela X25­IP
Errores en la red:
José Luis Pedrosa Montes
119
Pasarela X25­IP
Constantes:
José Luis Pedrosa Montes
120
Descargar