aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ClientStack/Linden/Caps
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs8
-rw-r--r--OpenSim/Region/ClientStack/Linden/Caps/GetTextureModule.cs63
-rw-r--r--OpenSim/Region/ClientStack/Linden/Caps/WebFetchInvDescModule.cs58
3 files changed, 62 insertions, 67 deletions
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs
index 4a323d8..c705f10 100644
--- a/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs
+++ b/OpenSim/Region/ClientStack/Linden/Caps/BunchOfCaps/BunchOfCaps.cs
@@ -596,7 +596,7 @@ namespace OpenSim.Region.ClientStack.Linden
596 596
597 597
598 if(IsAtestUpload) // let user know, still showing cost estimation 598 if(IsAtestUpload) // let user know, still showing cost estimation
599 warning += "Upload will have no cost, for personal test purposes only. Other uses are forbiden. Items may not work on another region"; 599 warning += "Upload will have no cost, for testing purposes only. Other uses are prohibited. Items will not work after 48 hours or on other regions";
600 600
601 // check funds 601 // check funds
602 else 602 else
@@ -982,7 +982,7 @@ namespace OpenSim.Region.ClientStack.Linden
982 } 982 }
983 983
984 if(istest) 984 if(istest)
985 prim.Description = "For personal testing only. Other uses are forbiden"; 985 prim.Description = "For testing only. Other uses are prohibited";
986 else 986 else
987 prim.Description = ""; 987 prim.Description = "";
988 988
@@ -1066,7 +1066,7 @@ namespace OpenSim.Region.ClientStack.Linden
1066 item.AssetID = asset.FullID; 1066 item.AssetID = asset.FullID;
1067 if (istest) 1067 if (istest)
1068 { 1068 {
1069 item.Description = "For personal testing only. Other uses are forbiden"; 1069 item.Description = "For testing only. Other uses are prohibited";
1070 item.Flags = (uint) (InventoryItemFlags.SharedSingleReference); 1070 item.Flags = (uint) (InventoryItemFlags.SharedSingleReference);
1071 } 1071 }
1072 else 1072 else
@@ -1541,7 +1541,7 @@ namespace OpenSim.Region.ClientStack.Linden
1541 if (m_IsAtestUpload) 1541 if (m_IsAtestUpload)
1542 { 1542 {
1543 LLSDAssetUploadError resperror = new LLSDAssetUploadError(); 1543 LLSDAssetUploadError resperror = new LLSDAssetUploadError();
1544 resperror.message = "Upload SUCESSEFULL for testing purposes only. Other uses are forbiden. Item may not work on other region"; 1544 resperror.message = "Upload SUCESSEFULL for testing purposes only. Other uses are prohibited. Item will not work after 48 hours or on other regions";
1545 resperror.identifier = inv; 1545 resperror.identifier = inv;
1546 1546
1547 uploadComplete.error = resperror; 1547 uploadComplete.error = resperror;
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/GetTextureModule.cs b/OpenSim/Region/ClientStack/Linden/Caps/GetTextureModule.cs
index 2000279..b16076d 100644
--- a/OpenSim/Region/ClientStack/Linden/Caps/GetTextureModule.cs
+++ b/OpenSim/Region/ClientStack/Linden/Caps/GetTextureModule.cs
@@ -53,6 +53,14 @@ namespace OpenSim.Region.ClientStack.Linden
53 [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "GetTextureModule")] 53 [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "GetTextureModule")]
54 public class GetTextureModule : INonSharedRegionModule 54 public class GetTextureModule : INonSharedRegionModule
55 { 55 {
56
57 struct aPollRequest
58 {
59 public PollServiceTextureEventArgs thepoll;
60 public UUID reqID;
61 public Hashtable request;
62 }
63
56 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 64 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
57 65
58 private Scene m_scene; 66 private Scene m_scene;
@@ -64,8 +72,8 @@ namespace OpenSim.Region.ClientStack.Linden
64 private Dictionary<UUID, string> m_capsDict = new Dictionary<UUID, string>(); 72 private Dictionary<UUID, string> m_capsDict = new Dictionary<UUID, string>();
65 private static Thread[] m_workerThreads = null; 73 private static Thread[] m_workerThreads = null;
66 74
67 private static OpenMetaverse.BlockingQueue<PollServiceTextureEventArgs> m_queue = 75 private static OpenMetaverse.BlockingQueue<aPollRequest> m_queue =
68 new OpenMetaverse.BlockingQueue<PollServiceTextureEventArgs>(); 76 new OpenMetaverse.BlockingQueue<aPollRequest>();
69 77
70 #region ISharedRegionModule Members 78 #region ISharedRegionModule Members
71 79
@@ -104,7 +112,7 @@ namespace OpenSim.Region.ClientStack.Linden
104 String.Format("TextureWorkerThread{0}", i), 112 String.Format("TextureWorkerThread{0}", i),
105 ThreadPriority.Normal, 113 ThreadPriority.Normal,
106 false, 114 false,
107 true, 115 false,
108 null, 116 null,
109 int.MaxValue); 117 int.MaxValue);
110 } 118 }
@@ -129,7 +137,8 @@ namespace OpenSim.Region.ClientStack.Linden
129 ~GetTextureModule() 137 ~GetTextureModule()
130 { 138 {
131 foreach (Thread t in m_workerThreads) 139 foreach (Thread t in m_workerThreads)
132 t.Abort(); 140 Watchdog.AbortThread(t.ManagedThreadId);
141
133 } 142 }
134 143
135 private class PollServiceTextureEventArgs : PollServiceEventArgs 144 private class PollServiceTextureEventArgs : PollServiceEventArgs
@@ -142,7 +151,12 @@ namespace OpenSim.Region.ClientStack.Linden
142 private Scene m_scene; 151 private Scene m_scene;
143 152
144 public PollServiceTextureEventArgs(UUID pId, Scene scene) : 153 public PollServiceTextureEventArgs(UUID pId, Scene scene) :
145 base(null, null, null, null, pId, 30000) 154 base(null, null, null, null, pId, int.MaxValue)
155 // this should never timeout
156 // each request must be processed and return a response
157 // noevents can possible be use for nice shutdown, but not sure now
158 // the execution will provide a proper response even if it fails
159
146 { 160 {
147 m_scene = scene; 161 m_scene = scene;
148 162
@@ -164,21 +178,24 @@ namespace OpenSim.Region.ClientStack.Linden
164 178
165 Request = (x, y) => 179 Request = (x, y) =>
166 { 180 {
167 y["RequestID"] = x.ToString(); 181 aPollRequest reqinfo = new aPollRequest();
168 lock (requests) 182 reqinfo.thepoll = this;
169 requests.Add(y); 183 reqinfo.reqID = x;
184 reqinfo.request = y;
170 185
171 m_queue.Enqueue(this); 186 m_queue.Enqueue(reqinfo);
172 }; 187 };
173 188
189 // this should never happen except possible on shutdown
174 NoEvents = (x, y) => 190 NoEvents = (x, y) =>
175 { 191 {
192/*
176 lock (requests) 193 lock (requests)
177 { 194 {
178 Hashtable request = requests.Find(id => id["RequestID"].ToString() == x.ToString()); 195 Hashtable request = requests.Find(id => id["RequestID"].ToString() == x.ToString());
179 requests.Remove(request); 196 requests.Remove(request);
180 } 197 }
181 198*/
182 Hashtable response = new Hashtable(); 199 Hashtable response = new Hashtable();
183 200
184 response["int_response_code"] = 500; 201 response["int_response_code"] = 500;
@@ -191,27 +208,14 @@ namespace OpenSim.Region.ClientStack.Linden
191 }; 208 };
192 } 209 }
193 210
194 public void Process() 211 public void Process(aPollRequest requestinfo)
195 { 212 {
196 Hashtable response; 213 Hashtable response;
197 Hashtable request = null;
198 214
199 try 215 UUID requestID = requestinfo.reqID;
200 {
201 lock (requests)
202 {
203 request = requests[0];
204 requests.RemoveAt(0);
205 }
206 }
207 catch
208 {
209 return;
210 }
211
212 UUID requestID = new UUID(request["RequestID"].ToString());
213 216
214 // If the avatar is gone, don't bother to get the texture 217 // If the avatar is gone, don't bother to get the texture
218
215 if (m_scene.GetScenePresence(Id) == null) 219 if (m_scene.GetScenePresence(Id) == null)
216 { 220 {
217 response = new Hashtable(); 221 response = new Hashtable();
@@ -228,7 +232,7 @@ namespace OpenSim.Region.ClientStack.Linden
228 return; 232 return;
229 } 233 }
230 234
231 response = m_getTextureHandler.Handle(request); 235 response = m_getTextureHandler.Handle(requestinfo.request);
232 lock (responses) 236 lock (responses)
233 responses[requestID] = response; 237 responses[requestID] = response;
234 } 238 }
@@ -275,11 +279,10 @@ namespace OpenSim.Region.ClientStack.Linden
275 { 279 {
276 while (true) 280 while (true)
277 { 281 {
278 PollServiceTextureEventArgs args = m_queue.Dequeue(); 282 aPollRequest poolreq = m_queue.Dequeue();
279 283
280 args.Process(); 284 poolreq.thepoll.Process(poolreq);
281 } 285 }
282 } 286 }
283 } 287 }
284
285} 288}
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/WebFetchInvDescModule.cs b/OpenSim/Region/ClientStack/Linden/Caps/WebFetchInvDescModule.cs
index f76ea74..0f305b1 100644
--- a/OpenSim/Region/ClientStack/Linden/Caps/WebFetchInvDescModule.cs
+++ b/OpenSim/Region/ClientStack/Linden/Caps/WebFetchInvDescModule.cs
@@ -52,6 +52,13 @@ namespace OpenSim.Region.ClientStack.Linden
52 [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule")] 52 [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule")]
53 public class WebFetchInvDescModule : INonSharedRegionModule 53 public class WebFetchInvDescModule : INonSharedRegionModule
54 { 54 {
55 struct aPollRequest
56 {
57 public PollServiceInventoryEventArgs thepoll;
58 public UUID reqID;
59 public Hashtable request;
60 }
61
55 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 62 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
56 63
57 private Scene m_scene; 64 private Scene m_scene;
@@ -64,8 +71,8 @@ namespace OpenSim.Region.ClientStack.Linden
64 private Dictionary<UUID, string> m_capsDict = new Dictionary<UUID, string>(); 71 private Dictionary<UUID, string> m_capsDict = new Dictionary<UUID, string>();
65 private static Thread[] m_workerThreads = null; 72 private static Thread[] m_workerThreads = null;
66 73
67 private static OpenMetaverse.BlockingQueue<PollServiceInventoryEventArgs> m_queue = 74 private static OpenMetaverse.BlockingQueue<aPollRequest> m_queue =
68 new OpenMetaverse.BlockingQueue<PollServiceInventoryEventArgs>(); 75 new OpenMetaverse.BlockingQueue<aPollRequest>();
69 76
70 #region ISharedRegionModule Members 77 #region ISharedRegionModule Members
71 78
@@ -131,18 +138,16 @@ namespace OpenSim.Region.ClientStack.Linden
131 ~WebFetchInvDescModule() 138 ~WebFetchInvDescModule()
132 { 139 {
133 foreach (Thread t in m_workerThreads) 140 foreach (Thread t in m_workerThreads)
134 t.Abort(); 141 Watchdog.AbortThread(t.ManagedThreadId);
135 } 142 }
136 143
137 private class PollServiceInventoryEventArgs : PollServiceEventArgs 144 private class PollServiceInventoryEventArgs : PollServiceEventArgs
138 { 145 {
139 private List<Hashtable> requests =
140 new List<Hashtable>();
141 private Dictionary<UUID, Hashtable> responses = 146 private Dictionary<UUID, Hashtable> responses =
142 new Dictionary<UUID, Hashtable>(); 147 new Dictionary<UUID, Hashtable>();
143 148
144 public PollServiceInventoryEventArgs(UUID pId) : 149 public PollServiceInventoryEventArgs(UUID pId) :
145 base(null, null, null, null, pId, 30000) 150 base(null, null, null, null, pId, int.MaxValue)
146 { 151 {
147 HasEvents = (x, y) => { lock (responses) return responses.ContainsKey(x); }; 152 HasEvents = (x, y) => { lock (responses) return responses.ContainsKey(x); };
148 GetEvents = (x, y, s) => 153 GetEvents = (x, y, s) =>
@@ -162,21 +167,23 @@ namespace OpenSim.Region.ClientStack.Linden
162 167
163 Request = (x, y) => 168 Request = (x, y) =>
164 { 169 {
165 y["RequestID"] = x.ToString(); 170 aPollRequest reqinfo = new aPollRequest();
166 lock (requests) 171 reqinfo.thepoll = this;
167 requests.Add(y); 172 reqinfo.reqID = x;
173 reqinfo.request = y;
168 174
169 m_queue.Enqueue(this); 175 m_queue.Enqueue(reqinfo);
170 }; 176 };
171 177
172 NoEvents = (x, y) => 178 NoEvents = (x, y) =>
173 { 179 {
180/*
174 lock (requests) 181 lock (requests)
175 { 182 {
176 Hashtable request = requests.Find(id => id["RequestID"].ToString() == x.ToString()); 183 Hashtable request = requests.Find(id => id["RequestID"].ToString() == x.ToString());
177 requests.Remove(request); 184 requests.Remove(request);
178 } 185 }
179 186*/
180 Hashtable response = new Hashtable(); 187 Hashtable response = new Hashtable();
181 188
182 response["int_response_code"] = 500; 189 response["int_response_code"] = 500;
@@ -189,24 +196,9 @@ namespace OpenSim.Region.ClientStack.Linden
189 }; 196 };
190 } 197 }
191 198
192 public void Process() 199 public void Process(aPollRequest requestinfo)
193 { 200 {
194 Hashtable request = null; 201 UUID requestID = requestinfo.reqID;
195
196 try
197 {
198 lock (requests)
199 {
200 request = requests[0];
201 requests.RemoveAt(0);
202 }
203 }
204 catch
205 {
206 return;
207 }
208
209 UUID requestID = new UUID(request["RequestID"].ToString());
210 202
211 Hashtable response = new Hashtable(); 203 Hashtable response = new Hashtable();
212 204
@@ -215,7 +207,8 @@ namespace OpenSim.Region.ClientStack.Linden
215 response["keepalive"] = false; 207 response["keepalive"] = false;
216 response["reusecontext"] = false; 208 response["reusecontext"] = false;
217 209
218 response["str_response_string"] = m_webFetchHandler.FetchInventoryDescendentsRequest(request["body"].ToString(), String.Empty, String.Empty, null, null); 210 response["str_response_string"] = m_webFetchHandler.FetchInventoryDescendentsRequest(
211 requestinfo.request["body"].ToString(), String.Empty, String.Empty, null, null);
219 212
220 lock (responses) 213 lock (responses)
221 responses[requestID] = response; 214 responses[requestID] = response;
@@ -226,8 +219,7 @@ namespace OpenSim.Region.ClientStack.Linden
226 { 219 {
227 string capUrl = "/CAPS/" + UUID.Random() + "/"; 220 string capUrl = "/CAPS/" + UUID.Random() + "/";
228 221
229 // Register this as a poll service 222 // Register this as a poll service
230 // absurd large timeout to tune later to make a bit less than viewer
231 PollServiceInventoryEventArgs args = new PollServiceInventoryEventArgs(agentID); 223 PollServiceInventoryEventArgs args = new PollServiceInventoryEventArgs(agentID);
232 224
233 args.Type = PollServiceEventArgs.EventType.Inventory; 225 args.Type = PollServiceEventArgs.EventType.Inventory;
@@ -263,9 +255,9 @@ namespace OpenSim.Region.ClientStack.Linden
263 { 255 {
264 while (true) 256 while (true)
265 { 257 {
266 PollServiceInventoryEventArgs args = m_queue.Dequeue(); 258 aPollRequest poolreq = m_queue.Dequeue();
267 259
268 args.Process(); 260 poolreq.thepoll.Process(poolreq);
269 } 261 }
270 } 262 }
271 } 263 }