Mi Brain-Training Personal

Para que no se me olviden las cosas…

¿Qué es y para qué sirve ENUM?

Últimamente he estado jugando un poco con ENUM, y casualmente la semana pasada también lo comentamos en Asterisk-ES, así que me he animado a escribir un post al respecto.

DISCLAIMER: No soy un super-mega-experto conocedor de la tecnologia en sí, pero la he utilizado y la entiendo, espero que os sea util ;)

ENUM o tElephone NUMber mapping es un sistema que nos permite utilizar el sistema DNS para hacer consultas en base a numeros de telefono. Ein?! Normalmente hacemos consultas DNS sobre un dominio para saber cual es la IP a la que apunta, su servidor de correo, o si usa SRV hasta cual es su servidor SIP. Con ENUM hacemos la consulta DNS (de tipo NAPTR) en base a un numero de telefono y podremos obtener informacion como una URI SIP, información de geolocalización, blog, twitter, … Lo interesante es que podemos obtener una URI SIP a la que podemos llamar en lugar de al número, por lo que el coste de la llamada quedaría reducido a 0. How cool is that?

Como siempre que hay algo gratis involucrado, surgen los problemas: ¿quién llena las bases de datos ENUM? ¿está la gente interesada? ¿y las grandes telcos? Seguramente el principal problema de la no expansion de ENUM sea que es un servicio que no se puede cobrar, por lo que es algo que se hace pero que no retorna un beneficio ni inmediato ni directo. Por otro lado, para poder introducir tus datos en ENUM es necesario contactar con la autoridad responsable y demostrar que tal número es tuyo. El proceso implica demostrar mediante facturas, etc. que eres el usuario de dicho número, pero esto no es como darte de alta en Twitter, y la gente no suele querer perder el tiempo… Ademas, las grandes operadoras obviamente no quieren que la gente use ENUM, porque entonces no facturarias las llamadas que gracias a ENUM se hacen por SIP.

¿Entonces quién usa ENUM? ENUM tiene un árbol publico (e164.arpa) pero nadie te impide tener tu propio árbol ENUM privado, por lo que es posible utilizar ENUM internamente dentro de un ITSP por ejemplo, de manera que antes de sacar la llamada de un cliente a PSTN podemos consultar en ENUM si la llamada es para otro usuario de nuestra red, y enrutarla a coste 0 (esto se puede hacer de muchas maneras, ENUM es una de ellas).

Bueno, tras la brasa inicial vamos a ver si algo de lo que he dicho es verdad. Para ello vamos a ver un ejemplo real, con el siguiente numero: +40317105163. Se trata de un DID de Rumania que apunta a la cuenta SIP de mi trabajo asi que absteneos de intentar venderme viagra a las 4 de la mañana ;) Para ver qué información tiene asociado ese número de telefono haremos una consulta DNS de tipo NAPTR al arbol e164.arpa:

enum

Como se puede apreciar en la imagen la consulta devuelve 4 resultados: una URI SIP, dos direcciones web y una dirección de geolocalización. Al parecer esto del ENUM no es del todo mentira ;)

El Capitán Obvio me ha dicho que esto no tiene sentido a menos que la gente introduzca ahí su número, y claro está que no es algo que muchos particulares estén dispuestos a hacer, pero para empresas, y mas concretamente las del sector de las comunicaciones y/o VoIP podria resultar interesante (en realidad para los que les llaman).

En el siguiente post comentaré que utilidad podemos darle a ENUM desde un móvil con Android, stay tuned!

Unos links de interés:

http://es.wikitel.info/wiki/Enum
http://en.wikipedia.org/wiki/Enum

http://www.e164.org/
https://secure.dns-hosting.info/enum_lookup.phtml

Root y custom ROM en el Nexus One

Muy buenas amigos del androide,

Hoy haremos el Nexus One un poco menos “aburrido” :) El Market tiene muchas aplicaciones, sí, pero no somos root, no podemos hacer tethering, ni tener OpenVPN… ¡asi que toca flashear!

