Add a bunch of APNs
Fork of C027_Support by
Diff: MDMAPN.h
- Revision:
- 88:135fb4bb7aac
- Parent:
- 87:64f54572ea74
- Child:
- 89:ea396f9f90a2
--- a/MDMAPN.h Fri Jun 06 09:00:03 2014 +0000 +++ b/MDMAPN.h Fri Jun 06 10:33:13 2014 +0000 @@ -34,22 +34,66 @@ //! this is a list of special APNs for different network operators static const APN_t apnlut[] = { +// MCC Country +// { /* Operator */ "MCC-MNC[,MNC]" _APN(APN,USERNAME,PASSWORD) }, +// MCC must be 3 digits +// MNC must be either 2 or 3 digits -// Germany - { /*T-Mobile*/ "26201", _APN("internet.t-mobile","t-mobile","tm") }, +// 262 Germany + { /* T-Mobile */ "262-01", _APN("internet.t-mobile","t-mobile","tm") }, + +// 222 Italy + { /* TIM */ "222-01", _APN("ibox.tim.it",,) }, + { /* Vodafone */ "222-10", _APN("web.omnitel.it",,) }, -// Switzerland - { /*Swisscom*/ "22801", _APN("gprs.swisscom.ch",,) }, - { /*Orange*/ "22803", _APN("internet",,) /* post-paid */ - _APN("click",,) /* pre-paid */ }, - -// USA - { /*T-Mobile*/ "310026|310260|310490", +// 228 Switzerland + { /* Swisscom */ "228-01", _APN("gprs.swisscom.ch",,) }, + { /* Orange */ "228-03", _APN("internet",,) /* contract */ + _APN("click",,) /* pre-pay */ }, + +// 234 United Kingdom - GB + { /* O2 */ "234-02,10,11", + _APN("mobile.o2.co.uk","faster","web") /* contract */ + _APN("mobile.o2.co.uk","bypass","web") /* pre-pay */ + _APN("payandgo.o2.co.uk","payandgo","payandgo") }, + { /* Vodafone */ "234-15", _APN("internet","web","web") /* contract */ + _APN("pp.vodafone.co.uk","wap","wap") /* pre-pay */ }, + +// 310 USA + { /* T-Mobile */ "310-026,260,490", _APN("epc.tmobile.com",,) - _APN("fast.tmobile.com",,) /*LTE*/ }, - { /*AT&T*/ "310030|310150|310170|310260|310410|310560|310680", + _APN("fast.tmobile.com",,) /* LTE */ }, + { /* AT&T */ "310-030,150,170,260,410,560,680", _APN("phone",,) _APN("wap.cingular","WAP@CINGULARGPRS.COM","CINGULAR1") _APN("isp.cingular","ISP@CINGULARGPRS.COM","CINGULAR1") }, - // ... }; + +inline const char* apnconfig(const char* imsi) +{ + const char* config = NULL; + if (imsi && *imsi) { + // many carriers use internet without username and password, os use this as default + // now try to lookup the setting for our table + for (int i = 0; i < sizeof(apnlut)/sizeof(*apnlut) && !config; i ++) { + const char* p = apnlut[i].mccmnc; + // check the MCC + if ((0 == memcmp(imsi, p, 3))) { + p += 3; + // check all the MNC, MNC length can be 2 or 3 digits + while (((p[0] == '-') || (p[0] == ',')) && + (p[1] >= '0') && (p[1] <= '9') && + (p[2] >= '0') && (p[2] <= '9') && !config) { + int l = ((p[3] >= '0') && (p[3] <= '9')) ? 3 : 2; + if (0 == memcmp(imsi+3,p+1,l)) + config = apnlut[i].cfg; + p += 1 + l; + } + } + } + } + // use default if not found + if (!config) + config = apndef; + return config; +} \ No newline at end of file