Added in [API level 24](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels) Summary: [Ctors](https://developer.android.com/reference/javax/net/ssl/SNIHostName#pubctors) \| [Methods](https://developer.android.com/reference/javax/net/ssl/SNIHostName#pubmethods) \| [Inherited Methods](https://developer.android.com/reference/javax/net/ssl/SNIHostName#inhmethods)

# SNIHostName


`
public

final

class
SNIHostName
`


`


`

`

extends https://developer.android.com/reference/javax/net/ssl/SNIServerName


`

`


`

|---|---|---|
| [java.lang.Object](https://developer.android.com/reference/java/lang/Object) |||
| ↳ | [javax.net.ssl.SNIServerName](https://developer.android.com/reference/javax/net/ssl/SNIServerName) ||
|   | ↳ | javax.net.ssl.SNIHostName |

<br />

*** ** * ** ***

Instances of this class represent a server name of type
`https://developer.android.com/reference/javax/net/ssl/StandardConstants#SNI_HOST_NAME` in a Server Name
Indication (SNI) extension.


As described in section 3, "Server Name Indication", of
[TLS Extensions (RFC 6066)](http://www.ietf.org/rfc/rfc6066.txt),
"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](http://www.ietf.org/rfc/rfc5890.txt).


Note that `SNIHostName` objects are immutable.
**See also:**

- `https://developer.android.com/reference/javax/net/ssl/SNIServerName`
- `https://developer.android.com/reference/javax/net/ssl/StandardConstants#SNI_HOST_NAME`

## Summary

| ### Public constructors ||
|---|---|
| ` https://developer.android.com/reference/javax/net/ssl/SNIHostName#SNIHostName(byte[])(byte[] encoded) ` Creates an `SNIHostName` using the specified encoded value. |
| ` https://developer.android.com/reference/javax/net/ssl/SNIHostName#SNIHostName(java.lang.String)(https://developer.android.com/reference/java/lang/String hostname) ` Creates an `SNIHostName` using the specified hostname. |

| ### Public methods ||
|---|---|
| ` static https://developer.android.com/reference/javax/net/ssl/SNIMatcher` | ` https://developer.android.com/reference/javax/net/ssl/SNIHostName#createSNIMatcher(java.lang.String)(https://developer.android.com/reference/java/lang/String regex) ` Creates an `https://developer.android.com/reference/javax/net/ssl/SNIMatcher` object for `SNIHostName`s. |
| ` boolean` | ` https://developer.android.com/reference/javax/net/ssl/SNIHostName#equals(java.lang.Object)(https://developer.android.com/reference/java/lang/Object other) ` Compares this server name to the specified object. |
| ` https://developer.android.com/reference/java/lang/String` | ` https://developer.android.com/reference/javax/net/ssl/SNIHostName#getAsciiName()() ` Returns the `https://developer.android.com/reference/java/nio/charset/StandardCharsets#US_ASCII`-compliant hostname of this `SNIHostName` object. |
| ` int` | ` https://developer.android.com/reference/javax/net/ssl/SNIHostName#hashCode()() ` Returns a hash code value for this `SNIHostName`. |
| ` https://developer.android.com/reference/java/lang/String` | ` https://developer.android.com/reference/javax/net/ssl/SNIHostName#toString()() ` Returns a string representation of the object, including the DNS hostname in this `SNIHostName` object. |

| ### Inherited methods |
|---|---|
| From class ` https://developer.android.com/reference/javax/net/ssl/SNIServerName ` |---|---| | ` boolean` | ` https://developer.android.com/reference/javax/net/ssl/SNIServerName#equals(java.lang.Object)(https://developer.android.com/reference/java/lang/Object other) ` Indicates whether some other object is "equal to" this server name. | | ` final byte[]` | ` https://developer.android.com/reference/javax/net/ssl/SNIServerName#getEncoded()() ` Returns a copy of the encoded server name value of this server name. | | ` final int` | ` https://developer.android.com/reference/javax/net/ssl/SNIServerName#getType()() ` Returns the name type of this server name. | | ` int` | ` https://developer.android.com/reference/javax/net/ssl/SNIServerName#hashCode()() ` Returns a hash code value for this server name. | | ` https://developer.android.com/reference/java/lang/String` | ` https://developer.android.com/reference/javax/net/ssl/SNIServerName#toString()() ` Returns a string representation of this server name, including the server name type and the encoded server name value in this `SNIServerName` object. | ||
| From class ` https://developer.android.com/reference/java/lang/Object ` |---|---| | ` https://developer.android.com/reference/java/lang/Object` | ` https://developer.android.com/reference/java/lang/Object#clone()() ` Creates and returns a copy of this object. | | ` boolean` | ` https://developer.android.com/reference/java/lang/Object#equals(java.lang.Object)(https://developer.android.com/reference/java/lang/Object obj) ` Indicates whether some other object is "equal to" this one. | | ` void` | ` https://developer.android.com/reference/java/lang/Object#finalize()() ` Called by the garbage collector on an object when garbage collection determines that there are no more references to the object. | | ` final https://developer.android.com/reference/java/lang/Class<?>` | ` https://developer.android.com/reference/java/lang/Object#getClass()() ` Returns the runtime class of this `Object`. | | ` int` | ` https://developer.android.com/reference/java/lang/Object#hashCode()() ` Returns a hash code value for the object. | | ` final void` | ` https://developer.android.com/reference/java/lang/Object#notify()() ` Wakes up a single thread that is waiting on this object's monitor. | | ` final void` | ` https://developer.android.com/reference/java/lang/Object#notifyAll()() ` Wakes up all threads that are waiting on this object's monitor. | | ` https://developer.android.com/reference/java/lang/String` | ` https://developer.android.com/reference/java/lang/Object#toString()() ` Returns a string representation of the object. | | ` final void` | ` https://developer.android.com/reference/java/lang/Object#wait(long,%20int)(long timeoutMillis, int nanos) ` Causes the current thread to wait until it is awakened, typically by being *notified* or *interrupted*, or until a certain amount of real time has elapsed. | | ` final void` | ` https://developer.android.com/reference/java/lang/Object#wait(long)(long timeoutMillis) ` Causes the current thread to wait until it is awakened, typically by being *notified* or *interrupted*, or until a certain amount of real time has elapsed. | | ` final void` | ` https://developer.android.com/reference/java/lang/Object#wait()() ` Causes the current thread to wait until it is awakened, typically by being *notified* or *interrupted*. | ||

## Public constructors

### SNIHostName

Added in [API level 24](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public SNIHostName (byte[] encoded)
```

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](http://www.ietf.org/rfc/rfc6066.txt),
the encoded name value of a hostname is
`https://developer.android.com/reference/java/nio/charset/StandardCharsets#US_ASCII`-compliant. However, in the previous
version of the SNI extension (
[RFC 4366](http://www.ietf.org/rfc/rfc4366.txt)),
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
`https://developer.android.com/reference/java/nio/charset/StandardCharsets#UTF_8`, as well as
`https://developer.android.com/reference/java/nio/charset/StandardCharsets#US_ASCII`. `https://developer.android.com/reference/java/net/IDN#toASCII(java.lang.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](http://www.ietf.org/rfc/rfc6066.txt),
please always use `https://developer.android.com/reference/java/nio/charset/StandardCharsets#US_ASCII`-compliant charset
and enforce the restrictions on ASCII characters in hostnames (see
[RFC 3490](http://www.ietf.org/rfc/rfc3490.txt),
[RFC 1122](http://www.ietf.org/rfc/rfc1122.txt),
[RFC 1123](http://www.ietf.org/rfc/rfc1123.txt))
for `encoded` argument, or use
`https://developer.android.com/reference/javax/net/ssl/SNIHostName#SNIHostName(java.lang.String)` instead.


The `encoded` argument is illegal if it:

- `encoded` is empty,
- `encoded` ends with a trailing dot,
- `encoded` is not encoded in `https://developer.android.com/reference/java/nio/charset/StandardCharsets#US_ASCII` or `https://developer.android.com/reference/java/nio/charset/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.

<br />

| Parameters ||
|---|---|
| `encoded` | `byte`: the encoded hostname of this server name <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/lang/IllegalArgumentException` | if `encoded` is illegal |
| `https://developer.android.com/reference/java/lang/NullPointerException` | if `encoded` is `null` |

### SNIHostName

Added in [API level 24](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public SNIHostName (String hostname)
```

Creates an `SNIHostName` using the specified hostname.


Note that per [RFC 6066](http://www.ietf.org/rfc/rfc6066.txt),
the encoded server name value of a hostname is
`https://developer.android.com/reference/java/nio/charset/StandardCharsets#US_ASCII`-compliant. In this method,
`hostname` can be a user-friendly Internationalized Domain Name
(IDN). `https://developer.android.com/reference/java/net/IDN#toASCII(java.lang.String,%20int)` is used to enforce the
restrictions on ASCII characters in hostnames (see
[RFC 3490](http://www.ietf.org/rfc/rfc3490.txt),
[RFC 1122](http://www.ietf.org/rfc/rfc1122.txt),
[RFC 1123](http://www.ietf.org/rfc/rfc1123.txt)) 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.

<br />

<br />

| Parameters ||
|---|---|
| `hostname` | `String`: the hostname of this server name <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/lang/IllegalArgumentException` | if `hostname` is illegal |
| `https://developer.android.com/reference/java/lang/NullPointerException` | if `hostname` is `null` |

## Public methods

### createSNIMatcher

Added in [API level 24](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static SNIMatcher createSNIMatcher (String regex)
```

Creates an `https://developer.android.com/reference/javax/net/ssl/SNIMatcher` object for `SNIHostName`s.


This method can be used by a server to verify the acceptable
`SNIHostName`s. 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".

<br />

<br />

| Parameters ||
|---|---|
| `regex` | `String`: the [regular expression pattern](https://java/util/regex/Pattern.html#sum) representing the hostname(s) to match <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/javax/net/ssl/SNIMatcher` | a `SNIMatcher` object for `SNIHostName`s <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/lang/NullPointerException` | if `regex` is `null` |
| `https://developer.android.com/reference/java/util/regex/PatternSyntaxException` | if the regular expression's syntax is invalid |

### equals

Added in [API level 24](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public boolean equals (Object other)
```

Compares this server name to the specified object.


Per [RFC 6066](http://www.ietf.org/rfc/rfc6066.txt), 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.

<br />

| Parameters ||
|---|---|
| `other` | `Object`: the other server name object to compare with. <br /> |

| Returns ||
|---|---|
| `boolean` | true if, and only if, the `other` is considered equal to this instance <br /> |

### getAsciiName

Added in [API level 24](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public String getAsciiName ()
```

Returns the `https://developer.android.com/reference/java/nio/charset/StandardCharsets#US_ASCII`-compliant hostname of
this `SNIHostName` object.


Note that, per
[RFC 6066](http://www.ietf.org/rfc/rfc6066.txt), the
returned hostname may be an internationalized domain name that
contains A-labels. See
[RFC 5890](http://www.ietf.org/rfc/rfc5890.txt)
for more information about the detailed A-label specification.

<br />

| Returns ||
|---|---|
| `https://developer.android.com/reference/java/lang/String` | the `https://developer.android.com/reference/java/nio/charset/StandardCharsets#US_ASCII`-compliant hostname of this `SNIHostName` object <br /> |

### hashCode

Added in [API level 24](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public int hashCode ()
```

Returns a hash code value for this `SNIHostName`.


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

<br />

| Returns ||
|---|---|
| `int` | a hash code value for this `SNIHostName`. <br /> |

### toString

Added in [API level 24](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public String toString ()
```

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.

<br />

| Returns ||
|---|---|
| `https://developer.android.com/reference/java/lang/String` | a string representation of the object. <br /> |