<?xml version="1.0"?>
<doc>
    <assembly>
        <name>Eryph.GuestServices.DevTunnels.Ssh.Extensions</name>
    </assembly>
    <members>
        <member name="T:Eryph.GuestServices.DevTunnels.Ssh.Extensions.DefaultShellSelector">
            <summary>
            Selector that does not consult Hyper-V KVP state. Used when the Extensions
            library is consumed without the guest service (e.g. tests). Honors the
            SSH-sent <c>SHELL</c>/<c>SHELL_ARGS</c> env vars and falls back to platform
            defaults.
            </summary>
        </member>
        <member name="M:Eryph.GuestServices.DevTunnels.Ssh.Extensions.DefaultShellSelector.SelectFromEnvOrDefault(Eryph.GuestServices.DevTunnels.Ssh.Extensions.ShellOverride)">
            <summary>
            Picks a shell from the SSH-sent override, falling back to the platform
            default. Exposed so service-side selectors can reuse the fallback chain
            after their own KVP lookup misses.
            </summary>
        </member>
        <member name="M:Eryph.GuestServices.DevTunnels.Ssh.Extensions.DefaultShellSelector.PlatformDefault">
            <summary>
            The hardcoded platform default — last resort when no override is set
            anywhere.
            </summary>
        </member>
        <member name="T:Eryph.GuestServices.DevTunnels.Ssh.Extensions.ErrorCodes">
            <summary>
            The error codes which are used by the SSH extensions.
            </summary>
            <remarks>
            As the client is used in a Windows environment, we
            return HRESULT-compatible error codes with custom
            facility codes. The following facility codes are used:
            <list type="table">
              <listheader>
                <facility>Facility</facility>
                <description>Description</description>
              </listheader>
              <item>
                <facility><c>0x002</c></facility>
                <description>The custom file transfers</description>
              </item>
            </list>
            </remarks>
        </member>
        <member name="P:Eryph.GuestServices.DevTunnels.Ssh.Extensions.FileTransferJsonContext.Boolean">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:Eryph.GuestServices.DevTunnels.Ssh.Extensions.FileTransferJsonContext.RemoteFileInfo">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:Eryph.GuestServices.DevTunnels.Ssh.Extensions.FileTransferJsonContext.ListRemoteFileInfo">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:Eryph.GuestServices.DevTunnels.Ssh.Extensions.FileTransferJsonContext.DateTime">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:Eryph.GuestServices.DevTunnels.Ssh.Extensions.FileTransferJsonContext.Int64">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:Eryph.GuestServices.DevTunnels.Ssh.Extensions.FileTransferJsonContext.String">
            <summary>
            Defines the source generated JSON serialization contract metadata for a given type.
            </summary>
        </member>
        <member name="P:Eryph.GuestServices.DevTunnels.Ssh.Extensions.FileTransferJsonContext.Default">
            <summary>
            The default <see cref="T:System.Text.Json.Serialization.JsonSerializerContext"/> associated with a default <see cref="T:System.Text.Json.JsonSerializerOptions"/> instance.
            </summary>
        </member>
        <member name="P:Eryph.GuestServices.DevTunnels.Ssh.Extensions.FileTransferJsonContext.GeneratedSerializerOptions">
            <summary>
            The source-generated options associated with this context.
            </summary>
        </member>
        <member name="M:Eryph.GuestServices.DevTunnels.Ssh.Extensions.FileTransferJsonContext.#ctor">
            <inheritdoc/>
        </member>
        <member name="M:Eryph.GuestServices.DevTunnels.Ssh.Extensions.FileTransferJsonContext.#ctor(System.Text.Json.JsonSerializerOptions)">
            <inheritdoc/>
        </member>
        <member name="M:Eryph.GuestServices.DevTunnels.Ssh.Extensions.FileTransferJsonContext.GetTypeInfo(System.Type)">
            <inheritdoc/>
        </member>
        <member name="M:Eryph.GuestServices.DevTunnels.Ssh.Extensions.Forwarders.CommandForwarder.BuildStartInfo(System.String,System.String)">
            <summary>
            Builds the process start info that runs <paramref name="command"/>
            through <paramref name="shellCommand"/> in non-interactive command mode,
            honoring the OpenSSH <c>$SHELL -c "&lt;command&gt;"</c> contract. The
            command is handed to the shell as a single argument via
            <see cref="P:System.Diagnostics.ProcessStartInfo.ArgumentList"/> so the shell parses it —
            rather than the previous naive split-on-space that broke pipes, quoting
            and any path containing a space.
            </summary>
        </member>
        <member name="M:Eryph.GuestServices.DevTunnels.Ssh.Extensions.Forwarders.PtyForwarder.TrySetEnvironmentVariable(System.String,System.String)">
            <summary>
            Records an SSH-sent environment variable that may influence shell
            selection. Returns <see langword="true"/> if the value was accepted
            (recognized name, forwarder not yet started). Unknown names and
            late writes are rejected so the SSH-level response can stay honest.
            </summary>
        </member>
        <member name="M:Eryph.GuestServices.DevTunnels.Ssh.Extensions.Forwarders.PtyForwarder.DrainAndCloseAsync(System.Threading.Tasks.Task,System.Threading.CancellationTokenSource,System.Func{System.Threading.CancellationToken,System.Threading.Tasks.Task},System.Threading.CancellationToken,System.Nullable{System.TimeSpan},System.Nullable{System.TimeSpan})">
            <summary>
            Drains any trailing PTY output, then closes the channel — and closes it
            no matter how the output pump ends, short of a session shutdown.
            </summary>
            <remarks>
            ConPTY emits final reset sequences asynchronously after the child exits,
            so we give them a moment to drain before CHANNEL_CLOSE; otherwise they
            ship as CHANNEL_DATA after close and strict SSH clients (OpenSSH)
            disconnect. But the pump always ends abnormally on teardown — at EOF on
            Windows, with an EIO <see cref="T:System.IO.IOException"/> on Linux once the PTY
            slave closes — and an in-flight <see cref="T:System.IO.FileStream"/> read can ignore
            cancellation. So the drain must neither block the close indefinitely nor
            let the pump's terminal exception propagate: <see cref="M:Eryph.GuestServices.DevTunnels.Ssh.Extensions.Forwarders.PtyForwarder.RunAsync(Microsoft.DevTunnels.Ssh.SshStream,Eryph.GuestServices.Pty.IPty)"/> is
            fire-and-forget, so a thrown exception here would skip the close and the
            client would never receive CHANNEL_CLOSE — hanging the session on logout.
            </remarks>
        </member>
        <member name="T:Eryph.GuestServices.DevTunnels.Ssh.Extensions.IShellSelector">
            <summary>
            Resolves the command + arguments to spawn for an SSH session. The
            interactive shell path uses both the command and the arguments; the
            non-interactive <c>exec</c> path uses only the command (it supplies its own
            command-mode flag and ignores the interactive arguments).
            </summary>
        </member>
        <member name="M:Eryph.GuestServices.DevTunnels.Ssh.Extensions.IShellSelector.SelectAsync(Eryph.GuestServices.DevTunnels.Ssh.Extensions.ShellOverride,System.Threading.CancellationToken)">
            <summary>
            Selects the shell for one session. The <paramref name="sshOverride"/>
            carries any per-session preferences that were sent by the client via
            SSH <c>env</c> channel requests.
            </summary>
        </member>
        <member name="T:Eryph.GuestServices.DevTunnels.Ssh.Extensions.ShellSelection">
            <summary>
            The command and arguments to spawn as the interactive shell.
            </summary>
            <param name="Command">On Windows, an executable name or an absolute path —
            bare names are resolved via <c>PATH</c> by <c>CreateProcess</c>. On Linux,
            must be an absolute path; bare names will fail at PTY start.</param>
            <param name="Arguments">Argument string passed to the shell, may be empty.</param>
        </member>
        <member name="M:Eryph.GuestServices.DevTunnels.Ssh.Extensions.ShellSelection.#ctor(System.String,System.String)">
            <summary>
            The command and arguments to spawn as the interactive shell.
            </summary>
            <param name="Command">On Windows, an executable name or an absolute path —
            bare names are resolved via <c>PATH</c> by <c>CreateProcess</c>. On Linux,
            must be an absolute path; bare names will fail at PTY start.</param>
            <param name="Arguments">Argument string passed to the shell, may be empty.</param>
        </member>
        <member name="P:Eryph.GuestServices.DevTunnels.Ssh.Extensions.ShellSelection.Command">
            <summary>On Windows, an executable name or an absolute path —
            bare names are resolved via <c>PATH</c> by <c>CreateProcess</c>. On Linux,
            must be an absolute path; bare names will fail at PTY start.</summary>
        </member>
        <member name="P:Eryph.GuestServices.DevTunnels.Ssh.Extensions.ShellSelection.Arguments">
            <summary>Argument string passed to the shell, may be empty.</summary>
        </member>
        <member name="T:Eryph.GuestServices.DevTunnels.Ssh.Extensions.ShellOverride">
            <summary>
            Per-session shell preference conveyed by the SSH client via <c>env</c>
            channel requests. Either field may be <see langword="null"/> if the client
            did not set the corresponding env var. A blank <see cref="P:Eryph.GuestServices.DevTunnels.Ssh.Extensions.ShellOverride.Command"/> means
            "no preference" and the selector should fall back.
            </summary>
        </member>
        <member name="M:Eryph.GuestServices.DevTunnels.Ssh.Extensions.ShellOverride.#ctor(System.String,System.String)">
            <summary>
            Per-session shell preference conveyed by the SSH client via <c>env</c>
            channel requests. Either field may be <see langword="null"/> if the client
            did not set the corresponding env var. A blank <see cref="P:Eryph.GuestServices.DevTunnels.Ssh.Extensions.ShellOverride.Command"/> means
            "no preference" and the selector should fall back.
            </summary>
        </member>
        <member name="T:Eryph.GuestServices.DevTunnels.Ssh.Extensions.Messages.EnvironmentVariableRequestMessage">
            <summary>
            Channel request that conveys a single environment variable from the
            SSH client to the server. See RFC 4254 §6.4.
            </summary>
        </member>
        <member name="P:Eryph.GuestServices.DevTunnels.Ssh.Extensions.Messages.UploadFileRequestMessage.BasePath">
            <summary>
            When the <see cref="P:Eryph.GuestServices.DevTunnels.Ssh.Extensions.Messages.UploadFileRequestMessage.BasePath"/> is provided,
            the server will combine it with the <see cref="P:Eryph.GuestServices.DevTunnels.Ssh.Extensions.Messages.UploadFileRequestMessage.Path"/>
            into a full path.
            </summary>
        </member>
        <member name="P:Eryph.GuestServices.DevTunnels.Ssh.Extensions.Messages.UploadFileRequestMessage.Path">
            <summary>
            When the <see cref="P:Eryph.GuestServices.DevTunnels.Ssh.Extensions.Messages.UploadFileRequestMessage.BasePath"/> is provided, the <see cref="P:Eryph.GuestServices.DevTunnels.Ssh.Extensions.Messages.UploadFileRequestMessage.Path"/>
            is relative to the <see cref="P:Eryph.GuestServices.DevTunnels.Ssh.Extensions.Messages.UploadFileRequestMessage.BasePath"/>. In this case, the
            <see cref="P:Eryph.GuestServices.DevTunnels.Ssh.Extensions.Messages.UploadFileRequestMessage.Path"/> should use <c>/</c> as the separator.
            </summary>
        </member>
        <member name="T:Eryph.GuestServices.DevTunnels.Ssh.Extensions.NonInteractiveShell">
            <summary>
            Maps a shell executable to the flag that makes it run a single command
            string non-interactively. This is the SSH <c>exec</c> request equivalent of
            OpenSSH's <c>$SHELL -c "&lt;command&gt;"</c> contract: the shell — not our
            own tokenizer — parses pipes, quotes, redirection and globbing.
            </summary>
        </member>
        <member name="M:Eryph.GuestServices.DevTunnels.Ssh.Extensions.NonInteractiveShell.CommandFlagFor(System.String)">
            <summary>
            Returns the command-mode flag for <paramref name="shellCommand"/>,
            inferred from its file name. PowerShell variants use <c>-Command</c>,
            <c>cmd</c> uses <c>/c</c>, and every other (POSIX) shell defaults to
            <c>-c</c>.
            </summary>
        </member>
    </members>
</doc>
