/// <summary>
 /// Deep copy constructor.
 /// </summary>
 public SmbTreeConnectAndxResponsePacket(SmbTreeConnectAndxResponsePacket packet)
     : base(packet)
 {
 }
        protected override SmbPacket CreateSmbResponsePacket(
            SmbPacket request,
            SmbHeader smbHeader,
            Channel channel)
        {
            SmbPacket smbPacket = null;

            // error packet
            SmbStatus packetStatus = (SmbStatus)smbHeader.Status;

            // error packet
            if (packetStatus != SmbStatus.STATUS_SUCCESS &&
                packetStatus != SmbStatus.STATUS_MORE_PROCESSING_REQUIRED &&
                packetStatus != SmbStatus.STATUS_BUFFER_OVERFLOW)
            {
                smbPacket           = new SmbErrorResponsePacket();
                smbPacket.SmbHeader = smbHeader;

                return(smbPacket);
            }

            // success packet
            switch (smbHeader.Command)
            {
            case SmbCommand.SMB_COM_NEGOTIATE:
                if (smbClient.Capability.IsSupportsExtendedSecurity)
                {
                    smbPacket = new SmbNegotiateResponsePacket();
                }
                else
                {
                    smbPacket = new SmbNegotiateImplicitNtlmResponsePacket();
                }
                break;

            case SmbCommand.SMB_COM_SESSION_SETUP_ANDX:
                if (smbClient.Capability.IsSupportsExtendedSecurity)
                {
                    smbPacket = new SmbSessionSetupAndxResponsePacket();
                }
                else
                {
                    smbPacket = new SmbSessionSetupImplicitNtlmAndxResponsePacket();
                }
                break;

            case SmbCommand.SMB_COM_TREE_CONNECT_ANDX:
                smbPacket = new SmbTreeConnectAndxResponsePacket();
                break;

            case SmbCommand.SMB_COM_TREE_DISCONNECT:
                smbPacket = new SmbTreeDisconnectResponsePacket();
                break;

            case SmbCommand.SMB_COM_LOGOFF_ANDX:
                smbPacket = new SmbLogoffAndxResponsePacket();
                break;

            case SmbCommand.SMB_COM_NT_CREATE_ANDX:
                smbPacket = new SmbNtCreateAndxResponsePacket();
                break;

            case SmbCommand.SMB_COM_CLOSE:
                smbPacket = new SmbCloseResponsePacket();
                break;

            case SmbCommand.SMB_COM_OPEN_ANDX:
                smbPacket = new SmbOpenAndxResponsePacket();
                break;

            case SmbCommand.SMB_COM_WRITE_ANDX:
                smbPacket = new SmbWriteAndxResponsePacket();
                break;

            case SmbCommand.SMB_COM_READ_ANDX:
                smbPacket = new SmbReadAndxResponsePacket();
                break;

            case SmbCommand.SMB_COM_TRANSACTION:
                smbPacket = this.CreateTransactionResponsePacket(request, smbHeader, channel);

                break;

            case SmbCommand.SMB_COM_TRANSACTION2:
                smbPacket = this.CreateTransaction2ResponsePacket(request, smbHeader, channel);

                break;

            case SmbCommand.SMB_COM_NT_TRANSACT:
                smbPacket = this.CreateNtTransactionResponsePacket(request, smbHeader, channel);

                break;

            default:
                break;
            }
            if (smbPacket != null)
            {
                smbPacket.SmbHeader = smbHeader;
                return(smbPacket);
            }

            return(base.CreateSmbResponsePacket(request, smbHeader, channel));
        }
 /// <summary>
 /// Verify whether the two response are equal or not 
 /// </summary>
 /// <param name="response"> The First Response </param>
 /// <param name="response2"> The Second Response </param>
 private bool VerifyTreeConnectResponse(
     SmbTreeConnectAndxResponsePacket response,
     SmbTreeConnectAndxResponsePacket response2)
 {
     return (response.IsSignRequired == response2.IsSignRequired)
         && (response.PacketType == response2.PacketType)
         && (response.SmbData.ByteCount == response2.SmbData.ByteCount)
         && CompareArrayEquals(response.SmbData.NativeFileSystem, response.SmbData.NativeFileSystem)
         && CompareArrayEquals(response.SmbData.Service, response.SmbData.Service)
         & (response.SmbParameters.AndXCommand == response2.SmbParameters.AndXCommand)
         && (response.SmbParameters.AndXOffset == response2.SmbParameters.AndXOffset)
         && (response.SmbParameters.AndXReserved == response2.SmbParameters.AndXReserved)
         && (response.SmbParameters.GuestMaximalShareAccessRights ==
         response2.SmbParameters.GuestMaximalShareAccessRights)
         && (response.SmbParameters.MaximalShareAccessRights == response2.SmbParameters.MaximalShareAccessRights)
         && (response.SmbParameters.OptionalSupport == response2.SmbParameters.OptionalSupport)
         && (response.SmbParameters.WordCount == response2.SmbParameters.WordCount);
 }