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"); }
/// <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); }
/// <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(); } }
/// <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); }
/// <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); }
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); }
/// <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); }
/// <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); }
/// <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); }
public void T012_DeleteProfile() { createRegion(region1, "doesn't matter"); db.DeleteProfile(region1.ToString()); RegionProfileData retreg = db.GetProfileByUUID(region1); Assert.That(retreg, Is.Null); }
/// <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); }
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; }
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); }
/// <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); } }
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); } }
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\"))"); }
/// <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."); } }
/// <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."); } }
/// <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); }
/// <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); }
/// <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()); }
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); } }
/// <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); }
/// <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); }
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); } }
/// <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); }
/// <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); }
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))"); }
/// <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(); } }
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); } }
/// <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); }
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; }
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; } }
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; } }
/// <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; }
/// <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; } }
/// <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); }
/// <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; } }
/// <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; }
/// <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; }
/// <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; }
/// <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; }
/// <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; } }
/// <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; }
/// <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; }
/// <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(); } }