ZAP - The Mozilla SIP Client

Alex Fritze

www.croczilla.com

What is ZAP?

What is SIP?

Basic SIP Operation

               atlanta.com  . . . biloxi.com
           .      proxy              proxy     .
         .                                       .
 Alice's  . . . . . . . . . . . . . . . . . . . .  Bob's
softphone                                        SIP Phone
   |                |                |                |
   |    INVITE F1   |                |                |
   |--------------->|    INVITE F2   |                |
   |  100 Trying F3 |--------------->|    INVITE F4   |
   |<---------------|  100 Trying F5 |--------------->|
   |                |<---------------| 180 Ringing F6 |
   |                | 180 Ringing F7 |<---------------|
   | 180 Ringing F8 |<---------------|     200 OK F9  |
   |<---------------|    200 OK F10  |<---------------|
   |    200 OK F11  |<---------------|                |
   |<---------------|                |                |
   |                       ACK F12                    |
   |------------------------------------------------->|
   |                   Media Session                  |
   |<================================================>|
   |                       BYE F13                    |
   |<-------------------------------------------------|
   |                     200 OK F14                   |
   |------------------------------------------------->|
   |                                                  |

SIP INVITE Message

      INVITE sip:bob@biloxi.com SIP/2.0
      Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bK776asdhds
      Max-Forwards: 70
      To: Bob <sip:bob@biloxi.com>
      From: Alice <sip:alice@atlanta.com>;tag=1928301774
      Call-ID: a84b4c76e66710@pc33.atlanta.com
      CSeq: 314159 INVITE
      Contact: <sip:alice@pc33.atlanta.com>
      Content-Type: application/sdp
      Content-Length: 142

      (Alice's SDP not shown)

ZAP Demo

http://www.croczilla.com/zap

The ZAP Vision

ZAP Internals

ZAP SIP Stack

SIP is hard

JavaScript Modules

Bug#238324: Implement JS code-sharing module system

// MyModule.js
EXPORTED_SYMBOLS = ["foo", "bar", "baz"];

function foo() { dump("foo"); }
function bar() { dump("bar"); }
var counter = 0;
function baz() { dump(++counter); }
// MyModuleClient.js
Components.utils.importModule("MyModule.js");
foo(); // -> foo
bar(); // -> bar
baz(); // -> 1, 2, 3, ...

ZAP Media Kit

Using the ZMK

var g = Components.classes["@mozilla.org/zap/mediagraph;1"].
           createInstance(Components.interfaces.zapIMediaGraph);

var ain  = g.addNode("audioin", null);
var aout = g.addNode("audioout", null);
var buf  = g.addNode("buffer", null);

g.connect(ain, null, buf, null);
g.connect(buf, null, aout, null);

var bufCtl = g.getNode(buf, 
                 Components.interfaces.zapIPacketBuffer, 
                 true);
bufCtl.minSize = 100;

ZMK: Current Status

Immediate Future

Finally...