Class DBusConnection

  • All Implemented Interfaces:
    Closeable, AutoCloseable

    public final class DBusConnection
    extends AbstractConnection
    Handles a connection to DBus.

    This is a Singleton class, only 1 connection to the SYSTEM or SESSION busses can be made. Repeated calls to getConnection will return the same reference.

    Signal Handlers and method calls from remote objects are run in their own threads, you MUST handle the concurrency issues.

    • Method Detail

      • getConnection

        public static DBusConnection getConnection​(String _address)
                                            throws DBusException
        Connect to the BUS. If a connection already exists to the specified Bus, a reference to it is returned. Will always register our own session to Dbus.
        Parameters:
        _address - The address of the bus to connect to
        Returns:
        DBusConnection
        Throws:
        DBusException - If there is a problem connecting to the Bus.
      • getConnection

        public static DBusConnection getConnection​(String _address,
                                                   boolean _registerSelf,
                                                   boolean _shared)
                                            throws DBusException
        Connect to the BUS. If a connection already exists to the specified Bus and the shared-flag is true, a reference is returned. Will register our own session to DBus if registerSelf is true (default). A new connection is created every time if shared-flag is false.
        Parameters:
        _address - The address of the bus to connect to
        _registerSelf - register own session in dbus
        _shared - use a shared connections
        Returns:
        DBusConnection
        Throws:
        DBusException - If there is a problem connecting to the Bus.
      • getConnection

        public static DBusConnection getConnection​(String _address,
                                                   boolean _registerSelf,
                                                   boolean _shared,
                                                   int _timeout)
                                            throws DBusException
        Connect to the BUS. If a connection already exists to the specified Bus and the shared-flag is true, a reference is returned. Will register our own session to DBus if registerSelf is true (default). A new connection is created every time if shared-flag is false.
        Parameters:
        _address - The address of the bus to connect to
        _registerSelf - register own session in dbus
        _shared - use a shared connections
        _timeout - connect timeout if this is a TCP socket, 0 will block forever, if this is not a TCP socket this value is ignored
        Returns:
        DBusConnection
        Throws:
        DBusException - If there is a problem connecting to the Bus.
      • getConnection

        public static DBusConnection getConnection​(DBusConnection.DBusBusType _bustype,
                                                   boolean _shared,
                                                   int _timeout)
                                            throws DBusException
        Connect to the BUS. If a connection to the specified Bus already exists and shared-flag is true, a reference to it is returned. Otherwise a new connection will be created.
        Parameters:
        _bustype - The Bus to connect to.
        _shared - use shared connection
        _timeout - connect timeout if this is a TCP socket, 0 will block forever, if this is not a TCP socket this value is ignored
        Returns:
        DBusConnection
        Throws:
        DBusException - If there is a problem connecting to the Bus.
      • getDbusMachineId

        public static String getDbusMachineId()
                                       throws DBusException
        Extracts the machine-id usually found in /var/lib/dbus/machine-id. Use system variable DBUS_MACHINE_ID_LOCATION to use other location
        Returns:
        machine-id string, never null
        Throws:
        DBusException - if machine-id could not be found
      • releaseBusName

        public void releaseBusName​(String _busname)
                            throws DBusException
        Release a bus name. Releases the name so that other people can use it
        Parameters:
        _busname - The name to release. MUST be in dot-notation like "org.freedesktop.local"
        Throws:
        DBusException - If the busname is incorrectly formatted.
      • requestBusName

        public void requestBusName​(String _busname)
                            throws DBusException
        Request a bus name. Request the well known name that this should respond to on the Bus.
        Parameters:
        _busname - The name to respond to. MUST be in dot-notation like "org.freedesktop.local"
        Throws:
        DBusException - If the register name failed, or our name already exists on the bus. or if busname is incorrectly formatted.
      • getUniqueName

        public String getUniqueName()
        Returns the unique name of this connection.
        Returns:
        unique name
      • getNames

        public String[] getNames()
        Returns all the names owned by this connection.
        Returns:
        connection names
      • getPeerRemoteObject

        public DBusInterface getPeerRemoteObject​(String _busname,
                                                 String _objectpath)
                                          throws DBusException
        Return a reference to a remote object. This method will resolve the well known name (if given) to a unique bus name when you call it. This means that if a well known name is released by one process and acquired by another calls to objects gained from this method will continue to operate on the original process. This method will use bus introspection to determine the interfaces on a remote object and so may block and may fail. The resulting proxy object will, however, be castable to any interface it implements. It will also autostart the process if applicable. Also note that the resulting proxy may fail to execute the correct method with overloaded methods and that complex types may fail in interesting ways. Basically, if something odd happens, try specifying the interface explicitly.
        Parameters:
        _busname - The bus name to connect to. Usually a well known bus name in dot-notation (such as "org.freedesktop.local") or may be a DBus address such as ":1-16".
        _objectpath - The path on which the process is exporting the object.$
        Returns:
        A reference to a remote object.
        Throws:
        ClassCastException - If type is not a sub-type of DBusInterface
        DBusException - If busname or objectpath are incorrectly formatted.
      • getRemoteObject

        public DBusInterface getRemoteObject​(String _busname,
                                             String _objectpath)
                                      throws DBusException
        Return a reference to a remote object. This method will always refer to the well known name (if given) rather than resolving it to a unique bus name. In particular this means that if a process providing the well known name disappears and is taken over by another process proxy objects gained by this method will make calls on the new proccess. This method will use bus introspection to determine the interfaces on a remote object and so may block and may fail. The resulting proxy object will, however, be castable to any interface it implements. It will also autostart the process if applicable. Also note that the resulting proxy may fail to execute the correct method with overloaded methods and that complex types may fail in interesting ways. Basically, if something odd happens, try specifying the interface explicitly.
        Parameters:
        _busname - The bus name to connect to. Usually a well known bus name name in dot-notation (such as "org.freedesktop.local") or may be a DBus address such as ":1-16".
        _objectpath - The path on which the process is exporting the object.
        Returns:
        A reference to a remote object.
        Throws:
        ClassCastException - If type is not a sub-type of DBusInterface
        DBusException - If busname or objectpath are incorrectly formatted.
      • getPeerRemoteObject

        public <I extends DBusInterface> I getPeerRemoteObject​(String _busname,
                                                               String _objectpath,
                                                               Class<I> _type,
                                                               boolean _autostart)
                                                        throws DBusException
        Return a reference to a remote object. This method will resolve the well known name (if given) to a unique bus name when you call it. This means that if a well known name is released by one process and acquired by another calls to objects gained from this method will continue to operate on the original process.
        Type Parameters:
        I - class extending DBusInterface
        Parameters:
        _busname - The bus name to connect to. Usually a well known bus name in dot-notation (such as "org.freedesktop.local") or may be a DBus address such as ":1-16".
        _objectpath - The path on which the process is exporting the object.$
        _type - The interface they are exporting it on. This type must have the same full class name and exposed method signatures as the interface the remote object is exporting.
        _autostart - Disable/Enable auto-starting of services in response to calls on this object. Default is enabled; when calling a method with auto-start enabled, if the destination is a well-known name and is not owned the bus will attempt to start a process to take the name. When disabled an error is returned immediately.
        Returns:
        A reference to a remote object.
        Throws:
        ClassCastException - If type is not a sub-type of DBusInterface
        DBusException - If busname or objectpath are incorrectly formatted or type is not in a package.
      • getRemoteObject

        public <I extends DBusInterface> I getRemoteObject​(String _busname,
                                                           String _objectpath,
                                                           Class<I> _type)
                                                    throws DBusException
        Return a reference to a remote object. This method will always refer to the well known name (if given) rather than resolving it to a unique bus name. In particular this means that if a process providing the well known name disappears and is taken over by another process proxy objects gained by this method will make calls on the new proccess.
        Type Parameters:
        I - class extending DBusInterface
        Parameters:
        _busname - The bus name to connect to. Usually a well known bus name name in dot-notation (such as "org.freedesktop.local") or may be a DBus address such as ":1-16".
        _objectpath - The path on which the process is exporting the object.
        _type - The interface they are exporting it on. This type must have the same full class name and exposed method signatures as the interface the remote object is exporting.
        Returns:
        A reference to a remote object.
        Throws:
        ClassCastException - If type is not a sub-type of DBusInterface
        DBusException - If busname or objectpath are incorrectly formatted or type is not in a package.
      • getRemoteObject

        public <I extends DBusInterface> I getRemoteObject​(String _busname,
                                                           String _objectpath,
                                                           Class<I> _type,
                                                           boolean _autostart)
                                                    throws DBusException
        Return a reference to a remote object. This method will always refer to the well known name (if given) rather than resolving it to a unique bus name. In particular this means that if a process providing the well known name disappears and is taken over by another process proxy objects gained by this method will make calls on the new proccess.
        Type Parameters:
        I - class extending DBusInterface
        Parameters:
        _busname - The bus name to connect to. Usually a well known bus name name in dot-notation (such as "org.freedesktop.local") or may be a DBus address such as ":1-16".
        _objectpath - The path on which the process is exporting the object.
        _type - The interface they are exporting it on. This type must have the same full class name and exposed method signatures as the interface the remote object is exporting.
        _autostart - Disable/Enable auto-starting of services in response to calls on this object. Default is enabled; when calling a method with auto-start enabled, if the destination is a well-known name and is not owned the bus will attempt to start a process to take the name. When disabled an error is returned immediately.
        Returns:
        A reference to a remote object.
        Throws:
        ClassCastException - If type is not a sub-type of DBusInterface
        DBusException - If busname or objectpath are incorrectly formatted or type is not in a package.
      • removeSigHandler

        public <T extends DBusSignal> void removeSigHandler​(Class<T> _type,
                                                            String _source,
                                                            DBusSigHandler<T> _handler)
                                                     throws DBusException
        Remove a Signal Handler. Stops listening for this signal.
        Type Parameters:
        T - class extending DBusSignal
        Parameters:
        _type - The signal to watch for.
        _source - The source of the signal.
        _handler - the handler
        Throws:
        DBusException - If listening for the signal on the bus failed.
        ClassCastException - If type is not a sub-type of DBusSignal.
      • removeSigHandler

        public <T extends DBusSignal> void removeSigHandler​(Class<T> _type,
                                                            String _source,
                                                            DBusInterface _object,
                                                            DBusSigHandler<T> _handler)
                                                     throws DBusException
        Remove a Signal Handler. Stops listening for this signal.
        Type Parameters:
        T - class extending DBusSignal
        Parameters:
        _type - The signal to watch for.
        _source - The source of the signal.
        _object - The object emitting the signal.
        _handler - the handler
        Throws:
        DBusException - If listening for the signal on the bus failed.
        ClassCastException - If type is not a sub-type of DBusSignal.
      • addSigHandler

        public <T extends DBusSignal> void addSigHandler​(Class<T> _type,
                                                         String _source,
                                                         DBusSigHandler<T> _handler)
                                                  throws DBusException
        Add a Signal Handler. Adds a signal handler to call when a signal is received which matches the specified type, name and source.
        Type Parameters:
        T - class extending DBusSignal
        Parameters:
        _type - The signal to watch for.
        _source - The process which will send the signal. This MUST be a unique bus name and not a well known name.
        _handler - The handler to call when a signal is received.
        Throws:
        DBusException - If listening for the signal on the bus failed.
        ClassCastException - If type is not a sub-type of DBusSignal.
      • addSigHandler

        public <T extends DBusSignal> void addSigHandler​(Class<T> _type,
                                                         String _source,
                                                         DBusInterface _object,
                                                         DBusSigHandler<T> _handler)
                                                  throws DBusException
        Add a Signal Handler. Adds a signal handler to call when a signal is received which matches the specified type, name, source and object.
        Type Parameters:
        T - class extending DBusSignal
        Parameters:
        _type - The signal to watch for.
        _source - The process which will send the signal. This MUST be a unique bus name and not a well known name.
        _object - The object from which the signal will be emitted
        _handler - The handler to call when a signal is received.
        Throws:
        DBusException - If listening for the signal on the bus failed.
        ClassCastException - If type is not a sub-type of DBusSignal.
      • addSigHandler

        public <T extends DBusSignal> void addSigHandler​(DBusMatchRule _rule,
                                                         DBusSigHandler<T> _handler)
                                                  throws DBusException
        Add a signal handler with the given DBusMatchRule to DBus. The rule will be added to DBus if it was not added before. If the rule was already added, the signal handler is added to the internal map receiving the same signal as the first (and additional) handlers for this rule.
        Specified by:
        addSigHandler in class AbstractConnection
        Parameters:
        _rule - rule to add
        _handler - handler to use
        Throws:
        DBusException - on error
      • disconnect

        public void disconnect()
        Disconnect from the Bus. If this is a shared connection, it only disconnects when the last reference to the bus has called disconnect. If this is not a shared connection, disconnect will close the connection instantly.
        Overrides:
        disconnect in class AbstractConnection
      • addGenericSigHandler

        public void addGenericSigHandler​(DBusMatchRule _rule,
                                         DBusSigHandler<DBusSignal> _handler)
                                  throws DBusException
        Adds a DBusMatchRule to with a generic signal handler. Generic signal handlers allow receiving different signals with the same handler. If the rule was already added, the signal handler is added to the internal map receiving the same signal as the first (and additional) handlers for this rule.
        Specified by:
        addGenericSigHandler in class AbstractConnection
        Parameters:
        _rule - rule to add
        _handler - handler to use
        Throws:
        DBusException - on error