Merge branch 'master' into careminster

Conflicts:
	OpenSim/Data/MySQL/MySQLAssetData.cs
	OpenSim/Data/MySQL/MySQLSimulationData.cs
	OpenSim/Data/MySQL/MySQLUserAccountData.cs
avinationmerge
Melanie 2012-04-30 19:04:38 +01:00
commit 4b982db252
23 changed files with 598 additions and 674 deletions

View File

@ -146,6 +146,7 @@ what it is today.
* Stefan_Boom / stoehr * Stefan_Boom / stoehr
* Strawberry Fride * Strawberry Fride
* Talun * Talun
* TBG Renfold
* tglion * tglion
* tlaukkan/Tommil (Tommi S. E. Laukkanen, Bubble Cloud) * tlaukkan/Tommil (Tommi S. E. Laukkanen, Bubble Cloud)
* tyre * tyre

View File

@ -163,54 +163,53 @@ namespace OpenSim.Data.MySQL
{ {
dbcon.Open(); dbcon.Open();
MySqlCommand cmd = using (MySqlCommand cmd =
new MySqlCommand( new MySqlCommand(
"replace INTO assets(id, name, description, assetType, local, temporary, create_time, access_time, asset_flags, CreatorID, data)" + "replace INTO assets(id, name, description, assetType, local, temporary, create_time, access_time, asset_flags, CreatorID, data)" +
"VALUES(?id, ?name, ?description, ?assetType, ?local, ?temporary, ?create_time, ?access_time, ?asset_flags, ?CreatorID, ?data)", "VALUES(?id, ?name, ?description, ?assetType, ?local, ?temporary, ?create_time, ?access_time, ?asset_flags, ?CreatorID, ?data)",
dbcon); dbcon))
string assetName = asset.Name;
if (asset.Name.Length > 64)
{ {
assetName = asset.Name.Substring(0, 64); string assetName = asset.Name;
m_log.Warn("[ASSET DB]: Name field truncated from " + asset.Name.Length + " to " + assetName.Length + " characters on add"); if (asset.Name.Length > 64)
}
string assetDescription = asset.Description;
if (asset.Description.Length > 64)
{
assetDescription = asset.Description.Substring(0, 64);
m_log.Warn("[ASSET DB]: Description field truncated from " + asset.Description.Length + " to " + assetDescription.Length + " characters on add");
}
// need to ensure we dispose
try
{
using (cmd)
{ {
// create unix epoch time assetName = asset.Name.Substring(0, 64);
int now = (int)Utils.DateTimeToUnixTime(DateTime.UtcNow); m_log.Warn("[ASSET DB]: Name field truncated from " + asset.Name.Length + " to " + assetName.Length + " characters on add");
cmd.Parameters.AddWithValue("?id", asset.ID); }
cmd.Parameters.AddWithValue("?name", assetName);
cmd.Parameters.AddWithValue("?description", assetDescription); string assetDescription = asset.Description;
cmd.Parameters.AddWithValue("?assetType", asset.Type); if (asset.Description.Length > 64)
cmd.Parameters.AddWithValue("?local", asset.Local); {
cmd.Parameters.AddWithValue("?temporary", asset.Temporary); assetDescription = asset.Description.Substring(0, 64);
cmd.Parameters.AddWithValue("?create_time", now); m_log.Warn("[ASSET DB]: Description field truncated from " + asset.Description.Length + " to " + assetDescription.Length + " characters on add");
cmd.Parameters.AddWithValue("?access_time", now); }
cmd.Parameters.AddWithValue("?CreatorID", asset.Metadata.CreatorID);
cmd.Parameters.AddWithValue("?asset_flags", (int)asset.Flags); try
cmd.Parameters.AddWithValue("?data", asset.Data); {
cmd.ExecuteNonQuery(); using (cmd)
cmd.Dispose(); {
return true; // create unix epoch time
int now = (int)Utils.DateTimeToUnixTime(DateTime.UtcNow);
cmd.Parameters.AddWithValue("?id", asset.ID);
cmd.Parameters.AddWithValue("?name", assetName);
cmd.Parameters.AddWithValue("?description", assetDescription);
cmd.Parameters.AddWithValue("?assetType", asset.Type);
cmd.Parameters.AddWithValue("?local", asset.Local);
cmd.Parameters.AddWithValue("?temporary", asset.Temporary);
cmd.Parameters.AddWithValue("?create_time", now);
cmd.Parameters.AddWithValue("?access_time", now);
cmd.Parameters.AddWithValue("?CreatorID", asset.Metadata.CreatorID);
cmd.Parameters.AddWithValue("?asset_flags", (int)asset.Flags);
cmd.Parameters.AddWithValue("?data", asset.Data);
cmd.ExecuteNonQuery();
return true;
}
}
catch (Exception e)
{
m_log.ErrorFormat("[ASSET DB]: MySQL failure creating asset {0} with name \"{1}\". Error: {2}",
asset.FullID, asset.Name, e.Message);
return false;
} }
}
catch (Exception e)
{
m_log.ErrorFormat("[ASSET DB]: MySQL failure creating asset {0} with name \"{1}\". Error: {2}",
asset.FullID, asset.Name, e.Message);
return false;
} }
} }
} }
@ -223,33 +222,31 @@ namespace OpenSim.Data.MySQL
using (MySqlConnection dbcon = new MySqlConnection(m_connectionString)) using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
{ {
dbcon.Open(); dbcon.Open();
MySqlCommand cmd =
new MySqlCommand("update assets set access_time=?access_time where id=?id",
dbcon);
// need to ensure we dispose using (MySqlCommand cmd
try = new MySqlCommand("update assets set access_time=?access_time where id=?id", dbcon))
{ {
using (cmd) try
{ {
// create unix epoch time using (cmd)
int now = (int)Utils.DateTimeToUnixTime(DateTime.UtcNow); {
cmd.Parameters.AddWithValue("?id", asset.ID); // create unix epoch time
cmd.Parameters.AddWithValue("?access_time", now); int now = (int)Utils.DateTimeToUnixTime(DateTime.UtcNow);
cmd.ExecuteNonQuery(); cmd.Parameters.AddWithValue("?id", asset.ID);
cmd.Dispose(); cmd.Parameters.AddWithValue("?access_time", now);
cmd.ExecuteNonQuery();
}
}
catch (Exception e)
{
m_log.ErrorFormat(
"[ASSETS DB]: " +
"MySql failure updating access_time for asset {0} with name {1}" + Environment.NewLine + e.ToString()
+ Environment.NewLine + "Attempting reconnection", asset.FullID, asset.Name);
} }
}
catch (Exception e)
{
m_log.ErrorFormat(
"[ASSETS DB]: " +
"MySql failure updating access_time for asset {0} with name {1}" + Environment.NewLine + e.ToString()
+ Environment.NewLine + "Attempting reconnection", asset.FullID, asset.Name);
} }
} }
} }
} }
/// <summary> /// <summary>
@ -312,35 +309,41 @@ namespace OpenSim.Data.MySQL
using (MySqlConnection dbcon = new MySqlConnection(m_connectionString)) using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
{ {
dbcon.Open(); dbcon.Open();
MySqlCommand cmd = new MySqlCommand("SELECT name,description,assetType,temporary,id,asset_flags,CreatorID FROM assets LIMIT ?start, ?count", dbcon);
cmd.Parameters.AddWithValue("?start", start);
cmd.Parameters.AddWithValue("?count", count);
try using (MySqlCommand cmd
= new MySqlCommand(
"SELECT name,description,assetType,temporary,id,asset_flags,CreatorID FROM assets LIMIT ?start, ?count",
dbcon))
{ {
using (MySqlDataReader dbReader = cmd.ExecuteReader()) cmd.Parameters.AddWithValue("?start", start);
cmd.Parameters.AddWithValue("?count", count);
try
{ {
while (dbReader.Read()) using (MySqlDataReader dbReader = cmd.ExecuteReader())
{ {
AssetMetadata metadata = new AssetMetadata(); while (dbReader.Read())
metadata.Name = (string)dbReader["name"]; {
metadata.Description = (string)dbReader["description"]; AssetMetadata metadata = new AssetMetadata();
metadata.Type = (sbyte)dbReader["assetType"]; metadata.Name = (string)dbReader["name"];
metadata.Temporary = Convert.ToBoolean(dbReader["temporary"]); // Not sure if this is correct. metadata.Description = (string)dbReader["description"];
metadata.Flags = (AssetFlags)Convert.ToInt32(dbReader["asset_flags"]); metadata.Type = (sbyte)dbReader["assetType"];
metadata.FullID = DBGuid.FromDB(dbReader["id"]); metadata.Temporary = Convert.ToBoolean(dbReader["temporary"]); // Not sure if this is correct.
metadata.CreatorID = dbReader["CreatorID"].ToString(); metadata.Flags = (AssetFlags)Convert.ToInt32(dbReader["asset_flags"]);
metadata.FullID = DBGuid.FromDB(dbReader["id"]);
// Current SHA1s are not stored/computed. metadata.CreatorID = dbReader["CreatorID"].ToString();
metadata.SHA1 = new byte[] { };
// Current SHA1s are not stored/computed.
retList.Add(metadata); metadata.SHA1 = new byte[] { };
retList.Add(metadata);
}
} }
} }
} catch (Exception e)
catch (Exception e) {
{ m_log.Error("[ASSETS DB]: MySql failure fetching asset set" + Environment.NewLine + e.ToString());
m_log.Error("[ASSETS DB]: MySql failure fetching asset set" + Environment.NewLine + e.ToString()); }
} }
} }
} }
@ -355,11 +358,12 @@ namespace OpenSim.Data.MySQL
using (MySqlConnection dbcon = new MySqlConnection(m_connectionString)) using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
{ {
dbcon.Open(); dbcon.Open();
MySqlCommand cmd = new MySqlCommand("delete from assets where id=?id", dbcon);
cmd.Parameters.AddWithValue("?id", id);
cmd.ExecuteNonQuery();
cmd.Dispose(); using (MySqlCommand cmd = new MySqlCommand("delete from assets where id=?id", dbcon))
{
cmd.Parameters.AddWithValue("?id", id);
cmd.ExecuteNonQuery();
}
} }
} }

