コード例 #1
0
ファイル: GridDBService.cs プロジェクト: boodie/Opensim2
 public string CheckReservations(RegionProfileData theSim, XmlNode authkeynode)
 {
     foreach (IGridDataPlugin plugin in _plugins)
     {
         try
         {
             //Check reservations
             ReservationData reserveData =
                 plugin.GetReservationAtPoint(theSim.regionLocX, theSim.regionLocY);
             if ((reserveData != null && reserveData.gridRecvKey == theSim.regionRecvKey) ||
                 (reserveData == null && authkeynode.InnerText != theSim.regionRecvKey))
             {
                 plugin.AddProfile(theSim);
                 m_log.Info("[grid]: New sim added to grid (" + theSim.regionName + ")");
                 logToDB(theSim.ToString(), "RestSetSimMethod", String.Empty, 5,
                         "Region successfully updated and connected to grid.");
             }
             else
             {
                 m_log.Warn("[grid]: " +
                            "Unable to update region (RestSetSimMethod): Incorrect reservation auth key.");
                 // Wanted: " + reserveData.gridRecvKey + ", Got: " + theSim.regionRecvKey + ".");
                 return("Unable to update region (RestSetSimMethod): Incorrect auth key.");
             }
         }
         catch (Exception e)
         {
             m_log.Warn("[GRID]: GetRegionPlugin Handle " + plugin.Name + " unable to add new sim: " +
                        e.ToString());
         }
     }
     return("OK");
 }
コード例 #2
0
        /// <summary>
        ///     Reads a region row from a database reader
        /// </summary>
        /// <param name="reader">An active database reader</param>
        /// <returns>A region profile</returns>
        private static RegionProfileData ReadSimRow(IDataRecord reader)
        {
            RegionProfileData retval = new RegionProfileData();

            // Region Main gotta-have-or-we-return-null parts
            UInt64 tmp64;

            if (!UInt64.TryParse(reader["regionHandle"].ToString(), out tmp64))
            {
                return(null);
            }

            retval.regionHandle = tmp64;

            retval.UUID = new UUID((Guid)reader["uuid"]); // tmp_uuid;

            // non-critical parts
            retval.regionName = reader["regionName"].ToString();
            retval.originUUID = new UUID((Guid)reader["originUUID"]);

            // Secrets
            retval.regionRecvKey = reader["regionRecvKey"].ToString();
            retval.regionSecret  = reader["regionSecret"].ToString();
            retval.regionSendKey = reader["regionSendKey"].ToString();

            // Region Server
            retval.regionDataURI = reader["regionDataURI"].ToString();
            retval.regionOnline  = false; // Needs to be pinged before this can be set.
            retval.serverIP      = reader["serverIP"].ToString();
            retval.serverPort    = Convert.ToUInt32(reader["serverPort"]);
            retval.serverURI     = reader["serverURI"].ToString();
            retval.httpPort      = Convert.ToUInt32(reader["serverHttpPort"].ToString());
            retval.remotingPort  = Convert.ToUInt32(reader["serverRemotingPort"].ToString());

            // Location
            retval.regionLocX = Convert.ToUInt32(reader["locX"].ToString());
            retval.regionLocY = Convert.ToUInt32(reader["locY"].ToString());
            retval.regionLocZ = Convert.ToUInt32(reader["locZ"].ToString());

            // Neighbours - 0 = No Override
            retval.regionEastOverrideHandle  = Convert.ToUInt64(reader["eastOverrideHandle"].ToString());
            retval.regionWestOverrideHandle  = Convert.ToUInt64(reader["westOverrideHandle"].ToString());
            retval.regionSouthOverrideHandle = Convert.ToUInt64(reader["southOverrideHandle"].ToString());
            retval.regionNorthOverrideHandle = Convert.ToUInt64(reader["northOverrideHandle"].ToString());

            // Assets
            retval.regionAssetURI     = reader["regionAssetURI"].ToString();
            retval.regionAssetRecvKey = reader["regionAssetRecvKey"].ToString();
            retval.regionAssetSendKey = reader["regionAssetSendKey"].ToString();

            // Userserver
            retval.regionUserURI     = reader["regionUserURI"].ToString();
            retval.regionUserRecvKey = reader["regionUserRecvKey"].ToString();
            retval.regionUserSendKey = reader["regionUserSendKey"].ToString();

            // World Map Addition
            retval.regionMapTextureID = new UUID((Guid)reader["regionMapTexture"]);
            retval.owner_uuid         = new UUID((Guid)reader["owner_uuid"]);
            return(retval);
        }
コード例 #3
0
ファイル: MySQLGridData.cs プロジェクト: boodie/Opensim2
        /// <summary>
        ///     Returns a sim profile from it's UUID
        /// </summary>
        /// <param name="uuid">The region UUID</param>
        /// <returns>The sim profile</returns>
        override public RegionProfileData GetProfileByUUID(UUID uuid)
        {
            MySQLSuperManager dbm = GetLockedConnection();

            try
            {
                Dictionary <string, object> param = new Dictionary <string, object>();
                param["?uuid"] = uuid.ToString();

                IDbCommand  result = dbm.Manager.Query("SELECT * FROM regions WHERE uuid = ?uuid", param);
                IDataReader reader = result.ExecuteReader();

                RegionProfileData row = dbm.Manager.readSimRow(reader);
                reader.Close();
                result.Dispose();

                return(row);
            }

            catch (Exception e)
            {
                dbm.Manager.Reconnect();
                m_log.Error(e.ToString());
                return(null);
            }

            finally
            {
                dbm.Release();
            }
        }
コード例 #4
0
        /// <summary>
        /// Returns a sim profile from it's Region name string
        /// </summary>
        /// <returns>The sim profile</returns>
        override public RegionProfileData GetProfileByString(string regionName)
        {
            if (regionName.Length > 2)
            {
                try
                {
                    Dictionary <string, object> parms = new Dictionary <string, object>();
                    // Add % because this is a like query.
                    parms["?regionName"] = regionName + "%";

                    using (ISimpleDB conn = _connFactory.GetConnection())
                    {
                        string query = "SELECT * FROM regions WHERE regionName LIKE ?regionName ORDER BY LENGTH(regionName) ASC LIMIT 1";

                        using (IDataReader reader = conn.QueryAndUseReader(query, parms))
                        {
                            RegionProfileData row = this.readSimRow(reader);

                            return(row);
                        }
                    }
                }
                catch (Exception e)
                {
                    m_log.Error(e.ToString());
                    return(null);
                }
            }

            m_log.Error("[GRID DB]: Searched for a Region Name shorter then 3 characters");
            return(null);
        }
コード例 #5
0
ファイル: GridXmlRpcModule.cs プロジェクト: boodie/Opensim2
        /// <summary>
        /// Returns a XML String containing a list of the neighbouring regions
        /// </summary>
        /// <param name="reqhandle">The regionhandle for the center sim</param>
        /// <returns>An XML string containing neighbour entities</returns>
        public string GetXMLNeighbours(ulong reqhandle)
        {
            string            response       = String.Empty;
            RegionProfileData central_region = m_gridDBService.GetRegion(reqhandle);
            RegionProfileData neighbour;

            for (int x = -1; x < 2; x++)
            {
                for (int y = -1; y < 2; y++)
                {
                    if (
                        m_gridDBService.GetRegion(
                            Util.UIntsToLong((uint)((central_region.regionLocX + x) * Constants.RegionSize),
                                             (uint)(central_region.regionLocY + y) * Constants.RegionSize)) != null)
                    {
                        neighbour =
                            m_gridDBService.GetRegion(
                                Util.UIntsToLong((uint)((central_region.regionLocX + x) * Constants.RegionSize),
                                                 (uint)(central_region.regionLocY + y) * Constants.RegionSize));

                        response += "<neighbour>";
                        response += "<sim_ip>" + neighbour.serverIP + "</sim_ip>";
                        response += "<sim_port>" + neighbour.serverPort.ToString() + "</sim_port>";
                        response += "<locx>" + neighbour.regionLocX.ToString() + "</locx>";
                        response += "<locy>" + neighbour.regionLocY.ToString() + "</locy>";
                        response += "<regionhandle>" + neighbour.regionHandle.ToString() + "</regionhandle>";
                        response += "</neighbour>";
                    }
                }
            }
            return(response);
        }
コード例 #6
0
ファイル: GridDBService.cs プロジェクト: boodie/Opensim2
        public DataResponse AddUpdateRegion(RegionProfileData sim, RegionProfileData existingSim)
        {
            DataResponse insertResponse = DataResponse.RESPONSE_ERROR;

            foreach (IGridDataPlugin plugin in _plugins)
            {
                try
                {
                    if (existingSim == null)
                    {
                        insertResponse = plugin.AddProfile(sim);
                    }
                    else
                    {
                        insertResponse = plugin.UpdateProfile(sim);
                    }
                }
                catch (Exception e)
                {
                    m_log.Warn("[LOGIN END]: " +
                               "Unable to login region " + sim.ToString() + " via " + plugin.Name);
                    m_log.Warn("[LOGIN END]: " + e.ToString());
                }
            }
            return(insertResponse);
        }
