| /******************************************************************************* |
| * Copyright (c) 2010 Markus Alexander Kuppe. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * Markus Alexander Kuppe (ecf-dev_eclipse.org <at> lemmster <dot> de) - initial API and implementation |
| ******************************************************************************/ |
| package org.eclipse.ecf.provider.dnssd; |
| |
| import java.util.ArrayList; |
| import java.util.Collection; |
| import java.util.List; |
| |
| import org.eclipse.ecf.discovery.identity.IServiceTypeID; |
| import org.xbill.DNS.Lookup; |
| import org.xbill.DNS.TextParseException; |
| import org.xbill.DNS.Type; |
| |
| /** |
| * This ServiceType represents the special RRs defined in |
| * chapter 12. Discovery of Browsing and Registration Domains |
| * |
| * @see http://files.dns-sd.org/draft-cheshire-dnsext-dns-sd.txt |
| */ |
| public class BnRDnsSdServiceTypeID extends DnsSdServiceTypeID { |
| private static final long serialVersionUID = -466458565598238072L; |
| |
| /** |
| * A list of domains recommended for browsing |
| */ |
| static final String BROWSE_DOMAINS = "b._dns-sd"; //$NON-NLS-1$ |
| /** |
| * A single recommended default domain for browsing |
| */ |
| static final String DEFAULT_BROWSE_DOMAIN = "db._dns-sd"; //$NON-NLS-1$ |
| /** |
| * A list of domains recommended for registering services using Dynamic Update |
| */ |
| static final String REG_DOMAINS = "r._dns-sd"; //$NON-NLS-1$ |
| /** |
| * A single recommended default domain for registering services. |
| */ |
| static final String DEFAULT_REG_DOMAIN = "dr._dns-sd"; //$NON-NLS-1$ |
| |
| BnRDnsSdServiceTypeID(IServiceTypeID aServiceType, String aService) { |
| super(aServiceType.getNamespace(), aServiceType); |
| services = new String[] {aService}; |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ecf.provider.dnssd.DnsSdServiceTypeID#getInternalQueries() |
| */ |
| Lookup[] getInternalQueries() { |
| List result = new ArrayList(); |
| for (int i = 0; i < scopes.length; i++) { |
| String scope = scopes[i]; |
| // remove dangling "." |
| if(scope.endsWith(".")) { //$NON-NLS-1$ |
| scope = scope.substring(0, scope.length() - 1); |
| } |
| Lookup query; |
| try { |
| query = new Lookup(services[0] + "._udp" + "." + scope + ".", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ |
| Type.PTR); |
| } catch (TextParseException e) { |
| continue; |
| } |
| result.add(query); |
| } |
| return (Lookup[]) result.toArray(new Lookup[result.size()]); |
| } |
| |
| void setScope(String target) { |
| if(target.endsWith(".")) { //$NON-NLS-1$ |
| target = target.substring(0, target.length() - 1); |
| } |
| scopes = new String[]{target}; |
| createType(); |
| } |
| |
| Collection getScopesAsZones() { |
| final List res = new ArrayList(scopes.length); |
| for (int i = 0; i < scopes.length; i++) { |
| String scope = scopes[i]; |
| res.add(scope + "."); //$NON-NLS-1$ |
| } |
| return res; |
| } |
| } |