Added in API level 24

SNIHostName

class SNIHostName : SNIServerName
kotlin.Any
   ↳ javax.net.ssl.SNIServerName
   ↳ javax.net.ssl.SNIHostName

Instances of this class represent a server name of type host_name in a Server Name Indication (SNI) extension.

As described in section 3, "Server Name Indication", of TLS Extensions (RFC 6066), "HostName" contains the fully qualified DNS hostname of the server, as understood by the client. The encoded server name value of a hostname is represented as a byte string using ASCII encoding without a trailing dot. This allows the support of Internationalized Domain Names (IDN) through the use of A-labels (the ASCII-Compatible Encoding (ACE) form of a valid string of Internationalized Domain Names for Applications (IDNA)) defined in RFC 5890.

Note that SNIHostName objects are immutable.

Summary

Public constructors
SNIHostName(hostname: String!)

Creates an SNIHostName using the specified hostname.

Creates an SNIHostName using the specified encoded value.

Public methods
static SNIMatcher!

Creates an SNIMatcher object for SNIHostNames.

Boolean
equals(other: Any?)

Compares this server name to the specified object.

String!

Returns the StandardCharsets#US_ASCII-compliant hostname of this SNIHostName object.

Int

Returns a hash code value for this SNIHostName.

String

Returns a string representation of the object, including the DNS hostname in this SNIHostName object.

Inherited functions

Public constructors

SNIHostName

Added in API level 24
SNIHostName(hostname: String!)

Creates an SNIHostName using the specified hostname.

Note that per RFC 6066, the encoded server name value of a hostname is StandardCharsets#US_ASCII-compliant. In this method, hostname can be a user-friendly Internationalized Domain Name (IDN). IDN#toASCII(String, int) is used to enforce the restrictions on ASCII characters in hostnames (see RFC 3490, RFC 1122, RFC 1123) and translate the hostname into ASCII Compatible Encoding (ACE), as:

IDN.toASCII(hostname, IDN.USE_STD3_ASCII_RULES);
  

The hostname argument is illegal if it:

  • hostname is empty,
  • hostname ends with a trailing dot,
  • hostname is not a valid Internationalized Domain Name (IDN) compliant with the RFC 3490 specification.
Parameters
hostname String!: the hostname of this server name
Exceptions
java.lang.NullPointerException if hostname is null
java.lang.IllegalArgumentException if hostname is illegal

SNIHostName

Added in API level 24
SNIHostName(encoded: ByteArray!)

Creates an SNIHostName using the specified encoded value.

This method is normally used to parse the encoded name value in a requested SNI extension.

Per RFC 6066, the encoded name value of a hostname is StandardCharsets#US_ASCII-compliant. However, in the previous version of the SNI extension ( RFC 4366), the encoded hostname is represented as a byte string using UTF-8 encoding. For the purpose of version tolerance, this method allows that the charset of encoded argument can be StandardCharsets#UTF_8, as well as StandardCharsets#US_ASCII. IDN#toASCII(String) is used to translate the encoded argument into ASCII Compatible Encoding (ACE) hostname.

It is strongly recommended that this constructor is only used to parse the encoded name value in a requested SNI extension. Otherwise, to comply with RFC 6066, please always use StandardCharsets#US_ASCII-compliant charset and enforce the restrictions on ASCII characters in hostnames (see RFC 3490, RFC 1122, RFC 1123) for encoded argument, or use SNIHostName#SNIHostName(String) instead.

The encoded argument is illegal if it:

  • encoded is empty,
  • encoded ends with a trailing dot,
  • encoded is not encoded in StandardCharsets#US_ASCII or StandardCharsets#UTF_8-compliant charset,
  • encoded is not a valid Internationalized Domain Name (IDN) compliant with the RFC 3490 specification.

Note that the encoded byte array is cloned to protect against subsequent modification.

Parameters
encoded ByteArray!: the encoded hostname of this server name
Exceptions
java.lang.NullPointerException if encoded is null
java.lang.IllegalArgumentException if encoded is illegal

Public methods

createSNIMatcher

Added in API level 24
static fun createSNIMatcher(regex: String!): SNIMatcher!

Creates an SNIMatcher object for SNIHostNames.

This method can be used by a server to verify the acceptable SNIHostNames. For example,

SNIMatcher matcher =
          SNIHostName.createSNIMatcher("www\\.example\\.com");
  
will accept the hostname "www.example.com".
SNIMatcher matcher =
          SNIHostName.createSNIMatcher("www\\.example\\.(com|org)");
  
will accept hostnames "www.example.com" and "www.example.org".
Parameters
regex String!: the regular expression pattern representing the hostname(s) to match
Return
SNIMatcher! a SNIMatcher object for SNIHostNames
Exceptions
java.lang.NullPointerException if regex is null
java.util.regex.PatternSyntaxException if the regular expression's syntax is invalid

equals

Added in API level 24
fun equals(other: Any?): Boolean

Compares this server name to the specified object.

Per RFC 6066, DNS hostnames are case-insensitive. Two server hostnames are equal if, and only if, they have the same name type, and the hostnames are equal in a case-independent comparison.

Parameters
obj the reference object with which to compare.
other Any?: the other server name object to compare with.
Return
Boolean true if, and only if, the other is considered equal to this instance

getAsciiName

Added in API level 24
fun getAsciiName(): String!

Returns the StandardCharsets#US_ASCII-compliant hostname of this SNIHostName object.

Note that, per RFC 6066, the returned hostname may be an internationalized domain name that contains A-labels. See RFC 5890 for more information about the detailed A-label specification.

Return
String! the StandardCharsets#US_ASCII-compliant hostname of this SNIHostName object

hashCode

Added in API level 24
fun hashCode(): Int

Returns a hash code value for this SNIHostName.

The hash code value is generated using the case-insensitive hostname of this SNIHostName.

Return
Int a hash code value for this SNIHostName.

toString

Added in API level 24
fun toString(): String

Returns a string representation of the object, including the DNS hostname in this SNIHostName object.

The exact details of the representation are unspecified and subject to change, but the following may be regarded as typical:

"type=host_name (0), value=<hostname>"
  
The "<hostname>" is an ASCII representation of the hostname, which may contains A-labels. For example, a returned value of an pseudo hostname may look like:
"type=host_name (0), value=www.example.com"
  
or
"type=host_name (0), value=xn--fsqu00a.xn--0zwm56d"
  

Please NOTE that the exact details of the representation are unspecified and subject to change.

Return
String a string representation of the object.