/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */

'use strict';

const { classes: Cc, interfaces: Ci, utils: Cu } = Components;

Cu.import("resource://gre/modules/XPCOMUtils.jsm");

const WELLKNOWNOPPORTUNISTICUTILS_CONTRACTID = "@mozilla.org/network/well-known-opportunistic-utils;1";
const WELLKNOWNOPPORTUNISTICUTILS_CID = Components.ID("{b4f96c89-5238-450c-8bda-e12c26f1d150}");

function WellKnownOpportunisticUtils() {
  this.valid = false;
  this.mixed = false;
  this.lifetime = 0;
}

WellKnownOpportunisticUtils.prototype = {
  classID: WELLKNOWNOPPORTUNISTICUTILS_CID,
  contractID: WELLKNOWNOPPORTUNISTICUTILS_CONTRACTID,
  classDescription: "Well-Known Opportunistic Utils",
  QueryInterface: XPCOMUtils.generateQI([Ci.nsIWellKnownOpportunisticUtils]),

    verify: function(aJSON, aOrigin, aAlternatePort) {
	try {
	  let obj = JSON.parse(aJSON.toLowerCase());
	  let ports = obj[aOrigin.toLowerCase()]['tls-ports'];
	  if (ports.indexOf(aAlternatePort) == -1) {
	    throw "invalid port";
	  }
	  this.lifetime = obj[aOrigin.toLowerCase()]['lifetime'];
          this.mixed = obj[aOrigin.toLowerCase()]['mixed-scheme'];
	} catch (e) {
	  return;
	}
      this.valid = true;
    },
};

this.NSGetFactory = XPCOMUtils.generateNSGetFactory([WellKnownOpportunisticUtils]);