Para poder tener una mayor libertado sobre nuestro terminal y poder flashear cualquier ROM primero flashearemos una recovery image, de manera que podamos hacer una copia de seguridad de todo el firmware y jugar sobre seguro. El asunto es que para poder instalar esta recovery image será necesario desbloquear el bootloader, algo que invalida la garantía, así que si no os importa ese pequeño detalle seguimos adelante. ;)

En este post haremos lo siguiente: desbloquear el bootloader, flasear la ROM CyanogenMod 5.0 beta3 y por ultimo flashear una nueva imagen del kernel que permite direccionar más RAM, de manera que el terminal se movera mas ‘fresco’. No será necesario hacer nada especial para hacernos root en el terminal, ya que la ROM que vamos a instalar ya lo trae de serie. ¡Vamos al lio!

Descargar el software necesario

Desbloquear el bootloader

Con el terminal apagado, mantenemos pulsado el trackball y pulsamos el boton de encendido para entrar en el menu del bootloader. Una vez alli utilizaremos la herramienta fastboot para desbloquear el bootloader:

./fastboot-linux oem unlock

Al ejecutar el comando nos saldra una ventana advirtiendonos de las consecuencias. El Capitán Obvio nos ordena que aceptemos.

El zip de fastboot tambien contiene los binarios para Windows y Mac, usad el que corresponda.

Instalar el Recovery Image

Flasheamos la imagen de recovery con fastboot (tenemos que estar en el menu del bootloader igual que antes):

./fastboot-linux devices (nos aseguramos de que nuestro androide es detectado)
./fastboot-linux flash recovery recovery-RA-nexus-v1.5.3.img

Instalar la ROM CyanogenMod 5.0 beta3

Primero tenemos que copiar los ficheros zip de la ROM de Cyanogen y las aplicaciones de Google a la raiz de la tarjeta SD.

Llegado este punto lo mejor es hacer un backup completo del terminal, seleccionando la opción “Nand backup”.

Antes de proceder a flashear nada es necesario que hagamos un wipe del terminal (al loro, que se borra TODO). Para ello iniciamos el terminal en el menu del bootloader y seleccionamos la opción recovery y luego “Wipe data/factory reset”.

Una vez hecho el wipe podemos proseguir a flashear, primero la ROM de Cyanogen y luego las aplicaciones de Google. Para ello utilizaremos la opción “Flash zip from sdcard”.

¡Más RAM por favor!

El Nexus One tiene mucha RAM, pero nunca hay demasiada RAM ;) asi que vamos a instalar un nuevo kernel con soporte para direccionar más memoria, de manera que podamos tener más aplicaciones abiertas simultánemente sin que se nos ralentice el sistema.

./fastboot-linux flash zimage zImage-2.6.29.6-highmem

Yo he notado muchísima diferencia, así que os lo recomiendo.

Bueno, esto es todo por hoy, en el proximo post hablaremos de VoIP en Android, stay tuned!

4320083024_b298b49378_m

Fuentes:

http://android.modaco.com/content/google-nexus-one-nexusone-modaco-com/299241/05-jan-1-5-3-ra-nexus-recovery-image/
http://android.modaco.com/content/google-nexus-one-nexusone-modaco-com/299078/how-to-unlock-the-bootloader-on-your-nexus-one/
http://n0rp.chemlab.org/android/nexus/testing/
http://forum.xda-developers.com/showthread.php?t=623496

Parallel forking, RFC3326 y los p*t*s fabricantes

Una de las cool features que SIP soporta desde un principio es el Parallel Forking. La idea es sencilla, podemos tener nuestra cuenta de usuario registrada desde diversas ubicaciones y cuando nos manden un INVITE el proxy se encargará de mandarlo a todas las ubicaciones a la vez, y el que primero conteste la llamada se la queda. De esta manera solo tenemos que gestionar una identidad,en lugar de tener varias cuentas SIP en plan “saghul_laptop” y “saghul_hardphone”.

Como no podía ser de otra manera Asterisk no soporta parallel forking, pero veremos más delante cómo algo tiene que decir en el tema del post.

En el diagrama de abajo podéis ver el flujo SIP de una llamada de Alice a Bob a través de un proxy (las respuestas provisionales se han omitido para simplificar):

parallel_forking

Bob se encuentra registrado en 2 ubicaciones, por lo que los dos terminales comienzan a sonar. Bob contesta en la oficina, por lo que el proxy genera un CANCEL al INVITE que va a casa, para que el terminal deje de sonar. Hasta aquí todo va bien, pero al volver a casa Bob verá que tiene X llamadas perdidas, llamadas que en realidad ha atendido desde la oficina. ¿Cómo solucionamos esto? ¡El RFC3326 viene al rescate!

E RFC3326 define una nueva cabecera para el método CANCEL: “Reason”. Mediante esta cabecera podemos indicar al terminal la causa de la cancelación:

Reason: SIP ;cause=200 ;text="Call completed elsewhere"

De esta manera el terminal puede saber si el CANCEL ha sido debido a que el llamante ha decidido cancelar la llamada o si ha sido el proxy el que ha generado el CANCEL porque la llamada ha sido contestada en otra ubicación. ¿A que mola?

OpenSIPS añade esta cabecera a los CANCEL que genera desde la versión 1.6 y Kamailio si no lo hace ya lo hará pronto (he visto esta feature request propuesta por un tal ibc ;) ). Sorprendentemente ¡Asterisk también soporta esto! Es decir, si haces un Dial(SIP/saghul&SIP/manwe&SIP/ibc) los CANCEL generados para los que no cojan la llamada tendrán esta cabecera presente. Es el parallel forking de los pobres, pero mola que Asterisk lo soporte.

¿Cual es el problema entonces? Pues que los fabricantes no implementan este RFC, que tiene 8 páginas, ¡8 jodidas páginas! Por lo que veo Snom es el único que lo soporta desde su versión 7 del firmware, así que si alguien lo prueba que me lo comente pliz :) Y si encontráis otro terminal que lo implemente ¡comentad también!

Sin la implementación de este RFC el parallel forking pierde todo el carisma e incluso puede que gente lo vea como algo molesto. Por lo que a mi respecta voy a implementar el soporte para esto en cierto softphone, pero manda huevos que mi Cisco 7960 de Jack Bauer no lo haga…

Nexus One: primeras impresiones

Como algunos sabéis por Twitter, aprovechando la jugada de la ITEXPO me he agennciado el juguete de moda: un Nexus One. Tras unos días jugando con el voy a comentar un poco el feeling que he tenido en diversos aspectos. Es obvio que el Nexus One ha sido diseñado para competir con el iPhone, y como casualmente también tengo uno, no puedo evitar compararlos ;)

Proceso de compra

Un 10 para Google. Hice el pedido un domingo por la tarde y el martes a las 9 de la mañana ya tenía el jueguete. Puedes seguir vía web por dónde va tu paquete, joder ¡solo falta el DNI de las personas que lo manipulan! ¡Y encima con mi nombre inscrito detrás! Me lo trajeron sin problemas al hotel, así que si váis de viaje a Estados Unidos por más de dos días no dudéis ni un segundo :)

Unboxing y primer contacto

Al abrir la caja te encuentras con un embalaje bastante similar el iPhone, sencillo, sin manual. Cuando te compras un Nokia u otro móvil te viene con un super-manual de 100 páginas que no se lee nadie. Cuando te compras un iPhone o un Nexus One no viene manual. Porque no hace falta. Es tan fácil de usar que no necesitas manual, y eso aunque a alguno le parezca un bug es  una feature.

El feeling del terminal es muy bueno: no pesa, parece consistente y robusto… pero le falta algo. Es dificil de explicar, pero podría decirse que veo el Nexus One como diseñado por un ingeniero mientras que el iPhone esta diseñado por alguien con más arte, por decirlo de alguna manera. No obstante, no echarás de menos tu iPhone, créeme.

Pantalla

Aunque la pantalla del N1 es solo 0,2 pulgadas más grande que la de el iPhone da la sensación de ser mucho más grande. Las fuentes son muy claras (de hecho es la que uso en mi desktop, ttf-droid) y se puede visualizar mucha más información que en el iPhone. Parece como si tuviera el doble de resolución o algo. :-O

Aplicaciones

