Class ServiceInfoImpl

    • Field Detail

      • logger

        private static org.slf4j.Logger logger
      • _domain

        private java.lang.String _domain
      • _protocol

        private java.lang.String _protocol
      • _application

        private java.lang.String _application
      • _name

        private java.lang.String _name
      • _subtype

        private java.lang.String _subtype
      • _server

        private java.lang.String _server
      • _port

        private int _port
      • _weight

        private int _weight
      • _priority

        private int _priority
      • _text

        private byte[] _text
      • _props

        private java.util.Map<java.lang.String,​byte[]> _props
      • _ipv4Addresses

        private final java.util.Set<java.net.Inet4Address> _ipv4Addresses
      • _ipv6Addresses

        private final java.util.Set<java.net.Inet6Address> _ipv6Addresses
      • _key

        private transient java.lang.String _key
      • _persistent

        private boolean _persistent
      • _needTextAnnouncing

        private boolean _needTextAnnouncing
    • Constructor Detail

      • ServiceInfoImpl

        public ServiceInfoImpl​(java.lang.String type,
                               java.lang.String name,
                               java.lang.String subtype,
                               int port,
                               int weight,
                               int priority,
                               boolean persistent,
                               java.lang.String text)
        Parameters:
        type -
        name -
        subtype -
        port -
        weight -
        priority -
        persistent -
        text -
        See Also:
        ServiceInfo.create(String, String, int, int, int, String)
      • ServiceInfoImpl

        public ServiceInfoImpl​(java.lang.String type,
                               java.lang.String name,
                               java.lang.String subtype,
                               int port,
                               int weight,
                               int priority,
                               boolean persistent,
                               java.util.Map<java.lang.String,​?> props)
        Parameters:
        type -
        name -
        subtype -
        port -
        weight -
        priority -
        persistent -
        props -
        See Also:
        ServiceInfo.create(String, String, int, int, int, Map)
      • ServiceInfoImpl

        public ServiceInfoImpl​(java.lang.String type,
                               java.lang.String name,
                               java.lang.String subtype,
                               int port,
                               int weight,
                               int priority,
                               boolean persistent,
                               byte[] text)
        Parameters:
        type -
        name -
        subtype -
        port -
        weight -
        priority -
        persistent -
        text -
        See Also:
        ServiceInfo.create(String, String, int, int, int, byte[])
      • ServiceInfoImpl

        public ServiceInfoImpl​(java.util.Map<ServiceInfo.Fields,​java.lang.String> qualifiedNameMap,
                               int port,
                               int weight,
                               int priority,
                               boolean persistent,
                               java.util.Map<java.lang.String,​?> props)
      • ServiceInfoImpl

        ServiceInfoImpl​(java.util.Map<ServiceInfo.Fields,​java.lang.String> qualifiedNameMap,
                        int port,
                        int weight,
                        int priority,
                        boolean persistent,
                        java.lang.String text)
      • ServiceInfoImpl

        ServiceInfoImpl​(java.util.Map<ServiceInfo.Fields,​java.lang.String> qualifiedNameMap,
                        int port,
                        int weight,
                        int priority,
                        boolean persistent,
                        byte[] text)
      • ServiceInfoImpl

        ServiceInfoImpl​(ServiceInfo info)
        During recovery we need to duplicate service info to reregister them
        Parameters:
        info -
    • Method Detail

      • createQualifiedMap

        static java.util.Map<ServiceInfo.Fields,​java.lang.String> createQualifiedMap​(java.lang.String instance,
                                                                                           java.lang.String application,
                                                                                           java.lang.String protocol,
                                                                                           java.lang.String domain,
                                                                                           java.lang.String subtype)
      • checkQualifiedNameMap

        protected static java.util.Map<ServiceInfo.Fields,​java.lang.String> checkQualifiedNameMap​(java.util.Map<ServiceInfo.Fields,​java.lang.String> qualifiedNameMap)
      • removeSeparators

        static java.lang.String removeSeparators​(java.lang.String name)
      • getType

        public java.lang.String getType()
        Fully qualified service type name, such as _http._tcp.local.
        Specified by:
        getType in class ServiceInfo
        Returns:
        service type name
      • getTypeWithSubtype

        public java.lang.String getTypeWithSubtype()
        Fully qualified service type name with the subtype if appropriate, such as _printer._sub._http._tcp.local.
        Specified by:
        getTypeWithSubtype in class ServiceInfo
        Returns:
        service type name
      • getName

        public java.lang.String getName()
        Unqualified service instance name, such as foobar .
        Specified by:
        getName in class ServiceInfo
        Returns:
        service name
      • getKey

        public java.lang.String getKey()
        The key is used to retrieve service info in hash tables.
        The key is the lower case qualified name.
        Specified by:
        getKey in class ServiceInfo
        Returns:
        the key
      • setName

        void setName​(java.lang.String name)
        Sets the service instance name.
        Parameters:
        name - unqualified service instance name, such as foobar
      • getQualifiedName

        public java.lang.String getQualifiedName()
        Fully qualified service name, such as foobar._http._tcp.local. .
        Specified by:
        getQualifiedName in class ServiceInfo
        Returns:
        qualified service name
      • getServer

        public java.lang.String getServer()
        Description copied from class: ServiceInfo
        Get the name of the server. Note: This will be an empty string if no value has been set
        Specified by:
        getServer in class ServiceInfo
        Returns:
        server name
        See Also:
        ServiceInfo.getServer()
      • hasServer

        public boolean hasServer()
        Description copied from class: ServiceInfo
        Returns true if the service info has a server
        Specified by:
        hasServer in class ServiceInfo
        Returns:
        true if the service info has a server specified, false otherwise.
        See Also:
        ServiceInfo.hasServer()
      • setServer

        void setServer​(java.lang.String server)
        Parameters:
        server - the server to set
      • getHostAddress

        @Deprecated
        public java.lang.String getHostAddress()
        Deprecated.
        Returns the host IP address string in textual presentation.
        Note: This can be either an IPv4 or an IPv6 representation.
        Specified by:
        getHostAddress in class ServiceInfo
        Returns:
        the host raw IP address in a string format.
        See Also:
        ServiceInfo.getHostAddresses()
      • getHostAddresses

        public java.lang.String[] getHostAddresses()
        Returns the host IP addresses string in textual presentation.
        Specified by:
        getHostAddresses in class ServiceInfo
        Returns:
        list of host raw IP address in a string format.
      • addAddress

        void addAddress​(java.net.Inet4Address addr)
        Parameters:
        addr - the addr to add
      • addAddress

        void addAddress​(java.net.Inet6Address addr)
        Parameters:
        addr - the addr to add
      • getInetAddress

        @Deprecated
        public java.net.InetAddress getInetAddress()
        Deprecated.
        Get the InetAddress of the service. This will return the IPv4 if it exist, otherwise it return the IPv6 if set.
        Note: This return null if the service IP address cannot be resolved.
        Specified by:
        getInetAddress in class ServiceInfo
        Returns:
        Internet address
        See Also:
        ServiceInfo.getInetAddresses()
      • getInet4Address

        @Deprecated
        public java.net.Inet4Address getInet4Address()
        Deprecated.
        Get the IPv4 InetAddress of the service.
        Note: This return null if the service IPv4 address cannot be resolved.
        Specified by:
        getInet4Address in class ServiceInfo
        Returns:
        Internet address
        See Also:
        ServiceInfo.getInet4Addresses()
      • getInet6Address

        @Deprecated
        public java.net.Inet6Address getInet6Address()
        Deprecated.
        Get the IPv6 InetAddress of the service.
        Note: This return null if the service IPv6 address cannot be resolved.
        Specified by:
        getInet6Address in class ServiceInfo
        Returns:
        Internet address
        See Also:
        ServiceInfo.getInet6Addresses()
      • getInetAddresses

        public java.net.InetAddress[] getInetAddresses()
        Description copied from class: ServiceInfo
        Returns a list of all InetAddresses that can be used for this service.

        In a multi-homed environment service info can be associated with more than one address.

        Specified by:
        getInetAddresses in class ServiceInfo
        Returns:
        list of InetAddress objects
      • getInet4Addresses

        public java.net.Inet4Address[] getInet4Addresses()
        Description copied from class: ServiceInfo
        Returns a list of all IPv4 InetAddresses that can be used for this service.

        In a multi-homed environment service info can be associated with more than one address.

        Specified by:
        getInet4Addresses in class ServiceInfo
        Returns:
        list of InetAddress objects
      • getInet6Addresses

        public java.net.Inet6Address[] getInet6Addresses()
        Description copied from class: ServiceInfo
        Returns a list of all IPv6 InetAddresses that can be used for this service.

        In a multi-homed environment service info can be associated with more than one address.

        Specified by:
        getInet6Addresses in class ServiceInfo
        Returns:
        list of InetAddress objects
      • getURL

        @Deprecated
        public java.lang.String getURL()
        Deprecated.
        Description copied from class: ServiceInfo
        Get the URL for this service. An http URL is created by combining the address, port, and path properties.
        Specified by:
        getURL in class ServiceInfo
        Returns:
        service URL
        See Also:
        ServiceInfo.getURLs()
      • getURLs

        public java.lang.String[] getURLs()
        Description copied from class: ServiceInfo
        Get the list of URL for this service. An http URL is created by combining the address, port, and path properties.
        Specified by:
        getURLs in class ServiceInfo
        Returns:
        list of service URL
      • getURL

        @Deprecated
        public java.lang.String getURL​(java.lang.String protocol)
        Deprecated.
        Description copied from class: ServiceInfo
        Get the URL for this service. An URL is created by combining the protocol, address, port, and path properties.
        Specified by:
        getURL in class ServiceInfo
        Parameters:
        protocol - requested protocol
        Returns:
        service URL
        See Also:
        ServiceInfo.getURLs()
      • getURLs

        public java.lang.String[] getURLs​(java.lang.String protocol)
        Description copied from class: ServiceInfo
        Get the list of URL for this service. An URL is created by combining the protocol, address, port, and path properties.
        Specified by:
        getURLs in class ServiceInfo
        Parameters:
        protocol - requested protocol
        Returns:
        list of service URL
      • getPropertyBytes

        public byte[] getPropertyBytes​(java.lang.String name)
        Get a property of the service. This involves decoding the text bytes into a property list. Returns null if the property is not found or the text data could not be decoded correctly.
        Specified by:
        getPropertyBytes in class ServiceInfo
        Parameters:
        name - property name
        Returns:
        raw property text
      • getPropertyString

        public java.lang.String getPropertyString​(java.lang.String name)
        Get a property of the service. This involves decoding the text bytes into a property list. Returns null if the property is not found, the text data could not be decoded correctly, or the resulting bytes are not a valid UTF8 string.
        Specified by:
        getPropertyString in class ServiceInfo
        Parameters:
        name - property name
        Returns:
        property text
      • getPropertyNames

        public java.util.Enumeration<java.lang.String> getPropertyNames()
        Enumeration of the property names.
        Specified by:
        getPropertyNames in class ServiceInfo
        Returns:
        property name enumeration
      • getApplication

        public java.lang.String getApplication()
        Returns the application of the service info suitable for printing.
        Specified by:
        getApplication in class ServiceInfo
        Returns:
        service application
      • getDomain

        public java.lang.String getDomain()
        Returns the domain of the service info suitable for printing.
        Specified by:
        getDomain in class ServiceInfo
        Returns:
        service domain
      • getProtocol

        public java.lang.String getProtocol()
        Returns the protocol of the service info suitable for printing.
        Specified by:
        getProtocol in class ServiceInfo
        Returns:
        service protocol
      • getSubtype

        public java.lang.String getSubtype()
        Returns the sub type of the service info suitable for printing.
        Specified by:
        getSubtype in class ServiceInfo
        Returns:
        service sub type
      • getQualifiedNameMap

        public java.util.Map<ServiceInfo.Fields,​java.lang.String> getQualifiedNameMap()
        Returns a dictionary of the fully qualified name component of this service.
        Specified by:
        getQualifiedNameMap in class ServiceInfo
        Returns:
        dictionary of the fully qualified name components
      • getProperties

        java.util.Map<java.lang.String,​byte[]> getProperties()
      • updateRecord

        public void updateRecord​(DNSCache dnsCache,
                                 long now,
                                 DNSEntry dnsEntry)
        JmDNS callback to update a DNS record.
        Specified by:
        updateRecord in interface DNSListener
        Parameters:
        dnsCache -
        now -
        dnsEntry -
      • handleExpiredRecord

        private boolean handleExpiredRecord​(DNSRecord record)
        Handles expired records insofar that it removes their content from this service. Implementation note:
        Currently only expired A and AAAA records are handled.
        Parameters:
        record - to check for data to be removed
        Returns:
        true if data from the expired record could be removed from this service, false otherwise
      • handleUpdateRecord

        private boolean handleUpdateRecord​(DNSCache dnsCache,
                                           long now,
                                           DNSRecord record)
        Adds data of DNSRecord to the internal service representation.
        Parameters:
        dnsCache -
        now -
        record - to get data from
        Returns:
        true if service was updated, false otherwise
      • hasData

        public boolean hasData()
        Returns true if the service info is filled with data.
        Specified by:
        hasData in class ServiceInfo
        Returns:
        true if the service info has data, false otherwise.
      • hasInetAddress

        private final boolean hasInetAddress()
      • advanceState

        public boolean advanceState​(DNSTask task)
        Sets the state and notifies all objects that wait on the ServiceInfo.
        Specified by:
        advanceState in interface DNSStatefulObject
        Parameters:
        task - associated task
        Returns:
        true if the state was changed by this thread, false otherwise.
        See Also:
        DNSState.advance()
      • revertState

        public boolean revertState()
        Sets the state and notifies all objects that wait on the ServiceInfo.
        Specified by:
        revertState in interface DNSStatefulObject
        Returns:
        true if the state was changed by this thread, false otherwise.
        See Also:
        DNSState.revert()
      • cancelState

        public boolean cancelState()
        Sets the state and notifies all objects that wait on the ServiceInfo.
        Specified by:
        cancelState in interface DNSStatefulObject
        Returns:
        true if the state was changed by this thread, false otherwise.
      • closeState

        public boolean closeState()
        Sets the state and notifies all objects that wait on the ServiceInfo.
        Specified by:
        closeState in interface DNSStatefulObject
        Returns:
        true if the state was changed by this thread, false otherwise.
      • recoverState

        public boolean recoverState()
        Sets the state and notifies all objects that wait on the ServiceInfo.
        Specified by:
        recoverState in interface DNSStatefulObject
        Returns:
        true if the state was changed by this thread, false otherwise.
      • removeAssociationWithTask

        public void removeAssociationWithTask​(DNSTask task)
        Remove the association of the task with this Object.
        Specified by:
        removeAssociationWithTask in interface DNSStatefulObject
        Parameters:
        task - associated task
      • associateWithTask

        public void associateWithTask​(DNSTask task,
                                      DNSState state)
        Sets the task associated with this Object.
        Specified by:
        associateWithTask in interface DNSStatefulObject
        Parameters:
        task - associated task
        state - state of the task
      • isAssociatedWithTask

        public boolean isAssociatedWithTask​(DNSTask task,
                                            DNSState state)
        Checks if this object is associated with the task and in the same state.
        Specified by:
        isAssociatedWithTask in interface DNSStatefulObject
        Parameters:
        task - associated task
        state - state of the task
        Returns:
        true is the task is associated with this object, false otherwise.
      • isProbing

        public boolean isProbing()
        Returns true, if this is a probing state.
        Specified by:
        isProbing in interface DNSStatefulObject
        Returns:
        true if probing state, false otherwise
      • isAnnouncing

        public boolean isAnnouncing()
        Returns true, if this is an announcing state.
        Specified by:
        isAnnouncing in interface DNSStatefulObject
        Returns:
        true if announcing state, false otherwise
      • isAnnounced

        public boolean isAnnounced()
        Returns true, if this is an announced state.
        Specified by:
        isAnnounced in interface DNSStatefulObject
        Returns:
        true if announced state, false otherwise
      • isCanceling

        public boolean isCanceling()
        Returns true, if this is a canceling state.
        Specified by:
        isCanceling in interface DNSStatefulObject
        Returns:
        true if canceling state, false otherwise
      • isCanceled

        public boolean isCanceled()
        Returns true, if this is a canceled state.
        Specified by:
        isCanceled in interface DNSStatefulObject
        Returns:
        true if canceled state, false otherwise
      • isClosing

        public boolean isClosing()
        Returns true, if this is a closing state.
        Specified by:
        isClosing in interface DNSStatefulObject
        Returns:
        true if closing state, false otherwise
      • isClosed

        public boolean isClosed()
        Returns true, if this is a closed state.
        Specified by:
        isClosed in interface DNSStatefulObject
        Returns:
        true if closed state, false otherwise
      • waitForAnnounced

        public boolean waitForAnnounced​(long timeout)
        Waits for the object to be announced.
        Specified by:
        waitForAnnounced in interface DNSStatefulObject
        Parameters:
        timeout - the maximum time to wait in milliseconds.
        Returns:
        true if the object is announced, false otherwise
      • waitForCanceled

        public boolean waitForCanceled​(long timeout)
        Waits for the object to be canceled.
        Specified by:
        waitForCanceled in interface DNSStatefulObject
        Parameters:
        timeout - the maximum time to wait in milliseconds.
        Returns:
        true if the object is canceled, false otherwise
      • hashCode

        public int hashCode()
        Overrides:
        hashCode in class java.lang.Object
      • equals

        public boolean equals​(java.lang.Object obj)
        Overrides:
        equals in class java.lang.Object
      • getNiceTextString

        public java.lang.String getNiceTextString()
        Returns a description of the service info suitable for printing.
        Specified by:
        getNiceTextString in class ServiceInfo
        Returns:
        service info description
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object
      • answers

        public java.util.Collection<DNSRecord> answers​(DNSRecordClass recordClass,
                                                       boolean unique,
                                                       int ttl,
                                                       HostInfo localHost)
        Create a series of answer that correspond with the give service info.
        Parameters:
        recordClass - record class of the query
        unique -
        ttl -
        localHost -
        Returns:
        collection of answers
      • setText

        public void setText​(byte[] text)
                     throws java.lang.IllegalStateException
        Set the text for the service. Setting the text will fore a re-announce of the service.
        Specified by:
        setText in class ServiceInfo
        Parameters:
        text - the raw byte representation of the text field.
        Throws:
        java.lang.IllegalStateException - if attempting to set the text for a non persistent service info.
      • setText

        public void setText​(java.util.Map<java.lang.String,​?> props)
                     throws java.lang.IllegalStateException
        Set the text for the service. Setting the text will fore a re-announce of the service.
        Specified by:
        setText in class ServiceInfo
        Parameters:
        props - a key=value map that will be encoded into raw bytes.
        Throws:
        java.lang.IllegalStateException - if attempting to set the text for a non persistent service info.
      • _setText

        void _setText​(byte[] text)
        This is used internally by the framework
        Parameters:
        text -
      • setDns

        public void setDns​(JmDNSImpl dns)
      • isPersistent

        public boolean isPersistent()
        Returns true if ServiceListener.resolveService will be called whenever new new information is received.
        Specified by:
        isPersistent in class ServiceInfo
        Returns:
        the persistent
      • setNeedTextAnnouncing

        public void setNeedTextAnnouncing​(boolean needTextAnnouncing)
        Parameters:
        needTextAnnouncing - the needTextAnnouncing to set
      • needTextAnnouncing

        public boolean needTextAnnouncing()
        Returns:
        the needTextAnnouncing
      • hasSameAddresses

        public boolean hasSameAddresses​(ServiceInfo other)
        Description copied from class: ServiceInfo
        Compare addresses of another ServiceInfo
        Specified by:
        hasSameAddresses in class ServiceInfo
        Parameters:
        other - ServiceInfo to compare
        Returns:
        true if addresses are the same, false if not