Class TSaslClientTransport

All Implemented Interfaces:
Closeable, AutoCloseable

public class TSaslClientTransport extends TEndpointTransport
Wraps another Thrift TTransport, but performs SASL client negotiation on the call to open(). This class will wrap ensuing communication over it, if a SASL QOP is negotiated with the other party.
  • Field Details

    • DEFAULT_MAX_LENGTH

      protected static final int DEFAULT_MAX_LENGTH
      See Also:
    • MECHANISM_NAME_BYTES

      protected static final int MECHANISM_NAME_BYTES
      See Also:
    • STATUS_BYTES

      protected static final int STATUS_BYTES
      See Also:
    • PAYLOAD_LENGTH_BYTES

      protected static final int PAYLOAD_LENGTH_BYTES
      See Also:
    • underlyingTransport

      protected TTransport underlyingTransport
      Transport underlying this one.
  • Constructor Details

  • Method Details

    • getRole

      protected org.apache.thrift.transport.TSaslTransport.SaslRole getRole()
    • handleSaslStartMessage

      protected void handleSaslStartMessage() throws TTransportException, SaslException
      Performs the client side of the initial portion of the Thrift SASL protocol. Generates and sends the initial response to the server, including which mechanism this client wants to use.
      Throws:
      TTransportException
      SaslException
    • setSaslServer

      protected void setSaslServer(SaslServer saslServer)
    • sendSaslMessage

      protected void sendSaslMessage(NegotiationStatus status, byte[] payload) throws TTransportException
      Send a complete Thrift SASL message.
      Parameters:
      status - The status to send.
      payload - The data to send as the payload of this message.
      Throws:
      TTransportException
    • receiveSaslMessage

      protected org.apache.thrift.transport.TSaslTransport.SaslResponse receiveSaslMessage() throws TTransportException
      Read a complete Thrift SASL message.
      Returns:
      The SASL status and payload from this message.
      Throws:
      TTransportException - Thrown if there is a failure reading from the underlying transport, or if a status code of BAD or ERROR is encountered.
    • sendAndThrowMessage

      protected TTransportException sendAndThrowMessage(NegotiationStatus status, String message) throws TTransportException
      Send a Thrift SASL message with the given status (usually BAD or ERROR) and string message, and then throw a TTransportException with the given message.
      Parameters:
      status - The Thrift SASL status code to send. Usually BAD or ERROR.
      message - The optional message to send to the other side.
      Returns:
      always throws TTransportException but declares return type to allow throw sendAndThrowMessage(...) to inform compiler control flow
      Throws:
      TTransportException - Always thrown with the message provided.
    • open

      public void open() throws TTransportException
      Opens the underlying transport if it's not already open and then performs SASL negotiation. If a QOP is negotiated during this SASL handshake, it used for all communication on this transport after this call is complete.
      Specified by:
      open in class TTransport
      Throws:
      TTransportException - if the transport could not be opened
    • getSaslClient

      public SaslClient getSaslClient()
      Get the underlying SaslClient.
      Returns:
      The SaslClient, or null if this transport is backed by a SaslServer.
    • getUnderlyingTransport

      public TTransport getUnderlyingTransport()
      Get the underlying transport that Sasl is using.
      Returns:
      The TTransport transport
    • getSaslServer

      public SaslServer getSaslServer()
      Get the underlying SaslServer.
      Returns:
      The SaslServer, or null if this transport is backed by a SaslClient.
    • readLength

      protected int readLength() throws TTransportException
      Read a 4-byte word from the underlying transport and interpret it as an integer.
      Returns:
      The length prefix of the next SASL message to read.
      Throws:
      TTransportException - Thrown if reading from the underlying transport fails.
    • writeLength

      protected void writeLength(int length) throws TTransportException
      Write the given integer as 4 bytes to the underlying transport.
      Parameters:
      length - The length prefix of the next SASL message to write.
      Throws:
      TTransportException - Thrown if writing to the underlying transport fails.
    • close

      public void close()
      Closes the underlying transport and disposes of the SASL implementation underlying this transport.
      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Closeable
      Specified by:
      close in class TTransport
    • isOpen

      public boolean isOpen()
      True if the underlying transport is open and the SASL handshake is complete.
      Specified by:
      isOpen in class TTransport
      Returns:
      True if the transport is open.
    • read

      public int read(byte[] buf, int off, int len) throws TTransportException
      Read from the underlying transport. Unwraps the contents if a QOP was negotiated during the SASL handshake.
      Specified by:
      read in class TTransport
      Parameters:
      buf - Array to read into
      off - Index to start reading at
      len - Maximum number of bytes to read
      Returns:
      The number of bytes actually read
      Throws:
      TTransportException - if there was an error reading data
    • write

      public void write(byte[] buf, int off, int len) throws TTransportException
      Write to the underlying transport.
      Specified by:
      write in class TTransport
      Parameters:
      buf - The output data buffer
      off - The offset to start writing from
      len - The number of bytes to write
      Throws:
      TTransportException - if there was an error writing data
    • flush

      public void flush() throws TTransportException
      Flushes to the underlying transport. Wraps the contents if a QOP was negotiated during the SASL handshake.
      Overrides:
      flush in class TTransport
      Throws:
      TTransportException - if there was an error writing out data.