#2 recursively register Zone Nameservers
This commit is contained in:
parent
2df6123b39
commit
6b4dfcd966
@ -2,12 +2,35 @@ package dslab.nameserver;
|
|||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.rmi.RemoteException;
|
import java.rmi.RemoteException;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
public class NameServerRemote implements INameserverRemote, Serializable {
|
public class NameServerRemote implements INameserverRemote, Serializable {
|
||||||
|
|
||||||
|
private String name;
|
||||||
|
private ConcurrentHashMap<String, INameserverRemote> subdomains;
|
||||||
|
|
||||||
|
public NameServerRemote(String name) {
|
||||||
|
this.name = name;
|
||||||
|
this.subdomains = new ConcurrentHashMap<>();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void registerNameserver(String domain, INameserverRemote nameserver) throws RemoteException, AlreadyRegisteredException, InvalidDomainException {
|
public void registerNameserver(String domain, INameserverRemote nameserver) throws RemoteException, AlreadyRegisteredException, InvalidDomainException {
|
||||||
|
// System.out.printf("Registering Nameserver %s%n", domain);
|
||||||
|
if (!domain.contains(".")) {
|
||||||
|
subdomains.putIfAbsent(domain, nameserver);
|
||||||
|
} else {
|
||||||
|
String[] domainParts = domain.split("\\.");
|
||||||
|
// System.out.println(Arrays.toString(domainParts));
|
||||||
|
String topDomain = domainParts[domainParts.length - 1];
|
||||||
|
INameserverRemote topDomainNameServer = subdomains.get(topDomain);
|
||||||
|
String subdomainsString = domain.substring(0, domain.length() - topDomain.length() - 1);
|
||||||
|
// System.out.printf("Subdomains %s%n", subdomainsString);
|
||||||
|
topDomainNameServer.registerNameserver(subdomainsString, nameserver);
|
||||||
|
}
|
||||||
|
// System.out.printf("NameServer %s%n", name);
|
||||||
|
subdomains.forEach((k, v) -> System.out.println(k + " " + v));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@ -29,7 +29,7 @@ public class Nameserver implements INameserver {
|
|||||||
int registryPort = config.getInt("registry.port");
|
int registryPort = config.getInt("registry.port");
|
||||||
if (componentId.equals("ns-root")) {
|
if (componentId.equals("ns-root")) {
|
||||||
// Root Nameserver
|
// Root Nameserver
|
||||||
INameserverRemote nameserverRemote = new NameServerRemote();
|
INameserverRemote nameserverRemote = new NameServerRemote("Root Nameserver");
|
||||||
try {
|
try {
|
||||||
INameserverRemote stub = (INameserverRemote) UnicastRemoteObject.exportObject(nameserverRemote, registryPort);
|
INameserverRemote stub = (INameserverRemote) UnicastRemoteObject.exportObject(nameserverRemote, registryPort);
|
||||||
REGISTRY = LocateRegistry.createRegistry(registryPort);
|
REGISTRY = LocateRegistry.createRegistry(registryPort);
|
||||||
@ -45,7 +45,7 @@ public class Nameserver implements INameserver {
|
|||||||
try {
|
try {
|
||||||
REGISTRY = LocateRegistry.getRegistry(registryHost, registryPort);
|
REGISTRY = LocateRegistry.getRegistry(registryHost, registryPort);
|
||||||
INameserverRemote nameserverRemote = (INameserverRemote) REGISTRY.lookup(registryName);
|
INameserverRemote nameserverRemote = (INameserverRemote) REGISTRY.lookup(registryName);
|
||||||
nameserverRemote.registerNameserver(domain, new NameServerRemote());
|
nameserverRemote.registerNameserver(domain, new NameServerRemote(domain));
|
||||||
} catch (RemoteException | NotBoundException e) {
|
} catch (RemoteException | NotBoundException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
} catch (InvalidDomainException e) {
|
} catch (InvalidDomainException e) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user