* Persists region banlists across reboots for the sqlite datastore also now.
parent
a5860ad438
commit
2758bc81ad
|
@ -0,0 +1,10 @@
|
||||||
|
BEGIN TRANSACTION;
|
||||||
|
|
||||||
|
CREATE TABLE regionban(
|
||||||
|
regionUUID varchar (255),
|
||||||
|
bannedUUID varchar (255),
|
||||||
|
bannedIp varchar (255),
|
||||||
|
bannedIpHostMask varchar (255)
|
||||||
|
);
|
||||||
|
|
||||||
|
COMMIT;
|
|
@ -50,6 +50,7 @@ namespace OpenSim.Data.SQLite
|
||||||
private const string terrainSelect = "select * from terrain limit 1";
|
private const string terrainSelect = "select * from terrain limit 1";
|
||||||
private const string landSelect = "select * from land";
|
private const string landSelect = "select * from land";
|
||||||
private const string landAccessListSelect = "select distinct * from landaccesslist";
|
private const string landAccessListSelect = "select distinct * from landaccesslist";
|
||||||
|
private const string regionbanListSelect = "select * from regionban";
|
||||||
|
|
||||||
private DataSet ds;
|
private DataSet ds;
|
||||||
private SqliteDataAdapter primDa;
|
private SqliteDataAdapter primDa;
|
||||||
|
@ -58,6 +59,7 @@ namespace OpenSim.Data.SQLite
|
||||||
private SqliteDataAdapter terrainDa;
|
private SqliteDataAdapter terrainDa;
|
||||||
private SqliteDataAdapter landDa;
|
private SqliteDataAdapter landDa;
|
||||||
private SqliteDataAdapter landAccessListDa;
|
private SqliteDataAdapter landAccessListDa;
|
||||||
|
private SqliteDataAdapter regionBanListDa;
|
||||||
|
|
||||||
private SqliteConnection m_conn;
|
private SqliteConnection m_conn;
|
||||||
|
|
||||||
|
@ -106,6 +108,9 @@ namespace OpenSim.Data.SQLite
|
||||||
SqliteCommand landAccessListSelectCmd = new SqliteCommand(landAccessListSelect, m_conn);
|
SqliteCommand landAccessListSelectCmd = new SqliteCommand(landAccessListSelect, m_conn);
|
||||||
landAccessListDa = new SqliteDataAdapter(landAccessListSelectCmd);
|
landAccessListDa = new SqliteDataAdapter(landAccessListSelectCmd);
|
||||||
|
|
||||||
|
SqliteCommand regionBanListSelectCmd = new SqliteCommand(regionbanListSelect, m_conn);
|
||||||
|
regionBanListDa = new SqliteDataAdapter(regionBanListSelectCmd);
|
||||||
|
|
||||||
// This actually does the roll forward assembly stuff
|
// This actually does the roll forward assembly stuff
|
||||||
Assembly assem = GetType().Assembly;
|
Assembly assem = GetType().Assembly;
|
||||||
Migration m = new Migration(m_conn, assem, "RegionStore");
|
Migration m = new Migration(m_conn, assem, "RegionStore");
|
||||||
|
@ -141,6 +146,10 @@ namespace OpenSim.Data.SQLite
|
||||||
ds.Tables.Add(createLandAccessListTable());
|
ds.Tables.Add(createLandAccessListTable());
|
||||||
setupLandAccessCommands(landAccessListDa, m_conn);
|
setupLandAccessCommands(landAccessListDa, m_conn);
|
||||||
|
|
||||||
|
ds.Tables.Add(createRegionBanListTable());
|
||||||
|
setupRegionBanCommands(regionBanListDa, m_conn);
|
||||||
|
|
||||||
|
|
||||||
// WORKAROUND: This is a work around for sqlite on
|
// WORKAROUND: This is a work around for sqlite on
|
||||||
// windows, which gets really unhappy with blob columns
|
// windows, which gets really unhappy with blob columns
|
||||||
// that have no sample data in them. At some point we
|
// that have no sample data in them. At some point we
|
||||||
|
@ -180,6 +189,16 @@ namespace OpenSim.Data.SQLite
|
||||||
{
|
{
|
||||||
m_log.Info("[REGION DB]: Caught fill error on landaccesslist table");
|
m_log.Info("[REGION DB]: Caught fill error on landaccesslist table");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
regionBanListDa.Fill(ds.Tables["regionban"]);
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
m_log.Info("[REGION DB]: Caught fill error on regionban table");
|
||||||
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -790,6 +809,17 @@ namespace OpenSim.Data.SQLite
|
||||||
return landaccess;
|
return landaccess;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static DataTable createRegionBanListTable()
|
||||||
|
{
|
||||||
|
DataTable regionbanlist = new DataTable("regionban");
|
||||||
|
createCol(regionbanlist, "regionUUID", typeof(String));
|
||||||
|
createCol(regionbanlist, "bannedUUID", typeof(String));
|
||||||
|
createCol(regionbanlist, "bannedIp", typeof(String));
|
||||||
|
createCol(regionbanlist, "bannedIpHostMask", typeof(String));
|
||||||
|
|
||||||
|
return regionbanlist;
|
||||||
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
*
|
*
|
||||||
* Convert between ADO.NET <=> OpenSim Objects
|
* Convert between ADO.NET <=> OpenSim Objects
|
||||||
|
@ -1037,20 +1067,59 @@ namespace OpenSim.Data.SQLite
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public List<RegionBanListItem> LoadRegionBanList(LLUUID regionUUID)
|
public List<RegionBanListItem> LoadRegionBanList(LLUUID regionUUID)
|
||||||
{
|
{
|
||||||
List<RegionBanListItem> regionbanlist = new List<RegionBanListItem>();
|
List<RegionBanListItem> regionbanlist = new List<RegionBanListItem>();
|
||||||
|
lock (ds)
|
||||||
|
{
|
||||||
|
DataTable regionban = ds.Tables["regionban"];
|
||||||
|
string searchExp = "regionUUID = '" + regionUUID.ToString() + "'";
|
||||||
|
DataRow[] rawbanlist = regionban.Select(searchExp);
|
||||||
|
foreach (DataRow rawbanrow in rawbanlist)
|
||||||
|
{
|
||||||
|
RegionBanListItem rbli = new RegionBanListItem();
|
||||||
|
LLUUID tmpvalue = LLUUID.Zero;
|
||||||
|
|
||||||
|
rbli.regionUUID = regionUUID;
|
||||||
|
|
||||||
|
if (Helpers.TryParse((string)rawbanrow["bannedUUID"], out tmpvalue))
|
||||||
|
rbli.bannedUUID = tmpvalue;
|
||||||
|
|
||||||
|
rbli.bannedIP = (string)rawbanrow["bannedIp"];
|
||||||
|
rbli.bannedIPHostMask = (string)rawbanrow["bannedIpHostMask"];
|
||||||
|
regionbanlist.Add(rbli);
|
||||||
|
}
|
||||||
|
}
|
||||||
return regionbanlist;
|
return regionbanlist;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void AddToRegionBanlist(RegionBanListItem item)
|
public void AddToRegionBanlist(RegionBanListItem item)
|
||||||
{
|
{
|
||||||
|
lock (ds)
|
||||||
|
{
|
||||||
|
using (SqliteCommand cmd = new SqliteCommand("insert into regionban (regionUUID, bannedUUID, bannedIp, bannedIpHostMask) values (:regionUUID,:bannedUUID,:bannedIp,:bannedIpHostMask)", m_conn))
|
||||||
|
{
|
||||||
|
cmd.Parameters.Add(new SqliteParameter(":regionUUID", item.regionUUID.ToString()));
|
||||||
|
cmd.Parameters.Add(new SqliteParameter(":bannedUUID", item.bannedUUID.ToString()));
|
||||||
|
cmd.Parameters.Add(new SqliteParameter(":bannedIp", item.bannedIP));
|
||||||
|
cmd.Parameters.Add(new SqliteParameter(":bannedIpHostMask", item.bannedIPHostMask));
|
||||||
|
cmd.ExecuteNonQuery();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void RemoveFromRegionBanlist(RegionBanListItem item)
|
public void RemoveFromRegionBanlist(RegionBanListItem item)
|
||||||
{
|
{
|
||||||
|
lock (ds)
|
||||||
|
{
|
||||||
|
using (SqliteCommand cmd = new SqliteCommand("delete from regionban where regionUUID=:regionUUID AND bannedUUID=:bannedUUID", m_conn))
|
||||||
|
{
|
||||||
|
cmd.Parameters.Add(new SqliteParameter(":regionUUID", item.regionUUID.ToString()));
|
||||||
|
cmd.Parameters.Add(new SqliteParameter(":bannedUUID", item.bannedUUID.ToString()));
|
||||||
|
cmd.ExecuteNonQuery();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Array serializeTerrain(double[,] val)
|
private static Array serializeTerrain(double[,] val)
|
||||||
|
@ -1536,6 +1605,16 @@ namespace OpenSim.Data.SQLite
|
||||||
da.InsertCommand.Connection = conn;
|
da.InsertCommand.Connection = conn;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void setupRegionBanCommands(SqliteDataAdapter da, SqliteConnection conn)
|
||||||
|
{
|
||||||
|
da.InsertCommand = createInsertCommand("regionban", ds.Tables["regionban"]);
|
||||||
|
da.InsertCommand.Connection = conn;
|
||||||
|
|
||||||
|
da.UpdateCommand = createUpdateCommand("regionban", "regionUUID=:regionUUID AND bannedUUID=:bannedUUID", ds.Tables["regionban"]);
|
||||||
|
da.UpdateCommand.Connection = conn;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private void setupShapeCommands(SqliteDataAdapter da, SqliteConnection conn)
|
private void setupShapeCommands(SqliteDataAdapter da, SqliteConnection conn)
|
||||||
{
|
{
|
||||||
da.InsertCommand = createInsertCommand("primshapes", ds.Tables["primshapes"]);
|
da.InsertCommand = createInsertCommand("primshapes", ds.Tables["primshapes"]);
|
||||||
|
|
|
@ -1,3 +1,30 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) Contributors, http://opensimulator.org/
|
||||||
|
* See CONTRIBUTORS.TXT for a full list of copyright holders.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
* * Neither the name of the OpenSim Project nor the
|
||||||
|
* names of its contributors may be used to endorse or promote products
|
||||||
|
* derived from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
|
||||||
|
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
|
||||||
|
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
using libsecondlife;
|
using libsecondlife;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
Loading…
Reference in New Issue