Asterisk SCF
A developer’s view
  Tim Panton - PhoneFromHere.com
       twitter.com/steely_glint
Asterisk SCF recap

• Scalability
• Fault tolerant
• Extensible
• Performance
Developer Ecosystem

• Tip of the hat to Digium Inc
• Developers involved throughout
• Requirements from ecosystem
• Open development process
What I wanted

• Extensibility
• Modern Language support
• Dynamic
• Cloud friendly
The Experiment
• Git snapshot of current code
• Not a release !
• Not a routing engine
• Help from asterisk-scf-dev IRC
• Used Groovy (via JVM)
Live code demo

• Code at github
• https://github.com/steely-glint/ascf-groovy-
  demo
Auto
 generated
                   Static code un-demo
  java classes
                                                                                        Initialize
                   import AsteriskSCF.Configuration.SipSessionManager.V1.*;            ICE RPC
                   import AsteriskSCF.Core.Discovery.V1.*;                              protocol
                   import AsteriskSCF.System.Configuration.V1.*;
 Connect to
Ser viceLocator
 Ser vice          ic = Ice.Util.initialize(null);
                   sloc = ServiceLocatorPrxHelper.checkedCast(ic.stringToProxy("LocatorService:tcp -p 4411"));              List all
                   services = Arrays.asList(sloc.locateAll(new SipConfigurationParams()));                                  ser vices

                   sipconf = services.findAll { item -> ConfigurationServicePrxHelper.checkedCast(item) != null}
 Find the SIP      sc = ConfigurationServicePrxHelper.checkedCast(sipconf[0]);
Session              cgrps = [                                                                                           Pick the   first
 Manager(s)            { g = new SipGeneralGroup(); g.configurationItems = [:] ; return g} ,                             one
                       { u = new SipUDPTransportGroup();
                         u.name = "h-udp";
                         u.configurationItems = [ "host" : new SipHostItem(1,"127.0.0.1",5081)];
  Define a                return u},
 couple of local       { u = new SipUDPTransportGroup();                                                          Convert to
                         u.name = "h-udp1";                                                                      ICE friendly
  endpoints
                         u.configurationItems = [ "host" : new SipHostItem(2,"127.0.0.1",5080)];                  format
                         return u}];

                   grps = cgrps.collect{item -> item.call()}
                   sc.setConfiguration((ConfigurationGroup[])grps.toArray());                 Send the
                                                                                             request to
                                                                                              ASCF
What have I proved ?

• Dynamic configuration
• Cloud friendly
• JVM language support (java, scala, javascript)
• Components independently managable
Voice 3.0 ready

• Adornment
• Session Cookies
• webRTC
• Hooks
Conclusions
• Still a work in progress
• Much to be done
• Much to be documented
• Fundamentals are right
• Future-proofing is in place
Thanks

• Comments or questions @steely_glint
• My blog at babyis60.wordpress.com
Tim Panton - Presentation at Emerging Communications Conference & Awards (eComm 2011)

Tim Panton - Presentation at Emerging Communications Conference & Awards (eComm 2011)

  • 2.
    Asterisk SCF A developer’sview Tim Panton - PhoneFromHere.com twitter.com/steely_glint
  • 3.
    Asterisk SCF recap •Scalability • Fault tolerant • Extensible • Performance
  • 4.
    Developer Ecosystem • Tipof the hat to Digium Inc • Developers involved throughout • Requirements from ecosystem • Open development process
  • 5.
    What I wanted •Extensibility • Modern Language support • Dynamic • Cloud friendly
  • 6.
    The Experiment • Gitsnapshot of current code • Not a release ! • Not a routing engine • Help from asterisk-scf-dev IRC • Used Groovy (via JVM)
  • 7.
    Live code demo •Code at github • https://github.com/steely-glint/ascf-groovy- demo
  • 8.
    Auto generated Static code un-demo java classes Initialize import AsteriskSCF.Configuration.SipSessionManager.V1.*; ICE RPC import AsteriskSCF.Core.Discovery.V1.*; protocol import AsteriskSCF.System.Configuration.V1.*; Connect to Ser viceLocator Ser vice ic = Ice.Util.initialize(null); sloc = ServiceLocatorPrxHelper.checkedCast(ic.stringToProxy("LocatorService:tcp -p 4411")); List all services = Arrays.asList(sloc.locateAll(new SipConfigurationParams())); ser vices sipconf = services.findAll { item -> ConfigurationServicePrxHelper.checkedCast(item) != null} Find the SIP sc = ConfigurationServicePrxHelper.checkedCast(sipconf[0]); Session   cgrps = [ Pick the first Manager(s)     { g = new SipGeneralGroup(); g.configurationItems = [:] ; return g} , one     { u = new SipUDPTransportGroup();       u.name = "h-udp";       u.configurationItems = [ "host" : new SipHostItem(1,"127.0.0.1",5081)]; Define a       return u}, couple of local     { u = new SipUDPTransportGroup(); Convert to       u.name = "h-udp1"; ICE friendly endpoints       u.configurationItems = [ "host" : new SipHostItem(2,"127.0.0.1",5080)]; format       return u}]; grps = cgrps.collect{item -> item.call()} sc.setConfiguration((ConfigurationGroup[])grps.toArray()); Send the request to ASCF
  • 9.
    What have Iproved ? • Dynamic configuration • Cloud friendly • JVM language support (java, scala, javascript) • Components independently managable
  • 10.
    Voice 3.0 ready •Adornment • Session Cookies • webRTC • Hooks
  • 11.
    Conclusions • Still awork in progress • Much to be done • Much to be documented • Fundamentals are right • Future-proofing is in place
  • 12.
    Thanks • Comments orquestions @steely_glint • My blog at babyis60.wordpress.com

Editor's Notes