Queridos señores de Apple, más vale que el iPhone OS 4.0 tenga multi-tasking, porque sino… El hardware del N1 es muy potente (procesador a 1GHz y 512MB de RAM) por lo que puedes tener muchas aplicaciones abiertas a la vez y ni te enteras. Personalmente siempre tengo un softphone SIP y un cliente de Jabber funcionando, y no tiene sentido abrir las aplicaciones solo cuando tu quieras hacer una llamada o mandar un mensaje, tienes que poder recibir llamadas…

“Apertura”

Vale, el iPhone funciona con un sistema operativo propietario y el N1 con uno libre, pero me he encontrado con las mismas trabas en ambos casos: si quieres hacer cosas diferentes con tu N1 tienes que ser root, y para eso tienes que realizar un proceso (habrá otro post :) ) que invalida la garantía. Lo mismo que hacer el famoso jailbreak, así que no por utilizar un sistema operativo libre tienes todo el control sobre el terminal… ¿got root?

Concluyendo…

No os rallo más, pero si tenéis la oportunidad de haceros con uno (566$ libre) cogedlo, además ¡ser un early adopter siempre mola! ;) He dejado unas fotos aquí en Flickr.

4299794413_7ffcaf1c1e_m

El viernes es día de VoIP Users Conference

Hoy voy a hablaros un poco de este evento que tiene lugar cada viernes llamado VoIP Users Conference o VUC.

Todos los viernes a las 18:00 (hora de Bilbo) tiene lugar el VUC. Consiste en una conferencia de audio a la que cualquiera se puede unir. Esta multiconferencia la dirige Randy Resnick (al que tuve ocasion de conocer en el AMOOCON) y obviamente trata de VoIP. Cada día hay algun invitado que habla sobre un tema en concreto, por ejemplo hoy Alex Balashov ha hablado sobre Kamailio/OpenSER.

Tras una hora de conversación con en invitado (cualquiera puede participar haciendo preguntas u aportaciones) da comienzo la parte mas distendida en la que la gente simplemente comenta temas de actualidad relacionados con VoIP, como eventos, nuevos productos, etc.

La conferencia se hospeda en el servicio ZipDx y es posible unirse mediante SIP, Skype o la PSTN. Aunque la hora no es la mejor del mundo, os recomiendo que os paséis por allí un dia, siempre se comenta algo interesante y se pasa un rato entretenido escuchando o hablando sobre VoIP. Además de por VoIP, tambien mola conectarse al canal de IRC del VUC (#vuc) ya que alli tiene lugar una conversación paralela en la que la gente comenta lo hablado en la conferencia o simplemente chatea sobre VoIP.

La duración es indeterminada, de hecho el record esta en ¡8 horas! Así que si os encontráis aburridos un viernes por la tarde conectaos al VUC!

Asterisk 1.6 y las nuevas fuentes de timing

Como sabréis no es que yo sea super-fan pro Asterisk 1.6 precisamente, pero por fin he probado algo que me ha gustado, así que voy a comentarlo por estos lares.

Antes de ponernos manos a la obra un poco de teoria rápida. Todo el mundo parece saber que necesitas tener una tarjeta o el driver dummy de DAHDI en Asterisk, pero no todos saben porque. Asterisk necesita una fuente de timing para lo siguiente:

  • Generar el audio saliente. Asterisk utiliza la fuente de tiempo disponible a la hora de enviar los paquetes de audio saliente. En ausencia de una fuente de tiempo fiable Asterisk puede utilizar el audio entrante como referencia, pero si el audio entrante viene con jitter por ejemplo, el saliente tambien lo tendrá, por lo que no es una buena idea ir por la vida sin una fuente fiable de tiempo.
  • IAX trunking. El IAX trunking es un método gracias al cual Asterisk puede ahorrarnos algo de ancho de banda en un enlace entre dos servidores ya que si tenemos 10 llamadas entre el servidor A y el servidor B nos ahorramos mandar 9 de las 10 cabeceras. Para que esto funcione correctamente la temporizacion ha de ser precisa, por lo que necesitaremos una fuente fiable de tiempo. ¿Pero quién usa IAX? Esto en realidad no nos interesa. ;)

Alguno pensara que me he olvidado de MeetMe. Pues no. MeetMe necesita DAHDI por otra razón: el motor de conferencias que usa MeetMe se encuentra en DAHDI. Podría decirse que MeetMe es un wrapper de la aplicación de conferencias de DAHDI. Por lo tanto, MeetMe siempre dependerá de DAHDI, aunque ya veremos que hay algunas alternativas.

