Jump to content
Main menu
Main menu
move to sidebar
hide
Navigation
Main page
Recent changes
Random page
Help about MediaWiki
Special pages
Open Simulator Technical Help
Search
Search
Appearance
Create account
Log in
Personal tools
Create account
Log in
Pages for logged out editors
learn more
Contributions
Talk
Editing
OpenSimulator Internals/Code Map/ROBUST
(section)
Page
Discussion
English
Read
Edit
View history
Tools
Tools
move to sidebar
hide
Actions
Read
Edit
View history
General
What links here
Related changes
Page information
Appearance
move to sidebar
hide
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
= 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: # Sets culture and .NET HTTP client defaults: #* ServicePointManager.DefaultConnectionLimit = 64 #* ServicePointManager.MaxServicePointIdleTime = 30000 #* Expect100Continue = false #* UseNagleAlgorithm = false #* ServerCertificateValidationCallback = ValidateServerCertificate # Creates HttpServerBase("R.O.B.U.S.T.", args) -- config is loaded here (see Config Loading below) # Reads [Startup] section -- throws if missing # Reads DnsTimeout (default 30000ms), NoVerifyCertChain, NoVerifyCertHostname from [Startup] # Calls WebUtil.SetupHTTPClients() with cert settings and max 32 connections # Reads connector list -- merges ServiceConnectors from [Startup] with all keys from [ServiceList] # Copies System.Drawing.Common.dll for current platform (Windows vs Linux) # Loops through connectors -- parses configName@port/dll:class format, loads each (see Service Connector Loading below) # Special case: LLLoginServiceInConnector gets an IndexPHPHandler added to its HTTP server before loading # Prints robuststartuplogo.txt to console if present # Creates PluginLoader # Calls m_Server.Run() -- enters main loop # 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: # Command line args parsed (-i ini file, -c console, -l logfile, -p prompt, -g logconfig) # Ini file loaded -- defaults to Robust.ini, derived from executable name. Can be a local file or remote HTTP/HTTPS URL. # Include-* keys scanned -- additional ini files merged in. Supports wildcards and URLs. Loop repeats until no new includes found. # Environment variables merged in # Command line args merged on top -- command line always wins # Variable substitution run (ReplaceKeyValues) -- expands ${Section|Key} references # 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. {| class="wikitable" ! 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/ |- | AvatarService || OpenSim/Services/AvatarService/AvatarService.cs || OpenSim/Server/Handlers/Avatar/ |- | GridUserService || OpenSim/Services/UserAccountService/GridUserService.cs || OpenSim/Server/Handlers/GridUser/ |- | AgentPreferencesService || OpenSim/Services/UserAccountService/AgentPreferencesService.cs || OpenSim/Server/Handlers/AgentPreferences/ |- | 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/ |} Note: GridUserService and AgentPreferencesService source files live in the UserAccountService directory, not separate directories. See [[OpenSimulator Internals/Code Map/ROBUST/GridService RegisterRegion]] for a detailed trace of GridService.RegisterRegion() and DeregisterRegion(). See [[OpenSimulator Internals/Code Map/ROBUST/PresenceService]] for a detailed trace of PresenceService. See [[OpenSimulator Internals/Code Map/ROBUST/UserAccountService]] for a detailed trace of UserAccountService. See [[OpenSimulator Internals/Code Map/ROBUST/InventoryService]] for a detailed trace of InventoryService. See [[OpenSimulator Internals/Code Map/ROBUST/AuthenticationService]] for a detailed trace of AuthenticationService, including the impersonation mechanism. See [[OpenSimulator Internals/Code Map/ROBUST/AvatarService]] for a detailed trace of AvatarService. See [[OpenSimulator Internals/Code Map/ROBUST/GridUserService]] for a detailed trace of GridUserService. See [[OpenSimulator Internals/Code Map/ROBUST/AgentPreferencesService]] for a detailed trace of AgentPreferencesService. See [[OpenSimulator Internals/Code Map/ROBUST/LoginService]] for a detailed trace of LLLoginService. See [[OpenSimulator Internals/Code Map/ROBUST/GatekeeperService]] for a detailed trace of GatekeeperService. See [[OpenSimulator Internals/Code Map/ROBUST/UserAgentService]] for a detailed trace of UserAgentService. ---- == See Also == * [[OpenSimulator Internals/Code Map]] * [[OpenSimulator Internals/Code Map/Scene]] * [[OpenSimulator Internals/Code Map/ScenePresence]] * [[OpenSimulator Internals/Code Map/AvatarFactoryModule]] * [[OpenSimulator Internals/Code Map/AttachmentsModule]] * [[OpenSimulator Internals/Code Map/EntityTransferModule]] * [[OpenSimulator Internals/Code Map/HGEntityTransferModule]] * [[OpenSimulator Internals/Code Map/InventoryAccessModule]] * [[OpenSimulator Internals/Reading the Code]] * [[OpenSimulator Internals/ROBUST Services]] * [[OpenSimulator Internals/Connector Architecture]]
Summary:
Please note that all contributions to Open Simulator Technical Help may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
Open Simulator Technical Help:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Search
Search
Editing
OpenSimulator Internals/Code Map/ROBUST
(section)
Add topic