diff --git a/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs b/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs index fed6ecb2c1..d7ca67991e 100644 --- a/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs +++ b/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs @@ -85,20 +85,20 @@ namespace OpenSim.ApplicationPlugins.RemoteController m_app = openSim; m_httpd = openSim.HttpServer; - m_httpd.AddXmlRPCHandler("admin_create_region", XmlRpcCreateRegionMethod); - m_httpd.AddXmlRPCHandler("admin_delete_region", XmlRpcDeleteRegionMethod); - m_httpd.AddXmlRPCHandler("admin_shutdown", XmlRpcShutdownMethod); - m_httpd.AddXmlRPCHandler("admin_broadcast", XmlRpcAlertMethod); - m_httpd.AddXmlRPCHandler("admin_restart", XmlRpcRestartMethod); - m_httpd.AddXmlRPCHandler("admin_load_heightmap", XmlRpcLoadHeightmapMethod); - m_httpd.AddXmlRPCHandler("admin_create_user", XmlRpcCreateUserMethod); - m_httpd.AddXmlRPCHandler("admin_exists_user", XmlRpcUserExistsMethod); - m_httpd.AddXmlRPCHandler("admin_update_user", XmlRpcUpdateUserAccountMethod); - m_httpd.AddXmlRPCHandler("admin_load_xml", XmlRpcLoadXMLMethod); - m_httpd.AddXmlRPCHandler("admin_save_xml", XmlRpcSaveXMLMethod); - m_httpd.AddXmlRPCHandler("admin_load_oar", XmlRpcLoadOARMethod); - m_httpd.AddXmlRPCHandler("admin_save_oar", XmlRpcSaveOARMethod); - m_httpd.AddXmlRPCHandler("admin_region_query", XmlRpcRegionQueryMethod); + m_httpd.AddXmlRPCHandler("admin_create_region", XmlRpcCreateRegionMethod, false); + m_httpd.AddXmlRPCHandler("admin_delete_region", XmlRpcDeleteRegionMethod, false); + m_httpd.AddXmlRPCHandler("admin_shutdown", XmlRpcShutdownMethod, false); + m_httpd.AddXmlRPCHandler("admin_broadcast", XmlRpcAlertMethod, false); + m_httpd.AddXmlRPCHandler("admin_restart", XmlRpcRestartMethod, false); + m_httpd.AddXmlRPCHandler("admin_load_heightmap", XmlRpcLoadHeightmapMethod, false); + m_httpd.AddXmlRPCHandler("admin_create_user", XmlRpcCreateUserMethod, false); + m_httpd.AddXmlRPCHandler("admin_exists_user", XmlRpcUserExistsMethod, false); + m_httpd.AddXmlRPCHandler("admin_update_user", XmlRpcUpdateUserAccountMethod, false); + m_httpd.AddXmlRPCHandler("admin_load_xml", XmlRpcLoadXMLMethod, false); + m_httpd.AddXmlRPCHandler("admin_save_xml", XmlRpcSaveXMLMethod, false); + m_httpd.AddXmlRPCHandler("admin_load_oar", XmlRpcLoadOARMethod, false); + m_httpd.AddXmlRPCHandler("admin_save_oar", XmlRpcSaveOARMethod, false); + m_httpd.AddXmlRPCHandler("admin_region_query", XmlRpcRegionQueryMethod, false); } } catch (NullReferenceException) diff --git a/OpenSim/Framework/Communications/CommunicationsManager.cs b/OpenSim/Framework/Communications/CommunicationsManager.cs index 1bf8c0550f..dfe0fdcc24 100644 --- a/OpenSim/Framework/Communications/CommunicationsManager.cs +++ b/OpenSim/Framework/Communications/CommunicationsManager.cs @@ -104,6 +104,13 @@ namespace OpenSim.Framework.Communications /// protected IUserServiceAdmin m_userServiceAdmin; + + public BaseHttpServer HttpServer + { + get { return m_httpServer; } + } + protected BaseHttpServer m_httpServer; + /// /// Constructor /// @@ -117,6 +124,7 @@ namespace OpenSim.Framework.Communications m_networkServersInfo = serversInfo; m_assetCache = assetCache; m_userProfileCacheService = new UserProfileCacheService(this, libraryRootFolder); + m_httpServer = httpServer; // m_transactionsManager = new AgentAssetTransactionsManager(this, dumpAssetsToFile); } diff --git a/OpenSim/Framework/Servers/BaseHttpServer.cs b/OpenSim/Framework/Servers/BaseHttpServer.cs index 7e8130a62c..3d125fb982 100644 --- a/OpenSim/Framework/Servers/BaseHttpServer.cs +++ b/OpenSim/Framework/Servers/BaseHttpServer.cs @@ -54,6 +54,7 @@ namespace OpenSim.Framework.Servers protected HttpListener m_httpListener; protected CoolHTTPListener m_httpListener2; protected Dictionary m_rpcHandlers = new Dictionary(); + protected Dictionary m_rpcHandlersKeepAlive = new Dictionary(); protected DefaultLLSDMethod m_defaultLlsdHandler = null; // <-- Moving away from the monolithic.. and going to /registered/ protected Dictionary m_llsdHandlers = new Dictionary(); protected Dictionary m_streamHandlers = new Dictionary(); @@ -141,6 +142,17 @@ namespace OpenSim.Framework.Servers lock (m_rpcHandlers) { m_rpcHandlers[method] = handler; + m_rpcHandlersKeepAlive[method] = true; // default + return true; + } + } + + public bool AddXmlRPCHandler(string method, XmlRpcMethod handler, bool keepAlive) + { + lock (m_rpcHandlers) + { + m_rpcHandlers[method] = handler; + m_rpcHandlersKeepAlive[method] = keepAlive; // default return true; } } @@ -584,6 +596,7 @@ namespace OpenSim.Framework.Servers } responseString = XmlRpcResponseSerializer.Singleton.Serialize(xmlRpcResponse); + response.KeepAlive = m_rpcHandlersKeepAlive[methodName]; } else {