729 lines
20 KiB
React
729 lines
20 KiB
React
|
// ICS Connectivity status.
|
||
|
var ICS_CONN_STARTING = 1;
|
||
|
var ICS_CONN_CONNECTING = 2;
|
||
|
var ICS_CONN_CONNECTED = 3;
|
||
|
var ICS_CONN_DISCONNECTING = 4;
|
||
|
var ICS_CONN_DISCONNECTED = 5;
|
||
|
var ICS_CONN_STOPPED = 6;
|
||
|
var ICS_CONN_PERMANENT = 7;
|
||
|
var ICS_CONN_UNK_DIAL_STATE = 8;
|
||
|
var ICS_CONN_CALLWAITING = 9;
|
||
|
var ICS_CONN_HN_UNAVAILABLE = 1000;
|
||
|
var ICS_CONN_TIMEOUT = 5000;
|
||
|
|
||
|
var oldState = ICS_CONN_DISCONNECTED;
|
||
|
var currentState = ICS_CONN_DISCONNECTED;
|
||
|
|
||
|
// Types of connections to the Internet via ICS
|
||
|
var ICS_CONN_TYPE_REG = 0;
|
||
|
var ICS_CONN_TYPE_ISP = 1;
|
||
|
var ICS_CONN_TYPE_REF = 2;
|
||
|
var ICS_CONN_TYPE_MIG = 3;
|
||
|
|
||
|
var ICS_Error_Id = 0;
|
||
|
var ICS_ERR_HN_UNAVAILABLE = ICS_Error_Id++;
|
||
|
var ICS_ERR_MODEM_DISCONNECTED = ICS_Error_Id++;
|
||
|
var ICS_ERR_MODEM_FAILED_CONNECT = ICS_Error_Id++;
|
||
|
var ICS_ERR_STOPPED = ICS_Error_Id++;
|
||
|
var ICS_ERR_PERM_DISCONNECTED = ICS_Error_Id++;
|
||
|
var ICS_ERR_TIMEOUT = ICS_Error_Id++;
|
||
|
var LAN_ERR_HW_UNAVAILABLE1 = ICS_Error_Id++;
|
||
|
var LAN_ERR_HW_UNAVAILABLE2 = ICS_Error_Id++;
|
||
|
|
||
|
// Connection type bitmasks
|
||
|
//
|
||
|
// No attempt has been made at detecting connections or an attempt was made
|
||
|
// but failed. This is different from CONNECTIONTYPE_NONE in that it
|
||
|
// indicates that another attempt should be made to determine if connections
|
||
|
// exist.
|
||
|
//
|
||
|
var CONNECTIONTYPE_INVALID = 0x00000000;
|
||
|
|
||
|
// No connection devices exist
|
||
|
//
|
||
|
var CONNECTIONTYPE_NONE = 0x00000001;
|
||
|
|
||
|
// A modem is installed
|
||
|
//
|
||
|
var CONNECTIONTYPE_MODEM = 0x00000002;
|
||
|
|
||
|
// A network card is present and the ICS beacon was detected
|
||
|
//
|
||
|
var CONNECTIONTYPE_LAN_ICS = 0x00000004;
|
||
|
|
||
|
// A network card is present but ICS was not detected
|
||
|
//
|
||
|
var CONNECTIONTYPE_LAN_BROADBAND = 0x00000008;
|
||
|
|
||
|
// Multiple network cards were present and ICS was not detected. It is not
|
||
|
// possible to determine which card to use.
|
||
|
//
|
||
|
var CONNECTIONTYPE_LAN_INDETERMINATE = 0x00000010;
|
||
|
|
||
|
// An ISDN, PPPoE connection is present
|
||
|
//
|
||
|
var CONNECTIONTYPE_OTHER = 0x00000020;
|
||
|
|
||
|
|
||
|
var CONNECTIONTYPE_LAN = (CONNECTIONTYPE_LAN_ICS |
|
||
|
CONNECTIONTYPE_LAN_BROADBAND |
|
||
|
CONNECTIONTYPE_LAN_INDETERMINATE);
|
||
|
|
||
|
// Enumeration to indicate whether we can connect to the Internet
|
||
|
//
|
||
|
var INTERNET_UNKNOWN = -1;
|
||
|
var INTERNET_NO = 0;
|
||
|
var INTERNET_YES = 1;
|
||
|
|
||
|
|
||
|
// Enumeration to indicate whether we can configure a machine's Lan,
|
||
|
// including firewalling, setting IP address and etc.
|
||
|
//
|
||
|
var CONFIG_LAN_UNKNOWN = -1;
|
||
|
var CONFIG_LAN_NO = 0;
|
||
|
var CONFIG_LAN_YES = 1;
|
||
|
|
||
|
var g_ConnectionCapabilities = CONNECTIONTYPE_INVALID;
|
||
|
var g_PreferredConnection = null; // This is initialized in InitApplication() in msobshel.htm
|
||
|
var g_Internet = INTERNET_UNKNOWN;
|
||
|
var g_ModemTypes = null;
|
||
|
var g_CanConfigLan = CONFIG_LAN_UNKNOWN;
|
||
|
var g_PublicLanCount = 0;
|
||
|
|
||
|
var L_ERR_HN_UNAVAILABLE_Text = "Your computer is no longer connected to the Internet through your network. <br><br>To restore the connection, make sure that the network cable is securely plugged into your computer as well as the network.";
|
||
|
// var L_ERR_MODEM_DISCONNECTED = "The Shared Internet connection was unexpectedly interrupted. If your shared Internet Connection is a modem connection. It might have been disconnected.";
|
||
|
// var L_ERR_MODEM_FAILED_CONNECT = "The Shared Internet connection was unexpectedly interrupted as it was being established.<br><br>Click <b>Retry</b> to try connecting again.";
|
||
|
var L_ERRSTOPPED_Text = "Internet Connection Sharing is presently not available on your network. Click <b>Retry</b> to try connecting again.";
|
||
|
var L_ERR_PERM_DISCONNECTED_Text = "Internet Connection Sharing has been disconnected. If you're using a high-speed adapter to connect to the Internet (e.g. Broadband), please ensure that the adapter has been correctly configured and that the cables are securely attached.<br><br>Click <b>Retry</b> to try connecting again.";
|
||
|
var L_ERRTIMEOUT_Text = "There is a problem connecting to the Internet. Either your connection has timed out or this computer is not configured correctly to use the Shared Internet Connection. <br><br>Click <b>Retry</b> to try connecting again.";
|
||
|
var L_ERR_LAN_UNAVAILABLE1_Text = "Your computer is not connected to the Internet through your network. <br><br>Please check your network settings and confirm that you are able to connect to the Internet, then try again.";
|
||
|
var L_ERR_LAN_UNAVAILABLE2_Text = "Your computer is not connected to the Internet through your network. <br><br>Please select one of the following methods:";
|
||
|
|
||
|
<!--REQUIRED FUNCTION NAME-->
|
||
|
function OnIcsConnectionStatus(iStatus)
|
||
|
{
|
||
|
oldState = currentState;
|
||
|
currentState = iStatus;
|
||
|
|
||
|
switch (g_CurrentCKPT)
|
||
|
{
|
||
|
case CKPT_REGISTER1:
|
||
|
case CKPT_REGISTER3:
|
||
|
case CKPT_ISPSIGNUP:
|
||
|
case CKPT_REFDIAL:
|
||
|
case CKPT_MIGDIAL:
|
||
|
break;
|
||
|
default:
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
switch(iStatus)
|
||
|
{
|
||
|
case ICS_CONN_TIMEOUT:
|
||
|
ICS_Error_Id = ICS_ERR_TIMEOUT;
|
||
|
Navigate("icserror\\icsdc.htm");
|
||
|
break;
|
||
|
case ICS_CONN_PERMANENT:
|
||
|
break;
|
||
|
case ICS_CONN_STOPPED:
|
||
|
switch (oldState)
|
||
|
{
|
||
|
case ICS_CONN_PERMANENT:
|
||
|
ICS_Error_Id = ICS_ERR_STOPPED;
|
||
|
Navigate("icserror\\icsdc.htm");
|
||
|
break;
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
break;
|
||
|
case ICS_CONN_HN_UNAVAILABLE:
|
||
|
ICS_Error_Id = ICS_ERR_HN_UNAVAILABLE;
|
||
|
Navigate("icserror\\icsdc.htm");
|
||
|
break;
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
// one page handles all disconnect errors
|
||
|
|
||
|
function IcsDcError_LoadMe()
|
||
|
{
|
||
|
InitFrameRef();
|
||
|
InitNewButtons();
|
||
|
g.btnNext.onclick = IcsErrorNextBtnHandler;
|
||
|
g.btnSkip.onclick = IcsErrorSkipBtnHandler;
|
||
|
|
||
|
switch (ICS_Error_Id)
|
||
|
{
|
||
|
|
||
|
case ICS_ERR_HN_UNAVAILABLE:
|
||
|
g.ErrorPara1.innerHTML = L_ERR_HN_UNAVAILABLE_Text;
|
||
|
break;
|
||
|
case ICS_ERR_STOPPED:
|
||
|
g.ErrorPara1.innerHTML = L_ERRSTOPPED_Text;
|
||
|
break;
|
||
|
case ICS_ERR_PERM_DISCONNECTED:
|
||
|
g.ErrorPara1.innerHTML = L_ERR_PERM_DISCONNECTED_Text;
|
||
|
break;
|
||
|
case ICS_ERR_TIMEOUT:
|
||
|
g.ErrorPara1.innerHTML = L_ERRTIMEOUT_Text;
|
||
|
break;
|
||
|
case LAN_ERR_HW_UNAVAILABLE1:
|
||
|
case LAN_ERR_HW_UNAVAILABLE2:
|
||
|
g.btnBack.style.visibility = "visible";
|
||
|
g.BackBtnLocalText.style.visibility = "visible";
|
||
|
g.btnBack.onclick = IcsErrorBackBtnHandler;
|
||
|
if (ICS_Error_Id == LAN_ERR_HW_UNAVAILABLE1)
|
||
|
{
|
||
|
g.ErrorPara1.innerHTML = L_ERR_LAN_UNAVAILABLE1_Text;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
g.ErrorPara1.innerHTML = L_ERR_LAN_UNAVAILABLE2_Text;
|
||
|
g.ErrorPara2.style.display = "inline";
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
g.btnNext.focus();
|
||
|
}
|
||
|
|
||
|
function IcsErrorBackBtnHandler()
|
||
|
{
|
||
|
GoNavigate(g_CurrentCKPT);
|
||
|
}
|
||
|
|
||
|
function IcsErrorNextBtnHandler()
|
||
|
{
|
||
|
DisableAllButtons();
|
||
|
ResetConnectedToInternetEx();
|
||
|
switch (g_CurrentCKPT)
|
||
|
{
|
||
|
case CKPT_REGISTER1:
|
||
|
case CKPT_REGISTER3:
|
||
|
if (ICS_Error_Id == LAN_ERR_HW_UNAVAILABLE1)
|
||
|
{
|
||
|
LanActReg();
|
||
|
}
|
||
|
else if (ICS_Error_Id == LAN_ERR_HW_UNAVAILABLE2)
|
||
|
{
|
||
|
if (g.rb_conn_modem.checked)
|
||
|
{
|
||
|
GoNavigate(CKPT_REGDIAL);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
LanActReg();
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
IcsConnect(ICS_CONN_TYPE_REG);
|
||
|
}
|
||
|
break;
|
||
|
case CKPT_ISPSIGNUP:
|
||
|
IcsConnect(ICS_CONN_TYPE_ISP);
|
||
|
break;
|
||
|
case CKPT_REFDIAL:
|
||
|
IcsConnect(ICS_CONN_TYPE_REF);
|
||
|
break;
|
||
|
case CKPT_MIGDIAL:
|
||
|
IcsConnect(ICS_CONN_TYPE_MIG);
|
||
|
break;
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function IcsErrorSkipBtnHandler()
|
||
|
{
|
||
|
switch (g_CurrentCKPT)
|
||
|
{
|
||
|
case CKPT_REGISTER1:
|
||
|
case CKPT_REGISTER3:
|
||
|
// showing icsdc.htm is similar to showing acterror.htm
|
||
|
g_CurrentCKPT = CKPT_ACT_MSG;
|
||
|
break;
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
GoCancel();
|
||
|
}
|
||
|
|
||
|
function LanActReg()
|
||
|
{
|
||
|
if (g_Internet == INTERNET_UNKNOWN)
|
||
|
{
|
||
|
ConnectedToInternetEx(true, "LanActReg2();");
|
||
|
g.document.body.style.cursor = "wait";
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
LanActReg2();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function LanActReg2()
|
||
|
{
|
||
|
if (!ConnectedToInternetEx(false))
|
||
|
{
|
||
|
if (HasModem())
|
||
|
{
|
||
|
ICS_Error_Id = LAN_ERR_HW_UNAVAILABLE2;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
ICS_Error_Id = LAN_ERR_HW_UNAVAILABLE1;
|
||
|
}
|
||
|
Navigate("icserror\\icsdc.htm");
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
CommonActReg();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function IcsConnect(iConnectionType)
|
||
|
{
|
||
|
// REVIEW: How does PPPoE affect the logic flow of this function?
|
||
|
// REVIEW: What happens if a PPPoE connection hasn't been established?
|
||
|
// REVIEW: What happens if a PPPoE connection can't be established?
|
||
|
if (g_Internet == INTERNET_UNKNOWN)
|
||
|
{
|
||
|
ConnectedToInternetEx(true, "IcsConnect2("+iConnectionType+")");
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
IcsConnect2(iConnectionType);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function IcsConnect2(iConnectionType)
|
||
|
{
|
||
|
if (!ConnectedToInternetEx(false))
|
||
|
{
|
||
|
OnIcsConnectionStatus ( ICS_CONN_HN_UNAVAILABLE );
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
switch (iConnectionType)
|
||
|
{
|
||
|
case ICS_CONN_TYPE_REG:
|
||
|
CommonActReg();
|
||
|
break;
|
||
|
case ICS_CONN_TYPE_ISP:
|
||
|
// REVIEW: Remove. OOBE should never attempt ISP signup via LAN/ICS.
|
||
|
window.external.Connect(CONNECTED_ISP_SIGNUP, "msobe.isp");
|
||
|
break;
|
||
|
case ICS_CONN_TYPE_REF:
|
||
|
// REVIEW: Remove. OOBE should never attempt ISP signup via LAN/ICS.
|
||
|
window.external.Connect(CONNECTED_REFFERAL, "migrate.isp");
|
||
|
break;
|
||
|
case ICS_CONN_TYPE_MIG:
|
||
|
// REVIEW: Remove. window.external.Connect does not handle ISP index
|
||
|
// parameter. ISP migration is not done via LAN/ICS.
|
||
|
window.external.Connect(CONNECTED_ISP_MIGRATE, gselectedISPIndx);
|
||
|
break;
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function CommonActReg()
|
||
|
{
|
||
|
// REVIEW:Does window.external.Connect do anything useful in this case?
|
||
|
//
|
||
|
window.external.Connect(CONNECTED_REGISTRATION, "reg.isp");
|
||
|
if (g_DoActivation)
|
||
|
{
|
||
|
window.external.AsyncActivate(g_PostToMS);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if (g_PostToMS)
|
||
|
{
|
||
|
window.external.PostRegData(POST_TO_MS);
|
||
|
StatusObj.set_Status(MS_REGISTRATION, true);
|
||
|
}
|
||
|
ActivationComplete();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function UseIcs()
|
||
|
{
|
||
|
|
||
|
fResult = ((CONNECTIONTYPE_LAN_ICS == GetPreferredConnection())
|
||
|
&& HasIcs()) ? true : false;
|
||
|
trace("UseIcs: " + fResult);
|
||
|
return fResult;
|
||
|
} // UseIcs
|
||
|
|
||
|
function HasIcs()
|
||
|
{
|
||
|
fResult = (CONNECTIONTYPE_LAN_ICS & GetConnectionCapabilities()) ? true : false;
|
||
|
trace("HasIcs: " + fResult);
|
||
|
return fResult;
|
||
|
} // HasIcs
|
||
|
|
||
|
function UseBroadband()
|
||
|
{
|
||
|
fResult = (CONNECTIONTYPE_LAN_BROADBAND == GetPreferredConnection() && HasBroadband()) ? true : false;
|
||
|
trace("UseBroadband: " + fResult);
|
||
|
return fResult;
|
||
|
} // UseBroadband
|
||
|
|
||
|
function HasBroadband()
|
||
|
{
|
||
|
fResult = (CONNECTIONTYPE_LAN_BROADBAND & GetConnectionCapabilities()) ? true : false;
|
||
|
trace("HasBroadband: " + fResult);
|
||
|
return fResult;
|
||
|
} // HasBroadband
|
||
|
|
||
|
function HasIndeterminateLan()
|
||
|
{
|
||
|
fResult = (CONNECTIONTYPE_LAN_INDETERMINATE & GetConnectionCapabilities()) ? true : false;
|
||
|
trace("HasIndeterminateLan: " + fResult);
|
||
|
return fResult;
|
||
|
} // HasIndeterminateLan
|
||
|
|
||
|
// This will return true if you have a modem but no NIC. It will return false if you have a modem and a NIC,
|
||
|
// because NIC will always be the preferred connection over a modem.
|
||
|
function UseModem()
|
||
|
{
|
||
|
fResult = (CONNECTIONTYPE_MODEM == GetPreferredConnection() && HasModem()) ? true : false;
|
||
|
trace("UseModem: " + fResult);
|
||
|
return fResult;
|
||
|
} // UseModem
|
||
|
|
||
|
// This will return true if you have a modem regardless if you have a NIC or not.
|
||
|
function HasModem()
|
||
|
{
|
||
|
// For XP, window.external.GetConnectionCapabilities ignores
|
||
|
// modems. Use window.external.CheckDialReady instead.
|
||
|
//
|
||
|
fResult = (CONNECTIONTYPE_MODEM & GetConnectionCapabilities()) ? true : false;
|
||
|
trace("HasModem: " + fResult);
|
||
|
return fResult;
|
||
|
|
||
|
} // HasModem
|
||
|
|
||
|
function HasAnalogModem()
|
||
|
{
|
||
|
GetConnectionCapabilities();
|
||
|
fResult = (g_ModemTypes == ERR_COMM_NO_ERROR);
|
||
|
trace("HasAnalogModem: " + fResult);
|
||
|
return fResult;
|
||
|
} // HasAnalogModem
|
||
|
|
||
|
function UseAnalogModem()
|
||
|
{
|
||
|
fResult = (CONNECTIONTYPE_MODEM == GetPreferredConnection() && HasAnalogModem()) ? true : false;
|
||
|
trace("UseAnalogModem: " + fResult);
|
||
|
return fResult;
|
||
|
} // UseAnalogModem
|
||
|
|
||
|
function UseNetwork()
|
||
|
{
|
||
|
return (UseIcs() || UseBroadband() || HasIndeterminateLan());
|
||
|
} // UseNetwork
|
||
|
|
||
|
function HasNetwork()
|
||
|
{
|
||
|
var fResult = (GetConnectionCapabilities() & CONNECTIONTYPE_LAN) ? true : false;
|
||
|
trace("HasNetwork: " + fResult);
|
||
|
return fResult;
|
||
|
} // HasNetwork
|
||
|
|
||
|
function HasConnection()
|
||
|
{
|
||
|
fResult = (HasNetwork() || HasModem());
|
||
|
trace("HasConnection: " + fResult);
|
||
|
return fResult;
|
||
|
} // HasConnection
|
||
|
|
||
|
function SetPreferredConnection(ctPreferred)
|
||
|
{
|
||
|
// window.external.SetPreferredConnection validates the connection type.
|
||
|
// Only update g_PreferredConnection if the connection type is valid.
|
||
|
//
|
||
|
if (window.external.SetPreferredConnection(ctPreferred))
|
||
|
{
|
||
|
g_PreferredConnection = ctPreferred;
|
||
|
}
|
||
|
else if ((ctPreferred == CONNECTIONTYPE_MODEM) && HasModem())
|
||
|
{
|
||
|
g_PreferredConnection = CONNECTIONTYPE_MODEM;
|
||
|
}
|
||
|
|
||
|
// Save g_PreferredConnection to registry, for use in cases where we cold boot OOBE after ics.htm page.
|
||
|
ApiObj.set_RegValue(HKEY_LOCAL_MACHINE, OOBE_MAIN_REG_KEY + "\\TEMP", PREFCONN_REG_VALUE, g_PreferredConnection);
|
||
|
|
||
|
} // SetConnectionPreferred
|
||
|
|
||
|
function GetPreferredConnection()
|
||
|
{
|
||
|
if (CONNECTIONTYPE_INVALID == g_PreferredConnection
|
||
|
)
|
||
|
{
|
||
|
trace("Calling window.external.GetPreferredConnection");
|
||
|
g_PreferredConnection = window.external.GetPreferredConnection();
|
||
|
|
||
|
// For XP, window.external.GetPreferredConnection ignores
|
||
|
// modems.
|
||
|
//
|
||
|
if (CONNECTIONTYPE_NONE == g_PreferredConnection
|
||
|
&& HasModem() )
|
||
|
{
|
||
|
g_PreferredConnection = CONNECTIONTYPE_MODEM;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
trace("GetPreferredConnection: " + g_PreferredConnection);
|
||
|
return g_PreferredConnection;
|
||
|
|
||
|
} // GetPreferredConnection
|
||
|
|
||
|
function GetConnectionCapabilities()
|
||
|
{
|
||
|
// REVIEW: need to return invalid until services have been started.
|
||
|
if (CONNECTIONTYPE_INVALID == g_ConnectionCapabilities)
|
||
|
{
|
||
|
trace("Calling window.external.GetConnectionCapabilities");
|
||
|
g_ConnectionCapabilities = window.external.GetConnectionCapabilities();
|
||
|
|
||
|
// For XP, window.external.GetConnectionCapabilities ignores
|
||
|
// modems.
|
||
|
//
|
||
|
g_ModemTypes = window.external.CheckDialReady();
|
||
|
if (ERR_COMM_NO_ERROR == g_ModemTypes ||
|
||
|
ERR_COMM_ISDN == g_ModemTypes ||
|
||
|
ERR_COMM_PHONE_AND_ISDN == g_ModemTypes)
|
||
|
{
|
||
|
g_ConnectionCapabilities |= CONNECTIONTYPE_MODEM;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
trace("GetConnectionCapabilities: " + g_ConnectionCapabilities);
|
||
|
return g_ConnectionCapabilities;
|
||
|
|
||
|
} // GetConnectionCapabilities
|
||
|
|
||
|
function InternetCapabilityExists()
|
||
|
{
|
||
|
var fExists = false;
|
||
|
|
||
|
// look for network connection first, then modem if that fails
|
||
|
//
|
||
|
if (HasNetwork())
|
||
|
{
|
||
|
fExists = true;
|
||
|
}
|
||
|
|
||
|
if (!fExists && HasModem())
|
||
|
{
|
||
|
fExists = true;
|
||
|
}
|
||
|
trace("InternetCapabilityExists: " + fExists);
|
||
|
return fExists;
|
||
|
|
||
|
} // InternetCapabilityExists
|
||
|
|
||
|
var ICS_MINIMUM_CALLBACK_SLEEP_TIME = 6000;
|
||
|
var ICS_MINIMUM_TIMEOUT = 40;
|
||
|
|
||
|
function AsyncCallback(callback)
|
||
|
{
|
||
|
this._callback = callback;
|
||
|
this._startTime = (new Date()).getTime();
|
||
|
}
|
||
|
|
||
|
function InvokeCallback()
|
||
|
{
|
||
|
if (this._callback != null)
|
||
|
{
|
||
|
var timeRemained = ICS_MINIMUM_CALLBACK_SLEEP_TIME -
|
||
|
((new Date()).getTime() - this._startTime);
|
||
|
|
||
|
// We need to use setTimeout so that the script won't be
|
||
|
// executed by abitrary application, but the script engine thread.
|
||
|
// Otherwise, the script engine may hang.
|
||
|
//
|
||
|
if (timeRemained < ICS_MINIMUM_TIMEOUT)
|
||
|
{
|
||
|
// The timeout value chosen is arbitrary. It just need to be small.
|
||
|
//
|
||
|
setTimeout(this._callback, ICS_MINIMUM_TIMEOUT);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
setTimeout(this._callback, timeRemained);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
AsyncCallback.prototype.InvokeCallback = InvokeCallback;
|
||
|
|
||
|
var g_ConnectedToInternetCallback = null;
|
||
|
|
||
|
//
|
||
|
// Return the internet connection status.
|
||
|
//
|
||
|
// If the callback is null, always returns normally (synchronously).
|
||
|
// If callback is not null, always returns using the callback (asynchronously),
|
||
|
// which should check the status by ConnectedToInternetEx(false).
|
||
|
//
|
||
|
function ConnectedToInternetEx(bRefresh, callback)
|
||
|
{
|
||
|
var retval = false;
|
||
|
|
||
|
if (UseModem() && (GetConnectionCapabilities() == CONNECTIONTYPE_MODEM))
|
||
|
{
|
||
|
// Use whatever returned by the old API and don't change the
|
||
|
// global state
|
||
|
if (callback == null)
|
||
|
{
|
||
|
retval = window.external.ConnectedToInternet();
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
trace("ConnectedToInternetEx("+bRefresh+", "+callback+")");
|
||
|
setTimeout(callback, ICS_MINIMUM_CALLBACK_SLEEP_TIME);
|
||
|
}
|
||
|
}
|
||
|
else if (bRefresh && g_Internet == INTERNET_UNKNOWN)
|
||
|
{
|
||
|
// Refresh the global state about the Internet connection
|
||
|
if (callback == null)
|
||
|
{
|
||
|
retval = window.external.ConnectedToInternetEx()
|
||
|
g_Internet = (retval) ? INTERNET_YES : INTERNET_NO;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
g_ConnectedToInternetCallback = new AsyncCallback(callback);
|
||
|
setTimeout("window.external.AsyncConnectedToInternetEx()",
|
||
|
ICS_MINIMUM_TIMEOUT);
|
||
|
// return at ReturnConnectedToInternetEx
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
// Use cached results
|
||
|
if (callback == null)
|
||
|
{
|
||
|
retval = (g_Internet == INTERNET_YES);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
setTimeout(callback, ICS_MINIMUM_CALLBACK_SLEEP_TIME);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return retval;
|
||
|
}
|
||
|
|
||
|
function ResetConnectedToInternetEx()
|
||
|
{
|
||
|
g_Internet = INTERNET_UNKNOWN;
|
||
|
}
|
||
|
|
||
|
<!--REQUIRED FUNCTION NAME-->
|
||
|
function ReturnConnectedToInternetEx(bConnected)
|
||
|
{
|
||
|
g_Internet = (bConnected) ? INTERNET_YES : INTERNET_NO;
|
||
|
if (g_ConnectedToInternetCallback != null)
|
||
|
{
|
||
|
g_ConnectedToInternetCallback.InvokeCallback();
|
||
|
g_ConnectedToInternetCallback = null;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function CanConfigLan()
|
||
|
{
|
||
|
if (HasBroadband() || HasIndeterminateLan())
|
||
|
{
|
||
|
return g_CanConfigLan;
|
||
|
}
|
||
|
|
||
|
return CONFIG_LAN_NO;
|
||
|
|
||
|
}
|
||
|
|
||
|
function GetPublicLanCount()
|
||
|
{
|
||
|
return g_PublicLanCount;
|
||
|
}
|
||
|
|
||
|
var g_CheckIfConfigInternetCallback = null;
|
||
|
|
||
|
//
|
||
|
// Precondition:
|
||
|
//
|
||
|
// CanConfigLan() != CONFIG_LAN_NO
|
||
|
//
|
||
|
// Description:
|
||
|
//
|
||
|
// The callback will be invoked asynchronously one the
|
||
|
// window.external.AsyncGetPublicLanCount returns through
|
||
|
// ReturnGetPublicLanCount. The UI won't be frozened.
|
||
|
//
|
||
|
// Postcondition:
|
||
|
//
|
||
|
// g_CanConfigLan, g_PublicLanCount and g_Internet are determined.
|
||
|
// callback is invoked.
|
||
|
//
|
||
|
function CheckIfConfigLan(callback)
|
||
|
{
|
||
|
g_CheckIfConfigInternetCallback = new AsyncCallback(callback);
|
||
|
setTimeout("window.external.AsyncGetPublicLanCount()", ICS_MINIMUM_TIMEOUT);
|
||
|
// return at ReturnCheckIfConfigInternet
|
||
|
}
|
||
|
|
||
|
<!--REQUIRED FUNCTION NAME-->
|
||
|
function ReturnGetPublicLanCount(bConnected, cPublicLan)
|
||
|
{
|
||
|
// bConnected and/or cPublicLan can be null if some serious failure occurred.
|
||
|
|
||
|
g_Internet = (bConnected) ? INTERNET_YES : INTERNET_NO;
|
||
|
|
||
|
if (cPublicLan)
|
||
|
{
|
||
|
g_PublicLanCount = cPublicLan;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
g_PublicLanCount = 0;
|
||
|
}
|
||
|
|
||
|
// g_Internet and g_PublicLanCount can be inconsistent because
|
||
|
// they rely on the status of different servers on the Internet.
|
||
|
|
||
|
if (g_Internet == INTERNET_YES)
|
||
|
{
|
||
|
if (g_PublicLanCount == 0)
|
||
|
{
|
||
|
if (HasBroadband())
|
||
|
{
|
||
|
g_PublicLanCount = 1;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (g_PublicLanCount >= 1 || HasBroadband())
|
||
|
{
|
||
|
g_CanConfigLan = CONFIG_LAN_YES;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
g_CanConfigLan = CONFIG_LAN_NO;
|
||
|
}
|
||
|
|
||
|
if (g_CheckIfConfigInternetCallback != null)
|
||
|
{
|
||
|
g_CheckIfConfigInternetCallback.InvokeCallback();
|
||
|
g_CheckIfConfigInternetCallback = null;
|
||
|
}
|
||
|
}
|