2283676770_6b53f8b77f_m

Las mejoras de Asterisk 1.6.2 en cuanto a timing

Asterisk dispone de un API genérico de timing desde la version 1.6.1. La idea es disponer de diversos módulos que provean a Asterisk de una fuente de tiempo fiable, siendo DAHDI un simple módulo más. En Asterisk 1.6.2 tenemos lo siguiente módulos de timing:

  • res_timing_dahdi (desde Asterisk 1.6.1): Utiliza DAHDI como fuente de tiempo. Si no tenemos tarjetas podemos utilizar este módulo junto a dahdi_dummy para tener timing fiable.
  • res_timing_pthread (desde Asterisk 1.6.1): Utiliza la librería POSIX pthread para obtener el timing. Su rendimiento no es el tan bueno como el de DAHDI, pero tiene una ventaja importante: es portable. Con ésta fuente de tiempo es posible utilizar IAX trunking en FreeBSD o MacOSX por ejemplo. How cool is that?! :)
  • res_timing_timerfd (nuevo en Asterisk 1.6.2): Éste es el bueno. Utiliza TimerFD, un nuevo mecanismo del Kernel de Linux (>= 2.6.27) para proporcionar timing. También necesita de una version reciente de glibc (>= 2.8) pero a cambio nos ofrece una fuente de tiempo muy fiable y sin DAHDI. dahdi_dummy, te quedan dos telediarios. :)

Sustituyendo MeetMe

Hasta ahora he comentado el nuevo API de timing, pero no hemos solucionado el que MeetMe dependa de DAHDI. Obviamente no podemos utilizar MeetMe así que tenemos un par de alternativas:

  • AppKonference: Digamos que es un MeetMe con esteroides. Soporta VAD y video y no necesita DAHDI. El único problema (si es que lo consideramos un problema) es que no es una aplicación oficial.
  • ConfBridge: Se trata de una nueva aplicación que incluye Asterisk 1.6.2 perteneciente al nuevo API de bridging. No he hecho unas pruebas demasiado intensas, pero de momento no he tenido problemas.

Habilitar el timing interno

Para terminar, tenemos que habilitar el timing interno en Asterisk. Para ello editamos el fichero asterisk.conf y descomentamos la opción internal_timing=yes de la sección [opcions].

Esto es todo por hoy, es una buena excusa para probar Asterisk 1.6 ¿no? :)

G722 y su interoperabilidad

Nunca hasta hace unos días me había pasado algo similar, así que voy a comentarlo por aqui :)

El tema que hoy nos ocupa es el codec G722 y su interoperabilidad. Algo que en principio no debería preocuparnos, ya que si dos terminales utilizan el mismo codec todo deberia ir bien, ¿no? Pues no.

La semana pasada hablamos de esto en el VUC, porque aparentemente todos los softphones basados en PJSIP sufren del mismo problema: las llamadas en G722 suenan distorsionadas y con algo de superposición en el audio. Ya que en el VUC sólo se usa G722 (aunque se puede conectar por Skype o por SIP con G711 también) esto era importante así que Randy se puso a bombardear las listas de correo intentando encontrar respuesta al problema.

El Problema

En G722 el audio se muestrea a 16KHz con 14 bits. Peeeeero, como lo que nos vienen son 16 bits hay implementaciones que hacen cosas distintas: Asterisk y FreeSWITCH usan los primeros 14 bits y se olvidan de los 2 que sobran, y la cosa funciona. En cambio, PJSIP y VoiceAge hacen un bit-shifting de 2 bits, es decir, desplazan los 16 bits a la izquierda perdiendo los 2 de abajo. La cuestión es que esa diferencia de 2 bits se traduce en 12 dB, por lo que el audio se distorsiona, y al haber “movido” el audio se escuchan chasquidos extraños.

La solución

Obviamente no hay una unica solución, hay que ir a por la mas interoperable, así que he optado por hacer que PJSIP no haga el bit-shifting y así el audio en G722 fluye alegremente. :)

¿Alguna experiencia al respecto?

Now you can Blink!

