All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.minidns.dnslabel.LdhLabel Maven / Gradle / Ivy

/*
 * Copyright 2015-2024 the original author or authors
 *
 * This software is licensed under the Apache License, Version 2.0,
 * the GNU Lesser General Public License version 2 or later ("LGPL")
 * and the WTFPL.
 * You may choose either license to govern your use of this software only
 * upon the condition that you accept all of the terms of either
 * the Apache License 2.0, the LGPL 2.1+ or the WTFPL.
 */
package org.minidns.dnslabel;

/**
 * A LDH (Letters, Digits, Hyphen) label, which is the
 * classical label form.
 * 

* Note that it is a common misconception that LDH labels can not start with a * digit. The origin of this misconception is likely that * RFC 1034 * § 3.5 specified *

*
* They [i.e, DNS labels] must start with a letter, end with a letter or digit, * and have as interior characters only letters, digits, and hyphen. *
. * However, this was relaxed in * RFC 1123 § * 2.1 *
* One aspect of host name syntax is hereby changed: the restriction on the first * character is relaxed to allow either a letter or a digit. *
* and later summarized in * RFC 3696 § * 2: *
* If the hyphen is used, it is not permitted to appear at either the beginning * or end of a label. *
* Furthermore * RFC * 5890 § 2.3.1 only mentions the requirement that hyphen must not be the * first or last character of a LDH label. * * @see RFC 5890 § * 2.3.1. LDH Label * */ public abstract class LdhLabel extends DnsLabel { protected LdhLabel(String label) { super(label); } public static boolean isLdhLabel(String label) { if (label.isEmpty()) { return false; } if (LeadingOrTrailingHyphenLabel.isLeadingOrTrailingHypenLabelInternal(label)) { return false; } return consistsOnlyOfLettersDigitsAndHypen(label); } protected static LdhLabel fromInternal(String label) { assert isLdhLabel(label); if (ReservedLdhLabel.isReservedLdhLabel(label)) { // Label starts with '??--'. Now let us see if it is a XN-Label, starting with 'xn--', but be aware that the // 'xn' part is case insensitive. The XnLabel.isXnLabelInternal(String) method takes care of this. if (XnLabel.isXnLabelInternal(label)) { return XnLabel.fromInternal(label); } else { return new ReservedLdhLabel(label); } } return new NonReservedLdhLabel(label); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy