diff options
author | Teravus Ovares | 2008-06-21 06:50:38 +0000 |
---|---|---|
committer | Teravus Ovares | 2008-06-21 06:50:38 +0000 |
commit | 2758bc81ad79c6110777ceb6cc714c7b40014359 (patch) | |
tree | 6bf47a5c7ecd64a821a5339cf68f90204e1413d9 | |
parent | * Adds Region ban capability to Regions. You access this by going to World->... (diff) | |
download | opensim-SC-2758bc81ad79c6110777ceb6cc714c7b40014359.zip opensim-SC-2758bc81ad79c6110777ceb6cc714c7b40014359.tar.gz opensim-SC-2758bc81ad79c6110777ceb6cc714c7b40014359.tar.bz2 opensim-SC-2758bc81ad79c6110777ceb6cc714c7b40014359.tar.xz |
* Persists region banlists across reboots for the sqlite datastore also now.
-rw-r--r-- | OpenSim/Data/SQLite/Resources/002_RegionStore.sql | 10 | ||||
-rw-r--r-- | OpenSim/Data/SQLite/SQLiteRegionData.cs | 85 | ||||
-rw-r--r-- | OpenSim/Framework/RegionBanListItem.cs | 27 |
3 files changed, 119 insertions, 3 deletions
diff --git a/OpenSim/Data/SQLite/Resources/002_RegionStore.sql b/OpenSim/Data/SQLite/Resources/002_RegionStore.sql new file mode 100644 index 0000000..c5c7c99 --- /dev/null +++ b/OpenSim/Data/SQLite/Resources/002_RegionStore.sql | |||
@@ -0,0 +1,10 @@ | |||
1 | BEGIN TRANSACTION; | ||
2 | |||
3 | CREATE TABLE regionban( | ||
4 | regionUUID varchar (255), | ||
5 | bannedUUID varchar (255), | ||
6 | bannedIp varchar (255), | ||
7 | bannedIpHostMask varchar (255) | ||
8 | ); | ||
9 | |||
10 | COMMIT; \ No newline at end of file | ||
diff --git a/OpenSim/Data/SQLite/SQLiteRegionData.cs b/OpenSim/Data/SQLite/SQLiteRegionData.cs index ab4d283..8212691 100644 --- a/OpenSim/Data/SQLite/SQLiteRegionData.cs +++ b/OpenSim/Data/SQLite/SQLiteRegionData.cs | |||
@@ -50,6 +50,7 @@ namespace OpenSim.Data.SQLite | |||
50 | private const string terrainSelect = "select * from terrain limit 1"; | 50 | private const string terrainSelect = "select * from terrain limit 1"; |
51 | private const string landSelect = "select * from land"; | 51 | private const string landSelect = "select * from land"; |
52 | private const string landAccessListSelect = "select distinct * from landaccesslist"; | 52 | private const string landAccessListSelect = "select distinct * from landaccesslist"; |
53 | private const string regionbanListSelect = "select * from regionban"; | ||
53 | 54 | ||
54 | private DataSet ds; | 55 | private DataSet ds; |
55 | private SqliteDataAdapter primDa; | 56 | private SqliteDataAdapter primDa; |
@@ -58,6 +59,7 @@ namespace OpenSim.Data.SQLite | |||
58 | private SqliteDataAdapter terrainDa; | 59 | private SqliteDataAdapter terrainDa; |
59 | private SqliteDataAdapter landDa; | 60 | private SqliteDataAdapter landDa; |
60 | private SqliteDataAdapter landAccessListDa; | 61 | private SqliteDataAdapter landAccessListDa; |
62 | private SqliteDataAdapter regionBanListDa; | ||
61 | 63 | ||
62 | private SqliteConnection m_conn; | 64 | private SqliteConnection m_conn; |
63 | 65 | ||
@@ -106,6 +108,9 @@ namespace OpenSim.Data.SQLite | |||
106 | SqliteCommand landAccessListSelectCmd = new SqliteCommand(landAccessListSelect, m_conn); | 108 | SqliteCommand landAccessListSelectCmd = new SqliteCommand(landAccessListSelect, m_conn); |
107 | landAccessListDa = new SqliteDataAdapter(landAccessListSelectCmd); | 109 | landAccessListDa = new SqliteDataAdapter(landAccessListSelectCmd); |
108 | 110 | ||
111 | SqliteCommand regionBanListSelectCmd = new SqliteCommand(regionbanListSelect, m_conn); | ||
112 | regionBanListDa = new SqliteDataAdapter(regionBanListSelectCmd); | ||
113 | |||
109 | // This actually does the roll forward assembly stuff | 114 | // This actually does the roll forward assembly stuff |
110 | Assembly assem = GetType().Assembly; | 115 | Assembly assem = GetType().Assembly; |
111 | Migration m = new Migration(m_conn, assem, "RegionStore"); | 116 | Migration m = new Migration(m_conn, assem, "RegionStore"); |
@@ -141,6 +146,10 @@ namespace OpenSim.Data.SQLite | |||
141 | ds.Tables.Add(createLandAccessListTable()); | 146 | ds.Tables.Add(createLandAccessListTable()); |
142 | setupLandAccessCommands(landAccessListDa, m_conn); | 147 | setupLandAccessCommands(landAccessListDa, m_conn); |
143 | 148 | ||
149 | ds.Tables.Add(createRegionBanListTable()); | ||
150 | setupRegionBanCommands(regionBanListDa, m_conn); | ||
151 | |||
152 | |||
144 | // WORKAROUND: This is a work around for sqlite on | 153 | // WORKAROUND: This is a work around for sqlite on |
145 | // windows, which gets really unhappy with blob columns | 154 | // windows, which gets really unhappy with blob columns |
146 | // that have no sample data in them. At some point we | 155 | // that have no sample data in them. At some point we |
@@ -180,6 +189,16 @@ namespace OpenSim.Data.SQLite | |||
180 | { | 189 | { |
181 | m_log.Info("[REGION DB]: Caught fill error on landaccesslist table"); | 190 | m_log.Info("[REGION DB]: Caught fill error on landaccesslist table"); |
182 | } | 191 | } |
192 | |||
193 | try | ||
194 | { | ||
195 | regionBanListDa.Fill(ds.Tables["regionban"]); | ||
196 | } | ||
197 | catch (Exception) | ||
198 | { | ||
199 | m_log.Info("[REGION DB]: Caught fill error on regionban table"); | ||
200 | } | ||
201 | |||
183 | return; | 202 | return; |
184 | } | 203 | } |
185 | } | 204 | } |
@@ -790,6 +809,17 @@ namespace OpenSim.Data.SQLite | |||
790 | return landaccess; | 809 | return landaccess; |
791 | } | 810 | } |
792 | 811 | ||
812 | private static DataTable createRegionBanListTable() | ||
813 | { | ||
814 | DataTable regionbanlist = new DataTable("regionban"); | ||
815 | createCol(regionbanlist, "regionUUID", typeof(String)); | ||
816 | createCol(regionbanlist, "bannedUUID", typeof(String)); | ||
817 | createCol(regionbanlist, "bannedIp", typeof(String)); | ||
818 | createCol(regionbanlist, "bannedIpHostMask", typeof(String)); | ||
819 | |||
820 | return regionbanlist; | ||
821 | } | ||
822 | |||
793 | /*********************************************************************** | 823 | /*********************************************************************** |
794 | * | 824 | * |
795 | * Convert between ADO.NET <=> OpenSim Objects | 825 | * Convert between ADO.NET <=> OpenSim Objects |
@@ -1036,21 +1066,60 @@ namespace OpenSim.Data.SQLite | |||
1036 | return entry; | 1066 | return entry; |
1037 | } | 1067 | } |
1038 | 1068 | ||
1039 | 1069 | ||
1070 | |||
1040 | public List<RegionBanListItem> LoadRegionBanList(LLUUID regionUUID) | 1071 | public List<RegionBanListItem> LoadRegionBanList(LLUUID regionUUID) |
1041 | { | 1072 | { |
1042 | List<RegionBanListItem> regionbanlist = new List<RegionBanListItem>(); | 1073 | List<RegionBanListItem> regionbanlist = new List<RegionBanListItem>(); |
1074 | lock (ds) | ||
1075 | { | ||
1076 | DataTable regionban = ds.Tables["regionban"]; | ||
1077 | string searchExp = "regionUUID = '" + regionUUID.ToString() + "'"; | ||
1078 | DataRow[] rawbanlist = regionban.Select(searchExp); | ||
1079 | foreach (DataRow rawbanrow in rawbanlist) | ||
1080 | { | ||
1081 | RegionBanListItem rbli = new RegionBanListItem(); | ||
1082 | LLUUID tmpvalue = LLUUID.Zero; | ||
1083 | |||
1084 | rbli.regionUUID = regionUUID; | ||
1085 | |||
1086 | if (Helpers.TryParse((string)rawbanrow["bannedUUID"], out tmpvalue)) | ||
1087 | rbli.bannedUUID = tmpvalue; | ||
1088 | |||
1089 | rbli.bannedIP = (string)rawbanrow["bannedIp"]; | ||
1090 | rbli.bannedIPHostMask = (string)rawbanrow["bannedIpHostMask"]; | ||
1091 | regionbanlist.Add(rbli); | ||
1092 | } | ||
1093 | } | ||
1043 | return regionbanlist; | 1094 | return regionbanlist; |
1044 | } | 1095 | } |
1045 | 1096 | ||
1046 | public void AddToRegionBanlist(RegionBanListItem item) | 1097 | public void AddToRegionBanlist(RegionBanListItem item) |
1047 | { | 1098 | { |
1048 | 1099 | lock (ds) | |
1100 | { | ||
1101 | using (SqliteCommand cmd = new SqliteCommand("insert into regionban (regionUUID, bannedUUID, bannedIp, bannedIpHostMask) values (:regionUUID,:bannedUUID,:bannedIp,:bannedIpHostMask)", m_conn)) | ||
1102 | { | ||
1103 | cmd.Parameters.Add(new SqliteParameter(":regionUUID", item.regionUUID.ToString())); | ||
1104 | cmd.Parameters.Add(new SqliteParameter(":bannedUUID", item.bannedUUID.ToString())); | ||
1105 | cmd.Parameters.Add(new SqliteParameter(":bannedIp", item.bannedIP)); | ||
1106 | cmd.Parameters.Add(new SqliteParameter(":bannedIpHostMask", item.bannedIPHostMask)); | ||
1107 | cmd.ExecuteNonQuery(); | ||
1108 | } | ||
1109 | } | ||
1049 | } | 1110 | } |
1050 | 1111 | ||
1051 | public void RemoveFromRegionBanlist(RegionBanListItem item) | 1112 | public void RemoveFromRegionBanlist(RegionBanListItem item) |
1052 | { | 1113 | { |
1053 | 1114 | lock (ds) | |
1115 | { | ||
1116 | using (SqliteCommand cmd = new SqliteCommand("delete from regionban where regionUUID=:regionUUID AND bannedUUID=:bannedUUID", m_conn)) | ||
1117 | { | ||
1118 | cmd.Parameters.Add(new SqliteParameter(":regionUUID", item.regionUUID.ToString())); | ||
1119 | cmd.Parameters.Add(new SqliteParameter(":bannedUUID", item.bannedUUID.ToString())); | ||
1120 | cmd.ExecuteNonQuery(); | ||
1121 | } | ||
1122 | } | ||
1054 | } | 1123 | } |
1055 | 1124 | ||
1056 | private static Array serializeTerrain(double[,] val) | 1125 | private static Array serializeTerrain(double[,] val) |
@@ -1536,6 +1605,16 @@ namespace OpenSim.Data.SQLite | |||
1536 | da.InsertCommand.Connection = conn; | 1605 | da.InsertCommand.Connection = conn; |
1537 | } | 1606 | } |
1538 | 1607 | ||
1608 | private void setupRegionBanCommands(SqliteDataAdapter da, SqliteConnection conn) | ||
1609 | { | ||
1610 | da.InsertCommand = createInsertCommand("regionban", ds.Tables["regionban"]); | ||
1611 | da.InsertCommand.Connection = conn; | ||
1612 | |||
1613 | da.UpdateCommand = createUpdateCommand("regionban", "regionUUID=:regionUUID AND bannedUUID=:bannedUUID", ds.Tables["regionban"]); | ||
1614 | da.UpdateCommand.Connection = conn; | ||
1615 | } | ||
1616 | |||
1617 | |||
1539 | private void setupShapeCommands(SqliteDataAdapter da, SqliteConnection conn) | 1618 | private void setupShapeCommands(SqliteDataAdapter da, SqliteConnection conn) |
1540 | { | 1619 | { |
1541 | da.InsertCommand = createInsertCommand("primshapes", ds.Tables["primshapes"]); | 1620 | da.InsertCommand = createInsertCommand("primshapes", ds.Tables["primshapes"]); |
diff --git a/OpenSim/Framework/RegionBanListItem.cs b/OpenSim/Framework/RegionBanListItem.cs index 60383fb..edf6a22 100644 --- a/OpenSim/Framework/RegionBanListItem.cs +++ b/OpenSim/Framework/RegionBanListItem.cs | |||
@@ -1,3 +1,30 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://opensimulator.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | */ | ||
27 | |||
1 | using libsecondlife; | 28 | using libsecondlife; |
2 | using System; | 29 | using System; |
3 | using System.Collections.Generic; | 30 | using System.Collections.Generic; |