From 6b4dfcd966d9bbaf6d2a44763da04423a58b44c1 Mon Sep 17 00:00:00 2001 From: Rasha Djurdjevic Date: Wed, 6 Jan 2021 01:50:34 +0100 Subject: [PATCH] #2 recursively register Zone Nameservers --- .../dslab/nameserver/NameServerRemote.java | 25 ++++++++++++++++++- .../java/dslab/nameserver/Nameserver.java | 4 +-- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/main/java/dslab/nameserver/NameServerRemote.java b/src/main/java/dslab/nameserver/NameServerRemote.java index 6a901b0..552024d 100644 --- a/src/main/java/dslab/nameserver/NameServerRemote.java +++ b/src/main/java/dslab/nameserver/NameServerRemote.java @@ -2,12 +2,35 @@ package dslab.nameserver; import java.io.Serializable; import java.rmi.RemoteException; +import java.util.Arrays; +import java.util.concurrent.ConcurrentHashMap; public class NameServerRemote implements INameserverRemote, Serializable { + private String name; + private ConcurrentHashMap subdomains; + + public NameServerRemote(String name) { + this.name = name; + this.subdomains = new ConcurrentHashMap<>(); + } + @Override 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 diff --git a/src/main/java/dslab/nameserver/Nameserver.java b/src/main/java/dslab/nameserver/Nameserver.java index 19bcd9d..19cb189 100644 --- a/src/main/java/dslab/nameserver/Nameserver.java +++ b/src/main/java/dslab/nameserver/Nameserver.java @@ -29,7 +29,7 @@ public class Nameserver implements INameserver { int registryPort = config.getInt("registry.port"); if (componentId.equals("ns-root")) { // Root Nameserver - INameserverRemote nameserverRemote = new NameServerRemote(); + INameserverRemote nameserverRemote = new NameServerRemote("Root Nameserver"); try { INameserverRemote stub = (INameserverRemote) UnicastRemoteObject.exportObject(nameserverRemote, registryPort); REGISTRY = LocateRegistry.createRegistry(registryPort); @@ -45,7 +45,7 @@ public class Nameserver implements INameserver { try { REGISTRY = LocateRegistry.getRegistry(registryHost, registryPort); INameserverRemote nameserverRemote = (INameserverRemote) REGISTRY.lookup(registryName); - nameserverRemote.registerNameserver(domain, new NameServerRemote()); + nameserverRemote.registerNameserver(domain, new NameServerRemote(domain)); } catch (RemoteException | NotBoundException e) { e.printStackTrace(); } catch (InvalidDomainException e) {