Esempio n. 1
0
        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);
 }
Esempio n. 4
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]));
                }
            }