freeswitch: asterisk con esteroides

42
FreeSWITCH – Asterisk con esteroides (Avoiding Deadlock) Moises Silva <[email protected]> Manager de software Sangoma Technologies

Upload: moises-silva

Post on 09-Jun-2015

3.147 views

Category:

Technology


8 download

DESCRIPTION

Introduccion a FreeSWITCH

TRANSCRIPT

Page 1: FreeSWITCH: Asterisk con Esteroides

FreeSWITCH – Asterisk con esteroides (Avoiding Deadlock)

Moises Silva <[email protected]>

Manager de software

Sangoma Technologies

Page 2: FreeSWITCH: Asterisk con Esteroides

Agenda

• Breve introducción a la telefonía

• Telefonía de software libre

• Qué es FreeSWITCH?

• Aplicaciones para FreeSWITCH

• El core de FreeSWITCH

Page 3: FreeSWITCH: Asterisk con Esteroides

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?

Page 4: FreeSWITCH: Asterisk con Esteroides

Breve Introducción a la Telefonía

Page 5: FreeSWITCH: Asterisk con Esteroides

Breve Introducción a la Telefonía

Page 6: FreeSWITCH: Asterisk con Esteroides

Breve Introducción a la Telefonía

• Puertos análogos (FXO/FXS)

Page 7: FreeSWITCH: Asterisk con Esteroides

Breve Introducción a la Telefonía

• Puertos digitales

– T1/E1 ISDN, PRI, BRI, MFC-R2, SS7

Page 8: FreeSWITCH: Asterisk con Esteroides

Me abuuuuurro!

Page 9: FreeSWITCH: Asterisk con Esteroides

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!

Page 10: FreeSWITCH: Asterisk con Esteroides

Telefonía con software libre

Page 11: FreeSWITCH: Asterisk con Esteroides

Telefonía con software libre

• Solo necesitas una computadora

• Si necesitas acceso a la PSTN, una tarjeta PCI/PCIe

Page 12: FreeSWITCH: Asterisk con Esteroides

FreeSWITCH

• No siempre uso switches, pero cuando lo hago, prefiero FreeSWITCH

Page 13: FreeSWITCH: Asterisk con Esteroides

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!

Page 14: FreeSWITCH: Asterisk con Esteroides

Qué es FreeSWITCH

• Poderosa habilidad de ruteo usando expresiones regulares

• No es un SIP proxy, sino un B2BUA

Page 15: FreeSWITCH: Asterisk con Esteroides

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!

Page 16: FreeSWITCH: Asterisk con Esteroides

Protocolos VoIP en FreeSWITCH

• SIP– UDP, TCP, TLS, SCTP, SRTP, ZRTP, IPv6 …

• Gtalk (jingle)

• Skype

• RTMP

• H.323, IAX2, Skinny …

Page 17: FreeSWITCH: Asterisk con Esteroides

Protocolos PSTN en FreeSWITCH

• FXO/FXS

• PRI / BRI

• MFC-R2

• GSM

• SS7

• Soporte para varios proveedores de hardware (ej. Sangoma)

Page 18: FreeSWITCH: Asterisk con Esteroides

Soporte para lenguajes

• Lua

• PERL

• Ruby

• Python

• Java & .NET

• JavaScript

Page 19: FreeSWITCH: Asterisk con Esteroides

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

Page 20: FreeSWITCH: Asterisk con Esteroides

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)

Page 21: FreeSWITCH: Asterisk con Esteroides

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

Page 22: FreeSWITCH: Asterisk con Esteroides

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

FreeSWITCH CLI

switch_api_execute() Módulo

Page 23: FreeSWITCH: Asterisk con Esteroides

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

Page 24: FreeSWITCH: Asterisk con Esteroides

Alta disponibilidad

Page 25: FreeSWITCH: Asterisk con Esteroides

FreeSWITCH “hola mundo”

Page 26: FreeSWITCH: Asterisk con Esteroides

FreeSWITCH “hola mundo” (en LUA)

Page 27: FreeSWITCH: Asterisk con Esteroides

FreeSWITCH con Python

Page 28: FreeSWITCH: Asterisk con Esteroides

Contestando un SMS

Page 29: FreeSWITCH: Asterisk con Esteroides

Por qué modular?

• Componentes de construcción

• Capacidad de extender el core

• Sencilla solución de defectos

Page 30: FreeSWITCH: Asterisk con Esteroides

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

Page 31: FreeSWITCH: Asterisk con Esteroides

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

Aplicación Módulo

APIs del core

Interfaces de los módulos

Page 32: FreeSWITCH: Asterisk con Esteroides

Abstracción de una llamada

• Como hacemos una abstracción de una llamada?

Incoming call

Asterisk

FreeSWITCH

Page 33: FreeSWITCH: Asterisk con Esteroides

Arquitectura Básica

Asterisk

FreeSWITCH

struct ast_channel

switch_core_session_t

Page 34: FreeSWITCH: Asterisk con Esteroides

Arquitectura Básica

• Pierna de una llamada en FreeSWITCH

FreeSWITCH

switch_core_session_t

- 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

Page 35: FreeSWITCH: Asterisk con Esteroides

Arquitectura Básica

• Pierna de una llamada en Asterisk

struct ast_channel

- 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.

Asterisk

Page 36: FreeSWITCH: Asterisk con Esteroides

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 frames (signaling, audio, dtmf, video, fax)

Asterisk Salen paquetes

Page 37: FreeSWITCH: Asterisk con Esteroides

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

Clara separación de señalización, audio, dtmf etc.

FreeSWITCHDTMF entrante

Señalización entrante

Audio saliente

DTMF saliente

Señalización saliente

Page 38: FreeSWITCH: Asterisk con Esteroides

Arquitectura Básica

• Como se maneja una llamada de 2 piernas?

Llamada entrante Ruteo Llamada saliente

Page 39: FreeSWITCH: Asterisk con Esteroides

Arquitectura Básica

• Asterisk haciendo una llamada entre SIP y PRI.

chan_sip

SIP: Invite

- Allocate ast_channel- Set caller data- call ast_pbx_start()

(new thread)

(monitor thread)

PBX core

loop extensions.conf calls Dial() application

chan_dahdiast_request -> ast_call()ISDN: SETUP

ast_waitfor()

PBX core

ISDN: CONNECT

ast_bridge_call()ast_channel_bridge()

MediaExchange

Page 40: FreeSWITCH: Asterisk con Esteroides

Arquitectura Básica

• FreeSWITCH haciendo una llamada entre SIP y PRI.

mod_sofia

SIP: Invite

- call switch_core_session_request- Set caller profile- call switch_core_session_thread_launch()

(new thread)

(monitor thread)

State machine

loop Handlingstate changes

mod_openzaprouting stateexecute stateBridge Applicationswitch_ivr_originate()

ISDN: SETUP

ISDN: CONNECT

MediaExchange

(new thread)State

machine

loop Handlingstate changes

Page 41: FreeSWITCH: Asterisk con Esteroides

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