public void RemoveUrlsForClient(string SessionID, ulong RegionHandle) { GridRegistrationURLs urls = m_genericsConnector.GetGeneric <GridRegistrationURLs>(UUID.Zero, "GridRegistrationUrls", RegionHandle.ToString(), new GridRegistrationURLs()); if (urls != null) { //Remove all the handlers from the HTTP Server foreach (KeyValuePair <string, OSD> kvp in urls.URLS) { if (!m_modules.ContainsKey(kvp.Key)) { continue; } IGridRegistrationUrlModule module = m_modules[kvp.Key]; IHttpServer server = m_simulationBase.GetHttpServer(module.Port); server.RemoveHTTPHandler("POST", kvp.Value); } //Remove from the database so that they don't pop up later m_genericsConnector.RemoveGeneric(UUID.Zero, "GridRegistrationUrls", RegionHandle.ToString()); } }
/// <summary> /// Gets a host and port for the given handler /// </summary> /// <param name="name"></param> /// <param name="SessionID"></param> /// <param name="port"></param> /// <param name="hostName"></param> /// <param name="module"></param> /// <param name="innerUrl"></param> /// <returns>Whether we need to create a handler or whether it is an external URL</returns> public void GetHost (string name, IGridRegistrationUrlModule module, string SessionID, out List<uint> ports, out List<string> hostNames, out List<string> innerUrls) { if (!m_urls.ContainsKey (name)) { SetUrls (name, m_configurationConfig.GetString (name + "Hostnames", m_defaultHostname).Split (',')); AddPorts (name, m_configurationConfig.GetString (name + "InternalPorts", m_defaultPort.ToString ()).Split (',')); GetExternalCounts (name); } if (!lastSet.ContainsKey (name)) lastSet.Add (name, 0); ports = new List<uint>(); innerUrls = new List<string>(); hostNames = new List<string>(); //Add both internal and external hosts together for now List<string> urls = m_urls[name]; if (module.DoMultiplePorts) { ports = m_ports[name]; foreach(var port in ports) hostNames.Add(urls[lastSet[name]]); foreach(uint port in ports) innerUrls.Add(module.GetUrlForRegisteringClient(SessionID, port)); return; } if (lastSet[name] < urls.Count + m_externalUrlCountTotal) { if (lastSet[name] < urls.Count) { //Internal, just pull it from the lists hostNames.Add(urls[lastSet[name]]); ports.Add(m_ports[name][lastSet[name]]); innerUrls.Add(module.GetUrlForRegisteringClient (SessionID, ports[0])); } else { uint port; string hostName; string innerUrl; //Get the external Info if (!GetExternalInfo(lastSet[name], name, SessionID, out port, out hostName, out innerUrl)) { lastSet[name] = 0;//It went through all external, give up on them GetHost(name, module, SessionID, out ports, out hostNames, out innerUrls); return; } else { ports.Add(port); hostNames.Add(hostName); innerUrls.Add(innerUrl); } } lastSet[name]++; if (lastSet[name] == (urls.Count + m_externalUrlCountTotal)) lastSet[name] = 0; } else { //We don't have any urls for this name, return defaults if (m_ports[name].Count > 0) { ports.Add(m_ports[name][lastSet[name]]); lastSet[name]++; if (lastSet[name] == urls.Count) lastSet[name] = 0; hostNames.Add(m_defaultHostname); } else { ports.Add(m_defaultPort); hostNames.Add(m_defaultHostname); } innerUrls.Add(module.GetUrlForRegisteringClient (SessionID, ports[0])); } }
public void RegisterModule(IGridRegistrationUrlModule module) { //Add the module to our list m_modules.Add(module.UrlName, module); }
/// <summary> /// Gets a host and port for the given handler /// </summary> /// <param name="name"></param> /// <param name="SessionID"></param> /// <param name="port"></param> /// <param name="hostName"></param> /// <param name="module"></param> /// <param name="innerUrl"></param> /// <returns>Whether we need to create a handler or whether it is an external URL</returns> public void GetHost(string name, IGridRegistrationUrlModule module, string SessionID, out List <uint> ports, out List <string> hostNames, out List <string> innerUrls) { if (!m_urls.ContainsKey(name)) { SetUrls(name, m_configurationConfig.GetString(name + "Hostnames", m_defaultHostname).Split(',')); AddPorts(name, m_configurationConfig.GetString(name + "InternalPorts", m_defaultPort.ToString()).Split(',')); GetExternalCounts(name); } if (!lastSet.ContainsKey(name)) { lastSet.Add(name, 0); } ports = new List <uint>(); innerUrls = new List <string>(); hostNames = new List <string>(); //Add both internal and external hosts together for now List <string> urls = m_urls[name]; if (module.DoMultiplePorts) { ports = m_ports[name]; foreach (var port in ports) { hostNames.Add(urls[lastSet[name]]); } foreach (uint port in ports) { innerUrls.Add(module.GetUrlForRegisteringClient(SessionID, port)); } return; } if (lastSet[name] < urls.Count + m_externalUrlCountTotal) { if (lastSet[name] < urls.Count) { //Internal, just pull it from the lists hostNames.Add(urls[lastSet[name]]); ports.Add(m_ports[name][lastSet[name]]); innerUrls.Add(module.GetUrlForRegisteringClient(SessionID, ports[0])); } else { uint port; string hostName; string innerUrl; //Get the external Info if (!GetExternalInfo(lastSet[name], name, SessionID, out port, out hostName, out innerUrl)) { lastSet[name] = 0;//It went through all external, give up on them GetHost(name, module, SessionID, out ports, out hostNames, out innerUrls); return; } else { ports.Add(port); hostNames.Add(hostName); innerUrls.Add(innerUrl); } } lastSet[name]++; if (lastSet[name] == (urls.Count + m_externalUrlCountTotal)) { lastSet[name] = 0; } } else { //We don't have any urls for this name, return defaults if (m_ports[name].Count > 0) { ports.Add(m_ports[name][lastSet[name]]); lastSet[name]++; if (lastSet[name] == urls.Count) { lastSet[name] = 0; } hostNames.Add(m_defaultHostname); } else { ports.Add(m_defaultPort); hostNames.Add(m_defaultHostname); } innerUrls.Add(module.GetUrlForRegisteringClient(SessionID, ports[0])); } }