diff options
16 files changed, 148 insertions, 75 deletions
diff --git a/OpenSim/Framework/IClientAPI.cs b/OpenSim/Framework/IClientAPI.cs index 6be2bd7..5909ce1 100644 --- a/OpenSim/Framework/IClientAPI.cs +++ b/OpenSim/Framework/IClientAPI.cs | |||
@@ -1158,6 +1158,7 @@ namespace OpenSim.Framework | |||
1158 | /// </summary> | 1158 | /// </summary> |
1159 | /// <param name="Item"></param> | 1159 | /// <param name="Item"></param> |
1160 | void SendInventoryItemCreateUpdate(InventoryItemBase Item, uint callbackId); | 1160 | void SendInventoryItemCreateUpdate(InventoryItemBase Item, uint callbackId); |
1161 | void SendInventoryItemCreateUpdate(InventoryItemBase Item, UUID transactionID, uint callbackId); | ||
1161 | 1162 | ||
1162 | void SendRemoveInventoryItem(UUID itemID); | 1163 | void SendRemoveInventoryItem(UUID itemID); |
1163 | 1164 | ||
diff --git a/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs b/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs index db088e7..c13c65b 100644 --- a/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs +++ b/OpenSim/Framework/Servers/HttpServer/PollServiceRequestManager.cs | |||
@@ -33,6 +33,7 @@ using log4net; | |||
33 | using HttpServer; | 33 | using HttpServer; |
34 | using OpenSim.Framework; | 34 | using OpenSim.Framework; |
35 | using OpenSim.Framework.Monitoring; | 35 | using OpenSim.Framework.Monitoring; |
36 | using Amib.Threading; | ||
36 | 37 | ||
37 | 38 | ||
38 | /* | 39 | /* |
@@ -185,6 +186,8 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
185 | private bool m_running = true; | 186 | private bool m_running = true; |
186 | private int slowCount = 0; | 187 | private int slowCount = 0; |
187 | 188 | ||
189 | private SmartThreadPool m_threadPool = new SmartThreadPool(20000, 12, 2); | ||
190 | |||
188 | // private int m_timeout = 1000; // increase timeout 250; now use the event one | 191 | // private int m_timeout = 1000; // increase timeout 250; now use the event one |
189 | 192 | ||
190 | public PollServiceRequestManager(BaseHttpServer pSrv, uint pWorkerThreadCount, int pTimeout) | 193 | public PollServiceRequestManager(BaseHttpServer pSrv, uint pWorkerThreadCount, int pTimeout) |
@@ -353,18 +356,46 @@ namespace OpenSim.Framework.Servers.HttpServer | |||
353 | continue; | 356 | continue; |
354 | } | 357 | } |
355 | 358 | ||
356 | try | 359 | // "Normal" means the viewer evebt queue. We need to push these out fast. |
360 | // Process them inline. The rest go to the thread pool. | ||
361 | if (req.PollServiceArgs.Type == PollServiceEventArgs.EventType.Normal) | ||
357 | { | 362 | { |
358 | Hashtable responsedata = req.PollServiceArgs.GetEvents(req.RequestID, req.PollServiceArgs.Id, str.ReadToEnd()); | 363 | try |
359 | DoHTTPGruntWork(m_server, req, responsedata); | 364 | { |
365 | Hashtable responsedata = req.PollServiceArgs.GetEvents(req.RequestID, req.PollServiceArgs.Id, str.ReadToEnd()); | ||
366 | DoHTTPGruntWork(m_server, req, responsedata); | ||
367 | } | ||
368 | catch (ObjectDisposedException) // Browser aborted before we could read body, server closed the stream | ||
369 | { | ||
370 | // Ignore it, no need to reply | ||
371 | } | ||
372 | finally | ||
373 | { | ||
374 | str.Close(); | ||
375 | } | ||
360 | } | 376 | } |
361 | catch (ObjectDisposedException) // Browser aborted before we could read body, server closed the stream | 377 | else |
362 | { | 378 | { |
363 | // Ignore it, no need to reply | 379 | m_threadPool.QueueWorkItem(x => |
380 | { | ||
381 | try | ||
382 | { | ||
383 | Hashtable responsedata = req.PollServiceArgs.GetEvents(req.RequestID, req.PollServiceArgs.Id, str.ReadToEnd()); | ||
384 | DoHTTPGruntWork(m_server, req, responsedata); | ||
385 | } | ||
386 | catch (ObjectDisposedException) // Browser aborted before we could read body, server closed the stream | ||
387 | { | ||
388 | // Ignore it, no need to reply | ||
389 | } | ||
390 | finally | ||
391 | { | ||
392 | str.Close(); | ||
393 | } | ||
394 | |||
395 | return null; | ||
396 | }, null); | ||
364 | } | 397 | } |
365 | 398 | ||
366 | str.Close(); | ||
367 | |||
368 | } | 399 | } |
369 | else | 400 | else |
370 | { | 401 | { |
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/MeshCost.cs b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/MeshCost.cs index f03d8d8..66bb429 100644 --- a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/MeshCost.cs +++ b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/MeshCost.cs | |||
@@ -35,10 +35,13 @@ namespace OpenSim.Region.ClientStack.Linden | |||
35 | // fees are normalized to 1.0 | 35 | // fees are normalized to 1.0 |
36 | // this parameters scale them to basic cost ( so 1.0 translates to 10 ) | 36 | // this parameters scale them to basic cost ( so 1.0 translates to 10 ) |
37 | 37 | ||
38 | public float ModelMeshCostFactor = 1.0f; // scale total cost relative to basic (excluding textures) | 38 | public float ModelMeshCostFactor = 0f; //Free |
39 | public float ModelTextureCostFactor = 1.0f; // scale textures fee to basic. | 39 | public float ModelMinCostFactor = 0f; // Free |
40 | public float ModelMinCostFactor = 0.5f; // minimum total model free excluding textures | 40 | //public float ModelMeshCostFactor = 1.0f; // scale total cost relative to basic (excluding textures) |
41 | //public float ModelMinCostFactor = 0.5f; // minimum total model free excluding textures | ||
41 | 42 | ||
43 | public float ModelTextureCostFactor = 1.00f; // keep full price because texture price | ||
44 | // is based on it's storage needs not on usability | ||
42 | // itens costs in normalized values | 45 | // itens costs in normalized values |
43 | // ie will be multiplied by basicCost and factors above | 46 | // ie will be multiplied by basicCost and factors above |
44 | const float primCreationCost = 0.002f; // extra cost for each prim creation overhead | 47 | const float primCreationCost = 0.002f; // extra cost for each prim creation overhead |
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/GetTextureModule.cs b/OpenSim/Region/ClientStack/Linden/Caps/GetTextureModule.cs index 0ac56ec..2000279 100644 --- a/OpenSim/Region/ClientStack/Linden/Caps/GetTextureModule.cs +++ b/OpenSim/Region/ClientStack/Linden/Caps/GetTextureModule.cs | |||
@@ -146,14 +146,14 @@ namespace OpenSim.Region.ClientStack.Linden | |||
146 | { | 146 | { |
147 | m_scene = scene; | 147 | m_scene = scene; |
148 | 148 | ||
149 | HasEvents = (x, y) => { return this.responses.ContainsKey(x); }; | 149 | HasEvents = (x, y) => { lock (responses) return responses.ContainsKey(x); }; |
150 | GetEvents = (x, y, s) => | 150 | GetEvents = (x, y, s) => |
151 | { | 151 | { |
152 | lock (responses) | 152 | lock (responses) |
153 | { | 153 | { |
154 | try | 154 | try |
155 | { | 155 | { |
156 | return this.responses[x]; | 156 | return responses[x]; |
157 | } | 157 | } |
158 | finally | 158 | finally |
159 | { | 159 | { |
@@ -165,15 +165,15 @@ namespace OpenSim.Region.ClientStack.Linden | |||
165 | Request = (x, y) => | 165 | Request = (x, y) => |
166 | { | 166 | { |
167 | y["RequestID"] = x.ToString(); | 167 | y["RequestID"] = x.ToString(); |
168 | lock (this.requests) | 168 | lock (requests) |
169 | this.requests.Add(y); | 169 | requests.Add(y); |
170 | 170 | ||
171 | m_queue.Enqueue(this); | 171 | m_queue.Enqueue(this); |
172 | }; | 172 | }; |
173 | 173 | ||
174 | NoEvents = (x, y) => | 174 | NoEvents = (x, y) => |
175 | { | 175 | { |
176 | lock (this.requests) | 176 | lock (requests) |
177 | { | 177 | { |
178 | Hashtable request = requests.Find(id => id["RequestID"].ToString() == x.ToString()); | 178 | Hashtable request = requests.Find(id => id["RequestID"].ToString() == x.ToString()); |
179 | requests.Remove(request); | 179 | requests.Remove(request); |
@@ -198,7 +198,7 @@ namespace OpenSim.Region.ClientStack.Linden | |||
198 | 198 | ||
199 | try | 199 | try |
200 | { | 200 | { |
201 | lock (this.requests) | 201 | lock (requests) |
202 | { | 202 | { |
203 | request = requests[0]; | 203 | request = requests[0]; |
204 | requests.RemoveAt(0); | 204 | requests.RemoveAt(0); |
@@ -221,8 +221,10 @@ namespace OpenSim.Region.ClientStack.Linden | |||
221 | response["content_type"] = "text/plain"; | 221 | response["content_type"] = "text/plain"; |
222 | response["keepalive"] = false; | 222 | response["keepalive"] = false; |
223 | response["reusecontext"] = false; | 223 | response["reusecontext"] = false; |
224 | |||
224 | lock (responses) | 225 | lock (responses) |
225 | responses[requestID] = response; | 226 | responses[requestID] = response; |
227 | |||
226 | return; | 228 | return; |
227 | } | 229 | } |
228 | 230 | ||
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/WebFetchInvDescModule.cs b/OpenSim/Region/ClientStack/Linden/Caps/WebFetchInvDescModule.cs index 4908c2c..f76ea74 100644 --- a/OpenSim/Region/ClientStack/Linden/Caps/WebFetchInvDescModule.cs +++ b/OpenSim/Region/ClientStack/Linden/Caps/WebFetchInvDescModule.cs | |||
@@ -144,31 +144,34 @@ namespace OpenSim.Region.ClientStack.Linden | |||
144 | public PollServiceInventoryEventArgs(UUID pId) : | 144 | public PollServiceInventoryEventArgs(UUID pId) : |
145 | base(null, null, null, null, pId, 30000) | 145 | base(null, null, null, null, pId, 30000) |
146 | { | 146 | { |
147 | HasEvents = (x, y) => { return this.responses.ContainsKey(x); }; | 147 | HasEvents = (x, y) => { lock (responses) return responses.ContainsKey(x); }; |
148 | GetEvents = (x, y, s) => | 148 | GetEvents = (x, y, s) => |
149 | { | 149 | { |
150 | try | 150 | lock (responses) |
151 | { | 151 | { |
152 | return this.responses[x]; | 152 | try |
153 | } | 153 | { |
154 | finally | 154 | return responses[x]; |
155 | { | 155 | } |
156 | responses.Remove(x); | 156 | finally |
157 | { | ||
158 | responses.Remove(x); | ||
159 | } | ||
157 | } | 160 | } |
158 | }; | 161 | }; |
159 | 162 | ||
160 | Request = (x, y) => | 163 | Request = (x, y) => |
161 | { | 164 | { |
162 | y["RequestID"] = x.ToString(); | 165 | y["RequestID"] = x.ToString(); |
163 | lock (this.requests) | 166 | lock (requests) |
164 | this.requests.Add(y); | 167 | requests.Add(y); |
165 | 168 | ||
166 | m_queue.Enqueue(this); | 169 | m_queue.Enqueue(this); |
167 | }; | 170 | }; |
168 | 171 | ||
169 | NoEvents = (x, y) => | 172 | NoEvents = (x, y) => |
170 | { | 173 | { |
171 | lock (this.requests) | 174 | lock (requests) |
172 | { | 175 | { |
173 | Hashtable request = requests.Find(id => id["RequestID"].ToString() == x.ToString()); | 176 | Hashtable request = requests.Find(id => id["RequestID"].ToString() == x.ToString()); |
174 | requests.Remove(request); | 177 | requests.Remove(request); |
@@ -192,7 +195,7 @@ namespace OpenSim.Region.ClientStack.Linden | |||
192 | 195 | ||
193 | try | 196 | try |
194 | { | 197 | { |
195 | lock (this.requests) | 198 | lock (requests) |
196 | { | 199 | { |
197 | request = requests[0]; | 200 | request = requests[0]; |
198 | requests.RemoveAt(0); | 201 | requests.RemoveAt(0); |
@@ -214,7 +217,8 @@ namespace OpenSim.Region.ClientStack.Linden | |||
214 | 217 | ||
215 | response["str_response_string"] = m_webFetchHandler.FetchInventoryDescendentsRequest(request["body"].ToString(), String.Empty, String.Empty, null, null); | 218 | response["str_response_string"] = m_webFetchHandler.FetchInventoryDescendentsRequest(request["body"].ToString(), String.Empty, String.Empty, null, null); |
216 | 219 | ||
217 | responses[requestID] = response; | 220 | lock (responses) |
221 | responses[requestID] = response; | ||
218 | } | 222 | } |
219 | } | 223 | } |
220 | 224 | ||
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs index 7749ef3..ee28914 100644 --- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs | |||
@@ -2067,9 +2067,14 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
2067 | OutPacket(bulkUpdate, ThrottleOutPacketType.Asset); | 2067 | OutPacket(bulkUpdate, ThrottleOutPacketType.Asset); |
2068 | } | 2068 | } |
2069 | 2069 | ||
2070 | /// <see>IClientAPI.SendInventoryItemCreateUpdate(InventoryItemBase)</see> | ||
2071 | public void SendInventoryItemCreateUpdate(InventoryItemBase Item, uint callbackId) | 2070 | public void SendInventoryItemCreateUpdate(InventoryItemBase Item, uint callbackId) |
2072 | { | 2071 | { |
2072 | SendInventoryItemCreateUpdate(Item, UUID.Zero, callbackId); | ||
2073 | } | ||
2074 | |||
2075 | /// <see>IClientAPI.SendInventoryItemCreateUpdate(InventoryItemBase)</see> | ||
2076 | public void SendInventoryItemCreateUpdate(InventoryItemBase Item, UUID transactionID, uint callbackId) | ||
2077 | { | ||
2073 | const uint FULL_MASK_PERMISSIONS = (uint)PermissionMask.All; | 2078 | const uint FULL_MASK_PERMISSIONS = (uint)PermissionMask.All; |
2074 | 2079 | ||
2075 | UpdateCreateInventoryItemPacket InventoryReply | 2080 | UpdateCreateInventoryItemPacket InventoryReply |
@@ -2079,6 +2084,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
2079 | // TODO: don't create new blocks if recycling an old packet | 2084 | // TODO: don't create new blocks if recycling an old packet |
2080 | InventoryReply.AgentData.AgentID = AgentId; | 2085 | InventoryReply.AgentData.AgentID = AgentId; |
2081 | InventoryReply.AgentData.SimApproved = true; | 2086 | InventoryReply.AgentData.SimApproved = true; |
2087 | InventoryReply.AgentData.TransactionID = transactionID; | ||
2082 | InventoryReply.InventoryData = new UpdateCreateInventoryItemPacket.InventoryDataBlock[1]; | 2088 | InventoryReply.InventoryData = new UpdateCreateInventoryItemPacket.InventoryDataBlock[1]; |
2083 | InventoryReply.InventoryData[0] = new UpdateCreateInventoryItemPacket.InventoryDataBlock(); | 2089 | InventoryReply.InventoryData[0] = new UpdateCreateInventoryItemPacket.InventoryDataBlock(); |
2084 | InventoryReply.InventoryData[0].ItemID = Item.ID; | 2090 | InventoryReply.InventoryData[0].ItemID = Item.ID; |
diff --git a/OpenSim/Region/CoreModules/Agent/AssetTransaction/AgentAssetsTransactions.cs b/OpenSim/Region/CoreModules/Agent/AssetTransaction/AgentAssetsTransactions.cs index b557ffe..8a4fd8f 100644 --- a/OpenSim/Region/CoreModules/Agent/AssetTransaction/AgentAssetsTransactions.cs +++ b/OpenSim/Region/CoreModules/Agent/AssetTransaction/AgentAssetsTransactions.cs | |||
@@ -146,7 +146,7 @@ namespace OpenSim.Region.CoreModules.Agent.AssetTransaction | |||
146 | } | 146 | } |
147 | } | 147 | } |
148 | 148 | ||
149 | public void RequestCreateInventoryItem(IClientAPI remoteClient, | 149 | public bool RequestCreateInventoryItem(IClientAPI remoteClient, |
150 | UUID transactionID, UUID folderID, uint callbackID, | 150 | UUID transactionID, UUID folderID, uint callbackID, |
151 | string description, string name, sbyte invType, | 151 | string description, string name, sbyte invType, |
152 | sbyte type, byte wearableType, uint nextOwnerMask) | 152 | sbyte type, byte wearableType, uint nextOwnerMask) |
@@ -160,14 +160,16 @@ namespace OpenSim.Region.CoreModules.Agent.AssetTransaction | |||
160 | } | 160 | } |
161 | 161 | ||
162 | if (uploader != null) | 162 | if (uploader != null) |
163 | { | ||
163 | uploader.RequestCreateInventoryItem( | 164 | uploader.RequestCreateInventoryItem( |
164 | remoteClient, transactionID, folderID, | 165 | remoteClient, transactionID, folderID, |
165 | callbackID, description, name, invType, type, | 166 | callbackID, description, name, invType, type, |
166 | wearableType, nextOwnerMask); | 167 | wearableType, nextOwnerMask); |
167 | else | 168 | |
168 | m_log.ErrorFormat( | 169 | return true; |
169 | "[AGENT ASSET TRANSACTIONS]: Could not find uploader with transaction ID {0} when handling request to create inventory item {1} from {2}", | 170 | } |
170 | transactionID, name, remoteClient.Name); | 171 | |
172 | return false; | ||
171 | } | 173 | } |
172 | 174 | ||
173 | /// <summary> | 175 | /// <summary> |
diff --git a/OpenSim/Region/CoreModules/Agent/AssetTransaction/AssetTransactionModule.cs b/OpenSim/Region/CoreModules/Agent/AssetTransaction/AssetTransactionModule.cs index 7081989..441c4ff 100644 --- a/OpenSim/Region/CoreModules/Agent/AssetTransaction/AssetTransactionModule.cs +++ b/OpenSim/Region/CoreModules/Agent/AssetTransaction/AssetTransactionModule.cs | |||
@@ -158,7 +158,7 @@ namespace OpenSim.Region.CoreModules.Agent.AssetTransaction | |||
158 | /// <param name="type"></param> | 158 | /// <param name="type"></param> |
159 | /// <param name="wearableType"></param> | 159 | /// <param name="wearableType"></param> |
160 | /// <param name="nextOwnerMask"></param> | 160 | /// <param name="nextOwnerMask"></param> |
161 | public void HandleItemCreationFromTransaction(IClientAPI remoteClient, | 161 | public bool HandleItemCreationFromTransaction(IClientAPI remoteClient, |
162 | UUID transactionID, UUID folderID, uint callbackID, | 162 | UUID transactionID, UUID folderID, uint callbackID, |
163 | string description, string name, sbyte invType, | 163 | string description, string name, sbyte invType, |
164 | sbyte type, byte wearableType, uint nextOwnerMask) | 164 | sbyte type, byte wearableType, uint nextOwnerMask) |
@@ -169,7 +169,7 @@ namespace OpenSim.Region.CoreModules.Agent.AssetTransaction | |||
169 | AgentAssetTransactions transactions = | 169 | AgentAssetTransactions transactions = |
170 | GetUserTransactions(remoteClient.AgentId); | 170 | GetUserTransactions(remoteClient.AgentId); |
171 | 171 | ||
172 | transactions.RequestCreateInventoryItem(remoteClient, transactionID, | 172 | return transactions.RequestCreateInventoryItem(remoteClient, transactionID, |
173 | folderID, callbackID, description, name, invType, type, | 173 | folderID, callbackID, description, name, invType, type, |
174 | wearableType, nextOwnerMask); | 174 | wearableType, nextOwnerMask); |
175 | } | 175 | } |
diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs index 9a56f42..50f5f68 100644 --- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs +++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs | |||
@@ -186,44 +186,43 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess | |||
186 | if (folder == null || folder.Owner != remoteClient.AgentId) | 186 | if (folder == null || folder.Owner != remoteClient.AgentId) |
187 | return; | 187 | return; |
188 | 188 | ||
189 | if (transactionID == UUID.Zero) | 189 | if (transactionID != UUID.Zero) |
190 | { | 190 | { |
191 | ScenePresence presence; | 191 | IAgentAssetTransactions agentTransactions = m_Scene.AgentTransactionsModule; |
192 | if (m_Scene.TryGetScenePresence(remoteClient.AgentId, out presence)) | 192 | if (agentTransactions != null) |
193 | { | 193 | { |
194 | byte[] data = null; | 194 | if (agentTransactions.HandleItemCreationFromTransaction( |
195 | remoteClient, transactionID, folderID, callbackID, description, | ||
196 | name, invType, assetType, wearableType, nextOwnerMask)) | ||
197 | return; | ||
198 | } | ||
199 | } | ||
195 | 200 | ||
196 | if (invType == (sbyte)InventoryType.Landmark && presence != null) | 201 | ScenePresence presence; |
197 | { | 202 | if (m_Scene.TryGetScenePresence(remoteClient.AgentId, out presence)) |
198 | string suffix = string.Empty, prefix = string.Empty; | 203 | { |
199 | string strdata = GenerateLandmark(presence, out prefix, out suffix); | 204 | byte[] data = null; |
200 | data = Encoding.ASCII.GetBytes(strdata); | ||
201 | name = prefix + name; | ||
202 | description += suffix; | ||
203 | } | ||
204 | 205 | ||
205 | AssetBase asset = m_Scene.CreateAsset(name, description, assetType, data, remoteClient.AgentId); | 206 | if (invType == (sbyte)InventoryType.Landmark && presence != null) |
206 | m_Scene.AssetService.Store(asset); | ||
207 | m_Scene.CreateNewInventoryItem( | ||
208 | remoteClient, remoteClient.AgentId.ToString(), string.Empty, folderID, | ||
209 | name, description, 0, callbackID, asset, invType, nextOwnerMask, creationDate); | ||
210 | } | ||
211 | else | ||
212 | { | 207 | { |
213 | m_log.ErrorFormat( | 208 | string suffix = string.Empty, prefix = string.Empty; |
214 | "[INVENTORY ACCESS MODULE]: ScenePresence for agent uuid {0} unexpectedly not found in CreateNewInventoryItem", | 209 | string strdata = GenerateLandmark(presence, out prefix, out suffix); |
215 | remoteClient.AgentId); | 210 | data = Encoding.ASCII.GetBytes(strdata); |
211 | name = prefix + name; | ||
212 | description += suffix; | ||
216 | } | 213 | } |
214 | |||
215 | AssetBase asset = m_Scene.CreateAsset(name, description, assetType, data, remoteClient.AgentId); | ||
216 | m_Scene.AssetService.Store(asset); | ||
217 | m_Scene.CreateNewInventoryItem( | ||
218 | remoteClient, remoteClient.AgentId.ToString(), string.Empty, folderID, | ||
219 | name, description, 0, callbackID, asset, invType, nextOwnerMask, creationDate,transactionID); | ||
217 | } | 220 | } |
218 | else | 221 | else |
219 | { | 222 | { |
220 | IAgentAssetTransactions agentTransactions = m_Scene.AgentTransactionsModule; | 223 | m_log.ErrorFormat( |
221 | if (agentTransactions != null) | 224 | "[INVENTORY ACCESS MODULE]: ScenePresence for agent uuid {0} unexpectedly not found in CreateNewInventoryItem", |
222 | { | 225 | remoteClient.AgentId); |
223 | agentTransactions.HandleItemCreationFromTransaction( | ||
224 | remoteClient, transactionID, folderID, callbackID, description, | ||
225 | name, invType, assetType, wearableType, nextOwnerMask); | ||
226 | } | ||
227 | } | 226 | } |
228 | } | 227 | } |
229 | 228 | ||
diff --git a/OpenSim/Region/Framework/Interfaces/IAgentAssetTransactions.cs b/OpenSim/Region/Framework/Interfaces/IAgentAssetTransactions.cs index 0cc8fb6..e0aad2b 100644 --- a/OpenSim/Region/Framework/Interfaces/IAgentAssetTransactions.cs +++ b/OpenSim/Region/Framework/Interfaces/IAgentAssetTransactions.cs | |||
@@ -36,7 +36,7 @@ namespace OpenSim.Region.Framework.Interfaces | |||
36 | void HandleItemUpdateFromTransaction(IClientAPI remoteClient, UUID transactionID, | 36 | void HandleItemUpdateFromTransaction(IClientAPI remoteClient, UUID transactionID, |
37 | InventoryItemBase item); | 37 | InventoryItemBase item); |
38 | 38 | ||
39 | void HandleItemCreationFromTransaction(IClientAPI remoteClient, UUID transactionID, UUID folderID, | 39 | bool HandleItemCreationFromTransaction(IClientAPI remoteClient, UUID transactionID, UUID folderID, |
40 | uint callbackID, string description, string name, sbyte invType, | 40 | uint callbackID, string description, string name, sbyte invType, |
41 | sbyte type, byte wearableType, uint nextOwnerMask); | 41 | sbyte type, byte wearableType, uint nextOwnerMask); |
42 | 42 | ||
diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs index 2d9a035..dd9210f 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | |||
@@ -904,11 +904,22 @@ namespace OpenSim.Region.Framework.Scenes | |||
904 | public void CreateNewInventoryItem( | 904 | public void CreateNewInventoryItem( |
905 | IClientAPI remoteClient, string creatorID, string creatorData, UUID folderID, | 905 | IClientAPI remoteClient, string creatorID, string creatorData, UUID folderID, |
906 | string name, string description, uint flags, uint callbackID, | 906 | string name, string description, uint flags, uint callbackID, |
907 | AssetBase asset, sbyte invType, uint nextOwnerMask, int creationDate) | 907 | AssetBase asset, sbyte invType, uint nextOwnerMask, int creationDate, UUID transationID) |
908 | { | 908 | { |
909 | CreateNewInventoryItem( | 909 | CreateNewInventoryItem( |
910 | remoteClient, creatorID, creatorData, folderID, name, description, flags, callbackID, asset, invType, | 910 | remoteClient, creatorID, creatorData, folderID, name, description, flags, callbackID, asset, invType, |
911 | (uint)PermissionMask.All, (uint)PermissionMask.All, 0, nextOwnerMask, 0, creationDate); | 911 | (uint)PermissionMask.All, (uint)PermissionMask.All, 0, nextOwnerMask, 0, creationDate, transationID); |
912 | } | ||
913 | |||
914 | |||
915 | private void CreateNewInventoryItem( | ||
916 | IClientAPI remoteClient, string creatorID, string creatorData, UUID folderID, | ||
917 | string name, string description, uint flags, uint callbackID, AssetBase asset, sbyte invType, | ||
918 | uint baseMask, uint currentMask, uint everyoneMask, uint nextOwnerMask, uint groupMask, int creationDate) | ||
919 | { | ||
920 | CreateNewInventoryItem(remoteClient, creatorID, creatorData, folderID, | ||
921 | name, description, flags, callbackID, asset, invType, | ||
922 | baseMask, currentMask, everyoneMask, nextOwnerMask, groupMask, creationDate, UUID.Zero); | ||
912 | } | 923 | } |
913 | 924 | ||
914 | /// <summary> | 925 | /// <summary> |
@@ -933,7 +944,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
933 | private void CreateNewInventoryItem( | 944 | private void CreateNewInventoryItem( |
934 | IClientAPI remoteClient, string creatorID, string creatorData, UUID folderID, | 945 | IClientAPI remoteClient, string creatorID, string creatorData, UUID folderID, |
935 | string name, string description, uint flags, uint callbackID, AssetBase asset, sbyte invType, | 946 | string name, string description, uint flags, uint callbackID, AssetBase asset, sbyte invType, |
936 | uint baseMask, uint currentMask, uint everyoneMask, uint nextOwnerMask, uint groupMask, int creationDate) | 947 | uint baseMask, uint currentMask, uint everyoneMask, uint nextOwnerMask, uint groupMask, int creationDate,UUID transationID) |
937 | { | 948 | { |
938 | InventoryItemBase item = new InventoryItemBase(); | 949 | InventoryItemBase item = new InventoryItemBase(); |
939 | item.Owner = remoteClient.AgentId; | 950 | item.Owner = remoteClient.AgentId; |
@@ -956,7 +967,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
956 | 967 | ||
957 | if (AddInventoryItem(item)) | 968 | if (AddInventoryItem(item)) |
958 | { | 969 | { |
959 | remoteClient.SendInventoryItemCreateUpdate(item, callbackID); | 970 | remoteClient.SendInventoryItemCreateUpdate(item, transationID, callbackID); |
960 | } | 971 | } |
961 | else | 972 | else |
962 | { | 973 | { |
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs index 56d289f..e6ad89c 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | |||
@@ -2146,10 +2146,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
2146 | { | 2146 | { |
2147 | if (asset != null) | 2147 | if (asset != null) |
2148 | SculptTextureCallback(asset); | 2148 | SculptTextureCallback(asset); |
2149 | else | 2149 | // else |
2150 | m_log.WarnFormat( | 2150 | // m_log.WarnFormat( |
2151 | "[SCENE OBJECT PART]: Part {0} {1} requested mesh/sculpt data for asset id {2} from asset service but received no data", | 2151 | // "[SCENE OBJECT PART]: Part {0} {1} requested mesh/sculpt data for asset id {2} from asset service but received no data", |
2152 | Name, UUID, id); | 2152 | // Name, UUID, id); |
2153 | } | 2153 | } |
2154 | 2154 | ||
2155 | /// <summary> | 2155 | /// <summary> |
diff --git a/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs b/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs index 3b83e58..a484300 100644 --- a/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs +++ b/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs | |||
@@ -1100,7 +1100,12 @@ namespace OpenSim.Region.OptionalModules.Agent.InternetRelayClientView.Server | |||
1100 | 1100 | ||
1101 | public void SendInventoryItemCreateUpdate(InventoryItemBase Item, uint callbackId) | 1101 | public void SendInventoryItemCreateUpdate(InventoryItemBase Item, uint callbackId) |
1102 | { | 1102 | { |
1103 | 1103 | ||
1104 | } | ||
1105 | |||
1106 | public void SendInventoryItemCreateUpdate(InventoryItemBase Item, UUID transactionID, uint callbackId) | ||
1107 | { | ||
1108 | |||
1104 | } | 1109 | } |
1105 | 1110 | ||
1106 | public void SendRemoveInventoryItem(UUID itemID) | 1111 | public void SendRemoveInventoryItem(UUID itemID) |
diff --git a/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs b/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs index d00a6c0..7c693b6 100644 --- a/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs +++ b/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs | |||
@@ -739,6 +739,10 @@ namespace OpenSim.Region.OptionalModules.World.NPC | |||
739 | { | 739 | { |
740 | } | 740 | } |
741 | 741 | ||
742 | public void SendInventoryItemCreateUpdate(InventoryItemBase Item, UUID transactionID, uint callbackId) | ||
743 | { | ||
744 | } | ||
745 | |||
742 | public virtual void SendRemoveInventoryItem(UUID itemID) | 746 | public virtual void SendRemoveInventoryItem(UUID itemID) |
743 | { | 747 | { |
744 | } | 748 | } |
diff --git a/OpenSim/Tests/Common/Mock/TestClient.cs b/OpenSim/Tests/Common/Mock/TestClient.cs index 6add130..49a8d26 100644 --- a/OpenSim/Tests/Common/Mock/TestClient.cs +++ b/OpenSim/Tests/Common/Mock/TestClient.cs | |||
@@ -716,6 +716,10 @@ namespace OpenSim.Tests.Common.Mock | |||
716 | { | 716 | { |
717 | } | 717 | } |
718 | 718 | ||
719 | public void SendInventoryItemCreateUpdate(InventoryItemBase Item, UUID transactionID, uint callbackId) | ||
720 | { | ||
721 | } | ||
722 | |||
719 | public virtual void SendRemoveInventoryItem(UUID itemID) | 723 | public virtual void SendRemoveInventoryItem(UUID itemID) |
720 | { | 724 | { |
721 | } | 725 | } |
diff --git a/prebuild.xml b/prebuild.xml index d3d040f..a717bb7 100644 --- a/prebuild.xml +++ b/prebuild.xml | |||
@@ -162,6 +162,7 @@ | |||
162 | <Reference name="XMLRPC" path="../../../../bin/"/> | 162 | <Reference name="XMLRPC" path="../../../../bin/"/> |
163 | <Reference name="log4net" path="../../../../bin/"/> | 163 | <Reference name="log4net" path="../../../../bin/"/> |
164 | <Reference name="HttpServer_OpenSim" path="../../../../bin/"/> | 164 | <Reference name="HttpServer_OpenSim" path="../../../../bin/"/> |
165 | <Reference name="SmartThreadPool"/> | ||
165 | 166 | ||
166 | <Files> | 167 | <Files> |
167 | <Match pattern="*.cs" recurse="true"> | 168 | <Match pattern="*.cs" recurse="true"> |