diff --git a/src/dorkbox/network/dns/Name.java b/src/dorkbox/network/dns/Name.java index 6b888c37..5b7d2ecf 100644 --- a/src/dorkbox/network/dns/Name.java +++ b/src/dorkbox/network/dns/Name.java @@ -519,6 +519,25 @@ class Name implements Comparable, Serializable { return newname; } + /** + * Generates a new Name with the first n labels are removed + * + * @return The parent name + */ + public + Name parent(final int n) { + if (n < 1) { + throw new IllegalArgumentException("must remove 1 or more " + "labels"); + } + try { + Name newname = new Name(); + newname.append(name, offset(n), getlabels() - n); + return newname; + } catch (NameTooLongException e) { + throw new IllegalStateException("Name.subdomain: concatenate failed"); + } + } + /** * Generates a new Name with the first n labels replaced by a wildcard * @@ -893,6 +912,7 @@ class Name implements Comparable, Serializable { /** * Computes a hashcode based on the value */ + @Override public int hashCode() { if (hashcode != 0) { @@ -909,6 +929,7 @@ class Name implements Comparable, Serializable { /** * Are these two Names equivalent? */ + @Override public boolean equals(Object arg) { if (arg == this) { @@ -938,6 +959,7 @@ class Name implements Comparable, Serializable { * * @return The representation of this name as a (printable) String. */ + @Override public String toString() { return toString(false); diff --git a/test/dorkbox/network/dns/NameTest.java b/test/dorkbox/network/dns/NameTest.java index 4aa6b622..a3a99fe6 100644 --- a/test/dorkbox/network/dns/NameTest.java +++ b/test/dorkbox/network/dns/NameTest.java @@ -814,6 +814,15 @@ class NameTest extends TestCase { assertEquals(exp, n); } + public + void test_parent() throws TextParseException { + Name dom = Name.fromString("a.b.c."); + Name exp = Name.fromString("b.c."); + + Name n = dom.parent(1); + assertEquals(exp, n); + } + public void test_wild_abs() throws TextParseException { Name sub = Name.fromString("a.b.c.");