aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--OpenSim/Region/Application/OpenSim.cs16
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs3
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs1
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs21
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs295
-rw-r--r--OpenSim/Region/CoreModules/World/Archiver/ArchiveHelpers.cs64
-rw-r--r--OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs64
-rw-r--r--OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs2
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.cs8
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneBase.cs28
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectPart.cs7
-rw-r--r--OpenSim/Region/Framework/Scenes/ScenePresence.cs9
12 files changed, 269 insertions, 249 deletions
diff --git a/OpenSim/Region/Application/OpenSim.cs b/OpenSim/Region/Application/OpenSim.cs
index 1395030..a09b903 100644
--- a/OpenSim/Region/Application/OpenSim.cs
+++ b/OpenSim/Region/Application/OpenSim.cs
@@ -251,14 +251,20 @@ namespace OpenSim
251 "Save named prim to XML2", SavePrimsXml2); 251 "Save named prim to XML2", SavePrimsXml2);
252 252
253 m_console.Commands.AddCommand("region", false, "load oar", 253 m_console.Commands.AddCommand("region", false, "load oar",
254 "load oar [--merge] [--skip-assets] <oar name>", 254 "load oar [--merge] [--skip-assets] [<OAR path>]",
255 "Load a region's data from OAR archive. --merge will merge the oar with the existing scene. --skip-assets will load the oar but ignore the assets it contains", 255 "Load a region's data from an OAR archive.",
256 "--merge will merge the OAR with the existing scene." + Environment.NewLine
257 + "--skip-assets will load the OAR but ignore the assets it contains." + Environment.NewLine
258 + "The path can be either a filesystem location or a URI."
259 + " If this is not given then the command looks for an OAR named region.oar in the current directory.",
256 LoadOar); 260 LoadOar);
257 261
258 m_console.Commands.AddCommand("region", false, "save oar", 262 m_console.Commands.AddCommand("region", false, "save oar",
259 "save oar <oar name>", 263 "save oar [<OAR path>]",
260 "Save a region's data to an OAR archive", 264 "Save a region's data to an OAR archive.",
261 "More information on forthcoming options here soon", SaveOar); 265 "The OAR path must be a filesystem path."
266 + " If this is not given then the oar is saved to region.oar in the current directory.",
267 SaveOar);
262 268
263 m_console.Commands.AddCommand("region", false, "edit scale", 269 m_console.Commands.AddCommand("region", false, "edit scale",
264 "edit scale <name> <x> <y> <z>", 270 "edit scale <name> <x> <y> <z>",
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs
index dc7439c..806aa4f 100644
--- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs
@@ -37,7 +37,6 @@ using log4net;
37using OpenMetaverse; 37using OpenMetaverse;
38using OpenSim.Framework; 38using OpenSim.Framework;
39using OpenSim.Framework.Communications; 39using OpenSim.Framework.Communications;
40
41using OpenSim.Framework.Communications.Osp; 40using OpenSim.Framework.Communications.Osp;
42using OpenSim.Framework.Serialization; 41using OpenSim.Framework.Serialization;
43using OpenSim.Framework.Serialization.External; 42using OpenSim.Framework.Serialization.External;
@@ -72,7 +71,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
72 scene, 71 scene,
73 userInfo, 72 userInfo,
74 invPath, 73 invPath,
75 new GZipStream(new FileStream(loadPath, FileMode.Open), CompressionMode.Decompress)) 74 new GZipStream(ArchiveHelpers.GetStream(loadPath), CompressionMode.Decompress))
76 { 75 {
77 } 76 }
78 77
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs
index cfe3caa..8f3f65b 100644
--- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs
@@ -37,7 +37,6 @@ using OpenSim.Framework;
37using OpenSim.Framework.Serialization; 37using OpenSim.Framework.Serialization;
38using OpenSim.Framework.Serialization.External; 38using OpenSim.Framework.Serialization.External;
39using OpenSim.Framework.Communications; 39using OpenSim.Framework.Communications;
40
41using OpenSim.Framework.Communications.Osp; 40using OpenSim.Framework.Communications.Osp;
42using OpenSim.Region.CoreModules.World.Archiver; 41using OpenSim.Region.CoreModules.World.Archiver;
43using OpenSim.Region.Framework.Scenes; 42using OpenSim.Region.Framework.Scenes;
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs
index f570999..307db97 100644
--- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs
@@ -91,13 +91,26 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
91 91
92 scene.AddCommand( 92 scene.AddCommand(
93 this, "load iar", 93 this, "load iar",
94 "load iar <first> <last> <inventory path> <password> [<archive path>]", 94 "load iar <first> <last> <inventory path> <password> [<IAR path>]",
95 "Load user inventory archive.", HandleLoadInvConsoleCommand); 95 "Load user inventory archive (IAR).",
96 "<first> is user's first name." + Environment.NewLine
97 + "<last> is user's last name." + Environment.NewLine
98 + "<inventory path> is the path inside the user's inventory where the IAR should be loaded." + Environment.NewLine
99 + "<password> is the user's password." + Environment.NewLine
100 + "<IAR path> is the filesystem path or URI from which to load the IAR."
101 + string.Format(" If this is not given then the filename {0} in the current directory is used", DEFAULT_INV_BACKUP_FILENAME),
102 HandleLoadInvConsoleCommand);
96 103
97 scene.AddCommand( 104 scene.AddCommand(
98 this, "save iar", 105 this, "save iar",
99 "save iar <first> <last> <inventory path> <password> [<archive path>]", 106 "save iar <first> <last> <inventory path> <password> [<IAR path>]",
100 "Save user inventory archive.", HandleSaveInvConsoleCommand); 107 "Save user inventory archive (IAR).",
108 "<first> is the user's first name." + Environment.NewLine
109 + "<last> is the user's last name." + Environment.NewLine
110 + "<inventory path> is the path inside the user's inventory for the folder/item to be saved." + Environment.NewLine
111 + "<IAR path> is the filesystem path at which to save the IAR."
112 + string.Format(" If this is not given then the filename {0} in the current directory is used", DEFAULT_INV_BACKUP_FILENAME),
113 HandleSaveInvConsoleCommand);
101 114
102 m_aScene = scene; 115 m_aScene = scene;
103 } 116 }
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs
index 9c95e78..c81f295 100644
--- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs
@@ -38,7 +38,6 @@ using OpenSim.Framework;
38using OpenSim.Framework.Serialization; 38using OpenSim.Framework.Serialization;
39using OpenSim.Framework.Serialization.External; 39using OpenSim.Framework.Serialization.External;
40using OpenSim.Framework.Communications; 40using OpenSim.Framework.Communications;
41
42using OpenSim.Framework.Communications.Osp; 41using OpenSim.Framework.Communications.Osp;
43using OpenSim.Region.CoreModules.Avatar.Inventory.Archiver; 42using OpenSim.Region.CoreModules.Avatar.Inventory.Archiver;
44using OpenSim.Region.CoreModules.World.Serialiser; 43using OpenSim.Region.CoreModules.World.Serialiser;
@@ -77,125 +76,118 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
77 // Commenting for now! The mock inventory service needs more beef, at least for 76 // Commenting for now! The mock inventory service needs more beef, at least for
78 // GetFolderForType 77 // GetFolderForType
79 // REFACTORING PROBLEM. This needs to be rewritten. 78 // REFACTORING PROBLEM. This needs to be rewritten.
79 //[Test]
80 public void TestSaveIarV0_1()
81 {
82 TestHelper.InMethod();
83 log4net.Config.XmlConfigurator.Configure();
80 84
81// [Test] 85 InventoryArchiverModule archiverModule = new InventoryArchiverModule(true);
82// public void TestSaveIarV0_1()
83// {
84// TestHelper.InMethod();
85// //log4net.Config.XmlConfigurator.Configure();
86
87// InventoryArchiverModule archiverModule = new InventoryArchiverModule(true);
88
89// Scene scene = SceneSetupHelpers.SetupScene("Inventory");
90// SceneSetupHelpers.SetupSceneModules(scene, archiverModule);
91// CommunicationsManager cm = scene.CommsManager;
92 86
93// // Create user 87 Scene scene = SceneSetupHelpers.SetupScene("Inventory");
94// string userFirstName = "Jock"; 88 SceneSetupHelpers.SetupSceneModules(scene, archiverModule);
95// string userLastName = "Stirrup";
96// UUID userId = UUID.Parse("00000000-0000-0000-0000-000000000020");
97 89
98// lock (this) 90 // Create user
99// { 91 string userFirstName = "Jock";
100// UserProfileTestUtils.CreateUserWithInventory( 92 string userLastName = "Stirrup";
101// cm, userFirstName, userLastName, userId, InventoryReceived); 93 string userPassword = "troll";
102// Monitor.Wait(this, 60000); 94 UUID userId = UUID.Parse("00000000-0000-0000-0000-000000000020");
103// } 95 UserProfileTestUtils.CreateUserWithInventory(scene, userFirstName, userLastName, userId, userPassword);
104 96
105// // Create asset 97 // Create asset
106// SceneObjectGroup object1; 98 SceneObjectGroup object1;
107// SceneObjectPart part1; 99 SceneObjectPart part1;
108// { 100 {
109// string partName = "My Little Dog Object"; 101 string partName = "My Little Dog Object";
110// UUID ownerId = UUID.Parse("00000000-0000-0000-0000-000000000040"); 102 UUID ownerId = UUID.Parse("00000000-0000-0000-0000-000000000040");
111// PrimitiveBaseShape shape = PrimitiveBaseShape.CreateSphere(); 103 PrimitiveBaseShape shape = PrimitiveBaseShape.CreateSphere();
112// Vector3 groupPosition = new Vector3(10, 20, 30); 104 Vector3 groupPosition = new Vector3(10, 20, 30);
113// Quaternion rotationOffset = new Quaternion(20, 30, 40, 50); 105 Quaternion rotationOffset = new Quaternion(20, 30, 40, 50);
114// Vector3 offsetPosition = new Vector3(5, 10, 15); 106 Vector3 offsetPosition = new Vector3(5, 10, 15);
115 107
116// part1 108 part1
117// = new SceneObjectPart( 109 = new SceneObjectPart(
118// ownerId, shape, groupPosition, rotationOffset, offsetPosition); 110 ownerId, shape, groupPosition, rotationOffset, offsetPosition);
119// part1.Name = partName; 111 part1.Name = partName;
120 112
121// object1 = new SceneObjectGroup(part1); 113 object1 = new SceneObjectGroup(part1);
122// scene.AddNewSceneObject(object1, false); 114 scene.AddNewSceneObject(object1, false);
123// } 115 }
124
125// UUID asset1Id = UUID.Parse("00000000-0000-0000-0000-000000000060");
126// AssetBase asset1 = AssetHelpers.CreateAsset(asset1Id, object1);
127// scene.AssetService.Store(asset1);
128
129// // Create item
130// UUID item1Id = UUID.Parse("00000000-0000-0000-0000-000000000080");
131// InventoryItemBase item1 = new InventoryItemBase();
132// item1.Name = "My Little Dog";
133// item1.AssetID = asset1.FullID;
134// item1.ID = item1Id;
135// InventoryFolderBase objsFolder
136// = InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, userId, "Objects");
137// item1.Folder = objsFolder.ID;
138// scene.AddInventoryItem(userId, item1);
139
140// MemoryStream archiveWriteStream = new MemoryStream();
141// archiverModule.OnInventoryArchiveSaved += SaveCompleted;
142
143// mre.Reset();
144// archiverModule.ArchiveInventory(
145// Guid.NewGuid(), userFirstName, userLastName, "Objects", "troll", archiveWriteStream);
146// mre.WaitOne(60000, false);
147
148// byte[] archive = archiveWriteStream.ToArray();
149// MemoryStream archiveReadStream = new MemoryStream(archive);
150// TarArchiveReader tar = new TarArchiveReader(archiveReadStream);
151
152// //bool gotControlFile = false;
153// bool gotObject1File = false;
154// //bool gotObject2File = false;
155// string expectedObject1FileName = InventoryArchiveWriteRequest.CreateArchiveItemName(item1);
156// string expectedObject1FilePath = string.Format(
157// "{0}{1}{2}",
158// ArchiveConstants.INVENTORY_PATH,
159// InventoryArchiveWriteRequest.CreateArchiveFolderName(objsFolder),
160// expectedObject1FileName);
161 116
162// string filePath; 117 UUID asset1Id = UUID.Parse("00000000-0000-0000-0000-000000000060");
163// TarArchiveReader.TarEntryType tarEntryType; 118 AssetBase asset1 = AssetHelpers.CreateAsset(asset1Id, object1);
119 scene.AssetService.Store(asset1);
120
121 // Create item
122 UUID item1Id = UUID.Parse("00000000-0000-0000-0000-000000000080");
123 InventoryItemBase item1 = new InventoryItemBase();
124 item1.Name = "My Little Dog";
125 item1.AssetID = asset1.FullID;
126 item1.ID = item1Id;
127 InventoryFolderBase objsFolder
128 = InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, userId, "Objects");
129 item1.Folder = objsFolder.ID;
130 scene.AddInventoryItem(userId, item1);
131
132 MemoryStream archiveWriteStream = new MemoryStream();
133 archiverModule.OnInventoryArchiveSaved += SaveCompleted;
134
135 mre.Reset();
136 archiverModule.ArchiveInventory(
137 Guid.NewGuid(), userFirstName, userLastName, "Objects", userPassword, archiveWriteStream);
138 mre.WaitOne(60000, false);
139
140 byte[] archive = archiveWriteStream.ToArray();
141 MemoryStream archiveReadStream = new MemoryStream(archive);
142 TarArchiveReader tar = new TarArchiveReader(archiveReadStream);
143
144 //bool gotControlFile = false;
145 bool gotObject1File = false;
146 //bool gotObject2File = false;
147 string expectedObject1FileName = InventoryArchiveWriteRequest.CreateArchiveItemName(item1);
148 string expectedObject1FilePath = string.Format(
149 "{0}{1}{2}",
150 ArchiveConstants.INVENTORY_PATH,
151 InventoryArchiveWriteRequest.CreateArchiveFolderName(objsFolder),
152 expectedObject1FileName);
153
154 string filePath;
155 TarArchiveReader.TarEntryType tarEntryType;
164 156
165// Console.WriteLine("Reading archive"); 157// Console.WriteLine("Reading archive");
166 158
167// while (tar.ReadEntry(out filePath, out tarEntryType) != null) 159 while (tar.ReadEntry(out filePath, out tarEntryType) != null)
168// { 160 {
169// Console.WriteLine("Got {0}", filePath); 161 Console.WriteLine("Got {0}", filePath);
170 162
171//// if (ArchiveConstants.CONTROL_FILE_PATH == filePath) 163// if (ArchiveConstants.CONTROL_FILE_PATH == filePath)
172//// {
173//// gotControlFile = true;
174//// }
175
176// if (filePath.StartsWith(ArchiveConstants.INVENTORY_PATH) && filePath.EndsWith(".xml"))
177// { 164// {
178//// string fileName = filePath.Remove(0, "Objects/".Length); 165// gotControlFile = true;
179////
180//// if (fileName.StartsWith(part1.Name))
181//// {
182// Assert.That(expectedObject1FilePath, Is.EqualTo(filePath));
183// gotObject1File = true;
184//// }
185//// else if (fileName.StartsWith(part2.Name))
186//// {
187//// Assert.That(fileName, Is.EqualTo(expectedObject2FileName));
188//// gotObject2File = true;
189//// }
190// } 166// }
191// } 167
168 if (filePath.StartsWith(ArchiveConstants.INVENTORY_PATH) && filePath.EndsWith(".xml"))
169 {
170// string fileName = filePath.Remove(0, "Objects/".Length);
171//
172// if (fileName.StartsWith(part1.Name))
173// {
174 Assert.That(expectedObject1FilePath, Is.EqualTo(filePath));
175 gotObject1File = true;
176// }
177// else if (fileName.StartsWith(part2.Name))
178// {
179// Assert.That(fileName, Is.EqualTo(expectedObject2FileName));
180// gotObject2File = true;
181// }
182 }
183 }
192 184
193//// Assert.That(gotControlFile, Is.True, "No control file in archive"); 185// Assert.That(gotControlFile, Is.True, "No control file in archive");
194// Assert.That(gotObject1File, Is.True, "No item1 file in archive"); 186 Assert.That(gotObject1File, Is.True, "No item1 file in archive");
195//// Assert.That(gotObject2File, Is.True, "No object2 file in archive"); 187// Assert.That(gotObject2File, Is.True, "No object2 file in archive");
196 188
197// // TODO: Test presence of more files and contents of files. 189 // TODO: Test presence of more files and contents of files.
198// } 190 }
199 191
200 /// <summary> 192 /// <summary>
201 /// Test loading a V0.1 OpenSim Inventory Archive (subject to change since there is no fixed format yet) where 193 /// Test loading a V0.1 OpenSim Inventory Archive (subject to change since there is no fixed format yet) where
@@ -541,56 +533,41 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
541 /// <summary> 533 /// <summary>
542 /// Test replication of an archive path to the user's inventory. 534 /// Test replication of an archive path to the user's inventory.
543 /// </summary> 535 /// </summary>
544 //[Test] 536 [Test]
545 //public void TestReplicateArchivePathToUserInventory() 537 public void TestReplicateArchivePathToUserInventory()
546 //{ 538 {
547 // TestHelper.InMethod(); 539 TestHelper.InMethod();
548 540 //log4net.Config.XmlConfigurator.Configure();
549 // //log4net.Config.XmlConfigurator.Configure(); 541
550 542 Scene scene = SceneSetupHelpers.SetupScene("inventory");
551 // Scene scene = SceneSetupHelpers.SetupScene("inventory"); 543 UserAccount ua1 = UserProfileTestUtils.CreateUserWithInventory(scene);
552 // CommunicationsManager commsManager = scene.CommsManager; 544
553 // CachedUserInfo userInfo; 545 Dictionary <string, InventoryFolderBase> foldersCreated = new Dictionary<string, InventoryFolderBase>();
554 546 List<InventoryNodeBase> nodesLoaded = new List<InventoryNodeBase>();
555 // lock (this) 547
556 // { 548 string folder1Name = "a";
557 // // !!! REFACTORING PROBLEM. This needs to be rewritten 549 string folder2Name = "b";
558 // userInfo = UserProfileTestUtils.CreateUserWithInventory(commsManager, InventoryReceived); 550 string itemName = "c.lsl";
559 // Monitor.Wait(this, 60000); 551
560 // } 552 string folder1ArchiveName = InventoryArchiveWriteRequest.CreateArchiveFolderName(folder1Name, UUID.Random());
561 553 string folder2ArchiveName = InventoryArchiveWriteRequest.CreateArchiveFolderName(folder2Name, UUID.Random());
562 // //Console.WriteLine("userInfo.RootFolder 1: {0}", userInfo.RootFolder); 554 string itemArchiveName = InventoryArchiveWriteRequest.CreateArchiveItemName(itemName, UUID.Random());
563 555
564 // Dictionary <string, InventoryFolderBase> foldersCreated = new Dictionary<string, InventoryFolderBase>(); 556 string itemArchivePath
565 // List<InventoryNodeBase> nodesLoaded = new List<InventoryNodeBase>(); 557 = string.Format(
566 558 "{0}{1}{2}{3}",
567 // string folder1Name = "a"; 559 ArchiveConstants.INVENTORY_PATH, folder1ArchiveName, folder2ArchiveName, itemArchiveName);
568 // string folder2Name = "b"; 560
569 // string itemName = "c.lsl"; 561 new InventoryArchiveReadRequest(scene, ua1, null, (Stream)null)
570 562 .ReplicateArchivePathToUserInventory(
571 // string folder1ArchiveName = InventoryArchiveWriteRequest.CreateArchiveFolderName(folder1Name, UUID.Random()); 563 itemArchivePath, false, scene.InventoryService.GetRootFolder(ua1.PrincipalID),
572 // string folder2ArchiveName = InventoryArchiveWriteRequest.CreateArchiveFolderName(folder2Name, UUID.Random()); 564 foldersCreated, nodesLoaded);
573 // string itemArchiveName = InventoryArchiveWriteRequest.CreateArchiveItemName(itemName, UUID.Random()); 565
574 566 InventoryFolderBase folder1
575 // string itemArchivePath 567 = InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, ua1.PrincipalID, "a");
576 // = string.Format( 568 Assert.That(folder1, Is.Not.Null, "Could not find folder a");
577 // "{0}{1}{2}{3}", 569 InventoryFolderBase folder2 = InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, folder1, "b");
578 // ArchiveConstants.INVENTORY_PATH, folder1ArchiveName, folder2ArchiveName, itemArchiveName); 570 Assert.That(folder2, Is.Not.Null, "Could not find folder b");
579 571 }
580 // //Console.WriteLine("userInfo.RootFolder 2: {0}", userInfo.RootFolder);
581
582 // new InventoryArchiveReadRequest(scene, userInfo, null, (Stream)null)
583 // .ReplicateArchivePathToUserInventory(
584 // itemArchivePath, false, scene.InventoryService.GetRootFolder(userInfo.UserProfile.ID),
585 // foldersCreated, nodesLoaded);
586
587 // //Console.WriteLine("userInfo.RootFolder 3: {0}", userInfo.RootFolder);
588 // //InventoryFolderImpl folder1 = userInfo.RootFolder.FindFolderByPath("a");
589 // InventoryFolderBase folder1
590 // = InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, userInfo.UserProfile.ID, "a");
591 // Assert.That(folder1, Is.Not.Null, "Could not find folder a");
592 // InventoryFolderBase folder2 = InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, folder1, "b");
593 // Assert.That(folder2, Is.Not.Null, "Could not find folder b");
594 //}
595 } 572 }
596} 573} \ No newline at end of file
diff --git a/OpenSim/Region/CoreModules/World/Archiver/ArchiveHelpers.cs b/OpenSim/Region/CoreModules/World/Archiver/ArchiveHelpers.cs
index 880bd7c..ddc3dd7 100644
--- a/OpenSim/Region/CoreModules/World/Archiver/ArchiveHelpers.cs
+++ b/OpenSim/Region/CoreModules/World/Archiver/ArchiveHelpers.cs
@@ -25,6 +25,9 @@
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */ 26 */
27 27
28using System;
29using System.IO;
30using System.Net;
28using OpenMetaverse; 31using OpenMetaverse;
29using OpenSim.Framework.Serialization; 32using OpenSim.Framework.Serialization;
30using OpenSim.Region.Framework.Scenes; 33using OpenSim.Region.Framework.Scenes;
@@ -60,5 +63,66 @@ namespace OpenSim.Region.CoreModules.World.Archiver
60 { 63 {
61 return ArchiveConstants.CreateOarObjectPath(sog.Name, sog.UUID, sog.AbsolutePosition); 64 return ArchiveConstants.CreateOarObjectPath(sog.Name, sog.UUID, sog.AbsolutePosition);
62 } 65 }
66
67 /// <summary>
68 /// Resolve path to a working FileStream
69 /// </summary>
70 /// <param name="path"></param>
71 /// <returns></returns>
72 public static Stream GetStream(string path)
73 {
74 if (File.Exists(path))
75 {
76 return new FileStream(path, FileMode.Open, FileAccess.Read);
77 }
78 else
79 {
80 try
81 {
82 Uri uri = new Uri(path);
83 if (uri.Scheme == "file")
84 {
85 return new FileStream(uri.AbsolutePath, FileMode.Open, FileAccess.Read);
86 }
87 else
88 {
89 if (uri.Scheme != "http")
90 throw new Exception(String.Format("Unsupported URI scheme ({0})", path));
91
92 // OK, now we know we have an HTTP URI to work with
93 return URIFetch(uri);
94 }
95 }
96 catch (UriFormatException)
97 {
98 // In many cases the user will put in a plain old filename that cannot be found so assume that
99 // this is the problem rather than confusing the issue with a UriFormatException
100 throw new Exception(String.Format("Cannot find file {0}", path));
101 }
102 }
103 }
104
105 public static Stream URIFetch(Uri uri)
106 {
107 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
108
109 // request.Credentials = credentials;
110
111 request.ContentLength = 0;
112 request.KeepAlive = false;
113
114 WebResponse response = request.GetResponse();
115 Stream file = response.GetResponseStream();
116
117 // justincc: gonna ignore the content type for now and just try anything
118 //if (response.ContentType != "application/x-oar")
119 // throw new Exception(String.Format("{0} does not identify an OAR file", uri.ToString()));
120
121 if (response.ContentLength == 0)
122 throw new Exception(String.Format("{0} returned an empty file", uri.ToString()));
123
124 // return new BufferedStream(file, (int) response.ContentLength);
125 return new BufferedStream(file, 1000000);
126 }
63 } 127 }
64} \ No newline at end of file 128} \ No newline at end of file
diff --git a/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs b/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs
index 9c8193a..57b7672 100644
--- a/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs
+++ b/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs
@@ -78,7 +78,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
78 78
79 try 79 try
80 { 80 {
81 m_loadStream = new GZipStream(GetStream(loadPath), CompressionMode.Decompress); 81 m_loadStream = new GZipStream(ArchiveHelpers.GetStream(loadPath), CompressionMode.Decompress);
82 } 82 }
83 catch (EntryPointNotFoundException e) 83 catch (EntryPointNotFoundException e)
84 { 84 {
@@ -473,68 +473,6 @@ namespace OpenSim.Region.CoreModules.World.Archiver
473 } 473 }
474 474
475 /// <summary> 475 /// <summary>
476 /// Resolve path to a working FileStream
477 /// </summary>
478 /// <param name="path"></param>
479 /// <returns></returns>
480 private Stream GetStream(string path)
481 {
482 if (File.Exists(path))
483 {
484 return new FileStream(path, FileMode.Open, FileAccess.Read);
485 }
486 else
487 {
488 try
489 {
490 Uri uri = new Uri(path);
491 if (uri.Scheme == "file")
492 {
493 return new FileStream(uri.AbsolutePath, FileMode.Open, FileAccess.Read);
494 }
495 else
496 {
497 if (uri.Scheme != "http")
498 throw new Exception(String.Format("Unsupported URI scheme ({0})", path));
499
500 // OK, now we know we have an HTTP URI to work with
501
502 return URIFetch(uri);
503 }
504 }
505 catch (UriFormatException)
506 {
507 // In many cases the user will put in a plain old filename that cannot be found so assume that
508 // this is the problem rather than confusing the issue with a UriFormatException
509 throw new Exception(String.Format("Cannot find file {0}", path));
510 }
511 }
512 }
513
514 private static Stream URIFetch(Uri uri)
515 {
516 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
517
518 // request.Credentials = credentials;
519
520 request.ContentLength = 0;
521 request.KeepAlive = false;
522
523 WebResponse response = request.GetResponse();
524 Stream file = response.GetResponseStream();
525
526 // justincc: gonna ignore the content type for now and just try anything
527 //if (response.ContentType != "application/x-oar")
528 // throw new Exception(String.Format("{0} does not identify an OAR file", uri.ToString()));
529
530 if (response.ContentLength == 0)
531 throw new Exception(String.Format("{0} returned an empty file", uri.ToString()));
532
533 // return new BufferedStream(file, (int) response.ContentLength);
534 return new BufferedStream(file, 1000000);
535 }
536
537 /// <summary>
538 /// Load oar control file 476 /// Load oar control file
539 /// </summary> 477 /// </summary>
540 /// <param name="path"></param> 478 /// <param name="path"></param>
diff --git a/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs b/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs
index ac6a633..c6fb18d 100644
--- a/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs
+++ b/OpenSim/Region/CoreModules/World/WorldMap/WorldMapModule.cs
@@ -1014,7 +1014,7 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
1014 1014
1015 int lastMapRefresh = 0; 1015 int lastMapRefresh = 0;
1016 int twoDays = 172800; 1016 int twoDays = 172800;
1017 int RefreshSeconds = twoDays; 1017// int RefreshSeconds = twoDays;
1018 1018
1019 try 1019 try
1020 { 1020 {
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index 3e20766..933999e 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -2149,7 +2149,7 @@ namespace OpenSim.Region.Framework.Scenes
2149 } 2149 }
2150 2150
2151 /// <summary> 2151 /// <summary>
2152 /// Delete every object from the scene 2152 /// Delete every object from the scene. This does not include attachments worn by avatars.
2153 /// </summary> 2153 /// </summary>
2154 public void DeleteAllSceneObjects() 2154 public void DeleteAllSceneObjects()
2155 { 2155 {
@@ -2160,7 +2160,11 @@ namespace OpenSim.Region.Framework.Scenes
2160 foreach (EntityBase e in entities) 2160 foreach (EntityBase e in entities)
2161 { 2161 {
2162 if (e is SceneObjectGroup) 2162 if (e is SceneObjectGroup)
2163 DeleteSceneObject((SceneObjectGroup)e, false); 2163 {
2164 SceneObjectGroup sog = (SceneObjectGroup)e;
2165 if (!sog.IsAttachment)
2166 DeleteSceneObject((SceneObjectGroup)e, false);
2167 }
2164 } 2168 }
2165 } 2169 }
2166 } 2170 }
diff --git a/OpenSim/Region/Framework/Scenes/SceneBase.cs b/OpenSim/Region/Framework/Scenes/SceneBase.cs
index bfc19b7..ee17fbf 100644
--- a/OpenSim/Region/Framework/Scenes/SceneBase.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneBase.cs
@@ -376,6 +376,8 @@ namespace OpenSim.Region.Framework.Scenes
376 /// <param name="mod"></param> 376 /// <param name="mod"></param>
377 public void RegisterModuleInterface<M>(M mod) 377 public void RegisterModuleInterface<M>(M mod)
378 { 378 {
379 m_log.DebugFormat("[SCENE BASE]: Registering interface {0}", typeof(M));
380
379 List<Object> l = null; 381 List<Object> l = null;
380 if (!ModuleInterfaces.TryGetValue(typeof(M), out l)) 382 if (!ModuleInterfaces.TryGetValue(typeof(M), out l))
381 { 383 {
@@ -498,8 +500,31 @@ namespace OpenSim.Region.Framework.Scenes
498 } 500 }
499 } 501 }
500 502
503 /// <summary>
504 /// Call this from a region module to add a command to the OpenSim console.
505 /// </summary>
506 /// <param name="mod"></param>
507 /// <param name="command"></param>
508 /// <param name="shorthelp"></param>
509 /// <param name="longhelp"></param>
510 /// <param name="callback"></param>
501 public void AddCommand(object mod, string command, string shorthelp, string longhelp, CommandDelegate callback) 511 public void AddCommand(object mod, string command, string shorthelp, string longhelp, CommandDelegate callback)
502 { 512 {
513 AddCommand(mod, command, shorthelp, longhelp, string.Empty, callback);
514 }
515
516 /// <summary>
517 /// Call this from a region module to add a command to the OpenSim console.
518 /// </summary>
519 /// <param name="mod"></param>
520 /// <param name="command"></param>
521 /// <param name="shorthelp"></param>
522 /// <param name="longhelp"></param>
523 /// <param name="descriptivehelp"></param>
524 /// <param name="callback"></param>
525 public void AddCommand(
526 object mod, string command, string shorthelp, string longhelp, string descriptivehelp, CommandDelegate callback)
527 {
503 if (MainConsole.Instance == null) 528 if (MainConsole.Instance == null)
504 return; 529 return;
505 530
@@ -523,7 +548,8 @@ namespace OpenSim.Region.Framework.Scenes
523 else throw new Exception("AddCommand module parameter must be IRegionModule or IRegionModuleBase"); 548 else throw new Exception("AddCommand module parameter must be IRegionModule or IRegionModuleBase");
524 } 549 }
525 550
526 MainConsole.Instance.Commands.AddCommand(modulename, shared, command, shorthelp, longhelp, callback); 551 MainConsole.Instance.Commands.AddCommand(
552 modulename, shared, command, shorthelp, longhelp, descriptivehelp, callback);
527 } 553 }
528 554
529 public virtual ISceneObject DeserializeObject(string representation) 555 public virtual ISceneObject DeserializeObject(string representation)
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index 683df93..c84596b 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -1289,10 +1289,13 @@ namespace OpenSim.Region.Framework.Scenes
1289 { 1289 {
1290 m_parentGroup.Scene.ForEachScenePresence(delegate(ScenePresence avatar) 1290 m_parentGroup.Scene.ForEachScenePresence(delegate(ScenePresence avatar)
1291 { 1291 {
1292 avatar.SceneViewer.QueuePartForUpdate(this); 1292 AddFullUpdateToAvatar(avatar);
1293 }); 1293 });
1294 } 1294 }
1295 1295
1296 /// <summary>
1297 /// Tell the scene presence that it should send updates for this part to its client
1298 /// </summary>
1296 public void AddFullUpdateToAvatar(ScenePresence presence) 1299 public void AddFullUpdateToAvatar(ScenePresence presence)
1297 { 1300 {
1298 presence.SceneViewer.QueuePartForUpdate(this); 1301 presence.SceneViewer.QueuePartForUpdate(this);
@@ -1313,7 +1316,7 @@ namespace OpenSim.Region.Framework.Scenes
1313 { 1316 {
1314 m_parentGroup.Scene.ForEachScenePresence(delegate(ScenePresence avatar) 1317 m_parentGroup.Scene.ForEachScenePresence(delegate(ScenePresence avatar)
1315 { 1318 {
1316 avatar.SceneViewer.QueuePartForUpdate(this); 1319 AddTerseUpdateToAvatar(avatar);
1317 }); 1320 });
1318 } 1321 }
1319 1322
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index d7660fd..e3bbe8a 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -820,15 +820,6 @@ namespace OpenSim.Region.Framework.Scenes
820 820
821 #endregion 821 #endregion
822 822
823 /// <summary>
824 /// Add the part to the queue of parts for which we need to send an update to the client
825 /// </summary>
826 /// <param name="part"></param>
827 public void QueuePartForUpdate(SceneObjectPart part)
828 {
829 m_sceneViewer.QueuePartForUpdate(part);
830 }
831
832 public uint GenerateClientFlags(UUID ObjectID) 823 public uint GenerateClientFlags(UUID ObjectID)
833 { 824 {
834 return m_scene.Permissions.GenerateClientFlags(m_uuid, ObjectID); 825 return m_scene.Permissions.GenerateClientFlags(m_uuid, ObjectID);