Merge branch 'master' of ssh://diva@opensimulator.org/var/git/opensim
commit
21c5377af9
|
@ -677,7 +677,8 @@ namespace OpenSim.Data.MySQL
|
||||||
"MusicURL, PassHours, PassPrice, SnapshotUUID, " +
|
"MusicURL, PassHours, PassPrice, SnapshotUUID, " +
|
||||||
"UserLocationX, UserLocationY, UserLocationZ, " +
|
"UserLocationX, UserLocationY, UserLocationZ, " +
|
||||||
"UserLookAtX, UserLookAtY, UserLookAtZ, " +
|
"UserLookAtX, UserLookAtY, UserLookAtZ, " +
|
||||||
"AuthbuyerID, OtherCleanTime, Dwell) values (" +
|
"AuthbuyerID, OtherCleanTime, Dwell, MediaType, MediaDescription, " +
|
||||||
|
"MediaSize, MediaLoop, ObscureMusic, ObscureMedia) values (" +
|
||||||
"?UUID, ?RegionUUID, " +
|
"?UUID, ?RegionUUID, " +
|
||||||
"?LocalLandID, ?Bitmap, ?Name, ?Description, " +
|
"?LocalLandID, ?Bitmap, ?Name, ?Description, " +
|
||||||
"?OwnerUUID, ?IsGroupOwned, ?Area, ?AuctionID, " +
|
"?OwnerUUID, ?IsGroupOwned, ?Area, ?AuctionID, " +
|
||||||
|
@ -687,7 +688,8 @@ namespace OpenSim.Data.MySQL
|
||||||
"?MusicURL, ?PassHours, ?PassPrice, ?SnapshotUUID, " +
|
"?MusicURL, ?PassHours, ?PassPrice, ?SnapshotUUID, " +
|
||||||
"?UserLocationX, ?UserLocationY, ?UserLocationZ, " +
|
"?UserLocationX, ?UserLocationY, ?UserLocationZ, " +
|
||||||
"?UserLookAtX, ?UserLookAtY, ?UserLookAtZ, " +
|
"?UserLookAtX, ?UserLookAtY, ?UserLookAtZ, " +
|
||||||
"?AuthbuyerID, ?OtherCleanTime, ?Dwell)";
|
"?AuthbuyerID, ?OtherCleanTime, ?Dwell, ?MediaType, ?MediaDescription, "+
|
||||||
|
"CONCAT(?MediaWidth, ',', ?MediaHeight), ?MediaLoop, ?ObscureMusic, ?ObscureMedia)";
|
||||||
|
|
||||||
FillLandCommand(cmd, parcel.LandData, parcel.RegionUUID);
|
FillLandCommand(cmd, parcel.LandData, parcel.RegionUUID);
|
||||||
|
|
||||||
|
@ -1347,6 +1349,14 @@ namespace OpenSim.Data.MySQL
|
||||||
m_log.ErrorFormat("[PARCEL]: unable to get parcel telehub settings for {1}", newData.Name);
|
m_log.ErrorFormat("[PARCEL]: unable to get parcel telehub settings for {1}", newData.Name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
newData.MediaDescription = (string) row["MediaDescription"];
|
||||||
|
newData.MediaType = (string) row["MediaType"];
|
||||||
|
newData.MediaWidth = Convert.ToInt32((((string) row["MediaSize"]).Split(','))[0]);
|
||||||
|
newData.MediaHeight = Convert.ToInt32((((string) row["MediaSize"]).Split(','))[1]);
|
||||||
|
newData.MediaLoop = Convert.ToBoolean(row["MediaLoop"]);
|
||||||
|
newData.ObscureMusic = Convert.ToBoolean(row["ObscureMusic"]);
|
||||||
|
newData.ObscureMedia = Convert.ToBoolean(row["ObscureMedia"]);
|
||||||
|
|
||||||
newData.ParcelAccessList = new List<ParcelManager.ParcelAccessEntry>();
|
newData.ParcelAccessList = new List<ParcelManager.ParcelAccessEntry>();
|
||||||
|
|
||||||
return newData;
|
return newData;
|
||||||
|
@ -1651,6 +1661,14 @@ namespace OpenSim.Data.MySQL
|
||||||
cmd.Parameters.AddWithValue("AuthBuyerID", land.AuthBuyerID);
|
cmd.Parameters.AddWithValue("AuthBuyerID", land.AuthBuyerID);
|
||||||
cmd.Parameters.AddWithValue("OtherCleanTime", land.OtherCleanTime);
|
cmd.Parameters.AddWithValue("OtherCleanTime", land.OtherCleanTime);
|
||||||
cmd.Parameters.AddWithValue("Dwell", land.Dwell);
|
cmd.Parameters.AddWithValue("Dwell", land.Dwell);
|
||||||
|
cmd.Parameters.AddWithValue("MediaDescription", land.MediaDescription);
|
||||||
|
cmd.Parameters.AddWithValue("MediaType", land.MediaType);
|
||||||
|
cmd.Parameters.AddWithValue("MediaWidth", land.MediaWidth);
|
||||||
|
cmd.Parameters.AddWithValue("MediaHeight", land.MediaHeight);
|
||||||
|
cmd.Parameters.AddWithValue("MediaLoop", land.MediaLoop);
|
||||||
|
cmd.Parameters.AddWithValue("ObscureMusic", land.ObscureMusic);
|
||||||
|
cmd.Parameters.AddWithValue("ObscureMedia", land.ObscureMedia);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -801,9 +801,19 @@ ALTER TABLE `regionwindlight` CHANGE COLUMN `cloud_scroll_x` `cloud_scroll_x` F
|
||||||
COMMIT;
|
COMMIT;
|
||||||
|
|
||||||
:VERSION 35 #---------------------
|
:VERSION 35 #---------------------
|
||||||
-- Added post 0.7
|
|
||||||
|
|
||||||
BEGIN;
|
BEGIN;
|
||||||
ALTER TABLE prims ADD COLUMN MediaURL varchar(255);
|
ALTER TABLE prims ADD COLUMN MediaURL varchar(255);
|
||||||
ALTER TABLE primshapes ADD COLUMN Media TEXT;
|
ALTER TABLE primshapes ADD COLUMN Media TEXT;
|
||||||
COMMIT;
|
COMMIT;
|
||||||
|
|
||||||
|
:VERSION 36 #---------------------
|
||||||
|
|
||||||
|
BEGIN;
|
||||||
|
ALTER TABLE `land` ADD COLUMN `MediaType` VARCHAR(32) NOT NULL DEFAULT 'none/none' ;
|
||||||
|
ALTER TABLE `land` ADD COLUMN `MediaDescription` VARCHAR(255) NOT NULL DEFAULT '';
|
||||||
|
ALTER TABLE `land` ADD COLUMN `MediaSize` VARCHAR(16) NOT NULL DEFAULT '0,0';
|
||||||
|
ALTER TABLE `land` ADD COLUMN `MediaLoop` BOOLEAN NOT NULL DEFAULT FALSE;
|
||||||
|
ALTER TABLE `land` ADD COLUMN `ObscureMusic` BOOLEAN NOT NULL DEFAULT FALSE;
|
||||||
|
ALTER TABLE `land` ADD COLUMN `ObscureMedia` BOOLEAN NOT NULL DEFAULT FALSE;
|
||||||
|
COMMIT;
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
BEGIN;
|
|
||||||
|
|
||||||
ALTER TABLE regionsettings ADD COLUMN map_tile_ID varchar(36) NOT NULL default '00000000-0000-0000-0000-000000000000';
|
|
||||||
|
|
||||||
COMMIT;
|
|
|
@ -1,6 +0,0 @@
|
||||||
BEGIN;
|
|
||||||
|
|
||||||
ALTER TABLE prims ADD COLUMN MediaURL varchar(255);
|
|
||||||
ALTER TABLE primshapes ADD COLUMN Media TEXT;
|
|
||||||
|
|
||||||
COMMIT;
|
|
|
@ -446,3 +446,24 @@ update land
|
||||||
where AuthbuyerID not like '%-%';
|
where AuthbuyerID not like '%-%';
|
||||||
|
|
||||||
COMMIT;
|
COMMIT;
|
||||||
|
|
||||||
|
:VERSION 19
|
||||||
|
BEGIN;
|
||||||
|
ALTER TABLE regionsettings ADD COLUMN map_tile_ID varchar(36) NOT NULL default '00000000-0000-0000-0000-000000000000';
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
:VERSION 20
|
||||||
|
BEGIN;
|
||||||
|
ALTER TABLE prims ADD COLUMN MediaURL varchar(255);
|
||||||
|
ALTER TABLE primshapes ADD COLUMN Media TEXT;
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
:VERSION 21
|
||||||
|
BEGIN;
|
||||||
|
ALTER TABLE `land` ADD COLUMN `MediaType` VARCHAR(32) NOT NULL DEFAULT 'none/none';
|
||||||
|
ALTER TABLE `land` ADD COLUMN `MediaDescription` VARCHAR(255) NOT NULL DEFAULT '';
|
||||||
|
ALTER TABLE `land` ADD COLUMN `MediaSize` VARCHAR(16) NOT NULL DEFAULT '0,0';
|
||||||
|
ALTER TABLE `land` ADD COLUMN `MediaLoop` BOOLEAN NOT NULL DEFAULT FALSE;
|
||||||
|
ALTER TABLE `land` ADD COLUMN `ObscureMusic` BOOLEAN NOT NULL DEFAULT FALSE;
|
||||||
|
ALTER TABLE `land` ADD COLUMN `ObscureMedia` BOOLEAN NOT NULL DEFAULT FALSE;
|
||||||
|
COMMIT;
|
|
@ -1762,6 +1762,12 @@ namespace OpenSim.Data.SQLite
|
||||||
row["AuthbuyerID"] = land.AuthBuyerID.ToString();
|
row["AuthbuyerID"] = land.AuthBuyerID.ToString();
|
||||||
row["OtherCleanTime"] = land.OtherCleanTime;
|
row["OtherCleanTime"] = land.OtherCleanTime;
|
||||||
row["Dwell"] = land.Dwell;
|
row["Dwell"] = land.Dwell;
|
||||||
|
row["MediaType"] = land.MediaType;
|
||||||
|
row["MediaDescription"] = land.MediaDescription;
|
||||||
|
row["MediaSize"] = land.MediaWidth.ToString() + "," + land.MediaHeight.ToString();
|
||||||
|
row["MediaLoop"] = land.MediaLoop.ToString();
|
||||||
|
row["ObscureMusic"] = land.ObscureMusic.ToString();
|
||||||
|
row["ObscureMedia"] = land.ObscureMedia.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -44,6 +44,8 @@ namespace OpenSim.Framework.Capabilities
|
||||||
string assetName, string description, UUID assetID, UUID inventoryItem, UUID parentFolder,
|
string assetName, string description, UUID assetID, UUID inventoryItem, UUID parentFolder,
|
||||||
byte[] data, string inventoryType, string assetType);
|
byte[] data, string inventoryType, string assetType);
|
||||||
|
|
||||||
|
public delegate void UploadedBakedTexture(UUID assetID, byte[] data);
|
||||||
|
|
||||||
public delegate UUID UpdateItem(UUID itemID, byte[] data);
|
public delegate UUID UpdateItem(UUID itemID, byte[] data);
|
||||||
|
|
||||||
public delegate void UpdateTaskScript(UUID itemID, UUID primID, bool isScriptRunning, byte[] data, ref ArrayList errors);
|
public delegate void UpdateTaskScript(UUID itemID, UUID primID, bool isScriptRunning, byte[] data, ref ArrayList errors);
|
||||||
|
@ -97,6 +99,7 @@ namespace OpenSim.Framework.Capabilities
|
||||||
// private static readonly string m_provisionVoiceAccountRequestPath = "0008/";// This is in a module.
|
// private static readonly string m_provisionVoiceAccountRequestPath = "0008/";// This is in a module.
|
||||||
|
|
||||||
// private static readonly string m_remoteParcelRequestPath = "0009/";// This is in the LandManagementModule.
|
// private static readonly string m_remoteParcelRequestPath = "0009/";// This is in the LandManagementModule.
|
||||||
|
private static readonly string m_uploadBakedTexturePath = "0010/";// This is in the LandManagementModule.
|
||||||
|
|
||||||
//private string eventQueue = "0100/";
|
//private string eventQueue = "0100/";
|
||||||
private IScene m_Scene;
|
private IScene m_Scene;
|
||||||
|
@ -185,6 +188,8 @@ namespace OpenSim.Framework.Capabilities
|
||||||
m_capsHandlers["UpdateScriptTaskInventory"] =
|
m_capsHandlers["UpdateScriptTaskInventory"] =
|
||||||
new RestStreamHandler("POST", capsBase + m_notecardTaskUpdatePath, ScriptTaskInventory);
|
new RestStreamHandler("POST", capsBase + m_notecardTaskUpdatePath, ScriptTaskInventory);
|
||||||
m_capsHandlers["UpdateScriptTask"] = m_capsHandlers["UpdateScriptTaskInventory"];
|
m_capsHandlers["UpdateScriptTask"] = m_capsHandlers["UpdateScriptTaskInventory"];
|
||||||
|
m_capsHandlers["UploadBakedTexture"] =
|
||||||
|
new RestStreamHandler("POST", capsBase + m_uploadBakedTexturePath, UploadBakedTexture);
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
|
@ -742,6 +747,50 @@ namespace OpenSim.Framework.Capabilities
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public string UploadBakedTexture(string request, string path,
|
||||||
|
string param, OSHttpRequest httpRequest,
|
||||||
|
OSHttpResponse httpResponse)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
m_log.Debug("[CAPS]: UploadBakedTexture Request in region: " +
|
||||||
|
m_regionName);
|
||||||
|
|
||||||
|
string capsBase = "/CAPS/" + m_capsObjectPath;
|
||||||
|
string uploaderPath = Util.RandomClass.Next(5000, 8000).ToString("0000");
|
||||||
|
|
||||||
|
BakedTextureUploader uploader =
|
||||||
|
new BakedTextureUploader( capsBase + uploaderPath,
|
||||||
|
m_httpListener);
|
||||||
|
uploader.OnUpLoad += BakedTextureUploaded;
|
||||||
|
|
||||||
|
m_httpListener.AddStreamHandler(
|
||||||
|
new BinaryStreamHandler("POST", capsBase + uploaderPath,
|
||||||
|
uploader.uploaderCaps));
|
||||||
|
|
||||||
|
string protocol = "http://";
|
||||||
|
|
||||||
|
if (m_httpListener.UseSSL)
|
||||||
|
protocol = "https://";
|
||||||
|
|
||||||
|
string uploaderURL = protocol + m_httpListenerHostName + ":" +
|
||||||
|
m_httpListenPort.ToString() + capsBase + uploaderPath;
|
||||||
|
|
||||||
|
LLSDAssetUploadResponse uploadResponse =
|
||||||
|
new LLSDAssetUploadResponse();
|
||||||
|
uploadResponse.uploader = uploaderURL;
|
||||||
|
uploadResponse.state = "upload";
|
||||||
|
|
||||||
|
return LLSDHelpers.SerialiseLLSDReply(uploadResponse);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
m_log.Error("[CAPS]: " + e.ToString());
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Called by the notecard update handler. Provides a URL to which the client can upload a new asset.
|
/// Called by the notecard update handler. Provides a URL to which the client can upload a new asset.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -925,6 +974,17 @@ namespace OpenSim.Framework.Capabilities
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void BakedTextureUploaded(UUID assetID, byte[] data)
|
||||||
|
{
|
||||||
|
m_log.DebugFormat("[CAPS]: Received baked texture {0}", assetID.ToString());
|
||||||
|
AssetBase asset;
|
||||||
|
asset = new AssetBase(assetID, "Baked Texture", (sbyte)AssetType.Texture, m_agentID.ToString());
|
||||||
|
asset.Data = data;
|
||||||
|
asset.Temporary = true;
|
||||||
|
asset.Local = true;
|
||||||
|
m_assetCache.Store(asset);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Called when new asset data for an agent inventory item update has been uploaded.
|
/// Called when new asset data for an agent inventory item update has been uploaded.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -1243,5 +1303,50 @@ namespace OpenSim.Framework.Capabilities
|
||||||
fs.Close();
|
fs.Close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class BakedTextureUploader
|
||||||
|
{
|
||||||
|
public event UploadedBakedTexture OnUpLoad;
|
||||||
|
private UploadedBakedTexture handlerUpLoad = null;
|
||||||
|
|
||||||
|
private string uploaderPath = String.Empty;
|
||||||
|
private UUID newAssetID;
|
||||||
|
private IHttpServer httpListener;
|
||||||
|
|
||||||
|
public BakedTextureUploader(string path, IHttpServer httpServer)
|
||||||
|
{
|
||||||
|
newAssetID = UUID.Random();
|
||||||
|
uploaderPath = path;
|
||||||
|
httpListener = httpServer;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="data"></param>
|
||||||
|
/// <param name="path"></param>
|
||||||
|
/// <param name="param"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public string uploaderCaps(byte[] data, string path, string param)
|
||||||
|
{
|
||||||
|
string res = String.Empty;
|
||||||
|
LLSDAssetUploadComplete uploadComplete = new LLSDAssetUploadComplete();
|
||||||
|
uploadComplete.new_asset = newAssetID.ToString();
|
||||||
|
uploadComplete.new_inventory_item = UUID.Zero;
|
||||||
|
uploadComplete.state = "complete";
|
||||||
|
|
||||||
|
res = LLSDHelpers.SerialiseLLSDReply(uploadComplete);
|
||||||
|
|
||||||
|
httpListener.RemoveStreamHandler("POST", uploaderPath);
|
||||||
|
|
||||||
|
handlerUpLoad = OnUpLoad;
|
||||||
|
if (handlerUpLoad != null)
|
||||||
|
{
|
||||||
|
handlerUpLoad(newAssetID, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -90,6 +90,78 @@ namespace OpenSim.Framework
|
||||||
private Vector3 _userLookAt = new Vector3();
|
private Vector3 _userLookAt = new Vector3();
|
||||||
private int _dwell = 0;
|
private int _dwell = 0;
|
||||||
private int _otherCleanTime = 0;
|
private int _otherCleanTime = 0;
|
||||||
|
private string _mediaType = "none/none";
|
||||||
|
private string _mediaDescription = "";
|
||||||
|
private int _mediaHeight = 0;
|
||||||
|
private int _mediaWidth = 0;
|
||||||
|
private bool _mediaLoop = false;
|
||||||
|
private bool _obscureMusic = false;
|
||||||
|
private bool _obscureMedia = false;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Whether to obscure parcel media URL
|
||||||
|
/// </summary>
|
||||||
|
[XmlIgnore]
|
||||||
|
public bool ObscureMedia {
|
||||||
|
get {
|
||||||
|
return _obscureMedia;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
_obscureMedia = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Whether to obscure parcel music URL
|
||||||
|
/// </summary>
|
||||||
|
[XmlIgnore]
|
||||||
|
public bool ObscureMusic {
|
||||||
|
get {
|
||||||
|
return _obscureMusic;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
_obscureMusic = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Whether to loop parcel media
|
||||||
|
/// </summary>
|
||||||
|
[XmlIgnore]
|
||||||
|
public bool MediaLoop {
|
||||||
|
get {
|
||||||
|
return _mediaLoop;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
_mediaLoop = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Height of parcel media render
|
||||||
|
/// </summary>
|
||||||
|
[XmlIgnore]
|
||||||
|
public int MediaHeight {
|
||||||
|
get {
|
||||||
|
return _mediaHeight;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
_mediaHeight = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Width of parcel media render
|
||||||
|
/// </summary>
|
||||||
|
[XmlIgnore]
|
||||||
|
public int MediaWidth {
|
||||||
|
get {
|
||||||
|
return _mediaWidth;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
_mediaWidth = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Upper corner of the AABB for the parcel
|
/// Upper corner of the AABB for the parcel
|
||||||
|
@ -358,20 +430,6 @@ namespace OpenSim.Framework
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private int[] _mediaSize = new int[2];
|
|
||||||
public int[] MediaSize
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _mediaSize;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
_mediaSize = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private string _mediaType = "";
|
|
||||||
public string MediaType
|
public string MediaType
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
|
@ -586,6 +644,17 @@ namespace OpenSim.Framework
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// parcel media description
|
||||||
|
/// </summary>
|
||||||
|
public string MediaDescription {
|
||||||
|
get {
|
||||||
|
return _mediaDescription;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
_mediaDescription = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public LandData()
|
public LandData()
|
||||||
{
|
{
|
||||||
|
@ -635,6 +704,13 @@ namespace OpenSim.Framework
|
||||||
landData._userLookAt = _userLookAt;
|
landData._userLookAt = _userLookAt;
|
||||||
landData._otherCleanTime = _otherCleanTime;
|
landData._otherCleanTime = _otherCleanTime;
|
||||||
landData._dwell = _dwell;
|
landData._dwell = _dwell;
|
||||||
|
landData._mediaType = _mediaType;
|
||||||
|
landData._mediaDescription = _mediaDescription;
|
||||||
|
landData._mediaWidth = _mediaWidth;
|
||||||
|
landData._mediaHeight = _mediaHeight;
|
||||||
|
landData._mediaLoop = _mediaLoop;
|
||||||
|
landData._obscureMusic = _obscureMusic;
|
||||||
|
landData._obscureMedia = _obscureMedia;
|
||||||
|
|
||||||
landData._parcelAccessList.Clear();
|
landData._parcelAccessList.Clear();
|
||||||
foreach (ParcelManager.ParcelAccessEntry entry in _parcelAccessList)
|
foreach (ParcelManager.ParcelAccessEntry entry in _parcelAccessList)
|
||||||
|
|
|
@ -49,5 +49,12 @@ namespace OpenSim.Framework
|
||||||
public UUID SnapshotID;
|
public UUID SnapshotID;
|
||||||
public Vector3 UserLocation;
|
public Vector3 UserLocation;
|
||||||
public Vector3 UserLookAt;
|
public Vector3 UserLookAt;
|
||||||
|
public string MediaType;
|
||||||
|
public string MediaDescription;
|
||||||
|
public int MediaHeight;
|
||||||
|
public int MediaWidth;
|
||||||
|
public bool MediaLoop;
|
||||||
|
public bool ObscureMusic;
|
||||||
|
public bool ObscureMedia;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -338,19 +338,25 @@ namespace OpenSim.Framework.Servers.HttpServer
|
||||||
// HandleRequest(request,resp);
|
// HandleRequest(request,resp);
|
||||||
// }
|
// }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// This methods is the start of incoming HTTP request handling.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="request"></param>
|
||||||
|
/// <param name="response"></param>
|
||||||
public virtual void HandleRequest(OSHttpRequest request, OSHttpResponse response)
|
public virtual void HandleRequest(OSHttpRequest request, OSHttpResponse response)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
// m_log.Debug("[BASE HTTP SERVER]: Handling request to " + request.RawUrl);
|
||||||
|
|
||||||
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US", true);
|
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US", true);
|
||||||
|
|
||||||
// This is the REST agent interface. We require an agent to properly identify
|
// This is the REST agent interface. We require an agent to properly identify
|
||||||
// itself. If the REST handler recognizes the prefix it will attempt to
|
// itself. If the REST handler recognizes the prefix it will attempt to
|
||||||
// satisfy the request. If it is not recognizable, and no damage has occurred
|
// satisfy the request. If it is not recognizable, and no damage has occurred
|
||||||
// the request can be passed through to the other handlers. This is a low
|
// the request can be passed through to the other handlers. This is a low
|
||||||
// probability event; if a request is matched it is normally expected to be
|
// probability event; if a request is matched it is normally expected to be
|
||||||
// handled
|
// handled
|
||||||
// m_log.Debug("[BASE HTTP SERVER]: Handling request to " + request.RawUrl);
|
|
||||||
|
|
||||||
IHttpAgentHandler agentHandler;
|
IHttpAgentHandler agentHandler;
|
||||||
|
|
||||||
if (TryGetAgentHandler(request, response, out agentHandler))
|
if (TryGetAgentHandler(request, response, out agentHandler))
|
||||||
|
|
|
@ -218,7 +218,13 @@ namespace OpenSim
|
||||||
|
|
||||||
m_console.Commands.AddCommand("region", false, "debug packet",
|
m_console.Commands.AddCommand("region", false, "debug packet",
|
||||||
"debug packet <level>",
|
"debug packet <level>",
|
||||||
"Turn on packet debugging", Debug);
|
"Turn on packet debugging",
|
||||||
|
"If level > 255 then all incoming and outgoing packets are logged.\n"
|
||||||
|
+ "If level <= 255 then incoming AgentUpdate and outgoing SimStats and SimulatorViewerTimeMessage packets are not logged.\n"
|
||||||
|
+ "If level <= 200 then incoming RequestImage and outgoing ImagePacket, ImageData, LayerData and CoarseLocationUpdate packets are not logged.\n"
|
||||||
|
+ "If level <= 100 then incoming ViewerEffect and AgentAnimation and outgoing ViewerEffect and AvatarAnimation packets are not logged.\n"
|
||||||
|
+ "If level <= 0 then no packets are logged.",
|
||||||
|
Debug);
|
||||||
|
|
||||||
m_console.Commands.AddCommand("region", false, "debug scene",
|
m_console.Commands.AddCommand("region", false, "debug scene",
|
||||||
"debug scene <cripting> <collisions> <physics>",
|
"debug scene <cripting> <collisions> <physics>",
|
||||||
|
|
|
@ -36,7 +36,6 @@ using Nini.Config;
|
||||||
using OpenMetaverse;
|
using OpenMetaverse;
|
||||||
using OpenSim.Framework;
|
using OpenSim.Framework;
|
||||||
using OpenSim.Framework.Communications;
|
using OpenSim.Framework.Communications;
|
||||||
|
|
||||||
using OpenSim.Framework.Console;
|
using OpenSim.Framework.Console;
|
||||||
using OpenSim.Framework.Servers;
|
using OpenSim.Framework.Servers;
|
||||||
using OpenSim.Framework.Servers.HttpServer;
|
using OpenSim.Framework.Servers.HttpServer;
|
||||||
|
@ -356,7 +355,9 @@ namespace OpenSim
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
m_log.ErrorFormat("[STARTUP]: Registration of region with grid failed, aborting startup - {0}", e.StackTrace);
|
m_log.ErrorFormat(
|
||||||
|
"[STARTUP]: Registration of region with grid failed, aborting startup due to {0} {1}",
|
||||||
|
e.Message, e.StackTrace);
|
||||||
|
|
||||||
// Carrying on now causes a lot of confusion down the
|
// Carrying on now causes a lot of confusion down the
|
||||||
// line - we need to get the user's attention
|
// line - we need to get the user's attention
|
||||||
|
|
|
@ -37,6 +37,7 @@ using System.Xml;
|
||||||
using log4net;
|
using log4net;
|
||||||
using OpenMetaverse;
|
using OpenMetaverse;
|
||||||
using OpenMetaverse.Packets;
|
using OpenMetaverse.Packets;
|
||||||
|
using OpenMetaverse.Messages.Linden;
|
||||||
using OpenMetaverse.StructuredData;
|
using OpenMetaverse.StructuredData;
|
||||||
using OpenSim.Framework;
|
using OpenSim.Framework;
|
||||||
using OpenSim.Framework.Client;
|
using OpenSim.Framework.Client;
|
||||||
|
@ -59,7 +60,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
public class LLClientView : IClientAPI, IClientCore, IClientIM, IClientChat, IClientIPEndpoint, IStatsCollector
|
public class LLClientView : IClientAPI, IClientCore, IClientIM, IClientChat, IClientIPEndpoint, IStatsCollector
|
||||||
{
|
{
|
||||||
/// <value>
|
/// <value>
|
||||||
/// Debug packet level. At the moment, only 255 does anything (prints out all in and out packets).
|
/// Debug packet level. See OpenSim.RegisterConsoleCommands() for more details.
|
||||||
/// </value>
|
/// </value>
|
||||||
protected int m_debugPacketLevel = 0;
|
protected int m_debugPacketLevel = 0;
|
||||||
|
|
||||||
|
@ -3407,6 +3408,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
|
|
||||||
avp.Sender.IsTrial = false;
|
avp.Sender.IsTrial = false;
|
||||||
avp.Sender.ID = agentID;
|
avp.Sender.ID = agentID;
|
||||||
|
m_log.DebugFormat("[CLIENT]: Sending appearance for {0} to {1}", agentID.ToString(), AgentId.ToString());
|
||||||
OutPacket(avp, ThrottleOutPacketType.Task);
|
OutPacket(avp, ThrottleOutPacketType.Task);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4199,94 +4201,101 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
|
|
||||||
public void SendLandProperties(int sequence_id, bool snap_selection, int request_result, LandData landData, float simObjectBonusFactor, int parcelObjectCapacity, int simObjectCapacity, uint regionFlags)
|
public void SendLandProperties(int sequence_id, bool snap_selection, int request_result, LandData landData, float simObjectBonusFactor, int parcelObjectCapacity, int simObjectCapacity, uint regionFlags)
|
||||||
{
|
{
|
||||||
ParcelPropertiesPacket updatePacket = (ParcelPropertiesPacket)PacketPool.Instance.GetPacket(PacketType.ParcelProperties);
|
ParcelPropertiesMessage updateMessage = new ParcelPropertiesMessage();
|
||||||
// TODO: don't create new blocks if recycling an old packet
|
|
||||||
|
|
||||||
updatePacket.ParcelData.AABBMax = landData.AABBMax;
|
updateMessage.AABBMax = landData.AABBMax;
|
||||||
updatePacket.ParcelData.AABBMin = landData.AABBMin;
|
updateMessage.AABBMin = landData.AABBMin;
|
||||||
updatePacket.ParcelData.Area = landData.Area;
|
updateMessage.Area = landData.Area;
|
||||||
updatePacket.ParcelData.AuctionID = landData.AuctionID;
|
updateMessage.AuctionID = landData.AuctionID;
|
||||||
updatePacket.ParcelData.AuthBuyerID = landData.AuthBuyerID;
|
updateMessage.AuthBuyerID = landData.AuthBuyerID;
|
||||||
|
|
||||||
updatePacket.ParcelData.Bitmap = landData.Bitmap;
|
updateMessage.Bitmap = landData.Bitmap;
|
||||||
|
|
||||||
updatePacket.ParcelData.Desc = Utils.StringToBytes(landData.Description);
|
updateMessage.Desc = landData.Description;
|
||||||
updatePacket.ParcelData.Category = (byte)landData.Category;
|
updateMessage.Category = landData.Category;
|
||||||
updatePacket.ParcelData.ClaimDate = landData.ClaimDate;
|
updateMessage.ClaimDate = Util.ToDateTime(landData.ClaimDate);
|
||||||
updatePacket.ParcelData.ClaimPrice = landData.ClaimPrice;
|
updateMessage.ClaimPrice = landData.ClaimPrice;
|
||||||
updatePacket.ParcelData.GroupID = landData.GroupID;
|
updateMessage.GroupID = landData.GroupID;
|
||||||
updatePacket.ParcelData.GroupPrims = landData.GroupPrims;
|
updateMessage.GroupPrims = landData.GroupPrims;
|
||||||
updatePacket.ParcelData.IsGroupOwned = landData.IsGroupOwned;
|
updateMessage.IsGroupOwned = landData.IsGroupOwned;
|
||||||
updatePacket.ParcelData.LandingType = landData.LandingType;
|
updateMessage.LandingType = (LandingType) landData.LandingType;
|
||||||
updatePacket.ParcelData.LocalID = landData.LocalID;
|
updateMessage.LocalID = landData.LocalID;
|
||||||
|
|
||||||
if (landData.Area > 0)
|
if (landData.Area > 0)
|
||||||
{
|
{
|
||||||
updatePacket.ParcelData.MaxPrims = parcelObjectCapacity;
|
updateMessage.MaxPrims = parcelObjectCapacity;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
updatePacket.ParcelData.MaxPrims = 0;
|
updateMessage.MaxPrims = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
updatePacket.ParcelData.MediaAutoScale = landData.MediaAutoScale;
|
updateMessage.MediaAutoScale = Convert.ToBoolean(landData.MediaAutoScale);
|
||||||
updatePacket.ParcelData.MediaID = landData.MediaID;
|
updateMessage.MediaID = landData.MediaID;
|
||||||
updatePacket.ParcelData.MediaURL = Util.StringToBytes256(landData.MediaURL);
|
updateMessage.MediaURL = landData.MediaURL;
|
||||||
updatePacket.ParcelData.MusicURL = Util.StringToBytes256(landData.MusicURL);
|
updateMessage.MusicURL = landData.MusicURL;
|
||||||
updatePacket.ParcelData.Name = Util.StringToBytes256(landData.Name);
|
updateMessage.Name = landData.Name;
|
||||||
updatePacket.ParcelData.OtherCleanTime = landData.OtherCleanTime;
|
updateMessage.OtherCleanTime = landData.OtherCleanTime;
|
||||||
updatePacket.ParcelData.OtherCount = 0; //TODO: Unimplemented
|
updateMessage.OtherCount = 0; //TODO: Unimplemented
|
||||||
updatePacket.ParcelData.OtherPrims = landData.OtherPrims;
|
updateMessage.OtherPrims = landData.OtherPrims;
|
||||||
updatePacket.ParcelData.OwnerID = landData.OwnerID;
|
updateMessage.OwnerID = landData.OwnerID;
|
||||||
updatePacket.ParcelData.OwnerPrims = landData.OwnerPrims;
|
updateMessage.OwnerPrims = landData.OwnerPrims;
|
||||||
updatePacket.ParcelData.ParcelFlags = landData.Flags;
|
updateMessage.ParcelFlags = (ParcelFlags) landData.Flags;
|
||||||
updatePacket.ParcelData.ParcelPrimBonus = simObjectBonusFactor;
|
updateMessage.ParcelPrimBonus = simObjectBonusFactor;
|
||||||
updatePacket.ParcelData.PassHours = landData.PassHours;
|
updateMessage.PassHours = landData.PassHours;
|
||||||
updatePacket.ParcelData.PassPrice = landData.PassPrice;
|
updateMessage.PassPrice = landData.PassPrice;
|
||||||
updatePacket.ParcelData.PublicCount = 0; //TODO: Unimplemented
|
updateMessage.PublicCount = 0; //TODO: Unimplemented
|
||||||
|
|
||||||
|
updateMessage.RegionPushOverride = (regionFlags & (uint)RegionFlags.RestrictPushObject) > 0;
|
||||||
|
updateMessage.RegionDenyAnonymous = (regionFlags & (uint)RegionFlags.DenyAnonymous) > 0;
|
||||||
|
|
||||||
updatePacket.ParcelData.RegionDenyAnonymous = (regionFlags & (uint)RegionFlags.DenyAnonymous) > 0;
|
//updateMessage.RegionDenyIdentified = (regionFlags & (uint)RegionFlags.DenyIdentified) > 0;
|
||||||
updatePacket.ParcelData.RegionDenyIdentified = (regionFlags & (uint)RegionFlags.DenyIdentified) > 0;
|
//updateMessage.RegionDenyTransacted = (regionFlags & (uint)RegionFlags.DenyTransacted) > 0;
|
||||||
updatePacket.ParcelData.RegionDenyTransacted = (regionFlags & (uint)RegionFlags.DenyTransacted) > 0;
|
|
||||||
updatePacket.ParcelData.RegionPushOverride = (regionFlags & (uint)RegionFlags.RestrictPushObject) > 0;
|
|
||||||
|
|
||||||
updatePacket.ParcelData.RentPrice = 0;
|
updateMessage.RentPrice = 0;
|
||||||
updatePacket.ParcelData.RequestResult = request_result;
|
updateMessage.RequestResult = (ParcelResult) request_result;
|
||||||
updatePacket.ParcelData.SalePrice = landData.SalePrice;
|
updateMessage.SalePrice = landData.SalePrice;
|
||||||
updatePacket.ParcelData.SelectedPrims = landData.SelectedPrims;
|
updateMessage.SelectedPrims = landData.SelectedPrims;
|
||||||
updatePacket.ParcelData.SelfCount = 0; //TODO: Unimplemented
|
updateMessage.SelfCount = 0; //TODO: Unimplemented
|
||||||
updatePacket.ParcelData.SequenceID = sequence_id;
|
updateMessage.SequenceID = sequence_id;
|
||||||
if (landData.SimwideArea > 0)
|
if (landData.SimwideArea > 0)
|
||||||
{
|
{
|
||||||
updatePacket.ParcelData.SimWideMaxPrims = parcelObjectCapacity;
|
updateMessage.SimWideMaxPrims = parcelObjectCapacity;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
updatePacket.ParcelData.SimWideMaxPrims = 0;
|
updateMessage.SimWideMaxPrims = 0;
|
||||||
}
|
}
|
||||||
updatePacket.ParcelData.SimWideTotalPrims = landData.SimwidePrims;
|
updateMessage.SimWideTotalPrims = landData.SimwidePrims;
|
||||||
updatePacket.ParcelData.SnapSelection = snap_selection;
|
updateMessage.SnapSelection = snap_selection;
|
||||||
updatePacket.ParcelData.SnapshotID = landData.SnapshotID;
|
updateMessage.SnapshotID = landData.SnapshotID;
|
||||||
updatePacket.ParcelData.Status = (byte)landData.Status;
|
updateMessage.Status = (ParcelStatus) landData.Status;
|
||||||
updatePacket.ParcelData.TotalPrims = landData.OwnerPrims + landData.GroupPrims + landData.OtherPrims +
|
updateMessage.TotalPrims = landData.OwnerPrims + landData.GroupPrims + landData.OtherPrims +
|
||||||
landData.SelectedPrims;
|
landData.SelectedPrims;
|
||||||
updatePacket.ParcelData.UserLocation = landData.UserLocation;
|
updateMessage.UserLocation = landData.UserLocation;
|
||||||
updatePacket.ParcelData.UserLookAt = landData.UserLookAt;
|
updateMessage.UserLookAt = landData.UserLookAt;
|
||||||
updatePacket.Header.Zerocoded = true;
|
|
||||||
|
updateMessage.MediaType = landData.MediaType;
|
||||||
|
updateMessage.MediaDesc = landData.MediaDescription;
|
||||||
|
updateMessage.MediaWidth = landData.MediaWidth;
|
||||||
|
updateMessage.MediaHeight = landData.MediaHeight;
|
||||||
|
updateMessage.MediaLoop = landData.MediaLoop;
|
||||||
|
updateMessage.ObscureMusic = landData.ObscureMusic;
|
||||||
|
updateMessage.ObscureMedia = landData.ObscureMedia;
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
IEventQueue eq = Scene.RequestModuleInterface<IEventQueue>();
|
IEventQueue eq = Scene.RequestModuleInterface<IEventQueue>();
|
||||||
if (eq != null)
|
if (eq != null)
|
||||||
{
|
{
|
||||||
eq.ParcelProperties(updatePacket, this.AgentId);
|
eq.ParcelProperties(updateMessage, this.AgentId);
|
||||||
}
|
} else {
|
||||||
|
m_log.Warn("No EQ Interface when sending parcel data.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
m_log.Error("Unable to send parcel data via eventqueue - exception: " + ex.ToString());
|
m_log.Error("Unable to send parcel data via eventqueue - exception: " + ex.ToString());
|
||||||
m_log.Warn("sending parcel data via UDP");
|
|
||||||
OutPacket(updatePacket, ThrottleOutPacketType.Task);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11166,8 +11175,28 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
/// handles splitting manually</param>
|
/// handles splitting manually</param>
|
||||||
protected void OutPacket(Packet packet, ThrottleOutPacketType throttlePacketType, bool doAutomaticSplitting)
|
protected void OutPacket(Packet packet, ThrottleOutPacketType throttlePacketType, bool doAutomaticSplitting)
|
||||||
{
|
{
|
||||||
if (m_debugPacketLevel >= 255)
|
if (m_debugPacketLevel > 0)
|
||||||
m_log.DebugFormat("[CLIENT]: Packet OUT {0}", packet.Type);
|
{
|
||||||
|
bool outputPacket = true;
|
||||||
|
|
||||||
|
if (m_debugPacketLevel <= 255
|
||||||
|
&& (packet.Type == PacketType.SimStats || packet.Type == PacketType.SimulatorViewerTimeMessage))
|
||||||
|
outputPacket = false;
|
||||||
|
|
||||||
|
if (m_debugPacketLevel <= 200
|
||||||
|
&&
|
||||||
|
(packet.Type == PacketType.ImagePacket
|
||||||
|
|| packet.Type == PacketType.ImageData
|
||||||
|
|| packet.Type == PacketType.LayerData
|
||||||
|
|| packet.Type == PacketType.CoarseLocationUpdate))
|
||||||
|
outputPacket = false;
|
||||||
|
|
||||||
|
if (m_debugPacketLevel <= 100 && (packet.Type == PacketType.AvatarAnimation || packet.Type == PacketType.ViewerEffect))
|
||||||
|
outputPacket = false;
|
||||||
|
|
||||||
|
if (outputPacket)
|
||||||
|
m_log.DebugFormat("[CLIENT]: Packet OUT {0}", packet.Type);
|
||||||
|
}
|
||||||
|
|
||||||
m_udpServer.SendPacket(m_udpClient, packet, throttlePacketType, doAutomaticSplitting);
|
m_udpServer.SendPacket(m_udpClient, packet, throttlePacketType, doAutomaticSplitting);
|
||||||
}
|
}
|
||||||
|
@ -11238,15 +11267,29 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
/// Entryway from the client to the simulator. All UDP packets from the client will end up here
|
/// Entryway from the client to the simulator. All UDP packets from the client will end up here
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="Pack">OpenMetaverse.packet</param>
|
/// <param name="Pack">OpenMetaverse.packet</param>
|
||||||
public void ProcessInPacket(Packet Pack)
|
public void ProcessInPacket(Packet packet)
|
||||||
{
|
{
|
||||||
if (m_debugPacketLevel >= 255)
|
if (m_debugPacketLevel > 0)
|
||||||
m_log.DebugFormat("[CLIENT]: Packet IN {0}", Pack.Type);
|
{
|
||||||
|
bool outputPacket = true;
|
||||||
|
|
||||||
|
if (m_debugPacketLevel <= 255 && packet.Type == PacketType.AgentUpdate)
|
||||||
|
outputPacket = false;
|
||||||
|
|
||||||
|
if (m_debugPacketLevel <= 200 && packet.Type == PacketType.RequestImage)
|
||||||
|
outputPacket = false;
|
||||||
|
|
||||||
|
if (m_debugPacketLevel <= 100 && (packet.Type == PacketType.ViewerEffect || packet.Type == PacketType.AgentAnimation))
|
||||||
|
outputPacket = false;
|
||||||
|
|
||||||
|
if (outputPacket)
|
||||||
|
m_log.DebugFormat("[CLIENT]: Packet IN {0}", packet.Type);
|
||||||
|
}
|
||||||
|
|
||||||
if (!ProcessPacketMethod(Pack))
|
if (!ProcessPacketMethod(packet))
|
||||||
m_log.Warn("[CLIENT]: unhandled packet " + Pack.Type);
|
m_log.Warn("[CLIENT]: unhandled packet " + packet.Type);
|
||||||
|
|
||||||
PacketPool.Instance.ReturnPacket(Pack);
|
PacketPool.Instance.ReturnPacket(packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static PrimitiveBaseShape GetShapeFromAddPacket(ObjectAddPacket addPacket)
|
private static PrimitiveBaseShape GetShapeFromAddPacket(ObjectAddPacket addPacket)
|
||||||
|
|
|
@ -173,16 +173,12 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
|
||||||
UUID itemID = UUID.Zero;
|
UUID itemID = UUID.Zero;
|
||||||
if (sp != null)
|
if (sp != null)
|
||||||
{
|
{
|
||||||
foreach(SceneObjectGroup grp in sp.Attachments)
|
foreach(SceneObjectGroup grp in sp.GetAttachments(AttachmentPt))
|
||||||
{
|
{
|
||||||
if (grp.GetAttachmentPoint() == (byte)AttachmentPt)
|
itemID = grp.GetFromItemID();
|
||||||
{
|
if (itemID != UUID.Zero)
|
||||||
itemID = grp.GetFromItemID();
|
DetachSingleAttachmentToInv(itemID, remoteClient);
|
||||||
break;
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
if (itemID != UUID.Zero)
|
|
||||||
DetachSingleAttachmentToInv(itemID, remoteClient);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (group.GetFromItemID() == UUID.Zero)
|
if (group.GetFromItemID() == UUID.Zero)
|
||||||
|
@ -196,12 +192,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
|
||||||
|
|
||||||
SetAttachmentInventoryStatus(remoteClient, AttachmentPt, itemID, group);
|
SetAttachmentInventoryStatus(remoteClient, AttachmentPt, itemID, group);
|
||||||
|
|
||||||
group.AttachToAgent(remoteClient.AgentId, AttachmentPt, attachPos, silent);
|
AttachToAgent(sp, group, AttachmentPt, attachPos, silent);
|
||||||
|
|
||||||
// In case it is later dropped again, don't let
|
|
||||||
// it get cleaned up
|
|
||||||
group.RootPart.RemFlag(PrimFlags.TemporaryOnRez);
|
|
||||||
group.HasGroupChanged = false;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -529,6 +520,78 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
|
||||||
remoteClient.SendInventoryItemCreateUpdate(item, 0);
|
remoteClient.SendInventoryItemCreateUpdate(item, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Attach this scene object to the given avatar.
|
||||||
|
/// </summary>
|
||||||
|
///
|
||||||
|
/// This isn't publicly available since attachments should always perform the corresponding inventory
|
||||||
|
/// operation (to show the attach in user inventory and update the asset with positional information).
|
||||||
|
///
|
||||||
|
/// <param name="sp"></param>
|
||||||
|
/// <param name="so"></param>
|
||||||
|
/// <param name="attachmentpoint"></param>
|
||||||
|
/// <param name="AttachOffset"></param>
|
||||||
|
/// <param name="silent"></param>
|
||||||
|
protected void AttachToAgent(ScenePresence avatar, SceneObjectGroup so, uint attachmentpoint, Vector3 AttachOffset, bool silent)
|
||||||
|
{
|
||||||
|
// don't attach attachments to child agents
|
||||||
|
if (avatar.IsChildAgent) return;
|
||||||
|
|
||||||
|
// m_log.DebugFormat("[ATTACHMENTS MODULE]: Adding attachment {0} to avatar {1}", Name, avatar.Name);
|
||||||
|
|
||||||
|
so.DetachFromBackup();
|
||||||
|
|
||||||
|
// Remove from database and parcel prim count
|
||||||
|
m_scene.DeleteFromStorage(so.UUID);
|
||||||
|
m_scene.EventManager.TriggerParcelPrimCountTainted();
|
||||||
|
|
||||||
|
so.RootPart.AttachedAvatar = avatar.UUID;
|
||||||
|
|
||||||
|
//Anakin Lohner bug #3839
|
||||||
|
lock (so.Children)
|
||||||
|
{
|
||||||
|
foreach (SceneObjectPart p in so.Children.Values)
|
||||||
|
{
|
||||||
|
p.AttachedAvatar = avatar.UUID;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (so.RootPart.PhysActor != null)
|
||||||
|
{
|
||||||
|
m_scene.PhysicsScene.RemovePrim(so.RootPart.PhysActor);
|
||||||
|
so.RootPart.PhysActor = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
so.AbsolutePosition = AttachOffset;
|
||||||
|
so.RootPart.AttachedPos = AttachOffset;
|
||||||
|
so.RootPart.IsAttachment = true;
|
||||||
|
|
||||||
|
so.RootPart.SetParentLocalId(avatar.LocalId);
|
||||||
|
so.SetAttachmentPoint(Convert.ToByte(attachmentpoint));
|
||||||
|
|
||||||
|
avatar.AddAttachment(so);
|
||||||
|
|
||||||
|
if (!silent)
|
||||||
|
{
|
||||||
|
// Killing it here will cause the client to deselect it
|
||||||
|
// It then reappears on the avatar, deselected
|
||||||
|
// through the full update below
|
||||||
|
//
|
||||||
|
if (so.IsSelected)
|
||||||
|
{
|
||||||
|
m_scene.SendKillObject(so.RootPart.LocalId);
|
||||||
|
}
|
||||||
|
|
||||||
|
so.IsSelected = false; // fudge....
|
||||||
|
so.ScheduleGroupForFullUpdate();
|
||||||
|
}
|
||||||
|
|
||||||
|
// In case it is later dropped again, don't let
|
||||||
|
// it get cleaned up
|
||||||
|
so.RootPart.RemFlag(PrimFlags.TemporaryOnRez);
|
||||||
|
so.HasGroupChanged = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -34,6 +34,7 @@ using System.Threading;
|
||||||
using log4net;
|
using log4net;
|
||||||
using Nini.Config;
|
using Nini.Config;
|
||||||
using OpenMetaverse;
|
using OpenMetaverse;
|
||||||
|
using OpenMetaverse.Messages.Linden;
|
||||||
using OpenMetaverse.Packets;
|
using OpenMetaverse.Packets;
|
||||||
using OpenMetaverse.StructuredData;
|
using OpenMetaverse.StructuredData;
|
||||||
using OpenSim.Framework;
|
using OpenSim.Framework;
|
||||||
|
@ -137,10 +138,11 @@ namespace OpenSim.Region.CoreModules.Framework.EventQueue
|
||||||
{
|
{
|
||||||
if (!queues.ContainsKey(agentId))
|
if (!queues.ContainsKey(agentId))
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
m_log.DebugFormat(
|
m_log.DebugFormat(
|
||||||
"[EVENTQUEUE]: Adding new queue for agent {0} in region {1}",
|
"[EVENTQUEUE]: Adding new queue for agent {0} in region {1}",
|
||||||
agentId, m_scene.RegionInfo.RegionName);
|
agentId, m_scene.RegionInfo.RegionName);
|
||||||
|
*/
|
||||||
queues[agentId] = new Queue<OSD>();
|
queues[agentId] = new Queue<OSD>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -200,7 +202,7 @@ namespace OpenSim.Region.CoreModules.Framework.EventQueue
|
||||||
|
|
||||||
private void ClientClosed(UUID AgentID, Scene scene)
|
private void ClientClosed(UUID AgentID, Scene scene)
|
||||||
{
|
{
|
||||||
m_log.DebugFormat("[EVENTQUEUE]: Closed client {0} in region {1}", AgentID, m_scene.RegionInfo.RegionName);
|
//m_log.DebugFormat("[EVENTQUEUE]: Closed client {0} in region {1}", AgentID, m_scene.RegionInfo.RegionName);
|
||||||
|
|
||||||
int count = 0;
|
int count = 0;
|
||||||
while (queues.ContainsKey(AgentID) && queues[AgentID].Count > 0 && count++ < 5)
|
while (queues.ContainsKey(AgentID) && queues[AgentID].Count > 0 && count++ < 5)
|
||||||
|
@ -284,7 +286,7 @@ namespace OpenSim.Region.CoreModules.Framework.EventQueue
|
||||||
// Reuse open queues. The client does!
|
// Reuse open queues. The client does!
|
||||||
if (m_AvatarQueueUUIDMapping.ContainsKey(agentID))
|
if (m_AvatarQueueUUIDMapping.ContainsKey(agentID))
|
||||||
{
|
{
|
||||||
m_log.DebugFormat("[EVENTQUEUE]: Found Existing UUID!");
|
//m_log.DebugFormat("[EVENTQUEUE]: Found Existing UUID!");
|
||||||
EventQueueGetUUID = m_AvatarQueueUUIDMapping[agentID];
|
EventQueueGetUUID = m_AvatarQueueUUIDMapping[agentID];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -365,7 +367,7 @@ namespace OpenSim.Region.CoreModules.Framework.EventQueue
|
||||||
{
|
{
|
||||||
// Send it a fake event to keep the client polling! It doesn't like 502s like the proxys say!
|
// Send it a fake event to keep the client polling! It doesn't like 502s like the proxys say!
|
||||||
array.Add(EventQueueHelper.KeepAliveEvent());
|
array.Add(EventQueueHelper.KeepAliveEvent());
|
||||||
m_log.DebugFormat("[EVENTQUEUE]: adding fake event for {0} in region {1}", pAgentId, m_scene.RegionInfo.RegionName);
|
//m_log.DebugFormat("[EVENTQUEUE]: adding fake event for {0} in region {1}", pAgentId, m_scene.RegionInfo.RegionName);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -394,8 +396,8 @@ namespace OpenSim.Region.CoreModules.Framework.EventQueue
|
||||||
responsedata["keepalive"] = false;
|
responsedata["keepalive"] = false;
|
||||||
responsedata["reusecontext"] = false;
|
responsedata["reusecontext"] = false;
|
||||||
responsedata["str_response_string"] = OSDParser.SerializeLLSDXmlString(events);
|
responsedata["str_response_string"] = OSDParser.SerializeLLSDXmlString(events);
|
||||||
|
//m_log.DebugFormat("[EVENTQUEUE]: sending response for {0} in region {1}: {2}", pAgentId, m_scene.RegionInfo.RegionName, responsedata["str_response_string"]);
|
||||||
return responsedata;
|
return responsedata;
|
||||||
//m_log.DebugFormat("[EVENTQUEUE]: sending response for {0} in region {1}: {2}", agentID, m_scene.RegionInfo.RegionName, responsedata["str_response_string"]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Hashtable NoEvents(UUID requestID, UUID agentID)
|
public Hashtable NoEvents(UUID requestID, UUID agentID)
|
||||||
|
@ -461,7 +463,7 @@ namespace OpenSim.Region.CoreModules.Framework.EventQueue
|
||||||
{
|
{
|
||||||
// Send it a fake event to keep the client polling! It doesn't like 502s like the proxys say!
|
// Send it a fake event to keep the client polling! It doesn't like 502s like the proxys say!
|
||||||
array.Add(EventQueueHelper.KeepAliveEvent());
|
array.Add(EventQueueHelper.KeepAliveEvent());
|
||||||
m_log.DebugFormat("[EVENTQUEUE]: adding fake event for {0} in region {1}", agentID, m_scene.RegionInfo.RegionName);
|
//m_log.DebugFormat("[EVENTQUEUE]: adding fake event for {0} in region {1}", agentID, m_scene.RegionInfo.RegionName);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -697,9 +699,9 @@ namespace OpenSim.Region.CoreModules.Framework.EventQueue
|
||||||
//m_log.InfoFormat("########### eq ChatterBoxSessionAgentListUpdates #############\n{0}", item);
|
//m_log.InfoFormat("########### eq ChatterBoxSessionAgentListUpdates #############\n{0}", item);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ParcelProperties(ParcelPropertiesPacket parcelPropertiesPacket, UUID avatarID)
|
public void ParcelProperties(ParcelPropertiesMessage parcelPropertiesMessage, UUID avatarID)
|
||||||
{
|
{
|
||||||
OSD item = EventQueueHelper.ParcelProperties(parcelPropertiesPacket);
|
OSD item = EventQueueHelper.ParcelProperties(parcelPropertiesMessage);
|
||||||
Enqueue(item, avatarID);
|
Enqueue(item, avatarID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,7 @@ using System.Net;
|
||||||
using OpenMetaverse;
|
using OpenMetaverse;
|
||||||
using OpenMetaverse.Packets;
|
using OpenMetaverse.Packets;
|
||||||
using OpenMetaverse.StructuredData;
|
using OpenMetaverse.StructuredData;
|
||||||
|
using OpenMetaverse.Messages.Linden;
|
||||||
|
|
||||||
namespace OpenSim.Region.CoreModules.Framework.EventQueue
|
namespace OpenSim.Region.CoreModules.Framework.EventQueue
|
||||||
{
|
{
|
||||||
|
@ -309,116 +310,6 @@ namespace OpenSim.Region.CoreModules.Framework.EventQueue
|
||||||
return chatterBoxSessionAgentListUpdates;
|
return chatterBoxSessionAgentListUpdates;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static OSD ParcelProperties(ParcelPropertiesPacket parcelPropertiesPacket)
|
|
||||||
{
|
|
||||||
OSDMap parcelProperties = new OSDMap();
|
|
||||||
OSDMap body = new OSDMap();
|
|
||||||
|
|
||||||
OSDArray ageVerificationBlock = new OSDArray();
|
|
||||||
OSDMap ageVerificationMap = new OSDMap();
|
|
||||||
ageVerificationMap.Add("RegionDenyAgeUnverified",
|
|
||||||
OSD.FromBoolean(parcelPropertiesPacket.AgeVerificationBlock.RegionDenyAgeUnverified));
|
|
||||||
ageVerificationBlock.Add(ageVerificationMap);
|
|
||||||
body.Add("AgeVerificationBlock", ageVerificationBlock);
|
|
||||||
|
|
||||||
// LL sims send media info in this event queue message but it's not in the UDP
|
|
||||||
// packet we construct this event queue message from. This should be refactored in
|
|
||||||
// other areas of the code so it can all be send in the same message. Until then we will
|
|
||||||
// still send the media info via UDP
|
|
||||||
|
|
||||||
//OSDArray mediaData = new OSDArray();
|
|
||||||
//OSDMap mediaDataMap = new OSDMap();
|
|
||||||
//mediaDataMap.Add("MediaDesc", OSD.FromString(""));
|
|
||||||
//mediaDataMap.Add("MediaHeight", OSD.FromInteger(0));
|
|
||||||
//mediaDataMap.Add("MediaLoop", OSD.FromInteger(0));
|
|
||||||
//mediaDataMap.Add("MediaType", OSD.FromString("type/type"));
|
|
||||||
//mediaDataMap.Add("MediaWidth", OSD.FromInteger(0));
|
|
||||||
//mediaDataMap.Add("ObscureMedia", OSD.FromInteger(0));
|
|
||||||
//mediaDataMap.Add("ObscureMusic", OSD.FromInteger(0));
|
|
||||||
//mediaData.Add(mediaDataMap);
|
|
||||||
//body.Add("MediaData", mediaData);
|
|
||||||
|
|
||||||
OSDArray parcelData = new OSDArray();
|
|
||||||
OSDMap parcelDataMap = new OSDMap();
|
|
||||||
OSDArray AABBMax = new OSDArray(3);
|
|
||||||
AABBMax.Add(OSD.FromReal(parcelPropertiesPacket.ParcelData.AABBMax.X));
|
|
||||||
AABBMax.Add(OSD.FromReal(parcelPropertiesPacket.ParcelData.AABBMax.Y));
|
|
||||||
AABBMax.Add(OSD.FromReal(parcelPropertiesPacket.ParcelData.AABBMax.Z));
|
|
||||||
parcelDataMap.Add("AABBMax", AABBMax);
|
|
||||||
|
|
||||||
OSDArray AABBMin = new OSDArray(3);
|
|
||||||
AABBMin.Add(OSD.FromReal(parcelPropertiesPacket.ParcelData.AABBMin.X));
|
|
||||||
AABBMin.Add(OSD.FromReal(parcelPropertiesPacket.ParcelData.AABBMin.Y));
|
|
||||||
AABBMin.Add(OSD.FromReal(parcelPropertiesPacket.ParcelData.AABBMin.Z));
|
|
||||||
parcelDataMap.Add("AABBMin", AABBMin);
|
|
||||||
|
|
||||||
parcelDataMap.Add("Area", OSD.FromInteger(parcelPropertiesPacket.ParcelData.Area));
|
|
||||||
parcelDataMap.Add("AuctionID", OSD.FromBinary(uintToByteArray(parcelPropertiesPacket.ParcelData.AuctionID)));
|
|
||||||
parcelDataMap.Add("AuthBuyerID", OSD.FromUUID(parcelPropertiesPacket.ParcelData.AuthBuyerID));
|
|
||||||
parcelDataMap.Add("Bitmap", OSD.FromBinary(parcelPropertiesPacket.ParcelData.Bitmap));
|
|
||||||
parcelDataMap.Add("Category", OSD.FromInteger((int)parcelPropertiesPacket.ParcelData.Category));
|
|
||||||
parcelDataMap.Add("ClaimDate", OSD.FromInteger(parcelPropertiesPacket.ParcelData.ClaimDate));
|
|
||||||
parcelDataMap.Add("ClaimPrice", OSD.FromInteger(parcelPropertiesPacket.ParcelData.ClaimPrice));
|
|
||||||
parcelDataMap.Add("Desc", OSD.FromString(Utils.BytesToString(parcelPropertiesPacket.ParcelData.Desc)));
|
|
||||||
parcelDataMap.Add("GroupID", OSD.FromUUID(parcelPropertiesPacket.ParcelData.GroupID));
|
|
||||||
parcelDataMap.Add("GroupPrims", OSD.FromInteger(parcelPropertiesPacket.ParcelData.GroupPrims));
|
|
||||||
parcelDataMap.Add("IsGroupOwned", OSD.FromBoolean(parcelPropertiesPacket.ParcelData.IsGroupOwned));
|
|
||||||
parcelDataMap.Add("LandingType", OSD.FromInteger(parcelPropertiesPacket.ParcelData.LandingType));
|
|
||||||
parcelDataMap.Add("LocalID", OSD.FromInteger(parcelPropertiesPacket.ParcelData.LocalID));
|
|
||||||
parcelDataMap.Add("MaxPrims", OSD.FromInteger(parcelPropertiesPacket.ParcelData.MaxPrims));
|
|
||||||
parcelDataMap.Add("MediaAutoScale", OSD.FromInteger((int)parcelPropertiesPacket.ParcelData.MediaAutoScale));
|
|
||||||
parcelDataMap.Add("MediaID", OSD.FromUUID(parcelPropertiesPacket.ParcelData.MediaID));
|
|
||||||
parcelDataMap.Add("MediaURL", OSD.FromString(Utils.BytesToString(parcelPropertiesPacket.ParcelData.MediaURL)));
|
|
||||||
parcelDataMap.Add("MusicURL", OSD.FromString(Utils.BytesToString(parcelPropertiesPacket.ParcelData.MusicURL)));
|
|
||||||
parcelDataMap.Add("Name", OSD.FromString(Utils.BytesToString(parcelPropertiesPacket.ParcelData.Name)));
|
|
||||||
parcelDataMap.Add("OtherCleanTime", OSD.FromInteger(parcelPropertiesPacket.ParcelData.OtherCleanTime));
|
|
||||||
parcelDataMap.Add("OtherCount", OSD.FromInteger(parcelPropertiesPacket.ParcelData.OtherCount));
|
|
||||||
parcelDataMap.Add("OtherPrims", OSD.FromInteger(parcelPropertiesPacket.ParcelData.OtherPrims));
|
|
||||||
parcelDataMap.Add("OwnerID", OSD.FromUUID(parcelPropertiesPacket.ParcelData.OwnerID));
|
|
||||||
parcelDataMap.Add("OwnerPrims", OSD.FromInteger(parcelPropertiesPacket.ParcelData.OwnerPrims));
|
|
||||||
parcelDataMap.Add("ParcelFlags", OSD.FromBinary(uintToByteArray(parcelPropertiesPacket.ParcelData.ParcelFlags)));
|
|
||||||
parcelDataMap.Add("ParcelPrimBonus", OSD.FromReal(parcelPropertiesPacket.ParcelData.ParcelPrimBonus));
|
|
||||||
parcelDataMap.Add("PassHours", OSD.FromReal(parcelPropertiesPacket.ParcelData.PassHours));
|
|
||||||
parcelDataMap.Add("PassPrice", OSD.FromInteger(parcelPropertiesPacket.ParcelData.PassPrice));
|
|
||||||
parcelDataMap.Add("PublicCount", OSD.FromInteger(parcelPropertiesPacket.ParcelData.PublicCount));
|
|
||||||
parcelDataMap.Add("RegionDenyAnonymous", OSD.FromBoolean(parcelPropertiesPacket.ParcelData.RegionDenyAnonymous));
|
|
||||||
parcelDataMap.Add("RegionDenyIdentified", OSD.FromBoolean(parcelPropertiesPacket.ParcelData.RegionDenyIdentified));
|
|
||||||
parcelDataMap.Add("RegionDenyTransacted", OSD.FromBoolean(parcelPropertiesPacket.ParcelData.RegionDenyTransacted));
|
|
||||||
|
|
||||||
parcelDataMap.Add("RegionPushOverride", OSD.FromBoolean(parcelPropertiesPacket.ParcelData.RegionPushOverride));
|
|
||||||
parcelDataMap.Add("RentPrice", OSD.FromInteger(parcelPropertiesPacket.ParcelData.RentPrice));
|
|
||||||
parcelDataMap.Add("RequestResult", OSD.FromInteger(parcelPropertiesPacket.ParcelData.RequestResult));
|
|
||||||
parcelDataMap.Add("SalePrice", OSD.FromInteger(parcelPropertiesPacket.ParcelData.SalePrice));
|
|
||||||
parcelDataMap.Add("SelectedPrims", OSD.FromInteger(parcelPropertiesPacket.ParcelData.SelectedPrims));
|
|
||||||
parcelDataMap.Add("SelfCount", OSD.FromInteger(parcelPropertiesPacket.ParcelData.SelfCount));
|
|
||||||
parcelDataMap.Add("SequenceID", OSD.FromInteger(parcelPropertiesPacket.ParcelData.SequenceID));
|
|
||||||
parcelDataMap.Add("SimWideMaxPrims", OSD.FromInteger(parcelPropertiesPacket.ParcelData.SimWideMaxPrims));
|
|
||||||
parcelDataMap.Add("SimWideTotalPrims", OSD.FromInteger(parcelPropertiesPacket.ParcelData.SimWideTotalPrims));
|
|
||||||
parcelDataMap.Add("SnapSelection", OSD.FromBoolean(parcelPropertiesPacket.ParcelData.SnapSelection));
|
|
||||||
parcelDataMap.Add("SnapshotID", OSD.FromUUID(parcelPropertiesPacket.ParcelData.SnapshotID));
|
|
||||||
parcelDataMap.Add("Status", OSD.FromInteger((int)parcelPropertiesPacket.ParcelData.Status));
|
|
||||||
parcelDataMap.Add("TotalPrims", OSD.FromInteger(parcelPropertiesPacket.ParcelData.TotalPrims));
|
|
||||||
|
|
||||||
OSDArray UserLocation = new OSDArray(3);
|
|
||||||
UserLocation.Add(OSD.FromReal(parcelPropertiesPacket.ParcelData.UserLocation.X));
|
|
||||||
UserLocation.Add(OSD.FromReal(parcelPropertiesPacket.ParcelData.UserLocation.Y));
|
|
||||||
UserLocation.Add(OSD.FromReal(parcelPropertiesPacket.ParcelData.UserLocation.Z));
|
|
||||||
parcelDataMap.Add("UserLocation", UserLocation);
|
|
||||||
|
|
||||||
OSDArray UserLookAt = new OSDArray(3);
|
|
||||||
UserLookAt.Add(OSD.FromReal(parcelPropertiesPacket.ParcelData.UserLookAt.X));
|
|
||||||
UserLookAt.Add(OSD.FromReal(parcelPropertiesPacket.ParcelData.UserLookAt.Y));
|
|
||||||
UserLookAt.Add(OSD.FromReal(parcelPropertiesPacket.ParcelData.UserLookAt.Z));
|
|
||||||
parcelDataMap.Add("UserLookAt", UserLookAt);
|
|
||||||
|
|
||||||
parcelData.Add(parcelDataMap);
|
|
||||||
body.Add("ParcelData", parcelData);
|
|
||||||
parcelProperties.Add("body", body);
|
|
||||||
parcelProperties.Add("message", OSD.FromString("ParcelProperties"));
|
|
||||||
|
|
||||||
return parcelProperties;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static OSD GroupMembership(AgentGroupDataUpdatePacket groupUpdatePacket)
|
public static OSD GroupMembership(AgentGroupDataUpdatePacket groupUpdatePacket)
|
||||||
{
|
{
|
||||||
OSDMap groupUpdate = new OSDMap();
|
OSDMap groupUpdate = new OSDMap();
|
||||||
|
@ -495,5 +386,14 @@ namespace OpenSim.Region.CoreModules.Framework.EventQueue
|
||||||
return placesReply;
|
return placesReply;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static OSD ParcelProperties(ParcelPropertiesMessage parcelPropertiesMessage)
|
||||||
|
{
|
||||||
|
OSDMap message = new OSDMap();
|
||||||
|
message.Add("message", OSD.FromString("ParcelProperties"));
|
||||||
|
OSD message_body = parcelPropertiesMessage.Serialize();
|
||||||
|
message.Add("body", message_body);
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -641,7 +641,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fire on_rez
|
// Fire on_rez
|
||||||
group.CreateScriptInstances(0, true, m_Scene.DefaultScriptEngine, 0);
|
group.CreateScriptInstances(0, true, m_Scene.DefaultScriptEngine, 1);
|
||||||
rootPart.ParentGroup.ResumeScripts();
|
rootPart.ParentGroup.ResumeScripts();
|
||||||
|
|
||||||
rootPart.ScheduleFullUpdate();
|
rootPart.ScheduleFullUpdate();
|
||||||
|
|
|
@ -33,6 +33,8 @@ using System.Reflection;
|
||||||
using log4net;
|
using log4net;
|
||||||
using Nini.Config;
|
using Nini.Config;
|
||||||
using OpenMetaverse;
|
using OpenMetaverse;
|
||||||
|
using OpenMetaverse.StructuredData;
|
||||||
|
using OpenMetaverse.Messages.Linden;
|
||||||
using OpenSim.Framework;
|
using OpenSim.Framework;
|
||||||
using OpenSim.Framework.Capabilities;
|
using OpenSim.Framework.Capabilities;
|
||||||
using OpenSim.Framework.Servers;
|
using OpenSim.Framework.Servers;
|
||||||
|
@ -1066,7 +1068,6 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
{
|
{
|
||||||
for (int y = 0; y < inc_y; y++)
|
for (int y = 0; y < inc_y; y++)
|
||||||
{
|
{
|
||||||
|
|
||||||
ILandObject currentParcel = GetLandObject(start_x + x, start_y + y);
|
ILandObject currentParcel = GetLandObject(start_x + x, start_y + y);
|
||||||
|
|
||||||
if (currentParcel != null)
|
if (currentParcel != null)
|
||||||
|
@ -1353,8 +1354,68 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
{
|
{
|
||||||
return RemoteParcelRequest(request, path, param, agentID, caps);
|
return RemoteParcelRequest(request, path, param, agentID, caps);
|
||||||
}));
|
}));
|
||||||
|
UUID parcelCapID = UUID.Random();
|
||||||
|
caps.RegisterHandler("ParcelPropertiesUpdate",
|
||||||
|
new RestStreamHandler("POST", "/CAPS/" + parcelCapID,
|
||||||
|
delegate(string request, string path, string param,
|
||||||
|
OSHttpRequest httpRequest, OSHttpResponse httpResponse)
|
||||||
|
{
|
||||||
|
return ProcessPropertiesUpdate(request, path, param, agentID, caps);
|
||||||
|
}));
|
||||||
}
|
}
|
||||||
|
private string ProcessPropertiesUpdate(string request, string path, string param, UUID agentID, Caps caps)
|
||||||
|
{
|
||||||
|
IClientAPI client;
|
||||||
|
if ( ! m_scene.TryGetClient(agentID, out client) ) {
|
||||||
|
m_log.WarnFormat("[LAND] unable to retrieve IClientAPI for {0}", agentID.ToString() );
|
||||||
|
return LLSDHelpers.SerialiseLLSDReply(new LLSDEmpty());
|
||||||
|
}
|
||||||
|
|
||||||
|
ParcelPropertiesUpdateMessage properties = new ParcelPropertiesUpdateMessage();
|
||||||
|
OpenMetaverse.StructuredData.OSDMap args = (OpenMetaverse.StructuredData.OSDMap) OSDParser.DeserializeLLSDXml(request);
|
||||||
|
|
||||||
|
properties.Deserialize(args);
|
||||||
|
|
||||||
|
LandUpdateArgs land_update = new LandUpdateArgs();
|
||||||
|
int parcelID = properties.LocalID;
|
||||||
|
land_update.AuthBuyerID = properties.AuthBuyerID;
|
||||||
|
land_update.Category = properties.Category;
|
||||||
|
land_update.Desc = properties.Desc;
|
||||||
|
land_update.GroupID = properties.GroupID;
|
||||||
|
land_update.LandingType = (byte) properties.Landing;
|
||||||
|
land_update.MediaAutoScale = (byte) Convert.ToInt32(properties.MediaAutoScale);
|
||||||
|
land_update.MediaID = properties.MediaID;
|
||||||
|
land_update.MediaURL = properties.MediaURL;
|
||||||
|
land_update.MusicURL = properties.MusicURL;
|
||||||
|
land_update.Name = properties.Name;
|
||||||
|
land_update.ParcelFlags = (uint) properties.ParcelFlags;
|
||||||
|
land_update.PassHours = (int) properties.PassHours;
|
||||||
|
land_update.PassPrice = (int) properties.PassPrice;
|
||||||
|
land_update.SalePrice = (int) properties.SalePrice;
|
||||||
|
land_update.SnapshotID = properties.SnapshotID;
|
||||||
|
land_update.UserLocation = properties.UserLocation;
|
||||||
|
land_update.UserLookAt = properties.UserLookAt;
|
||||||
|
land_update.MediaDescription = properties.MediaDesc;
|
||||||
|
land_update.MediaType = properties.MediaType;
|
||||||
|
land_update.MediaWidth = properties.MediaWidth;
|
||||||
|
land_update.MediaHeight = properties.MediaHeight;
|
||||||
|
land_update.MediaLoop = properties.MediaLoop;
|
||||||
|
land_update.ObscureMusic = properties.ObscureMusic;
|
||||||
|
land_update.ObscureMedia = properties.ObscureMedia;
|
||||||
|
|
||||||
|
ILandObject land;
|
||||||
|
lock (m_landList)
|
||||||
|
{
|
||||||
|
m_landList.TryGetValue(parcelID, out land);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (land != null) {
|
||||||
|
land.UpdateLandProperties(land_update, client);
|
||||||
|
} else {
|
||||||
|
m_log.WarnFormat("[LAND] unable to find parcelID {0}", parcelID);
|
||||||
|
}
|
||||||
|
return LLSDHelpers.SerialiseLLSDReply(new LLSDEmpty());
|
||||||
|
}
|
||||||
// we cheat here: As we don't have (and want) a grid-global parcel-store, we can't return the
|
// we cheat here: As we don't have (and want) a grid-global parcel-store, we can't return the
|
||||||
// "real" parcelID, because we wouldn't be able to map that to the region the parcel belongs to.
|
// "real" parcelID, because we wouldn't be able to map that to the region the parcel belongs to.
|
||||||
// So, we create a "fake" parcelID by using the regionHandle (64 bit), and the local (integer) x
|
// So, we create a "fake" parcelID by using the regionHandle (64 bit), and the local (integer) x
|
||||||
|
|
|
@ -229,6 +229,13 @@ namespace OpenSim.Region.CoreModules.World.Land
|
||||||
newData.SnapshotID = args.SnapshotID;
|
newData.SnapshotID = args.SnapshotID;
|
||||||
newData.UserLocation = args.UserLocation;
|
newData.UserLocation = args.UserLocation;
|
||||||
newData.UserLookAt = args.UserLookAt;
|
newData.UserLookAt = args.UserLookAt;
|
||||||
|
newData.MediaType = args.MediaType;
|
||||||
|
newData.MediaDescription = args.MediaDescription;
|
||||||
|
newData.MediaWidth = args.MediaWidth;
|
||||||
|
newData.MediaHeight = args.MediaHeight;
|
||||||
|
newData.MediaLoop = args.MediaLoop;
|
||||||
|
newData.ObscureMusic = args.ObscureMusic;
|
||||||
|
newData.ObscureMedia = args.ObscureMedia;
|
||||||
|
|
||||||
m_scene.LandChannel.UpdateLandObject(LandData.LocalID, newData);
|
m_scene.LandChannel.UpdateLandObject(LandData.LocalID, newData);
|
||||||
|
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using OpenMetaverse;
|
using OpenMetaverse;
|
||||||
using OpenMetaverse.Packets;
|
using OpenMetaverse.Packets;
|
||||||
|
using OpenMetaverse.Messages.Linden;
|
||||||
using OpenMetaverse.StructuredData;
|
using OpenMetaverse.StructuredData;
|
||||||
|
|
||||||
namespace OpenSim.Region.Framework.Interfaces
|
namespace OpenSim.Region.Framework.Interfaces
|
||||||
|
@ -54,7 +55,7 @@ namespace OpenSim.Region.Framework.Interfaces
|
||||||
uint ttl, UUID transactionID, bool fromGroup, byte[] binaryBucket);
|
uint ttl, UUID transactionID, bool fromGroup, byte[] binaryBucket);
|
||||||
void ChatterBoxSessionAgentListUpdates(UUID sessionID, UUID fromAgent, UUID toAgent, bool canVoiceChat,
|
void ChatterBoxSessionAgentListUpdates(UUID sessionID, UUID fromAgent, UUID toAgent, bool canVoiceChat,
|
||||||
bool isModerator, bool textMute);
|
bool isModerator, bool textMute);
|
||||||
void ParcelProperties(ParcelPropertiesPacket parcelPropertiesPacket, UUID avatarID);
|
void ParcelProperties(ParcelPropertiesMessage parcelPropertiesMessage, UUID avatarID);
|
||||||
void GroupMembership(AgentGroupDataUpdatePacket groupUpdate, UUID avatarID);
|
void GroupMembership(AgentGroupDataUpdatePacket groupUpdate, UUID avatarID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1940,7 +1940,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
// We can only call this after adding the scene object, since the scene object references the scene
|
// We can only call this after adding the scene object, since the scene object references the scene
|
||||||
// to find out if scripts should be activated at all.
|
// to find out if scripts should be activated at all.
|
||||||
group.CreateScriptInstances(param, true, DefaultScriptEngine, 2);
|
group.CreateScriptInstances(param, true, DefaultScriptEngine, 3);
|
||||||
|
|
||||||
group.ScheduleGroupForFullUpdate();
|
group.ScheduleGroupForFullUpdate();
|
||||||
|
|
||||||
|
|
|
@ -2376,7 +2376,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
newObject.RootPart.ParentGroup.CreateScriptInstances(0, false, DefaultScriptEngine, 1);
|
newObject.RootPart.ParentGroup.CreateScriptInstances(0, false, DefaultScriptEngine, 2);
|
||||||
|
|
||||||
newObject.ResumeScripts();
|
newObject.ResumeScripts();
|
||||||
|
|
||||||
|
|
|
@ -1845,7 +1845,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
copy.UpdateGroupRotationR(rot);
|
copy.UpdateGroupRotationR(rot);
|
||||||
}
|
}
|
||||||
|
|
||||||
copy.CreateScriptInstances(0, false, m_parentScene.DefaultScriptEngine, 0);
|
copy.CreateScriptInstances(0, false, m_parentScene.DefaultScriptEngine, 1);
|
||||||
copy.HasGroupChanged = true;
|
copy.HasGroupChanged = true;
|
||||||
copy.ScheduleGroupForFullUpdate();
|
copy.ScheduleGroupForFullUpdate();
|
||||||
copy.ResumeScripts();
|
copy.ResumeScripts();
|
||||||
|
|
|
@ -977,77 +977,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Attach this scene object to the given avatar.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="agentID"></param>
|
|
||||||
/// <param name="attachmentpoint"></param>
|
|
||||||
/// <param name="AttachOffset"></param>
|
|
||||||
public void AttachToAgent(UUID agentID, uint attachmentpoint, Vector3 AttachOffset, bool silent)
|
|
||||||
{
|
|
||||||
ScenePresence avatar = m_scene.GetScenePresence(agentID);
|
|
||||||
if (avatar != null)
|
|
||||||
{
|
|
||||||
// don't attach attachments to child agents
|
|
||||||
if (avatar.IsChildAgent) return;
|
|
||||||
|
|
||||||
// m_log.DebugFormat("[SOG]: Adding attachment {0} to avatar {1}", Name, avatar.Name);
|
|
||||||
|
|
||||||
DetachFromBackup();
|
|
||||||
|
|
||||||
// Remove from database and parcel prim count
|
|
||||||
m_scene.DeleteFromStorage(UUID);
|
|
||||||
m_scene.EventManager.TriggerParcelPrimCountTainted();
|
|
||||||
|
|
||||||
m_rootPart.AttachedAvatar = agentID;
|
|
||||||
|
|
||||||
//Anakin Lohner bug #3839
|
|
||||||
lock (m_parts)
|
|
||||||
{
|
|
||||||
foreach (SceneObjectPart p in m_parts.Values)
|
|
||||||
{
|
|
||||||
p.AttachedAvatar = agentID;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_rootPart.PhysActor != null)
|
|
||||||
{
|
|
||||||
m_scene.PhysicsScene.RemovePrim(m_rootPart.PhysActor);
|
|
||||||
m_rootPart.PhysActor = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
AbsolutePosition = AttachOffset;
|
|
||||||
m_rootPart.AttachedPos = AttachOffset;
|
|
||||||
m_rootPart.IsAttachment = true;
|
|
||||||
|
|
||||||
m_rootPart.SetParentLocalId(avatar.LocalId);
|
|
||||||
SetAttachmentPoint(Convert.ToByte(attachmentpoint));
|
|
||||||
|
|
||||||
avatar.AddAttachment(this);
|
|
||||||
|
|
||||||
if (!silent)
|
|
||||||
{
|
|
||||||
// Killing it here will cause the client to deselect it
|
|
||||||
// It then reappears on the avatar, deselected
|
|
||||||
// through the full update below
|
|
||||||
//
|
|
||||||
if (IsSelected)
|
|
||||||
{
|
|
||||||
m_scene.SendKillObject(m_rootPart.LocalId);
|
|
||||||
}
|
|
||||||
|
|
||||||
IsSelected = false; // fudge....
|
|
||||||
ScheduleGroupForFullUpdate();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
m_log.WarnFormat(
|
|
||||||
"[SOG]: Tried to add attachment {0} to avatar with UUID {1} in region {2} but the avatar is not present",
|
|
||||||
UUID, agentID, Scene.RegionInfo.RegionName);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public byte GetAttachmentPoint()
|
public byte GetAttachmentPoint()
|
||||||
{
|
{
|
||||||
return m_rootPart.Shape.State;
|
return m_rootPart.Shape.State;
|
||||||
|
|
|
@ -2464,7 +2464,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
m_controllingClient.SendAvatarDataImmediate(this);
|
m_controllingClient.SendAvatarDataImmediate(this);
|
||||||
|
|
||||||
SendInitialFullUpdateToAllClients();
|
SendInitialFullUpdateToAllClients();
|
||||||
SendAppearanceToAllOtherAgents();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -3383,6 +3382,27 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
m_attachments.Add(gobj);
|
m_attachments.Add(gobj);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Get the scene object attached to the given point.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="attachmentPoint"></param>
|
||||||
|
/// <returns>Returns an empty list if there were no attachments at the point.</returns>
|
||||||
|
public List<SceneObjectGroup> GetAttachments(uint attachmentPoint)
|
||||||
|
{
|
||||||
|
List<SceneObjectGroup> attachments = new List<SceneObjectGroup>();
|
||||||
|
|
||||||
|
lock (m_attachments)
|
||||||
|
{
|
||||||
|
foreach (SceneObjectGroup so in m_attachments)
|
||||||
|
{
|
||||||
|
if (attachmentPoint == so.RootPart.AttachmentPoint)
|
||||||
|
attachments.Add(so);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return attachments;
|
||||||
|
}
|
||||||
|
|
||||||
public bool HasAttachments()
|
public bool HasAttachments()
|
||||||
{
|
{
|
||||||
|
|
|
@ -9137,8 +9137,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
// we send to all
|
// we send to all
|
||||||
landData.MediaID = new UUID(texture);
|
landData.MediaID = new UUID(texture);
|
||||||
landData.MediaAutoScale = autoAlign ? (byte)1 : (byte)0;
|
landData.MediaAutoScale = autoAlign ? (byte)1 : (byte)0;
|
||||||
landData.MediaSize[0] = width;
|
landData.MediaWidth = width;
|
||||||
landData.MediaSize[1] = height;
|
landData.MediaHeight = height;
|
||||||
landData.MediaType = mediaType;
|
landData.MediaType = mediaType;
|
||||||
|
|
||||||
// do that one last, it will cause a ParcelPropertiesUpdate
|
// do that one last, it will cause a ParcelPropertiesUpdate
|
||||||
|
@ -9224,8 +9224,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
list.Add(new LSL_String(World.GetLandData(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y).MediaType));
|
list.Add(new LSL_String(World.GetLandData(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y).MediaType));
|
||||||
break;
|
break;
|
||||||
case ParcelMediaCommandEnum.Size:
|
case ParcelMediaCommandEnum.Size:
|
||||||
list.Add(new LSL_String(World.GetLandData(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y).MediaSize[0]));
|
list.Add(new LSL_String(World.GetLandData(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y).MediaWidth));
|
||||||
list.Add(new LSL_String(World.GetLandData(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y).MediaSize[1]));
|
list.Add(new LSL_String(World.GetLandData(m_host.AbsolutePosition.X, m_host.AbsolutePosition.Y).MediaHeight));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
ParcelMediaCommandEnum mediaCommandEnum = ParcelMediaCommandEnum.Url;
|
ParcelMediaCommandEnum mediaCommandEnum = ParcelMediaCommandEnum.Url;
|
||||||
|
|
|
@ -293,13 +293,35 @@ namespace OpenSim.Services.InventoryService
|
||||||
|
|
||||||
public virtual bool AddFolder(InventoryFolderBase folder)
|
public virtual bool AddFolder(InventoryFolderBase folder)
|
||||||
{
|
{
|
||||||
|
InventoryFolderBase check = GetFolder(folder);
|
||||||
|
if (check != null)
|
||||||
|
return false;
|
||||||
|
|
||||||
XInventoryFolder xFolder = ConvertFromOpenSim(folder);
|
XInventoryFolder xFolder = ConvertFromOpenSim(folder);
|
||||||
return m_Database.StoreFolder(xFolder);
|
return m_Database.StoreFolder(xFolder);
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual bool UpdateFolder(InventoryFolderBase folder)
|
public virtual bool UpdateFolder(InventoryFolderBase folder)
|
||||||
{
|
{
|
||||||
return AddFolder(folder);
|
XInventoryFolder xFolder = ConvertFromOpenSim(folder);
|
||||||
|
InventoryFolderBase check = GetFolder(folder);
|
||||||
|
if (check == null)
|
||||||
|
return AddFolder(folder);
|
||||||
|
|
||||||
|
if (check.Type != -1 || xFolder.type != -1)
|
||||||
|
{
|
||||||
|
if (xFolder.version > check.Version)
|
||||||
|
return false;
|
||||||
|
check.Version = (ushort)xFolder.version;
|
||||||
|
xFolder = ConvertFromOpenSim(check);
|
||||||
|
return m_Database.StoreFolder(xFolder);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (xFolder.version < check.Version)
|
||||||
|
xFolder.version = check.Version;
|
||||||
|
xFolder.folderID = check.ID;
|
||||||
|
|
||||||
|
return m_Database.StoreFolder(xFolder);
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual bool MoveFolder(InventoryFolderBase folder)
|
public virtual bool MoveFolder(InventoryFolderBase folder)
|
||||||
|
|
Loading…
Reference in New Issue