UNPKG

1.58 kBJavaScriptView Raw
1const EventEmitter = require('events').EventEmitter ;
2const proto = require('./proto') ;
3const merge = require('utils-merge');
4const methods = require('sip-methods') ;
5
6exports = module.exports = createServer;
7
8/**
9 * Create a new server.
10 *
11 * @return {Function}
12 * @api public
13 */
14
15function createServer() {
16 function app(req, res, next) {
17 app.handle(req, res, next);
18 }
19 app.method = '*';
20 merge(app, proto);
21 merge(app, EventEmitter.prototype);
22 app.stack = [];
23 app.params = [];
24 app._cachedEvents = [] ;
25 app.routedMethods = {} ;
26 app.locals = Object.create(null);
27 for (var i = 0; i < arguments.length; ++i) {
28 app.use(arguments[i]);
29 }
30
31 //create methods app.invite, app.register, etc..
32 methods.forEach((method) => {
33 app[method.toLowerCase()] = app.use.bind(app, method.toLowerCase()) ;
34 }) ;
35
36 //special handling for cdr events
37 app.on = function(event, listener) {
38 if (0 === event.indexOf('cdr:')) {
39 if (app.client) {
40 app.client.on(event, function() {
41 var args = Array.prototype.slice.call(arguments) ;
42 EventEmitter.prototype.emit.apply(app, [event].concat(args)) ;
43 }) ;
44 }
45 else {
46 this._cachedEvents.push(event) ;
47 }
48 }
49 //delegate all others to standard EventEmitter prototype
50 return EventEmitter.prototype.addListener.call(app, event, listener) ;
51 } ;
52
53 return app;
54}
55
56createServer.Agent = require('./drachtio-agent');
57createServer.Request = require('./request') ;
58createServer.Response = require('./response') ;
59createServer.onSend = require('./on-send') ;