1
2
3
4 """
5 Network monitoring class: check if the internet is reachable.
6 """
7
8 import dbus
9
10 from twisted.application import service
11 from twisted.web import client
12 from twisted.internet import reactor, defer
13
14 from sparked import events
15
16
18 """
19 Check on network connection existence through NetworkManager.
20 """
21
23 bus = dbus.SystemBus()
24 interface = 'org.freedesktop.NetworkManager'
25 udi = '/org/freedesktop/NetworkManager'
26
27 managerObj = bus.get_object(interface, udi)
28 bus.add_signal_receiver(self.stateChanged,
29 dbus_interface=interface,
30 signal_name='PropertiesChanged')
31 self.properties = dbus.Interface(managerObj, 'org.freedesktop.DBus.Properties')
32 self.stateChanged()
33
34
40
41
42
44 """
45 Checks if the network connection is up by trying to reach a website.
46 """
47
48 url = "http://www.google.com/"
49 delay = 30
50
56
57
64 d.addCallback(ok)
65
66 def error(f):
67 print f
68 if self.connected:
69 networkEvents.dispatch("web-connected", False)
70 self.connected = False
71 d.addErrback(error)
72
73 d = defer.Deferred()
74 self._dc = reactor.callLater(self.delay, lambda : d.callback(None))
75 d.addCallback(lambda _: self.loop())
76 return d
77
78
79 - def event(self, connected=False):
80 """
81 Event from networkmanager came in. If network connection is
82 down, do not try to fetch webpages.
83 """
84 if self._dc and self._dc.active():
85 self._dc.cancel()
86
87 self.connected = False
88 if connected:
89 self.loop()
90 else:
91 networkEvents.dispatch("web-connected", False)
92
93
94 networkEvents = events.EventDispatcher()
95