View File

@ -70,30 +70,34 @@ namespace OpenSim.Data.MySQL
using (MySqlConnection dbcon = new MySqlConnection(m_connectionString)) using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
{ {
dbcon.Open(); dbcon.Open();
MySqlCommand cmd = new MySqlCommand("select * from `" + m_Realm + "` where UUID = ?principalID", dbcon);
cmd.Parameters.AddWithValue("?principalID", principalID.ToString());
IDataReader result = cmd.ExecuteReader(); using (MySqlCommand cmd
= new MySqlCommand("select * from `" + m_Realm + "` where UUID = ?principalID", dbcon))
if (result.Read())
{ {
ret.PrincipalID = principalID; cmd.Parameters.AddWithValue("?principalID", principalID.ToString());
CheckColumnNames(result); IDataReader result = cmd.ExecuteReader();
foreach (string s in m_ColumnNames) if (result.Read())
{ {
if (s == "UUID") ret.PrincipalID = principalID;
continue;
CheckColumnNames(result);
ret.Data[s] = result[s].ToString();
foreach (string s in m_ColumnNames)
{
if (s == "UUID")
continue;
ret.Data[s] = result[s].ToString();
}
return ret;
}
else
{
return null;
} }
return ret;
}
else
{
return null;
} }
} }
} }
@ -119,57 +123,53 @@ namespace OpenSim.Data.MySQL
string[] fields = new List<string>(data.Data.Keys).ToArray(); string[] fields = new List<string>(data.Data.Keys).ToArray();
MySqlCommand cmd = new MySqlCommand(); using (MySqlCommand cmd = new MySqlCommand())
string update = "update `"+m_Realm+"` set ";
bool first = true;
foreach (string field in fields)
{ {
if (!first) string update = "update `"+m_Realm+"` set ";
update += ", "; bool first = true;
update += "`" + field + "` = ?"+field; foreach (string field in fields)
{
first = false; if (!first)
update += ", ";
cmd.Parameters.AddWithValue("?"+field, data.Data[field]); update += "`" + field + "` = ?"+field;
}
first = false;
update += " where UUID = ?principalID";
cmd.Parameters.AddWithValue("?"+field, data.Data[field]);
cmd.CommandText = update; }
cmd.Parameters.AddWithValue("?principalID", data.PrincipalID.ToString());
update += " where UUID = ?principalID";
if (ExecuteNonQuery(cmd) < 1)
{ cmd.CommandText = update;
string insert = "insert into `" + m_Realm + "` (`UUID`, `" + cmd.Parameters.AddWithValue("?principalID", data.PrincipalID.ToString());
String.Join("`, `", fields) +
"`) values (?principalID, ?" + String.Join(", ?", fields) + ")";
cmd.CommandText = insert;
if (ExecuteNonQuery(cmd) < 1) if (ExecuteNonQuery(cmd) < 1)
{ {
cmd.Dispose(); string insert = "insert into `" + m_Realm + "` (`UUID`, `" +
return false; String.Join("`, `", fields) +
"`) values (?principalID, ?" + String.Join(", ?", fields) + ")";
cmd.CommandText = insert;
if (ExecuteNonQuery(cmd) < 1)
return false;
} }
} }
cmd.Dispose();
return true; return true;
} }
public bool SetDataItem(UUID principalID, string item, string value) public bool SetDataItem(UUID principalID, string item, string value)
{ {
MySqlCommand cmd = new MySqlCommand("update `" + m_Realm + using (MySqlCommand cmd
"` set `" + item + "` = ?" + item + " where UUID = ?UUID"); = new MySqlCommand("update `" + m_Realm + "` set `" + item + "` = ?" + item + " where UUID = ?UUID"))
{
cmd.Parameters.AddWithValue("?"+item, value);
cmd.Parameters.AddWithValue("?"+item, value); cmd.Parameters.AddWithValue("?UUID", principalID.ToString());
cmd.Parameters.AddWithValue("?UUID", principalID.ToString());
if (ExecuteNonQuery(cmd) > 0)
if (ExecuteNonQuery(cmd) > 0) return true;
return true; }
return false; return false;
} }
@ -179,18 +179,18 @@ namespace OpenSim.Data.MySQL
if (System.Environment.TickCount - m_LastExpire > 30000) if (System.Environment.TickCount - m_LastExpire > 30000)
DoExpire(); DoExpire();
MySqlCommand cmd = new MySqlCommand("insert into tokens (UUID, token, validity) values (?principalID, ?token, date_add(now(), interval ?lifetime minute))"); using (MySqlCommand cmd
cmd.Parameters.AddWithValue("?principalID", principalID.ToString()); = new MySqlCommand(
cmd.Parameters.AddWithValue("?token", token); "insert into tokens (UUID, token, validity) values (?principalID, ?token, date_add(now(), interval ?lifetime minute))"))
cmd.Parameters.AddWithValue("?lifetime", lifetime.ToString());
if (ExecuteNonQuery(cmd) > 0)
{ {
cmd.Dispose(); cmd.Parameters.AddWithValue("?principalID", principalID.ToString());
return true; cmd.Parameters.AddWithValue("?token", token);
cmd.Parameters.AddWithValue("?lifetime", lifetime.ToString());
if (ExecuteNonQuery(cmd) > 0)
return true;
} }
cmd.Dispose();
return false; return false;
} }
@ -199,30 +199,29 @@ namespace OpenSim.Data.MySQL
if (System.Environment.TickCount - m_LastExpire > 30000) if (System.Environment.TickCount - m_LastExpire > 30000)
DoExpire(); DoExpire();
MySqlCommand cmd = new MySqlCommand("update tokens set validity = date_add(now(), interval ?lifetime minute) where UUID = ?principalID and token = ?token and validity > now()"); using (MySqlCommand cmd
cmd.Parameters.AddWithValue("?principalID", principalID.ToString()); = new MySqlCommand(
cmd.Parameters.AddWithValue("?token", token); "update tokens set validity = date_add(now(), interval ?lifetime minute) where UUID = ?principalID and token = ?token and validity > now()"))
cmd.Parameters.AddWithValue("?lifetime", lifetime.ToString());
if (ExecuteNonQuery(cmd) > 0)
{ {
cmd.Dispose(); cmd.Parameters.AddWithValue("?principalID", principalID.ToString());
return true; cmd.Parameters.AddWithValue("?token", token);
} cmd.Parameters.AddWithValue("?lifetime", lifetime.ToString());
cmd.Dispose(); if (ExecuteNonQuery(cmd) > 0)
return true;
}
return false; return false;
} }
private void DoExpire() private void DoExpire()
{ {
MySqlCommand cmd = new MySqlCommand("delete from tokens where validity < now()"); using (MySqlCommand cmd = new MySqlCommand("delete from tokens where validity < now()"))
ExecuteNonQuery(cmd); {
ExecuteNonQuery(cmd);
cmd.Dispose(); }
m_LastExpire = System.Environment.TickCount; m_LastExpire = System.Environment.TickCount;
} }
} }
} }

