/// <exception cref="SharpCifs.Smb.SmbException"></exception> internal virtual void Send(ServerMessageBlock request, ServerMessageBlock response ) { lock (Session.Transport()) { if (response != null) { response.Received = false; } TreeConnect(request, response); if (request == null || (response != null && response.Received)) { return; } if (Service.Equals("A:") == false) { switch (request.Command) { case ServerMessageBlock.SmbComOpenAndx: case ServerMessageBlock.SmbComNtCreateAndx: case ServerMessageBlock.SmbComReadAndx: case ServerMessageBlock.SmbComWriteAndx: case ServerMessageBlock.SmbComClose: case ServerMessageBlock.SmbComTreeDisconnect: { break; } case ServerMessageBlock.SmbComTransaction: case ServerMessageBlock.SmbComTransaction2: { switch (((SmbComTransaction)request).SubCommand & unchecked (0xFF)) { case SmbComTransaction.NetShareEnum: case SmbComTransaction.NetServerEnum2: case SmbComTransaction.NetServerEnum3: case SmbComTransaction.TransPeekNamedPipe: case SmbComTransaction.TransWaitNamedPipe: case SmbComTransaction.TransCallNamedPipe: case SmbComTransaction.TransTransactNamedPipe: case SmbComTransaction.Trans2GetDfsReferral: { break; } default: { throw new SmbException("Invalid operation for " + Service + " service"); } } break; } default: { throw new SmbException("Invalid operation for " + Service + " service" + request); } } } request.Tid = Tid; if (InDfs && !Service.Equals("IPC") && !string.IsNullOrEmpty(request.Path)) { request.Flags2 = SmbConstants.Flags2ResolvePathsInDfs; request.Path = '\\' + Session.Transport().TconHostName + '\\' + Share + request.Path; } try { Session.Send(request, response); } catch (SmbException se) { if (se.GetNtStatus() == NtStatus.NtStatusNetworkNameDeleted) { TreeDisconnect(true); } throw; } } }