parent
							
								
									a623a58bfe
								
							
						
					
					
						commit
						c185f6c3d0
					
				
					 2 changed files with 177 additions and 2 deletions
				
			
		|  | @ -1,4 +1,161 @@ | ||||||
| package gonetworkmanager | package gonetworkmanager | ||||||
| 
 | 
 | ||||||
|  | import ( | ||||||
|  | 	"github.com/godbus/dbus" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | const ( | ||||||
|  | 	ActiveConnectionInterface             = NetworkManagerInterface + ".Connection.Active" | ||||||
|  | 	ActiveConnectionProperyConnection     = ActiveConnectionInterface + ".Connection" | ||||||
|  | 	ActiveConnectionProperySpecificObject = ActiveConnectionInterface + ".SpecificObject" | ||||||
|  | 	ActiveConnectionProperyID             = ActiveConnectionInterface + ".Id" | ||||||
|  | 	ActiveConnectionProperyUUID           = ActiveConnectionInterface + ".Uuid" | ||||||
|  | 	ActiveConnectionProperyType           = ActiveConnectionInterface + ".Type" | ||||||
|  | 	ActiveConnectionProperyDevices        = ActiveConnectionInterface + ".Devices" | ||||||
|  | 	ActiveConnectionProperyState          = ActiveConnectionInterface + ".State" | ||||||
|  | 	ActiveConnectionProperyStateFlags     = ActiveConnectionInterface + ".StateFlags" | ||||||
|  | 	ActiveConnectionProperyDefault        = ActiveConnectionInterface + ".Default" | ||||||
|  | 	ActiveConnectionProperyIP4Config      = ActiveConnectionInterface + ".Ip4Config" | ||||||
|  | 	ActiveConnectionProperyDHCP4Config    = ActiveConnectionInterface + ".Dhcp4Config" | ||||||
|  | 	ActiveConnectionProperyDefault6       = ActiveConnectionInterface + ".Default6" | ||||||
|  | 	ActiveConnectionProperyVPN            = ActiveConnectionInterface + ".Vpn" | ||||||
|  | 	ActiveConnectionProperyMaster         = ActiveConnectionInterface + ".Master" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
| type ActiveConnection interface { | type ActiveConnection interface { | ||||||
|  | 	// GetConnection gets connection object of the connection. | ||||||
|  | 	GetConnection() Connection | ||||||
|  | 
 | ||||||
|  | 	// GetSpecificObject gets a specific object associated with the active connection. | ||||||
|  | 	GetSpecificObject() AccessPoint | ||||||
|  | 
 | ||||||
|  | 	// GetID gets the ID of the connection. | ||||||
|  | 	GetID() string | ||||||
|  | 
 | ||||||
|  | 	// GetUUID gets the UUID of the connection. | ||||||
|  | 	GetUUID() string | ||||||
|  | 
 | ||||||
|  | 	// GetType gets the type of the connection. | ||||||
|  | 	GetType() string | ||||||
|  | 
 | ||||||
|  | 	// GetDevices gets array of device objects which are part of this active connection. | ||||||
|  | 	GetDevices() []Device | ||||||
|  | 
 | ||||||
|  | 	// GetState gets the state of the connection. | ||||||
|  | 	GetState() uint32 | ||||||
|  | 
 | ||||||
|  | 	// GetStateFlags gets the state flags of the connection. | ||||||
|  | 	GetStateFlags() uint32 | ||||||
|  | 
 | ||||||
|  | 	// GetDefault gets the default IPv4 flag of the connection. | ||||||
|  | 	GetDefault() bool | ||||||
|  | 
 | ||||||
|  | 	// GetIP4Config gets the IP4Config of the connection. | ||||||
|  | 	GetIP4Config() IP4Config | ||||||
|  | 
 | ||||||
|  | 	// GetDHCP4Config gets the DHCP4Config of the connection. | ||||||
|  | 	GetDHCP4Config() DHCP4Config | ||||||
|  | 
 | ||||||
|  | 	// GetVPN gets the VPN flag of the connection. | ||||||
|  | 	GetVPN() bool | ||||||
|  | 
 | ||||||
|  | 	// GetMaster gets the master device of the connection. | ||||||
|  | 	GetMaster() Device | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func NewActiveConnection(objectPath dbus.ObjectPath) (ActiveConnection, error) { | ||||||
|  | 	var a activeConnection | ||||||
|  | 	return &a, a.init(NetworkManagerInterface, objectPath) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type activeConnection struct { | ||||||
|  | 	dbusBase | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (a *activeConnection) GetConnection() Connection { | ||||||
|  | 	path := a.getObjectProperty(ActiveConnectionProperyConnection) | ||||||
|  | 	con, err := NewConnection(path) | ||||||
|  | 	if err != nil { | ||||||
|  | 		panic(err) | ||||||
|  | 	} | ||||||
|  | 	return con | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (a *activeConnection) GetSpecificObject() AccessPoint { | ||||||
|  | 	path := a.getObjectProperty(ActiveConnectionProperySpecificObject) | ||||||
|  | 	ap, err := NewAccessPoint(path) | ||||||
|  | 	if err != nil { | ||||||
|  | 		panic(err) | ||||||
|  | 	} | ||||||
|  | 	return ap | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (a *activeConnection) GetID() string { | ||||||
|  | 	return a.getStringProperty(ActiveConnectionProperyID) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (a *activeConnection) GetUUID() string { | ||||||
|  | 	return a.getStringProperty(ActiveConnectionProperyUUID) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (a *activeConnection) GetType() string { | ||||||
|  | 	return a.getStringProperty(ActiveConnectionProperyType) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (a *activeConnection) GetDevices() []Device { | ||||||
|  | 	paths := a.getSliceObjectProperty(ActiveConnectionProperyDevices) | ||||||
|  | 	devices := make([]Device, len(paths)) | ||||||
|  | 	var err error | ||||||
|  | 	for i, path := range paths { | ||||||
|  | 		devices[i], err = DeviceFactory(path) | ||||||
|  | 		if err != nil { | ||||||
|  | 			panic(err) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	return devices | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (a *activeConnection) GetState() uint32 { | ||||||
|  | 	return a.getUint32Property(ActiveConnectionProperyState) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (a *activeConnection) GetStateFlags() uint32 { | ||||||
|  | 	return a.getUint32Property(ActiveConnectionProperyStateFlags) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (a *activeConnection) GetDefault() bool { | ||||||
|  | 	b := a.getProperty(ActiveConnectionProperyDefault) | ||||||
|  | 	return b.(bool) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (a *activeConnection) GetIP4Config() IP4Config { | ||||||
|  | 	path := a.getObjectProperty(ActiveConnectionProperyIP4Config) | ||||||
|  | 	r, err := NewIP4Config(path) | ||||||
|  | 	if err != nil { | ||||||
|  | 		panic(err) | ||||||
|  | 	} | ||||||
|  | 	return r | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (a *activeConnection) GetDHCP4Config() DHCP4Config { | ||||||
|  | 	path := a.getObjectProperty(ActiveConnectionProperyDHCP4Config) | ||||||
|  | 	r, err := NewDHCP4Config(path) | ||||||
|  | 	if err != nil { | ||||||
|  | 		panic(err) | ||||||
|  | 	} | ||||||
|  | 	return r | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (a *activeConnection) GetVPN() bool { | ||||||
|  | 	ret := a.getProperty(ActiveConnectionProperyVPN) | ||||||
|  | 	return ret.(bool) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (a *activeConnection) GetMaster() Device { | ||||||
|  | 	path := a.getObjectProperty(ActiveConnectionProperyMaster) | ||||||
|  | 	r, err := DeviceFactory(path) | ||||||
|  | 	if err != nil { | ||||||
|  | 		panic(err) | ||||||
|  | 	} | ||||||
|  | 	return r | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -10,8 +10,9 @@ const ( | ||||||
| 	NetworkManagerInterface  = "org.freedesktop.NetworkManager" | 	NetworkManagerInterface  = "org.freedesktop.NetworkManager" | ||||||
| 	NetworkManagerObjectPath = "/org/freedesktop/NetworkManager" | 	NetworkManagerObjectPath = "/org/freedesktop/NetworkManager" | ||||||
| 
 | 
 | ||||||
| 	NetworkManagerGetDevices    = NetworkManagerInterface + ".GetDevices" | 	NetworkManagerGetDevices               = NetworkManagerInterface + ".GetDevices" | ||||||
| 	NetworkManagerPropertyState = NetworkManagerInterface + ".state" | 	NetworkManagerPropertyState            = NetworkManagerInterface + ".State" | ||||||
|  | 	NetworkManagerPropertyActiveConnection = NetworkManagerInterface + ".ActiveConnections" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| type NetworkManager interface { | type NetworkManager interface { | ||||||
|  | @ -24,6 +25,8 @@ type NetworkManager interface { | ||||||
| 	// management. | 	// management. | ||||||
| 	GetState() NmState | 	GetState() NmState | ||||||
| 
 | 
 | ||||||
|  | 	GetActiveConnections() []ActiveConnection | ||||||
|  | 
 | ||||||
| 	Subscribe() <-chan *dbus.Signal | 	Subscribe() <-chan *dbus.Signal | ||||||
| 	Unsubscribe() | 	Unsubscribe() | ||||||
| 
 | 
 | ||||||
|  | @ -62,6 +65,21 @@ func (n *networkManager) GetState() NmState { | ||||||
| 	return NmState(n.getUint32Property(NetworkManagerPropertyState)) | 	return NmState(n.getUint32Property(NetworkManagerPropertyState)) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func (n *networkManager) GetActiveConnections() []ActiveConnection { | ||||||
|  | 	acPaths := n.getSliceObjectProperty(NetworkManagerPropertyActiveConnection) | ||||||
|  | 	ac := make([]ActiveConnection, len(acPaths)) | ||||||
|  | 
 | ||||||
|  | 	var err error | ||||||
|  | 	for i, path := range acPaths { | ||||||
|  | 		ac[i], err = NewActiveConnection(path) | ||||||
|  | 		if err != nil { | ||||||
|  | 			panic(err) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return ac | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func (n *networkManager) Subscribe() <-chan *dbus.Signal { | func (n *networkManager) Subscribe() <-chan *dbus.Signal { | ||||||
| 	if n.sigChan != nil { | 	if n.sigChan != nil { | ||||||
| 		return n.sigChan | 		return n.sigChan | ||||||
|  |  | ||||||
		Reference in a new issue