View File

@ -52,14 +52,15 @@ namespace OpenSim.Data.MySQL
public bool Delete(UUID principalID, string name) public bool Delete(UUID principalID, string name)
{ {
MySqlCommand cmd = new MySqlCommand(); using (MySqlCommand cmd = new MySqlCommand())
{
cmd.CommandText = String.Format("delete from {0} where `PrincipalID` = ?PrincipalID and `Name` = ?Name", m_Realm); cmd.CommandText = String.Format("delete from {0} where `PrincipalID` = ?PrincipalID and `Name` = ?Name", m_Realm);
cmd.Parameters.AddWithValue("?PrincipalID", principalID.ToString()); cmd.Parameters.AddWithValue("?PrincipalID", principalID.ToString());
cmd.Parameters.AddWithValue("?Name", name); cmd.Parameters.AddWithValue("?Name", name);
if (ExecuteNonQuery(cmd) > 0) if (ExecuteNonQuery(cmd) > 0)
return true; return true;
}
return false; return false;
} }

View File

@ -49,34 +49,38 @@ namespace OpenSim.Data.MySQL
public bool Delete(string principalID, string friend) public bool Delete(string principalID, string friend)
{ {
MySqlCommand cmd = new MySqlCommand(); using (MySqlCommand cmd = new MySqlCommand())
{
cmd.CommandText = String.Format("delete from {0} where PrincipalID = ?PrincipalID and Friend = ?Friend", m_Realm);
cmd.Parameters.AddWithValue("?PrincipalID", principalID.ToString());
cmd.Parameters.AddWithValue("?Friend", friend);
cmd.CommandText = String.Format("delete from {0} where PrincipalID = ?PrincipalID and Friend = ?Friend", m_Realm); ExecuteNonQuery(cmd);
cmd.Parameters.AddWithValue("?PrincipalID", principalID.ToString()); }
cmd.Parameters.AddWithValue("?Friend", friend);
ExecuteNonQuery(cmd);
return true; return true;
} }
public FriendsData[] GetFriends(UUID principalID) public FriendsData[] GetFriends(UUID principalID)
{ {
MySqlCommand cmd = new MySqlCommand(); using (MySqlCommand cmd = new MySqlCommand())
{
cmd.CommandText = String.Format("select a.*,case when b.Flags is null then -1 else b.Flags end as TheirFlags from {0} as a left join {0} as b on a.PrincipalID = b.Friend and a.Friend = b.PrincipalID where a.PrincipalID = ?PrincipalID", m_Realm);
cmd.Parameters.AddWithValue("?PrincipalID", principalID.ToString());
cmd.CommandText = String.Format("select a.*,case when b.Flags is null then -1 else b.Flags end as TheirFlags from {0} as a left join {0} as b on a.PrincipalID = b.Friend and a.Friend = b.PrincipalID where a.PrincipalID = ?PrincipalID", m_Realm); return DoQuery(cmd);
cmd.Parameters.AddWithValue("?PrincipalID", principalID.ToString()); }
return DoQuery(cmd);
} }
public FriendsData[] GetFriends(string principalID) public FriendsData[] GetFriends(string principalID)
{ {
MySqlCommand cmd = new MySqlCommand(); using (MySqlCommand cmd = new MySqlCommand())
{
cmd.CommandText = String.Format("select a.*,case when b.Flags is null then -1 else b.Flags end as TheirFlags from {0} as a left join {0} as b on a.PrincipalID = b.Friend and a.Friend = b.PrincipalID where a.PrincipalID LIKE ?PrincipalID", m_Realm);
cmd.Parameters.AddWithValue("?PrincipalID", principalID.ToString() + '%');
cmd.CommandText = String.Format("select a.*,case when b.Flags is null then -1 else b.Flags end as TheirFlags from {0} as a left join {0} as b on a.PrincipalID = b.Friend and a.Friend = b.PrincipalID where a.PrincipalID LIKE ?PrincipalID", m_Realm); return DoQuery(cmd);
cmd.Parameters.AddWithValue("?PrincipalID", principalID.ToString() + '%'); }
return DoQuery(cmd);
} }
} }
} }

View File

@ -467,43 +467,43 @@ namespace OpenSim.Data.MySQL
{ {
dbcon.Open(); dbcon.Open();
MySqlCommand result = new MySqlCommand(sql, dbcon); using (MySqlCommand result = new MySqlCommand(sql, dbcon))
result.Parameters.AddWithValue("?inventoryID", item.ID.ToString());
result.Parameters.AddWithValue("?assetID", item.AssetID.ToString());
result.Parameters.AddWithValue("?assetType", item.AssetType.ToString());
result.Parameters.AddWithValue("?parentFolderID", item.Folder.ToString());
result.Parameters.AddWithValue("?avatarID", item.Owner.ToString());
result.Parameters.AddWithValue("?inventoryName", itemName);
result.Parameters.AddWithValue("?inventoryDescription", itemDesc);
result.Parameters.AddWithValue("?inventoryNextPermissions", item.NextPermissions.ToString());
result.Parameters.AddWithValue("?inventoryCurrentPermissions",
item.CurrentPermissions.ToString());
result.Parameters.AddWithValue("?invType", item.InvType);
result.Parameters.AddWithValue("?creatorID", item.CreatorId);
result.Parameters.AddWithValue("?inventoryBasePermissions", item.BasePermissions);
result.Parameters.AddWithValue("?inventoryEveryOnePermissions", item.EveryOnePermissions);
result.Parameters.AddWithValue("?inventoryGroupPermissions", item.GroupPermissions);
result.Parameters.AddWithValue("?salePrice", item.SalePrice);
result.Parameters.AddWithValue("?saleType", unchecked((sbyte)item.SaleType));
result.Parameters.AddWithValue("?creationDate", item.CreationDate);
result.Parameters.AddWithValue("?groupID", item.GroupID);
result.Parameters.AddWithValue("?groupOwned", item.GroupOwned);
result.Parameters.AddWithValue("?flags", item.Flags);
lock (m_dbLock)
{ {
result.ExecuteNonQuery(); result.Parameters.AddWithValue("?inventoryID", item.ID.ToString());
result.Parameters.AddWithValue("?assetID", item.AssetID.ToString());
result.Parameters.AddWithValue("?assetType", item.AssetType.ToString());
result.Parameters.AddWithValue("?parentFolderID", item.Folder.ToString());
result.Parameters.AddWithValue("?avatarID", item.Owner.ToString());
result.Parameters.AddWithValue("?inventoryName", itemName);
result.Parameters.AddWithValue("?inventoryDescription", itemDesc);
result.Parameters.AddWithValue("?inventoryNextPermissions", item.NextPermissions.ToString());
result.Parameters.AddWithValue("?inventoryCurrentPermissions",
item.CurrentPermissions.ToString());
result.Parameters.AddWithValue("?invType", item.InvType);
result.Parameters.AddWithValue("?creatorID", item.CreatorId);
result.Parameters.AddWithValue("?inventoryBasePermissions", item.BasePermissions);
result.Parameters.AddWithValue("?inventoryEveryOnePermissions", item.EveryOnePermissions);
result.Parameters.AddWithValue("?inventoryGroupPermissions", item.GroupPermissions);
result.Parameters.AddWithValue("?salePrice", item.SalePrice);
result.Parameters.AddWithValue("?saleType", unchecked((sbyte)item.SaleType));
result.Parameters.AddWithValue("?creationDate", item.CreationDate);
result.Parameters.AddWithValue("?groupID", item.GroupID);
result.Parameters.AddWithValue("?groupOwned", item.GroupOwned);
result.Parameters.AddWithValue("?flags", item.Flags);
lock (m_dbLock)
result.ExecuteNonQuery();
result.Dispose();
} }
result.Dispose(); using (MySqlCommand result = new MySqlCommand("update inventoryfolders set version=version+1 where folderID = ?folderID", dbcon))
result = new MySqlCommand("update inventoryfolders set version=version+1 where folderID = ?folderID", dbcon);
result.Parameters.AddWithValue("?folderID", item.Folder.ToString());
lock (m_dbLock)
{ {
result.ExecuteNonQuery(); result.Parameters.AddWithValue("?folderID", item.Folder.ToString());
lock (m_dbLock)
result.ExecuteNonQuery();
} }
result.Dispose();
} }
} }
catch (MySqlException e) catch (MySqlException e)
@ -533,12 +533,12 @@ namespace OpenSim.Data.MySQL
{ {
dbcon.Open(); dbcon.Open();
MySqlCommand cmd = new MySqlCommand("DELETE FROM inventoryitems WHERE inventoryID=?uuid", dbcon); using (MySqlCommand cmd = new MySqlCommand("DELETE FROM inventoryitems WHERE inventoryID=?uuid", dbcon))
cmd.Parameters.AddWithValue("?uuid", itemID.ToString());
lock (m_dbLock)
{ {
cmd.ExecuteNonQuery(); cmd.Parameters.AddWithValue("?uuid", itemID.ToString());
lock (m_dbLock)
cmd.ExecuteNonQuery();
} }
} }
} }
@ -579,24 +579,26 @@ namespace OpenSim.Data.MySQL
{ {
dbcon.Open(); dbcon.Open();
MySqlCommand cmd = new MySqlCommand(sql, dbcon); using (MySqlCommand cmd = new MySqlCommand(sql, dbcon))
cmd.Parameters.AddWithValue("?folderID", folder.ID.ToString()); {
cmd.Parameters.AddWithValue("?agentID", folder.Owner.ToString()); cmd.Parameters.AddWithValue("?folderID", folder.ID.ToString());
cmd.Parameters.AddWithValue("?parentFolderID", folder.ParentID.ToString()); cmd.Parameters.AddWithValue("?agentID", folder.Owner.ToString());
cmd.Parameters.AddWithValue("?folderName", folderName); cmd.Parameters.AddWithValue("?parentFolderID", folder.ParentID.ToString());
cmd.Parameters.AddWithValue("?type", folder.Type); cmd.Parameters.AddWithValue("?folderName", folderName);
cmd.Parameters.AddWithValue("?version", folder.Version); cmd.Parameters.AddWithValue("?type", folder.Type);
cmd.Parameters.AddWithValue("?version", folder.Version);
try try
{
lock (m_dbLock)
{ {
cmd.ExecuteNonQuery(); lock (m_dbLock)
{
cmd.ExecuteNonQuery();
}
}
catch (Exception e)
{
m_log.Error(e.ToString());
} }
}
catch (Exception e)
{
m_log.Error(e.ToString());
} }
} }
} }
@ -624,20 +626,22 @@ namespace OpenSim.Data.MySQL
{ {
dbcon.Open(); dbcon.Open();
MySqlCommand cmd = new MySqlCommand(sql, dbcon); using (MySqlCommand cmd = new MySqlCommand(sql, dbcon))
cmd.Parameters.AddWithValue("?folderID", folder.ID.ToString());
cmd.Parameters.AddWithValue("?parentFolderID", folder.ParentID.ToString());
try
{ {
lock (m_dbLock) cmd.Parameters.AddWithValue("?folderID", folder.ID.ToString());
cmd.Parameters.AddWithValue("?parentFolderID", folder.ParentID.ToString());
try
{ {
cmd.ExecuteNonQuery(); lock (m_dbLock)
{
cmd.ExecuteNonQuery();
}
}
catch (Exception e)
{
m_log.Error(e.ToString());
} }
}
catch (Exception e)
{
m_log.Error(e.ToString());
} }
} }
} }

