Publish Vulpes Preview 15 sources for desktop, Android and Tundra
Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
This commit is contained in:
parent
93e3a48004
commit
b38dea0597
25901 changed files with 9982925 additions and 369 deletions
2
gaia/shared/resources/apn/Makefile
Executable file
2
gaia/shared/resources/apn/Makefile
Executable file
|
|
@ -0,0 +1,2 @@
|
|||
../apn_tz.json: ../tz.json service_providers.xml default_timezones.py
|
||||
python default_timezones.py > $@
|
||||
33855
gaia/shared/resources/apn/apns_conf.xml
Executable file
33855
gaia/shared/resources/apn/apns_conf.xml
Executable file
File diff suppressed because it is too large
Load diff
295
gaia/shared/resources/apn/apns_conf_local.xml
Executable file
295
gaia/shared/resources/apn/apns_conf_local.xml
Executable file
|
|
@ -0,0 +1,295 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
|
||||
<!-- use empty string to specify no proxy or port -->
|
||||
<!-- This version must agree with that in apps/common/res/apns.xml -->
|
||||
<apns version="7">
|
||||
|
||||
<!-- Test Network -->
|
||||
<apn carrier="Test Network"
|
||||
mcc="001"
|
||||
mnc="01"
|
||||
apn="internet"
|
||||
user="user"
|
||||
password="password"
|
||||
proxy="127.0.0.1"
|
||||
port="8080"
|
||||
mmsc="http://127.0.0.1"
|
||||
mmsproxy="127.0.0.1"
|
||||
mmsport="8080"
|
||||
authtype="0"
|
||||
type="default,supl,mms,dun,ims"
|
||||
/>
|
||||
|
||||
<!-- APNs used for bearer tests -->
|
||||
<!-- Test network with no bearer (compatible with all network types) -->
|
||||
<apn carrier="NoBearer"
|
||||
mcc="001"
|
||||
mnc="02"
|
||||
apn="nobearer"
|
||||
user="user"
|
||||
password="password"
|
||||
proxy="127.0.0.1"
|
||||
port="8080"
|
||||
mmsc="http://127.0.0.1"
|
||||
mmsproxy="127.0.0.1"
|
||||
mmsport="8080"
|
||||
authtype="0"
|
||||
type="default,supl,mms,dun,ims"
|
||||
/>
|
||||
|
||||
<!-- Test network with an EVDO_0 bearer -->
|
||||
<apn carrier="Evdo0Bearer"
|
||||
mcc="001"
|
||||
mnc="02"
|
||||
apn="evdo0bearer"
|
||||
user="user"
|
||||
password="password"
|
||||
proxy="127.0.0.1"
|
||||
port="8080"
|
||||
mmsc="http://127.0.0.1"
|
||||
mmsproxy="127.0.0.1"
|
||||
mmsport="8080"
|
||||
authtype="0"
|
||||
type="default,supl,mms,dun,ims"
|
||||
bearer="7"
|
||||
/>
|
||||
|
||||
<!-- Test network with a 0 bearer (compatible with all network types) -->
|
||||
<apn carrier="ZeroBearer"
|
||||
mcc="001"
|
||||
mnc="02"
|
||||
apn="zerobearer"
|
||||
user="user"
|
||||
password="password"
|
||||
proxy="127.0.0.1"
|
||||
port="8080"
|
||||
mmsc="http://127.0.0.1"
|
||||
mmsproxy="127.0.0.1"
|
||||
mmsport="8080"
|
||||
authtype="0"
|
||||
type="default,supl,mms,dun,ims"
|
||||
bearer="0"
|
||||
/>
|
||||
|
||||
<!-- Default APN for undefined types -->
|
||||
<apn carrier="No type test"
|
||||
mcc="001"
|
||||
mnc="03"
|
||||
apn="internet"
|
||||
user="user"
|
||||
password="password"
|
||||
proxy="127.0.0.1"
|
||||
port="8080"
|
||||
mmsc="http://127.0.0.1"
|
||||
mmsproxy="127.0.0.1"
|
||||
mmsport="8080"
|
||||
authtype="0"
|
||||
/>
|
||||
|
||||
<!-- /Test Networks -->
|
||||
|
||||
<apn carrier="SpeakOut"
|
||||
mcc="302"
|
||||
mnc="720"
|
||||
apn="goam.com"
|
||||
user="wapuser1"
|
||||
password="wap"
|
||||
proxy="10.128.1.69"
|
||||
port="80"
|
||||
mmsc="http://mms.gprs.rogers.com"
|
||||
mmsproxy="10.128.1.69"
|
||||
mmsport="80"
|
||||
type="default,mms"
|
||||
/>
|
||||
|
||||
<!-- override carrier names until they get updated in the upstream database -->
|
||||
|
||||
<apn carrier="VM WAP"
|
||||
mcc="208"
|
||||
mnc="01"
|
||||
name="Virgin Mobile"
|
||||
/>
|
||||
|
||||
<apn carrier="VM MMS"
|
||||
mcc="208"
|
||||
mnc="01"
|
||||
name="Virgin Mobile MMS"
|
||||
/>
|
||||
|
||||
<apn carrier="亞太電信(APBW) (Internet)"
|
||||
mcc="466"
|
||||
mnc="05"
|
||||
apn="aptnet"
|
||||
mmsproxy="210.200.66.196"
|
||||
mmsport="80"
|
||||
user="aptwap@nsip.qma.com.tw"
|
||||
password="aptwap"
|
||||
authtype="2"
|
||||
type="default"
|
||||
/>
|
||||
|
||||
<apn carrier="亞太電信(APBW) (WAP)"
|
||||
mcc="466"
|
||||
mnc="05"
|
||||
apn="aptwap"
|
||||
mmsproxy="210.200.66.196"
|
||||
mmsport="80"
|
||||
user="aptwap@nsip.qma.com.tw"
|
||||
password="aptwap"
|
||||
authtype="2"
|
||||
type="default"
|
||||
/>
|
||||
|
||||
<apn carrier="亞太電信(APBW) (MMS)"
|
||||
mcc="466"
|
||||
mnc="05"
|
||||
apn="aptmms"
|
||||
mmsc="http://mms.aptg.com.tw"
|
||||
mmsproxy="210.200.66.196"
|
||||
mmsport="80"
|
||||
user="aptwap@nsip.qma.com.tw"
|
||||
password="aptwap"
|
||||
type="mms"
|
||||
/>
|
||||
|
||||
<apn carrier="Conexion Compartida"
|
||||
mcc="214"
|
||||
mnc="07"
|
||||
apn="movistar.es"
|
||||
user="MOVISTAR"
|
||||
password="MOVISTAR"
|
||||
authtype="1"
|
||||
type="dun"
|
||||
/>
|
||||
|
||||
<!-- overwrite APNs until they get updated in the upstream database -->
|
||||
|
||||
<apn carrier_name="ATT Nextgenphone"
|
||||
carrier="ATT Phone"
|
||||
overwrite="true"
|
||||
mcc="310"
|
||||
mnc="410"
|
||||
apn="phone"
|
||||
type="default,mms,supl,fota"
|
||||
mmsc="http://mmsc.mobile.att.net"
|
||||
mmsproxy="proxy.mobile.att.net"
|
||||
mmsport="80"
|
||||
/>
|
||||
|
||||
<!-- Bug - 1011584 | Adding Bangladeshi APNs Below -->
|
||||
<!-- Drop them once they get added to the AOSP APN database -->
|
||||
<apn carrier="GP INTERNET"
|
||||
mcc="470"
|
||||
mnc="01"
|
||||
apn="gpinternet"
|
||||
type="default,supl"
|
||||
/>
|
||||
|
||||
<apn carrier="GP WAP"
|
||||
mcc="470"
|
||||
mnc="01"
|
||||
apn="gpwap"
|
||||
proxy="010.128.001.002"
|
||||
port="8080"
|
||||
type="default,supl"
|
||||
/>
|
||||
<apn carrier="GP MMS"
|
||||
mcc="470"
|
||||
mnc="01"
|
||||
apn="gpmms"
|
||||
mmsc="http://mms.gpsurf.net/servlets/mms"
|
||||
mmsproxy="010.128.001.002"
|
||||
mmsport="8080"
|
||||
type="mms"
|
||||
/>
|
||||
<apn carrier="Robi-INTERNET"
|
||||
mcc="470"
|
||||
mnc="02"
|
||||
apn="internet"
|
||||
type="default,supl"
|
||||
/>
|
||||
<apn carrier="Robi-WAP"
|
||||
mcc="470"
|
||||
mnc="02"
|
||||
apn="wap"
|
||||
proxy="10.16.18.77"
|
||||
port="9028"
|
||||
type="default,supl"
|
||||
/>
|
||||
<apn carrier="Robi-MMS"
|
||||
mcc="470"
|
||||
mnc="02"
|
||||
apn="wap"
|
||||
mmsc="http://10.16.18.40:38090/was"
|
||||
mmsproxy="10.16.18.77"
|
||||
mmsport="9028"
|
||||
type="mms"
|
||||
/>
|
||||
<apn carrier="Banglalink-WEB"
|
||||
mcc="470"
|
||||
mnc="03"
|
||||
apn="blweb"
|
||||
type="default,supl"
|
||||
/>
|
||||
<apn carrier="Banglalink-WAP"
|
||||
mcc="470"
|
||||
mnc="03"
|
||||
apn="blwap"
|
||||
proxy="10.10.55.34"
|
||||
port="8799"
|
||||
type="default,supl"
|
||||
/>
|
||||
<apn carrier="Banglalink-MMS"
|
||||
mcc="470"
|
||||
mnc="03"
|
||||
apn="blmms"
|
||||
mmsc="http://mmsc1:10021/mmsc/01"
|
||||
mmsproxy="10.10.55.34"
|
||||
mmsport="8799"
|
||||
type="mms"
|
||||
/>
|
||||
<apn carrier="Airtel Internet"
|
||||
mcc="470"
|
||||
mnc="07"
|
||||
apn="internet"
|
||||
type="default,supl"
|
||||
/>
|
||||
<apn carrier="Airtel WAP"
|
||||
mcc="470"
|
||||
mnc="07"
|
||||
apn="wap"
|
||||
type="default,supl"
|
||||
/>
|
||||
<apn carrier="Airtel MMS"
|
||||
mcc="470"
|
||||
mnc="07"
|
||||
apn="mms"
|
||||
mmsc="http://bd.airtel.com"
|
||||
mmsproxy="10.128.5.6"
|
||||
type="mms"
|
||||
/>
|
||||
<apn carrier="TT-INTERNET"
|
||||
mcc="470"
|
||||
mnc="04"
|
||||
apn="wap"
|
||||
type="default,supl"
|
||||
/>
|
||||
<apn carrier="TT-WAP"
|
||||
mcc="470"
|
||||
mnc="04"
|
||||
apn="wap"
|
||||
proxy="192.168.145.101"
|
||||
port="9201"
|
||||
type="default,supl"
|
||||
/>
|
||||
<apn carrier="Teletalk-MMS"
|
||||
mcc="470"
|
||||
mnc="04"
|
||||
apn="mms"
|
||||
mmsc="http://10.5.4.22:38090/was"
|
||||
mmsproxy="10.5.4.40"
|
||||
mmsport="8080"
|
||||
type="mms"
|
||||
/>
|
||||
|
||||
</apns>
|
||||
120
gaia/shared/resources/apn/default_timezones.py
Executable file
120
gaia/shared/resources/apn/default_timezones.py
Executable file
|
|
@ -0,0 +1,120 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
import sys, re, json
|
||||
from xml.parsers import expat
|
||||
|
||||
#
|
||||
# Parse the TZ input file and build the tree.
|
||||
#
|
||||
|
||||
text = open("../tz.json").read()
|
||||
data = json.loads(text)
|
||||
|
||||
cities = {}
|
||||
conflicts = {
|
||||
'CD': 'Africa/Kinshasa',
|
||||
'ML': 'Africa/Bamako',
|
||||
'AR': 'America/Argentina/Buenos_Aires', # This is weird in tz.json I guess
|
||||
'BR': 'America/Sao_Paulo',
|
||||
'CA': 'America/Toronto',
|
||||
'CL': 'America/Santiago',
|
||||
'GL': 'America/Godthab',
|
||||
'MX': 'America/Mexico_City',
|
||||
'US': 'America/New_York',
|
||||
'VI': 'America/Virgin',
|
||||
'AQ': 'Antarctica/South_Pole',
|
||||
'CN': 'Asia/Chongqing', # Beijing is not in our database?
|
||||
'CY': 'Asia/Nicosia',
|
||||
'ID': 'Asia/Jakarta',
|
||||
'IL': 'Asia/Jerusalem',
|
||||
'KZ': 'Asia/Almaty',
|
||||
'MN': 'Asia/Ulan_Bator',
|
||||
'MY': 'Asia/Kuala_Lumpur',
|
||||
'PS': 'Asia/Gaza',
|
||||
'TM': 'Asia/Ashgabat',
|
||||
'UZ': 'Asia/Tashkent',
|
||||
'VN': 'Asia/Saigon',
|
||||
'AU': 'Australia/Sydney',
|
||||
'ES': 'Europe/Madrid',
|
||||
'GB': 'Europe/London',
|
||||
'MD': 'Europe/Chisinau',
|
||||
'NO': 'Europe/Oslo',
|
||||
'PT': 'Europe/Lisbon',
|
||||
'RU': 'Europe/Moscow',
|
||||
'TR': 'Europe/Istanbul',
|
||||
'UA': 'Europe/Kyiv',
|
||||
'AS': 'Pacific/Samoa',
|
||||
'EC': 'Pacific/Galapagos',
|
||||
'FM': 'Pacific/Ponape',
|
||||
'KI': 'Pacific/Kiritimati',
|
||||
'MH': 'Pacific/Kwajalein',
|
||||
'NZ': 'Pacific/Auckland',
|
||||
'PF': 'Pacific/Tahiti',
|
||||
'UM': 'Pacific/Midway'
|
||||
}
|
||||
|
||||
for continent in data:
|
||||
for entry in data[continent]:
|
||||
cc = entry['cc'].encode('ascii')
|
||||
city = entry['city'].encode('ascii')
|
||||
if cc in cities:
|
||||
if not cc in conflicts:
|
||||
print(city)
|
||||
cities[cc] = conflicts[cc]
|
||||
else:
|
||||
cities[cc] = continent + '/' + city
|
||||
|
||||
#
|
||||
# Parse the APN input file and build the tree.
|
||||
#
|
||||
|
||||
apn_tz = {}
|
||||
|
||||
def start_element(name, attrs):
|
||||
global cc, apn_tz
|
||||
if name == "country":
|
||||
cc = attrs['code'].encode('ascii')
|
||||
if not re.match('[a-z]{2}', cc):
|
||||
print("invalid cc='" + cc + "'")
|
||||
sys.exit(-1)
|
||||
if name == "network-id":
|
||||
mcc = attrs['mcc'].encode('ascii')
|
||||
mnc = attrs['mnc'].encode('ascii')
|
||||
if not re.match('[0-9]{3}', mcc) or not re.match('[0-9]{1,3}', mnc):
|
||||
print("invalid mcc='" + mcc + "' or mnc='" + mnc + "'")
|
||||
sys.exit(-1)
|
||||
if not mcc in apn_tz:
|
||||
apn_tz[mcc] = {}
|
||||
apn_tz[mcc][mnc] = cities[cc.upper()]
|
||||
|
||||
def char_data(text):
|
||||
True
|
||||
|
||||
def end_element(name):
|
||||
True
|
||||
|
||||
p = expat.ParserCreate()
|
||||
p.StartElementHandler = start_element
|
||||
p.CharacterDataHandler = char_data
|
||||
p.EndElementHandler = end_element
|
||||
p.ParseFile(open('service_providers.xml', 'rb'))
|
||||
|
||||
#
|
||||
# Sort/filter apn_tz
|
||||
#
|
||||
|
||||
for mcc in apn_tz:
|
||||
tz_list = apn_tz[mcc]
|
||||
tmp = ''
|
||||
same_tz = True
|
||||
for mnc in tz_list:
|
||||
if (tmp == ''):
|
||||
tmp = tz_list[mnc]
|
||||
elif (tmp != tz_list[mnc]):
|
||||
same_tz = False
|
||||
break
|
||||
if same_tz:
|
||||
apn_tz[mcc] = tmp
|
||||
|
||||
print(json.dumps(apn_tz, sort_keys = True, indent = 2))
|
||||
|
||||
exit()
|
||||
54
gaia/shared/resources/apn/index.html
Executable file
54
gaia/shared/resources/apn/index.html
Executable file
|
|
@ -0,0 +1,54 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8"/>
|
||||
<title> APN Database </title>
|
||||
<script type="application/javascript" src="query.js"></script>
|
||||
<style type="text/css">
|
||||
html, body {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
overflow: hidden;
|
||||
}
|
||||
textarea {
|
||||
margin: 2px;
|
||||
}
|
||||
body > textarea {
|
||||
position: absolute;
|
||||
width: 50%;
|
||||
height: -moz-calc(100% - 10px);
|
||||
height: -webkit-calc(100% - 10px);
|
||||
}
|
||||
form {
|
||||
position: absolute;
|
||||
right: 2px;
|
||||
width: -moz-calc(50% - 10px);
|
||||
width: -webkit-calc(50% - 10px);
|
||||
height: 90%;
|
||||
}
|
||||
form label {
|
||||
display: block;
|
||||
text-align: center;
|
||||
height: 25px;
|
||||
margin: 0;
|
||||
}
|
||||
form textarea {
|
||||
width: 100%;
|
||||
height: -moz-calc(50% - 2px);
|
||||
height: -webkit-calc(50% - 2px);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<textarea readonly></textarea>
|
||||
<form>
|
||||
<label> MCC: <input name="mcc" value="214"/> </label>
|
||||
<label> MNC: <input name="mnc" value="07" /> </label>
|
||||
<textarea readonly id="selection"></textarea>
|
||||
<textarea readonly id="preferences"></textarea>
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
582
gaia/shared/resources/apn/operator_variant.xml
Executable file
582
gaia/shared/resources/apn/operator_variant.xml
Executable file
|
|
@ -0,0 +1,582 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<!--
|
||||
/* 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/.
|
||||
*/
|
||||
-->
|
||||
<variant version="1">
|
||||
<operator carrier="Test Network with Operator Variant Settings"
|
||||
mcc="001"
|
||||
mnc="01"
|
||||
cellBroadcastSearchList="gsm:0,1,2,3|cdma:4,5,6,7"
|
||||
voicemail="999999"
|
||||
/>
|
||||
<operator
|
||||
name="Internet movil"
|
||||
mcc="214"
|
||||
mnc="01"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
/>
|
||||
<operator
|
||||
name="Orange Internet Móvil"
|
||||
mcc="214"
|
||||
mnc="03"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
/>
|
||||
<operator
|
||||
name="Yoigo Navegador"
|
||||
mcc="214"
|
||||
mnc="04"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
/>
|
||||
<operator
|
||||
name="INTERNET GPRS"
|
||||
mcc="214"
|
||||
mnc="06"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
/>
|
||||
<operator
|
||||
name="Euskaltel Internet"
|
||||
mcc="214"
|
||||
mnc="06"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
/>
|
||||
<operator
|
||||
name="Internet R"
|
||||
mcc="214"
|
||||
mnc="06"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
/>
|
||||
<operator
|
||||
name="TeleCable Internet"
|
||||
mcc="214"
|
||||
mnc="06"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
/>
|
||||
<operator
|
||||
name="Movistar"
|
||||
mcc="214"
|
||||
mnc="07"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
operatorSizeLimitation="512000"
|
||||
/>
|
||||
<operator
|
||||
name="Euskaltel Internet"
|
||||
mcc="214"
|
||||
mnc="08"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
/>
|
||||
<operator
|
||||
name="TeleCable Internet"
|
||||
mcc="214"
|
||||
mnc="16"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
/>
|
||||
<operator
|
||||
name="Internet"
|
||||
mcc="334"
|
||||
mnc="020"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
/>
|
||||
<operator
|
||||
name="Mensajes Multimedia"
|
||||
mcc="334"
|
||||
mnc="020"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
/>
|
||||
<operator
|
||||
name="Movistar INTERNET"
|
||||
mcc="334"
|
||||
mnc="03"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
voicemail="*86"
|
||||
operatorSizeLimitation="512000"
|
||||
/>
|
||||
<operator
|
||||
name="Movistar INTERNET"
|
||||
mcc="334"
|
||||
mnc="030"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
voicemail="*86"
|
||||
operatorSizeLimitation="512000"
|
||||
/>
|
||||
<operator
|
||||
name="Iusacell Internet"
|
||||
mcc="334"
|
||||
mnc="050"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
/>
|
||||
<operator
|
||||
name="INTERNET CLARO"
|
||||
mcc="704"
|
||||
mnc="01"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
/>
|
||||
<operator
|
||||
name="BROADBAND TIGO"
|
||||
mcc="704"
|
||||
mnc="02"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
/>
|
||||
<operator
|
||||
name="Movistar INTERNET"
|
||||
mcc="704"
|
||||
mnc="03"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
voicemail="*86"
|
||||
/>
|
||||
<operator
|
||||
name="Movistar INTERNET"
|
||||
mcc="704"
|
||||
mnc="030"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
voicemail="*86"
|
||||
/>
|
||||
<operator
|
||||
name="INTERNET CLARO"
|
||||
mcc="706"
|
||||
mnc="01"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
/>
|
||||
<operator
|
||||
name="El Salvaldor Digicel"
|
||||
mcc="706"
|
||||
mnc="02"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
/>
|
||||
<operator
|
||||
name="BROADBAND TIGO"
|
||||
mcc="706"
|
||||
mnc="03"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
/>
|
||||
<operator
|
||||
name="Movistar INTERNET"
|
||||
mcc="706"
|
||||
mnc="04"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
voicemail="*86"
|
||||
/>
|
||||
<operator
|
||||
name="Movistar INTERNET"
|
||||
mcc="706"
|
||||
mnc="040"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
voicemail="*86"
|
||||
/>
|
||||
<operator
|
||||
name="INTERNET"
|
||||
mcc="710"
|
||||
mnc="21"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
/>
|
||||
<operator
|
||||
name="Movistar INTERNET"
|
||||
mcc="710"
|
||||
mnc="300"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
voicemail="*86"
|
||||
/>
|
||||
<operator
|
||||
name="INTERNET"
|
||||
mcc="710"
|
||||
mnc="730"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
/>
|
||||
<operator
|
||||
name="Kolbi"
|
||||
mcc="712"
|
||||
mnc="01"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
/>
|
||||
<operator
|
||||
name="Kolbi"
|
||||
mcc="712"
|
||||
mnc="02"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
/>
|
||||
<operator
|
||||
name="INTERNET CLARO"
|
||||
mcc="712"
|
||||
mnc="03"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
/>
|
||||
<operator
|
||||
name="Movistar INTERNET"
|
||||
mcc="712"
|
||||
mnc="04"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
voicemail="*1690"
|
||||
/>
|
||||
<operator
|
||||
name="Wap"
|
||||
mcc="714"
|
||||
mnc="01"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
/>
|
||||
<operator
|
||||
name="Movistar INTERNET"
|
||||
mcc="714"
|
||||
mnc="020"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
voicemail="*86"
|
||||
/>
|
||||
<operator
|
||||
name="WEB Claro"
|
||||
mcc="714"
|
||||
mnc="03"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
/>
|
||||
<operator
|
||||
name="INTERNET Panama"
|
||||
mcc="714"
|
||||
mnc="04"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
/>
|
||||
<operator
|
||||
name="Movistar INTERNET"
|
||||
mcc="716"
|
||||
mnc="06"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
voicemail="*169"
|
||||
operatorSizeLimitation="614400"
|
||||
/>
|
||||
<operator
|
||||
name="CLARO DATOS"
|
||||
mcc="716"
|
||||
mnc="10"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
/>
|
||||
<operator
|
||||
name="Movistar WAP"
|
||||
mcc="722"
|
||||
mnc="07"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
voicemail="555"
|
||||
operatorSizeLimitation="614400"
|
||||
/>
|
||||
<operator
|
||||
name="Claro AR"
|
||||
mcc="722"
|
||||
mnc="31"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
/>
|
||||
<operator
|
||||
name="Claro AR"
|
||||
mcc="722"
|
||||
mnc="310"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
/>
|
||||
<operator
|
||||
name="Personal Datos"
|
||||
mcc="722"
|
||||
mnc="34"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
/>
|
||||
<operator
|
||||
name="Personal Datos"
|
||||
mcc="722"
|
||||
mnc="341"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
/>
|
||||
<operator
|
||||
name="TIM Connect"
|
||||
mcc="724"
|
||||
mnc="02"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
/>
|
||||
<operator
|
||||
name="TIM Connect"
|
||||
mcc="724"
|
||||
mnc="03"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
/>
|
||||
<operator
|
||||
name="TIM Connect"
|
||||
mcc="724"
|
||||
mnc="04"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
/>
|
||||
<operator
|
||||
name="Java Session"
|
||||
mcc="724"
|
||||
mnc="05"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
/>
|
||||
<operator
|
||||
name="Claro Foto"
|
||||
mcc="724"
|
||||
mnc="05"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
/>
|
||||
<operator
|
||||
name="Vivo Internet"
|
||||
mcc="724"
|
||||
mnc="06"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
cellBroadcastSearchList="gsm:50"
|
||||
/>
|
||||
<operator
|
||||
name="SCTL GPRS"
|
||||
mcc="724"
|
||||
mnc="07"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
/>
|
||||
<operator
|
||||
name="Vivo Internet"
|
||||
mcc="724"
|
||||
mnc="10"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
cellBroadcastSearchList="gsm:50"
|
||||
/>
|
||||
<operator
|
||||
name="Vivo Internet"
|
||||
mcc="724"
|
||||
mnc="11"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
cellBroadcastSearchList="gsm:50"
|
||||
/>
|
||||
<operator
|
||||
name="BrT Modem"
|
||||
mcc="724"
|
||||
mnc="16"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
/>
|
||||
<operator
|
||||
name="TelemigC GPRS"
|
||||
mcc="724"
|
||||
mnc="19"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
/>
|
||||
<operator
|
||||
name="Vivo Internet"
|
||||
mcc="724"
|
||||
mnc="23"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
cellBroadcastSearchList="gsm:50"
|
||||
/>
|
||||
<operator
|
||||
name="AmazôniaC GPRS"
|
||||
mcc="724"
|
||||
mnc="24"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
/>
|
||||
<operator
|
||||
name="OI GPRS"
|
||||
mcc="724"
|
||||
mnc="31"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
/>
|
||||
<operator
|
||||
name="Internet Movil"
|
||||
mcc="730"
|
||||
mnc="01"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
/>
|
||||
<operator
|
||||
name="Internet Movil"
|
||||
mcc="730"
|
||||
mnc="10"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
/>
|
||||
<operator
|
||||
name="Movistar APLICACIONES"
|
||||
mcc="730"
|
||||
mnc="02"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
voicemail="500"
|
||||
skipProxy="true"
|
||||
skipProxyFor="Movistar APLICACIONES"
|
||||
/>
|
||||
<operator
|
||||
name="BAM Claro"
|
||||
mcc="730"
|
||||
mnc="03"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
/>
|
||||
<operator
|
||||
name="web"
|
||||
mcc="730"
|
||||
mnc="07"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
/>
|
||||
<operator
|
||||
name="Internet"
|
||||
mcc="730"
|
||||
mnc="08"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
/>
|
||||
<operator
|
||||
name="Wap"
|
||||
mcc="730"
|
||||
mnc="08"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
/>
|
||||
<operator
|
||||
name="Bam"
|
||||
mcc="730"
|
||||
mnc="08"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
/>
|
||||
<operator
|
||||
name="Internet Movil"
|
||||
mcc="730"
|
||||
mnc="10"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
/>
|
||||
<operator
|
||||
name="WEB Comcel 3GSM"
|
||||
mcc="732"
|
||||
mnc="101"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
operatorSizeLimitation="614400"
|
||||
/>
|
||||
<operator
|
||||
name="TIGO WEB"
|
||||
mcc="732"
|
||||
mnc="103"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
operatorSizeLimitation="614400"
|
||||
/>
|
||||
<operator
|
||||
name="TIGO Multimedia"
|
||||
mcc="732"
|
||||
mnc="103"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
operatorSizeLimitation="614400"
|
||||
/>
|
||||
<operator
|
||||
name="TIGO WEB"
|
||||
mcc="732"
|
||||
mnc="111"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
operatorSizeLimitation="614400"
|
||||
/>
|
||||
<operator
|
||||
name="TIGO Multimedia"
|
||||
mcc="732"
|
||||
mnc="111"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
operatorSizeLimitation="614400"
|
||||
/>
|
||||
<operator
|
||||
name="Movistar INTERNET"
|
||||
mcc="732"
|
||||
mnc="123"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
voicemail="*123"
|
||||
operatorSizeLimitation="614400"
|
||||
/>
|
||||
<operator
|
||||
name="Digitel GSM"
|
||||
mcc="734"
|
||||
mnc="01"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
/>
|
||||
<operator
|
||||
name="Digitel GSM"
|
||||
mcc="734"
|
||||
mnc="02"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
/>
|
||||
<operator
|
||||
name="Digitel GSM"
|
||||
mcc="734"
|
||||
mnc="03"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
/>
|
||||
<operator
|
||||
name="Movistar INTERNET"
|
||||
mcc="734"
|
||||
mnc="04"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
voicemail="*2"
|
||||
/>
|
||||
<operator
|
||||
name="Movistar WAP"
|
||||
mcc="734"
|
||||
mnc="04"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
voicemail="*2"
|
||||
/>
|
||||
<operator
|
||||
name="MODEM"
|
||||
mcc="734"
|
||||
mnc="06"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
/>
|
||||
<operator
|
||||
name="Movistar INTERNET"
|
||||
mcc="740"
|
||||
mnc="00"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
voicemail="*82"
|
||||
operatorSizeLimitation="614400"
|
||||
/>
|
||||
<operator
|
||||
name="Claro Internet"
|
||||
mcc="740"
|
||||
mnc="01"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
operatorSizeLimitation="614400"
|
||||
/>
|
||||
<operator
|
||||
name="Claro Internet"
|
||||
mcc="740"
|
||||
mnc="010"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
/>
|
||||
<operator
|
||||
name="ALEGRO 3G"
|
||||
mcc="740"
|
||||
mnc="02"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
operatorSizeLimitation="614400"
|
||||
/>
|
||||
<operator
|
||||
name="wapANCEL"
|
||||
mcc="748"
|
||||
mnc="01"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
/>
|
||||
<operator
|
||||
name="gprsANCEL"
|
||||
mcc="748"
|
||||
mnc="01"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
/>
|
||||
<operator
|
||||
name="Movistar INTERNET"
|
||||
mcc="748"
|
||||
mnc="07"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
voicemail="6684"
|
||||
operatorSizeLimitation="1048576"
|
||||
/>
|
||||
<operator
|
||||
name="Claro UY"
|
||||
mcc="748"
|
||||
mnc="10"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
/>
|
||||
<operator
|
||||
name="T-Mobile Internet"
|
||||
mcc="262"
|
||||
mnc="01"
|
||||
voicemail="3311"
|
||||
/>
|
||||
<operator
|
||||
name="T-mobile.pl"
|
||||
mcc="260"
|
||||
mnc="02"
|
||||
cellBroadcastSearchList="gsm:0,9,19,28,112"
|
||||
/>
|
||||
<operator
|
||||
name="o2"
|
||||
mcc="262"
|
||||
mnc="07"
|
||||
enableStrict7BitEncodingForSms="true"
|
||||
operatorSizeLimitation="614400"
|
||||
/>
|
||||
</variant>
|
||||
428
gaia/shared/resources/apn/query.js
Executable file
428
gaia/shared/resources/apn/query.js
Executable file
|
|
@ -0,0 +1,428 @@
|
|||
'use strict';
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function onload() {
|
||||
var DEBUG = false;
|
||||
|
||||
var OPERATOR_VARIANT_FILE = '../apn.json';
|
||||
var GNOME_DB_FILE = 'service_providers.xml';
|
||||
var ANDROID_DB_FILE = 'apns_conf.xml';
|
||||
var LOCAL_ANDROID_DB_FILE = 'apns_conf_local.xml';
|
||||
var OPERATOR_VARIANT_DB_FILE = 'operator_variant.xml';
|
||||
|
||||
var gGnomeDB = null;
|
||||
var gAndroidDB = null;
|
||||
var gOperatorVariantDB = null;
|
||||
|
||||
|
||||
/**
|
||||
* XML helpers: load & query XML databases
|
||||
*/
|
||||
|
||||
function loadXML(url) {
|
||||
var xhr = new XMLHttpRequest();
|
||||
xhr.open('GET', url, false);
|
||||
xhr.send();
|
||||
return xhr.responseXML;
|
||||
}
|
||||
|
||||
function queryXML(xmlDocument, query) {
|
||||
var xpe = new XPathEvaluator();
|
||||
var nsResolver = xpe.createNSResolver(xmlDocument);
|
||||
return xpe.evaluate(query, xmlDocument, nsResolver, 0, null);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Merge the Android and Gnome APN and the Operator Variant databases
|
||||
*/
|
||||
|
||||
function queryAndroidDB(mcc, mnc) {
|
||||
var query = '//apn';
|
||||
if (mcc) {
|
||||
query += '[@mcc=' + mcc + ']'; // Mobile Country Code
|
||||
}
|
||||
if (mnc) {
|
||||
query += '[@mnc=' + mnc + ']'; // Mobile Network Code
|
||||
}
|
||||
|
||||
var result = queryXML(gAndroidDB, query);
|
||||
var res = result.iterateNext();
|
||||
var found = [];
|
||||
|
||||
while (res) { // turn each resulting XML element into a JS object
|
||||
var apn = {};
|
||||
for (var i = 0; i < res.attributes.length; i++) {
|
||||
var name = res.attributes[i].name;
|
||||
var value = res.attributes[i].value;
|
||||
if (name == 'type') { // array of comma-separated values
|
||||
apn.type = value.split(',');
|
||||
} else { // all other attributes are plain strings
|
||||
apn[name] = value;
|
||||
}
|
||||
}
|
||||
found.push(apn);
|
||||
res = result.iterateNext();
|
||||
}
|
||||
|
||||
return found;
|
||||
}
|
||||
|
||||
function queryGnomeDB(mcc, mnc, setting) {
|
||||
var query = '//gsm[network-id' + '[@mcc=' + mcc + '][@mnc=' + mnc + ']' +
|
||||
']/' + setting;
|
||||
var result = queryXML(gGnomeDB, query);
|
||||
var node = result.iterateNext();
|
||||
return node ? node.textContent : '';
|
||||
}
|
||||
|
||||
function queryOperatorVariantDB(mcc, mnc) {
|
||||
var query = '//operator' + '[@mcc=' + mcc + '][@mnc=' + mnc + ']';
|
||||
var result = queryXML(gOperatorVariantDB, query);
|
||||
var res = result.iterateNext();
|
||||
var found = [];
|
||||
|
||||
while (res) { // turn each resulting XML element into a JS object
|
||||
var operatorSettings = {};
|
||||
for (var i = 0; i < res.attributes.length; i++) {
|
||||
var name = res.attributes[i].name;
|
||||
var value = res.attributes[i].value;
|
||||
operatorSettings[name] = value;
|
||||
}
|
||||
found.push(operatorSettings);
|
||||
res = result.iterateNext();
|
||||
}
|
||||
|
||||
return found.length ? found[0] : null;
|
||||
}
|
||||
|
||||
function padLeft(num, length) {
|
||||
var r = String(num);
|
||||
while (r.length < length) {
|
||||
r = '0' + r;
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
function mergeDBs() {
|
||||
var apn = {};
|
||||
|
||||
for (var mcc = 1; mcc < 999; mcc++) {
|
||||
var country = {};
|
||||
|
||||
var _mcc = padLeft(mcc, 3);
|
||||
|
||||
var result = queryAndroidDB(_mcc);
|
||||
|
||||
if (result && result.length) {
|
||||
result.sort();
|
||||
for (var i = 0; i < result.length; i++) {
|
||||
/* jshint loopfunc: true */
|
||||
var mnc = result[i].mnc;
|
||||
|
||||
var operatorVariantSettings = {};
|
||||
var voicemail = queryGnomeDB(_mcc, mnc, 'voicemail');
|
||||
if (voicemail) {
|
||||
operatorVariantSettings.voicemail = voicemail;
|
||||
if (DEBUG) {
|
||||
console.log(operatorVariantSettings.voicemail + ': ' + voicemail);
|
||||
}
|
||||
}
|
||||
var otherSettings = queryOperatorVariantDB(_mcc, mnc);
|
||||
if (otherSettings) {
|
||||
if (DEBUG) {
|
||||
console.log('Other operator settings: ' +
|
||||
JSON.stringify(otherSettings));
|
||||
}
|
||||
if (!operatorVariantSettings.voicemail) {
|
||||
voicemail = otherSettings.voicemail;
|
||||
if (voicemail) {
|
||||
operatorVariantSettings.voicemail = voicemail;
|
||||
}
|
||||
}
|
||||
|
||||
var enableStrict7BitEncodingForSms =
|
||||
otherSettings.enableStrict7BitEncodingForSms;
|
||||
if (enableStrict7BitEncodingForSms) {
|
||||
operatorVariantSettings.enableStrict7BitEncodingForSms =
|
||||
enableStrict7BitEncodingForSms == 'true';
|
||||
}
|
||||
var cellBroadcastSearchList =
|
||||
otherSettings.cellBroadcastSearchList;
|
||||
if (cellBroadcastSearchList) {
|
||||
var searchListObj = {};
|
||||
var lists = cellBroadcastSearchList.split('|');
|
||||
lists.forEach(function(list) {
|
||||
var parts = list.split(':');
|
||||
searchListObj[parts[0]] = parts[1];
|
||||
});
|
||||
operatorVariantSettings.cellBroadcastSearchList = searchListObj;
|
||||
}
|
||||
|
||||
var operatorSizeLimitation =
|
||||
otherSettings.operatorSizeLimitation;
|
||||
if (operatorSizeLimitation) {
|
||||
operatorVariantSettings.operatorSizeLimitation =
|
||||
+operatorSizeLimitation;
|
||||
}
|
||||
var skipProxy = otherSettings.skipProxy;
|
||||
if (skipProxy == 'true') {
|
||||
var skipProxyFor = otherSettings.skipProxyFor;
|
||||
if (skipProxyFor) {
|
||||
if (skipProxyFor.indexOf(result[i].carrier) != -1) {
|
||||
if (DEBUG) {
|
||||
console.log('Skip proxy setting for: ' + result[i].carrier);
|
||||
}
|
||||
result[i].proxy = result[i].port = '';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
delete(result[i].mcc);
|
||||
delete(result[i].mnc);
|
||||
if (country[mnc]) {
|
||||
if (DEBUG) { // warn about the duplicate (mcc, mnc) tuple
|
||||
if (country[mnc].length == 1) {
|
||||
console.log('duplicate mcc/mnc: ' + _mcc + '/' + mnc);
|
||||
console.log(' - ' + country[mnc][0].carrier);
|
||||
}
|
||||
console.log(' - ' + result[i].carrier);
|
||||
}
|
||||
country[mnc].push(result[i]);
|
||||
} else {
|
||||
country[mnc] = [result[i]];
|
||||
if (voicemail || otherSettings) {
|
||||
operatorVariantSettings.type = [];
|
||||
operatorVariantSettings.type.push('operatorvariant');
|
||||
country[mnc].push(operatorVariantSettings);
|
||||
}
|
||||
}
|
||||
}
|
||||
apn[_mcc] = country;
|
||||
}
|
||||
}
|
||||
|
||||
return apn;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* User Interface
|
||||
*/
|
||||
|
||||
var gAPN;
|
||||
var apnPrefNames = {
|
||||
'default': {
|
||||
'ril.data.carrier': 'carrier',
|
||||
'ril.data.apn': 'apn',
|
||||
'ril.data.user': 'user',
|
||||
'ril.data.passwd': 'password',
|
||||
'ril.data.httpProxyHost': 'proxy',
|
||||
'ril.data.httpProxyPort': 'port',
|
||||
'ril.data.authtype': 'authtype',
|
||||
'ril.data.mtu': 'mtu'
|
||||
},
|
||||
'supl': {
|
||||
'ril.supl.carrier': 'carrier',
|
||||
'ril.supl.apn': 'apn',
|
||||
'ril.supl.user': 'user',
|
||||
'ril.supl.passwd': 'password',
|
||||
'ril.supl.httpProxyHost': 'proxy',
|
||||
'ril.supl.httpProxyPort': 'port',
|
||||
'ril.supl.authtype': 'authtype',
|
||||
'ril.supl.mtu': 'mtu'
|
||||
},
|
||||
'mms': {
|
||||
'ril.mms.carrier': 'carrier',
|
||||
'ril.mms.apn': 'apn',
|
||||
'ril.mms.user': 'user',
|
||||
'ril.mms.passwd': 'password',
|
||||
'ril.mms.httpProxyHost': 'proxy',
|
||||
'ril.mms.httpProxyPort': 'port',
|
||||
'ril.mms.mmsc': 'mmsc',
|
||||
'ril.mms.mmsproxy': 'mmsproxy',
|
||||
'ril.mms.mmsport': 'mmsport',
|
||||
'ril.mms.authtype': 'authtype',
|
||||
'ril.mms.mtu': 'mtu'
|
||||
},
|
||||
'dun': {
|
||||
'ril.dun.carrier': 'carrier',
|
||||
'ril.dun.apn': 'apn',
|
||||
'ril.dun.user': 'user',
|
||||
'ril.dun.passwd': 'password',
|
||||
'ril.dun.httpProxyHost': 'proxy',
|
||||
'ril.dun.httpProxyPort': 'port',
|
||||
'ril.dun.authtype': 'authtype',
|
||||
'ril.dun.mtu': 'mtu'
|
||||
},
|
||||
'ims': {
|
||||
'ril.ims.carrier': 'carrier',
|
||||
'ril.ims.apn': 'apn',
|
||||
'ril.ims.user': 'user',
|
||||
'ril.ims.passwd': 'password',
|
||||
'ril.ims.httpProxyHost': 'proxy',
|
||||
'ril.ims.httpProxyPort': 'port',
|
||||
'ril.ims.authtype': 'authtype',
|
||||
'ril.ims.mtu': 'mtu'
|
||||
},
|
||||
'fota': {
|
||||
'ril.fota.carrier': 'carrier',
|
||||
'ril.fota.apn': 'apn',
|
||||
'ril.fota.user': 'user',
|
||||
'ril.fota.passwd': 'password',
|
||||
'ril.fota.httpProxyHost': 'proxy',
|
||||
'ril.fota.httpProxyPort': 'port',
|
||||
'ril.fota.authtype': 'authtype',
|
||||
'ril.fota.mtu': 'mtu'
|
||||
},
|
||||
'operatorvariant': {
|
||||
'ril.iccInfo.mbdn': 'voicemail',
|
||||
'ril.sms.strict7BitEncoding.enabled': 'enableStrict7BitEncodingForSms',
|
||||
'ril.cellbroadcast.searchlist': 'cellBroadcastSearchList',
|
||||
'dom.mms.operatorSizeLimitation': 'operatorSizeLimitation'
|
||||
}
|
||||
};
|
||||
|
||||
var booleanPrefNames = [
|
||||
'ril.sms.strict7BitEncoding.enabled'
|
||||
];
|
||||
|
||||
function loadDB(output, callback) {
|
||||
output.textContent = '\n loading database...';
|
||||
var xhr = new XMLHttpRequest();
|
||||
xhr.open('GET', OPERATOR_VARIANT_FILE, true);
|
||||
xhr.onreadystatechange = function() {
|
||||
if (xhr.readyState == 4) {
|
||||
if (xhr.status == 200 || xhr.status === 0) {
|
||||
// the JSON database is already available -- we don't use
|
||||
// xhr.responseType = 'json' to be compatible with Chrome... sigh.
|
||||
gAPN = JSON.parse(xhr.responseText);
|
||||
} else {
|
||||
// the JSON database is not available, merge the three XML databases
|
||||
output.textContent = '\n merging databases, this takes a while...';
|
||||
gAndroidDB = loadXML(ANDROID_DB_FILE);
|
||||
// First merge the local DB
|
||||
var localAndroidDB = loadXML(LOCAL_ANDROID_DB_FILE);
|
||||
var localApns =
|
||||
localAndroidDB.documentElement.querySelectorAll('apn');
|
||||
var androidApns;
|
||||
var androidApn;
|
||||
for (var localApn of localApns) {
|
||||
if (localApn.getAttribute('overwrite') &&
|
||||
localApn.getAttribute('carrier_name')) {
|
||||
var pattern = '[carrier="' +
|
||||
localApn.getAttribute('carrier_name') + '"]';
|
||||
androidApns =
|
||||
gAndroidDB.documentElement.querySelectorAll(pattern);
|
||||
var matchFound = false;
|
||||
for (androidApn of androidApns) {
|
||||
if (androidApn &&
|
||||
androidApn.getAttribute('carrier') ===
|
||||
localApn.getAttribute('carrier_name')) {
|
||||
|
||||
if (DEBUG) {
|
||||
console.log('- replace "' +
|
||||
androidApn.getAttribute('apn') +
|
||||
'" to "' + localApn.getAttribute('apn') +
|
||||
'"');
|
||||
}
|
||||
localApn.removeAttribute('overwrite');
|
||||
localApn.removeAttribute('carrier_name');
|
||||
var parent = androidApn.parentNode;
|
||||
parent.insertBefore(localApn, androidApn);
|
||||
parent.removeChild(androidApn);
|
||||
matchFound = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (!matchFound) {
|
||||
alert('Warning!\nCould not find APN \'' +
|
||||
localApn.getAttribute('carrier_name') +
|
||||
'\'. Which is expected to be overwrited.');
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
// use local apn to patch origin carrier name in the Android DB
|
||||
// if the name is not the correct one (see bug 863126).
|
||||
// Note: This patch will not function once we get
|
||||
// the correct names updated in the upstream database.
|
||||
if (localApn.getAttribute('name')) {
|
||||
var localPattern = 'apn' +
|
||||
'[mcc="' + localApn.getAttribute('mcc') + '"]' +
|
||||
'[mnc="' + localApn.getAttribute('mnc') + '"]';
|
||||
androidApns =
|
||||
gAndroidDB.documentElement.querySelectorAll(localPattern);
|
||||
for (androidApn of androidApns) {
|
||||
if (androidApn &&
|
||||
androidApn.getAttribute('carrier') ===
|
||||
localApn.getAttribute('carrier')) {
|
||||
if (DEBUG) {
|
||||
console.log('- replace "' +
|
||||
androidApn.getAttribute('carrier') +
|
||||
'" to "' + localApn.getAttribute('name') +
|
||||
'"');
|
||||
}
|
||||
androidApn.setAttribute('carrier',
|
||||
localApn.getAttribute('name'));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
gAndroidDB.documentElement.appendChild(localApn);
|
||||
}
|
||||
}
|
||||
// Then the Gnome DB
|
||||
gGnomeDB = loadXML(GNOME_DB_FILE);
|
||||
gOperatorVariantDB = loadXML(OPERATOR_VARIANT_DB_FILE);
|
||||
gAPN = mergeDBs();
|
||||
}
|
||||
output.textContent = DEBUG ?
|
||||
JSON.stringify(gAPN, true, 2) :
|
||||
JSON.stringify(gAPN, true, 0)
|
||||
.replace(/("[0-9]+"):{/g, '\n$1: {')
|
||||
.replace(/("[0-9]+"):\[/g, '\n $1: [')
|
||||
.replace(/},\n/g, '\n},\n')
|
||||
.replace(/\[{/g, '[\n {')
|
||||
.replace(/},{/g, '},\n {')
|
||||
.replace(/}(],?)/g, '}\n $1')
|
||||
.replace(/]}}$/, ']\n}\n}');
|
||||
callback();
|
||||
}
|
||||
};
|
||||
xhr.send();
|
||||
}
|
||||
|
||||
function update() {
|
||||
var selection = document.getElementById('selection');
|
||||
var mcc = document.querySelector('input[name=mcc]').value;
|
||||
var mnc = document.querySelector('input[name=mnc]').value;
|
||||
var res = gAPN[mcc] ? (gAPN[mcc][mnc] || []) : [];
|
||||
selection.textContent = JSON.stringify(res, true, 2);
|
||||
|
||||
var preferences = document.getElementById('preferences');
|
||||
var prefs = {};
|
||||
for (var type in apnPrefNames) {
|
||||
var apn = {};
|
||||
for (var i = 0; i < res.length; i++) {
|
||||
if (res[i].type.indexOf(type) != -1) {
|
||||
apn = res[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
var prefNames = apnPrefNames[type];
|
||||
for (var key in prefNames) {
|
||||
var name = apnPrefNames[type][key];
|
||||
if (booleanPrefNames.indexOf(key) != -1) {
|
||||
prefs[key] = apn[name] || false;
|
||||
} else {
|
||||
prefs[key] = apn[name] || '';
|
||||
}
|
||||
}
|
||||
}
|
||||
preferences.textContent = JSON.stringify(prefs, true, 2);
|
||||
}
|
||||
|
||||
document.querySelector('form').oninput = update;
|
||||
loadDB(document.querySelector('textarea'), update);
|
||||
});
|
||||
11021
gaia/shared/resources/apn/service_providers.xml
Executable file
11021
gaia/shared/resources/apn/service_providers.xml
Executable file
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue