/// <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); }