View File

@ -63,13 +63,14 @@ namespace OpenSim.Data.MySQL
public void LogoutRegionAgents(UUID regionID) public void LogoutRegionAgents(UUID regionID)
{ {
MySqlCommand cmd = new MySqlCommand(); using (MySqlCommand cmd = new MySqlCommand())
{
cmd.CommandText = String.Format("delete from {0} where `RegionID`=?RegionID", m_Realm); cmd.CommandText = String.Format("delete from {0} where `RegionID`=?RegionID", m_Realm);
cmd.Parameters.AddWithValue("?RegionID", regionID.ToString()); cmd.Parameters.AddWithValue("?RegionID", regionID.ToString());
ExecuteNonQuery(cmd); ExecuteNonQuery(cmd);
}
} }
public bool ReportAgent(UUID sessionID, UUID regionID) public bool ReportAgent(UUID sessionID, UUID regionID)
@ -81,17 +82,18 @@ namespace OpenSim.Data.MySQL
if (regionID == UUID.Zero) if (regionID == UUID.Zero)
return false; return false;
MySqlCommand cmd = new MySqlCommand(); using (MySqlCommand cmd = new MySqlCommand())
{
cmd.CommandText = String.Format("update {0} set RegionID=?RegionID, LastSeen=NOW() where `SessionID`=?SessionID", m_Realm); cmd.CommandText = String.Format("update {0} set RegionID=?RegionID, LastSeen=NOW() where `SessionID`=?SessionID", m_Realm);
cmd.Parameters.AddWithValue("?SessionID", sessionID.ToString()); cmd.Parameters.AddWithValue("?SessionID", sessionID.ToString());
cmd.Parameters.AddWithValue("?RegionID", regionID.ToString()); cmd.Parameters.AddWithValue("?RegionID", regionID.ToString());
if (ExecuteNonQuery(cmd) == 0) if (ExecuteNonQuery(cmd) == 0)
return false; return false;
}
return true; return true;
} }
} }
} }

View File

@ -329,11 +329,12 @@ namespace OpenSim.Data.MySQL
if (scopeID != UUID.Zero) if (scopeID != UUID.Zero)
command += " and ScopeID = ?scopeID"; command += " and ScopeID = ?scopeID";
MySqlCommand cmd = new MySqlCommand(command); using (MySqlCommand cmd = new MySqlCommand(command))
{
cmd.Parameters.AddWithValue("?scopeID", scopeID.ToString()); cmd.Parameters.AddWithValue("?scopeID", scopeID.ToString());
return RunCommand(cmd); return RunCommand(cmd);
}
} }
} }
} }

View File

@ -129,119 +129,119 @@ namespace OpenSim.Data.MySQL
using (MySqlConnection dbcon = new MySqlConnection(m_connectionString)) using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
{ {
dbcon.Open(); dbcon.Open();
MySqlCommand cmd = dbcon.CreateCommand();
foreach (SceneObjectPart prim in obj.Parts) using (MySqlCommand cmd = dbcon.CreateCommand())
{ {
cmd.Parameters.Clear(); foreach (SceneObjectPart prim in obj.Parts)
{
cmd.Parameters.Clear();
cmd.CommandText = "replace into prims (" + cmd.CommandText = "replace into prims (" +
"UUID, CreationDate, " + "UUID, CreationDate, " +
"Name, Text, Description, " + "Name, Text, Description, " +
"SitName, TouchName, ObjectFlags, " + "SitName, TouchName, ObjectFlags, " +
"OwnerMask, NextOwnerMask, GroupMask, " + "OwnerMask, NextOwnerMask, GroupMask, " +
"EveryoneMask, BaseMask, PositionX, " + "EveryoneMask, BaseMask, PositionX, " +
"PositionY, PositionZ, GroupPositionX, " + "PositionY, PositionZ, GroupPositionX, " +
"GroupPositionY, GroupPositionZ, VelocityX, " + "GroupPositionY, GroupPositionZ, VelocityX, " +
"VelocityY, VelocityZ, AngularVelocityX, " + "VelocityY, VelocityZ, AngularVelocityX, " +
"AngularVelocityY, AngularVelocityZ, " + "AngularVelocityY, AngularVelocityZ, " +
"AccelerationX, AccelerationY, " + "AccelerationX, AccelerationY, " +
"AccelerationZ, RotationX, " + "AccelerationZ, RotationX, " +
"RotationY, RotationZ, " + "RotationY, RotationZ, " +
"RotationW, SitTargetOffsetX, " + "RotationW, SitTargetOffsetX, " +
"SitTargetOffsetY, SitTargetOffsetZ, " + "SitTargetOffsetY, SitTargetOffsetZ, " +
"SitTargetOrientW, SitTargetOrientX, " + "SitTargetOrientW, SitTargetOrientX, " +
"SitTargetOrientY, SitTargetOrientZ, " + "SitTargetOrientY, SitTargetOrientZ, " +
"RegionUUID, CreatorID, " + "RegionUUID, CreatorID, " +
"OwnerID, GroupID, " + "OwnerID, GroupID, " +
"LastOwnerID, SceneGroupID, " + "LastOwnerID, SceneGroupID, " +
"PayPrice, PayButton1, " + "PayPrice, PayButton1, " +
"PayButton2, PayButton3, " + "PayButton2, PayButton3, " +
"PayButton4, LoopedSound, " + "PayButton4, LoopedSound, " +
"LoopedSoundGain, TextureAnimation, " + "LoopedSoundGain, TextureAnimation, " +
"OmegaX, OmegaY, OmegaZ, " + "OmegaX, OmegaY, OmegaZ, " +
"CameraEyeOffsetX, CameraEyeOffsetY, " + "CameraEyeOffsetX, CameraEyeOffsetY, " +
"CameraEyeOffsetZ, CameraAtOffsetX, " + "CameraEyeOffsetZ, CameraAtOffsetX, " +
"CameraAtOffsetY, CameraAtOffsetZ, " + "CameraAtOffsetY, CameraAtOffsetZ, " +
"ForceMouselook, ScriptAccessPin, " + "ForceMouselook, ScriptAccessPin, " +
"AllowedDrop, DieAtEdge, " + "AllowedDrop, DieAtEdge, " +
"SalePrice, SaleType, " + "SalePrice, SaleType, " +
"ColorR, ColorG, ColorB, ColorA, " + "ColorR, ColorG, ColorB, ColorA, " +
"ParticleSystem, ClickAction, Material, " + "ParticleSystem, ClickAction, Material, " +
"CollisionSound, CollisionSoundVolume, " + "CollisionSound, CollisionSoundVolume, " +
"PassTouches, " + "PassTouches, " +
"LinkNumber, MediaURL, KeyframeMotion, " + "LinkNumber, MediaURL, KeyframeMotion, " +
"PhysicsShapeType, Density, GravityModifier, " + "PhysicsShapeType, Density, GravityModifier, " +
"Friction, Restitution) values (" + "?UUID, " + "Friction, Restitution) values (" + "?UUID, " +
"?CreationDate, ?Name, ?Text, " + "?CreationDate, ?Name, ?Text, " +
"?Description, ?SitName, ?TouchName, " + "?Description, ?SitName, ?TouchName, " +
"?ObjectFlags, ?OwnerMask, ?NextOwnerMask, " + "?ObjectFlags, ?OwnerMask, ?NextOwnerMask, " +
"?GroupMask, ?EveryoneMask, ?BaseMask, " + "?GroupMask, ?EveryoneMask, ?BaseMask, " +
"?PositionX, ?PositionY, ?PositionZ, " + "?PositionX, ?PositionY, ?PositionZ, " +
"?GroupPositionX, ?GroupPositionY, " + "?GroupPositionX, ?GroupPositionY, " +
"?GroupPositionZ, ?VelocityX, " + "?GroupPositionZ, ?VelocityX, " +
"?VelocityY, ?VelocityZ, ?AngularVelocityX, " + "?VelocityY, ?VelocityZ, ?AngularVelocityX, " +
"?AngularVelocityY, ?AngularVelocityZ, " + "?AngularVelocityY, ?AngularVelocityZ, " +
"?AccelerationX, ?AccelerationY, " + "?AccelerationX, ?AccelerationY, " +
"?AccelerationZ, ?RotationX, " + "?AccelerationZ, ?RotationX, " +
"?RotationY, ?RotationZ, " + "?RotationY, ?RotationZ, " +
"?RotationW, ?SitTargetOffsetX, " + "?RotationW, ?SitTargetOffsetX, " +
"?SitTargetOffsetY, ?SitTargetOffsetZ, " + "?SitTargetOffsetY, ?SitTargetOffsetZ, " +
"?SitTargetOrientW, ?SitTargetOrientX, " + "?SitTargetOrientW, ?SitTargetOrientX, " +
"?SitTargetOrientY, ?SitTargetOrientZ, " + "?SitTargetOrientY, ?SitTargetOrientZ, " +
"?RegionUUID, ?CreatorID, ?OwnerID, " + "?RegionUUID, ?CreatorID, ?OwnerID, " +
"?GroupID, ?LastOwnerID, ?SceneGroupID, " + "?GroupID, ?LastOwnerID, ?SceneGroupID, " +
"?PayPrice, ?PayButton1, ?PayButton2, " + "?PayPrice, ?PayButton1, ?PayButton2, " +
"?PayButton3, ?PayButton4, ?LoopedSound, " + "?PayButton3, ?PayButton4, ?LoopedSound, " +
"?LoopedSoundGain, ?TextureAnimation, " + "?LoopedSoundGain, ?TextureAnimation, " +
"?OmegaX, ?OmegaY, ?OmegaZ, " + "?OmegaX, ?OmegaY, ?OmegaZ, " +
"?CameraEyeOffsetX, ?CameraEyeOffsetY, " + "?CameraEyeOffsetX, ?CameraEyeOffsetY, " +
"?CameraEyeOffsetZ, ?CameraAtOffsetX, " + "?CameraEyeOffsetZ, ?CameraAtOffsetX, " +
"?CameraAtOffsetY, ?CameraAtOffsetZ, " + "?CameraAtOffsetY, ?CameraAtOffsetZ, " +
"?ForceMouselook, ?ScriptAccessPin, " + "?ForceMouselook, ?ScriptAccessPin, " +
"?AllowedDrop, ?DieAtEdge, ?SalePrice, " + "?AllowedDrop, ?DieAtEdge, ?SalePrice, " +
"?SaleType, ?ColorR, ?ColorG, " + "?SaleType, ?ColorR, ?ColorG, " +
"?ColorB, ?ColorA, ?ParticleSystem, " + "?ColorB, ?ColorA, ?ParticleSystem, " +
"?ClickAction, ?Material, ?CollisionSound, " + "?ClickAction, ?Material, ?CollisionSound, " +
"?CollisionSoundVolume, ?PassTouches, " + "?CollisionSoundVolume, ?PassTouches, " +
"?LinkNumber, ?MediaURL, ?KeyframeMotion, " + "?LinkNumber, ?MediaURL, ?KeyframeMotion, " +
"?PhysicsShapeType, ?Density, ?GravityModifier, " + "?PhysicsShapeType, ?Density, ?GravityModifier, " +
"?Friction, ?Restitution)"; "?Friction, ?Restitution)";
FillPrimCommand(cmd, prim, obj.UUID, regionUUID); FillPrimCommand(cmd, prim, obj.UUID, regionUUID);
ExecuteNonQuery(cmd); ExecuteNonQuery(cmd);
cmd.Parameters.Clear(); cmd.Parameters.Clear();
cmd.CommandText = "replace into primshapes (" + cmd.CommandText = "replace into primshapes (" +
"UUID, Shape, ScaleX, ScaleY, " + "UUID, Shape, ScaleX, ScaleY, " +
"ScaleZ, PCode, PathBegin, PathEnd, " + "ScaleZ, PCode, PathBegin, PathEnd, " +
"PathScaleX, PathScaleY, PathShearX, " + "PathScaleX, PathScaleY, PathShearX, " +
"PathShearY, PathSkew, PathCurve, " + "PathShearY, PathSkew, PathCurve, " +
"PathRadiusOffset, PathRevolutions, " + "PathRadiusOffset, PathRevolutions, " +
"PathTaperX, PathTaperY, PathTwist, " + "PathTaperX, PathTaperY, PathTwist, " +
"PathTwistBegin, ProfileBegin, ProfileEnd, " + "PathTwistBegin, ProfileBegin, ProfileEnd, " +
"ProfileCurve, ProfileHollow, Texture, " + "ProfileCurve, ProfileHollow, Texture, " +
"ExtraParams, State, Media) values (?UUID, " + "ExtraParams, State, Media) values (?UUID, " +
"?Shape, ?ScaleX, ?ScaleY, ?ScaleZ, " + "?Shape, ?ScaleX, ?ScaleY, ?ScaleZ, " +
"?PCode, ?PathBegin, ?PathEnd, " + "?PCode, ?PathBegin, ?PathEnd, " +
"?PathScaleX, ?PathScaleY, " + "?PathScaleX, ?PathScaleY, " +
"?PathShearX, ?PathShearY, " + "?PathShearX, ?PathShearY, " +
"?PathSkew, ?PathCurve, ?PathRadiusOffset, " + "?PathSkew, ?PathCurve, ?PathRadiusOffset, " +
"?PathRevolutions, ?PathTaperX, " + "?PathRevolutions, ?PathTaperX, " +
"?PathTaperY, ?PathTwist, " + "?PathTaperY, ?PathTwist, " +
"?PathTwistBegin, ?ProfileBegin, " + "?PathTwistBegin, ?ProfileBegin, " +
"?ProfileEnd, ?ProfileCurve, " + "?ProfileEnd, ?ProfileCurve, " +
"?ProfileHollow, ?Texture, ?ExtraParams, " + "?ProfileHollow, ?Texture, ?ExtraParams, " +
"?State, ?Media)"; "?State, ?Media)";
FillShapeCommand(cmd, prim); FillShapeCommand(cmd, prim);
ExecuteNonQuery(cmd); ExecuteNonQuery(cmd);
}
} }
cmd.Dispose();
} }
} }
} }
@ -1865,41 +1865,40 @@ namespace OpenSim.Data.MySQL
{ {
RemoveItems(primID); RemoveItems(primID);
if (items.Count == 0)
return;
using (MySqlConnection dbcon = new MySqlConnection(m_connectionString)) using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
{ {
dbcon.Open(); dbcon.Open();
MySqlCommand cmd = dbcon.CreateCommand(); using (MySqlCommand cmd = dbcon.CreateCommand())
if (items.Count == 0)
return;
cmd.CommandText = "insert into primitems (" +
"invType, assetType, name, " +
"description, creationDate, nextPermissions, " +
"currentPermissions, basePermissions, " +
"everyonePermissions, groupPermissions, " +
"flags, itemID, primID, assetID, " +
"parentFolderID, creatorID, ownerID, " +
"groupID, lastOwnerID) values (?invType, " +
"?assetType, ?name, ?description, " +
"?creationDate, ?nextPermissions, " +
"?currentPermissions, ?basePermissions, " +
"?everyonePermissions, ?groupPermissions, " +
"?flags, ?itemID, ?primID, ?assetID, " +
"?parentFolderID, ?creatorID, ?ownerID, " +
"?groupID, ?lastOwnerID)";
foreach (TaskInventoryItem item in items)
{ {
cmd.Parameters.Clear(); cmd.CommandText = "insert into primitems (" +
"invType, assetType, name, " +
FillItemCommand(cmd, item); "description, creationDate, nextPermissions, " +
"currentPermissions, basePermissions, " +
ExecuteNonQuery(cmd); "everyonePermissions, groupPermissions, " +
"flags, itemID, primID, assetID, " +
"parentFolderID, creatorID, ownerID, " +
"groupID, lastOwnerID) values (?invType, " +
"?assetType, ?name, ?description, " +
"?creationDate, ?nextPermissions, " +
"?currentPermissions, ?basePermissions, " +
"?everyonePermissions, ?groupPermissions, " +
"?flags, ?itemID, ?primID, ?assetID, " +
"?parentFolderID, ?creatorID, ?ownerID, " +
"?groupID, ?lastOwnerID)";
foreach (TaskInventoryItem item in items)
{
cmd.Parameters.Clear();
FillItemCommand(cmd, item);
ExecuteNonQuery(cmd);
}
} }
cmd.Dispose();
} }
} }
} }

