FreeSWITCH – Asterisk con
esteroides (Avoiding Deadlock)
Moises Silva <[email protected]>
Manager de software
Sangoma Technologies
Agenda
•
Breve introducción a la telefonía
•
Telefonía de software libre
•
Qué es FreeSWITCH?
•
Aplicaciones para FreeSWITCH
•
El core de FreeSWITCH
Breve Introducción a la Telefonía
• Todos la hemos usado
• Que pasa cuando levantas el teléfono?
• Como se encuentran unos a otros?
• Que hay con la red celular?
• Que es un PBX? Para que sirve?
Breve Introducción a la Telefonía
Breve Introducción a la Telefonía
Breve Introducción a la Telefonía
• Puertos análogos (FXO/FXS)
Breve Introducción a la Telefonía
• Puertos digitales
– T1/E1 ISDN, PRI, BRI, MFC-R2, SS7
Me abuuuuurro!
Telefonía con software libre?
• Computadoras mas poderosas pueden procesar audio
• DSPs especializados no son estrictamente necesarios
• Hardware simple, software complejo
• Asterisk, FreeSWITCH, Kamailio, OpenSIPS, Yate …
• Una nueva era!
Telefonía con software libre
Telefonía con software libre
• Solo necesitas una computadora
• Si necesitas acceso a la PSTN, una tarjeta PCI/PCIe
FreeSWITCH
• No siempre uso switches, pero cuando lo hago, prefiero
FreeSWITCH
Qué es FreeSWITCH
• Solución en software de telefonía
• Auspiciado por el Open Source Telephony Advancement
Group (OSTAG)
• Licencia MPL
• Escala desde soft-phone hasta softswitch clase 5
• Maneja audio, video, texto
• Corre en Linux, BSD, MacOS, Windows y iOS!
Qué es FreeSWITCH
• Poderosa habilidad de ruteo usando expresiones regulares
• No es un SIP proxy, sino un B2BUA
Qué es FreeSWITCH
• Surge con la idea de tener una mejor plataforma que
Asterisk
• Su author, Anthony Minessale, fué el mayor contribuyente a
Asterisk por muchos años
• Diseñado desde el principio para escalar
• Altamente multi-thread
• Reuso de muchos componentes (no reinventar la rueda)
• Avoiding the deadlock!
Protocolos VoIP en FreeSWITCH
• SIP
– UDP, TCP, TLS, SCTP, SRTP, ZRTP, IPv6 …
• Gtalk (jingle)
• Skype
• RTMP
• H.323, IAX2, Skinny …
Protocolos PSTN en FreeSWITCH
• FXO/FXS
• PRI / BRI
• MFC-R2
• GSM
• SS7
• Soporte para varios proveedores de hardware (ej. Sangoma)
Soporte para lenguajes
• Lua
• PERL
• Ruby
• Python
• Java & .NET
• JavaScript
Aplicaciones Nativas
• Voicemail
• Colas para call centers
• Conferencias en alta definición
• Text to Speech y reconocimiento de voz
• FAX, T.30 y T.38
Codecs
• Banda angosta, banda ancha y ultra banda ancha
• CELT (32kHz y 48kHz)
• G.722.1C (HD Siren)
• G.729
• SILK (El codec de Skype)
Eventos en FreeSWITCH
•
API completamente abstracta
•
El core y las aplicaciones disparan eventos
•
Los modulos pueden reservar tipos de eventos
•
mod_event_socket es el módulo equivalente al manager de
Asterisk
•
Diferentes prioridades:
–
–
–
SWITCH_PRIORITY_NORMAL
SWITCH_PRIORITY_LOW
SWITCH_PRIORITY_HIGH
Ejecución de comandos
•
Cada módulo registra comandos de administración
•
Todos los comandos pueden ser ejecutados via mod_event_socket
•
Puedes ejecutar comandos inclusive via HTTP
mod_event_socket
switch_api_execute()
FreeSWITCH CLI
Módulo
Aplicaciones para FreeSWITCH
•
•
•
•
•
•
•
•
•
•
Softphone
VoIP gateway
PBX
Servidor de registros
Servidor de ruteo de llamadas
Servidor de transcoding
Session border controller
Servidor de conferencias
Marcador predictivo
Servidor de fax
Alta disponibilidad
FreeSWITCH “hola mundo”
FreeSWITCH “hola mundo” (en LUA)
FreeSWITCH con Python
Contestando un SMS
Por qué modular?
• Componentes de construcción
• Capacidad de extender el core
• Sencilla solución de defectos
Ejemplos de arquitecturas modulares
•
Kernel de Linux (character devices, block devices, filesystems etc)
•
Interpretes de PHP, Python y PERL (soportan extensiones)
•
Apache (loggers, generators, filters, mappers)
•
FreeSWITCH y Asterisk
Arquitectura Modular
• Registrar interfaces con el core
• El core provee APIs a los escritores de módulos
• El core usa las interfaces registrada para solicitar servicios
APIs del core
Aplicación
Módulo
Interfaces de los
módulos
Abstracción de una llamada
•
Como hacemos una abstracción de una llamada?
Asterisk
Incoming call
FreeSWITCH
Arquitectura Básica
Asterisk
struct ast_channel
switch_core_session_t
FreeSWITCH
Arquitectura Básica
•
Pierna de una llamada en FreeSWITCH
switch_core_session_t
FreeSWITCH
- Memory pool
- Owner thread
- I/O event hooks
- Endpoint interface
- Event and message queues
- Codec preferences
- Channel
- Direction
- Event hooks
- DTMF queue
- Private hash
- State and state handlers
- Caller profile
Arquitectura Básica
•
Pierna de una llamada en Asterisk
struct ast_channel
Asterisk
- No memory pool
- No owner thread
- Just audio hooks
- Tech interface
- No event or message queues
- Codec preferences
- Direction as flag AST_FLAG_OUTGOING
- No DTMF queue (generic frame queue)
- Data stores instead of private hash
- No generic state handlers
- Extension, context and ast_callerid
instead of caller profile.
Arquitectura Básica
•
Qué hace struct ast_frame?
•
Representa todo tipo de “media” y señalización
•
Audio y Video
•
DTMF
•
Y mas …
Entran paquetes
Asterisk
Salen paquetes
Asterisk frames (signaling, audio, dtmf, video, fax)
Arquitectura Básica
•
FreeSWITCH tiene switch_frame_t.
•
switch_frame_t unicamente representa “media”.
•
La señalización es manejada con switch_core_session_message_t
•
El DTMF es manejado a través de una cola
Audio entrante
DTMF entrante
Señalización entrante
Audio saliente
FreeSWITCH
DTMF saliente
Señalización saliente
Clara separación de señalización, audio, dtmf etc.
Arquitectura Básica
•
Como se maneja una llamada de 2 piernas?
Llamada entrante
Ruteo
Llamada saliente
Arquitectura Básica
•
Asterisk haciendo una llamada entre SIP y PRI.
SIP: Invite
(monitor thread)
chan_sip
- Allocate ast_channel
- Set caller data
- call ast_pbx_start()
(new thread)
PBX core
ISDN: SETUP
ast_request -> ast_call()
loop
extensions.conf calls
Dial() application
Media
Exchange
chan_dahdi
ast_waitfor()
PBX core
ISDN: CONNECT
ast_bridge_call()
ast_channel_bridge()
Arquitectura Básica
•
FreeSWITCH haciendo una llamada entre SIP y PRI.
SIP: Invite
(monitor thread)
mod_sofia
- call switch_core_session_request
- Set caller profile
- call switch_core_session_thread_launch()
ISDN: SETUP
(new thread)
State
machine
loop
Handling
state changes
routing state
execute state
Bridge Application
switch_ivr_originate()
mod_openzap
ISDN: CONNECT
(new thread)
State
machine
Media
Exchange
loop
Handling
state changes
Conclusión
•
Nos encontramos en una carrera por escalabilidad, características
y adopción de la tecnología entre varios proyectos de telefonía libre
•
FreeSWITCH aún necesita mayor adopción y aplicaciones en su
ecosistema
•
Asterisk necesita mas mejoras en su arquitectura para escalar
•
La competencia entre Asterisk y FreeSWITCH definitivamente los
ha llevado a ser mejores
Gracias!
Preguntas y comentarios?
Contact e-mail: [email protected]
[email protected]
http://www.moythreads.com/
Descargar

FreeSWITCH