Como ya estaba anunciado, en diciembre se liberaría la primera beta publica de Blink, y asi ha sido. Ya podeis descargar Blink 0.11 de su pagina web.

Esta primera version es solo para MacOSX y no tiene todas sus funcionalidades habilitadas porque lo que se quería conseguir es tener un core solido y estable sobre el que posteriormente añadir las nuevas nice and cool sexy features. Esta primera version incluye las siguientes funcionalidades:

  • Sesiones de audio con los siguientes codecs: speex, g722, g711a, g711u, ilbc, gsm.
  • Sesiones MSRP: chat y envio de ficheros.
  • Compartir escritorio.
  • Integracion con la agenda de Mac.
  • Soporte para multiples llamadas.
  • Soporte para multiples cuentas de usuario.
  • ICE.
  • Detección de dispositivos de sonido “en caliente”.

Yo al menos llevo usandolo varias semanas todos los dias y tras varias iteraciones en el diseño de su core (su desarrolllo ha llevado varios meses) se ha obtenido algo sólido que funciona.

Proximamente comenzará el desarrollo de una nueva interfaz gráfica en Qt para poder llevar Blink a Windows y GNU/Linux, aunque su core, que también esta disponible, funciona perfectamente en GNU/Linux. Lo siguiente será el soporte de presencia SIMPLE y XCAP para lo cual se ha estado trabajando en los proyectos OpenXCAP y OpenSIPS a fin de tener todo listo.

Aunque no puedo ser 100% objetivo, he de decir que la interfaz gráfica me parece la mas intuitiva que he visto y es muy sencillo gestionar tus diversas cuentas y llamadas sin complicar la apariencia del software. Además, desde el propio Blink es posible crearse una cuenta SIP gratuita en el servicio SIP2SIP.

Happy Blinking!

BlinkScreenshot-AudioSessions

Prueba Asterisk sin “ensuciar” tu sistema

Supongo que a más de uno le habrá pasado lo siguiente: quieres preparar un escenario de prueba e instalas un Asterisk, luego resulta que quieres probar otra versión, así que machacas la que había… y al final no sabes ni lo que tienes.

Lo ideal sería poder tener varias versiones de Asterisk instaladas en nuestra máquina de pruebas y así poder ejecutar la que queramos sin que interfieran unas versiones con otras. Vamos a ver 2 maneras de hacerlo: instalando Asterisk en multiples lugares y utilizando live_ast.

Instalar Asterisk en distintos lugares

Si queremos tener un Asterisk 1.4 y un Asterisk 1.6 en el mismo sistema haremos lo siguiente para tener cada uno instalado en /opt por ejemplo:

cd asteriak14
./configure --prefix=/opt/asterisk14 --sysconfdir=/opt/asterisk14/etc --localstatedir=/opt/asterisk14}/var
make menuselect
make
make install
make samples

cd asteriak16
./configure --prefix=/opt/asterisk16 --sysconfdir=/opt/asterisk16/etc --localstatedir=/opt/asterisk16}/var
make menuselect
make
make install
make samples

En este ejemplo se asume que tenemos las fuentes de Asterisk 1.4 en un directorio llamado “asterisk14″ y las de la 1.6 en “asterisk16″. De esta manera hemos conseguido tener dos versiones completamente aisladas en /opt. Las configuraciones estarán en /opt/asterisk14/etc y /opt/asterisk16/etc respectivamente.

Utilizar live_ast

Ésta es la que he descubierto hoy y me ha gustado ;) live_ast es un script que Tzafir Cohen hizo en bash que nos permite ejecutar Asterisk en el mismo directorio en el que lo hemos descargado. Esta disponible en trunk y en Asterisk 1.6, pero también funciona con Asterisk 1.4 y ya que estaba lo he incluido en la RSP ;) Veamos como funciona:

cd asterisk-1.6.2
cp contrib/scripts/live_ast .
./live_ast configure
./live_ast install
./live_ast samples
./live_ast run -vvvvvvvvvc

Lo que realiza el script es fijar las variables necesarias para que Asterisk quede completamente instalado en el subdirectorio “live”.

Ya no hay excusa para no tener una maquina de pruebas con 50 versiones de Asterisk ;)

