#2 recursively register Zone Nameservers

This commit is contained in:
Rasha Djurdjevic 2021-01-06 01:50:34 +01:00
parent 2df6123b39
commit 6b4dfcd966
2 changed files with 26 additions and 3 deletions

View File

@ -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

View File

@ -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) {