* Another stab at refactoring up the CustomiseResponse function. Two fixes:
* Sometimes, null is a valid return value to indicate 'none found'. doh. * Sometimes, the Grid server does not send simURI - this you need to reconstruct yourself. Euw. (I believe) this solves mantis issue #32870.6.5-rc1
							parent
							
								
									7b2977d625
								
							
						
					
					
						commit
						33f511ee4b
					
				| 
						 | 
				
			
			@ -126,150 +126,17 @@ namespace OpenSim.Client.Linden
 | 
			
		|||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Customises the login response and fills in missing values.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="response">The existing response</param>
 | 
			
		||||
        /// <param name="theUser">The user profile</param>
 | 
			
		||||
        /// <param name="startLocationRequest">The requested start location</param>
 | 
			
		||||
        public override bool CustomiseResponse(LoginResponse response, UserProfileData theUser, string startLocationRequest)
 | 
			
		||||
        {
 | 
			
		||||
            // add active gestures to login-response
 | 
			
		||||
            AddActiveGestures(response, theUser);
 | 
			
		||||
 | 
			
		||||
            // HomeLocation
 | 
			
		||||
            RegionInfo homeInfo = null;
 | 
			
		||||
 | 
			
		||||
            // use the homeRegionID if it is stored already. If not, use the regionHandle as before
 | 
			
		||||
            UUID homeRegionId = theUser.HomeRegionID;
 | 
			
		||||
            ulong homeRegionHandle = theUser.HomeRegion;
 | 
			
		||||
            if (homeRegionId != UUID.Zero)
 | 
			
		||||
            {
 | 
			
		||||
                homeInfo = GetRegionInfo(homeRegionId);
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                homeInfo = GetRegionInfo(homeRegionHandle);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (homeInfo != null)
 | 
			
		||||
            {
 | 
			
		||||
                response.Home =
 | 
			
		||||
                    string.Format(
 | 
			
		||||
                        "{{'region_handle':[r{0},r{1}], 'position':[r{2},r{3},r{4}], 'look_at':[r{5},r{6},r{7}]}}",
 | 
			
		||||
                        (homeInfo.RegionLocX * Constants.RegionSize),
 | 
			
		||||
                        (homeInfo.RegionLocY * Constants.RegionSize),
 | 
			
		||||
                        theUser.HomeLocation.X, theUser.HomeLocation.Y, theUser.HomeLocation.Z,
 | 
			
		||||
                        theUser.HomeLookAt.X, theUser.HomeLookAt.Y, theUser.HomeLookAt.Z);
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                m_log.InfoFormat("not found the region at {0} {1}", theUser.HomeRegionX, theUser.HomeRegionY);
 | 
			
		||||
                // Emergency mode: Home-region isn't available, so we can't request the region info.
 | 
			
		||||
                // Use the stored home regionHandle instead.
 | 
			
		||||
                // NOTE: If the home-region moves, this will be wrong until the users update their user-profile again
 | 
			
		||||
                ulong regionX = homeRegionHandle >> 32;
 | 
			
		||||
                ulong regionY = homeRegionHandle & 0xffffffff;
 | 
			
		||||
                response.Home =
 | 
			
		||||
                    string.Format(
 | 
			
		||||
                        "{{'region_handle':[r{0},r{1}], 'position':[r{2},r{3},r{4}], 'look_at':[r{5},r{6},r{7}]}}",
 | 
			
		||||
                        regionX, regionY,
 | 
			
		||||
                        theUser.HomeLocation.X, theUser.HomeLocation.Y, theUser.HomeLocation.Z,
 | 
			
		||||
                        theUser.HomeLookAt.X, theUser.HomeLookAt.Y, theUser.HomeLookAt.Z);
 | 
			
		||||
 | 
			
		||||
                m_log.InfoFormat("[LOGIN] Home region of user {0} {1} is not available; using computed region position {2} {3}",
 | 
			
		||||
                                 theUser.FirstName, theUser.SurName,
 | 
			
		||||
                                 regionX, regionY);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // StartLocation
 | 
			
		||||
            RegionInfo regionInfo = null;
 | 
			
		||||
            if (startLocationRequest == "home")
 | 
			
		||||
            {
 | 
			
		||||
                regionInfo = homeInfo;
 | 
			
		||||
                theUser.CurrentAgent.Position = theUser.HomeLocation;
 | 
			
		||||
                response.LookAt = "[r" + theUser.HomeLookAt.X.ToString() + ",r" + theUser.HomeLookAt.Y.ToString() + ",r" + theUser.HomeLookAt.Z.ToString() + "]";
 | 
			
		||||
            }
 | 
			
		||||
            else if (startLocationRequest == "last")
 | 
			
		||||
            {
 | 
			
		||||
                UUID lastRegion = theUser.CurrentAgent.Region;
 | 
			
		||||
                regionInfo = GetRegionInfo(lastRegion);
 | 
			
		||||
                response.LookAt = "[r" + theUser.CurrentAgent.LookAt.X.ToString() + ",r" + theUser.CurrentAgent.LookAt.Y.ToString() + ",r" + theUser.CurrentAgent.LookAt.Z.ToString() + "]";
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                Regex reURI = new Regex(@"^uri:(?<region>[^&]+)&(?<x>\d+)&(?<y>\d+)&(?<z>\d+)$");
 | 
			
		||||
                Match uriMatch = reURI.Match(startLocationRequest);
 | 
			
		||||
                if (uriMatch == null)
 | 
			
		||||
                {
 | 
			
		||||
                    m_log.InfoFormat("[LOGIN]: Got Custom Login URL {0}, but can't process it", startLocationRequest);
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    string region = uriMatch.Groups["region"].ToString();
 | 
			
		||||
                    regionInfo = RequestClosestRegion(region);
 | 
			
		||||
                    if (regionInfo == null)
 | 
			
		||||
                    {
 | 
			
		||||
                        m_log.InfoFormat("[LOGIN]: Got Custom Login URL {0}, can't locate region {1}", startLocationRequest, region);
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        theUser.CurrentAgent.Position = new Vector3(float.Parse(uriMatch.Groups["x"].Value),
 | 
			
		||||
                            float.Parse(uriMatch.Groups["y"].Value), float.Parse(uriMatch.Groups["z"].Value));
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                response.LookAt = "[r0,r1,r0]";
 | 
			
		||||
                // can be: last, home, safe, url
 | 
			
		||||
                response.StartLocation = "url";
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if ((regionInfo != null) && (PrepareLoginToRegion(regionInfo, theUser, response)))
 | 
			
		||||
            {
 | 
			
		||||
                return true;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // StartLocation not available, send him to a nearby region instead
 | 
			
		||||
            // regionInfo = m_gridService.RequestClosestRegion("");
 | 
			
		||||
            //m_log.InfoFormat("[LOGIN]: StartLocation not available sending to region {0}", regionInfo.regionName);
 | 
			
		||||
 | 
			
		||||
            // Send him to default region instead
 | 
			
		||||
            ulong defaultHandle = (((ulong)m_defaultHomeX * Constants.RegionSize) << 32) |
 | 
			
		||||
                                  ((ulong)m_defaultHomeY * Constants.RegionSize);
 | 
			
		||||
 | 
			
		||||
            if ((regionInfo != null) && (defaultHandle == regionInfo.RegionHandle))
 | 
			
		||||
            {
 | 
			
		||||
                m_log.ErrorFormat("[LOGIN]: Not trying the default region since this is the same as the selected region");
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            m_log.Error("[LOGIN]: Sending user to default region " + defaultHandle + " instead");
 | 
			
		||||
            regionInfo = GetRegionInfo(defaultHandle);
 | 
			
		||||
 | 
			
		||||
            // Customise the response
 | 
			
		||||
            //response.Home =
 | 
			
		||||
            //    string.Format(
 | 
			
		||||
            //        "{{'region_handle':[r{0},r{1}], 'position':[r{2},r{3},r{4}], 'look_at':[r{5},r{6},r{7}]}}",
 | 
			
		||||
            //        (SimInfo.regionLocX * Constants.RegionSize),
 | 
			
		||||
            //        (SimInfo.regionLocY*Constants.RegionSize),
 | 
			
		||||
            //        theUser.HomeLocation.X, theUser.HomeLocation.Y, theUser.HomeLocation.Z,
 | 
			
		||||
            //        theUser.HomeLookAt.X, theUser.HomeLookAt.Y, theUser.HomeLookAt.Z);
 | 
			
		||||
            theUser.CurrentAgent.Position = new Vector3(128, 128, 0);
 | 
			
		||||
            response.StartLocation = "safe";
 | 
			
		||||
 | 
			
		||||
            return PrepareLoginToRegion(regionInfo, theUser, response);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        protected RegionInfo RequestClosestRegion(string region)
 | 
			
		||||
        protected override RegionInfo RequestClosestRegion(string region)
 | 
			
		||||
        {
 | 
			
		||||
            return m_regionsConnector.RequestClosestRegion(region);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        protected RegionInfo GetRegionInfo(ulong homeRegionHandle)
 | 
			
		||||
        protected override RegionInfo GetRegionInfo(ulong homeRegionHandle)
 | 
			
		||||
        {
 | 
			
		||||
            return m_regionsConnector.RequestNeighbourInfo(homeRegionHandle);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        protected RegionInfo GetRegionInfo(UUID homeRegionId)
 | 
			
		||||
        protected override RegionInfo GetRegionInfo(UUID homeRegionId)
 | 
			
		||||
        {
 | 
			
		||||
            return m_regionsConnector.RequestNeighbourInfo(homeRegionId);
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -283,7 +150,7 @@ namespace OpenSim.Client.Linden
 | 
			
		|||
        /// <param name="theUser">
 | 
			
		||||
        /// A <see cref="UserProfileData"/>
 | 
			
		||||
        /// </param>
 | 
			
		||||
        private void AddActiveGestures(LoginResponse response, UserProfileData theUser)
 | 
			
		||||
        protected override void AddActiveGestures(LoginResponse response, UserProfileData theUser)
 | 
			
		||||
        {
 | 
			
		||||
            List<InventoryItemBase> gestures = m_interServiceInventoryService.GetActiveGestures(theUser.ID);
 | 
			
		||||
            //m_log.DebugFormat("[LOGIN]: AddActiveGestures, found {0}", gestures == null ? 0 : gestures.Count);
 | 
			
		||||
| 
						 | 
				
			
			@ -309,7 +176,7 @@ namespace OpenSim.Client.Linden
 | 
			
		|||
        /// <param name="user"></param>
 | 
			
		||||
        /// <param name="response"></param>
 | 
			
		||||
        /// <returns>true if the region was successfully contacted, false otherwise</returns>
 | 
			
		||||
        protected bool PrepareLoginToRegion(RegionInfo regionInfo, UserProfileData user, LoginResponse response)
 | 
			
		||||
        protected override bool PrepareLoginToRegion(RegionInfo regionInfo, UserProfileData user, LoginResponse response)
 | 
			
		||||
        {
 | 
			
		||||
            IPEndPoint endPoint = regionInfo.ExternalEndPoint;
 | 
			
		||||
            response.SimAddress = endPoint.Address.ToString();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -282,7 +282,20 @@ namespace OpenSim.Data
 | 
			
		|||
 | 
			
		||||
        public RegionInfo ToRegionInfo( )
 | 
			
		||||
        {
 | 
			
		||||
            return RegionInfo.Create(UUID, regionName, regionLocX, regionLocY, serverIP, httpPort, serverPort, remotingPort);
 | 
			
		||||
            return RegionInfo.Create(UUID, regionName, regionLocX, regionLocY, serverIP, httpPort, serverPort, remotingPort, serverURI );
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static RegionProfileData FromRegionInfo( RegionInfo regionInfo )
 | 
			
		||||
        {
 | 
			
		||||
            if( regionInfo == null )
 | 
			
		||||
            {
 | 
			
		||||
                return null;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return Create(regionInfo.RegionID, regionInfo.RegionName, regionInfo.RegionLocX,
 | 
			
		||||
                                         regionInfo.RegionLocY, regionInfo.ExternalHostName,
 | 
			
		||||
                                         (uint) regionInfo.ExternalEndPoint.Port, regionInfo.HttpPort, regionInfo.RemotingPort,
 | 
			
		||||
                                         regionInfo.ServerURI);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static RegionProfileData Create(UUID regionID, string regionName, uint locX, uint locY, string externalHostName, uint regionPort, uint httpPort, uint remotingPort, string serverUri)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -77,15 +77,6 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Customises the login response and fills in missing values.  This method also tells the login region to
 | 
			
		||||
        /// expect a client connection.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="response">The existing response</param>
 | 
			
		||||
        /// <param name="theUser">The user profile</param>
 | 
			
		||||
        /// <returns>true on success, false if the region was not successfully told to expect a user connection</returns>
 | 
			
		||||
        public abstract bool CustomiseResponse(LoginResponse response, UserProfileData theUser, string startLocationRequest);
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// If the user is already logged in, try to notify the region that the user they've got is dead.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -872,5 +863,152 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
                m_log.InfoFormat("[LOGIN]: Login with web_login_key {0}", web_login_key);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Customises the login response and fills in missing values.  This method also tells the login region to
 | 
			
		||||
        /// expect a client connection.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="response">The existing response</param>
 | 
			
		||||
        /// <param name="theUser">The user profile</param>
 | 
			
		||||
        /// <param name="startLocationRequest">The requested start location</param>
 | 
			
		||||
        /// <returns>true on success, false if the region was not successfully told to expect a user connection</returns>
 | 
			
		||||
        public bool CustomiseResponse(LoginResponse response, UserProfileData theUser, string startLocationRequest)
 | 
			
		||||
        {
 | 
			
		||||
            // add active gestures to login-response
 | 
			
		||||
            AddActiveGestures(response, theUser);
 | 
			
		||||
 | 
			
		||||
            // HomeLocation
 | 
			
		||||
            RegionInfo homeInfo = null;
 | 
			
		||||
 | 
			
		||||
            // use the homeRegionID if it is stored already. If not, use the regionHandle as before
 | 
			
		||||
            UUID homeRegionId = theUser.HomeRegionID;
 | 
			
		||||
            ulong homeRegionHandle = theUser.HomeRegion;
 | 
			
		||||
            if (homeRegionId != UUID.Zero)
 | 
			
		||||
            {
 | 
			
		||||
                homeInfo = GetRegionInfo(homeRegionId);
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                homeInfo = GetRegionInfo(homeRegionHandle);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if (homeInfo != null)
 | 
			
		||||
            {
 | 
			
		||||
                response.Home =
 | 
			
		||||
                    string.Format(
 | 
			
		||||
                        "{{'region_handle':[r{0},r{1}], 'position':[r{2},r{3},r{4}], 'look_at':[r{5},r{6},r{7}]}}",
 | 
			
		||||
                        (homeInfo.RegionLocX * Constants.RegionSize),
 | 
			
		||||
                        (homeInfo.RegionLocY * Constants.RegionSize),
 | 
			
		||||
                        theUser.HomeLocation.X, theUser.HomeLocation.Y, theUser.HomeLocation.Z,
 | 
			
		||||
                        theUser.HomeLookAt.X, theUser.HomeLookAt.Y, theUser.HomeLookAt.Z);
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                m_log.InfoFormat("not found the region at {0} {1}", theUser.HomeRegionX, theUser.HomeRegionY);
 | 
			
		||||
                // Emergency mode: Home-region isn't available, so we can't request the region info.
 | 
			
		||||
                // Use the stored home regionHandle instead.
 | 
			
		||||
                // NOTE: If the home-region moves, this will be wrong until the users update their user-profile again
 | 
			
		||||
                ulong regionX = homeRegionHandle >> 32;
 | 
			
		||||
                ulong regionY = homeRegionHandle & 0xffffffff;
 | 
			
		||||
                response.Home =
 | 
			
		||||
                    string.Format(
 | 
			
		||||
                        "{{'region_handle':[r{0},r{1}], 'position':[r{2},r{3},r{4}], 'look_at':[r{5},r{6},r{7}]}}",
 | 
			
		||||
                        regionX, regionY,
 | 
			
		||||
                        theUser.HomeLocation.X, theUser.HomeLocation.Y, theUser.HomeLocation.Z,
 | 
			
		||||
                        theUser.HomeLookAt.X, theUser.HomeLookAt.Y, theUser.HomeLookAt.Z);
 | 
			
		||||
 | 
			
		||||
                m_log.InfoFormat("[LOGIN] Home region of user {0} {1} is not available; using computed region position {2} {3}",
 | 
			
		||||
                                 theUser.FirstName, theUser.SurName,
 | 
			
		||||
                                 regionX, regionY);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // StartLocation
 | 
			
		||||
            RegionInfo regionInfo = null;
 | 
			
		||||
            if (startLocationRequest == "home")
 | 
			
		||||
            {
 | 
			
		||||
                regionInfo = homeInfo;
 | 
			
		||||
                theUser.CurrentAgent.Position = theUser.HomeLocation;
 | 
			
		||||
                response.LookAt = "[r" + theUser.HomeLookAt.X.ToString() + ",r" + theUser.HomeLookAt.Y.ToString() + ",r" + theUser.HomeLookAt.Z.ToString() + "]";
 | 
			
		||||
            }
 | 
			
		||||
            else if (startLocationRequest == "last")
 | 
			
		||||
            {
 | 
			
		||||
                UUID lastRegion = theUser.CurrentAgent.Region;
 | 
			
		||||
                regionInfo = GetRegionInfo(lastRegion);
 | 
			
		||||
                response.LookAt = "[r" + theUser.CurrentAgent.LookAt.X.ToString() + ",r" + theUser.CurrentAgent.LookAt.Y.ToString() + ",r" + theUser.CurrentAgent.LookAt.Z.ToString() + "]";
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                Regex reURI = new Regex(@"^uri:(?<region>[^&]+)&(?<x>\d+)&(?<y>\d+)&(?<z>\d+)$");
 | 
			
		||||
                Match uriMatch = reURI.Match(startLocationRequest);
 | 
			
		||||
                if (uriMatch == null)
 | 
			
		||||
                {
 | 
			
		||||
                    m_log.InfoFormat("[LOGIN]: Got Custom Login URL {0}, but can't process it", startLocationRequest);
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    string region = uriMatch.Groups["region"].ToString();
 | 
			
		||||
                    regionInfo = RequestClosestRegion(region);
 | 
			
		||||
                    if (regionInfo == null)
 | 
			
		||||
                    {
 | 
			
		||||
                        m_log.InfoFormat("[LOGIN]: Got Custom Login URL {0}, can't locate region {1}", startLocationRequest, region);
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        theUser.CurrentAgent.Position = new Vector3(float.Parse(uriMatch.Groups["x"].Value),
 | 
			
		||||
                                                                    float.Parse(uriMatch.Groups["y"].Value), float.Parse(uriMatch.Groups["z"].Value));
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                response.LookAt = "[r0,r1,r0]";
 | 
			
		||||
                // can be: last, home, safe, url
 | 
			
		||||
                response.StartLocation = "url";
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if ((regionInfo != null) && (PrepareLoginToRegion(regionInfo, theUser, response)))
 | 
			
		||||
            {
 | 
			
		||||
                return true;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // StartLocation not available, send him to a nearby region instead
 | 
			
		||||
            // regionInfo = m_gridService.RequestClosestRegion("");
 | 
			
		||||
            //m_log.InfoFormat("[LOGIN]: StartLocation not available sending to region {0}", regionInfo.regionName);
 | 
			
		||||
 | 
			
		||||
            // Send him to default region instead
 | 
			
		||||
            ulong defaultHandle = (((ulong)m_defaultHomeX * Constants.RegionSize) << 32) |
 | 
			
		||||
                                  ((ulong)m_defaultHomeY * Constants.RegionSize);
 | 
			
		||||
 | 
			
		||||
            if ((regionInfo != null) && (defaultHandle == regionInfo.RegionHandle))
 | 
			
		||||
            {
 | 
			
		||||
                m_log.ErrorFormat("[LOGIN]: Not trying the default region since this is the same as the selected region");
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            m_log.Error("[LOGIN]: Sending user to default region " + defaultHandle + " instead");
 | 
			
		||||
            regionInfo = GetRegionInfo(defaultHandle);
 | 
			
		||||
 | 
			
		||||
            if( regionInfo == null )
 | 
			
		||||
            {
 | 
			
		||||
                m_log.ErrorFormat("[LOGIN]: No default region available. Aborting.");
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // Customise the response
 | 
			
		||||
            //response.Home =
 | 
			
		||||
            //    string.Format(
 | 
			
		||||
            //        "{{'region_handle':[r{0},r{1}], 'position':[r{2},r{3},r{4}], 'look_at':[r{5},r{6},r{7}]}}",
 | 
			
		||||
            //        (SimInfo.regionLocX * Constants.RegionSize),
 | 
			
		||||
            //        (SimInfo.regionLocY*Constants.RegionSize),
 | 
			
		||||
            //        theUser.HomeLocation.X, theUser.HomeLocation.Y, theUser.HomeLocation.Z,
 | 
			
		||||
            //        theUser.HomeLookAt.X, theUser.HomeLookAt.Y, theUser.HomeLookAt.Z);
 | 
			
		||||
            theUser.CurrentAgent.Position = new Vector3(128, 128, 0);
 | 
			
		||||
            response.StartLocation = "safe";
 | 
			
		||||
 | 
			
		||||
            return PrepareLoginToRegion(regionInfo, theUser, response);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        protected abstract RegionInfo RequestClosestRegion(string region);
 | 
			
		||||
        protected abstract RegionInfo GetRegionInfo(ulong homeRegionHandle);
 | 
			
		||||
        protected abstract RegionInfo GetRegionInfo(UUID homeRegionId);
 | 
			
		||||
        protected abstract void AddActiveGestures(LoginResponse response, UserProfileData theUser);
 | 
			
		||||
        protected abstract bool PrepareLoginToRegion(RegionInfo regionInfo, UserProfileData user, LoginResponse response);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -676,7 +676,7 @@ namespace OpenSim.Framework
 | 
			
		|||
                proxyUrl = args["proxy_url"].AsString();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static RegionInfo Create(UUID regionID, string regionName, uint regX, uint regY, string externalHostName, uint httpPort, uint simPort, uint remotingPort)
 | 
			
		||||
        public static RegionInfo Create(UUID regionID, string regionName, uint regX, uint regY, string externalHostName, uint httpPort, uint simPort, uint remotingPort, string serverURI)
 | 
			
		||||
        {
 | 
			
		||||
            RegionInfo regionInfo;
 | 
			
		||||
            IPEndPoint neighbourInternalEndPoint = new IPEndPoint(Util.GetHostFromDNS(externalHostName), (int)simPort);                    
 | 
			
		||||
| 
						 | 
				
			
			@ -686,6 +686,7 @@ namespace OpenSim.Framework
 | 
			
		|||
            regionInfo.HttpPort = httpPort;
 | 
			
		||||
            regionInfo.RegionID = regionID;
 | 
			
		||||
            regionInfo.RegionName = regionName;
 | 
			
		||||
            regionInfo.ServerURI = serverURI;
 | 
			
		||||
            return regionInfo;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -99,11 +99,11 @@ namespace OpenSim.Grid.UserServer.Modules
 | 
			
		|||
                m_httpServer.AddStreamHandler(new OpenIdStreamHandler("GET", "/openid/server/", this));
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        public  void  setloginlevel(int level)
 | 
			
		||||
 | 
			
		||||
        public void setloginlevel(int level)
 | 
			
		||||
        {
 | 
			
		||||
              m_minLoginLevel = level;
 | 
			
		||||
              m_log.InfoFormat("[GRID]: Login Level set to {0} ", level);
 | 
			
		||||
            m_minLoginLevel = level;
 | 
			
		||||
            m_log.InfoFormat("[GRID]: Login Level set to {0} ", level);
 | 
			
		||||
        }
 | 
			
		||||
        public void setwelcometext(string text)
 | 
			
		||||
        {
 | 
			
		||||
| 
						 | 
				
			
			@ -199,155 +199,49 @@ namespace OpenSim.Grid.UserServer.Modules
 | 
			
		|||
            //base.LogOffUser(theUser);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Customises the login response and fills in missing values.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="response">The existing response</param>
 | 
			
		||||
        /// <param name="theUser">The user profile</param>
 | 
			
		||||
        /// <param name="startLocationRequest">The requested start location</param>
 | 
			
		||||
        public override bool CustomiseResponse(LoginResponse response, UserProfileData theUser, string startLocationRequest)
 | 
			
		||||
        protected override RegionInfo RequestClosestRegion(string region)
 | 
			
		||||
        {
 | 
			
		||||
            // add active gestures to login-response
 | 
			
		||||
            AddActiveGestures(response, theUser);
 | 
			
		||||
            RegionProfileData profileData = m_regionProfileService.RequestSimProfileData(region,
 | 
			
		||||
                                                                                         m_config.GridServerURL, m_config.GridSendKey, m_config.GridRecvKey);
 | 
			
		||||
 | 
			
		||||
            // HomeLocation
 | 
			
		||||
            RegionProfileData homeInfo = null;
 | 
			
		||||
            // use the homeRegionID if it is stored already. If not, use the regionHandle as before
 | 
			
		||||
            UUID homeRegionId = theUser.HomeRegionID;
 | 
			
		||||
            ulong homeRegionHandle = theUser.HomeRegion;
 | 
			
		||||
            if (homeRegionId != UUID.Zero)
 | 
			
		||||
            if (profileData != null)
 | 
			
		||||
            {
 | 
			
		||||
                homeInfo = GetRegionInfo(homeRegionId);
 | 
			
		||||
                return profileData.ToRegionInfo();
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                homeInfo = GetRegionInfo(homeRegionHandle);
 | 
			
		||||
                return null;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
            if (homeInfo != null)
 | 
			
		||||
        protected override RegionInfo GetRegionInfo(ulong homeRegionHandle)
 | 
			
		||||
        {
 | 
			
		||||
            RegionProfileData profileData = m_regionProfileService.RequestSimProfileData(homeRegionHandle,
 | 
			
		||||
                                                                                         m_config.GridServerURL, m_config.GridSendKey,
 | 
			
		||||
                                                                                         m_config.GridRecvKey);
 | 
			
		||||
            if (profileData != null)
 | 
			
		||||
            {
 | 
			
		||||
                response.Home =
 | 
			
		||||
                    string.Format(
 | 
			
		||||
                        "{{'region_handle':[r{0},r{1}], 'position':[r{2},r{3},r{4}], 'look_at':[r{5},r{6},r{7}]}}",
 | 
			
		||||
                        (homeInfo.regionLocX*Constants.RegionSize),
 | 
			
		||||
                        (homeInfo.regionLocY*Constants.RegionSize),
 | 
			
		||||
                        theUser.HomeLocation.X, theUser.HomeLocation.Y, theUser.HomeLocation.Z,
 | 
			
		||||
                        theUser.HomeLookAt.X, theUser.HomeLookAt.Y, theUser.HomeLookAt.Z);
 | 
			
		||||
                return profileData.ToRegionInfo();
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                // Emergency mode: Home-region isn't available, so we can't request the region info.
 | 
			
		||||
                // Use the stored home regionHandle instead.
 | 
			
		||||
                // NOTE: If the home-region moves, this will be wrong until the users update their user-profile again
 | 
			
		||||
                ulong regionX = homeRegionHandle >> 32;
 | 
			
		||||
                ulong regionY = homeRegionHandle & 0xffffffff;
 | 
			
		||||
                response.Home =
 | 
			
		||||
                    string.Format(
 | 
			
		||||
                        "{{'region_handle':[r{0},r{1}], 'position':[r{2},r{3},r{4}], 'look_at':[r{5},r{6},r{7}]}}",
 | 
			
		||||
                        regionX, regionY,
 | 
			
		||||
                        theUser.HomeLocation.X, theUser.HomeLocation.Y, theUser.HomeLocation.Z,
 | 
			
		||||
                        theUser.HomeLookAt.X, theUser.HomeLookAt.Y, theUser.HomeLookAt.Z);
 | 
			
		||||
                m_log.InfoFormat("[LOGIN] Home region of user {0} {1} is not available; using computed region position {2} {3}",
 | 
			
		||||
                                 theUser.FirstName, theUser.SurName,
 | 
			
		||||
                                 regionX, regionY);
 | 
			
		||||
                return null;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
            // StartLocation
 | 
			
		||||
            RegionProfileData regionInfo = null;
 | 
			
		||||
            if (startLocationRequest == "home")
 | 
			
		||||
        protected override RegionInfo GetRegionInfo(UUID homeRegionId)
 | 
			
		||||
        {
 | 
			
		||||
            RegionProfileData profileData = m_regionProfileService.RequestSimProfileData(homeRegionId,
 | 
			
		||||
                                                                                         m_config.GridServerURL, m_config.GridSendKey,
 | 
			
		||||
                                                                                         m_config.GridRecvKey);
 | 
			
		||||
            if (profileData != null)
 | 
			
		||||
            {
 | 
			
		||||
                regionInfo = homeInfo;
 | 
			
		||||
                theUser.CurrentAgent.Position = theUser.HomeLocation;
 | 
			
		||||
                response.LookAt = "[r" + theUser.HomeLookAt.X.ToString() + ",r" + theUser.HomeLookAt.Y.ToString() + ",r" + theUser.HomeLookAt.Z.ToString() + "]";
 | 
			
		||||
            }
 | 
			
		||||
            else if (startLocationRequest == "last")
 | 
			
		||||
            {
 | 
			
		||||
                UUID lastRegion = theUser.CurrentAgent.Region;
 | 
			
		||||
                regionInfo = GetRegionInfo(lastRegion);
 | 
			
		||||
                response.LookAt = "[r" + theUser.CurrentAgent.LookAt.X.ToString() + ",r" + theUser.CurrentAgent.LookAt.Y.ToString() + ",r" + theUser.CurrentAgent.LookAt.Z.ToString() + "]";
 | 
			
		||||
                return profileData.ToRegionInfo();
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                Regex reURI = new Regex(@"^uri:(?<region>[^&]+)&(?<x>\d+)&(?<y>\d+)&(?<z>\d+)$");
 | 
			
		||||
                Match uriMatch = reURI.Match(startLocationRequest);
 | 
			
		||||
                if (uriMatch == null)
 | 
			
		||||
                {
 | 
			
		||||
                    m_log.InfoFormat("[LOGIN]: Got Custom Login URL {0}, but can't process it", startLocationRequest);
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    string region = uriMatch.Groups["region"].ToString();
 | 
			
		||||
                    regionInfo = RequestClosestRegion(region);
 | 
			
		||||
                    if (regionInfo == null)
 | 
			
		||||
                    {
 | 
			
		||||
                        m_log.InfoFormat("[LOGIN]: Got Custom Login URL {0}, can't locate region {1}", startLocationRequest, region);
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        theUser.CurrentAgent.Position = new Vector3(float.Parse(uriMatch.Groups["x"].Value),
 | 
			
		||||
                            float.Parse(uriMatch.Groups["y"].Value), float.Parse(uriMatch.Groups["z"].Value));
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                response.LookAt = "[r0,r1,r0]";
 | 
			
		||||
                // can be: last, home, safe, url
 | 
			
		||||
                response.StartLocation = "url";
 | 
			
		||||
                return null;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if ((regionInfo != null) && (PrepareLoginToRegion(regionInfo, theUser, response)))
 | 
			
		||||
            {
 | 
			
		||||
                return true;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // StartLocation not available, send him to a nearby region instead
 | 
			
		||||
            //regionInfo = RegionProfileData.RequestSimProfileData("", m_config.GridServerURL, m_config.GridSendKey, m_config.GridRecvKey);
 | 
			
		||||
            //m_log.InfoFormat("[LOGIN]: StartLocation not available sending to region {0}", regionInfo.regionName);
 | 
			
		||||
 | 
			
		||||
            // Send him to default region instead
 | 
			
		||||
            // Load information from the gridserver
 | 
			
		||||
            ulong defaultHandle = (((ulong) m_defaultHomeX * Constants.RegionSize) << 32) |
 | 
			
		||||
                                  ((ulong) m_defaultHomeY * Constants.RegionSize);
 | 
			
		||||
 | 
			
		||||
            if ((regionInfo != null) && (defaultHandle == regionInfo.regionHandle))
 | 
			
		||||
            {
 | 
			
		||||
                m_log.ErrorFormat("[LOGIN]: Not trying the default region since this is the same as the selected region");
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            m_log.Error("[LOGIN]: Sending user to default region " + defaultHandle + " instead");
 | 
			
		||||
            regionInfo = GetRegionInfo(defaultHandle);
 | 
			
		||||
 | 
			
		||||
            // Customise the response
 | 
			
		||||
            //response.Home =
 | 
			
		||||
            //    string.Format(
 | 
			
		||||
            //        "{{'region_handle':[r{0},r{1}], 'position':[r{2},r{3},r{4}], 'look_at':[r{5},r{6},r{7}]}}",
 | 
			
		||||
            //        (SimInfo.regionLocX * Constants.RegionSize),
 | 
			
		||||
            //        (SimInfo.regionLocY*Constants.RegionSize),
 | 
			
		||||
            //        theUser.HomeLocation.X, theUser.HomeLocation.Y, theUser.HomeLocation.Z,
 | 
			
		||||
            //        theUser.HomeLookAt.X, theUser.HomeLookAt.Y, theUser.HomeLookAt.Z);
 | 
			
		||||
            theUser.CurrentAgent.Position = new Vector3(128,128,0);
 | 
			
		||||
            response.StartLocation = "safe";
 | 
			
		||||
 | 
			
		||||
            return PrepareLoginToRegion(regionInfo, theUser, response);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        protected RegionProfileData RequestClosestRegion(string region)
 | 
			
		||||
        {
 | 
			
		||||
            return m_regionProfileService.RequestSimProfileData(region,
 | 
			
		||||
                                                           m_config.GridServerURL, m_config.GridSendKey, m_config.GridRecvKey);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        protected RegionProfileData GetRegionInfo(ulong homeRegionHandle)
 | 
			
		||||
        {
 | 
			
		||||
            return m_regionProfileService.RequestSimProfileData(homeRegionHandle,
 | 
			
		||||
                                                           m_config.GridServerURL, m_config.GridSendKey,
 | 
			
		||||
                                                           m_config.GridRecvKey);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        protected RegionProfileData GetRegionInfo(UUID homeRegionId)
 | 
			
		||||
        {
 | 
			
		||||
            return m_regionProfileService.RequestSimProfileData(homeRegionId,
 | 
			
		||||
                                                           m_config.GridServerURL, m_config.GridSendKey,
 | 
			
		||||
                                                           m_config.GridRecvKey);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -359,7 +253,7 @@ namespace OpenSim.Grid.UserServer.Modules
 | 
			
		|||
        /// <param name="theUser">
 | 
			
		||||
        /// A <see cref="UserProfileData"/>
 | 
			
		||||
        /// </param>
 | 
			
		||||
        private void AddActiveGestures(LoginResponse response, UserProfileData theUser)
 | 
			
		||||
        protected override void AddActiveGestures(LoginResponse response, UserProfileData theUser)
 | 
			
		||||
        {
 | 
			
		||||
            List<InventoryItemBase> gestures = m_inventoryService.GetActiveGestures(theUser.ID);
 | 
			
		||||
            //m_log.DebugFormat("[LOGIN]: AddActiveGestures, found {0}", gestures == null ? 0 : gestures.Count);
 | 
			
		||||
| 
						 | 
				
			
			@ -377,18 +271,23 @@ namespace OpenSim.Grid.UserServer.Modules
 | 
			
		|||
            response.ActiveGestures = list;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        protected override bool PrepareLoginToRegion(RegionInfo regionInfo, UserProfileData user, LoginResponse response)
 | 
			
		||||
        {
 | 
			
		||||
            return PrepareLoginToRegion(RegionProfileData.FromRegionInfo(regionInfo), user, response);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Prepare a login to the given region.  This involves both telling the region to expect a connection
 | 
			
		||||
        /// and appropriately customising the response to the user.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="sim"></param>
 | 
			
		||||
        /// <param name="regionInfo"></param>
 | 
			
		||||
        /// <param name="user"></param>
 | 
			
		||||
        /// <param name="response"></param>
 | 
			
		||||
        /// <returns>true if the region was successfully contacted, false otherwise</returns>
 | 
			
		||||
        private bool PrepareLoginToRegion(RegionProfileData regionInfo, UserProfileData user, LoginResponse response)
 | 
			
		||||
        {
 | 
			
		||||
            try
 | 
			
		||||
            {                
 | 
			
		||||
            {
 | 
			
		||||
                response.SimAddress = Util.GetHostFromURL(regionInfo.serverURI).ToString();
 | 
			
		||||
                response.SimPort = uint.Parse(regionInfo.serverURI.Split(new char[] { '/', ':' })[4]);
 | 
			
		||||
                response.RegionX = regionInfo.regionLocX;
 | 
			
		||||
| 
						 | 
				
			
			@ -405,11 +304,11 @@ namespace OpenSim.Grid.UserServer.Modules
 | 
			
		|||
                m_log.InfoFormat(
 | 
			
		||||
                    "[LOGIN]: Telling {0} @ {1},{2} ({3}) to prepare for client connection",
 | 
			
		||||
                    regionInfo.regionName, response.RegionX, response.RegionY, regionInfo.httpServerURI);
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                // Update agent with target sim
 | 
			
		||||
                user.CurrentAgent.Region = regionInfo.UUID;
 | 
			
		||||
                user.CurrentAgent.Handle = regionInfo.regionHandle;
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                // Prepare notification
 | 
			
		||||
                Hashtable loginParams = new Hashtable();
 | 
			
		||||
                loginParams["session_id"] = user.CurrentAgent.SessionID.ToString();
 | 
			
		||||
| 
						 | 
				
			
			@ -417,7 +316,7 @@ namespace OpenSim.Grid.UserServer.Modules
 | 
			
		|||
                loginParams["firstname"] = user.FirstName;
 | 
			
		||||
                loginParams["lastname"] = user.SurName;
 | 
			
		||||
                loginParams["agent_id"] = user.ID.ToString();
 | 
			
		||||
                loginParams["circuit_code"] = (Int32) Convert.ToUInt32(response.CircuitCode);
 | 
			
		||||
                loginParams["circuit_code"] = (Int32)Convert.ToUInt32(response.CircuitCode);
 | 
			
		||||
                loginParams["startpos_x"] = user.CurrentAgent.Position.X.ToString();
 | 
			
		||||
                loginParams["startpos_y"] = user.CurrentAgent.Position.Y.ToString();
 | 
			
		||||
                loginParams["startpos_z"] = user.CurrentAgent.Position.Z.ToString();
 | 
			
		||||
| 
						 | 
				
			
			@ -450,10 +349,10 @@ namespace OpenSim.Grid.UserServer.Modules
 | 
			
		|||
 | 
			
		||||
                    if (GridResp.Value != null)
 | 
			
		||||
                    {
 | 
			
		||||
                        Hashtable resp = (Hashtable) GridResp.Value;
 | 
			
		||||
                        Hashtable resp = (Hashtable)GridResp.Value;
 | 
			
		||||
                        if (resp.ContainsKey("success"))
 | 
			
		||||
                        {
 | 
			
		||||
                            if ((string) resp["success"] == "FALSE")
 | 
			
		||||
                            if ((string)resp["success"] == "FALSE")
 | 
			
		||||
                            {
 | 
			
		||||
                                responseSuccess = false;
 | 
			
		||||
                            }
 | 
			
		||||
| 
						 | 
				
			
			@ -533,7 +432,7 @@ namespace OpenSim.Grid.UserServer.Modules
 | 
			
		|||
 | 
			
		||||
                foreach (InventoryFolderBase InvFolder in folders)
 | 
			
		||||
                {
 | 
			
		||||
//                    m_log.DebugFormat("[LOGIN]: Received agent inventory folder {0}", InvFolder.name);
 | 
			
		||||
                    //                    m_log.DebugFormat("[LOGIN]: Received agent inventory folder {0}", InvFolder.name);
 | 
			
		||||
 | 
			
		||||
                    if (InvFolder.ParentID == UUID.Zero)
 | 
			
		||||
                    {
 | 
			
		||||
| 
						 | 
				
			
			@ -542,8 +441,8 @@ namespace OpenSim.Grid.UserServer.Modules
 | 
			
		|||
                    TempHash = new Hashtable();
 | 
			
		||||
                    TempHash["name"] = InvFolder.Name;
 | 
			
		||||
                    TempHash["parent_id"] = InvFolder.ParentID.ToString();
 | 
			
		||||
                    TempHash["version"] = (Int32) InvFolder.Version;
 | 
			
		||||
                    TempHash["type_default"] = (Int32) InvFolder.Type;
 | 
			
		||||
                    TempHash["version"] = (Int32)InvFolder.Version;
 | 
			
		||||
                    TempHash["type_default"] = (Int32)InvFolder.Type;
 | 
			
		||||
                    TempHash["folder_id"] = InvFolder.ID.ToString();
 | 
			
		||||
                    AgentInventoryArray.Add(TempHash);
 | 
			
		||||
                }
 | 
			
		||||
| 
						 | 
				
			
			@ -559,14 +458,14 @@ namespace OpenSim.Grid.UserServer.Modules
 | 
			
		|||
        public XmlRpcResponse XmlRPCSetLoginParams(XmlRpcRequest request)
 | 
			
		||||
        {
 | 
			
		||||
            XmlRpcResponse response = new XmlRpcResponse();
 | 
			
		||||
            Hashtable requestData = (Hashtable) request.Params[0];
 | 
			
		||||
            Hashtable requestData = (Hashtable)request.Params[0];
 | 
			
		||||
            UserProfileData userProfile;
 | 
			
		||||
            Hashtable responseData = new Hashtable();
 | 
			
		||||
 | 
			
		||||
            UUID uid;
 | 
			
		||||
            string pass = requestData["password"].ToString();
 | 
			
		||||
 | 
			
		||||
            if (!UUID.TryParse((string) requestData["avatar_uuid"], out uid))
 | 
			
		||||
            if (!UUID.TryParse((string)requestData["avatar_uuid"], out uid))
 | 
			
		||||
            {
 | 
			
		||||
                responseData["error"] = "No authorization";
 | 
			
		||||
                response.Value = responseData;
 | 
			
		||||
| 
						 | 
				
			
			@ -597,6 +496,5 @@ namespace OpenSim.Grid.UserServer.Modules
 | 
			
		|||
            response.Value = responseData;
 | 
			
		||||
            return response;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -416,11 +416,14 @@ namespace OpenSim.Region.Communications.OGS1
 | 
			
		|||
                        httpPort = Convert.ToUInt32((string)responseData["http_port"]);
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    // Ok, so this is definitively the wrong place to do this, way too hard coded, but it doesn't seem we GET this info?
 | 
			
		||||
 | 
			
		||||
                    string simURI = "http://" + regionInfo.ExternalHostName + ":" + regionInfo.InternalEndPoint.Port;
 | 
			
		||||
 | 
			
		||||
                    // string externalUri = (string) responseData["sim_uri"];
 | 
			
		||||
 | 
			
		||||
                    //IPEndPoint neighbourInternalEndPoint = new IPEndPoint(IPAddress.Parse(internalIpStr), (int) port);
 | 
			
		||||
                    regionInfo = RegionInfo.Create(regionID, regionName, regX, regY, externalHostName, httpPort, simPort, remotingPort);
 | 
			
		||||
                    regionInfo = RegionInfo.Create(regionID, regionName, regX, regY, externalHostName, httpPort, simPort, remotingPort, simURI );
 | 
			
		||||
 | 
			
		||||
                    lock (m_remoteRegionInfoCache)
 | 
			
		||||
                    {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue