// ---------------------------------------------------------------------------- // // Copyright (c) Microsoft Corporation. All rights reserved. // // ---------------------------------------------------------------------------- using System; using Microsoft.Singularity; using Microsoft.Singularity.Channels; using NetStack.Contracts; using Smb.PublicChannels; namespace Smb.PrivateChannels { public enum SmbTransactionError { None = 0, InvalidParameters, Timeout, ConnectionFailed, AuthenticationFailed, ConnectionReset, InternalError, } public rep struct SmbMuxTuple { public int TreeId; public int ProcessId; public int UserId; public int MuxId; } public contract SmbTransactor { in message Request(byte[]! in ExHeap request); out message Response(byte[]! in ExHeap response); in message Transaction2(byte[]! in ExHeap transaction); out message Transaction2Response(byte[]! in ExHeap segment); out message RequestFailed(SmbTransactionError error); // A transactor can create *another* transactor. in message AddTransactor(); out message AckAddTransactor(SmbTransactor.Imp:Ready! imp); out message NakAddTransactor(); state Ready : one { Request? -> WaitingRequestResponse; Transaction2? -> WaitingTransaction2Response; AddTransactor? -> (AckAddTransactor! or NakAddTransactor!) -> Ready; } state WaitingRequestResponse : one { RequestFailed! -> Ready; Response! -> Ready; } state WaitingTransaction2Response : one { RequestFailed! -> Ready; Transaction2Response! -> Ready; } } [Flags] public enum TransactorFlag { None = 0, // If set, then this request is part of negotiating the channel (authentication, options, etc.) // If not set, then Early = 1, } public enum SmbMuxState { Invalid = 0, Disconnected, Connecting, Connected, } // // public enum FileShareAccess // { // None = 0, // Read = 1, // Write = 2, // Delete = 4, // } // // public enum FileCreateDisposition // { // Supersede = 0, // Open = 1, // Create = 2, // OpenIf = 3, // Overwrite = 4, // OverwriteIf = 5, // } // }