Class TdsTlsOutputStream

java.lang.Object
java.io.OutputStream
java.io.FilterOutputStream
net.sourceforge.jtds.ssl.TdsTlsOutputStream
All Implemented Interfaces:
Closeable, Flushable, AutoCloseable

class TdsTlsOutputStream extends FilterOutputStream
An output stream that mediates between JSSE and the DB server.

SQL Server 2000 has the following requirements:

  • All handshake records are delivered in TDS packets.
  • The "Client Key Exchange" (CKE), "Change Cipher Spec" (CCS) and "Finished" (FIN) messages are to be submitted in the delivered in both the same TDS packet and the same TCP packet.
  • From then on TLS/SSL records should be transmitted as normal -- the TDS packet is part of the encrypted application data.
Version:
$Id: TdsTlsOutputStream.java,v 1.4 2005-04-28 14:29:31 alin_sinpalean Exp $
Author:
Rob Worsnop, Mike Hutchinson
  • Field Details

    • bufferedRecords

      private final List bufferedRecords
      Used for holding back CKE, CCS and FIN records.
    • totalSize

      private int totalSize
  • Constructor Details

    • TdsTlsOutputStream

      TdsTlsOutputStream(OutputStream out)
      Constructs a TdsTlsOutputStream based on an underlying output stream.
      Parameters:
      out - the underlying output stream
  • Method Details

    • deferRecord

      private void deferRecord(byte[] record, int len)
      Holds back a record for batched transmission.
      Parameters:
      record - the TLS record to buffer
      len - the length of the TLS record to buffer
    • flushBufferedRecords

      private void flushBufferedRecords() throws IOException
      Transmits the buffered batch of records.
      Throws:
      IOException
    • write

      public void write(byte[] b, int off, int len) throws IOException
      Overrides:
      write in class FilterOutputStream
      Throws:
      IOException
    • putTdsPacket

      void putTdsPacket(byte[] b, int len) throws IOException
      Write a TDS packet containing the TLS record(s).
      Parameters:
      b - the TLS record
      len - the length of the TLS record
      Throws:
      IOException
    • flush

      public void flush() throws IOException
      Specified by:
      flush in interface Flushable
      Overrides:
      flush in class FilterOutputStream
      Throws:
      IOException