420 likes | 642 Views
FreeSWITCH – Asterisk con esteroides (Avoiding Deadlock). Moises Silva <moy@sangoma.com> 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.
E N D
FreeSWITCH – Asterisk con esteroides (Avoiding Deadlock) Moises Silva <moy@sangoma.com> 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 • Puertos análogos (FXO/FXS)
Breve Introducción a la Telefonía • Puertos digitales • T1/E1 ISDN, PRI, BRI, MFC-R2, SS7
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 • 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 Módulo switch_api_execute() FreeSWITCH CLI
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
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 Módulo Aplicación 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 FreeSWITCH switch_core_session_t
Arquitectura Básica • Pierna de una llamada en 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 FreeSWITCH
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
Arquitectura Básica • Qué hace struct ast_frame? • Representa todo tipo de “media” y señalización • Audio y Video • DTMF • Y mas … Asterisk Entran paquetes 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 Audio saliente FreeSWITCH DTMF entrante DTMF saliente Señalización entrante 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? Ruteo Llamada entrante Llamada saliente
Arquitectura Básica (monitor thread) • Asterisk haciendo una llamada entre SIP y PRI. SIP: Invite chan_sip • - Allocate ast_channel • Set caller data • call ast_pbx_start() (new thread) PBX core ISDN: SETUP chan_dahdi ast_request -> ast_call() loop extensions.conf calls Dial() application ast_waitfor() ISDN: CONNECT ast_bridge_call() ast_channel_bridge() Media Exchange PBX core
Arquitectura Básica (monitor thread) • FreeSWITCH haciendo una llamada entre SIP y PRI. SIP: Invite mod_sofia • - call switch_core_session_request • Set caller profile • call switch_core_session_thread_launch() ISDN: SETUP (new thread) mod_openzap State machine routing state execute state Bridge Application switch_ivr_originate() ISDN: CONNECT (new thread) loop Handling state changes 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: moy@sangoma.com moises.silva@gmail.com http://www.moythreads.com/