HowTo: Usar el móvil de manera remota con Asterisk y chan_sebi

Supongamos que por alguna razón vamos a estar ausentes de nuestra tierra una temporada y no queremos gastarnos una pasta en roaming pero queremos que nuestra gente siga pudiendo llamarnos.

Lo primero que necesitamos es algo con lo que hacer y recibir llamadas y SMS. Ese algo es Asterisk con chan_sebi, un canal que ha desarrollado Odicha, un grande del bare metal.

Muchos modems USB soportan el envio de SMS, pero necesitamos uno que soporte tambien voz. En mi caso utilice el Huawei K3520, que puede encontrarse en eBay por unos 50-70 euros.

Manos a la obra!

Lo primero es descargar y compilar el codigo, que se encuentra en el repositorio RSP:

svn co http://asterisk-es-rsp.irontec.com/svn/asterisk-es-rsp/
cd branches/asterisk/1.4.24
./configure && make && make install
make samples && make config

ahora instalamos los asterisk-addons de Odicha, los que tienen chan_sebi :)

cd team/Odicha/1_4/asterisk-addons-1.4.9
./configure && make menuselect (marcamos chan_sebi)
make install && make samples

Una vez lo tenemos instalado vamos a configurar chan_sebi editando el fichero /etc/asterisk/sebi.conf:

[huawei1]
imei=3534xxxxxxxx ; imei of modem
;pin=12345678 ; pin (use only if sim card has pin request enabled)
csca=+34607003110 ; SMS centre number (Vodafone ES - example)
sms=yes ; Enable sms send/receive
voice=yes ; Enable voice for calls
context=from-sebi ; dialplan context for incoming calls
group=1 ; this phone is in channel group 1
volume=5 ; Modem Volume (1-5)
language=es ; Channel language
;nocallsetup=yes ; set this only if you want override call status notifications
;hidecid=#31# ; if you want outbound calls without caller id
;noincomingcalls=yes ; Reject all voice incoming calls

Solo tenemos que ajustar el IMEI, PIN, numero de servicio de SMS y contexto.

Ahora vamos a crear un sencillo dialplan para hacer/recibir llamadas y SMS:

[from-sebi]
; Incoming calls
exten => s,1,NoOp(Incoming call from ${CALLERID(num)})
exten => s,n,Dial(SIP/saghul,60))
exten => s,n,Hangup
; Incomming SMS
exten => sms,1,NoOp(Incoming SMS from ${SMSSRC})
exten => sms,n,System(/usr/local/bin/recvSMS.sh "${SMSSRC}" "${SMSTXT}")
exten => sms,n,Hangup
[from-ast16]
exten => _6XXXXXXXX,1,NoOp(Outgoing call through the SEBI device to ${EXTEN})
exten => _6XXXXXXXX,n,Dial(Sebi/g1/${EXTEN},60)
exten => _6XXXXXXXX,n,Hangup

Con esto ya podremos hacer y recibir llamadas, pero para los SMS vamos a hacer algo mas elegante:

Utilizaremos el script recvSMS.sh, que nos mandara un email con el asunto “SMS from 6123123123″ a la dirección de email que le indiquemos. Y para rizar el rizo, utilizaremos el script readMail.py cada minuto en el cron,  para que si respondemos al email del SMS esa respuesta se convierta en SMS. How cool is that?!

Para finalizar, si no teneis instalado ningun servidor de correo podeis instalar ssmtp y utilizarlo con una cuanta de GMail por ejemplo. Es tan facil como esto:

remote-mobile:~# cat /etc/ssmtp/ssmtp.conf
root=tu_email@gmail.com
mailhub=smtp.gmail.com:587
rewriteDomain=
hostname=tu_email@gmail.com
UseSTARTTLS=YES
AuthUser=tu_usuario_de_gmail
AuthPass=tu_clave_de_gmail
FromLineOverride=YES

y esto:

remote-mobile:~# cat /etc/ssmtp/revaliases
root:saghul.movil@gmail.com:smtp.gmail.com:587

Enjoy! ;)

PD: Manwe y amigos de la RAE: perdón por los acentos y tal, ando en precario a nivel de teclados y el autocorrector no es que mole mucho… :)