Example #1
0
        internal override void Dispose()
        {
            SNIPacket packetHandle    = _sniPacket;
            SNIHandle sessionHandle   = _sessionHandle;
            SNIPacket asyncAttnPacket = _sniAsyncAttnPacket;

            _sniPacket          = null;
            _sessionHandle      = null;
            _sniAsyncAttnPacket = null;
            _marsConnection     = null;

            DisposeCounters();

            if (null != sessionHandle || null != packetHandle)
            {
                packetHandle?.Dispose();
                asyncAttnPacket?.Dispose();

                if (sessionHandle != null)
                {
                    sessionHandle.Dispose();
                    DecrementPendingCallbacks(true); // Will dispose of GC handle.
                }
            }

            DisposePacketCache();
        }
Example #2
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="connection">MARS connection</param>
 /// <param name="sessionId">MARS session ID</param>
 /// <param name="callbackObject">Callback object</param>
 /// <param name="async">true if connection is asynchronous</param>
 public SNIMarsHandle(SNIMarsConnection connection, ushort sessionId, TdsParserStateObject callbackObject, out SNIError sniError)
 {
     _sessionId      = sessionId;
     _connection     = connection;
     _callbackObject = callbackObject;
     sniError        = SendControlPacket(SNISMUXFlags.SMUX_SYN, true);
 }
Example #3
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="connection">MARS connection</param>
 /// <param name="sessionId">MARS session ID</param>
 /// <param name="callbackObject">Callback object</param>
 /// <param name="async">true if connection is asynchronous</param>
 public SNIMarsHandle(SNIMarsConnection connection, ushort sessionId, object callbackObject, bool async)
 {
     _sessionId      = sessionId;
     _connection     = connection;
     _callbackObject = callbackObject;
     SendControlPacket(SNISMUXFlags.SMUX_SYN);
     _status = TdsEnums.SNI_SUCCESS;
 }
Example #4
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="connection">MARS connection</param>
 /// <param name="sessionId">MARS session ID</param>
 /// <param name="callbackObject">Callback object</param>
 /// <param name="async">true if connection is asynchronous</param>
 public SNIMarsHandle(SNIMarsConnection connection, ushort sessionId, object callbackObject, bool async)
 {
     _sessionId = sessionId;
     _connection = connection;
     _callbackObject = callbackObject;
     SendControlPacket(SNISMUXFlags.SMUX_SYN);
     _status = TdsEnums.SNI_SUCCESS;
 }
Example #5
0
        /// <summary>
        /// Enables MARS for a TdsParserStateObject and returns its new handle.
        /// </summary>
        public static SNIMarsHandle EnableMars(TdsParserStateObject stateObject, out SNIError sniError)
        {
            Debug.Assert(!(stateObject.Handle is SNIMarsHandle), "Cannot enable MARS on a SNIMarsHandle");
            SNIMarsConnection marsConnection = new SNIMarsConnection(stateObject.Handle);

            marsConnection.StartReceive();
            return(marsConnection.CreateSession(stateObject, out sniError));
        }
Example #6
0
        internal override uint EnableMars(ref uint info)
        {
            _marsConnection = new SNIMarsConnection(Handle);
            if (_marsConnection.StartReceive() == TdsEnums.SNI_SUCCESS_IO_PENDING)
            {
                return(TdsEnums.SNI_SUCCESS);
            }

            return(TdsEnums.SNI_ERROR);
        }
Example #7
0
        /// <summary>
        /// Create a MARS connection
        /// </summary>
        /// <param name="lowerHandle">Lower SNI handle</param>
        /// <returns>SNI error code</returns>
        public uint CreateMarsConnection(SNIHandle lowerHandle)
        {
            SNIMarsConnection connection = new SNIMarsConnection(lowerHandle);

            if (_connections.TryAdd(lowerHandle, connection))
            {
                return connection.StartReceive();
            }
            else
            {
                return TdsEnums.SNI_ERROR;
            }
        }
Example #8
0
        /// <summary>
        /// Create a MARS connection
        /// </summary>
        /// <param name="lowerHandle">Lower SNI handle</param>
        /// <returns>SNI error code</returns>
        public uint CreateMarsConnection(SNIHandle lowerHandle)
        {
            SNIMarsConnection connection = new SNIMarsConnection(lowerHandle);

            if (_connections.TryAdd(lowerHandle, connection))
            {
                return(connection.StartReceive());
            }
            else
            {
                return(TdsEnums.SNI_ERROR);
            }
        }
Example #9
0
        internal override void Dispose()
        {
            SNIHandle sessionHandle = _sessionHandle;

            _sessionHandle  = null;
            _marsConnection = null;

            DisposeCounters();

            if (sessionHandle != null)
            {
                sessionHandle.Dispose();
                DecrementPendingCallbacks(true); // Will dispose of GC handle.
            }

            DisposePacketCache();
        }
Example #10
0
        /// <summary>
        /// Create MARS handle
        /// </summary>
        /// <param name="callbackObject">Asynchronous I/O callback object</param>
        /// <param name="physicalConnection">SNI connection handle</param>
        /// <param name="defaultBufferSize">Default buffer size</param>
        /// <param name="async">Asynchronous connection</param>
        /// <returns>SNI error status</returns>
        public SNIHandle CreateMarsHandle(object callbackObject, SNIHandle physicalConnection, int defaultBufferSize, bool async)
        {
            SNIMarsConnection connection = SNIMarsManager.Singleton.GetConnection(physicalConnection);

            return(connection.CreateSession(callbackObject, async));
        }