aboutsummaryrefslogtreecommitdiffstats
path: root/signaling-server/node_modules/socket.io/lib/transports/flashsocket.js
blob: dc2d78b489879139d2792f36acc68a7e4ffb3cb3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
/*!
 * socket.io-node
 * Copyright(c) 2011 LearnBoost <dev@learnboost.com>
 * MIT Licensed
 */

/**
 * Module requirements.
 */
var WebSocket = require('./websocket');

/**
 * Export the constructor.
 */

exports = module.exports = FlashSocket;

/**
 * The FlashSocket transport is just a proxy
 * for WebSocket connections.
 *
 * @api public
 */
 
function FlashSocket (mng, data, req) {
  return WebSocket.call(this, mng, data, req);
}

/**
 * Inherits from WebSocket.
 */

FlashSocket.prototype.__proto__ = WebSocket.prototype;

/**
 * Transport name
 *
 * @api public
 */

FlashSocket.prototype.name = 'flashsocket';

/**
 * Listens for new configuration changes of the Manager
 * this way we can enable and disable the flash server.
 *
 * @param {Manager} Manager instance.
 * @api private
 */


FlashSocket.init = function (manager) {
  var server;
  function create () {

    // Drop out immediately if the user has
    // disabled the flash policy server
    if (!manager.get('flash policy server')) {
      return;
    }

    server = require('policyfile').createServer({ 
      log: function(msg){
        manager.log.info(msg);
      }
    }, manager.get('origins'));

    server.on('close', function (e) {
      server = null;
    });

    server.listen(manager.get('flash policy port'), manager.server);

    manager.flashPolicyServer = server;
  }

  // listen for origin changes, so we can update the server
  manager.on('set:origins', function (value, key) {
    if (!server) return;

    // update the origins and compile a new response buffer
    server.origins = Array.isArray(value) ? value : [value];
    server.compile();
  });

  // destory the server and create a new server
  manager.on('set:flash policy port', function (value, key) {
    var transports = manager.get('transports');
    if (~transports.indexOf('flashsocket')) {
      if (server) {
        if (server.port === value) return;
        // destroy the server and rebuild it on a new port
        try {
          server.close();
        }
        catch (e) { /* ignore exception. could e.g. be that the server isn't started yet */ }
      }
      create();
    }
  });

  // create or destroy the server
  manager.on('set:flash policy server', function (value, key) {
    var transports = manager.get('transports');
    if (~transports.indexOf('flashsocket')) {
      if (server && !value) {
        // destroy the server
        try {
          server.close();
        }
        catch (e) { /* ignore exception. could e.g. be that the server isn't started yet */ }
      }
    } else if (!server && value) {
      // create the server
      create();
    }
  });

  // only start the server
  manager.on('set:transports', function (value, key){
    if (!server && ~manager.get('transports').indexOf('flashsocket')) {
      create();
    }
  });
  // check if we need to initialize at start
  if (~manager.get('transports').indexOf('flashsocket')){
    create();
  }
};