Class ServiceInfoImpl

java.lang.Object
javax.jmdns.ServiceInfo
javax.jmdns.impl.ServiceInfoImpl
All Implemented Interfaces:
Cloneable, DNSListener, DNSStatefulObject

public class ServiceInfoImpl extends ServiceInfo implements DNSListener, DNSStatefulObject
JmDNS service information.
  • Field Details

    • logger

      private static org.slf4j.Logger logger
    • _domain

      private String _domain
    • _protocol

      private String _protocol
    • _application

      private String _application
    • _name

      private String _name
    • _subtype

      private String _subtype
    • _server

      private String _server
    • _port

      private int _port
    • _weight

      private int _weight
    • _priority

      private int _priority
    • _text

      private byte[] _text
    • _props

      private Map<String,byte[]> _props
    • _ipv4Addresses

      private final Set<Inet4Address> _ipv4Addresses
    • _ipv6Addresses

      private final Set<Inet6Address> _ipv6Addresses
    • _key

      private transient String _key
    • _persistent

      private boolean _persistent
    • _needTextAnnouncing

      private boolean _needTextAnnouncing
    • _state

      private final ServiceInfoImpl.ServiceInfoState _state
    • _delegate

      private ServiceInfoImpl.Delegate _delegate
  • Constructor Details

  • Method Details

    • createQualifiedMap

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

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

      static String removeSeparators(String name)
    • getType

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

      public 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 String getName()
      Unqualified service instance name, such as foobar .
      Specified by:
      getName in class ServiceInfo
      Returns:
      service name
    • getKey

      public 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(String name)
      Sets the service instance name.
      Parameters:
      name - unqualified service instance name, such as foobar
    • getQualifiedName

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

      public 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:
    • 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:
    • setServer

      void setServer(String server)
      Parameters:
      server - the server to set
    • getHostAddress

      @Deprecated public 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:
    • getHostAddresses

      public 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(Inet4Address addr)
      Parameters:
      addr - the addr to add
    • addAddress

      void addAddress(Inet6Address addr)
      Parameters:
      addr - the addr to add
    • getAddress

      @Deprecated public InetAddress getAddress()
      Deprecated.
      Get the host address of the service.
      Specified by:
      getAddress in class ServiceInfo
      Returns:
      host Internet address
      See Also:
    • getInetAddress

      @Deprecated public 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:
    • getInet4Address

      @Deprecated public 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:
    • getInet6Address

      @Deprecated public 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:
    • getInetAddresses

      public 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 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 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
    • getPort

      public int getPort()
      Description copied from class: ServiceInfo
      Get the port for the service.
      Specified by:
      getPort in class ServiceInfo
      Returns:
      service port
      See Also:
    • getPriority

      public int getPriority()
      Description copied from class: ServiceInfo
      Get the priority of the service.
      Specified by:
      getPriority in class ServiceInfo
      Returns:
      service priority
      See Also:
    • getWeight

      public int getWeight()
      Description copied from class: ServiceInfo
      Get the weight of the service.
      Specified by:
      getWeight in class ServiceInfo
      Returns:
      service weight
      See Also:
    • getTextBytes

      public byte[] getTextBytes()
      Description copied from class: ServiceInfo
      Get the text for the service as raw bytes.
      Specified by:
      getTextBytes in class ServiceInfo
      Returns:
      raw service text
      See Also:
    • getTextString

      @Deprecated public String getTextString()
      Deprecated.
      Get the text for the service. This will interpret the text bytes as a UTF8 encoded string. Will return null if the bytes are not a valid UTF8 encoded string.
      Note: Do not use. This method make the assumption that the TXT record is one string. This is false. The TXT record is a series of key value pairs.
      Specified by:
      getTextString in class ServiceInfo
      Returns:
      service text
      See Also:
    • getURL

      @Deprecated public 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:
    • getURLs

      public 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 String getURL(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:
    • getURLs

      public String[] getURLs(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(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 String getPropertyString(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 Enumeration<String> getPropertyNames()
      Enumeration of the property names.
      Specified by:
      getPropertyNames in class ServiceInfo
      Returns:
      property name enumeration
    • getApplication

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

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

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

      public 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 Map<ServiceInfo.Fields,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

      Map<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:
    • 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:
    • 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 Object
    • equals

      public boolean equals(Object obj)
      Overrides:
      equals in class Object
    • getNiceTextString

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

      public ServiceInfoImpl clone()
      Overrides:
      clone in class ServiceInfo
    • toString

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

      public 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 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:
      IllegalStateException - if attempting to set the text for a non persistent service info.
    • setText

      public void setText(Map<String,?> props) throws 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:
      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)
    • getDns

      public JmDNSImpl getDns()
      Returns the DNS associated with this object.
      Specified by:
      getDns in interface DNSStatefulObject
      Returns:
      DNS resolver
    • 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
    • getDelegate

      Returns:
      the delegate
    • setDelegate

      void setDelegate(ServiceInfoImpl.Delegate delegate)
      Parameters:
      delegate - the delegate to set
    • 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