Add a bunch of APNs

Fork of C027_Support by Xinlei Cao

Committer:
xinlei
Date:
Wed May 13 15:28:24 2015 +0000
Revision:
126:b43dbe49091c
Parent:
125:246587b92b3b
Child:
127:73d7bfcc1e3d
EE m2mdata APN added.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mazgch 85:dd8f4f0d0ca9 1 #pragma once
mazgch 85:dd8f4f0d0ca9 2
mazgch 85:dd8f4f0d0ca9 3 /* ----------------------------------------------------------------
mazgch 85:dd8f4f0d0ca9 4 APN stands for Access Point Name, a setting on your modem or phone
mazgch 85:dd8f4f0d0ca9 5 that identifies an external network your phone can access for data
mazgch 92:79b628d1da02 6 (e.g. 3G or 4G Internet service on your phone).
mazgch 85:dd8f4f0d0ca9 7
mazgch 85:dd8f4f0d0ca9 8 The APN settings can be forced when calling the join function.
mazgch 85:dd8f4f0d0ca9 9 Below is a list of known APNs that us used if no apn config
mazgch 85:dd8f4f0d0ca9 10 is forced. This list could be extended by other settings.
mazgch 85:dd8f4f0d0ca9 11
mazgch 85:dd8f4f0d0ca9 12 For further reading:
mazgch 85:dd8f4f0d0ca9 13 wiki apn: http://en.wikipedia.org/wiki/Access_Point_Name
mazgch 85:dd8f4f0d0ca9 14 wiki mcc/mnc: http://en.wikipedia.org/wiki/Mobile_country_code
mazgch 85:dd8f4f0d0ca9 15 google: https://www.google.de/search?q=APN+list
mazgch 85:dd8f4f0d0ca9 16 ---------------------------------------------------------------- */
mazgch 85:dd8f4f0d0ca9 17
mazgch 85:dd8f4f0d0ca9 18 //! helper to generate the APN string
mazgch 85:dd8f4f0d0ca9 19 #define _APN(apn,username,password) apn "\0" username "\0" password "\0"
mazgch 85:dd8f4f0d0ca9 20
mazgch 85:dd8f4f0d0ca9 21 //! helper to extract a field from the config string
mazgch 85:dd8f4f0d0ca9 22 #define _APN_GET(cfg) \
mazgch 85:dd8f4f0d0ca9 23 *cfg ? cfg : ""; \
mazgch 85:dd8f4f0d0ca9 24 cfg += strlen(cfg) + 1
mazgch 85:dd8f4f0d0ca9 25
mazgch 85:dd8f4f0d0ca9 26 //! APN lookup struct
mazgch 85:dd8f4f0d0ca9 27 typedef struct {
mazgch 85:dd8f4f0d0ca9 28 const char* mccmnc; //!< mobile country code (MCC) and mobile network code MNC
mazgch 85:dd8f4f0d0ca9 29 const char* cfg; //!< APN configuartion string, use _APN macro to generate
mazgch 85:dd8f4f0d0ca9 30 } APN_t;
mazgch 85:dd8f4f0d0ca9 31
mazgch 85:dd8f4f0d0ca9 32 //! default APN settings used by many networks
mazgch 91:5af303e25287 33 static const char* apndef = _APN(,,)
mazgch 91:5af303e25287 34 _APN("internet",,);
mazgch 85:dd8f4f0d0ca9 35
mazgch 89:ea396f9f90a2 36 /*! this is a list of special APNs for different network operators
mazgch 89:ea396f9f90a2 37 There is no need to enter the default apn internet in the table;
mazgch 90:3915192f6d7e 38 apndef will be used if no entry matches.
mazgch 90:3915192f6d7e 39
mazgch 90:3915192f6d7e 40 The APN without username/password have to be listed first.
mazgch 89:ea396f9f90a2 41 */
mazgch 85:dd8f4f0d0ca9 42 static const APN_t apnlut[] = {
mazgch 88:135fb4bb7aac 43 // MCC Country
mazgch 88:135fb4bb7aac 44 // { /* Operator */ "MCC-MNC[,MNC]" _APN(APN,USERNAME,PASSWORD) },
mazgch 88:135fb4bb7aac 45 // MCC must be 3 digits
mazgch 88:135fb4bb7aac 46 // MNC must be either 2 or 3 digits
mazgch 92:79b628d1da02 47 // MCC must be separated by '-' from MNC, multiple MNC can be separated by ','
mazgch 85:dd8f4f0d0ca9 48
mazgch 111:5f8807ca159a 49 // 232 Austria - AUT
mazgch 111:5f8807ca159a 50 { /* T-Mobile */ "232-03", _APN("m2m.business",,) },
mazgch 111:5f8807ca159a 51
mazgch 97:b82539535365 52 // 460 China - CN
mazgch 97:b82539535365 53 { /* CN Mobile */"460-00", _APN("cmnet",,)
mazgch 97:b82539535365 54 _APN("cmwap",,) },
mazgch 97:b82539535365 55 { /* Unicom */ "460-01", _APN("3gnet",,)
mazgch 97:b82539535365 56 _APN("uninet","uninet","uninet") },
mazgch 97:b82539535365 57
mazgch 89:ea396f9f90a2 58 // 262 Germany - DE
xinlei 125:246587b92b3b 59 // { /* T-Mobile */ "262-01", _APN("internet.t-mobile","t-mobile","tm") },
xinlei 125:246587b92b3b 60 { /* T-Mobile */ "262-02,06", _APN("m2m.business",,) },
xinlei 125:246587b92b3b 61 { /* T-Mobile */ "262-01", _APN("internet.m2mportal.de", "m2m", "sim") },
mazgch 88:135fb4bb7aac 62
mazgch 89:ea396f9f90a2 63 // 222 Italy - IT
mazgch 88:135fb4bb7aac 64 { /* TIM */ "222-01", _APN("ibox.tim.it",,) },
mazgch 88:135fb4bb7aac 65 { /* Vodafone */ "222-10", _APN("web.omnitel.it",,) },
mazgch 89:ea396f9f90a2 66 { /* Wind */ "222-88", _APN("internet.wind.biz",,) },
mazgch 85:dd8f4f0d0ca9 67
mazgch 90:3915192f6d7e 68 // 440 Japan - JP
mazgch 90:3915192f6d7e 69 { /* Softbank */ "440-04,06,20,40,41,42,43,44,45,46,47,48,90,91,92,93,94,95"
mazgch 90:3915192f6d7e 70 ",96,97,98"
mazgch 90:3915192f6d7e 71 _APN("open.softbank.ne.jp","opensoftbank","ebMNuX1FIHg9d3DA")
mazgch 90:3915192f6d7e 72 _APN("smile.world","dna1trop","so2t3k3m2a") },
mazgch 90:3915192f6d7e 73 { /* NTTDoCoMo */"440-09,10,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,"
mazgch 90:3915192f6d7e 74 "28,29,30,31,32,33,34,35,36,37,38,39,58,59,60,61,62,63,"
mazgch 90:3915192f6d7e 75 "64,65,66,67,68,69,87,99",
mazgch 90:3915192f6d7e 76 _APN("bmobilewap",,) /*BMobile*/
mazgch 90:3915192f6d7e 77 _APN("mpr2.bizho.net","Mopera U",) /* DoCoMo */
mazgch 91:5af303e25287 78 _APN("bmobile.ne.jp","bmobile@wifi2","bmobile") /*BMobile*/ },
mazgch 90:3915192f6d7e 79
mazgch 111:5f8807ca159a 80 // 204 Netherlands - NL
mazgch 111:5f8807ca159a 81 { /* Vodafone */ "204-04", _APN("public4.m2minternet.com",,) },
mazgch 111:5f8807ca159a 82
mazgch 89:ea396f9f90a2 83 // 293 Slovenia - SI
mazgch 89:ea396f9f90a2 84 { /* Si.mobil */ "293-40", _APN("internet.simobil.si",,) },
mazgch 89:ea396f9f90a2 85 { /* Tusmobil */ "293-70", _APN("internet.tusmobil.si",,) },
mazgch 89:ea396f9f90a2 86
mazgch 113:7ade40675003 87 // 240 Sweden SE
mazgch 114:e347ed0fab5e 88 { /* Telia */ "240-01", _APN("online.telia.se",,) },
mazgch 113:7ade40675003 89 { /* Telenor */ "240-06,08",
mazgch 114:e347ed0fab5e 90 _APN("services.telenor.se",,) },
mazgch 114:e347ed0fab5e 91 { /* Tele2 */ "240-07", _APN("mobileinternet.tele2.se",,) },
mazgch 113:7ade40675003 92
mazgch 89:ea396f9f90a2 93 // 228 Switzerland - CH
mazgch 88:135fb4bb7aac 94 { /* Swisscom */ "228-01", _APN("gprs.swisscom.ch",,) },
mazgch 91:5af303e25287 95 { /* Orange */ "228-03", _APN("internet",,) /* contract */
mazgch 88:135fb4bb7aac 96 _APN("click",,) /* pre-pay */ },
mazgch 88:135fb4bb7aac 97
mazgch 88:135fb4bb7aac 98 // 234 United Kingdom - GB
mazgch 88:135fb4bb7aac 99 { /* O2 */ "234-02,10,11",
mazgch 88:135fb4bb7aac 100 _APN("mobile.o2.co.uk","faster","web") /* contract */
mazgch 91:5af303e25287 101 _APN("mobile.o2.co.uk","bypass","web") /* pre-pay */
mazgch 88:135fb4bb7aac 102 _APN("payandgo.o2.co.uk","payandgo","payandgo") },
mazgch 88:135fb4bb7aac 103 { /* Vodafone */ "234-15", _APN("internet","web","web") /* contract */
mazgch 88:135fb4bb7aac 104 _APN("pp.vodafone.co.uk","wap","wap") /* pre-pay */ },
mazgch 110:f524fd9aa13d 105 { /* Three */ "234-20", _APN("three.co.uk",,) },
xinlei 126:b43dbe49091c 106 { /* EE */ "234-33", _APN("m2mdata",,) },
mazgch 88:135fb4bb7aac 107
mazgch 89:ea396f9f90a2 108 // 310 United States of America - US
mazgch 88:135fb4bb7aac 109 { /* T-Mobile */ "310-026,260,490",
mazgch 91:5af303e25287 110 _APN("epc.tmobile.com",,)
mazgch 88:135fb4bb7aac 111 _APN("fast.tmobile.com",,) /* LTE */ },
mazgch 88:135fb4bb7aac 112 { /* AT&T */ "310-030,150,170,260,410,560,680",
mazgch 91:5af303e25287 113 _APN("phone",,)
mazgch 85:dd8f4f0d0ca9 114 _APN("wap.cingular","WAP@CINGULARGPRS.COM","CINGULAR1")
mazgch 85:dd8f4f0d0ca9 115 _APN("isp.cingular","ISP@CINGULARGPRS.COM","CINGULAR1") },
mazgch 124:db878a234544 116
mazgch 124:db878a234544 117 // 901 International - INT
mazgch 124:db878a234544 118 { /* Transatel */ "901-37", _APN("netgprs.com","tsl","tsl") },
mazgch 85:dd8f4f0d0ca9 119 };
mazgch 88:135fb4bb7aac 120
mazgch 88:135fb4bb7aac 121 inline const char* apnconfig(const char* imsi)
mazgch 88:135fb4bb7aac 122 {
mazgch 88:135fb4bb7aac 123 const char* config = NULL;
mazgch 88:135fb4bb7aac 124 if (imsi && *imsi) {
mazgch 88:135fb4bb7aac 125 // many carriers use internet without username and password, os use this as default
mazgch 88:135fb4bb7aac 126 // now try to lookup the setting for our table
mazgch 88:135fb4bb7aac 127 for (int i = 0; i < sizeof(apnlut)/sizeof(*apnlut) && !config; i ++) {
mazgch 88:135fb4bb7aac 128 const char* p = apnlut[i].mccmnc;
mazgch 88:135fb4bb7aac 129 // check the MCC
mazgch 88:135fb4bb7aac 130 if ((0 == memcmp(imsi, p, 3))) {
mazgch 88:135fb4bb7aac 131 p += 3;
mazgch 88:135fb4bb7aac 132 // check all the MNC, MNC length can be 2 or 3 digits
mazgch 88:135fb4bb7aac 133 while (((p[0] == '-') || (p[0] == ',')) &&
mazgch 88:135fb4bb7aac 134 (p[1] >= '0') && (p[1] <= '9') &&
mazgch 88:135fb4bb7aac 135 (p[2] >= '0') && (p[2] <= '9') && !config) {
mazgch 88:135fb4bb7aac 136 int l = ((p[3] >= '0') && (p[3] <= '9')) ? 3 : 2;
mazgch 88:135fb4bb7aac 137 if (0 == memcmp(imsi+3,p+1,l))
mazgch 88:135fb4bb7aac 138 config = apnlut[i].cfg;
mazgch 88:135fb4bb7aac 139 p += 1 + l;
mazgch 88:135fb4bb7aac 140 }
mazgch 88:135fb4bb7aac 141 }
mazgch 88:135fb4bb7aac 142 }
mazgch 88:135fb4bb7aac 143 }
mazgch 88:135fb4bb7aac 144 // use default if not found
mazgch 88:135fb4bb7aac 145 if (!config)
mazgch 88:135fb4bb7aac 146 config = apndef;
mazgch 88:135fb4bb7aac 147 return config;
mazgch 88:135fb4bb7aac 148 }