* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Change History (most recent first):
$Log: DNSSD.java,v $
+Revision 1.16 2008/11/04 20:06:20 cheshire
+<rdar://problem/6186231> Change MAX_DOMAIN_NAME to 256
+
+Revision 1.15 2007/03/13 00:28:03 vazquez
+<rdar://problem/4625928> Java: Rename exported symbols in libjdns_sd.jnilib
+
+Revision 1.14 2007/03/13 00:10:14 vazquez
+<rdar://problem/4455206> Java: 64 bit JNI patch
+
+Revision 1.13 2007/02/24 23:08:02 mkrochma
+<rdar://problem/5001673> Typo in Bonjour Java API document
+
+Revision 1.12 2007/02/09 00:33:02 cheshire
+Add missing error codes to kMessages array
+
Revision 1.11 2006/08/14 23:25:08 cheshire
Re-licensed mDNSResponder daemon source code under Apache License, Version 2.0
DNSSD provides access to DNS Service Discovery features of ZeroConf networking.<P>
It is a factory class that is used to invoke registration and discovery-related
- operations. Most operations are non-blocking; clients are called back through an interface
+ operations. Most operations are non-blocking; clients are called back through an interface
with the result of an operation. Callbacks are made from a separate worker thread.<P>
- For example, in this program<P>
+ For example, in this program<P>
<PRE><CODE>
class MyClient implements BrowseListener {
void lookForWebServers() {
- myBrowser = DNSSD.browse("_http_.tcp", this);
+ myBrowser = DNSSD.browse("_http._tcp", this);
}
- public void serviceFound(DNSSDService browser, int flags, int ifIndex,
+ public void serviceFound(DNSSDService browser, int flags, int ifIndex,
String serviceName, String regType, String domain) {}
- ...
+ ...
}</CODE></PRE>
<CODE>MyClient.serviceFound()</CODE> would be called for every HTTP server discovered in the
default browse domain(s).
queued. Applications should not update their UI to display browse
results if the MORE_COMING flag is set; they will be called at least once
more with the flag clear.
- */
+ */
public static final int MORE_COMING = ( 1 << 0 );
/** If flag is set in a {@link DomainListener} callback, indicates that the result is the default domain. */
public static final int DEFAULT = ( 1 << 2 );
- /** If flag is set, a name conflict will trigger an exception when registering non-shared records.<P>
- A name must be explicitly specified when registering a service if this bit is set
+ /** If flag is set, a name conflict will trigger an exception when registering non-shared records.<P>
+ A name must be explicitly specified when registering a service if this bit is set
(i.e. the default name may not not be used).
*/
public static final int NO_AUTO_RENAME = ( 1 << 3 );
public static final int REGISTRATION_DOMAINS = ( 1 << 7 );
/** Maximum length, in bytes, of a domain name represented as an escaped C-String. */
- public static final int MAX_DOMAIN_NAME = 1005;
+ public static final int MAX_DOMAIN_NAME = 1009;
/** Pass for ifIndex to specify all available interfaces. */
public static final int ALL_INTERFACES = 0;
/** Pass for ifIndex to specify the localhost interface. */
public static final int LOCALHOST_ONLY = -1;
- /** Browse for instances of a service.<P>
+ /** Browse for instances of a service.<P>
Note: browsing consumes network bandwidth. Call {@link DNSSDService#stop} when you have finished browsing.<P>
interfaces. Pass -1 to only browse for services provided on the local host.
<P>
@param regType
- The registration type being browsed for followed by the protocol, separated by a
+ The registration type being browsed for followed by the protocol, separated by a
dot (e.g. "_ftp._tcp"). The transport protocol must be "_tcp" or "_udp".
<P>
@param domain
If non-null, specifies the domain on which to browse for services.
- Most applications will not specify a domain, instead browsing on the
+ Most applications will not specify a domain, instead browsing on the
default domain(s).
<P>
@param listener
throws DNSSDException
{ return getInstance()._makeBrowser( flags, ifIndex, regType, domain, listener); }
- /** Browse for instances of a service. Use default flags, ifIndex and domain.<P>
+ /** Browse for instances of a service. Use default flags, ifIndex and domain.<P>
@param regType
- The registration type being browsed for followed by the protocol, separated by a
+ The registration type being browsed for followed by the protocol, separated by a
dot (e.g. "_ftp._tcp"). The transport protocol must be "_tcp" or "_udp".
<P>
@param listener
throws DNSSDException
{ return browse( 0, 0, regType, "", listener); }
- /** Resolve a service name discovered via browse() to a target host name, port number, and txt record.<P>
+ /** Resolve a service name discovered via browse() to a target host name, port number, and txt record.<P>
- Note: Applications should NOT use resolve() solely for txt record monitoring - use
+ Note: Applications should NOT use resolve() solely for txt record monitoring - use
queryRecord() instead, as it is more efficient for this task.<P>
- Note: When the desired results have been returned, the client MUST terminate the resolve by
+ Note: When the desired results have been returned, the client MUST terminate the resolve by
calling {@link DNSSDService#stop}.<P>
Note: resolve() behaves correctly for typical services that have a single SRV record and
- a single TXT record (the TXT record may be empty.) To resolve non-standard services with
+ a single TXT record (the TXT record may be empty.) To resolve non-standard services with
multiple SRV or TXT records, use queryRecord().<P>
@param flags
<P>
@param ifIndex
The interface on which to resolve the service. The client should
- pass the interface on which the serviceName was discovered (i.e.
+ pass the interface on which the serviceName was discovered (i.e.
the ifIndex passed to the serviceFound() callback)
or 0 to resolve the named service on all available interfaces.
<P>
The servicename to be resolved.
<P>
@param regType
- The registration type being resolved followed by the protocol, separated by a
- dot (e.g. "_ftp._tcp"). The transport protocol must be "_tcp" or "_udp".
+ The registration type being resolved followed by the protocol, separated by a
+ dot (e.g. "_ftp._tcp"). The transport protocol must be "_tcp" or "_udp".
<P>
@param domain
The domain on which the service is registered, i.e. the domain passed
@throws SecurityException If a security manager is present and denies <tt>RuntimePermission("getDNSSDInstance")</tt>.
@see RuntimePermission
*/
- public static DNSSDService resolve( int flags, int ifIndex, String serviceName, String regType,
+ public static DNSSDService resolve( int flags, int ifIndex, String serviceName, String regType,
String domain, ResolveListener listener)
throws DNSSDException
{ return getInstance()._resolve( flags, ifIndex, serviceName, regType, domain, listener); }
- /** Register a service, to be discovered via browse() and resolve() calls.<P>
+ /** Register a service, to be discovered via browse() and resolve() calls.<P>
@param flags
Possible values are: NO_AUTO_RENAME.
<P>
@param ifIndex
If non-zero, specifies the interface on which to register the service
(the index for a given interface is determined via the if_nametoindex()
- family of calls.) Most applications will pass 0 to register on all
- available interfaces. Pass -1 to register a service only on the local
+ family of calls.) Most applications will pass 0 to register on all
+ available interfaces. Pass -1 to register a service only on the local
machine (service will not be visible to remote hosts).
<P>
@param serviceName
- If non-null, specifies the service name to be registered.
- Applications need not specify a name, in which case the
- computer name is used (this name is communicated to the client via
+ If non-null, specifies the service name to be registered.
+ Applications need not specify a name, in which case the
+ computer name is used (this name is communicated to the client via
the serviceRegistered() callback).
<P>
@param regType
- The registration type being registered followed by the protocol, separated by a
- dot (e.g. "_ftp._tcp"). The transport protocol must be "_tcp" or "_udp".
+ The registration type being registered followed by the protocol, separated by a
+ dot (e.g. "_ftp._tcp"). The transport protocol must be "_tcp" or "_udp".
<P>
@param domain
If non-null, specifies the domain on which to advertise the service.
- Most applications will not specify a domain, instead automatically
+ Most applications will not specify a domain, instead automatically
registering in the default domain(s).
<P>
@param host
If non-null, specifies the SRV target host name. Most applications
will not specify a host, instead automatically using the machine's
- default host name(s). Note that specifying a non-null host does NOT
- create an address record for that host - the application is responsible
+ default host name(s). Note that specifying a non-null host does NOT
+ create an address record for that host - the application is responsible
for ensuring that the appropriate address record exists, or creating it
via {@link DNSSDRegistration#addRecord}.
<P>
@param port
- The port on which the service accepts connections. Pass 0 for a
- "placeholder" service (i.e. a service that will not be discovered by
- browsing, but will cause a name conflict if another client tries to
+ The port on which the service accepts connections. Pass 0 for a
+ "placeholder" service (i.e. a service that will not be discovered by
+ browsing, but will cause a name conflict if another client tries to
register that same name.) Most clients will not use placeholder services.
<P>
@param txtRecord
- The txt record rdata. May be null. Note that a non-null txtRecord
- MUST be a properly formatted DNS TXT record, i.e. <length byte> <data>
+ The txt record rdata. May be null. Note that a non-null txtRecord
+ MUST be a properly formatted DNS TXT record, i.e. <length byte> <data>
<length byte> <data> ...
<P>
@param listener
@throws SecurityException If a security manager is present and denies <tt>RuntimePermission("getDNSSDInstance")</tt>.
@see RuntimePermission
*/
- public static DNSSDRegistration register( int flags, int ifIndex, String serviceName, String regType,
+ public static DNSSDRegistration register( int flags, int ifIndex, String serviceName, String regType,
String domain, String host, int port, TXTRecord txtRecord, RegisterListener listener)
throws DNSSDException
{ return getInstance()._register( flags, ifIndex, serviceName, regType, domain, host, port, txtRecord, listener); }
- /** Register a service, to be discovered via browse() and resolve() calls. Use default flags, ifIndex, domain, host and txtRecord.<P>
+ /** Register a service, to be discovered via browse() and resolve() calls. Use default flags, ifIndex, domain, host and txtRecord.<P>
@param serviceName
- If non-null, specifies the service name to be registered.
- Applications need not specify a name, in which case the
- computer name is used (this name is communicated to the client via
+ If non-null, specifies the service name to be registered.
+ Applications need not specify a name, in which case the
+ computer name is used (this name is communicated to the client via
the serviceRegistered() callback).
<P>
@param regType
- The registration type being registered followed by the protocol, separated by a
- dot (e.g. "_ftp._tcp"). The transport protocol must be "_tcp" or "_udp".
+ The registration type being registered followed by the protocol, separated by a
+ dot (e.g. "_ftp._tcp"). The transport protocol must be "_tcp" or "_udp".
<P>
@param port
- The port on which the service accepts connections. Pass 0 for a
- "placeholder" service (i.e. a service that will not be discovered by
- browsing, but will cause a name conflict if another client tries to
+ The port on which the service accepts connections. Pass 0 for a
+ "placeholder" service (i.e. a service that will not be discovered by
+ browsing, but will cause a name conflict if another client tries to
register that same name.) Most clients will not use placeholder services.
<P>
@param listener
throws DNSSDException
{ return register( 0, 0, serviceName, regType, null, null, port, null, listener); }
- /** Create a {@link DNSSDRecordRegistrar} allowing efficient registration of
- multiple individual records.<P>
+ /** Create a {@link DNSSDRecordRegistrar} allowing efficient registration of
+ multiple individual records.<P>
<P>
@return A {@link DNSSDRecordRegistrar} that can be used to register records.
throws DNSSDException
{ return getInstance()._createRecordRegistrar( listener); }
- /** Query for an arbitrary DNS record.<P>
+ /** Query for an arbitrary DNS record.<P>
@param flags
Possible values are: MORE_COMING.
<P>
@param ifIndex
If non-zero, specifies the interface on which to issue the query
(the index for a given interface is determined via the if_nametoindex()
- family of calls.) Passing 0 causes the name to be queried for on all
+ family of calls.) Passing 0 causes the name to be queried for on all
interfaces. Passing -1 causes the name to be queried for only on the
local host.
<P>
as defined in nameser.h.
<P>
@param rrclass
- The class of the resource record, as defined in nameser.h
+ The class of the resource record, as defined in nameser.h
(usually 1 for the Internet class).
<P>
@param listener
@throws SecurityException If a security manager is present and denies <tt>RuntimePermission("getDNSSDInstance")</tt>.
@see RuntimePermission
*/
- public static DNSSDService queryRecord( int flags, int ifIndex, String serviceName, int rrtype,
+ public static DNSSDService queryRecord( int flags, int ifIndex, String serviceName, int rrtype,
int rrclass, QueryListener listener)
throws DNSSDException
{ return getInstance()._queryRecord( flags, ifIndex, serviceName, rrtype, rrclass, listener); }
- /** Asynchronously enumerate domains available for browsing and registration.<P>
+ /** Asynchronously enumerate domains available for browsing and registration.<P>
Currently, the only domain returned is "local.", but other domains will be returned in future.<P>
@param ifIndex
If non-zero, specifies the interface on which to look for domains.
(the index for a given interface is determined via the if_nametoindex()
- family of calls.) Most applications will pass 0 to enumerate domains on
- all interfaces.
+ family of calls.) Most applications will pass 0 to enumerate domains on
+ all interfaces.
<P>
@param listener
This object will get called when domains are found.
throws DNSSDException
{ return getInstance()._enumerateDomains( flags, ifIndex, listener); }
- /** Concatenate a three-part domain name (as provided to the listeners) into a
- properly-escaped full domain name. Note that strings passed to listeners are
- ALREADY ESCAPED where necessary.<P>
+ /** Concatenate a three-part domain name (as provided to the listeners) into a
+ properly-escaped full domain name. Note that strings passed to listeners are
+ ALREADY ESCAPED where necessary.<P>
@param serviceName
The service name - any dots or slashes must NOT be escaped.
May be null (to construct a PTR record name, e.g. "_ftp._tcp.apple.com").
<P>
@param regType
- The registration type followed by the protocol, separated by a dot (e.g. "_ftp._tcp").
+ The registration type followed by the protocol, separated by a dot (e.g. "_ftp._tcp").
<P>
@param domain
The domain name, e.g. "apple.com". Any literal dots or backslashes must be escaped.
throws DNSSDException
{ return getInstance()._constructFullName( serviceName, regType, domain); }
- /** Instruct the daemon to verify the validity of a resource record that appears to
- be out of date. (e.g. because tcp connection to a service's target failed.) <P>
+ /** Instruct the daemon to verify the validity of a resource record that appears to
+ be out of date. (e.g. because tcp connection to a service's target failed.) <P>
- Causes the record to be flushed from the daemon's cache (as well as all other
+ Causes the record to be flushed from the daemon's cache (as well as all other
daemons' caches on the network) if the record is determined to be invalid.<P>
@param flags
Currently unused, reserved for future use.
@param ifIndex
If non-zero, specifies the interface on which to reconfirm the record
(the index for a given interface is determined via the if_nametoindex()
- family of calls.) Passing 0 causes the name to be reconfirmed on all
+ family of calls.) Passing 0 causes the name to be reconfirmed on all
interfaces. Passing -1 causes the name to be reconfirmed only on the
local host.
<P>
@throws SecurityException If a security manager is present and denies <tt>RuntimePermission("getDNSSDInstance")</tt>.
@see RuntimePermission
*/
- public static void reconfirmRecord( int flags, int ifIndex, String fullName, int rrtype,
+ public static void reconfirmRecord( int flags, int ifIndex, String fullName, int rrtype,
int rrclass, byte[] rdata)
{ getInstance()._reconfirmRecord( flags, ifIndex, fullName, rrtype, rrclass, rdata); }
- /** Return the canonical name of a particular interface index.<P>
+ /** Return the canonical name of a particular interface index.<P>
@param ifIndex
A valid interface index. Must not be ALL_INTERFACES.
<P>
public static String getNameForIfIndex( int ifIndex)
{ return getInstance()._getNameForIfIndex( ifIndex); }
- /** Return the index of a named interface.<P>
+ /** Return the index of a named interface.<P>
@param ifName
A valid interface name. An example is java.net.NetworkInterface.getName().
<P>
protected DNSSD() {} // prevent direct instantiation
/** Return the single instance of DNSSD. */
- static protected final DNSSD getInstance()
+ static protected final DNSSD getInstance()
{
SecurityManager sm = System.getSecurityManager();
- if ( sm != null)
- sm.checkPermission( new RuntimePermission( "getDNSSDInstance"));
- return fInstance;
+ if ( sm != null)
+ sm.checkPermission( new RuntimePermission( "getDNSSDInstance"));
+ return fInstance;
}
abstract protected DNSSDService _makeBrowser( int flags, int ifIndex, String regType, String domain, BrowseListener listener)
throws DNSSDException;
- abstract protected DNSSDService _resolve( int flags, int ifIndex, String serviceName, String regType,
+ abstract protected DNSSDService _resolve( int flags, int ifIndex, String serviceName, String regType,
String domain, ResolveListener listener)
throws DNSSDException;
- abstract protected DNSSDRegistration _register( int flags, int ifIndex, String serviceName, String regType,
+ abstract protected DNSSDRegistration _register( int flags, int ifIndex, String serviceName, String regType,
String domain, String host, int port, TXTRecord txtRecord, RegisterListener listener)
throws DNSSDException;
abstract protected DNSSDRecordRegistrar _createRecordRegistrar( RegisterRecordListener listener)
throws DNSSDException;
- abstract protected DNSSDService _queryRecord( int flags, int ifIndex, String serviceName, int rrtype,
+ abstract protected DNSSDService _queryRecord( int flags, int ifIndex, String serviceName, int rrtype,
int rrclass, QueryListener listener)
throws DNSSDException;
abstract protected String _constructFullName( String serviceName, String regType, String domain)
throws DNSSDException;
- abstract protected void _reconfirmRecord( int flags, int ifIndex, String fullName, int rrtype,
+ abstract protected void _reconfirmRecord( int flags, int ifIndex, String fullName, int rrtype,
int rrclass, byte[] rdata);
abstract protected String _getNameForIfIndex( int ifIndex);
static
{
try
- {
+ {
String name = System.getProperty( "com.apple.dnssd.DNSSD" );
if( name == null )
name = "com.apple.dnssd.AppleDNSSD"; // Fall back to Apple-provided class.
"BADTIME",
"BADSIG",
"BADKEY",
- "TRANSIENT"
+ "TRANSIENT",
+ "SERVICENOTRUNNING",
+ "NATPORTMAPPINGUNSUPPORTED",
+ "NATPORTMAPPINGDISABLED"
};
if ( fErrorCode <= UNKNOWN && fErrorCode > ( UNKNOWN - kMessages.length))
{
System.loadLibrary( "jdns_sd");
- int libInitResult = InitLibrary( 1);
+ int libInitResult = InitLibrary( 2); // Current version number (must be sync'd with jnilib version)
if ( libInitResult != DNSSDException.NO_ERROR)
throw new InternalError( "cannot instantiate DNSSD: " + new AppleDNSSDException( libInitResult).getMessage());
return new AppleBrowser( flags, ifIndex, regType, domain, client);
}
- protected DNSSDService _resolve( int flags, int ifIndex, String serviceName, String regType,
+ protected DNSSDService _resolve( int flags, int ifIndex, String serviceName, String regType,
String domain, ResolveListener client)
throws DNSSDException
{
return new AppleResolver( flags, ifIndex, serviceName, regType, domain, client);
}
- protected DNSSDRegistration _register( int flags, int ifIndex, String serviceName, String regType,
+ protected DNSSDRegistration _register( int flags, int ifIndex, String serviceName, String regType,
String domain, String host, int port, TXTRecord txtRecord, RegisterListener client)
throws DNSSDException
{
- return new AppleRegistration( flags, ifIndex, serviceName, regType, domain, host, port,
+ return new AppleRegistration( flags, ifIndex, serviceName, regType, domain, host, port,
( txtRecord != null) ? txtRecord.getRawBytes() : null, client);
}
return new AppleRecordRegistrar( listener);
}
- protected DNSSDService _queryRecord( int flags, int ifIndex, String serviceName, int rrtype,
+ protected DNSSDService _queryRecord( int flags, int ifIndex, String serviceName, int rrtype,
int rrclass, QueryListener client)
throws DNSSDException
{
return responseHolder[0];
}
- protected void _reconfirmRecord( int flags, int ifIndex, String fullName, int rrtype,
+ protected void _reconfirmRecord( int flags, int ifIndex, String fullName, int rrtype,
int rrclass, byte[] rdata)
{
ReconfirmRecord( flags, ifIndex, fullName, rrtype, rrclass, rdata);
protected native int ConstructName( String serviceName, String regType, String domain, String[] pOut);
- protected native void ReconfirmRecord( int flags, int ifIndex, String fullName, int rrtype,
+ protected native void ReconfirmRecord( int flags, int ifIndex, String fullName, int rrtype,
int rrclass, byte[] rdata);
protected native String GetNameForIfIndex( int ifIndex);
throw new AppleDNSSDException( rc);
}
- protected int /* warning */ fNativeContext; // Private storage for native side
+ protected long /* warning */ fNativeContext; // Private storage for native side
public void run()
{
class AppleBrowser extends AppleService
{
- public AppleBrowser( int flags, int ifIndex, String regType, String domain, BrowseListener client)
+ public AppleBrowser( int flags, int ifIndex, String regType, String domain, BrowseListener client)
throws DNSSDException
- {
+ {
super(client);
this.ThrowOnErr( this.CreateBrowser( flags, ifIndex, regType, domain));
if ( !AppleDNSSD.hasAutoCallbacks)
class AppleResolver extends AppleService
{
- public AppleResolver( int flags, int ifIndex, String serviceName, String regType,
- String domain, ResolveListener client)
+ public AppleResolver( int flags, int ifIndex, String serviceName, String regType,
+ String domain, ResolveListener client)
throws DNSSDException
- {
- super(client);
+ {
+ super(client);
this.ThrowOnErr( this.CreateResolver( flags, ifIndex, serviceName, regType, domain));
if ( !AppleDNSSD.hasAutoCallbacks)
new Thread(this).start();
}
// Sets fNativeContext. Returns non-zero on error.
- protected native int CreateResolver( int flags, int ifIndex, String serviceName, String regType,
+ protected native int CreateResolver( int flags, int ifIndex, String serviceName, String regType,
String domain);
}
// An AppleDNSRecord is a simple wrapper around a dns_sd DNSRecord.
class AppleDNSRecord implements DNSRecord
{
- public AppleDNSRecord( AppleService owner)
- {
- fOwner = owner;
+ public AppleDNSRecord( AppleService owner)
+ {
+ fOwner = owner;
fRecord = 0; // record always starts out empty
}
this.ThrowOnErr( this.Remove());
}
- protected int fRecord; // Really a DNSRecord; sizeof(int) == sizeof(void*) ?
+ protected long fRecord; // Really a DNSRecord; sizeof(long) == sizeof(void*) ?
protected AppleService fOwner;
protected void ThrowOnErr( int rc) throws DNSSDException
class AppleRegistration extends AppleService implements DNSSDRegistration
{
- public AppleRegistration( int flags, int ifIndex, String serviceName, String regType, String domain,
- String host, int port, byte[] txtRecord, RegisterListener client)
+ public AppleRegistration( int flags, int ifIndex, String serviceName, String regType, String domain,
+ String host, int port, byte[] txtRecord, RegisterListener client)
throws DNSSDException
- {
- super(client);
+ {
+ super(client);
this.ThrowOnErr( this.BeginRegister( ifIndex, flags, serviceName, regType, domain, host, port, txtRecord));
if ( !AppleDNSSD.hasAutoCallbacks)
new Thread(this).start();
}
// Sets fNativeContext. Returns non-zero on error.
- protected native int BeginRegister( int ifIndex, int flags, String serviceName, String regType,
+ protected native int BeginRegister( int ifIndex, int flags, String serviceName, String regType,
String domain, String host, int port, byte[] txtRecord);
// Sets fNativeContext. Returns non-zero on error.
class AppleRecordRegistrar extends AppleService implements DNSSDRecordRegistrar
{
- public AppleRecordRegistrar( RegisterRecordListener listener)
+ public AppleRecordRegistrar( RegisterRecordListener listener)
throws DNSSDException
- {
- super(listener);
+ {
+ super(listener);
this.ThrowOnErr( this.CreateConnection());
if ( !AppleDNSSD.hasAutoCallbacks)
new Thread(this).start();
}
- public DNSRecord registerRecord( int flags, int ifIndex, String fullname, int rrtype,
+ public DNSRecord registerRecord( int flags, int ifIndex, String fullname, int rrtype,
int rrclass, byte[] rdata, int ttl)
throws DNSSDException
{
protected native int CreateConnection();
// Sets fNativeContext. Returns non-zero on error.
- protected native int RegisterRecord( int flags, int ifIndex, String fullname, int rrtype,
+ protected native int RegisterRecord( int flags, int ifIndex, String fullname, int rrtype,
int rrclass, byte[] rdata, int ttl, AppleDNSRecord destObj);
}
class AppleQuery extends AppleService
{
- public AppleQuery( int flags, int ifIndex, String serviceName, int rrtype,
- int rrclass, QueryListener client)
+ public AppleQuery( int flags, int ifIndex, String serviceName, int rrtype,
+ int rrclass, QueryListener client)
throws DNSSDException
- {
- super(client);
+ {
+ super(client);
this.ThrowOnErr( this.CreateQuery( flags, ifIndex, serviceName, rrtype, rrclass));
if ( !AppleDNSSD.hasAutoCallbacks)
new Thread(this).start();
class AppleDomainEnum extends AppleService
{
- public AppleDomainEnum( int flags, int ifIndex, DomainListener client)
+ public AppleDomainEnum( int flags, int ifIndex, DomainListener client)
throws DNSSDException
- {
- super(client);
+ {
+ super(client);
this.ThrowOnErr( this.BeginEnum( flags, ifIndex));
if ( !AppleDNSSD.hasAutoCallbacks)
new Thread(this).start();