示例#1
0
 internal TcpSignedStream(TcpStream tcpStream, SecurityContext securityContext) : base(tcpStream, securityContext)
 {
 }
        internal TcpSecureStream(TcpStream tcpStream, SecurityContext securityContext) : base(tcpStream)
        {
            if (securityContext == null)
            {
                throw new ArgumentNullException("securityContext");
            }
            this.securityContext = securityContext;
            try
            {
                switch (this.securityContext.SecurityContextMode)
                {
                case SecurityContextMode.block:
                {
                    Sizes sizes = (Sizes)SSPIWrapper.QueryContextAttributes(securityContext, ContextAttribute.Sizes);
                    this.maxTokenSize            = Math.Max(sizes.cbSecurityTrailer, sizes.cbMaxSignature);
                    this.maxEncryptionBufferSize = Math.Min(sizes.cbMaxToken, 65535);
                    if (this.maxTokenSize > 65535)
                    {
                        throw new XmlaStreamException(XmlaSR.TcpStream_MaxSignatureExceedsProtocolLimit);
                    }
                    this.tokenBufferForWrite = new byte[this.maxTokenSize];
                    this.tokenBufferForRead  = new byte[this.maxTokenSize];
                    this.securityBuffers     = new SecurityBufferClass[]
                    {
                        new SecurityBufferClass(null, BufferType.Data),
                        new SecurityBufferClass(this.tokenBufferForWrite, BufferType.Token)
                    };
                    break;
                }

                case SecurityContextMode.stream:
                {
                    this.streamSizes = (StreamSizes)SSPIWrapper.QueryContextAttributes(securityContext, ContextAttribute.StreamSizes);
                    if (this.streamSizes.cbMaxMessage > 65535)
                    {
                        throw new XmlaStreamException(XmlaSR.TcpStream_MaxSignatureExceedsProtocolLimit);
                    }
                    this.streamHeaderForWrite  = new ArraySegment <byte>(new byte[this.streamSizes.cbHeader]);
                    this.streamTrailerForWrite = new ArraySegment <byte>(new byte[this.streamSizes.cbTrailer]);
                    this.streamEncryptedDataAccumulatorForRead            = new List <ArraySegment <byte> >();
                    this.streamEncryptedDataAccumulatorForReadFreeBuffers = new List <ArraySegment <byte> >();
                    this.streamDecryptedDataForRead = new List <ArraySegment <byte> >();
                    SecurityBufferClass securityBufferClass  = new SecurityBufferClass(this.streamHeaderForWrite.Array, BufferType.Header);
                    SecurityBufferClass securityBufferClass2 = new SecurityBufferClass(null, BufferType.Data);
                    SecurityBufferClass securityBufferClass3 = new SecurityBufferClass(this.streamTrailerForWrite.Array, BufferType.Trailer);
                    SecurityBufferClass securityBufferClass4 = new SecurityBufferClass(null, BufferType.Empty);
                    this.securityBuffers = new SecurityBufferClass[]
                    {
                        securityBufferClass,
                        securityBufferClass2,
                        securityBufferClass3,
                        securityBufferClass4
                    };
                    break;
                }

                default:
                    throw new XmlaStreamException("SecurityContextMode " + this.securityContext.SecurityContextMode + " not configured!");
                }
            }
            catch (XmlaStreamException)
            {
                throw;
            }
            catch (IOException innerException)
            {
                throw new XmlaStreamException(innerException);
            }
            catch (SocketException innerException2)
            {
                throw new XmlaStreamException(innerException2);
            }
            catch (Win32Exception innerException3)
            {
                throw new XmlaStreamException(innerException3);
            }
        }
示例#3
0
 protected TcpStream(TcpStream originalTcpStream) : base(originalTcpStream)
 {
     this.bufferedStream = originalTcpStream.bufferedStream;
     this.dimeChunkSize  = originalTcpStream.dimeChunkSize;
 }
 internal TcpEncryptedStream(TcpStream tcpStream, SecurityContext securityContext) : base(tcpStream, securityContext)
 {
 }