Class JmDNSImpl

java.lang.Object
javax.jmdns.JmDNS
javax.jmdns.impl.JmDNSImpl
All Implemented Interfaces:
Closeable, AutoCloseable, DNSStatefulObject, DNSTaskStarter

public class JmDNSImpl extends JmDNS implements DNSStatefulObject, DNSTaskStarter
mDNS implementation in Java.
  • Field Details

    • logger

      private static org.slf4j.Logger logger
    • _group

      private volatile InetAddress _group
      This is the multicast group, we are listening to for multicast DNS messages.
    • _socket

      private volatile MulticastSocket _socket
      This is our multicast socket.
    • _listeners

      private final List<DNSListener> _listeners
      Holds instances of JmDNS.DNSListener. Must by a synchronized collection, because it is updated from concurrent threads.
    • _serviceListeners

      Holds instances of ServiceListener's. Keys are Strings holding a fully qualified service type. Values are LinkedList's of ServiceListener's.
    • _typeListeners

      private final Set<ListenerStatus.ServiceTypeListenerStatus> _typeListeners
      Holds instances of ServiceTypeListener's.
    • _cache

      private final DNSCache _cache
      Cache for DNSEntry's.
    • _services

      private final ConcurrentMap<String,ServiceInfo> _services
      This hashtable holds the services that have been registered. Keys are instances of String which hold an all lower-case version of the fully qualified service name. Values are instances of ServiceInfo.
    • _serviceTypes

      private final ConcurrentMap<String,JmDNSImpl.ServiceTypeEntry> _serviceTypes
      This hashtable holds the service types that have been registered or that have been received in an incoming datagram.
      Keys are instances of String which hold an all lower-case version of the fully qualified service type.
      Values hold the fully qualified service type.
    • _delegate

      private volatile JmDNS.Delegate _delegate
    • _threadSleepDurationMs

      protected final long _threadSleepDurationMs
    • _shutdown

      protected Thread _shutdown
      This is the shutdown hook, we registered with the java runtime.
    • _localHost

      private HostInfo _localHost
      Handle on the local host
    • _incomingListener

      private Thread _incomingListener
    • _throttle

      private int _throttle
      Throttle count. This is used to count the overall number of probes sent by JmDNS. When the last throttle increment happened .
    • _lastThrottleIncrement

      private long _lastThrottleIncrement
      Last throttle increment.
    • _executor

      private final ExecutorService _executor
    • _random

      private static final Random _random
      The source for random values. This is used to introduce random delays in responses. This reduces the potential for collisions on the network.
    • _ioLock

      private final ReentrantLock _ioLock
      This lock is used to coordinate processing of incoming and outgoing messages. This is needed, because the Rendezvous Conformance Test does not forgive race conditions.
    • _plannedAnswer

      private DNSIncoming _plannedAnswer
      If an incoming package which needs an answer is truncated, we store it here. We add more incoming DNSRecords to it, until the JmDNS.Responder timer picks it up.
      FIXME [PJYF June 8 2010]: This does not work well with multiple planned answers for packages that came in from different clients.
    • _serviceCollectors

      private final ConcurrentMap<String,JmDNSImpl.ServiceCollector> _serviceCollectors
      This hashtable is used to maintain a list of service types being collected by this JmDNS instance. The key of the hashtable is a service type name, the value is an instance of JmDNS.ServiceCollector.
      See Also:
    • _name

      private final String _name
    • _recoverLock

      private final Object _recoverLock
  • Constructor Details

    • JmDNSImpl

      public JmDNSImpl(InetAddress address, String name) throws IOException
      Create an instance of JmDNS and bind it to a specific network interface given its IP-address.
      Parameters:
      address - IP address to bind to.
      name - name of the newly created JmDNS
      Throws:
      IOException
    • JmDNSImpl

      public JmDNSImpl(InetAddress address, String name, long threadSleepDurationMs) throws IOException
      Create an instance of JmDNS and bind it to a specific network interface given its IP-address.
      Parameters:
      address - IP address to bind to.
      name - name of the newly created JmDNS
      threadSleepDurationMs - time in milliseconds that the JmDNS listener thread should sleep between multicast receives
      Throws:
      IOException
  • Method Details

    • main

      public static void main(String[] argv)
      Main method to display API information if run from java -jar
      Parameters:
      argv - the command line arguments
    • start

      private void start(Collection<? extends ServiceInfo> serviceInfos)
    • openMulticastSocket

      private void openMulticastSocket(HostInfo hostInfo) throws IOException
      Throws:
      IOException
    • closeMulticastSocket

      private void closeMulticastSocket()
    • 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.
    • getDns

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

      public DNSCache getCache()
      Return the DNSCache associated with the cache variable
      Returns:
      DNS cache
    • getName

      public String getName()
      Return the name of the JmDNS instance. This is an arbitrary string that is useful for distinguishing instances.
      Specified by:
      getName in class JmDNS
      Returns:
      name of the JmDNS
    • getHostName

      public String getHostName()
      Return the HostName associated with this JmDNS instance. Note: May not be the same as what started. The host name is subject to negotiation.
      Specified by:
      getHostName in class JmDNS
      Returns:
      Host name
    • getLocalHost

      public HostInfo getLocalHost()
      Returns the local host info
      Returns:
      local host info
    • getInetAddress

      public InetAddress getInetAddress() throws IOException
      Return the address of the interface to which this instance of JmDNS is bound.
      Specified by:
      getInetAddress in class JmDNS
      Returns:
      Internet Address
      Throws:
      IOException - if there is an error in the underlying protocol, such as a TCP error.
    • getInterface

      @Deprecated public InetAddress getInterface() throws IOException
      Deprecated.
      Return the address of the interface to which this instance of JmDNS is bound.
      Specified by:
      getInterface in class JmDNS
      Returns:
      Internet Address
      Throws:
      IOException - if there is an error in the underlying protocol, such as a TCP error.
    • getServiceInfo

      public ServiceInfo getServiceInfo(String type, String name)
      Get service information. If the information is not cached, the method will block until updated information is received.

      Usage note: Do not call this method from the AWT event dispatcher thread. You will make the user interface unresponsive.

      Specified by:
      getServiceInfo in class JmDNS
      Parameters:
      type - fully qualified service type, such as _http._tcp.local. .
      name - unqualified service name, such as foobar .
      Returns:
      null if the service information cannot be obtained
    • getServiceInfo

      public ServiceInfo getServiceInfo(String type, String name, long timeout)
      Get service information. If the information is not cached, the method will block for the given timeout until updated information is received.

      Usage note: If you call this method from the AWT event dispatcher thread, use a small timeout, or you will make the user interface unresponsive.

      Specified by:
      getServiceInfo in class JmDNS
      Parameters:
      type - full qualified service type, such as _http._tcp.local. .
      name - unqualified service name, such as foobar .
      timeout - timeout in milliseconds. Typical timeout should be 5s.
      Returns:
      null if the service information cannot be obtained
    • getServiceInfo

      public ServiceInfo getServiceInfo(String type, String name, boolean persistent)
      Get service information. If the information is not cached, the method will block until updated information is received.

      Usage note: Do not call this method from the AWT event dispatcher thread. You will make the user interface unresponsive.

      Specified by:
      getServiceInfo in class JmDNS
      Parameters:
      type - fully qualified service type, such as _http._tcp.local. .
      name - unqualified service name, such as foobar .
      persistent - if true ServiceListener.resolveService will be called whenever new new information is received.
      Returns:
      null if the service information cannot be obtained
    • getServiceInfo

      public ServiceInfo getServiceInfo(String type, String name, boolean persistent, long timeout)
      Get service information. If the information is not cached, the method will block for the given timeout until updated information is received.

      Usage note: If you call this method from the AWT event dispatcher thread, use a small timeout, or you will make the user interface unresponsive.

      Specified by:
      getServiceInfo in class JmDNS
      Parameters:
      type - full qualified service type, such as _http._tcp.local. .
      name - unqualified service name, such as foobar .
      persistent - if true ServiceListener.resolveService will be called whenever new new information is received.
      timeout - timeout in milliseconds. Typical timeout should be 5s.
      Returns:
      null if the service information cannot be obtained
    • resolveServiceInfo

      ServiceInfoImpl resolveServiceInfo(String type, String name, String subtype, boolean persistent)
    • getServiceInfoFromCache

      ServiceInfoImpl getServiceInfoFromCache(String type, String name, String subtype, boolean persistent)
    • waitForInfoData

      private void waitForInfoData(ServiceInfo info, long timeout)
    • requestServiceInfo

      public void requestServiceInfo(String type, String name)
      Request service information. The information about the service is requested and the ServiceListener.resolveService method is called as soon as it is available.

      Usage note: Do not call this method from the AWT event dispatcher thread. You will make the user interface unresponsive.

      Specified by:
      requestServiceInfo in class JmDNS
      Parameters:
      type - full qualified service type, such as _http._tcp.local. .
      name - unqualified service name, such as foobar .
    • requestServiceInfo

      public void requestServiceInfo(String type, String name, boolean persistent)
      Request service information. The information about the service is requested and the ServiceListener.resolveService method is called as soon as it is available.

      Usage note: Do not call this method from the AWT event dispatcher thread. You will make the user interface unresponsive.

      Specified by:
      requestServiceInfo in class JmDNS
      Parameters:
      type - full qualified service type, such as _http._tcp.local. .
      name - unqualified service name, such as foobar .
      persistent - if true ServiceListener.resolveService will be called whenever new new information is received.
    • requestServiceInfo

      public void requestServiceInfo(String type, String name, long timeout)
      Request service information. The information about the service is requested and the ServiceListener.resolveService method is called as soon as it is available.
      Specified by:
      requestServiceInfo in class JmDNS
      Parameters:
      type - full qualified service type, such as _http._tcp.local. .
      name - unqualified service name, such as foobar .
      timeout - timeout in milliseconds
    • requestServiceInfo

      public void requestServiceInfo(String type, String name, boolean persistent, long timeout)
      Request service information. The information about the service is requested and the ServiceListener.resolveService method is called as soon as it is available.
      Specified by:
      requestServiceInfo in class JmDNS
      Parameters:
      type - full qualified service type, such as _http._tcp.local. .
      name - unqualified service name, such as foobar .
      persistent - if true ServiceListener.resolveService will be called whenever new new information is received.
      timeout - timeout in milliseconds
    • handleServiceResolved

      void handleServiceResolved(ServiceEvent event)
    • addServiceTypeListener

      public void addServiceTypeListener(ServiceTypeListener listener) throws IOException
      Listen for service types.
      Specified by:
      addServiceTypeListener in class JmDNS
      Parameters:
      listener - listener for service types
      Throws:
      IOException - if there is an error in the underlying protocol, such as a TCP error.
    • removeServiceTypeListener

      public void removeServiceTypeListener(ServiceTypeListener listener)
      Remove listener for service types.
      Specified by:
      removeServiceTypeListener in class JmDNS
      Parameters:
      listener - listener for service types
    • addServiceListener

      public void addServiceListener(String type, ServiceListener listener)
      Listen for services of a given type. The type has to be a fully qualified type name such as _http._tcp.local..
      Specified by:
      addServiceListener in class JmDNS
      Parameters:
      type - full qualified service type, such as _http._tcp.local..
      listener - listener for service updates
    • addServiceListener

      private void addServiceListener(String type, ServiceListener listener, boolean synch)
    • removeServiceListener

      public void removeServiceListener(String type, ServiceListener listener)
      Remove listener for services of a given type.
      Specified by:
      removeServiceListener in class JmDNS
      Parameters:
      type - full qualified service type, such as _http._tcp.local..
      listener - listener for service updates
    • registerService

      public void registerService(ServiceInfo infoAbstract) throws IOException
      Register a service. The service is registered for access by other jmdns clients. The name of the service may be changed to make it unique.
      Note that the given ServiceInfo is bound to this JmDNS instance, and should not be reused for any other JmDNS.registerService(ServiceInfo).
      Specified by:
      registerService in class JmDNS
      Parameters:
      infoAbstract - service info to register
      Throws:
      IOException - if there is an error in the underlying protocol, such as a TCP error.
    • unregisterService

      public void unregisterService(ServiceInfo infoAbstract)
      Unregister a service. The service should have been registered.

      Note: Unregistered services will not disappear form the list of services immediately. According to the specification, when unregistering services we send goodbye packets and then wait 1s before purging the cache.
      This is support for shared records that can be rescued by some other cooperation DNS.

       Clients receiving a Multicast DNS Response with a TTL of zero SHOULD NOT immediately delete the record from the cache, but instead record a TTL of 1 and then delete the record one second later.
       

      Specified by:
      unregisterService in class JmDNS
      Parameters:
      infoAbstract - service info to remove
    • unregisterAllServices

      public void unregisterAllServices()
      Unregister all services.
      Specified by:
      unregisterAllServices in class JmDNS
    • registerServiceType

      public boolean registerServiceType(String type)
      Register a service type. If this service type was not already known, all service listeners will be notified of the new service type.

      Service types are automatically registered as they are discovered.

      Specified by:
      registerServiceType in class JmDNS
      Parameters:
      type - full qualified service type, such as _http._tcp.local..
      Returns:
      true if the type or subtype was added, false if the type was already registered.
    • makeServiceNameUnique

      private boolean makeServiceNameUnique(ServiceInfoImpl info)
      Generate a possibly unique name for a service using the information we have in the cache.
      Returns:
      returns true, if the name of the service info had to be changed.
    • addListener

      public void addListener(DNSListener listener, DNSQuestion question)
      Add a listener for a question. The listener will receive updates of answers to the question as they arrive, or from the cache if they are already available.
      Parameters:
      listener - DSN listener
      question - DNS query
    • removeListener

      public void removeListener(DNSListener listener)
      Remove a listener from all outstanding questions. The listener will no longer receive any updates.
      Parameters:
      listener - DSN listener
    • renewServiceCollector

      public void renewServiceCollector(String type)
      Renew a service when the record become stale. If there is no service collector for the type this method does nothing.
      Parameters:
      type - Service Type
    • updateRecord

      public void updateRecord(long now, DNSRecord rec, JmDNSImpl.Operation operation)
      Notify all listeners that a record was updated.
      Parameters:
      now - update date
      rec - DNS record
      operation - DNS cache operation
    • removeObsoleteDnsListener

      private void removeObsoleteDnsListener(ServiceEvent event)
    • handleRecord

      void handleRecord(DNSRecord record, long now)
    • isOlderThanOneSecond

      private boolean isOlderThanOneSecond(DNSRecord dnsRecord, long timeToCompare)
      Parameters:
      dnsRecord -
      timeToCompare - a given times for comparison
      Returns:
      true if dnsRecord create time is older than 1 second, relative to the given time; false otherwise
    • handleResponse

      void handleResponse(DNSIncoming msg) throws IOException
      Handle an incoming response. Cache answers, and pass them on to the appropriate questions.
      Throws:
      IOException
    • aRecordsLast

      private List<DNSRecord> aRecordsLast(List<DNSRecord> allAnswers)
      In case the a record is received before the srv record the ip address would not be set.

      Wireshark record: see also file a_record_before_srv.pcapng and

      invalid reference
      ServiceInfoImplTest#test_ip_address_is_set()

      Multicast Domain Name System (response) Transaction ID: 0x0000 Flags: 0x8400 Standard query response, No error Questions: 0 Answer RRs: 2 Authority RRs: 0 Additional RRs: 8 Answers _ibisip_http._tcp.local: type PTR, class IN, DeviceManagementService._ibisip_http._tcp.local _ibisip_http._tcp.local: type PTR, class IN, PassengerCountingService._ibisip_http._tcp.local Additional records DeviceManagementService._ibisip_http._tcp.local: type TXT, class IN, cache flush PassengerCountingService._ibisip_http._tcp.local: type TXT, class IN, cache flush DIST500_7-F07_OC030_05_03941.local: type A, class IN, cache flush, addr 192.168.88.236 DeviceManagementService._ibisip_http._tcp.local: type SRV, class IN, cache flush, priority 0, weight 0, port 5000, target DIST500_7-F07_OC030_05_03941.local PassengerCountingService._ibisip_http._tcp.local: type SRV, class IN, cache flush, priority 0, weight 0, port 5001, target DIST500_7-F07_OC030_05_03941.local DeviceManagementService._ibisip_http._tcp.local: type NSEC, class IN, cache flush, next domain name DeviceManagementService._ibisip_http._tcp.local PassengerCountingService._ibisip_http._tcp.local: type NSEC, class IN, cache flush, next domain name PassengerCountingService._ibisip_http._tcp.local DIST500_7-F07_OC030_05_03941.local: type NSEC, class IN, cache flush, next domain name DIST500_7-F07_OC030_05_03941.local

    • handleQuery

      void handleQuery(DNSIncoming in, InetAddress addr, int port) throws IOException
      Handle an incoming query. See if we can answer any part of it given our service infos.
      Parameters:
      in -
      addr -
      port -
      Throws:
      IOException
    • respondToQuery

      public void respondToQuery(DNSIncoming in)
    • addAnswer

      public DNSOutgoing addAnswer(DNSIncoming in, InetAddress addr, int port, DNSOutgoing out, DNSRecord rec) throws IOException
      Add an answer to a question. Deal with the case when the outgoing packet overflows
      Parameters:
      in -
      addr -
      port -
      out -
      rec -
      Returns:
      outgoing answer
      Throws:
      IOException
    • send

      public void send(DNSOutgoing out) throws IOException
      Send an outgoing multicast DNS message.
      Parameters:
      out -
      Throws:
      IOException
    • purgeTimer

      public void purgeTimer()
      Description copied from interface: DNSTaskStarter
      Purge the general task timer
      Specified by:
      purgeTimer in interface DNSTaskStarter
    • purgeStateTimer

      public void purgeStateTimer()
      Description copied from interface: DNSTaskStarter
      Purge the state task timer
      Specified by:
      purgeStateTimer in interface DNSTaskStarter
    • cancelTimer

      public void cancelTimer()
      Description copied from interface: DNSTaskStarter
      Cancel the generals task timer
      Specified by:
      cancelTimer in interface DNSTaskStarter
    • cancelStateTimer

      public void cancelStateTimer()
      Description copied from interface: DNSTaskStarter
      Cancel the state task timer
      Specified by:
      cancelStateTimer in interface DNSTaskStarter
    • startProber

      public void startProber()
      Description copied from interface: DNSTaskStarter
      Start a new prober task
      Specified by:
      startProber in interface DNSTaskStarter
    • startAnnouncer

      public void startAnnouncer()
      Description copied from interface: DNSTaskStarter
      Start a new announcer task
      Specified by:
      startAnnouncer in interface DNSTaskStarter
    • startRenewer

      public void startRenewer()
      Description copied from interface: DNSTaskStarter
      Start a new renewer task
      Specified by:
      startRenewer in interface DNSTaskStarter
    • startCanceler

      public void startCanceler()
      Description copied from interface: DNSTaskStarter
      Start a new canceler task
      Specified by:
      startCanceler in interface DNSTaskStarter
    • startReaper

      public void startReaper()
      Description copied from interface: DNSTaskStarter
      Start a new reaper task. There is only supposed to be one reaper running at a time.
      Specified by:
      startReaper in interface DNSTaskStarter
    • startServiceInfoResolver

      public void startServiceInfoResolver(ServiceInfoImpl info)
      Description copied from interface: DNSTaskStarter
      Start a new service info resolver task
      Specified by:
      startServiceInfoResolver in interface DNSTaskStarter
      Parameters:
      info - service info to resolve
    • startTypeResolver

      public void startTypeResolver()
      Description copied from interface: DNSTaskStarter
      Start a new service type resolver task
      Specified by:
      startTypeResolver in interface DNSTaskStarter
    • startServiceResolver

      public void startServiceResolver(String type)
      Description copied from interface: DNSTaskStarter
      Start a new service resolver task
      Specified by:
      startServiceResolver in interface DNSTaskStarter
      Parameters:
      type - service type to resolve
    • startResponder

      public void startResponder(DNSIncoming in, InetAddress addr, int port)
      Description copied from interface: DNSTaskStarter
      Start a new responder task
      Specified by:
      startResponder in interface DNSTaskStarter
      Parameters:
      in - incoming message
      addr - incoming address
      port - incoming port
    • recover

      public void recover()
      Recover jmDNS when there is an error.
    • __recover

      void __recover()
    • cleanCache

      public void cleanCache()
      Checks the cache of expired records and removes them. If any records are about to expire it tries to get them refreshed.

      Implementation note:
      This method is called by the RecordReaper every DNSConstants.RECORD_REAPER_INTERVAL milliseconds.

      See Also:
    • close

      public void close()
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Closeable
    • printServices

      @Deprecated public void printServices()
      Deprecated.
      List Services and serviceTypes. Debugging Only
      Specified by:
      printServices in class JmDNS
    • toString

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

      public ServiceInfo[] list(String type)
      Returns a list of service infos of the specified type.
      Specified by:
      list in class JmDNS
      Parameters:
      type - Service type name, such as _http._tcp.local..
      Returns:
      An array of service instance.
    • list

      public ServiceInfo[] list(String type, long timeout)
      Returns a list of service infos of the specified type.
      Specified by:
      list in class JmDNS
      Parameters:
      type - Service type name, such as _http._tcp.local..
      timeout - timeout in milliseconds. Typical timeout should be 6s.
      Returns:
      An array of service instance.
    • listBySubtype

      public Map<String,ServiceInfo[]> listBySubtype(String type)
      Returns a list of service infos of the specified type sorted by subtype. Any service that do not register a subtype is listed in the empty subtype section.
      Specified by:
      listBySubtype in class JmDNS
      Parameters:
      type - Service type name, such as _http._tcp.local..
      Returns:
      A dictionary of service info by subtypes.
    • listBySubtype

      public Map<String,ServiceInfo[]> listBySubtype(String type, long timeout)
      Returns a list of service infos of the specified type sorted by subtype. Any service that do not register a subtype is listed in the empty subtype section.
      Specified by:
      listBySubtype in class JmDNS
      Parameters:
      type - Service type name, such as _http._tcp.local..
      timeout - timeout in milliseconds. Typical timeout should be 6s.
      Returns:
      A dictionary of service info by subtypes.
    • disposeServiceCollectors

      private void disposeServiceCollectors()
      This method disposes all ServiceCollector instances which have been created by calls to method list(type).
      See Also:
    • toUnqualifiedName

      static String toUnqualifiedName(String type, String qualifiedName)
    • getServices

      public Map<String,ServiceInfo> getServices()
    • setLastThrottleIncrement

      public void setLastThrottleIncrement(long lastThrottleIncrement)
    • getLastThrottleIncrement

      public long getLastThrottleIncrement()
    • setThrottle

      public void setThrottle(int throttle)
    • getThrottle

      public int getThrottle()
    • getRandom

      public static Random getRandom()
    • ioLock

      public void ioLock()
    • ioUnlock

      public void ioUnlock()
    • setPlannedAnswer

      public void setPlannedAnswer(DNSIncoming plannedAnswer)
    • getPlannedAnswer

      public DNSIncoming getPlannedAnswer()
    • setLocalHost

      void setLocalHost(HostInfo localHost)
    • getServiceTypes

      public Map<String,JmDNSImpl.ServiceTypeEntry> getServiceTypes()
    • getSocket

      public MulticastSocket getSocket()
    • getGroup

      public InetAddress getGroup()
    • getDelegate

      public JmDNS.Delegate getDelegate()
      Description copied from class: JmDNS
      Returns the instance delegate
      Specified by:
      getDelegate in class JmDNS
      Returns:
      instance delegate
    • setDelegate

      public JmDNS.Delegate setDelegate(JmDNS.Delegate delegate)
      Description copied from class: JmDNS
      Sets the instance delegate
      Specified by:
      setDelegate in class JmDNS
      Parameters:
      delegate - new instance delegate
      Returns:
      previous instance delegate