View File

@ -66,38 +66,40 @@ namespace OpenSim.Data.MySQL
if (words.Length > 2) if (words.Length > 2)
return new UserAccountData[0]; return new UserAccountData[0];
MySqlCommand cmd = new MySqlCommand(); using (MySqlCommand cmd = new MySqlCommand())
if (words.Length == 1)
{ {
cmd.CommandText = String.Format("select * from {0} where (ScopeID=?ScopeID or ScopeID='00000000-0000-0000-0000-000000000000') and (FirstName like ?search or LastName like ?search) and active=1", m_Realm); if (words.Length == 1)
cmd.Parameters.AddWithValue("?search", words[0] + "%"); {
cmd.Parameters.AddWithValue("?ScopeID", scopeID.ToString()); cmd.CommandText = String.Format("select * from {0} where (ScopeID=?ScopeID or ScopeID='00000000-0000-0000-0000-000000000000') and (FirstName like ?search or LastName like ?search) and active=1", m_Realm);
} cmd.Parameters.AddWithValue("?search", words[0] + "%");
else cmd.Parameters.AddWithValue("?ScopeID", scopeID.ToString());
{ }
cmd.CommandText = String.Format("select * from {0} where (ScopeID=?ScopeID or ScopeID='00000000-0000-0000-0000-000000000000') and (FirstName like ?searchFirst and LastName like ?searchLast) and active=1", m_Realm); else
cmd.Parameters.AddWithValue("?searchFirst", words[0] + "%"); {
cmd.Parameters.AddWithValue("?searchLast", words[1] + "%"); cmd.CommandText = String.Format("select * from {0} where (ScopeID=?ScopeID or ScopeID='00000000-0000-0000-0000-000000000000') and (FirstName like ?searchFirst and LastName like ?searchLast) and active=1", m_Realm);
cmd.Parameters.AddWithValue("?ScopeID", scopeID.ToString()); cmd.Parameters.AddWithValue("?searchFirst", words[0] + "%");
} cmd.Parameters.AddWithValue("?searchLast", words[1] + "%");
cmd.Parameters.AddWithValue("?ScopeID", scopeID.ToString());
}
return DoQuery(cmd); return DoQuery(cmd);
}
} }
public UserAccountData[] GetUsersWhere(UUID scopeID, string where) public UserAccountData[] GetUsersWhere(UUID scopeID, string where)
{ {
MySqlCommand cmd = new MySqlCommand(); using (MySqlCommand cmd = new MySqlCommand())
if (scopeID != UUID.Zero)
{ {
where = "(ScopeID=?ScopeID or ScopeID='00000000-0000-0000-0000-000000000000') and (" + where + ")"; if (scopeID != UUID.Zero)
cmd.Parameters.AddWithValue("?ScopeID", scopeID.ToString()); {
where = "(ScopeID=?ScopeID or ScopeID='00000000-0000-0000-0000-000000000000') and (" + where + ")";
cmd.Parameters.AddWithValue("?ScopeID", scopeID.ToString());
}
cmd.CommandText = String.Format("select * from {0} where " + where, m_Realm);
return DoQuery(cmd);
} }
cmd.CommandText = String.Format("select * from {0} where " + where, m_Realm);
return DoQuery(cmd);
} }
} }
} }

View File

