jueves, 26 de mayo de 2011

Un pequeño capítulo sobre Asterisk para entender algunas cosas

 


Russell Bryant acaba de anunciar su colaboración en un libro llamado “La arquitectura de aplicaciones software libre” donde se recogen diversos capítulos donde se explican el funcionamiento interno de algunas aplicaciones bastante conocidas algunas y otras no tanto, pero todas ellas bastante importantes en su campo:


Aplicaciones como Bash, Audacity, Berkeley DB, Eclipse, CMake, NoSQL, SendMail, Telepathy, y muchísimas más, son explicadas desde el punto de vista de arquitectura de software, manteniendo una profundidad básica como para hacerlo muy interesante, pero sin pasarse para evitar aburrir al lector, lo que confiere a este libro un interés extraordinario para aquellos que quieren saber cómo funcionan algunas aplicaciones por dentro sin llegar a ver código.


Este libro en el que Russell ha participado explicando cómo funciona Asterisk por dentro, está licenciado como Creative Common y se vende en Amazon y Lulu.com, aunque todos los beneficios por “royalties” serán donados a Amnistía Internacional (todo un detalle).


Si queréis saber más, podéis ver la página/presentación del libro:

http://www.aosabook.org/


Cómo programar un AGI en PHP sin librerías raras

Un excelente artículo que Elio Rojano nos comparte en su blog de Sinologic. Una de las personas que más respeto en este ambito de la voz ip


 


Muchas personas que están aprendiendo Asterisk y que ya conocen las posibilidades de esta aplicación, quieren 


 


 


 


empezar a desarrollar sus propias soluciones para que Asterisk pueda interactuar con bases de datos, archivos del sistema de ficheros y en función de algún valor, conseguir que Asterisk haga una llamada, reproduzca una locución, o mil cosas más.


 


 


Esto se realiza gracias a un concepto en Asterisk llamado AGI (Asterisk Gateway Interface) y que viene a ser un programa desarrollado por nosotros (o por otro usuario) que Asterisk ejecuta (importante esto último) y que sirve para que interactúe Asterisk con el sistema Linux, pudiendo acceder a archivos locales, puertos físicos (usb, puertos series, paralelos, etc.), bases de datos, páginas webs, y prácticamente cualquier otra cosa que pueda manejar nuestro sistema Linux.


 


No voy a entrar en la “profundidad” en la que se entra en el curso Asterisk Advanced, pero sí ofrecer un esqueleto básico de un AGI programado en PHP sin necesidad de librerías externas y utilizando una programación muy sencilla (ideal para empezar a familiarizarse con este tipo de sistemas de integración Asterisk-*)


A continuación tenéis un ejemplo ultra-básico sobre cómo puede ser un AGI programado en PHP y sin necesidad de librerías tipo “php-agi” ni “AstPHPAGI”, ni ninguna otra, tan solo tu Asterisk, tú y PHP con sus modulitos.


Debo decir que este ejemplo no lo he programado yo, pero para ilustrar el ejemplo sirve igualmente.


Los comentarios sí son míos y creo que ayudan bastante a entender cómo funciona y qué precauciones debemos tomar antes, durante y después de programar un AGI.


También sé que para muchos, programar un AGI no tiene ninguna ciencia, pero hay que entender que muchos lectores se consideran muy, muy novatos, así que para seguir aprendiendo, aquí tenéis este ejemplo:


#!/usr/bin/php
<?php

// Lo primero es entrar en el Asterisk y ejecutar el comando: "agi set debug on" para ver 
// qué va haciendo el AGI.

// Hay que evitar enviar por la "salida estandar" nada, salvo los comandos para el Asterisk.

// El Asterisk nada más ejecutar el AGI, nos envía información para aburrir...
$agivars = array();
while (!feof(STDIN)) {
$agivar = trim(fgets(STDIN));
if ($agivar === '') {
break;
}
$agivar = explode(':', $agivar);
$agivars[$agivar[0]] = trim($agivar[1]);
}

// la variable $agivars es un array bidimensional con los datos recogidos por el Asterisk
// Un ejemplo de esto puede ser:
// exten=>00,1,AGI(prueba.php,600123456)
/*
Array
(
[agi_request] => prueba.php    ;; Nombre del archivo que contiene el AGI que está ejecutando.
[agi_channel] => SIP/100-00000008   ;; Canal SIP que llama al AGI. (canal, que no usuario)
[agi_language] => en           ;; Idioma por defecto del canal
[agi_type] => SIP              ;; tipo de Tecnología utilizada para llamar al AGI
[agi_uniqueid] => 1305795790.9 ;; UniqueID de la "llamada al AGI"
[agi_version] => 1.8.4         ;; Versio? del sistema AGI utilizado. ¿coincide con el Asterisk?
[agi_callerid] => 100          ;; CallerID del usuario que ejecuta el AGI
[agi_calleridname] => 100      ;; CallerIDname del usuario que ejecuta el AGI
[agi_callingpres] => 0         ;; ...
[agi_callingani2] => 0         ;; ...
[agi_callington] => 0          ;; ...
[agi_callingtns] => 0          ;; ...
[agi_dnid] => 00               ;; Número marcado en el dialplan para llamar al AGI
[agi_rdnis] => unknown         ;; ...
[agi_context] => salientes     ;; Contexto donde se ejecuta el AGI
[agi_extension] => 00          ;; Extensión donde se ejecuta el AGI
[agi_priority] => 1            ;; Prioridad donde se ejecuta el AGI
[agi_enhanced] => 0.0          ;; Agi "mejorado" 
[agi_accountcode] =>           ;; El AccountCode (si lo hemos definido)
[agi_threadid] => -1239581840  ;; ...
[agi_arg_1] => 600123456       ;; Argumento 1 del AGI (el Argumento 0 es el nombre del AGI)
[agi_arg_2] =>                 ;; Argumento 2 del AGI
...                     ;; ...
)
*/

