* 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 landSelect = "select * from land";
|
||||
private const string landAccessListSelect = "select distinct * from landaccesslist";
|
||||
private const string regionbanListSelect = "select * from regionban";
|
||||
|
||||
private DataSet ds;
|
||||
private SqliteDataAdapter primDa;
|
||||
|
@ -58,6 +59,7 @@ namespace OpenSim.Data.SQLite
|
|||
private SqliteDataAdapter terrainDa;
|
||||
private SqliteDataAdapter landDa;
|
||||
private SqliteDataAdapter landAccessListDa;
|
||||
private SqliteDataAdapter regionBanListDa;
|
||||
|
||||
private SqliteConnection m_conn;
|
||||
|
||||
|
@ -106,6 +108,9 @@ namespace OpenSim.Data.SQLite
|
|||
SqliteCommand landAccessListSelectCmd = new SqliteCommand(landAccessListSelect, m_conn);
|
||||
landAccessListDa = new SqliteDataAdapter(landAccessListSelectCmd);
|
||||
|
||||
SqliteCommand regionBanListSelectCmd = new SqliteCommand(regionbanListSelect, m_conn);
|
||||
regionBanListDa = new SqliteDataAdapter(regionBanListSelectCmd);
|
||||
|
||||
// This actually does the roll forward assembly stuff
|
||||
Assembly assem = GetType().Assembly;
|
||||
Migration m = new Migration(m_conn, assem, "RegionStore");
|
||||
|
@ -141,6 +146,10 @@ namespace OpenSim.Data.SQLite
|
|||
ds.Tables.Add(createLandAccessListTable());
|
||||
setupLandAccessCommands(landAccessListDa, m_conn);
|
||||
|
||||
ds.Tables.Add(createRegionBanListTable());
|
||||
setupRegionBanCommands(regionBanListDa, m_conn);
|
||||
|
||||
|
||||
// WORKAROUND: This is a work around for sqlite on
|
||||
// windows, which gets really unhappy with blob columns
|
||||
// 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");
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
regionBanListDa.Fill(ds.Tables["regionban"]);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
m_log.Info("[REGION DB]: Caught fill error on regionban table");
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -790,6 +809,17 @@ namespace OpenSim.Data.SQLite
|
|||
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
|
||||
|
@ -1036,21 +1066,60 @@ namespace OpenSim.Data.SQLite
|
|||
return entry;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
public List<RegionBanListItem> LoadRegionBanList(LLUUID regionUUID)
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
|
||||
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)
|
||||
|
@ -1536,6 +1605,16 @@ namespace OpenSim.Data.SQLite
|
|||
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)
|
||||
{
|
||||
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 System;
|
||||
using System.Collections.Generic;
|
||||
|
|
Loading…
Reference in New Issue