コード例 #7
0
        /// <summary>
        /// Inserts a new region into the database
        /// </summary>
        /// <param name="profile">The region to insert</param>
        /// <returns>Success?</returns>
        public bool insertRow(RegionProfileData profile)
        {
            string sql =
                "REPLACE INTO regions VALUES (regionHandle, regionName, uuid, regionRecvKey, regionSecret, regionSendKey, regionDataURI, ";

            sql +=
                "serverIP, serverPort, serverURI, locX, locY, locZ, eastOverrideHandle, westOverrideHandle, southOverrideHandle, northOverrideHandle, regionAssetURI, regionAssetRecvKey, ";
            sql += "regionAssetSendKey, regionUserURI, regionUserRecvKey, regionUserSendKey) VALUES ";

            sql += "(@regionHandle, @regionName, @uuid, @regionRecvKey, @regionSecret, @regionSendKey, @regionDataURI, ";
            sql +=
                "@serverIP, @serverPort, @serverURI, @locX, @locY, @locZ, @eastOverrideHandle, @westOverrideHandle, @southOverrideHandle, @northOverrideHandle, @regionAssetURI, @regionAssetRecvKey, ";
            sql += "@regionAssetSendKey, @regionUserURI, @regionUserRecvKey, @regionUserSendKey);";

            Dictionary <string, string> parameters = new Dictionary <string, string>();

            parameters["regionHandle"]        = profile.regionHandle.ToString();
            parameters["regionName"]          = profile.regionName;
            parameters["uuid"]                = profile.UUID.ToString();
            parameters["regionRecvKey"]       = profile.regionRecvKey;
            parameters["regionSendKey"]       = profile.regionSendKey;
            parameters["regionDataURI"]       = profile.regionDataURI;
            parameters["serverIP"]            = profile.serverIP;
            parameters["serverPort"]          = profile.serverPort.ToString();
            parameters["serverURI"]           = profile.serverURI;
            parameters["locX"]                = profile.regionLocX.ToString();
            parameters["locY"]                = profile.regionLocY.ToString();
            parameters["locZ"]                = profile.regionLocZ.ToString();
            parameters["eastOverrideHandle"]  = profile.regionEastOverrideHandle.ToString();
            parameters["westOverrideHandle"]  = profile.regionWestOverrideHandle.ToString();
            parameters["northOverrideHandle"] = profile.regionNorthOverrideHandle.ToString();
            parameters["southOverrideHandle"] = profile.regionSouthOverrideHandle.ToString();
            parameters["regionAssetURI"]      = profile.regionAssetURI;
            parameters["regionAssetRecvKey"]  = profile.regionAssetRecvKey;
            parameters["regionAssetSendKey"]  = profile.regionAssetSendKey;
            parameters["regionUserURI"]       = profile.regionUserURI;
            parameters["regionUserRecvKey"]   = profile.regionUserRecvKey;
            parameters["regionUserSendKey"]   = profile.regionUserSendKey;

            bool returnval = false;

            try
            {
                IDbCommand result = Query(sql, parameters);

                if (result.ExecuteNonQuery() == 1)
                {
                    returnval = true;
                }

                result.Dispose();
            }
            catch (Exception)
            {
                return(false);
            }

            return(returnval);
        }
コード例 #8
0
 /// <summary>
 /// Adds a new profile to the database
 /// </summary>
 /// <param name="profile">The profile to add</param>
 /// <returns>Successful?</returns>
 override public DataResponse AddProfile(RegionProfileData profile)
 {
     if (this.insertRegion(profile))
     {
         return(DataResponse.RESPONSE_OK);
     }
     return(DataResponse.RESPONSE_ERROR);
 }
コード例 #9
0
 /// <summary>
 /// Update the specified region in the database
 /// </summary>
 /// <param name="profile">The profile to update</param>
 /// <returns>A dataresponse enum indicating success</returns>
 override public DataResponse UpdateProfile(RegionProfileData profile)
 {
     if (UpdateRegionRow(profile))
     {
         return(DataResponse.RESPONSE_OK);
     }
     return(DataResponse.RESPONSE_ERROR);
 }
コード例 #10
0
        public void T012_DeleteProfile()
        {
            createRegion(region1, "doesn't matter");

            db.DeleteProfile(region1.ToString());
            RegionProfileData retreg = db.GetProfileByUUID(region1);

            Assert.That(retreg, Is.Null);
        }
コード例 #11
0
ファイル: GridXmlRpcModule.cs プロジェクト: boodie/Opensim2
        /// <summary>
        /// Construct a successful response to a simulator's login attempt.
        /// </summary>
        /// <param name="sim"></param>
        /// <returns></returns>
        private XmlRpcResponse CreateLoginResponse(RegionProfileData sim)
        {
            XmlRpcResponse response     = new XmlRpcResponse();
            Hashtable      responseData = new Hashtable();

            response.Value = responseData;

            ArrayList SimNeighboursData = GetSimNeighboursData(sim);

            responseData["UUID"]        = sim.UUID.ToString();
            responseData["region_locx"] = sim.regionLocX.ToString();
            responseData["region_locy"] = sim.regionLocY.ToString();
            responseData["regionname"]  = sim.regionName;
            responseData["estate_id"]   = "1";
            responseData["neighbours"]  = SimNeighboursData;

            responseData["sim_ip"]        = sim.serverIP;
            responseData["sim_port"]      = sim.serverPort.ToString();
            responseData["asset_url"]     = sim.regionAssetURI;
            responseData["asset_sendkey"] = sim.regionAssetSendKey;
            responseData["asset_recvkey"] = sim.regionAssetRecvKey;
            responseData["user_url"]      = sim.regionUserURI;
            responseData["user_sendkey"]  = sim.regionUserSendKey;
            responseData["user_recvkey"]  = sim.regionUserRecvKey;
            responseData["authkey"]       = sim.regionSecret;

            // New! If set, use as URL to local sim storage (ie http://remotehost/region.Yap)
            responseData["data_uri"] = sim.regionDataURI;

            responseData["allow_forceful_banlines"] = m_config.AllowForcefulBanlines;

            // Instead of sending a multitude of message servers to the registering sim
            // we should probably be sending a single one and parhaps it's backup
            // that has responsibility over routing it's messages.

            // The Sim won't be contacting us again about any of the message server stuff during it's time up.

            responseData["messageserver_count"] = 0;

            // IGridMessagingModule messagingModule;
            // if (m_gridCore.TryGet<IGridMessagingModule>(out messagingModule))
            //{
            if (m_messagingServerMapper != null)
            {
                List <MessageServerInfo> messageServers = m_messagingServerMapper.GetMessageServersList();
                responseData["messageserver_count"] = messageServers.Count;

                for (int i = 0; i < messageServers.Count; i++)
                {
                    responseData["messageserver_uri" + i]     = messageServers[i].URI;
                    responseData["messageserver_sendkey" + i] = messageServers[i].sendkey;
                    responseData["messageserver_recvkey" + i] = messageServers[i].recvkey;
                }
            }
            return(response);
        }
コード例 #12
0
ファイル: BasicGridTest.cs プロジェクト: AlphaStaxLLC/taiga
        protected RegionProfileData createRegion(UUID regionUUID, string regionName)
        {
            RegionProfileData reg = new RegionProfileData();
            new PropertyScrambler<RegionProfileData>().Scramble(reg);
            reg.Uuid = regionUUID;
            reg.RegionName = regionName;

            db.StoreProfile(reg);

            return reg;
        }
コード例 #13
0
        public override DataResponse DeleteProfile(string uuid)
        {
            RegionProfileData regionProfileData = (RegionProfileData)manager.Get(typeof(RegionProfileData), new UUID(uuid));

            if (regionProfileData != null)
            {
                manager.Delete(regionProfileData);
                return(DataResponse.RESPONSE_OK);
            }
            return(DataResponse.RESPONSE_ERROR);
        }
コード例 #14
0
 /// <summary>
 /// Adds a new specified region to the database
 /// </summary>
 /// <param name="profile">The profile to add</param>
 /// <returns>A dataresponse enum indicating success</returns>
 override public DataResponse AddProfile(RegionProfileData profile)
 {
     if (database.insertRow(profile))
     {
         return(DataResponse.RESPONSE_OK);
     }
     else
     {
         return(DataResponse.RESPONSE_ERROR);
     }
 }
コード例 #15
0
 public override DataResponse UpdateProfile(RegionProfileData profile)
 {
     if (manager.Get(typeof(RegionProfileData), profile.Uuid) != null)
     {
         manager.Update(profile);
         return(DataResponse.RESPONSE_OK);
     }
     else
     {
         return(DataResponse.RESPONSE_ERROR);
     }
 }
