26
26
from gi.repository import GObject
28
LOG=logging.getLogger(__name__)
28
LOG = logging.getLogger(__name__)
31
32
class NetState(object):
32
33
""" enums for network manager status """
33
34
# Old enum values are for NM 0.7
35
# The NetworkManager daemon is in an unknown state.
37
NM_STATE_UNKNOWN_LIST = [NM_STATE_UNKNOWN]
38
# The NetworkManager daemon is asleep and all interfaces managed by it are inactive.
39
NM_STATE_ASLEEP_OLD = 1
41
NM_STATE_ASLEEP_LIST = [NM_STATE_ASLEEP_OLD,
36
# The NetworkManager daemon is in an unknown state.
38
NM_STATE_UNKNOWN_LIST = [NM_STATE_UNKNOWN]
39
# The NetworkManager daemon is asleep and all interfaces managed by
41
NM_STATE_ASLEEP_OLD = 1
43
NM_STATE_ASLEEP_LIST = [NM_STATE_ASLEEP_OLD,
43
45
# The NetworkManager daemon is connecting a device.
44
NM_STATE_CONNECTING_OLD = 2
45
NM_STATE_CONNECTING = 40
46
NM_STATE_CONNECTING_LIST = [NM_STATE_CONNECTING_OLD,
48
# The NetworkManager daemon is connected.
49
NM_STATE_CONNECTED_OLD = 3
50
NM_STATE_CONNECTED_LOCAL = 50
51
NM_STATE_CONNECTED_SITE = 60
52
NM_STATE_CONNECTED_GLOBAL = 70
53
NM_STATE_CONNECTED_LIST = [NM_STATE_CONNECTED_OLD,
54
NM_STATE_CONNECTED_LOCAL,
55
NM_STATE_CONNECTED_SITE,
56
NM_STATE_CONNECTED_GLOBAL]
46
NM_STATE_CONNECTING_OLD = 2
47
NM_STATE_CONNECTING = 40
48
NM_STATE_CONNECTING_LIST = [NM_STATE_CONNECTING_OLD,
50
# The NetworkManager daemon is connected.
51
NM_STATE_CONNECTED_OLD = 3
52
NM_STATE_CONNECTED_LOCAL = 50
53
NM_STATE_CONNECTED_SITE = 60
54
NM_STATE_CONNECTED_GLOBAL = 70
55
NM_STATE_CONNECTED_LIST = [NM_STATE_CONNECTED_OLD,
56
NM_STATE_CONNECTED_LOCAL,
57
NM_STATE_CONNECTED_SITE,
58
NM_STATE_CONNECTED_GLOBAL]
57
59
# The NetworkManager daemon is disconnecting.
58
NM_STATE_DISCONNECTING = 30
60
NM_STATE_DISCONNECTING = 30
59
61
NM_STATE_DISCONNECTING_LIST = [NM_STATE_DISCONNECTING]
60
62
# The NetworkManager daemon is disconnected.
61
NM_STATE_DISCONNECTED_OLD = 4
62
NM_STATE_DISCONNECTED = 20
63
NM_STATE_DISCONNECTED_LIST = [NM_STATE_DISCONNECTED_OLD,
63
NM_STATE_DISCONNECTED_OLD = 4
64
NM_STATE_DISCONNECTED = 20
65
NM_STATE_DISCONNECTED_LIST = [NM_STATE_DISCONNECTED_OLD,
64
66
NM_STATE_DISCONNECTED]
67
69
class NetworkStatusWatcher(GObject.GObject):
68
70
""" simple watcher which notifys subscribers to network events..."""
69
__gsignals__ = {'changed':(GObject.SIGNAL_RUN_FIRST,
71
__gsignals__ = {'changed': (GObject.SIGNAL_RUN_FIRST,
74
76
def __init__(self):
75
77
GObject.GObject.__init__(self)
80
85
def __connection_state_changed_handler(state):
81
86
global NETWORK_STATE
84
89
__WATCHER__.emit("changed", NETWORK_STATE)
87
93
# init network state
88
94
def __init_network_state():
89
95
global NETWORK_STATE
91
97
# honor SOFTWARE_CENTER_NET_{DIS,}CONNECTED in the environment variables
94
'SOFTWARE_CENTER_NET_DISCONNECTED' : NetState.NM_STATE_DISCONNECTED,
95
'SOFTWARE_CENTER_NET_CONNECTED' : NetState.NM_STATE_CONNECTED_GLOBAL,
100
'SOFTWARE_CENTER_NET_DISCONNECTED': NetState.NM_STATE_DISCONNECTED,
101
'SOFTWARE_CENTER_NET_CONNECTED': NetState.NM_STATE_CONNECTED_GLOBAL,
97
103
for envkey, state in env_map.iteritems():
98
104
if envkey in os.environ:
104
110
bus = dbus.SystemBus(mainloop=dbus_loop)
105
111
nm = bus.get_object('org.freedesktop.NetworkManager',
106
112
'/org/freedesktop/NetworkManager')
107
NETWORK_STATE = nm.state(dbus_interface='org.freedesktop.NetworkManager')
108
bus.add_signal_receiver(__connection_state_changed_handler,
109
dbus_interface="org.freedesktop.NetworkManager",
110
signal_name="StateChanged")
113
NETWORK_STATE = nm.state(
114
dbus_interface='org.freedesktop.NetworkManager')
115
bus.add_signal_receiver(
116
__connection_state_changed_handler,
117
dbus_interface="org.freedesktop.NetworkManager",
118
signal_name="StateChanged")
113
121
except Exception as e: