File: net\System\Net\SecureProtocols\AuthenticatedStream.cs
Project: ndp\fx\src\System.csproj (System)
/*++
Copyright (c) 2003 Microsoft Corporation
 
Module Name:
 
    AuthenticatedStream.cs
 
Abstract:
 
    A public contact for a base abstract authenticated stream.
 
Author:
    Alexei Vopilov    Sept 28-2003
 
Revision History:
 
--*/
namespace System.Net.Security {
using System;
using System.IO;
using System.Threading;
using System.Security.Permissions;
using System.Security.Principal;
 
    public abstract class AuthenticatedStream: Stream
    {
        private Stream  _InnerStream;
        private bool    _LeaveStreamOpen;
 
        protected AuthenticatedStream(Stream innerStream, bool leaveInnerStreamOpen)
        {
            if (innerStream == null || innerStream == Stream.Null) {
                throw new ArgumentNullException("innerStream");
            }
 
            if (!innerStream.CanRead || !innerStream.CanWrite) {
                throw new ArgumentException(SR.GetString(SR.net_io_must_be_rw_stream), "innerStream");
            }
 
            _InnerStream = innerStream;
            _LeaveStreamOpen = leaveInnerStreamOpen;
        }
 
        public bool LeaveInnerStreamOpen {
            get {
                return _LeaveStreamOpen;
            }
        }
        //
        //
        protected Stream InnerStream {
            get {
                return _InnerStream;
            }
        }
        //
        //
        protected override void Dispose(bool disposing)
        {
#if DEBUG
            using (GlobalLog.SetThreadKind(ThreadKinds.User)) {
#endif
                try
                {
                    if (disposing)
                    {
                        if (_LeaveStreamOpen)
                        {
                            _InnerStream.Flush();
                        }
                        else
                        {
                            _InnerStream.Close();
                        }
                    }
                }
                finally
                {
                    base.Dispose(disposing);
                }
#if DEBUG
            }
#endif
        }
 
        //
        // General informational properties
        //
        public abstract bool IsAuthenticated         {get;}
        public abstract bool IsMutuallyAuthenticated {get;}
        public abstract bool IsEncrypted             {get;}
        public abstract bool IsSigned                {get;}
        public abstract bool IsServer                {get;}
    }
 
}