コード例 #16
0
        public void T013_UpdateProfile()
        {
            createRegion(region2, "|<Goth@m Ci1y>|");

            RegionProfileData retreg = db.GetProfileByUUID(region2);

            retreg.regionName = "Gotham City";

            db.UpdateProfile(retreg);

            retreg = db.GetProfileByUUID(region2);
            Assert.That(retreg.RegionName, Is.EqualTo("Gotham City"), "Assert.That(retreg.RegionName, Is.EqualTo(\"Gotham City\"))");
        }
コード例 #17
0
ファイル: GridXmlRpcModule.cs プロジェクト: boodie/Opensim2
 /// <summary>
 /// Checks that the new region data is valid.
 ///
 /// Currently, this means checking that the keys passed in by the new region
 /// match those in the grid server's configuration.
 /// </summary>
 ///
 /// <param name="sim"></param>
 /// <exception cref="LoginException">Thrown if region login failed</exception>
 protected virtual void ValidateNewRegionKeys(RegionProfileData sim)
 {
     if (!(sim.regionRecvKey == m_config.SimSendKey && sim.regionSendKey == m_config.SimRecvKey))
     {
         throw new LoginException(
                   String.Format(
                       "Authentication failed when trying to login new region {0} at location {1} {2}"
                       + " with the region's send key {3} (expected {4}) and the region's receive key {5} (expected {6})",
                       sim.regionName, sim.regionLocX, sim.regionLocY,
                       sim.regionSendKey, m_config.SimRecvKey, sim.regionRecvKey, m_config.SimSendKey),
                   "The keys required to login your region did not match your existing region keys.  Please check your grid send and receive keys.");
     }
 }
コード例 #18
0
ファイル: GridXmlRpcModule.cs プロジェクト: boodie/Opensim2
 /// <summary>
 /// Checks that it's valid to replace the existing region data with new data
 ///
 /// Currently, this means ensure that the keys passed in by the new region
 /// match those in the original region.  (XXX Is this correct?  Shouldn't we simply check
 /// against the keys in the current configuration?)
 /// </summary>
 /// <param name="sim"></param>
 /// <returns></returns>
 protected virtual void ValidateOverwriteKeys(RegionProfileData sim, RegionProfileData existingSim)
 {
     if (!(existingSim.regionRecvKey == sim.regionRecvKey && existingSim.regionSendKey == sim.regionSendKey))
     {
         throw new LoginException(
                   String.Format(
                       "Authentication failed when trying to login existing region {0} at location {1} {2} currently occupied by {3}"
                       + " with the region's send key {4} (expected {5}) and the region's receive key {6} (expected {7})",
                       sim.regionName, sim.regionLocX, sim.regionLocY, existingSim.regionName,
                       sim.regionSendKey, existingSim.regionSendKey, sim.regionRecvKey, existingSim.regionRecvKey),
                   "The keys required to login your region did not match the grid server keys.  Please check your grid send and receive keys.");
     }
 }
コード例 #19
0
        /// <summary>
        /// DEPRECATED. Attempts to authenticate a region by comparing a shared secret.
        /// </summary>
        /// <param name="uuid">The UUID of the challenger</param>
        /// <param name="handle">The attempted regionHandle of the challenger</param>
        /// <param name="authkey">The secret</param>
        /// <returns>Whether the secret and regionhandle match the database entry for UUID</returns>
        override public bool AuthenticateSim(UUID uuid, ulong handle, string authkey)
        {
            bool throwHissyFit = false; // Should be true by 1.0

            if (throwHissyFit)
            {
                throw new Exception("CRYPTOWEAK AUTHENTICATE: Refusing to authenticate due to replay potential.");
            }

            RegionProfileData data = GetProfileByUUID(uuid);

            return(handle == data.regionHandle && authkey == data.regionSecret);
        }
コード例 #20
0
        /// <summary>
        /// Returns up to <code>maxNumber</code> profiles of regions that have a name starting with <code>name</code>
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public XmlRpcResponse XmlRpcSearchForRegionMethod(XmlRpcRequest request, IPEndPoint remoteClient)
        {
            Hashtable requestData = (Hashtable)request.Params[0];

            if (!requestData.ContainsKey("name") || !requestData.Contains("maxNumber"))
            {
                m_log.Warn("[DATA] Invalid region-search request; missing name or maxNumber");
                return(new XmlRpcResponse(500, "Missing name or maxNumber in region search request"));
            }

            Hashtable responseData = new Hashtable();

            string name      = (string)requestData["name"];
            int    maxNumber = Convert.ToInt32((string)requestData["maxNumber"]);

            if (maxNumber == 0 || name.Length < 3)
            {
                // either we didn't want any, or we were too unspecific
                responseData["numFound"] = 0;
            }
            else
            {
                List <RegionProfileData> sims = m_gridDBService.GetRegions(name, maxNumber);

                responseData["numFound"] = sims.Count;
                for (int i = 0; i < sims.Count; ++i)
                {
                    RegionProfileData sim    = sims[i];
                    string            prefix = "region" + i + ".";
                    responseData[prefix + "region_name"]   = sim.regionName;
                    responseData[prefix + "region_UUID"]   = sim.UUID.ToString();
                    responseData[prefix + "region_locx"]   = sim.regionLocX.ToString();
                    responseData[prefix + "region_locy"]   = sim.regionLocY.ToString();
                    responseData[prefix + "sim_ip"]        = sim.serverHostName.ToString();
                    responseData[prefix + "sim_port"]      = sim.serverPort.ToString();
                    responseData[prefix + "remoting_port"] = sim.remotingPort.ToString();
                    responseData[prefix + "http_port"]     = sim.httpPort.ToString();
                    responseData[prefix + "map_UUID"]      = sim.regionMapTextureID.ToString();
                    responseData[prefix + "product"]       = Convert.ToInt32(sim.product).ToString();
                    if (sim.OutsideIP != null)
                    {
                        responseData[prefix + "outside_ip"] = sim.OutsideIP;
                    }
                }
            }

            XmlRpcResponse response = new XmlRpcResponse();

            response.Value = responseData;
            return(response);
        }
コード例 #21
0
        /// <summary>
        /// UserServer sends an expect_user method
        /// this handles the method and provisions the
        /// necessary info for presence to work
        /// </summary>
        /// <param name="request">UserServer Data</param>
        /// <returns></returns>
        public XmlRpcResponse UserLoggedOn(XmlRpcRequest request, IPEndPoint remoteClient)
        {
            Hashtable requestData = (Hashtable)request.Params[0];

            AgentCircuitData agentData = new AgentCircuitData();

            agentData.SessionID       = new UUID((string)requestData["sessionid"]);
            agentData.SecureSessionID = new UUID((string)requestData["secure_session_id"]);
            agentData.FirstName       = (string)requestData["firstname"];
            agentData.LastName        = (string)requestData["lastname"];
            agentData.AgentID         = new UUID((string)requestData["agentid"]);
            agentData.CircuitCode     = Convert.ToUInt32(requestData["circuit_code"]);
            agentData.CapsPath        = (string)requestData["caps_path"];

            if (requestData.ContainsKey("child_agent") && requestData["child_agent"].Equals("1"))
            {
                agentData.child = true;
            }
            else
            {
                agentData.startpos =
                    new Vector3(Convert.ToSingle(requestData["positionx"]),
                                Convert.ToSingle(requestData["positiony"]),
                                Convert.ToSingle(requestData["positionz"]));
                agentData.child = false;
            }

            ulong regionHandle = Convert.ToUInt64((string)requestData["regionhandle"]);

            m_log.InfoFormat("[LOGON]: User {0} {1} logged into region {2} as {3} agent, building indexes for user",
                             agentData.FirstName, agentData.LastName, regionHandle, agentData.child ? "child" : "root");

            UserPresenceData up = new UserPresenceData();

            up.agentData  = agentData;
            up.friendData = GetUserFriendList(agentData.AgentID);

            // Null reference exception in een by Vinhold on GW grid in enqueuePresenceUpdate with a null receiver.regionData
            // Should never be null but GetRegionInfo() can return that. Probably crash/quit/disconnect during login.
            RegionProfileData regionData = m_regionModule.GetRegionInfo(regionHandle);

            if (regionData != null) // else go with non-null default UserPresenceData.regionData
            {
                up.regionData         = regionData;
                up.OnlineYN           = true;
                up.lookupUserRegionYN = false;
                ProcessFriendListSubscriptions(up);
            }

            return(new XmlRpcResponse());
        }
コード例 #22
0
        protected override RegionInfo RequestClosestRegion(string region)
        {
            RegionProfileData profileData = m_regionProfileService.RequestSimProfileData(region,
                                                                                         m_config.GridServerURL, m_config.GridSendKey, m_config.GridRecvKey);

            if (profileData != null)
            {
                return(profileData.ToRegionInfo());
            }
            else
            {
                return(null);
            }
        }
コード例 #23
0
        /// <summary>
        /// Reads a region row from a database reader
        /// </summary>
        /// <param name="reader">An active database reader</param>
        /// <returns>A region profile</returns>
        public RegionProfileData getRow(IDataReader reader)
        {
            RegionProfileData retval = new RegionProfileData();

            if (reader.Read())
            {
                // Region Main
                retval.regionHandle = (ulong)reader["regionHandle"];
                retval.regionName   = (string)reader["regionName"];
                retval.UUID         = new UUID((string)reader["uuid"]);

                // Secrets
                retval.regionRecvKey = (string)reader["regionRecvKey"];
                retval.regionSecret  = (string)reader["regionSecret"];
                retval.regionSendKey = (string)reader["regionSendKey"];

                // Region Server
                retval.regionDataURI = (string)reader["regionDataURI"];
                retval.regionOnline  = false; // Needs to be pinged before this can be set.
                retval.serverIP      = (string)reader["serverIP"];
                retval.serverPort    = (uint)reader["serverPort"];
                retval.serverURI     = (string)reader["serverURI"];

                // Location
                retval.regionLocX = (uint)((int)reader["locX"]);
                retval.regionLocY = (uint)((int)reader["locY"]);
                retval.regionLocZ = (uint)((int)reader["locZ"]);

                // Neighbours - 0 = No Override
                retval.regionEastOverrideHandle  = (ulong)reader["eastOverrideHandle"];
                retval.regionWestOverrideHandle  = (ulong)reader["westOverrideHandle"];
                retval.regionSouthOverrideHandle = (ulong)reader["southOverrideHandle"];
                retval.regionNorthOverrideHandle = (ulong)reader["northOverrideHandle"];

                // Assets
                retval.regionAssetURI     = (string)reader["regionAssetURI"];
                retval.regionAssetRecvKey = (string)reader["regionAssetRecvKey"];
                retval.regionAssetSendKey = (string)reader["regionAssetSendKey"];

                // Userserver
                retval.regionUserURI     = (string)reader["regionUserURI"];
                retval.regionUserRecvKey = (string)reader["regionUserRecvKey"];
                retval.regionUserSendKey = (string)reader["regionUserSendKey"];
            }
            else
            {
                throw new Exception("No rows to return");
            }
            return(retval);
        }
コード例 #24
0
        /// <summary>
        /// Get RegionProfileData from the GridServer.
        /// We'll cache this information in GetRegionInfo and use it for presence updates
        /// </summary>
        /// <param name="regionHandle"></param>
        /// <returns></returns>
        public RegionProfileData RequestRegionInfo(ulong regionHandle)
        {
            RegionProfileData regionProfile = null;

            try
            {
                Hashtable requestData = new Hashtable();
                requestData["region_handle"] = regionHandle.ToString();
                requestData["authkey"]       = m_cfg.GridSendKey;

                ArrayList SendParams = new ArrayList();
                SendParams.Add(requestData);

                XmlRpcRequest GridReq = new XmlRpcRequest("simulator_data_request", SendParams);

                XmlRpcResponse GridResp = GridReq.Send(m_cfg.GridServerURL, 3000);

                Hashtable responseData = (Hashtable)GridResp.Value;

                if (responseData.ContainsKey("error"))
                {
                    m_log.Error("[GRID]: error received from grid server" + responseData["error"]);
                    return(null);
                }

                uint   regX          = Convert.ToUInt32((string)responseData["region_locx"]);
                uint   regY          = Convert.ToUInt32((string)responseData["region_locy"]);
                string internalIpStr = (string)responseData["sim_ip"];

                regionProfile               = new RegionProfileData();
                regionProfile.httpPort      = (uint)Convert.ToInt32((string)responseData["http_port"]);
                regionProfile.httpServerURI = "http://" + internalIpStr + ":" + regionProfile.httpPort + "/";
                regionProfile.regionHandle  = Utils.UIntsToLong((regX * Constants.RegionSize), (regY * Constants.RegionSize));
                regionProfile.regionLocX    = regX;
                regionProfile.regionLocY    = regY;

                regionProfile.remotingPort = Convert.ToUInt32((string)responseData["remoting_port"]);
                regionProfile.UUID         = new UUID((string)responseData["region_UUID"]);
                regionProfile.regionName   = (string)responseData["region_name"];
            }
            catch (WebException)
            {
                m_log.Error("[GRID]: " +
                            "Region lookup failed for: " + regionHandle.ToString() +
                            " - Is the GridServer down?");
            }

            return(regionProfile);
        }
コード例 #25
0
        protected override RegionInfo GetRegionInfo(UUID homeRegionId)
        {
            RegionProfileData profileData = m_regionProfileService.RequestSimProfileData(homeRegionId,
                                                                                         m_config.GridServerURL, m_config.GridSendKey,
                                                                                         m_config.GridRecvKey);

            if (profileData != null)
            {
                return(profileData.ToRegionInfo());
            }
            else
            {
                return(null);
            }
        }
コード例 #26
0
        /// <summary>
        /// Returns a sim profile from it's UUID
        /// </summary>
        /// <param name="uuid">The region UUID</param>
        /// <returns>The sim profile</returns>
        override public RegionProfileData GetProfileByUUID(UUID uuid)
        {
            Dictionary <string, string> param = new Dictionary <string, string>();

            param["uuid"] = uuid.ToString();

            IDbCommand  result = database.Query("SELECT * FROM regions WHERE uuid = @uuid", param);
            IDataReader reader = result.ExecuteReader();

            RegionProfileData row = database.getRow(reader);

            reader.Close();
            result.Dispose();

            return(row);
        }
コード例 #27
0
        /// <summary>
        /// Returns a sim profile from it's handle
        /// </summary>
        /// <param name="handle">Region location handle</param>
        /// <returns>Sim profile</returns>
        override public RegionProfileData GetProfileByHandle(ulong handle)
        {
            Dictionary <string, string> param = new Dictionary <string, string>();

            param["handle"] = handle.ToString();

            IDbCommand  result = database.Query("SELECT * FROM regions WHERE handle = @handle", param);
            IDataReader reader = result.ExecuteReader();

            RegionProfileData row = database.getRow(reader);

            reader.Close();
            result.Dispose();

            return(row);
        }
コード例 #28
0
        public void T011_AddRetrieveCompleteTest()
        {
            RegionProfileData newreg = createRegion(region2, "|<Goth@m Ci1y>|");
            RegionProfileData retreg = db.GetProfileByUUID(region2);

            Assert.That(retreg.RegionName, Is.EqualTo(newreg.RegionName), "Assert.That(retreg.RegionName, Is.EqualTo(newreg.RegionName))");
            Assert.That(retreg.Uuid, Is.EqualTo(region2), "Assert.That(retreg.Uuid, Is.EqualTo(region2))");
            Assert.That(retreg.RegionHandle, Is.EqualTo(newreg.RegionHandle), "Assert.That(retreg.RegionHandle, Is.EqualTo(newreg.RegionHandle))");
            Assert.That(retreg.RegionLocX, Is.EqualTo(newreg.RegionLocX), "Assert.That(retreg.RegionLocX, Is.EqualTo(newreg.RegionLocX))");
            Assert.That(retreg.RegionLocY, Is.EqualTo(newreg.RegionLocY), "Assert.That(retreg.RegionLocY, Is.EqualTo(newreg.RegionLocY))");
            Assert.That(retreg.RegionLocZ, Is.EqualTo(newreg.RegionLocZ), "Assert.That(retreg.RegionLocZ, Is.EqualTo(newreg.RegionLocZ))");
            Assert.That(retreg.RegionSendKey, Is.EqualTo(newreg.RegionSendKey), "Assert.That(retreg.RegionSendKey, Is.EqualTo(newreg.RegionSendKey))");
            Assert.That(retreg.RegionRecvKey, Is.EqualTo(newreg.RegionRecvKey), "Assert.That(retreg.RegionRecvKey, Is.EqualTo(newreg.RegionRecvKey))");
            Assert.That(retreg.RegionSecret, Is.EqualTo(newreg.RegionSecret), "Assert.That(retreg.RegionSecret, Is.EqualTo(newreg.RegionSecret))");
            Assert.That(retreg.RegionOnline, Is.EqualTo(newreg.RegionOnline), "Assert.That(retreg.RegionOnline, Is.EqualTo(newreg.RegionOnline))");
            Assert.That(retreg.OriginUUID, Is.EqualTo(newreg.OriginUUID), "Assert.That(retreg.OriginUUID, Is.EqualTo(newreg.OriginUUID))");
            Assert.That(retreg.ServerIP, Is.EqualTo(newreg.ServerIP), "Assert.That(retreg.ServerIP, Is.EqualTo(newreg.ServerIP))");
            Assert.That(retreg.ServerPort, Is.EqualTo(newreg.ServerPort), "Assert.That(retreg.ServerPort, Is.EqualTo(newreg.ServerPort))");
            Assert.That(retreg.ServerURI, Is.EqualTo(newreg.ServerURI), "Assert.That(retreg.ServerURI, Is.EqualTo(newreg.ServerURI))");
            Assert.That(retreg.ServerHttpPort, Is.EqualTo(newreg.ServerHttpPort), "Assert.That(retreg.ServerHttpPort, Is.EqualTo(newreg.ServerHttpPort))");
            Assert.That(retreg.ServerRemotingPort, Is.EqualTo(newreg.ServerRemotingPort), "Assert.That(retreg.ServerRemotingPort, Is.EqualTo(newreg.ServerRemotingPort))");
            Assert.That(retreg.NorthOverrideHandle, Is.EqualTo(newreg.NorthOverrideHandle), "Assert.That(retreg.NorthOverrideHandle, Is.EqualTo(newreg.NorthOverrideHandle))");
            Assert.That(retreg.SouthOverrideHandle, Is.EqualTo(newreg.SouthOverrideHandle), "Assert.That(retreg.SouthOverrideHandle, Is.EqualTo(newreg.SouthOverrideHandle))");
            Assert.That(retreg.EastOverrideHandle, Is.EqualTo(newreg.EastOverrideHandle), "Assert.That(retreg.EastOverrideHandle, Is.EqualTo(newreg.EastOverrideHandle))");
            Assert.That(retreg.WestOverrideHandle, Is.EqualTo(newreg.WestOverrideHandle), "Assert.That(retreg.WestOverrideHandle, Is.EqualTo(newreg.WestOverrideHandle))");
            Assert.That(retreg.RegionDataURI, Is.EqualTo(newreg.RegionDataURI), "Assert.That(retreg.RegionDataURI, Is.EqualTo(newreg.RegionDataURI))");
            Assert.That(retreg.RegionAssetURI, Is.EqualTo(newreg.RegionAssetURI), "Assert.That(retreg.RegionAssetURI, Is.EqualTo(newreg.RegionAssetURI))");
            Assert.That(retreg.RegionAssetSendKey, Is.EqualTo(newreg.RegionAssetSendKey), "Assert.That(retreg.RegionAssetSendKey, Is.EqualTo(newreg.RegionAssetSendKey))");
            Assert.That(retreg.RegionAssetRecvKey, Is.EqualTo(newreg.RegionAssetRecvKey), "Assert.That(retreg.RegionAssetRecvKey, Is.EqualTo(newreg.RegionAssetRecvKey))");
            Assert.That(retreg.RegionUserURI, Is.EqualTo(newreg.RegionUserURI), "Assert.That(retreg.RegionUserURI, Is.EqualTo(newreg.RegionUserURI))");
            Assert.That(retreg.RegionUserSendKey, Is.EqualTo(newreg.RegionUserSendKey), "Assert.That(retreg.RegionUserSendKey, Is.EqualTo(newreg.RegionUserSendKey))");
            Assert.That(retreg.RegionUserRecvKey, Is.EqualTo(newreg.RegionUserRecvKey), "Assert.That(retreg.RegionUserRecvKey, Is.EqualTo(newreg.RegionUserRecvKey))");
            Assert.That(retreg.RegionMapTextureID, Is.EqualTo(newreg.RegionMapTextureID), "Assert.That(retreg.RegionMapTextureID, Is.EqualTo(newreg.RegionMapTextureID))");
            Assert.That(retreg.Owner_uuid, Is.EqualTo(newreg.Owner_uuid), "Assert.That(retreg.Owner_uuid, Is.EqualTo(newreg.Owner_uuid))");
            Assert.That(retreg.OriginUUID, Is.EqualTo(newreg.OriginUUID), "Assert.That(retreg.OriginUUID, Is.EqualTo(newreg.OriginUUID))");

            retreg = db.GetProfileByHandle(newreg.RegionHandle);
            Assert.That(retreg.Uuid, Is.EqualTo(region2), "Assert.That(retreg.Uuid, Is.EqualTo(region2))");

            retreg = db.GetProfileByString(newreg.RegionName);
            Assert.That(retreg.Uuid, Is.EqualTo(region2), "Assert.That(retreg.Uuid, Is.EqualTo(region2))");

            RegionProfileData[] retregs = db.GetProfilesInRange(newreg.RegionLocX, newreg.RegionLocY, newreg.RegionLocX, newreg.RegionLocY);
            Assert.That(retregs[0].Uuid, Is.EqualTo(region2), "Assert.That(retregs[0].Uuid, Is.EqualTo(region2))");
        }
コード例 #29
0
ファイル: MySQLGridData.cs プロジェクト: boodie/Opensim2
        /// <summary>
        ///     Adds a new profile to the database
        /// </summary>
        /// <param name="profile">The profile to add</param>
        /// <returns>Successful?</returns>
        override public DataResponse AddProfile(RegionProfileData profile)
        {
            MySQLSuperManager dbm = GetLockedConnection();

            try
            {
                if (dbm.Manager.insertRegion(profile))
                {
                    return(DataResponse.RESPONSE_OK);
                }

                return(DataResponse.RESPONSE_ERROR);
            }

            finally
            {
                dbm.Release();
            }
        }
コード例 #30
0
        public override RegionProfileData[] GetProfilesInRange(uint Xmin, uint Ymin, uint Xmax, uint Ymax)
        {
            using (ISession session = manager.GetSession())
            {
                ICriteria criteria = session.CreateCriteria(typeof(RegionProfileData));
                criteria.Add(Expression.Ge("RegionLocX", Xmin));
                criteria.Add(Expression.Ge("RegionLocY", Ymin));
                criteria.Add(Expression.Le("RegionLocX", Xmax));
                criteria.Add(Expression.Le("RegionLocY", Ymax));

                IList regions = criteria.List();
                RegionProfileData[] regionArray = new RegionProfileData[regions.Count];

                for (int i = 0; i < regionArray.Length; i++)
                {
                    regionArray[i] = (RegionProfileData)regions[i];
                }

                return(regionArray);
            }
        }
コード例 #31
0
ファイル: MySQLGridData.cs プロジェクト: boodie/Opensim2
        /// <summary>
        ///     Returns a sim profile from it's Region name string
        /// </summary>
        /// <returns>The sim profile</returns>
        override public RegionProfileData GetProfileByString(string regionName)
        {
            if (regionName.Length > 2)
            {
                MySQLSuperManager dbm = GetLockedConnection();

                try
                {
                    Dictionary <string, object> param = new Dictionary <string, object>();

                    // Add % because this is a like query.
                    param["?regionName"] = regionName + "%";

                    // Order by statement will return shorter matches first.  Only returns one record or no record.
                    IDbCommand  result = dbm.Manager.Query("SELECT * FROM regions WHERE regionName like ?regionName order by LENGTH(regionName) asc LIMIT 1", param);
                    IDataReader reader = result.ExecuteReader();

                    RegionProfileData row = dbm.Manager.readSimRow(reader);
                    reader.Close();
                    result.Dispose();

                    return(row);
                }

                catch (Exception e)
                {
                    dbm.Manager.Reconnect();
                    m_log.Error(e.ToString());
                    return(null);
                }

                finally
                {
                    dbm.Release();
                }
            }

            m_log.Error("[GRID DB]: Searched for a Region Name shorter then 3 characters");
            return(null);
        }
コード例 #32
0
ファイル: BasicGridTest.cs プロジェクト: ChrisD/opensim
        protected RegionProfileData createRegion(UUID regionUUID, string regionName)
        {
            RegionProfileData reg = new RegionProfileData();
            reg.Uuid = regionUUID;
            reg.RegionName = regionName;
            reg.RegionHandle = (ulong) random.Next();
            reg.RegionLocX = (uint) random.Next();
            reg.RegionLocY = (uint) random.Next();
            reg.RegionLocZ = (uint) random.Next();
            reg.RegionSendKey = RandomName();
            reg.RegionRecvKey = RandomName();
            reg.RegionSecret = RandomName();
            reg.RegionOnline = false;
            reg.ServerIP = RandomName();
            reg.ServerPort = (uint) random.Next();
            reg.ServerURI = RandomName();
            reg.ServerHttpPort = (uint) random.Next();
            reg.ServerRemotingPort = (uint) random.Next();
            reg.NorthOverrideHandle = (ulong) random.Next();
            reg.SouthOverrideHandle = (ulong) random.Next();
            reg.EastOverrideHandle = (ulong) random.Next();
            reg.WestOverrideHandle = (ulong) random.Next();
            reg.RegionDataURI = RandomName();
            reg.RegionAssetURI = RandomName();
            reg.RegionAssetSendKey = RandomName();
            reg.RegionAssetRecvKey = RandomName();
            reg.RegionUserURI = RandomName();
            reg.RegionUserSendKey = RandomName();
            reg.RegionUserRecvKey = RandomName();
            reg.RegionMapTextureID = UUID.Random();
            reg.Owner_uuid = UUID.Random();
            reg.OriginUUID = UUID.Random();

            db.AddProfile(reg);

            return reg;
        }
コード例 #33
0
 public override DataResponse StoreProfile(RegionProfileData profile)
 {
     if (manager.Get(typeof(RegionProfileData), profile.Uuid) == null)
     {
         manager.Insert(profile);
         return DataResponse.RESPONSE_OK;
     }
     else
     {
         manager.Update(profile);
         return DataResponse.RESPONSE_OK;
     }
 }
コード例 #34
0
        public override RegionProfileData[] GetProfilesInRange(uint Xmin, uint Ymin, uint Xmax, uint Ymax)
        {
            using (ISession session = manager.GetSession())
            {
                ICriteria criteria = session.CreateCriteria(typeof(RegionProfileData));
                criteria.Add(Expression.Ge("RegionLocX", Xmin));
                criteria.Add(Expression.Ge("RegionLocY", Ymin));
                criteria.Add(Expression.Le("RegionLocX", Xmax));
                criteria.Add(Expression.Le("RegionLocY", Ymax));

                IList regions = criteria.List();
                RegionProfileData[] regionArray = new RegionProfileData[regions.Count];

                for (int i=0;i<regionArray.Length;i++)
                {
                    regionArray[i] = (RegionProfileData)regions[i];
                }

                return regionArray;
            }
        }
コード例 #35
0
ファイル: MSSQLGridData.cs プロジェクト: ChrisD/opensim
 /// <summary>
 /// Update the specified region in the database
 /// </summary>
 /// <param name="profile">The profile to update</param>
 /// <returns>A dataresponse enum indicating success</returns>
 override public DataResponse UpdateProfile(RegionProfileData profile)
 {
     if (UpdateRegionRow(profile))
     {
         return DataResponse.RESPONSE_OK;
     }
     return DataResponse.RESPONSE_ERROR;
 }
コード例 #36
0
ファイル: MySQLGridData.cs プロジェクト: AlphaStaxLLC/taiga
 /// <summary>
 /// Adds a new profile to the database
 /// </summary>
 /// <param name="profile">The profile to add</param>
 /// <returns>Successful?</returns>
 override public DataResponse StoreProfile(RegionProfileData profile)
 {
     try
     {
         if (m_database.insertRegion(profile))
             return DataResponse.RESPONSE_OK;
         else
             return DataResponse.RESPONSE_ERROR;
     }
     catch
     {
         return DataResponse.RESPONSE_ERROR;
     }
 }
コード例 #37
0
ファイル: MySQLGridData.cs プロジェクト: kf6kjg/halcyon
 /// <summary>
 /// Update a sim profile
 /// </summary>
 /// <param name="profile">The profile to update</param>
 /// <returns>Sucessful?</returns>
 /// <remarks>Same as AddProfile</remarks>
 override public DataResponse UpdateProfile(RegionProfileData profile)
 {
     return AddProfile(profile);
 }
コード例 #38
0
ファイル: MySQLGridData.cs プロジェクト: kf6kjg/halcyon
        /// <summary>
        /// Inserts a new region into the database
        /// </summary>
        /// <param name="regiondata">The region to insert</param>
        /// <returns>Success?</returns>
        public bool insertRegion(RegionProfileData regiondata)
        {
            bool GRID_ONLY_UPDATE_NECESSARY_DATA = false;

            string sql = String.Empty;
            if (GRID_ONLY_UPDATE_NECESSARY_DATA)
            {
                sql += "INSERT INTO ";
            }
            else
            {
                sql += "REPLACE INTO ";
            }

            sql += "regions (regionHandle, regionName, uuid, regionRecvKey, regionSecret, regionSendKey, regionDataURI, ";
            sql +=
                "serverIP, serverPort, locX, locY, locZ, eastOverrideHandle, westOverrideHandle, southOverrideHandle, northOverrideHandle, regionAssetURI, regionAssetRecvKey, ";

            // part of an initial brutish effort to provide accurate information (as per the xml region spec)
            // wrt the ownership of a given region
            // the (very bad) assumption is that this value is being read and handled inconsistently or
            // not at all. Current strategy is to put the code in place to support the validity of this information
            // and to roll forward debugging any issues from that point
            //
            // this particular section of the mod attempts to implement the commit of a supplied value
            // server for the UUID of the region's owner (master avatar). It consists of the addition of the column and value to the relevant sql,
            // as well as the related parameterization
            sql +=
                "regionAssetSendKey, regionUserURI, regionUserRecvKey, regionUserSendKey, regionMapTexture, serverHttpPort, serverRemotingPort, owner_uuid, originUUID, access, product, outside_ip) VALUES ";

            sql += "(?regionHandle, ?regionName, ?uuid, ?regionRecvKey, ?regionSecret, ?regionSendKey, ?regionDataURI, ";
            sql +=
                "?serverIP, ?serverPort, ?locX, ?locY, ?locZ, ?eastOverrideHandle, ?westOverrideHandle, ?southOverrideHandle, ?northOverrideHandle, ?regionAssetURI, ?regionAssetRecvKey, ";
            sql +=
                "?regionAssetSendKey, ?regionUserURI, ?regionUserRecvKey, ?regionUserSendKey, ?regionMapTexture, ?serverHttpPort, ?serverRemotingPort, ?owner_uuid, ?originUUID, ?access, ?product, ?outside_ip)";

            if (GRID_ONLY_UPDATE_NECESSARY_DATA)
            {
                sql += "ON DUPLICATE KEY UPDATE serverIP = ?serverIP, serverPort = ?serverPort, owner_uuid - ?owner_uuid;";
            }
            else
            {
                sql += ";";
            }

            Dictionary<string, object> parameters = new Dictionary<string, object>();

            parameters["?regionHandle"] = regiondata.regionHandle.ToString();
            parameters["?regionName"] = regiondata.regionName.ToString();
            parameters["?uuid"] = regiondata.UUID.ToString();
            parameters["?regionRecvKey"] = regiondata.regionRecvKey.ToString();
            parameters["?regionSecret"] = regiondata.regionSecret.ToString();
            parameters["?regionSendKey"] = regiondata.regionSendKey.ToString();
            parameters["?regionDataURI"] = regiondata.regionDataURI.ToString();
            parameters["?serverIP"] = regiondata.serverHostName.ToString();
            parameters["?serverPort"] = regiondata.serverPort.ToString();
            parameters["?locX"] = regiondata.regionLocX.ToString();
            parameters["?locY"] = regiondata.regionLocY.ToString();
            parameters["?locZ"] = regiondata.regionLocZ.ToString();
            parameters["?eastOverrideHandle"] = regiondata.regionEastOverrideHandle.ToString();
            parameters["?westOverrideHandle"] = regiondata.regionWestOverrideHandle.ToString();
            parameters["?northOverrideHandle"] = regiondata.regionNorthOverrideHandle.ToString();
            parameters["?southOverrideHandle"] = regiondata.regionSouthOverrideHandle.ToString();
            parameters["?regionAssetURI"] = regiondata.regionAssetURI.ToString();
            parameters["?regionAssetRecvKey"] = regiondata.regionAssetRecvKey.ToString();
            parameters["?regionAssetSendKey"] = regiondata.regionAssetSendKey.ToString();
            parameters["?regionUserURI"] = regiondata.regionUserURI.ToString();
            parameters["?regionUserRecvKey"] = regiondata.regionUserRecvKey.ToString();
            parameters["?regionUserSendKey"] = regiondata.regionUserSendKey.ToString();
            parameters["?regionMapTexture"] = regiondata.regionMapTextureID.ToString();
            parameters["?serverHttpPort"] = regiondata.httpPort.ToString();
            parameters["?serverRemotingPort"] = regiondata.remotingPort.ToString();
            parameters["?owner_uuid"] = regiondata.owner_uuid.ToString();
            parameters["?originUUID"] = regiondata.originUUID.ToString();
            parameters["?access"] = regiondata.maturity.ToString();
            parameters["?product"] = Convert.ToInt32(regiondata.product).ToString();

            if (regiondata.OutsideIP != null)
            {
                parameters["?outside_ip"] = regiondata.OutsideIP;
            }
            else
            {
                parameters["?outside_ip"] = DBNull.Value;
            }

            try
            {
                using (ISimpleDB conn = _connFactory.GetConnection())
                {
                    conn.QueryNoResults(sql, parameters);
                    return true;
                }
            }
            catch (Exception e)
            {
                m_log.Error(e.ToString());
                return false;
            }
        }