@ -1456,6 +1456,7 @@ namespace OpenSim.Region.Framework.Scenes
PhysicsActor actor = PhysicsActor; PhysicsActor actor = PhysicsActor;
if (actor == null) if (actor == null)
{ {
SendControlsToScripts(flagsForScripts);
return; return;
} }
@ -1632,15 +1633,7 @@ namespace OpenSim.Region.Framework.Scenes
if (update_movementflag && ParentID == 0) if (update_movementflag && ParentID == 0)
Animator.UpdateMovementAnimations(); Animator.UpdateMovementAnimations();
lock (scriptedcontrols) SendControlsToScripts(flagsForScripts);
{
if (scriptedcontrols.Count > 0)
{
// Notify the scripts only after calling UpdateMovementAnimations(), so that if a script
// (e.g., a walking script) checks which animation is active it will be the correct animation.
SendControlToScripts(flagsForScripts);
}
}
} }
m_scene.EventManager.TriggerOnClientMovement(this); m_scene.EventManager.TriggerOnClientMovement(this);
@ -3830,77 +3823,92 @@ namespace OpenSim.Region.Framework.Scenes
} }
} }
internal void SendControlToScripts(uint flags) private void SendControlsToScripts(uint flags)
{ {
ScriptControlled allflags = ScriptControlled.CONTROL_ZERO; // Notify the scripts only after calling UpdateMovementAnimations(), so that if a script
// (e.g., a walking script) checks which animation is active it will be the correct animation.
if (MouseDown) lock (scriptedcontrols)
{ {
allflags = LastCommands & (ScriptControlled.CONTROL_ML_LBUTTON | ScriptControlled.CONTROL_LBUTTON); if (scriptedcontrols.Count <= 0)
if ((flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_LBUTTON_UP) != 0 || (flags & unchecked((uint)AgentManager.ControlFlags.AGENT_CONTROL_ML_LBUTTON_UP)) != 0) return;
ScriptControlled allflags = ScriptControlled.CONTROL_ZERO;
if (MouseDown)
{ {
allflags = ScriptControlled.CONTROL_ZERO; allflags = LastCommands & (ScriptControlled.CONTROL_ML_LBUTTON | ScriptControlled.CONTROL_LBUTTON);
if ((flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_LBUTTON_UP) != 0 || (flags & unchecked((uint)AgentManager.ControlFlags.AGENT_CONTROL_ML_LBUTTON_UP)) != 0)
{
allflags = ScriptControlled.CONTROL_ZERO;
MouseDown = true;
}
}
if ((flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_ML_LBUTTON_DOWN) != 0)
{
allflags |= ScriptControlled.CONTROL_ML_LBUTTON;
MouseDown = true; MouseDown = true;
} }
}
if ((flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_LBUTTON_DOWN) != 0)
{
allflags |= ScriptControlled.CONTROL_LBUTTON;
MouseDown = true;
}
// find all activated controls, whether the scripts are interested in them or not
if ((flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_AT_POS) != 0 || (flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_AT_POS) != 0)
{
allflags |= ScriptControlled.CONTROL_FWD;
}
if ((flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_AT_NEG) != 0 || (flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_AT_NEG) != 0)
{
allflags |= ScriptControlled.CONTROL_BACK;
}
if ((flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_UP_POS) != 0 || (flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_UP_POS) != 0)
{
allflags |= ScriptControlled.CONTROL_UP;
}
if ((flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_UP_NEG) != 0 || (flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_UP_NEG) != 0)
{
allflags |= ScriptControlled.CONTROL_DOWN;
}
if ((flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_ML_LBUTTON_DOWN) != 0) if ((flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_LEFT_POS) != 0 || (flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_LEFT_POS) != 0)
{ {
allflags |= ScriptControlled.CONTROL_ML_LBUTTON; allflags |= ScriptControlled.CONTROL_LEFT;
MouseDown = true; }
}
if ((flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_LBUTTON_DOWN) != 0) if ((flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_LEFT_NEG) != 0 || (flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_LEFT_NEG) != 0)
{ {
allflags |= ScriptControlled.CONTROL_LBUTTON; allflags |= ScriptControlled.CONTROL_RIGHT;
MouseDown = true; }
}
if ((flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_YAW_NEG) != 0)
{
allflags |= ScriptControlled.CONTROL_ROT_RIGHT;
}
if ((flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_YAW_POS) != 0)
{
allflags |= ScriptControlled.CONTROL_ROT_LEFT;
}
// find all activated controls, whether the scripts are interested in them or not // optimization; we have to check per script, but if nothing is pressed and nothing changed, we can skip that
if ((flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_AT_POS) != 0 || (flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_AT_POS) != 0) if (allflags != ScriptControlled.CONTROL_ZERO || allflags != LastCommands)
{
allflags |= ScriptControlled.CONTROL_FWD;
}
if ((flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_AT_NEG) != 0 || (flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_AT_NEG) != 0)
{
allflags |= ScriptControlled.CONTROL_BACK;
}
if ((flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_UP_POS) != 0 || (flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_UP_POS) != 0)
{
allflags |= ScriptControlled.CONTROL_UP;
}
if ((flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_UP_NEG) != 0 || (flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_UP_NEG) != 0)
{
allflags |= ScriptControlled.CONTROL_DOWN;
}
if ((flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_LEFT_POS) != 0 || (flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_LEFT_POS) != 0)
{
allflags |= ScriptControlled.CONTROL_LEFT;
}
if ((flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_LEFT_NEG) != 0 || (flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_NUDGE_LEFT_NEG) != 0)
{
allflags |= ScriptControlled.CONTROL_RIGHT;
}
if ((flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_YAW_NEG) != 0)
{
allflags |= ScriptControlled.CONTROL_ROT_RIGHT;
}
if ((flags & (uint)AgentManager.ControlFlags.AGENT_CONTROL_YAW_POS) != 0)
{
allflags |= ScriptControlled.CONTROL_ROT_LEFT;
}
// optimization; we have to check per script, but if nothing is pressed and nothing changed, we can skip that
if (allflags != ScriptControlled.CONTROL_ZERO || allflags != LastCommands)
{
lock (scriptedcontrols)
{ {
foreach (KeyValuePair<UUID, ScriptControllers> kvp in scriptedcontrols) foreach (KeyValuePair<UUID, ScriptControllers> kvp in scriptedcontrols)
{ {
UUID scriptUUID = kvp.Key; UUID scriptUUID = kvp.Key;
ScriptControllers scriptControlData = kvp.Value; ScriptControllers scriptControlData = kvp.Value;
ScriptControlled localHeld = allflags & scriptControlData.eventControls; // the flags interesting for us ScriptControlled localHeld = allflags & scriptControlData.eventControls; // the flags interesting for us
ScriptControlled localLast = LastCommands & scriptControlData.eventControls; // the activated controls in the last cycle ScriptControlled localLast = LastCommands & scriptControlData.eventControls; // the activated controls in the last cycle
ScriptControlled localChange = localHeld ^ localLast; // the changed bits ScriptControlled localChange = localHeld ^ localLast; // the changed bits
if (localHeld != ScriptControlled.CONTROL_ZERO || localChange != ScriptControlled.CONTROL_ZERO) if (localHeld != ScriptControlled.CONTROL_ZERO || localChange != ScriptControlled.CONTROL_ZERO)
{ {
// only send if still pressed or just changed // only send if still pressed or just changed
@ -3908,9 +3916,9 @@ namespace OpenSim.Region.Framework.Scenes
} }
} }
} }
LastCommands = allflags;
} }
LastCommands = allflags;
} }
internal static AgentManager.ControlFlags RemoveIgnoredControls(AgentManager.ControlFlags flags, ScriptControlled ignored) internal static AgentManager.ControlFlags RemoveIgnoredControls(AgentManager.ControlFlags flags, ScriptControlled ignored)

View File

@ -27,6 +27,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO;
using System.Text; using System.Text;
using NUnit.Framework; using NUnit.Framework;
using OpenMetaverse; using OpenMetaverse;
@ -68,11 +69,8 @@ namespace OpenSim.Region.Framework.Scenes.Tests
Vector3 position = new Vector3(200,200,21); Vector3 position = new Vector3(200,200,21);
foreach (Border b in testborders) foreach (Border b in testborders)
{
Assert.That(!b.TestCross(position)); Assert.That(!b.TestCross(position));
}
position = new Vector3(200,280,21); position = new Vector3(200,280,21);
Assert.That(NorthBorder.TestCross(position)); Assert.That(NorthBorder.TestCross(position));

View File

@ -26,7 +26,9 @@
*/ */
using System; using System;
using System.IO;
using System.Reflection; using System.Reflection;
using System.Text;
using NUnit.Framework; using NUnit.Framework;
using OpenMetaverse; using OpenMetaverse;
using OpenSim.Framework; using OpenSim.Framework;
@ -44,6 +46,8 @@ namespace OpenSim.Region.Framework.Scenes.Tests
public void TestDuplicateObject() public void TestDuplicateObject()
{ {
TestHelpers.InMethod(); TestHelpers.InMethod();
// TestHelpers.EnableLogging();
Scene scene = new SceneHelpers().SetupScene(); Scene scene = new SceneHelpers().SetupScene();
UUID ownerId = new UUID("00000000-0000-0000-0000-000000000010"); UUID ownerId = new UUID("00000000-0000-0000-0000-000000000010");
@ -82,6 +86,8 @@ namespace OpenSim.Region.Framework.Scenes.Tests
Assert.That(dupePart1.PhysActor, Is.Not.Null); Assert.That(dupePart1.PhysActor, Is.Not.Null);
Assert.That(dupePart2.PhysActor, Is.Not.Null); Assert.That(dupePart2.PhysActor, Is.Not.Null);
*/ */
// TestHelpers.DisableLogging();
} }
} }
} }

View File

