Class TdsTlsOutputStream

  • All Implemented Interfaces:
    java.io.Closeable, java.io.Flushable, java.lang.AutoCloseable

    class TdsTlsOutputStream
    extends java.io.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 Summary

      Fields 
      Modifier and Type Field Description
      private java.util.List bufferedRecords
      Used for holding back CKE, CCS and FIN records.
      private int totalSize  
      • Fields inherited from class java.io.FilterOutputStream

        out
    • Constructor Summary

      Constructors 
      Constructor Description
      TdsTlsOutputStream​(java.io.OutputStream out)
      Constructs a TdsTlsOutputStream based on an underlying output stream.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      private void deferRecord​(byte[] record, int len)
      Holds back a record for batched transmission.
      void flush()  
      private void flushBufferedRecords()
      Transmits the buffered batch of records.
      (package private) void putTdsPacket​(byte[] b, int len)
      Write a TDS packet containing the TLS record(s).
      void write​(byte[] b, int off, int len)  
      • Methods inherited from class java.io.FilterOutputStream

        close, write, write
      • Methods inherited from class java.io.OutputStream

        nullOutputStream
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • bufferedRecords

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

        private int totalSize
    • Constructor Detail

      • TdsTlsOutputStream

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

      • 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 java.io.IOException
        Transmits the buffered batch of records.
        Throws:
        java.io.IOException
      • write

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

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

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