| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 | var logger = require("jitsi-meet-logger").getLogger(__filename);
var Statistics = require("../statistics/statistics");
/**
 * The constant for the name of the focus component.
 * @type {string}
 */
ComponentsVersions.FOCUS_COMPONENT = "focus";
/**
 * The constant for the name of the videobridge component.
 * @type {string}
 */
ComponentsVersions.VIDEOBRIDGE_COMPONENT = "videobridge";
/**
 * The constant for the name of the XMPP server component.
 * @type {string}
 */
ComponentsVersions.XMPP_SERVER_COMPONENT = "xmpp";
/**
 * Creates new instance of <tt>ComponentsVersions</tt> which will be discovering
 * the versions of conferencing system components in given
 * <tt>JitsiConference</tt>.
 * @param conference <tt>JitsiConference</tt> instance which will be used to
 *        listen for focus presence updates.
 * @constructor
 */
function ComponentsVersions(conference) {
    this.versions = {};
    this.conference = conference;
    this.conference.addCommandListener(
        'versions', this.processPresence.bind(this));
}
ComponentsVersions.prototype.processPresence =
    function(node, mucResource, mucJid) {
    if (node.attributes.xmlns !== 'http://jitsi.org/jitmeet') {
        logger.warn("Ignored presence versions node - invalid xmlns", node);
        return;
    }
    if (!this.conference._isFocus(mucJid)) {
        logger.warn(
            "Received versions not from the focus user: " + node, mucJid);
        return;
    }
    var log = [];
    node.children.forEach(function(item){
        var componentName = item.attributes.name;
        if (componentName !== ComponentsVersions.FOCUS_COMPONENT &&
            componentName !== ComponentsVersions.XMPP_SERVER_COMPONENT &&
            componentName !== ComponentsVersions.VIDEOBRIDGE_COMPONENT) {
            logger.warn(
                "Received version for not supported component name: "
                    + componentName);
            return;
        }
        var version = item.value;
        if (this.versions[componentName] !== version) {
            this.versions[componentName] = version;
            logger.info("Got " + componentName + " version: " + version);
            log.push({
                id: "component_version",
                component: componentName,
                version: version});
        }
    }.bind(this));
    // logs versions to stats
    if (log.length > 0)
        Statistics.sendLog(JSON.stringify(log));
};
/**
 * Obtains the version of conferencing system component.
 * @param componentName the name of the component for which we want to obtain
 *        the version.
 * @returns {String} which describes the version of the component identified by
 *          given <tt>componentName</tt> or <tt>undefined</tt> if not found.
 */
ComponentsVersions.prototype.getComponentVersion = function(componentName) {
    return this.versions[componentName];
};
module.exports = ComponentsVersions;
 |