コード例 #39
0
ファイル: MySQLGridData.cs プロジェクト: kf6kjg/halcyon
        /// <summary>
        /// Reads a region row from a database reader
        /// </summary>
        /// <param name="reader">An active database reader</param>
        /// <returns>A region profile</returns>
        private RegionProfileData readSimRow(IDataReader reader)
        {
            RegionProfileData retval = new RegionProfileData();

            if (reader.Read())
            {
                // Region Main gotta-have-or-we-return-null parts
                UInt64 tmp64;
                if (!UInt64.TryParse(reader["regionHandle"].ToString(), out tmp64))
                {
                    return null;
                }
                else
                {
                    retval.regionHandle = tmp64;
                }
                UUID tmp_uuid;
                if (!UUID.TryParse(Convert.ToString(reader["uuid"]), out tmp_uuid))
                {
                    return null;
                }
                else
                {
                    retval.UUID = tmp_uuid;
                }

                // non-critical parts
                retval.regionName = (string)reader["regionName"];
                retval.originUUID = new UUID(Convert.ToString(reader["originUUID"]));
                retval.product = (ProductRulesUse) Convert.ToInt32(reader["product"]);

                // Secrets
                retval.regionRecvKey = (string)reader["regionRecvKey"];
                retval.regionSecret = (string)reader["regionSecret"];
                retval.regionSendKey = (string)reader["regionSendKey"];

                // Region Server
                retval.regionDataURI = (string)reader["regionDataURI"];
                retval.regionOnline = false; // Needs to be pinged before this can be set.
                retval.serverHostName = (string)reader["serverIP"];
                retval.serverPort = (uint)reader["serverPort"];
                if (reader.IsDBNull(reader.GetOrdinal("outside_ip")))
                    retval.OutsideIP = null;
                else
                    retval.OutsideIP = (string)reader["outside_ip"];

                retval.httpPort = Convert.ToUInt32(reader["serverHttpPort"].ToString());
                retval.remotingPort = Convert.ToUInt32(reader["serverRemotingPort"].ToString());

                // Location
                retval.regionLocX = Convert.ToUInt32(reader["locX"].ToString());
                retval.regionLocY = Convert.ToUInt32(reader["locY"].ToString());
                retval.regionLocZ = Convert.ToUInt32(reader["locZ"].ToString());

                // Neighbours - 0 = No Override
                retval.regionEastOverrideHandle = Convert.ToUInt64(reader["eastOverrideHandle"].ToString());
                retval.regionWestOverrideHandle = Convert.ToUInt64(reader["westOverrideHandle"].ToString());
                retval.regionSouthOverrideHandle = Convert.ToUInt64(reader["southOverrideHandle"].ToString());
                retval.regionNorthOverrideHandle = Convert.ToUInt64(reader["northOverrideHandle"].ToString());

                // Assets
                retval.regionAssetURI = (string)reader["regionAssetURI"];
                retval.regionAssetRecvKey = (string)reader["regionAssetRecvKey"];
                retval.regionAssetSendKey = (string)reader["regionAssetSendKey"];

                // Userserver
                retval.regionUserURI = (string)reader["regionUserURI"];
                retval.regionUserRecvKey = (string)reader["regionUserRecvKey"];
                retval.regionUserSendKey = (string)reader["regionUserSendKey"];

                // World Map Addition
                UUID.TryParse(Convert.ToString(reader["regionMapTexture"]), out retval.regionMapTextureID);
                UUID.TryParse(Convert.ToString(reader["owner_uuid"]), out retval.owner_uuid);
                retval.maturity = Convert.ToUInt32(reader["access"]);
            }
            else
            {
                return null;
            }
            return retval;
        }
コード例 #40
0
ファイル: MSSQLGridData.cs プロジェクト: AlphaStaxLLC/taiga
        /// <summary>
        /// Creates a new region in the database
        /// </summary>
        /// <param name="profile">The region profile to insert</param>
        /// <returns>Successful?</returns>
        private bool InsertRegionRow(RegionProfileData profile)
        {
            bool returnval = false;

            //Insert new region
            string sql =
                "INSERT INTO " + m_regionsTableName + @" ([regionHandle], [regionName], [uuid], [regionRecvKey], [regionSecret], [regionSendKey], [regionDataURI], 
                                                      [serverIP], [serverPort], [serverURI], [locX], [locY], [locZ], [eastOverrideHandle], [westOverrideHandle], 
                                                      [southOverrideHandle], [northOverrideHandle], [regionAssetURI], [regionAssetRecvKey], [regionAssetSendKey], 
                                                      [regionUserURI], [regionUserRecvKey], [regionUserSendKey], [regionMapTexture], [serverHttpPort], 
                                                      [serverRemotingPort], [owner_uuid], [originUUID], [access]) 
                                                VALUES (@regionHandle, @regionName, @uuid, @regionRecvKey, @regionSecret, @regionSendKey, @regionDataURI, 
                                                        @serverIP, @serverPort, @serverURI, @locX, @locY, @locZ, @eastOverrideHandle, @westOverrideHandle, 
                                                        @southOverrideHandle, @northOverrideHandle, @regionAssetURI, @regionAssetRecvKey, @regionAssetSendKey, 
                                                        @regionUserURI, @regionUserRecvKey, @regionUserSendKey, @regionMapTexture, @serverHttpPort, @serverRemotingPort, @owner_uuid, @originUUID, @access);";

            using (AutoClosingSqlCommand command = database.Query(sql))
            {
                command.Parameters.Add(database.CreateParameter("regionHandle", profile.regionHandle));
                command.Parameters.Add(database.CreateParameter("regionName", profile.regionName));
                command.Parameters.Add(database.CreateParameter("uuid", profile.UUID));
                command.Parameters.Add(database.CreateParameter("regionRecvKey", profile.regionRecvKey));
                command.Parameters.Add(database.CreateParameter("regionSecret", profile.regionSecret));
                command.Parameters.Add(database.CreateParameter("regionSendKey", profile.regionSendKey));
                command.Parameters.Add(database.CreateParameter("regionDataURI", profile.regionDataURI));
                command.Parameters.Add(database.CreateParameter("serverIP", profile.serverIP));
                command.Parameters.Add(database.CreateParameter("serverPort", profile.serverPort));
                command.Parameters.Add(database.CreateParameter("serverURI", profile.serverURI));
                command.Parameters.Add(database.CreateParameter("locX", profile.regionLocX));
                command.Parameters.Add(database.CreateParameter("locY", profile.regionLocY));
                command.Parameters.Add(database.CreateParameter("locZ", profile.regionLocZ));
                command.Parameters.Add(database.CreateParameter("eastOverrideHandle", profile.regionEastOverrideHandle));
                command.Parameters.Add(database.CreateParameter("westOverrideHandle", profile.regionWestOverrideHandle));
                command.Parameters.Add(database.CreateParameter("northOverrideHandle", profile.regionNorthOverrideHandle));
                command.Parameters.Add(database.CreateParameter("southOverrideHandle", profile.regionSouthOverrideHandle));
                command.Parameters.Add(database.CreateParameter("regionAssetURI", profile.regionAssetURI));
                command.Parameters.Add(database.CreateParameter("regionAssetRecvKey", profile.regionAssetRecvKey));
                command.Parameters.Add(database.CreateParameter("regionAssetSendKey", profile.regionAssetSendKey));
                command.Parameters.Add(database.CreateParameter("regionUserURI", profile.regionUserURI));
                command.Parameters.Add(database.CreateParameter("regionUserRecvKey", profile.regionUserRecvKey));
                command.Parameters.Add(database.CreateParameter("regionUserSendKey", profile.regionUserSendKey));
                command.Parameters.Add(database.CreateParameter("regionMapTexture", profile.regionMapTextureID));
                command.Parameters.Add(database.CreateParameter("serverHttpPort", profile.httpPort));
                command.Parameters.Add(database.CreateParameter("serverRemotingPort", profile.remotingPort));
                command.Parameters.Add(database.CreateParameter("owner_uuid", profile.owner_uuid));
                command.Parameters.Add(database.CreateParameter("originUUID", profile.originUUID));
                command.Parameters.Add(database.CreateParameter("access", profile.maturity));

                try
                {
                    command.ExecuteNonQuery();
                    returnval = true;
                }
                catch (Exception e)
                {
                    m_log.Error("[GRID DB] : Error inserting region, error: " + e.Message);
                }
            }

            return returnval;
        }
