///Copyright 2003-2005 Arthur van Hoff, Rick Blair
//Licensed under Apache License version 2.0
//Original license LGPL
package javax.jmdns;
import java.io.IOException;
import java.net.InetAddress;
import javax.jmdns.impl.JmDNSImpl;
/**
* mDNS implementation in Java.
*
* @version %I%, %G%
* @author Arthur van Hoff, Rick Blair, Jeff Sonstein,
* Werner Randelshofer, Pierre Frisch, Scott Lewis, Scott Cytacki
*/
public abstract class JmDNS
{
/**
* The version of JmDNS.
*/
public static String VERSION = "2.0";
/**
* Create an instance of JmDNS.
*/
public static JmDNS create() throws IOException
{
return new JmDNSImpl();
}
/**
* Create an instance of JmDNS and bind it to a
* specific network interface given its IP-address.
*/
public static JmDNS create(InetAddress addr) throws IOException
{
return new JmDNSImpl(addr);
}
/**
* Return the HostName associated with this JmDNS instance.
* Note: May not be the same as what started. The host name is subject to
* negotiation.
*/
public abstract String getHostName();
/**
* Return the address of the interface to which this instance of JmDNS is
* bound.
*/
public abstract InetAddress getInterface() throws IOException;
/**
* Get service information. If the information is not cached, the method
* will block until updated information is received.
* <p/>
* Usage note: Do not call this method from the AWT event dispatcher thread.
* You will make the user interface unresponsive.
*
* @param type fully qualified service type, such as <code>_http._tcp.local.</code> .
* @param name unqualified service name, such as <code>foobar</code> .
* @return null if the service information cannot be obtained
*/
public abstract ServiceInfo getServiceInfo(String type, String name);
/**
* Get service information. If the information is not cached, the method
* will block for the given timeout until updated information is received.
* <p/>
* 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.
*
* @param type full qualified service type, such as <code>_http._tcp.local.</code> .
* @param name unqualified service name, such as <code>foobar</code> .
* @param timeout timeout in milliseconds
* @return null if the service information cannot be obtained
*/
public abstract ServiceInfo getServiceInfo(String type, String name, int timeout);
/**
* Request service information. The information about the service is
* requested and the ServiceListener.resolveService method is called as soon
* as it is available.
* <p/>
* Usage note: Do not call this method from the AWT event dispatcher thread.
* You will make the user interface unresponsive.
*
* @param type full qualified service type, such as <code>_http._tcp.local.</code> .
* @param name unqualified service name, such as <code>foobar</code> .
*/
public abstract 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.
*
* @param type full qualified service type, such as <code>_http._tcp.local.</code> .
* @param name unqualified service name, such as <code>foobar</code> .
* @param timeout timeout in milliseconds
*/
public abstract void requestServiceInfo(String type, String name, int timeout);
/**
* Listen for service types.
*
* @param listener listener for service types
*/
public abstract void addServiceTypeListener(ServiceTypeListener listener) throws IOException;
/**
* Remove listener for service types.
*
* @param listener listener for service types
*/
public abstract void removeServiceTypeListener(ServiceTypeListener listener);
/**
* Listen for services of a given type. The type has to be a fully qualified
* type name such as <code>_http._tcp.local.</code>.
*
* @param type full qualified service type, such as <code>_http._tcp.local.</code>.
* @param listener listener for service updates
*/
public abstract void addServiceListener(String type, ServiceListener listener);
/**
* Remove listener for services of a given type.
*
* @param listener listener for service updates
*/
public abstract void removeServiceListener(String type, ServiceListener listener);
/**
* 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.
*/
public abstract void registerService(ServiceInfo info) throws IOException;
/**
* Unregister a service. The service should have been registered.
*/
public abstract void unregisterService(ServiceInfo info);
/**
* Unregister all services.
*/
public abstract void unregisterAllServices();
/**
* 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.
*/
public abstract void registerServiceType(String type);
/**
* Close down jmdns. Release all resources and unregister all services.
*/
public abstract void close();
/**
* List Services and serviceTypes.
* Debugging Only
*/
public abstract void printServices();
/**
* Returns a list of service infos of the specified type.
*
* @param type Service type name, such as <code>_http._tcp.local.</code>.
* @return An array of service instance names.
*/
public abstract ServiceInfo[] list(String type);
}