Jump to content

OpenSimulator Internals/Code Map/ROBUST

From Open Simulator Technical Help
Revision as of 11:53, 7 July 2026 by Jwbshaw (talk | contribs) (add)


OpenSimulator Internals/Code Map/ROBUST

Overview

ROBUST is the grid services process. It reads configuration, starts HTTP listeners, loads service connector plugins, then sits waiting for incoming HTTP requests from simulators.


Entry Point

OpenSim/Server/ServerMain.cs -- class OpenSimServer, Main()

Sequence:

  1. Sets culture and .NET HTTP client defaults:
    • ServicePointManager.DefaultConnectionLimit = 64
    • ServicePointManager.MaxServicePointIdleTime = 30000
    • Expect100Continue = false
    • UseNagleAlgorithm = false
    • ServerCertificateValidationCallback = ValidateServerCertificate
  2. Creates HttpServerBase("R.O.B.U.S.T.", args) -- config is loaded here (see Config Loading below)
  3. Reads [Startup] section -- throws if missing
  4. Reads DnsTimeout (default 30000ms), NoVerifyCertChain, NoVerifyCertHostname from [Startup]
  5. Calls WebUtil.SetupHTTPClients() with cert settings and max 32 connections
  6. Reads connector list -- merges ServiceConnectors from [Startup] with all keys from [ServiceList]
  7. Copies System.Drawing.Common.dll for current platform (Windows vs Linux)
  8. Loops through connectors -- parses configName@port/dll:class format, loads each (see Service Connector Loading below)
  9. Special case: LLLoginServiceInConnector gets an IndexPHPHandler added to its HTTP server before loading
  10. Prints robuststartuplogo.txt to console if present
  11. Creates PluginLoader
  12. Calls m_Server.Run() -- enters main loop
  13. On exit: m_Server.Shutdown(), Util.StopThreadPool(), Environment.Exit()

Config Loading

OpenSim/Server/Base/HttpServerBase.cs
OpenSim/Server/Base/ServicesServerBase.cs

HttpServerBase constructor handles config loading. Layers are applied in order, each overriding the previous:

  1. Command line args parsed (-i ini file, -c console, -l logfile, -p prompt, -g logconfig)
  2. Ini file loaded -- defaults to Robust.ini, derived from executable name. Can be a local file or remote HTTP/HTTPS URL.
  3. Include-* keys scanned -- additional ini files merged in. Supports wildcards and URLs. Loop repeats until no new includes found.
  4. Environment variables merged in
  5. Command line args merged on top -- command line always wins
  6. Variable substitution run (ReplaceKeyValues) -- expands ${Section|Key} references
  7. ReadConfig() called -- reads [Network] section for port and SSL settings

[Network] minimum requirements:

  • port -- required, no default, ROBUST will not start without it
  • https_main, https_listener, https_external -- optional SSL flags
  • cert_path, cert_pass -- required if SSL enabled
  • ConsolePort -- optional remote console port

HTTP Servers

OpenSim/Server/Base/HttpServerBase.cs
  • Main HTTP server created on port from [Network]
  • Optional second SSL listener if https_listener = true
  • All servers started before connectors are loaded
  • Additional ports are created on demand via MainServer.GetHttpServer(port) during connector loading
  • Handlers register into a running server during connector construction

Service Connector Loading

OpenSim/Server/Base/ServerUtils.cs -- LoadPlugin()

Connector string format:

configName@port/OpenSim.Server.Handlers.dll:ClassName

Parsing:

  • Split on / -- left side is optional configName@port, right side is dll:class
  • Split left side on @ -- if two parts, first is configName, second is port
  • If port specified: get or create HTTP server for that port via MainServer.GetHttpServer()
  • If no port: use MainServer.Instance (main port)

Loading:

  • LoadPlugin() tries constructor with (IConfigSource, IHttpServer, configName) first
  • Falls back to (IConfigSource, IHttpServer) if that fails
  • Loaded connectors added to m_ServiceConnectors list
  • Failed loads logged as errors but do not stop startup

See OpenSimulator Internals/Connector Architecture for the full connector pattern.


Main Loop

OpenSim/Server/Base/ServicesServerBase.cs -- Run()
  • Watchdog and MemoryWatchdog threads enabled
  • Sits in a console prompt loop
  • Shutdown signal (quit/shutdown command or SIGTERM) triggers:
    • m_Server.Shutdown()
    • Util.StopThreadPool()
    • Environment.Exit()

Service Implementations

Each service connector loaded from [ServiceList] handles one service domain. See OpenSimulator Internals/ROBUST Services for the full list.

Service Implementation Handler
AssetService OpenSim/Services/AssetService/AssetService.cs OpenSim/Server/Handlers/Asset/
GridService OpenSim/Services/GridService/GridService.cs OpenSim/Server/Handlers/Grid/
UserAccountService OpenSim/Services/UserAccountService/UserAccountService.cs OpenSim/Server/Handlers/UserAccounts/
PresenceService OpenSim/Services/PresenceService/PresenceService.cs OpenSim/Server/Handlers/Presence/
InventoryService OpenSim/Services/InventoryService/XInventoryService.cs OpenSim/Server/Handlers/Inventory/
AuthenticationService OpenSim/Services/AuthenticationService/PasswordAuthenticationService.cs OpenSim/Server/Handlers/Authentication/
LoginService OpenSim/Services/LLLoginService/LLLoginService.cs OpenSim/Server/Handlers/Login/
GatekeeperService OpenSim/Services/HypergridService/GatekeeperService.cs OpenSim/Server/Handlers/Hypergrid/
UserAgentService OpenSim/Services/HypergridService/UserAgentService.cs OpenSim/Server/Handlers/Hypergrid/

See OpenSimulator Internals/Code Map/ROBUST/GridService RegisterRegion for a detailed trace of GridService.RegisterRegion() and DeregisterRegion().


See Also