コード例 #41
0
ファイル: MSSQLGridData.cs プロジェクト: AlphaStaxLLC/taiga
        /// <summary>
        /// Update the specified region in the database
        /// </summary>
        /// <param name="profile">The profile to update</param>
        /// <returns>success ?</returns>
        private bool UpdateRegionRow(RegionProfileData profile)
        {
            bool returnval = false;

            //Insert new region
            string sql =
                "UPDATE " + m_regionsTableName + @" SET
                [regionHandle]=@regionHandle, [regionName]=@regionName,
                [regionRecvKey]=@regionRecvKey, [regionSecret]=@regionSecret, [regionSendKey]=@regionSendKey,
                [regionDataURI]=@regionDataURI, [serverIP]=@serverIP, [serverPort]=@serverPort, [serverURI]=@serverURI,
                [locX]=@locX, [locY]=@locY, [locZ]=@locZ, [eastOverrideHandle]=@eastOverrideHandle,
                [westOverrideHandle]=@westOverrideHandle, [southOverrideHandle]=@southOverrideHandle,
                [northOverrideHandle]=@northOverrideHandle, [regionAssetURI]=@regionAssetURI,
                [regionAssetRecvKey]=@regionAssetRecvKey, [regionAssetSendKey]=@regionAssetSendKey,
                [regionUserURI]=@regionUserURI, [regionUserRecvKey]=@regionUserRecvKey, [regionUserSendKey]=@regionUserSendKey,
                [regionMapTexture]=@regionMapTexture, [serverHttpPort]=@serverHttpPort,
                [serverRemotingPort]=@serverRemotingPort, [owner_uuid]=@owner_uuid , [originUUID]=@originUUID
                where [uuid]=@uuid";

            using (AutoClosingSqlCommand command = database.Query(sql))
            {
                command.Parameters.Add(database.CreateParameter("regionHandle", profile.regionHandle));
                command.Parameters.Add(database.CreateParameter("regionName", profile.regionName));
                command.Parameters.Add(database.CreateParameter("uuid", profile.UUID));
                command.Parameters.Add(database.CreateParameter("regionRecvKey", profile.regionRecvKey));
                command.Parameters.Add(database.CreateParameter("regionSecret", profile.regionSecret));
                command.Parameters.Add(database.CreateParameter("regionSendKey", profile.regionSendKey));
                command.Parameters.Add(database.CreateParameter("regionDataURI", profile.regionDataURI));
                command.Parameters.Add(database.CreateParameter("serverIP", profile.serverIP));
                command.Parameters.Add(database.CreateParameter("serverPort", profile.serverPort));
                command.Parameters.Add(database.CreateParameter("serverURI", profile.serverURI));
                command.Parameters.Add(database.CreateParameter("locX", profile.regionLocX));
                command.Parameters.Add(database.CreateParameter("locY", profile.regionLocY));
                command.Parameters.Add(database.CreateParameter("locZ", profile.regionLocZ));
                command.Parameters.Add(database.CreateParameter("eastOverrideHandle", profile.regionEastOverrideHandle));
                command.Parameters.Add(database.CreateParameter("westOverrideHandle", profile.regionWestOverrideHandle));
                command.Parameters.Add(database.CreateParameter("northOverrideHandle", profile.regionNorthOverrideHandle));
                command.Parameters.Add(database.CreateParameter("southOverrideHandle", profile.regionSouthOverrideHandle));
                command.Parameters.Add(database.CreateParameter("regionAssetURI", profile.regionAssetURI));
                command.Parameters.Add(database.CreateParameter("regionAssetRecvKey", profile.regionAssetRecvKey));
                command.Parameters.Add(database.CreateParameter("regionAssetSendKey", profile.regionAssetSendKey));
                command.Parameters.Add(database.CreateParameter("regionUserURI", profile.regionUserURI));
                command.Parameters.Add(database.CreateParameter("regionUserRecvKey", profile.regionUserRecvKey));
                command.Parameters.Add(database.CreateParameter("regionUserSendKey", profile.regionUserSendKey));
                command.Parameters.Add(database.CreateParameter("regionMapTexture", profile.regionMapTextureID));
                command.Parameters.Add(database.CreateParameter("serverHttpPort", profile.httpPort));
                command.Parameters.Add(database.CreateParameter("serverRemotingPort", profile.remotingPort));
                command.Parameters.Add(database.CreateParameter("owner_uuid", profile.owner_uuid));
                command.Parameters.Add(database.CreateParameter("originUUID", profile.originUUID));

                try
                {
                    command.ExecuteNonQuery();
                    returnval = true;
                }
                catch (Exception e)
                {
                    m_log.Error("[GRID DB] : Error updating region, error: " + e.Message);
                }
            }

            return returnval;
        }
コード例 #42
0
ファイル: MSSQLGridData.cs プロジェクト: AlphaStaxLLC/taiga
        /// <summary>
        /// Reads a region row from a database reader
        /// </summary>
        /// <param name="reader">An active database reader</param>
        /// <returns>A region profile</returns>
        private static RegionProfileData ReadSimRow(IDataRecord reader)
        {
            RegionProfileData retval = new RegionProfileData();

            // Region Main gotta-have-or-we-return-null parts
            UInt64 tmp64;
            if (!UInt64.TryParse(reader["regionHandle"].ToString(), out tmp64))
            {
                return null;
            }

            retval.regionHandle = tmp64;

//            UUID tmp_uuid;
//            if (!UUID.TryParse((string)reader["uuid"], out tmp_uuid))
//            {
//                return null;
//            }

            retval.UUID = new UUID((Guid)reader["uuid"]); // tmp_uuid;

            // non-critical parts
            retval.regionName = reader["regionName"].ToString();
            retval.originUUID = new UUID((Guid)reader["originUUID"]);

            // Secrets
            retval.regionRecvKey = reader["regionRecvKey"].ToString();
            retval.regionSecret = reader["regionSecret"].ToString();
            retval.regionSendKey = reader["regionSendKey"].ToString();

            // Region Server
            retval.regionDataURI = reader["regionDataURI"].ToString();
            retval.regionOnline = false; // Needs to be pinged before this can be set.
            retval.serverIP = reader["serverIP"].ToString();
            retval.serverPort = Convert.ToUInt32(reader["serverPort"]);
            retval.serverURI = reader["serverURI"].ToString();
            retval.httpPort = Convert.ToUInt32(reader["serverHttpPort"].ToString());
            retval.remotingPort = Convert.ToUInt32(reader["serverRemotingPort"].ToString());

            // Location
            retval.regionLocX = Convert.ToUInt32(reader["locX"].ToString());
            retval.regionLocY = Convert.ToUInt32(reader["locY"].ToString());
            retval.regionLocZ = Convert.ToUInt32(reader["locZ"].ToString());

            // Neighbours - 0 = No Override
            retval.regionEastOverrideHandle = Convert.ToUInt64(reader["eastOverrideHandle"].ToString());
            retval.regionWestOverrideHandle = Convert.ToUInt64(reader["westOverrideHandle"].ToString());
            retval.regionSouthOverrideHandle = Convert.ToUInt64(reader["southOverrideHandle"].ToString());
            retval.regionNorthOverrideHandle = Convert.ToUInt64(reader["northOverrideHandle"].ToString());

            // Assets
            retval.regionAssetURI = reader["regionAssetURI"].ToString();
            retval.regionAssetRecvKey = reader["regionAssetRecvKey"].ToString();
            retval.regionAssetSendKey = reader["regionAssetSendKey"].ToString();

            // Userserver
            retval.regionUserURI = reader["regionUserURI"].ToString();
            retval.regionUserRecvKey = reader["regionUserRecvKey"].ToString();
            retval.regionUserSendKey = reader["regionUserSendKey"].ToString();

            // World Map Addition
            retval.regionMapTextureID = new UUID((Guid)reader["regionMapTexture"]);
            retval.owner_uuid = new UUID((Guid)reader["owner_uuid"]);
            retval.maturity = Convert.ToUInt32(reader["access"]);
            return retval;
        }
コード例 #43
0
ファイル: SQLiteGridData.cs プロジェクト: ChrisD/opensim
 /// <summary>
 /// Adds a new specified region to the database
 /// </summary>
 /// <param name="profile">The profile to add</param>
 /// <returns>A dataresponse enum indicating success</returns>
 override public DataResponse AddProfile(RegionProfileData profile)
 {
     if (database.insertRow(profile))
     {
         return DataResponse.RESPONSE_OK;
     }
     else
     {
         return DataResponse.RESPONSE_ERROR;
     }
 }
コード例 #44
0
ファイル: MySQLGridData.cs プロジェクト: kf6kjg/halcyon
 /// <summary>
 /// Adds a new profile to the database
 /// </summary>
 /// <param name="profile">The profile to add</param>
 /// <returns>Successful?</returns>
 override public DataResponse AddProfile(RegionProfileData profile)
 {
     if (this.insertRegion(profile))
     {
         return DataResponse.RESPONSE_OK;
     }
     return DataResponse.RESPONSE_ERROR;
 }
コード例 #45
0
ファイル: MSSQLGridData.cs プロジェクト: AlphaStaxLLC/taiga
        /// <summary>
        /// Adds a new specified region to the database
        /// </summary>
        /// <param name="profile">The profile to add</param>
        /// <returns>A dataresponse enum indicating success</returns>
        override public DataResponse StoreProfile(RegionProfileData profile)
        {
            if (GetProfileByUUID(profile.UUID) == null)
            {
                if (InsertRegionRow(profile))
                {
                    return DataResponse.RESPONSE_OK;
                }
            }
            else
            {
                if (UpdateRegionRow(profile))
                {
                    return DataResponse.RESPONSE_OK;
                }
            }

            return DataResponse.RESPONSE_ERROR;
        }
コード例 #46
0
ファイル: MySQLGridData.cs プロジェクト: ChrisD/opensim
 /// <summary>
 /// Adds a new profile to the database
 /// </summary>
 /// <param name="profile">The profile to add</param>
 /// <returns>Successful?</returns>
 override public DataResponse AddProfile(RegionProfileData profile)
 {
     MySQLSuperManager dbm = GetLockedConnection();
     try {
         if (dbm.Manager.insertRegion(profile))
         {
             return DataResponse.RESPONSE_OK;
         }
         return DataResponse.RESPONSE_ERROR;
     }
     finally
     {
         dbm.Release();
     }
 }