Add a bunch of APNs

Fork of C027_Support by Xinlei Cao

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