// Vamos a decirle a Asterisk que haga un Dial al número que le hemos pasado por parámetro:

echo "EXEC Dial DAHDI/g1/".$agivars[agi_arg_1];

// Podemos usar los comandos propios de los AGI (como hemos usado el 'EXEC') que podemos obtener
// ejecutando en la consola "agi show commands" o "agi show commands topic <comando>" para una
// información más detallada de cada comando.

// Importante... despues del "?" y el ">" del 'fin del PHP' no debe haber ni siquiera un [ENTER]... 
// ya que en caso contrario, Asterisk devolverá un error del tipo:
// ERROR[24598]: utils.c:1133 ast_carefulwrite: write() returned error: Broken pipe
?>

El código no puede ser más sencillo, quizá lo más interesante pueden ser los comentarios que explican el comienzo y los comandos básicos para programar un AGI.


Sin más me queda agradecer de nuevo a Elio Rojano por sus grandes aporte a la comunidad de Asterisk


Fuente: Sinologic.net

AVISO DE SEGURIDAD PARA ELASTIX 1.5 Y 1.6

Se informa a todos los usuarios de Elastix 1.5 y 1.6, que se ha descubierto un mecanismo que posibilitaría a usuarios remotos escribir archivos en el disco duro del servidor a través de FreePBX.



El mecanismo consiste en la combinación de dos tretas diferentes. La primera permite acceso de administrador a la interfaz de FreePBX "no embebido" y la segunda permite la escritura en el sistema de archivos a través de la interfaz Web de FreePBX "no embebido". La primera treta fue ya solucionada a finales de 2010. La solución de la segunda se está lanzando junto con la publicación del presente aviso y los detalles se encuentran disponibles en el siguiente link:



http://elx.ec/secalert052011



Estos dos problemas de seguridad no se encuentran presentes en Elastix 2.0 y versiones superiores.



La actualización que corrije los problemas antes mencionados está disponible en el repositorio de actualizaciones de Elastix y se puede actualizar desde la consola ejecutando el comando "yum update freePBX" o desde la interfaz Web de actualizaciones que posee Elastix. Los usuarios de Elastix 2.0 no necesitan hacer esta actualización. 



Se recuerda también a los usuarios que bajo ningún motivo se recomienda actualizar FreePBX desde la interfaz "no embebida", la manera correcta es a través de los paquetes RPM que posee Elastix. Actualizar FreePBX desde la interfaz "no embebida" puede sobreescribir cambios importantes en los paquetes RPMs distribuidos con Elastix


Fuente: Blog Elastix.org 

Cómo instalar Asterisk en un gateway Mediatrix

 


 


Mediatrix se ha convertido en el primer fabricante que le permite a los usuarios instalar un sistema Asterisk dentro de sus dispositivospara hacer uso de todos los puertos que trae el susodicho como si de una tarjeta se tratase.


Este fabricante de gateways ha puesto a disposición de los usuarios una API de desarrollo (SDK) para realizar aplicaciones y funciones personalizadas para que sean los propios usuarios los que puedan programárselas, y basándose en este SDK, ha elaborado un tutorial para que cualquier usuario pueda instalar Asterisk en el interior.


De momento, los únicos modelos que soportan esta característica son:



Hay que avisar que, debido al hardware que trae incorporado estos dispositivos, compilar Asterisk en esta arquitectura, requiere de tener instalado el SDK que nos permita crosscompilar para el sistema Mediatrix, por lo que, para facilitar esto, el equipo de desarrolladores del SDK de Media5 ya han elaborado una versión específica compilada especialmente para la arquitectura que utilizan los gateways y cuya explicación es la que se explica en el tutorial.


 


Si eres uno de los afortunados poseedores de uno de estos gateways, ahora puedes tener tu Asterisk incluido, siguiendo el siguiente tutorial:

http://mediatrixsdk.media5corp.com/index.php?title=Installing_Asterisk


Fuente: Sinologic.net :D

lunes, 9 de mayo de 2011

Multi-videoconferencia móvil con Fring

 


Estos de Fring no paran de innovar y es que a partir de la versio? 1.5 de su cliente para Android han lanzado una característica bastante deseada: multivideoconferencia.


No hay mucho más que decir, salvo que se recomienda un móvil con Android y con un procesador mínimo de 1Ghz. Recibe 4 señales, por lo que también es recomendable tener al menos cobertura HDSPA para que el vídeo vaya más o menos fluido.


Aquí os dejo el vídeo promocional que merece la pena ver:



Más información: http://www.fring.com


Publicado el RFC para la transición de IPv6

 



Acaba de ser publicado el RFC (6157) para la transición del protocolo SIP a IPv6, un paso más para solucionar el tremendo inconveniente que supone el nuevo sistema de direcciones IP para un protocolo tan importante como es SIP.


Del IPv6 ya hemos hablado e incluso hemos explicado cómo configurar IPv6 en nuestro sistema y cómo configurar Asterisk para cuando tengamos una dirección IP de este tipo, el siguiente paso es esperar a que los operadores empiecen a dar direcciones IP estáticas para los usuarios, pero visto lo visto vamos a tener una temporada mala en cuanto a direcciones IP se refiere hasta que se estabilice el asunto.


Una vez llegado el día que dispongamos de nuestra dirección IPv6, la transición será dura ya que la mayoría de las aplicaciones que utilizamos a diario no están suficientemente preparadas para este tipo de direcciones y habrá que actualizar muchas de ellas.


El RFC-6157 puedes verlo aquí: http://www.rfc-editor.org/rfc/rfc6157.txt


Fuente: Sinologic.net :)