'Return a dictionary of all property names and values. Returns only
readable properties.'

@method(PROPERTIES_IFACE, in_signature='s', out_signature='a{sv}')
def GetAll(self, interface_name):

    interfaces = self._dbus_interface_table
    if interface_name:
        iface = interfaces.get(interface_name)
        if (iface is None):
            raise DBusException(('No    interface    %s    on    object' % interface_name))
        ifaces = [iface]
    else:
        ifaces = interfaces.values()
    properties = {}
    for iface in ifaces:
        for (name, prop) in iface.items():
            if (not isinstance(prop, dbus_property)):
                continue
            if ((not prop.fget) or (name in properties)):
                continue
            properties[name] = prop.fget(self)
    return properties