@ -38,7 +38,8 @@ using OpenSim.Region.Framework.Interfaces;
using OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation; using OpenSim.Region.CoreModules.ServiceConnectorsOut.Simulation;
using OpenSim.Tests.Common; using OpenSim.Tests.Common;
using OpenSim.Tests.Common.Mock; using OpenSim.Tests.Common.Mock;
using System.Threading; using System.IO;
using System.Text;
namespace OpenSim.Region.Framework.Scenes.Tests namespace OpenSim.Region.Framework.Scenes.Tests
{ {

View File

@ -1922,6 +1922,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
rgb.y = texcolor.G; rgb.y = texcolor.G;
rgb.z = texcolor.B; rgb.z = texcolor.B;
return rgb; return rgb;
} }
else else
{ {
@ -3492,6 +3493,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
return m_host.UUID.ToString(); return m_host.UUID.ToString();
} }
public LSL_Key llGenerateKey()
{
m_host.AddScriptLPS(1);
return UUID.Random().ToString();
}
public void llSetBuoyancy(double buoyancy) public void llSetBuoyancy(double buoyancy)
{ {
m_host.AddScriptLPS(1); m_host.AddScriptLPS(1);

View File

@ -105,6 +105,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
LSL_Integer llFloor(double f); LSL_Integer llFloor(double f);
void llForceMouselook(int mouselook); void llForceMouselook(int mouselook);
LSL_Float llFrand(double mag); LSL_Float llFrand(double mag);
LSL_Key llGenerateKey();
LSL_Vector llGetAccel(); LSL_Vector llGetAccel();
LSL_Integer llGetAgentInfo(string id); LSL_Integer llGetAgentInfo(string id);
LSL_String llGetAgentLanguage(string id); LSL_String llGetAgentLanguage(string id);

View File

@ -376,6 +376,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
return m_LSL_Functions.llFrand(mag); return m_LSL_Functions.llFrand(mag);
} }
public LSL_Key llGenerateKey()
{
return m_LSL_Functions.llGenerateKey();
}
public LSL_Vector llGetAccel() public LSL_Vector llGetAccel()
{ {
return m_LSL_Functions.llGetAccel(); return m_LSL_Functions.llGetAccel();

View File

@ -27,6 +27,8 @@
using System; using System;
using System.Diagnostics; using System.Diagnostics;
using System.IO;
using System.Text;
using NUnit.Framework; using NUnit.Framework;
using OpenMetaverse; using OpenMetaverse;
@ -34,6 +36,37 @@ namespace OpenSim.Tests.Common
{ {
public class TestHelpers public class TestHelpers
{ {
private static Stream EnableLoggingConfigStream
= new MemoryStream(
Encoding.UTF8.GetBytes(
@"<log4net>
<!-- A1 is set to be a ConsoleAppender -->
<appender name=""A1"" type=""log4net.Appender.ConsoleAppender"">
<!-- A1 uses PatternLayout -->
<layout type=""log4net.Layout.PatternLayout"">
<!-- Print the date in ISO 8601 format -->
<conversionPattern value=""%date [%thread] %-5level %logger %ndc - %message%newline"" />
</layout>
</appender>
<!-- Set root logger level to DEBUG and its only appender to A1 -->
<root>
<level value=""DEBUG"" />
<appender-ref ref=""A1"" />
</root>
</log4net>"));
private static Stream DisableLoggingConfigStream
= new MemoryStream(
Encoding.UTF8.GetBytes(
// "<?xml version=\"1.0\" encoding=\"utf-8\" ?><configuration><log4net><root><level value=\"OFF\"/><appender-ref ref=\"A1\"/></root></log4net></configuration>")));
//"<?xml version=\"1.0\" encoding=\"utf-8\" ?><configuration><log4net><root><level value=\"OFF\"/></root></log4net></configuration>")));
//"<configuration><log4net><root><level value=\"OFF\"/></root></log4net></configuration>")));
//"<configuration><log4net><root></root></log4net></configuration>")));
//"<configuration><log4net><root/></log4net></configuration>")));
"<log4net><root/></log4net>"));
public static bool AssertThisDelegateCausesArgumentException(TestDelegate d) public static bool AssertThisDelegateCausesArgumentException(TestDelegate d)
{ {
try try
@ -58,6 +91,19 @@ namespace OpenSim.Tests.Common
Console.WriteLine("===> In Test Method : {0} <===", stackTrace.GetFrame(1).GetMethod().Name); Console.WriteLine("===> In Test Method : {0} <===", stackTrace.GetFrame(1).GetMethod().Name);
} }
public static void EnableLogging()
{
log4net.Config.XmlConfigurator.Configure(EnableLoggingConfigStream);
}
/// <summary>
/// Disable logging whilst running the tests.
/// </summary>
public static void DisableLogging()
{
log4net.Config.XmlConfigurator.Configure(DisableLoggingConfigStream);
}
/// <summary> /// <summary>
/// Parse tail section into full UUID. /// Parse tail section into full UUID.
/// </summary> /// </summary>

View File

@ -1,33 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
</configSections>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="nunit.framework" publicKeyToken="96d09a1eb7f44a77" culture="Neutral" />
<bindingRedirect oldVersion="2.0.6.0" newVersion="2.4.6.0" />
<bindingRedirect oldVersion="2.1.4.0" newVersion="2.4.6.0" />
<bindingRedirect oldVersion="2.2.8.0" newVersion="2.4.6.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<log4net>
<!-- A1 is set to be a ConsoleAppender -->
<appender name="A1" type="log4net.Appender.ConsoleAppender">
<!-- A1 uses PatternLayout -->
<layout type="log4net.Layout.PatternLayout">
<!-- Print the date in ISO 8601 format -->
<conversionPattern value="%date [%thread] %-5level %logger %ndc - %message%newline" />
</layout>
</appender>
<!-- Set root logger level to DEBUG and its only appender to A1 -->
<root>
<level value="DEBUG" />
<appender-ref ref="A1" />
</root>
</log4net>
</configuration>

View File

@ -1,33 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
</configSections>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="nunit.framework" publicKeyToken="96d09a1eb7f44a77" culture="Neutral" />
<bindingRedirect oldVersion="2.0.6.0" newVersion="2.4.6.0" />
<bindingRedirect oldVersion="2.1.4.0" newVersion="2.4.6.0" />
<bindingRedirect oldVersion="2.2.8.0" newVersion="2.4.6.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<log4net>
<!-- A1 is set to be a ConsoleAppender -->
<appender name="A1" type="log4net.Appender.ConsoleAppender">
<!-- A1 uses PatternLayout -->
<layout type="log4net.Layout.PatternLayout">
<!-- Print the date in ISO 8601 format -->
<conversionPattern value="%date [%thread] %-5level %logger %ndc - %message%newline" />
</layout>
</appender>
<!-- Set root logger level to DEBUG and its only appender to A1 -->
<root>
<level value="DEBUG" />
<appender-ref ref="A1" />
</root>
</log4net>
</configuration>

View File

@ -1,33 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
</configSections>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="nunit.framework" publicKeyToken="96d09a1eb7f44a77" culture="Neutral" />
<bindingRedirect oldVersion="2.0.6.0" newVersion="2.4.6.0" />
<bindingRedirect oldVersion="2.1.4.0" newVersion="2.4.6.0" />
<bindingRedirect oldVersion="2.2.8.0" newVersion="2.4.6.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<log4net>
<!-- A1 is set to be a ConsoleAppender -->
<appender name="A1" type="log4net.Appender.ConsoleAppender">
<!-- A1 uses PatternLayout -->
<layout type="log4net.Layout.PatternLayout">
<!-- Print the date in ISO 8601 format -->
<conversionPattern value="%date [%thread] %-5level %logger %ndc - %message%newline" />
</layout>
</appender>
<!-- Set root logger level to DEBUG and its only appender to A1 -->
<root>
<level value="DEBUG" />
<appender-ref ref="A1" />
</root>
</log4net>
</configuration>

View File

@ -1,33 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
</configSections>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="nunit.framework" publicKeyToken="96d09a1eb7f44a77" culture="Neutral" />
<bindingRedirect oldVersion="2.0.6.0" newVersion="2.4.6.0" />
<bindingRedirect oldVersion="2.1.4.0" newVersion="2.4.6.0" />
<bindingRedirect oldVersion="2.2.8.0" newVersion="2.4.6.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<log4net>
<!-- A1 is set to be a ConsoleAppender -->
<appender name="A1" type="log4net.Appender.ConsoleAppender">
<!-- A1 uses PatternLayout -->
<layout type="log4net.Layout.PatternLayout">
<!-- Print the date in ISO 8601 format -->
<conversionPattern value="%date [%thread] %-5level %logger %ndc - %message%newline" />
</layout>
</appender>
<!-- Set root logger level to DEBUG and its only appender to A1 -->
<root>
<level value="DEBUG" />
<appender-ref ref="A1" />
</root>
</log4net>
</configuration>

View File

@ -1,33 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
</configSections>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="nunit.framework" publicKeyToken="96d09a1eb7f44a77" culture="Neutral" />
<bindingRedirect oldVersion="2.0.6.0" newVersion="2.4.6.0" />
<bindingRedirect oldVersion="2.1.4.0" newVersion="2.4.6.0" />
<bindingRedirect oldVersion="2.2.8.0" newVersion="2.4.6.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<log4net>
<!-- A1 is set to be a ConsoleAppender -->
<appender name="A1" type="log4net.Appender.ConsoleAppender">
<!-- A1 uses PatternLayout -->
<layout type="log4net.Layout.PatternLayout">
<!-- Print the date in ISO 8601 format -->
<conversionPattern value="%date [%thread] %-5level %logger %ndc - %message%newline" />
</layout>
</appender>
<!-- Set root logger level to DEBUG and its only appender to A1 -->
<root>
<level value="DEBUG" />
<appender-ref ref="A1" />
</root>
</log4net>
</configuration>