]> git.neil.brown.name Git - plato.git/commitdiff
netman: use new gsmd interface for WWAN data.
authorNeilBrown <neilb@suse.de>
Mon, 31 Dec 2012 09:59:01 +0000 (20:59 +1100)
committerNeilBrown <neilb@suse.de>
Mon, 31 Dec 2012 10:01:33 +0000 (21:01 +1100)
i.e. write APN to data-APN, and watch 'data' for updates.

For now, APN is hard-coded.

netman/netman.py

index 6149cc05a462d8887000ea8a5a66bbb4b03a7062..185c195d38331fa5391cea1fc58df8439457afdb 100644 (file)
@@ -498,26 +498,78 @@ class WLAN_iface(iface):
         self.supplicant_up()
             
 
+####
+# WWAN support code, for talking to GSMD
+#
+
+import dnotify
+
+def record(key, value):
+    f = open('/run/gsm-state/.new.' + key, 'w')
+    f.write(value)
+    f.close()
+    os.rename('/run/gsm-state/.new.' + key,
+              '/run/gsm-state/' + key)
+
+def recall(key, nofile = ""):
+    try:
+        fd = open("/run/gsm-state/" + key)
+        l = fd.read(1000)
+        l = l.strip()
+        fd.close()
+    except IOError:
+        l = nofile
+    return l
+
+
 class WWAN_iface(iface):
     def __init__(self, parent):
         self.name = 'GSM/3G'
         self.rfkill_name = 'wwan'
         self.conf = None
         self.iface = 'hso0'
+        self.sim = recall('sim')
         self.APN = 'INTERNET'
+        if self.sim == "505023304781083":
+            # exetel mobile internet sim
+            self.APN = 'exetel1'
+        if self.sim == "505023104508131":
+            # My exetel sim card
+            self.APN = 'INTERNET'
         iface.__init__(self, parent)
         self.can_hotspot = False
+        d = dnotify.dir('/run/gsm-state')
+        self.data_watcher = d.watch('data', self.check_data)
+
+    def check_data(self, f):
+        l = recall('data')
+        if l:
+            self.state = 'active'
+            d = recall('dns').split()
+            f = open("/etc/resolv.conf","w")
+            for s in d:
+                f.write('nameserver %s\n', s)
+            f.close()
+            
+        elif self.state = 'active':
+            self.state = 'pending'
+        goject.idle_add(self.recalc)
+
+    def recalc(self):
+        self.parent.update_active()
+        self.set_label()
 
     def get_config(self):
         self.config = self.addr + ' APN=%s' % self.APN
 
     def activate(self):
         self.rfkill('unblock')
-        Popen('/usr/local/bin/gsm-data up', shell=True).wait()
-        self.state = 'active'
+        self.state = 'pending'
+        record('data-APN', self.APN)
 
     def shutdown(self):
-        Popen('/usr/local/bin/gsm-data down', shell=True).wait()
+        self.state = 'disabled'
+        record('data-APN','')
         self.rfkill('block')
 
 class BT_iface(iface):