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
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()        Módulo
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
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

                        - Memory pool
                        - Owner thread
    FreeSWITCH          - 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

                         - No memory pool
         Asterisk        - 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                                     Audio saliente


    DTMF entrante                                      DTMF saliente
                              FreeSWITCH

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?




    Llamada entrante            Ruteo           Llamada saliente
Arquitectura Básica
•     Asterisk haciendo una llamada entre SIP y PRI.
              (monitor thread)
SIP: Invite
              chan_sip

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

PBX core                                                              ISDN: SETUP
                   ast_request -> ast_call()            chan_dahdi

 loop
 extensions.conf calls                      ast_waitfor()            ISDN: CONNECT
 Dial() application

               Media                                 ast_bridge_call()
                                         PBX core    ast_channel_bridge()
               Exchange
Arquitectura Básica
•     FreeSWITCH haciendo una llamada entre SIP y PRI.
              (monitor thread)
SIP: Invite
              mod_sofia

                   - call switch_core_session_request
                   - Set caller profile
                   - call switch_core_session_thread_launch()
    (new thread)                                            ISDN: SETUP
                                            mod_openzap
 State             routing state
machine            execute state
                   Bridge Application                       ISDN: CONNECT
                   switch_ivr_originate()           (new thread)
loop
                                                                  State
Handling
                                                                 machine
state changes                    Media
                                                          loop
                                 Exchange                 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/

FreeSWITCH: Asterisk con Esteroides

  • 1.
    FreeSWITCH – Asteriskcon esteroides (Avoiding Deadlock) Moises Silva <moy@sangoma.com> Manager de software Sangoma Technologies
  • 2.
    Agenda • Breve introducción a la telefonía • Telefonía de software libre • Qué es FreeSWITCH? • Aplicaciones para FreeSWITCH • El core de FreeSWITCH
  • 3.
    Breve Introducción ala 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?
  • 4.
    Breve Introducción ala Telefonía
  • 5.
    Breve Introducción ala Telefonía
  • 6.
    Breve Introducción ala Telefonía • Puertos análogos (FXO/FXS)
  • 7.
    Breve Introducción ala Telefonía • Puertos digitales – T1/E1 ISDN, PRI, BRI, MFC-R2, SS7
  • 8.
  • 9.
    Telefonía con softwarelibre? • Computadoras mas poderosas pueden procesar audio • DSPs especializados no son estrictamente necesarios • Hardware simple, software complejo • Asterisk, FreeSWITCH, Kamailio, OpenSIPS, Yate … • Una nueva era!
  • 10.
  • 11.
    Telefonía con softwarelibre • Solo necesitas una computadora • Si necesitas acceso a la PSTN, una tarjeta PCI/PCIe
  • 12.
    FreeSWITCH • No siempre uso switches, pero cuando lo hago, prefiero FreeSWITCH
  • 13.
    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!
  • 14.
    Qué es FreeSWITCH • Poderosa habilidad de ruteo usando expresiones regulares • No es un SIP proxy, sino un B2BUA
  • 15.
    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!
  • 16.
    Protocolos VoIP enFreeSWITCH • SIP – UDP, TCP, TLS, SCTP, SRTP, ZRTP, IPv6 … • Gtalk (jingle) • Skype • RTMP • H.323, IAX2, Skinny …
  • 17.
    Protocolos PSTN enFreeSWITCH • FXO/FXS • PRI / BRI • MFC-R2 • GSM • SS7 • Soporte para varios proveedores de hardware (ej. Sangoma)
  • 18.
    Soporte para lenguajes • Lua • PERL • Ruby • Python • Java & .NET • JavaScript
  • 19.
    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
  • 20.
    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)
  • 21.
    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
  • 22.
    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() Módulo FreeSWITCH CLI
  • 23.
    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
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
    Por qué modular? • Componentes de construcción • Capacidad de extender el core • Sencilla solución de defectos
  • 30.
    Ejemplos de arquitecturasmodulares • 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
  • 31.
    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
  • 32.
    Abstracción de unallamada • Como hacemos una abstracción de una llamada? Asterisk Incoming call FreeSWITCH
  • 33.
    Arquitectura Básica Asterisk struct ast_channel switch_core_session_t FreeSWITCH
  • 34.
    Arquitectura Básica • Pierna de una llamada en FreeSWITCH switch_core_session_t - Memory pool - Owner thread FreeSWITCH - 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
  • 35.
    Arquitectura Básica • Pierna de una llamada en Asterisk struct ast_channel - No memory pool Asterisk - 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.
  • 36.
    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)
  • 37.
    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 DTMF entrante DTMF saliente FreeSWITCH Señalización entrante Señalización saliente Clara separación de señalización, audio, dtmf etc.
  • 38.
    Arquitectura Básica • Como se maneja una llamada de 2 piernas? Llamada entrante Ruteo Llamada saliente
  • 39.
    Arquitectura Básica • Asterisk haciendo una llamada entre SIP y PRI. (monitor thread) SIP: Invite chan_sip - Allocate ast_channel - Set caller data - call ast_pbx_start() (new thread) PBX core ISDN: SETUP ast_request -> ast_call() chan_dahdi loop extensions.conf calls ast_waitfor() ISDN: CONNECT Dial() application Media ast_bridge_call() PBX core ast_channel_bridge() Exchange
  • 40.
    Arquitectura Básica • FreeSWITCH haciendo una llamada entre SIP y PRI. (monitor thread) SIP: Invite mod_sofia - call switch_core_session_request - Set caller profile - call switch_core_session_thread_launch() (new thread) ISDN: SETUP mod_openzap State routing state machine execute state Bridge Application ISDN: CONNECT switch_ivr_originate() (new thread) loop State Handling machine state changes Media loop Exchange Handling state changes
  • 41.
    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
  • 42.
    Gracias! Preguntas y comentarios? Contact e-mail: moy@sangoma.com moises.silva@gmail.com http://www.moythreads.com/