After the latest merge there was a duplicate entry of AddAndActivateWirelessConnection in NetworkManager.go which has been removed. There was also duplicate functions call2 and callError2 in utils.go. The duplicate of AddAndActivateWirelessConnection referenced callError2, and both of these duplicates has been removed.
148 lines
3.6 KiB
Go
148 lines
3.6 KiB
Go
package gonetworkmanager
|
|
|
|
import (
|
|
"encoding/binary"
|
|
"fmt"
|
|
"net"
|
|
|
|
"github.com/godbus/dbus"
|
|
)
|
|
|
|
const (
|
|
dbusMethodAddMatch = "org.freedesktop.DBus.AddMatch"
|
|
)
|
|
|
|
type dbusBase struct {
|
|
conn *dbus.Conn
|
|
obj dbus.BusObject
|
|
}
|
|
|
|
func (d *dbusBase) init(iface string, objectPath dbus.ObjectPath) error {
|
|
var err error
|
|
|
|
d.conn, err = dbus.SystemBus()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
d.obj = d.conn.Object(iface, objectPath)
|
|
|
|
return nil
|
|
}
|
|
|
|
func (d *dbusBase) call(value interface{}, method string, args ...interface{}) error {
|
|
return d.obj.Call(method, 0, args...).Store(value)
|
|
}
|
|
|
|
func (d *dbusBase) call2(value1 interface{}, value2 interface{}, method string, args ...interface{}) error {
|
|
return d.obj.Call(method, 0, args...).Store(value1, value2)
|
|
}
|
|
|
|
func (d *dbusBase) subscribe(iface, member string) {
|
|
rule := fmt.Sprintf("type='signal',interface='%s',path='%s',member='%s'",
|
|
iface, d.obj.Path(), NetworkManagerInterface)
|
|
d.conn.BusObject().Call(dbusMethodAddMatch, 0, rule)
|
|
}
|
|
|
|
func (d *dbusBase) subscribeNamespace(namespace string) {
|
|
rule := fmt.Sprintf("type='signal',path_namespace='%s'", namespace)
|
|
d.conn.BusObject().Call(dbusMethodAddMatch, 0, rule)
|
|
}
|
|
|
|
func (d *dbusBase) getProperty(iface string) (interface{}, error) {
|
|
variant, err := d.obj.GetProperty(iface)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return variant.Value(), nil
|
|
}
|
|
|
|
func (d *dbusBase) getObjectProperty(iface string) (dbus.ObjectPath, error) {
|
|
value, err := d.getProperty(iface)
|
|
if err != nil {
|
|
return "", makeErrVariantType(iface)
|
|
}
|
|
return value.(dbus.ObjectPath), nil
|
|
}
|
|
|
|
func (d *dbusBase) getSliceObjectProperty(iface string) ([]dbus.ObjectPath, error) {
|
|
value, err := d.getProperty(iface)
|
|
if err != nil {
|
|
return nil, makeErrVariantType(iface)
|
|
}
|
|
return value.([]dbus.ObjectPath), nil
|
|
}
|
|
|
|
func (d *dbusBase) getStringProperty(iface string) (string, error) {
|
|
value, err := d.getProperty(iface)
|
|
if err != nil {
|
|
return "", makeErrVariantType(iface)
|
|
}
|
|
return value.(string), nil
|
|
}
|
|
|
|
func (d *dbusBase) getSliceStringProperty(iface string) ([]string, error) {
|
|
value, err := d.getProperty(iface)
|
|
if err != nil {
|
|
return nil, makeErrVariantType(iface)
|
|
}
|
|
return value.([]string), nil
|
|
}
|
|
|
|
func (d *dbusBase) getMapStringVariantProperty(iface string) (map[string]dbus.Variant, error) {
|
|
value, err := d.getProperty(iface)
|
|
if err != nil {
|
|
return nil, makeErrVariantType(iface)
|
|
}
|
|
return value.(map[string]dbus.Variant), nil
|
|
}
|
|
|
|
func (d *dbusBase) getUint8Property(iface string) (uint8, error) {
|
|
value, err := d.getProperty(iface)
|
|
if err != nil {
|
|
return 0, makeErrVariantType(iface)
|
|
}
|
|
return value.(uint8), nil
|
|
}
|
|
|
|
func (d *dbusBase) getUint32Property(iface string) (uint32, error) {
|
|
value, err := d.getProperty(iface)
|
|
if err != nil {
|
|
return 0, makeErrVariantType(iface)
|
|
}
|
|
return value.(uint32), nil
|
|
}
|
|
|
|
func (d *dbusBase) getSliceUint32Property(iface string) ([]uint32, error) {
|
|
value, err := d.getProperty(iface)
|
|
if err != nil {
|
|
return nil, makeErrVariantType(iface)
|
|
}
|
|
return value.([]uint32), nil
|
|
}
|
|
|
|
func (d *dbusBase) getSliceSliceUint32Property(iface string) ([][]uint32, error) {
|
|
value, err := d.getProperty(iface)
|
|
if err != nil {
|
|
return nil, makeErrVariantType(iface)
|
|
}
|
|
return value.([][]uint32), nil
|
|
}
|
|
|
|
func (d *dbusBase) getSliceByteProperty(iface string) ([]byte, error) {
|
|
value, err := d.getProperty(iface)
|
|
if err != nil {
|
|
return nil, makeErrVariantType(iface)
|
|
}
|
|
return value.([]byte), nil
|
|
}
|
|
|
|
func makeErrVariantType(iface string) error {
|
|
return fmt.Errorf("unexpected variant type for '%s'", iface)
|
|
}
|
|
|
|
func ip4ToString(ip uint32) string {
|
|
bs := []byte{0, 0, 0, 0}
|
|
binary.LittleEndian.PutUint32(bs, ip)
|
|
return net.IP(bs).String()
|
|
}
|