# Class SNIServerName

java.lang.Object
javax.net.ssl.SNIServerName

Direct Known Subclasses:
  `SNIHostName`

public abstract class SNIServerName extends Object
Instances of this class represent a server name in a Server Name Indication (SNI) extension.

The SNI extension is a feature that extends the SSL/TLS/DTLS protocols to indicate what server name the client is attempting to connect to during handshaking. See section 3, "Server Name Indication", of TLS Extensions (RFC 6066).

`SNIServerName` objects are immutable. Subclasses should not provide methods that can change the state of an instance once it has been created.

Since:
  1.8
External Specifications
  - RFC 6066: Transport Layer Security (TLS) Extensions: Extension Definitions
See Also:
  - `SSLParameters.getServerNames()`
  - `SSLParameters.setServerNames(List)`

- ## Constructor Summary

  Constructors
  Modifier
  Constructor
  Description
  `protected`
  `SNIServerName(int type, byte[] encoded)`
  Creates an `SNIServerName` using the specified name type and encoded value.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `boolean`
  `equals(Object other)`
  Indicates whether some other object is "equal to" this server name.
  `final byte[]`
  `getEncoded()`
  Returns a copy of the encoded server name value of this server name.
  `final int`
  `getType()`
  Returns the name type of this server name.
  `int`
  `hashCode()`
  Returns a hash code value for this server name.
  `String`
  `toString()`
  Returns a string representation of this server name, including the server name type and the encoded server name value in this `SNIServerName` object.

  ### Methods declared in class java.lang.Object

  `clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

- ## Constructor Details

  - ### SNIServerName

    protected SNIServerName(int type, byte[] encoded)
    Creates an `SNIServerName` using the specified name type and encoded value.

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

    Parameters:
      `type` - the type of the server name
      `encoded` - the encoded value of the server name
    Throws:
      `IllegalArgumentException` - if `type` is not in the range of 0 to 255, inclusive.
      `NullPointerException` - if `encoded` is null

- ## Method Details

  - ### getType

    public final int getType()
    Returns the name type of this server name.
    Returns:
      the name type of this server name

  - ### getEncoded

    public final byte[] getEncoded()
    Returns a copy of the encoded server name value of this server name.
    Returns:
      a copy of the encoded server name value of this server name

  - ### equals

    public boolean equals(Object other)
    Indicates whether some other object is "equal to" this server name.
    Overrides:
      `equals` in class `Object`
    Parameters:
      `other` - the reference object with which to compare.
    Returns:
      true if, and only if, `other` is of the same class of this object, and has the same name type and encoded value as this server name.
    See Also:
      - `Object.hashCode()`
      - `HashMap`

  - ### hashCode

    public int hashCode()
    Returns a hash code value for this server name.

    The hash code value is generated using the name type and encoded value of this server name.

    Overrides:
      `hashCode` in class `Object`
    Returns:
      a hash code value for this server name.
    See Also:
      - `Object.equals(java.lang.Object)`
      - `System.identityHashCode(java.lang.Object)`

  - ### toString

    public String toString()
    Returns a string representation of this server name, including the server name type and the encoded server name value in this `SNIServerName` object.

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

             "type=<name type>, value=<name value>"

    In this class, the format of "<name type>" is "[LITERAL] (INTEGER)", where the optional "LITERAL" is the literal name, and INTEGER is the integer value of the name type. The format of "<name value>" is "XX:...:XX", where "XX" is the hexadecimal digit representation of a byte value. For example, a returned value of a pseudo server name may look like:

             "type=(31), value=77:77:77:2E:65:78:61:6D:70:6C:65:2E:63:6E"

    or

             "type=host_name (0), value=77:77:77:2E:65:78:61:6D:70:6C:65:2E:63:6E"

    Please NOTE that the exact details of the representation are unspecified and subject to change, and subclasses may override the method with their own formats.

    Overrides:
      `toString` in class `Object`
    Returns:
      a string representation of this server name