// Copyright 2012-2025 The NATS Authors
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// Adapted from server/opts.go in the NATS server Go source.
using System.Net.Security;
using System.Security.Authentication;
using System.Threading;
using ZB.MOM.NatsNet.Server.Auth;
namespace ZB.MOM.NatsNet.Server;
///
/// Server configuration options block.
/// Mirrors Options struct in opts.go.
///
public sealed partial class ServerOptions
{
// -------------------------------------------------------------------------
// General / Startup
// -------------------------------------------------------------------------
public string ConfigFile { get; set; } = string.Empty;
public string ServerName { get; set; } = string.Empty;
public string Host { get; set; } = string.Empty;
public int Port { get; set; }
public bool DontListen { get; set; }
public string ClientAdvertise { get; set; } = string.Empty;
public bool CheckConfig { get; set; }
public string PidFile { get; set; } = string.Empty;
public string PortsFileDir { get; set; } = string.Empty;
// -------------------------------------------------------------------------
// Logging & Debugging
// -------------------------------------------------------------------------
public bool Trace { get; set; }
public bool Debug { get; set; }
public bool TraceVerbose { get; set; }
public bool TraceHeaders { get; set; }
public bool NoLog { get; set; }
public bool NoSigs { get; set; }
public bool Logtime { get; set; }
public bool LogtimeUtc { get; set; }
public string LogFile { get; set; } = string.Empty;
public long LogSizeLimit { get; set; }
public long LogMaxFiles { get; set; }
public bool Syslog { get; set; }
public string RemoteSyslog { get; set; } = string.Empty;
public int ProfPort { get; set; }
public int ProfBlockRate { get; set; }
public int MaxTracedMsgLen { get; set; }
// -------------------------------------------------------------------------
// Networking & Limits
// -------------------------------------------------------------------------
public int MaxConn { get; set; }
public int MaxSubs { get; set; }
public byte MaxSubTokens { get; set; }
public int MaxControlLine { get; set; }
public int MaxPayload { get; set; }
public long MaxPending { get; set; }
public bool NoFastProducerStall { get; set; }
public bool ProxyRequired { get; set; }
public bool ProxyProtocol { get; set; }
public int MaxClosedClients { get; set; }
// -------------------------------------------------------------------------
// Connectivity
// -------------------------------------------------------------------------
public TimeSpan PingInterval { get; set; }
public int MaxPingsOut { get; set; }
public TimeSpan WriteDeadline { get; set; }
public WriteTimeoutPolicy WriteTimeout { get; set; }
public TimeSpan LameDuckDuration { get; set; }
public TimeSpan LameDuckGracePeriod { get; set; }
// -------------------------------------------------------------------------
// HTTP / Monitoring
// -------------------------------------------------------------------------
public string HttpHost { get; set; } = string.Empty;
public int HttpPort { get; set; }
public string HttpBasePath { get; set; } = string.Empty;
public int HttpsPort { get; set; }
// -------------------------------------------------------------------------
// Authentication & Authorization
// -------------------------------------------------------------------------
public string Username { get; set; } = string.Empty;
public string Password { get; set; } = string.Empty;
public string Authorization { get; set; } = string.Empty;
public double AuthTimeout { get; set; }
public string NoAuthUser { get; set; } = string.Empty;
public string DefaultSentinel { get; set; } = string.Empty;
public string SystemAccount { get; set; } = string.Empty;
public bool NoSystemAccount { get; set; }
/// Parsed account objects from config. Mirrors Go opts.Accounts.
public List Accounts { get; set; } = [];
public AuthCalloutOpts? AuthCallout { get; set; }
public bool AlwaysEnableNonce { get; set; }
public List? Users { get; set; }
public List? Nkeys { get; set; }
public List