blob: e07ecc6b529434f8a9ec71686fe5d4db26bd44b4 [file] [log] [blame]
/*
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*/
/* global Windows:true */
var Connection = require('./Connection');
var winNetConn = Windows.Networking.Connectivity;
var networkInfo = winNetConn.NetworkInformation;
function getCurrrentConnectionType () {
var profile = networkInfo.getInternetConnectionProfile();
if (!profile) {
return Connection.NONE;
}
var conLevel = profile.getNetworkConnectivityLevel();
var interfaceType = profile.networkAdapter.ianaInterfaceType;
// since we use this to detect whether we are online or offline we do check agains InternetAccess
// localAccess (airplane mode as an example) or constrainedInternetAccess mean there is no access to the internet available
// https://msdn.microsoft.com/library/windows/apps/windows.networking.connectivity.networkconnectivitylevel.aspx
if (conLevel !== Windows.Networking.Connectivity.NetworkConnectivityLevel.internetAccess) {
return Connection.NONE;
}
var connectionType;
switch (interfaceType) {
case 71:
connectionType = Connection.WIFI;
break;
case 6:
connectionType = Connection.ETHERNET;
break;
case 243: // (3GPP WWAN) // Fallthrough is intentional
case 244: // (3GPP2 WWAN)
connectionType = Connection.CELL_3G;
break;
default:
connectionType = Connection.UNKNOWN;
break;
}
return connectionType;
}
module.exports = {
getConnectionInfo: function (win, fail, args) {
var reportConnectionInfoOnce = function () {
win(getCurrrentConnectionType(), { keepCallback: true });
};
// report current connection type
setTimeout(reportConnectionInfoOnce, 0);
// start traking future changes
networkInfo.addEventListener('networkstatuschanged', reportConnectionInfoOnce);
}
};
require('cordova/exec/proxy').add('NetworkStatus', module.exports);