aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim')
-rw-r--r--OpenSim/ApplicationPlugins/Rest/Inventory/IRestHandler.cs7
-rw-r--r--OpenSim/ApplicationPlugins/Rest/Inventory/RequestData.cs147
-rw-r--r--OpenSim/ApplicationPlugins/Rest/Inventory/Rest.cs40
-rw-r--r--OpenSim/ApplicationPlugins/Rest/Inventory/RestAssetServices.cs31
-rw-r--r--OpenSim/ApplicationPlugins/Rest/Inventory/RestHandler.cs70
-rw-r--r--OpenSim/ApplicationPlugins/Rest/Inventory/RestInventoryServices.cs325
-rw-r--r--OpenSim/ApplicationPlugins/Rest/Inventory/tests/Remote.cs26
-rw-r--r--OpenSim/Framework/AgentCircuitManager.cs6
-rw-r--r--OpenSim/Framework/Communications/Cache/CachedUserInfo.cs2
-rw-r--r--OpenSim/Framework/Communications/Cache/UserProfileCacheService.cs2
-rw-r--r--OpenSim/Framework/Communications/Capabilities/Caps.cs4
-rw-r--r--OpenSim/Framework/Communications/GridInfoService.cs14
-rw-r--r--OpenSim/Framework/IClientAPI.cs6
-rw-r--r--OpenSim/Framework/Servers/BaseHttpServer.cs24
-rw-r--r--OpenSim/Framework/Servers/BaseOpenSimServer.cs18
-rw-r--r--OpenSim/Grid/UserServer/UserLoginService.cs2
-rw-r--r--OpenSim/Region/ClientStack/LindenUDP/KillPacket.cs7
-rw-r--r--OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs14
-rw-r--r--OpenSim/Region/ClientStack/LindenUDP/LLPacketHandler.cs4
-rw-r--r--OpenSim/Region/Communications/OGS1/OGS1GridServices.cs14
-rw-r--r--OpenSim/Region/Environment/Modules/Avatar/Currency/SampleMoney/SampleMoneyModule.cs6
-rw-r--r--OpenSim/Region/Environment/Modules/InterGrid/OpenGridProtocolModule.cs138
-rw-r--r--OpenSim/Region/Environment/Modules/World/Archiver/ArchiveConstants.cs2
-rw-r--r--OpenSim/Region/Environment/Modules/World/Archiver/ArchiveReadRequest.cs6
-rw-r--r--OpenSim/Region/Environment/Modules/World/NPC/NPCAvatar.cs4
-rw-r--r--OpenSim/Region/Environment/Modules/World/WorldMap/MapImageModule.cs2
-rw-r--r--OpenSim/Region/Environment/Modules/World/WorldMap/ShadedMapTileRenderer.cs10
-rw-r--r--OpenSim/Region/Environment/Modules/World/WorldMap/TexturedMapTileRenderer.cs32
-rw-r--r--OpenSim/Region/Environment/Scenes/Scene.cs60
-rw-r--r--OpenSim/Region/Environment/Scenes/SceneCommunicationService.cs2
-rw-r--r--OpenSim/Region/Environment/Scenes/ScenePresence.cs6
-rw-r--r--OpenSim/Region/Physics/Meshing/Mesh.cs2
-rw-r--r--OpenSim/Region/Physics/Meshing/Meshmerizer.cs7
-rw-r--r--OpenSim/Region/Physics/Meshing/PrimMesher.cs97
-rw-r--r--OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs40
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs34
-rw-r--r--OpenSim/Region/ScriptEngine/XEngine/EventManager.cs3
37 files changed, 505 insertions, 709 deletions
diff --git a/OpenSim/ApplicationPlugins/Rest/Inventory/IRestHandler.cs b/OpenSim/ApplicationPlugins/Rest/Inventory/IRestHandler.cs
index 69f91e4..82dc2e4 100644
--- a/OpenSim/ApplicationPlugins/Rest/Inventory/IRestHandler.cs
+++ b/OpenSim/ApplicationPlugins/Rest/Inventory/IRestHandler.cs
@@ -23,7 +23,6 @@
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 *
27 */ 26 */
28 27
29using System; 28using System;
@@ -41,11 +40,11 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
41 40
42 public delegate void RestMethodHandler(RequestData rdata); 41 public delegate void RestMethodHandler(RequestData rdata);
43 public delegate RequestData RestMethodAllocator(OSHttpRequest request, OSHttpResponse response, string path); 42 public delegate RequestData RestMethodAllocator(OSHttpRequest request, OSHttpResponse response, string path);
44 43
45 /// <summary> 44 /// <summary>
46 /// This interface represents the boundary between the general purpose 45 /// This interface represents the boundary between the general purpose
47 /// REST plugin handling, and the functionally specific handlers. The 46 /// REST plugin handling, and the functionally specific handlers. The
48 /// handler knows only to initialize and terminate all such handlers 47 /// handler knows only to initialize and terminate all such handlers
49 /// that it finds. Implementing this interface identifies the class as 48 /// that it finds. Implementing this interface identifies the class as
50 /// a REST handler implementation. 49 /// a REST handler implementation.
51 /// </summary> 50 /// </summary>
@@ -55,7 +54,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
55 54
56 string MsgId { get; } 55 string MsgId { get; }
57 string RequestId { get; } 56 string RequestId { get; }
58 57
59 void AddPathHandler(RestMethodHandler mh, string path, RestMethodAllocator ma); 58 void AddPathHandler(RestMethodHandler mh, string path, RestMethodAllocator ma);
60 void AddStreamHandler(string httpMethod, string path, RestMethod method); 59 void AddStreamHandler(string httpMethod, string path, RestMethod method);
61 60
diff --git a/OpenSim/ApplicationPlugins/Rest/Inventory/RequestData.cs b/OpenSim/ApplicationPlugins/Rest/Inventory/RequestData.cs
index 6742402..24e5ada 100644
--- a/OpenSim/ApplicationPlugins/Rest/Inventory/RequestData.cs
+++ b/OpenSim/ApplicationPlugins/Rest/Inventory/RequestData.cs
@@ -23,7 +23,6 @@
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 *
27 */ 26 */
28 27
29using System; 28using System;
@@ -44,14 +43,14 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
44 43
45 /// <summary> 44 /// <summary>
46 /// This class represents the current REST request. It 45 /// This class represents the current REST request. It
47 /// encapsulates the request/response state and takes care 46 /// encapsulates the request/response state and takes care
48 /// of response generation without exposing the REST handler 47 /// of response generation without exposing the REST handler
49 /// to the actual mechanisms involved. 48 /// to the actual mechanisms involved.
50 /// 49 ///
51 /// This structure is created on entry to the Handler 50 /// This structure is created on entry to the Handler
52 /// method and is disposed of upon return. It is part of 51 /// method and is disposed of upon return. It is part of
53 /// the plug-in infrastructure, rather than the functionally 52 /// the plug-in infrastructure, rather than the functionally
54 /// specific REST handler, and fundamental changes to 53 /// specific REST handler, and fundamental changes to
55 /// this should be reflected in the Rest HandlerVersion. The 54 /// this should be reflected in the Rest HandlerVersion. The
56 /// object is instantiated, and may be extended by, any 55 /// object is instantiated, and may be extended by, any
57 /// given handler. See the inventory handler for an example 56 /// given handler. See the inventory handler for an example
@@ -84,7 +83,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
84 // Storing information in body will suppress the return of 83 // Storing information in body will suppress the return of
85 // statusBody which is only intended to report status on 84 // statusBody which is only intended to report status on
86 // requests which do not themselves ordinarily generate 85 // requests which do not themselves ordinarily generate
87 // an informational response. All of this is handled in 86 // an informational response. All of this is handled in
88 // Respond(). 87 // Respond().
89 88
90 internal byte[] buffer = null; 89 internal byte[] buffer = null;
@@ -92,8 +91,8 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
92 internal string bodyType = "text/html"; 91 internal string bodyType = "text/html";
93 92
94 // The encoding in effect is set to a server default. It may 93 // The encoding in effect is set to a server default. It may
95 // subsequently be overridden by a Content header. This 94 // subsequently be overridden by a Content header. This
96 // value is established during construction and is used 95 // value is established during construction and is used
97 // wherever encoding services are needed. 96 // wherever encoding services are needed.
98 97
99 internal Encoding encoding = Rest.Encoding; 98 internal Encoding encoding = Rest.Encoding;
@@ -110,7 +109,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
110 109
111 // The path part of the URI is decomposed. pathNodes 110 // The path part of the URI is decomposed. pathNodes
112 // is an array of every element in the URI. Parameters 111 // is an array of every element in the URI. Parameters
113 // is an array that contains only those nodes that 112 // is an array that contains only those nodes that
114 // are not a part of the authority prefix 113 // are not a part of the authority prefix
115 114
116 private string[] pathNodes = null; 115 private string[] pathNodes = null;
@@ -118,7 +117,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
118 private static readonly string[] EmptyPath = { String.Empty }; 117 private static readonly string[] EmptyPath = { String.Empty };
119 118
120 // The status code gets set during the course of processing 119 // The status code gets set during the course of processing
121 // and is the HTTP completion code. The status body is 120 // and is the HTTP completion code. The status body is
122 // initialized during construction, is appended to during the 121 // initialized during construction, is appended to during the
123 // course of execution, and is finalized during Respond 122 // course of execution, and is finalized during Respond
124 // processing. 123 // processing.
@@ -166,7 +165,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
166 // force selection of a particular authentication model 165 // force selection of a particular authentication model
167 // (choosing from amongst those supported of course) 166 // (choosing from amongst those supported of course)
168 // 167 //
169 168
170 internal bool authenticated = false; 169 internal bool authenticated = false;
171 internal string scheme = null; 170 internal string scheme = null;
172 internal string realm = Rest.Realm; 171 internal string realm = Rest.Realm;
@@ -183,7 +182,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
183 internal string userPass = String.Empty; 182 internal string userPass = String.Empty;
184 183
185 // Session related tables. These are only needed if QOP is set to "auth-sess" 184 // Session related tables. These are only needed if QOP is set to "auth-sess"
186 // and for now at least, it is not. Session related authentication is of 185 // and for now at least, it is not. Session related authentication is of
187 // questionable merit in the context of REST anyway, but it is, arguably, more 186 // questionable merit in the context of REST anyway, but it is, arguably, more
188 // secure. 187 // secure.
189 188
@@ -199,23 +198,23 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
199 198
200 private static Regex schema = new Regex("^\\s*(?<scheme>\\w+)\\s*.*", 199 private static Regex schema = new Regex("^\\s*(?<scheme>\\w+)\\s*.*",
201 RegexOptions.Compiled | RegexOptions.IgnoreCase); 200 RegexOptions.Compiled | RegexOptions.IgnoreCase);
202 201
203 private static Regex basicParms = new Regex("^\\s*(?:\\w+)\\s+(?<pval>\\S+)\\s*", 202 private static Regex basicParms = new Regex("^\\s*(?:\\w+)\\s+(?<pval>\\S+)\\s*",
204 RegexOptions.Compiled | RegexOptions.IgnoreCase); 203 RegexOptions.Compiled | RegexOptions.IgnoreCase);
205 204
206 private static Regex digestParm1 = new Regex("\\s*(?<parm>\\w+)\\s*=\\s*\"(?<pval>[^\"]+)\"", 205 private static Regex digestParm1 = new Regex("\\s*(?<parm>\\w+)\\s*=\\s*\"(?<pval>[^\"]+)\"",
207 RegexOptions.Compiled | RegexOptions.IgnoreCase); 206 RegexOptions.Compiled | RegexOptions.IgnoreCase);
208 207
209 private static Regex digestParm2 = new Regex("\\s*(?<parm>\\w+)\\s*=\\s*(?<pval>[^\\p{P}\\s]+)", 208 private static Regex digestParm2 = new Regex("\\s*(?<parm>\\w+)\\s*=\\s*(?<pval>[^\\p{P}\\s]+)",
210 RegexOptions.Compiled | RegexOptions.IgnoreCase); 209 RegexOptions.Compiled | RegexOptions.IgnoreCase);
211 210
212 private static Regex reuserPass = new Regex("(?<user>[^:]+):(?<pass>[\\S\\s]*)", 211 private static Regex reuserPass = new Regex("(?<user>[^:]+):(?<pass>[\\S\\s]*)",
213 RegexOptions.Compiled | RegexOptions.IgnoreCase); 212 RegexOptions.Compiled | RegexOptions.IgnoreCase);
214 213
215 // For efficiency, we create static instances of these objects 214 // For efficiency, we create static instances of these objects
216 215
217 private static MD5 md5hash = MD5.Create(); 216 private static MD5 md5hash = MD5.Create();
218 217
219 private static StringComparer sc = StringComparer.OrdinalIgnoreCase; 218 private static StringComparer sc = StringComparer.OrdinalIgnoreCase;
220 219
221#region properties 220#region properties
@@ -228,15 +227,15 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
228 } 227 }
229 228
230 /// <summary> 229 /// <summary>
231 /// Return a boolean indication of whether or no an authenticated user is 230 /// Return a boolean indication of whether or no an authenticated user is
232 /// associated with this request. This could be wholly integrated, but 231 /// associated with this request. This could be wholly integrated, but
233 /// that would make authentication mandatory. 232 /// that would make authentication mandatory.
234 /// </summary> 233 /// </summary>
235 234
236 internal bool IsAuthenticated 235 internal bool IsAuthenticated
237 { 236 {
238 get 237 get
239 { 238 {
240 if (Rest.Authenticate) 239 if (Rest.Authenticate)
241 { 240 {
242 if (!authenticated) 241 if (!authenticated)
@@ -258,31 +257,31 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
258 internal string[] PathNodes 257 internal string[] PathNodes
259 { 258 {
260 get 259 get
261 { 260 {
262 return pathNodes; 261 return pathNodes;
263 } 262 }
264 } 263 }
265 264
266 /// <summary> 265 /// <summary>
267 /// Access to all non-prefix 'nodes' in the supplied URI as an 266 /// Access to all non-prefix 'nodes' in the supplied URI as an
268 /// array of strings. These identify a specific resource that 267 /// array of strings. These identify a specific resource that
269 /// is managed by the authority (the prefix). 268 /// is managed by the authority (the prefix).
270 /// </summary> 269 /// </summary>
271 270
272 internal string[] Parameters 271 internal string[] Parameters
273 { 272 {
274 get 273 get
275 { 274 {
276 return parameters; 275 return parameters;
277 } 276 }
278 } 277 }
279 278
280#endregion properties 279#endregion properties
281 280
282#region constructors 281#region constructors
283 282
284 // Constructor 283 // Constructor
285 284
286 internal RequestData(OSHttpRequest p_request, OSHttpResponse p_response, string p_qprefix) 285 internal RequestData(OSHttpRequest p_request, OSHttpResponse p_response, string p_qprefix)
287 { 286 {
288 287
@@ -315,7 +314,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
315 /// Realm, domain, etc. 314 /// Realm, domain, etc.
316 /// 315 ///
317 /// This method checks to see if the current request is already 316 /// This method checks to see if the current request is already
318 /// authenticated for this domain. If it is, then it returns 317 /// authenticated for this domain. If it is, then it returns
319 /// true. If it is not, then it issues a challenge to the client 318 /// true. If it is not, then it issues a challenge to the client
320 /// and responds negatively to the request. 319 /// and responds negatively to the request.
321 /// 320 ///
@@ -339,7 +338,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
339 Rest.Log.DebugFormat("{0} Challenge reason: No authorization data", MsgId); 338 Rest.Log.DebugFormat("{0} Challenge reason: No authorization data", MsgId);
340 DoChallenge(); 339 DoChallenge();
341 } 340 }
342 341
343 // So, we have authentication data, now we have to check to 342 // So, we have authentication data, now we have to check to
344 // see what we got and whether or not it is valid for the 343 // see what we got and whether or not it is valid for the
345 // current domain. To do this we need to interpret the data 344 // current domain. To do this we need to interpret the data
@@ -438,7 +437,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
438 437
439 // The service provider can force a particular scheme by 438 // The service provider can force a particular scheme by
440 // assigning a value to scheme. 439 // assigning a value to scheme.
441 440
442 // Basic authentication is pretty simple. 441 // Basic authentication is pretty simple.
443 // Just specify the realm in question. 442 // Just specify the realm in question.
444 443
@@ -468,8 +467,8 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
468 sbuilder.Append(" "); 467 sbuilder.Append(" ");
469 468
470 // Specify the effective realm. This should 469 // Specify the effective realm. This should
471 // never be null if we are uthenticating, as it is required for all 470 // never be null if we are uthenticating, as it is required for all
472 // authentication schemes. It defines, in conjunction with the 471 // authentication schemes. It defines, in conjunction with the
473 // absolute URI information, the domain to which the authentication 472 // absolute URI information, the domain to which the authentication
474 // applies. It is an arbitrary string. I *believe* this allows an 473 // applies. It is an arbitrary string. I *believe* this allows an
475 // authentication to apply to disjoint resources within the same 474 // authentication to apply to disjoint resources within the same
@@ -485,7 +484,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
485 } 484 }
486 485
487 // Share our nonce. This is *uniquely* generated each time a 401 is 486 // Share our nonce. This is *uniquely* generated each time a 401 is
488 // returned. We do not generate a very sophisticated nonce at the 487 // returned. We do not generate a very sophisticated nonce at the
489 // moment (it's simply a base64 encoded UUID). 488 // moment (it's simply a base64 encoded UUID).
490 489
491 if (nonce != null) 490 if (nonce != null)
@@ -532,7 +531,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
532 sbuilder.Append(Rest.CS_COMMA); 531 sbuilder.Append(Rest.CS_COMMA);
533 } 532 }
534 533
535 // Theoretically QOP is optional, but it is required by a compliant 534 // Theoretically QOP is optional, but it is required by a compliant
536 // with current versions of the scheme. In fact IE requires that QOP 535 // with current versions of the scheme. In fact IE requires that QOP
537 // be specified and will refuse to authenticate otherwise. 536 // be specified and will refuse to authenticate otherwise.
538 537
@@ -555,7 +554,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
555 } 554 }
556 555
557 // We don't know the userid that will be used 556 // We don't know the userid that will be used
558 // so we cannot make any authentication domain 557 // so we cannot make any authentication domain
559 // assumptions. So the prefix will determine 558 // assumptions. So the prefix will determine
560 // this. 559 // this.
561 560
@@ -582,7 +581,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
582 /// understand this and also expect it to be the first one 581 /// understand this and also expect it to be the first one
583 /// offered. So we do. 582 /// offered. So we do.
584 /// OpenSim also needs this, as it is the only scheme that allows 583 /// OpenSim also needs this, as it is the only scheme that allows
585 /// authentication using the hashed passwords stored in the 584 /// authentication using the hashed passwords stored in the
586 /// user database. 585 /// user database.
587 /// </summary> 586 /// </summary>
588 587
@@ -599,7 +598,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
599 foreach (Match m in matches) 598 foreach (Match m in matches)
600 { 599 {
601 authparms.Add("response",m.Groups["pval"].Value); 600 authparms.Add("response",m.Groups["pval"].Value);
602 Rest.Log.DebugFormat("{0} Parameter matched : {1} = {2}", 601 Rest.Log.DebugFormat("{0} Parameter matched : {1} = {2}",
603 MsgId, "response", m.Groups["pval"].Value); 602 MsgId, "response", m.Groups["pval"].Value);
604 } 603 }
605 604
@@ -623,7 +622,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
623 } 622 }
624 623
625 /// <summary> 624 /// <summary>
626 /// This method provides validation in support of the BASIC 625 /// This method provides validation in support of the BASIC
627 /// authentication method. This is not normaly expected to be 626 /// authentication method. This is not normaly expected to be
628 /// used, but is included for completeness (and because I tried 627 /// used, but is included for completeness (and because I tried
629 /// it first). 628 /// it first).
@@ -664,12 +663,12 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
664 string last; 663 string last;
665 664
666 // Distinguish the parts, if necessary 665 // Distinguish the parts, if necessary
667 666
668 if ((x=user.IndexOf(Rest.C_SPACE)) != -1) 667 if ((x=user.IndexOf(Rest.C_SPACE)) != -1)
669 { 668 {
670 first = user.Substring(0,x); 669 first = user.Substring(0,x);
671 last = user.Substring(x+1); 670 last = user.Substring(x+1);
672 } 671 }
673 else 672 else
674 { 673 {
675 first = user; 674 first = user;
@@ -685,9 +684,9 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
685 684
686 HA1 = HashToString(pass); 685 HA1 = HashToString(pass);
687 HA1 = HashToString(String.Format("{0}:{1}",HA1,udata.PasswordSalt)); 686 HA1 = HashToString(String.Format("{0}:{1}",HA1,udata.PasswordSalt));
688 687
689 return (0 == sc.Compare(HA1, udata.PasswordHash)); 688 return (0 == sc.Compare(HA1, udata.PasswordHash));
690 689
691 } 690 }
692 691
693#endregion authentication_basic 692#endregion authentication_basic
@@ -712,7 +711,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
712 foreach (Match m in matches) 711 foreach (Match m in matches)
713 { 712 {
714 authparms.Add(m.Groups["parm"].Value,m.Groups["pval"].Value); 713 authparms.Add(m.Groups["parm"].Value,m.Groups["pval"].Value);
715 Rest.Log.DebugFormat("{0} String Parameter matched : {1} = {2}", 714 Rest.Log.DebugFormat("{0} String Parameter matched : {1} = {2}",
716 MsgId, m.Groups["parm"].Value,m.Groups["pval"].Value); 715 MsgId, m.Groups["parm"].Value,m.Groups["pval"].Value);
717 } 716 }
718 717
@@ -723,7 +722,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
723 foreach (Match m in matches) 722 foreach (Match m in matches)
724 { 723 {
725 authparms.Add(m.Groups["parm"].Value,m.Groups["pval"].Value); 724 authparms.Add(m.Groups["parm"].Value,m.Groups["pval"].Value);
726 Rest.Log.DebugFormat("{0} Tokenized Parameter matched : {1} = {2}", 725 Rest.Log.DebugFormat("{0} Tokenized Parameter matched : {1} = {2}",
727 MsgId, m.Groups["parm"].Value,m.Groups["pval"].Value); 726 MsgId, m.Groups["parm"].Value,m.Groups["pval"].Value);
728 } 727 }
729 728
@@ -760,7 +759,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
760 759
761 if (!authparms.TryGetValue("nonce", out nonce) || nonce == null) 760 if (!authparms.TryGetValue("nonce", out nonce) || nonce == null)
762 { 761 {
763 Rest.Log.WarnFormat("{0} Authentication failed: nonce missing", MsgId); 762 Rest.Log.WarnFormat("{0} Authentication failed: nonce missing", MsgId);
764 break; 763 break;
765 } 764 }
766 765
@@ -771,7 +770,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
771 { 770 {
772 if (temp != opaque) 771 if (temp != opaque)
773 { 772 {
774 Rest.Log.WarnFormat("{0} Authentication failed: bad opaque value", MsgId); 773 Rest.Log.WarnFormat("{0} Authentication failed: bad opaque value", MsgId);
775 break; 774 break;
776 } 775 }
777 } 776 }
@@ -783,7 +782,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
783 { 782 {
784 if (temp != algorithm) 783 if (temp != algorithm)
785 { 784 {
786 Rest.Log.WarnFormat("{0} Authentication failed: bad algorithm value", MsgId); 785 Rest.Log.WarnFormat("{0} Authentication failed: bad algorithm value", MsgId);
787 break; 786 break;
788 } 787 }
789 } 788 }
@@ -800,7 +799,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
800 799
801 if (!authparms.ContainsKey("cnonce")) 800 if (!authparms.ContainsKey("cnonce"))
802 { 801 {
803 Rest.Log.WarnFormat("{0} Authentication failed: cnonce missing", MsgId); 802 Rest.Log.WarnFormat("{0} Authentication failed: cnonce missing", MsgId);
804 break; 803 break;
805 } 804 }
806 805
@@ -808,7 +807,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
808 807
809 if (!authparms.TryGetValue("nc", out nck) || nck == null) 808 if (!authparms.TryGetValue("nc", out nck) || nck == null)
810 { 809 {
811 Rest.Log.WarnFormat("{0} Authentication failed: cnonce counter missing", MsgId); 810 Rest.Log.WarnFormat("{0} Authentication failed: cnonce counter missing", MsgId);
812 break; 811 break;
813 } 812 }
814 813
@@ -820,7 +819,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
820 819
821 if (Rest.Hex2Int(ncl) >= Rest.Hex2Int(nck)) 820 if (Rest.Hex2Int(ncl) >= Rest.Hex2Int(nck))
822 { 821 {
823 Rest.Log.WarnFormat("{0} Authentication failed: bad cnonce counter", MsgId); 822 Rest.Log.WarnFormat("{0} Authentication failed: bad cnonce counter", MsgId);
824 break; 823 break;
825 } 824 }
826 cntable[nonce] = nck; 825 cntable[nonce] = nck;
@@ -840,12 +839,12 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
840 // these MUST NOT be present. 839 // these MUST NOT be present.
841 if (authparms.ContainsKey("cnonce")) 840 if (authparms.ContainsKey("cnonce"))
842 { 841 {
843 Rest.Log.WarnFormat("{0} Authentication failed: invalid cnonce", MsgId); 842 Rest.Log.WarnFormat("{0} Authentication failed: invalid cnonce", MsgId);
844 break; 843 break;
845 } 844 }
846 if (authparms.ContainsKey("nc")) 845 if (authparms.ContainsKey("nc"))
847 { 846 {
848 Rest.Log.WarnFormat("{0} Authentication failed: invalid cnonce counter[2]", MsgId); 847 Rest.Log.WarnFormat("{0} Authentication failed: invalid cnonce counter[2]", MsgId);
849 break; 848 break;
850 } 849 }
851 } 850 }
@@ -854,7 +853,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
854 853
855 authenticated = ValidateDigest(userName, nonce, cnonce, nck, authPrefix, response); 854 authenticated = ValidateDigest(userName, nonce, cnonce, nck, authPrefix, response);
856 855
857 } 856 }
858 while (false); 857 while (false);
859 858
860 } 859 }
@@ -864,10 +863,10 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
864 /// <summary> 863 /// <summary>
865 /// This mechanism is used by the digest authentication mechanism 864 /// This mechanism is used by the digest authentication mechanism
866 /// to return the user's password. In fact, because the OpenSim 865 /// to return the user's password. In fact, because the OpenSim
867 /// user's passwords are already hashed, and the HTTP mechanism 866 /// user's passwords are already hashed, and the HTTP mechanism
868 /// does not supply an open password, the hashed passwords cannot 867 /// does not supply an open password, the hashed passwords cannot
869 /// be used unless the client has used the same salting mechanism 868 /// be used unless the client has used the same salting mechanism
870 /// to has the password before using it in the authentication 869 /// to has the password before using it in the authentication
871 /// algorithn. This is not inconceivable... 870 /// algorithn. This is not inconceivable...
872 /// </summary> 871 /// </summary>
873 872
@@ -879,12 +878,12 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
879 string last; 878 string last;
880 879
881 // Distinguish the parts, if necessary 880 // Distinguish the parts, if necessary
882 881
883 if ((x=user.IndexOf(Rest.C_SPACE)) != -1) 882 if ((x=user.IndexOf(Rest.C_SPACE)) != -1)
884 { 883 {
885 first = user.Substring(0,x); 884 first = user.Substring(0,x);
886 last = user.Substring(x+1); 885 last = user.Substring(x+1);
887 } 886 }
888 else 887 else
889 { 888 {
890 first = user; 889 first = user;
@@ -955,7 +954,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
955 HA2 = HashToString(patt); 954 HA2 = HashToString(patt);
956 955
957 // Generate Digest 956 // Generate Digest
958 957
959 if (qop != String.Empty) 958 if (qop != String.Empty)
960 { 959 {
961 patt = String.Format("{0}:{1}:{2}:{3}:{4}:{5}", HA1, nonce, nck, cnonce, qop, HA2); 960 patt = String.Format("{0}:{1}:{2}:{3}:{4}:{5}", HA1, nonce, nck, cnonce, qop, HA2);
@@ -1011,7 +1010,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
1011 } 1010 }
1012 1011
1013 /// <summary> 1012 /// <summary>
1014 /// Indicate a functionally-dependent conclusion to the 1013 /// Indicate a functionally-dependent conclusion to the
1015 /// request. See Rest.cs for a list of possible values. 1014 /// request. See Rest.cs for a list of possible values.
1016 /// </summary> 1015 /// </summary>
1017 1016
@@ -1023,7 +1022,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
1023 /// <summary> 1022 /// <summary>
1024 /// Indicate that a request should be redirected, using 1023 /// Indicate that a request should be redirected, using
1025 /// the HTTP completion codes. Permanent and temporary 1024 /// the HTTP completion codes. Permanent and temporary
1026 /// redirections may be indicated. The supplied URL is 1025 /// redirections may be indicated. The supplied URL is
1027 /// the new location of the resource. 1026 /// the new location of the resource.
1028 /// </summary> 1027 /// </summary>
1029 1028
@@ -1057,7 +1056,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
1057 } 1056 }
1058 1057
1059 /// <summary> 1058 /// <summary>
1060 /// For the more adventurous. This failure also includes a 1059 /// For the more adventurous. This failure also includes a
1061 /// specified entity to be appended to the code-related 1060 /// specified entity to be appended to the code-related
1062 /// status string. 1061 /// status string.
1063 /// </summary> 1062 /// </summary>
@@ -1101,12 +1100,12 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
1101 1100
1102 fail = true; 1101 fail = true;
1103 1102
1104 // Respond to the client's request, tag the response (for the 1103 // Respond to the client's request, tag the response (for the
1105 // benefit of trace) to indicate the reason. 1104 // benefit of trace) to indicate the reason.
1106 1105
1107 Respond(String.Format("Failure response: ({0}) : {1}", 1106 Respond(String.Format("Failure response: ({0}) : {1}",
1108 code, Rest.HttpStatusDesc[code])); 1107 code, Rest.HttpStatusDesc[code]));
1109 1108
1110 // Finally initialize and the throw a RestException. All of the 1109 // Finally initialize and the throw a RestException. All of the
1111 // handler's infrastructure knows that this is a "normal" 1110 // handler's infrastructure knows that this is a "normal"
1112 // completion from a code point-of-view. 1111 // completion from a code point-of-view.
@@ -1129,7 +1128,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
1129 Fail(Rest.HttpStatusCodeNotImplemented, "request rejected (not implemented)"); 1128 Fail(Rest.HttpStatusCodeNotImplemented, "request rejected (not implemented)");
1130 } 1129 }
1131 1130
1132 // This MUST be called by an agent handler before it returns 1131 // This MUST be called by an agent handler before it returns
1133 // control to Handle, otherwise the request will be ignored. 1132 // control to Handle, otherwise the request will be ignored.
1134 // This is called implciitly for the REST stream handlers and 1133 // This is called implciitly for the REST stream handlers and
1135 // is harmless if it is called twice. 1134 // is harmless if it is called twice.
@@ -1222,7 +1221,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
1222 1221
1223 } 1222 }
1224 1223
1225 // Set the status code & description. If nothing has been stored, 1224 // Set the status code & description. If nothing has been stored,
1226 // we consider that a success. 1225 // we consider that a success.
1227 1226
1228 if (statusCode == 0) 1227 if (statusCode == 0)
@@ -1236,7 +1235,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
1236 1235
1237 // For a redirect we need to set the relocation header accordingly 1236 // For a redirect we need to set the relocation header accordingly
1238 1237
1239 if (response.StatusCode == (int) Rest.HttpStatusCodeTemporaryRedirect || 1238 if (response.StatusCode == (int) Rest.HttpStatusCodeTemporaryRedirect ||
1240 response.StatusCode == (int) Rest.HttpStatusCodePermanentRedirect) 1239 response.StatusCode == (int) Rest.HttpStatusCodePermanentRedirect)
1241 { 1240 {
1242 Rest.Log.DebugFormat("{0} Re-direct location is {1}", MsgId, redirectLocation); 1241 Rest.Log.DebugFormat("{0} Re-direct location is {1}", MsgId, redirectLocation);
@@ -1252,7 +1251,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
1252 // We've left the setting of handled' until the 1251 // We've left the setting of handled' until the
1253 // last minute because the header settings included 1252 // last minute because the header settings included
1254 // above are pretty harmless. But everything from 1253 // above are pretty harmless. But everything from
1255 // here on down probably leaves the response 1254 // here on down probably leaves the response
1256 // element unusable by anyone else. 1255 // element unusable by anyone else.
1257 1256
1258 handled = true; 1257 handled = true;
@@ -1267,7 +1266,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
1267 1266
1268 if (buffer != null && buffer.Length != 0) 1267 if (buffer != null && buffer.Length != 0)
1269 { 1268 {
1270 Rest.Log.DebugFormat("{0} Entity buffer, length = {1} : <{2}>", 1269 Rest.Log.DebugFormat("{0} Entity buffer, length = {1} : <{2}>",
1271 MsgId, buffer.Length, encoding.GetString(buffer)); 1270 MsgId, buffer.Length, encoding.GetString(buffer));
1272 response.OutputStream.Write(buffer, 0, buffer.Length); 1271 response.OutputStream.Write(buffer, 0, buffer.Length);
1273 } 1272 }
@@ -1295,11 +1294,11 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
1295 { 1294 {
1296 if (Rest.DEBUG) 1295 if (Rest.DEBUG)
1297 { 1296 {
1298 Rest.Log.DebugFormat("{0} Adding header: <{1}: {2}>", 1297 Rest.Log.DebugFormat("{0} Adding header: <{1}: {2}>",
1299 MsgId, hdr, data); 1298 MsgId, hdr, data);
1300 if (response.Headers.Get(hdr) != null) 1299 if (response.Headers.Get(hdr) != null)
1301 { 1300 {
1302 Rest.Log.DebugFormat("{0} Multipe {1} headers will be generated>", 1301 Rest.Log.DebugFormat("{0} Multipe {1} headers will be generated>",
1303 MsgId, hdr); 1302 MsgId, hdr);
1304 } 1303 }
1305 } 1304 }
@@ -1313,7 +1312,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
1313 Rest.Log.DebugFormat("{0} Removing header: <{1}>", MsgId, hdr); 1312 Rest.Log.DebugFormat("{0} Removing header: <{1}>", MsgId, hdr);
1314 if (response.Headers.Get(hdr) == null) 1313 if (response.Headers.Get(hdr) == null)
1315 { 1314 {
1316 Rest.Log.DebugFormat("{0} No such header existed", 1315 Rest.Log.DebugFormat("{0} No such header existed",
1317 MsgId, hdr); 1316 MsgId, hdr);
1318 } 1317 }
1319 } 1318 }
@@ -1326,7 +1325,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
1326 { 1325 {
1327 for (int i=0;i<response.Headers.Count;i++) 1326 for (int i=0;i<response.Headers.Count;i++)
1328 { 1327 {
1329 Rest.Log.DebugFormat("{0} Header[{1}] : {2}", MsgId, i, 1328 Rest.Log.DebugFormat("{0} Header[{1}] : {2}", MsgId, i,
1330 response.Headers.Get(i)); 1329 response.Headers.Get(i));
1331 } 1330 }
1332 } 1331 }
@@ -1404,7 +1403,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
1404 // If we succeeded in getting a path, perform any 1403 // If we succeeded in getting a path, perform any
1405 // additional pre-processing required. 1404 // additional pre-processing required.
1406 1405
1407 if (path != null) 1406 if (path != null)
1408 { 1407 {
1409 if (Rest.ExtendedEscape) 1408 if (Rest.ExtendedEscape)
1410 { 1409 {
@@ -1442,14 +1441,14 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
1442 { 1441 {
1443 parameters = new string[0]; 1442 parameters = new string[0];
1444 } 1443 }
1445 1444
1446 // Generate a debug list of the decoded parameters 1445 // Generate a debug list of the decoded parameters
1447 1446
1448 if (Rest.DEBUG && prfxlen < path.Length-1) 1447 if (Rest.DEBUG && prfxlen < path.Length-1)
1449 { 1448 {
1450 Rest.Log.DebugFormat("{0} URI: Parameters: {1}", MsgId, path.Substring(prfxlen)); 1449 Rest.Log.DebugFormat("{0} URI: Parameters: {1}", MsgId, path.Substring(prfxlen));
1451 for (int i = 0; i < parameters.Length; i++) 1450 for (int i = 0; i < parameters.Length; i++)
1452 { 1451 {
1453 Rest.Log.DebugFormat("{0} Parameter[{1}]: {2}", MsgId, i, parameters[i]); 1452 Rest.Log.DebugFormat("{0} Parameter[{1}]: {2}", MsgId, i, parameters[i]);
1454 } 1453 }
1455 } 1454 }
diff --git a/OpenSim/ApplicationPlugins/Rest/Inventory/Rest.cs b/OpenSim/ApplicationPlugins/Rest/Inventory/Rest.cs
index fa22481..19bf381 100644
--- a/OpenSim/ApplicationPlugins/Rest/Inventory/Rest.cs
+++ b/OpenSim/ApplicationPlugins/Rest/Inventory/Rest.cs
@@ -23,7 +23,7 @@
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
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 */
28 28
29using System; 29using System;
@@ -38,11 +38,9 @@ using Nini.Config;
38 38
39namespace OpenSim.ApplicationPlugins.Rest.Inventory 39namespace OpenSim.ApplicationPlugins.Rest.Inventory
40{ 40{
41
42 public class Rest 41 public class Rest
43 { 42 {
44 43 internal static readonly log4net.ILog Log =
45 internal static readonly log4net.ILog Log =
46 log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 44 log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
47 45
48 internal static bool DEBUG = Log.IsDebugEnabled; 46 internal static bool DEBUG = Log.IsDebugEnabled;
@@ -77,7 +75,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
77 /// HTTP requires that status information be generated for PUT 75 /// HTTP requires that status information be generated for PUT
78 /// and POST opertaions. This is in support of that. The 76 /// and POST opertaions. This is in support of that. The
79 /// operation verb gets substituted into the first string, 77 /// operation verb gets substituted into the first string,
80 /// and the completion code is inserted into the tail. The 78 /// and the completion code is inserted into the tail. The
81 /// strings are put here to encourage consistency. 79 /// strings are put here to encourage consistency.
82 /// </summary> 80 /// </summary>
83 81
@@ -88,7 +86,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
88 86
89 static Rest() 87 static Rest()
90 { 88 {
91 HttpStatusDesc = new Dictionary<int,string>(); 89 HttpStatusDesc = new Dictionary<int,string>();
92 if (HttpStatusCodeArray.Length != HttpStatusDescArray.Length) 90 if (HttpStatusCodeArray.Length != HttpStatusDescArray.Length)
93 { 91 {
94 Log.ErrorFormat("{0} HTTP Status Code and Description arrays do not match"); 92 Log.ErrorFormat("{0} HTTP Status Code and Description arrays do not match");
@@ -143,7 +141,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
143 /// supported by all servers. See Respond 141 /// supported by all servers. See Respond
144 /// to see how these are handled. 142 /// to see how these are handled.
145 /// </summary> 143 /// </summary>
146 144
147 // REST AGENT 1.0 interpretations 145 // REST AGENT 1.0 interpretations
148 public const string GET = "get"; // information retrieval - server state unchanged 146 public const string GET = "get"; // information retrieval - server state unchanged
149 public const string HEAD = "head"; // same as get except only the headers are returned. 147 public const string HEAD = "head"; // same as get except only the headers are returned.
@@ -175,7 +173,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
175 public static readonly char C_PERIOD = '.'; 173 public static readonly char C_PERIOD = '.';
176 public static readonly char C_COMMA = ','; 174 public static readonly char C_COMMA = ',';
177 public static readonly char C_DQUOTE = '"'; 175 public static readonly char C_DQUOTE = '"';
178 176
179 public static readonly string CS_SPACE = " "; 177 public static readonly string CS_SPACE = " ";
180 public static readonly string CS_SLASH = "/"; 178 public static readonly string CS_SLASH = "/";
181 public static readonly string CS_PATHSEP = "/"; 179 public static readonly string CS_PATHSEP = "/";
@@ -184,7 +182,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
184 public static readonly string CS_PERIOD = "."; 182 public static readonly string CS_PERIOD = ".";
185 public static readonly string CS_COMMA = ","; 183 public static readonly string CS_COMMA = ",";
186 public static readonly string CS_DQUOTE = "\""; 184 public static readonly string CS_DQUOTE = "\"";
187 185
188 public static readonly char[] CA_SPACE = { C_SPACE }; 186 public static readonly char[] CA_SPACE = { C_SPACE };
189 public static readonly char[] CA_SLASH = { C_SLASH }; 187 public static readonly char[] CA_SLASH = { C_SLASH };
190 public static readonly char[] CA_PATHSEP = { C_PATHSEP }; 188 public static readonly char[] CA_PATHSEP = { C_PATHSEP };
@@ -392,7 +390,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
392 public const string AS_DIGEST = "Digest"; 390 public const string AS_DIGEST = "Digest";
393 391
394 /// Supported Digest algorithms 392 /// Supported Digest algorithms
395 393
396 public const string Digest_MD5 = "MD5"; // assumedd efault if omitted 394 public const string Digest_MD5 = "MD5"; // assumedd efault if omitted
397 public const string Digest_MD5Sess = "MD5-sess"; 395 public const string Digest_MD5Sess = "MD5-sess";
398 396
@@ -440,7 +438,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
440 int val = 0; 438 int val = 0;
441 int sum = 0; 439 int sum = 0;
442 string tmp = null; 440 string tmp = null;
443 441
444 if (hex != null) 442 if (hex != null)
445 { 443 {
446 tmp = hex.ToLower(); 444 tmp = hex.ToLower();
@@ -455,7 +453,6 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
455 } 453 }
456 454
457 return sum; 455 return sum;
458
459 } 456 }
460 457
461 // Nonce management 458 // Nonce management
@@ -465,17 +462,15 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
465 return StringToBase64(CreationDate + Guid.NewGuid().ToString()); 462 return StringToBase64(CreationDate + Guid.NewGuid().ToString());
466 } 463 }
467 464
468 // Dump he specified data stream; 465 // Dump the specified data stream
469 466
470 public static void Dump(byte[] data) 467 public static void Dump(byte[] data)
471 { 468 {
472
473 char[] buffer = new char[Rest.DumpLineSize]; 469 char[] buffer = new char[Rest.DumpLineSize];
474 int cc = 0; 470 int cc = 0;
475 471
476 for (int i = 0; i < data.Length; i++) 472 for (int i = 0; i < data.Length; i++)
477 { 473 {
478
479 if (i % Rest.DumpLineSize == 0) Console.Write("\n{0}: ",i.ToString("d8")); 474 if (i % Rest.DumpLineSize == 0) Console.Write("\n{0}: ",i.ToString("d8"));
480 475
481 if (i % 4 == 0) Console.Write(" "); 476 if (i % 4 == 0) Console.Write(" ");
@@ -494,7 +489,6 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
494 Console.Write(" |"+(new String(buffer))+"|"); 489 Console.Write(" |"+(new String(buffer))+"|");
495 cc = 0; 490 cc = 0;
496 } 491 }
497
498 } 492 }
499 493
500 // Finish off any incomplete line 494 // Finish off any incomplete line
@@ -504,33 +498,29 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
504 for (int i = cc ; i < Rest.DumpLineSize; i++) 498 for (int i = cc ; i < Rest.DumpLineSize; i++)
505 { 499 {
506 if (i % 4 == 0) Console.Write(" "); 500 if (i % 4 == 0) Console.Write(" ");
507 Console.Write(" "); 501 Console.Write(" ");
508 buffer[i % Rest.DumpLineSize] = ' '; 502 buffer[i % Rest.DumpLineSize] = ' ';
509 } 503 }
510 Console.WriteLine(" |"+(new String(buffer))+"|"); 504 Console.WriteLine(" |"+(new String(buffer))+"|");
511 } 505 }
512 else 506 else
513 { 507 {
514 Console.Write("\n"); 508 Console.Write("\n");
515 } 509 }
516
517 } 510 }
518
519 } 511 }
520 512
521 // Local exception type 513 // Local exception type
522 514
523 public class RestException : Exception 515 public class RestException : Exception
524 { 516 {
525
526 internal int statusCode; 517 internal int statusCode;
527 internal string statusDesc; 518 internal string statusDesc;
528 internal string httpmethod; 519 internal string httpmethod;
529 internal string httppath; 520 internal string httppath;
530 521
531 public RestException(string msg) : base(msg) 522 public RestException(string msg) : base(msg)
532 { 523 {
533 } 524 }
534 } 525 }
535
536} 526}
diff --git a/OpenSim/ApplicationPlugins/Rest/Inventory/RestAssetServices.cs b/OpenSim/ApplicationPlugins/Rest/Inventory/RestAssetServices.cs
index 6b802d3..1b94741 100644
--- a/OpenSim/ApplicationPlugins/Rest/Inventory/RestAssetServices.cs
+++ b/OpenSim/ApplicationPlugins/Rest/Inventory/RestAssetServices.cs
@@ -23,7 +23,6 @@
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 *
27 */ 26 */
28 27
29using libsecondlife; 28using libsecondlife;
@@ -40,10 +39,8 @@ using OpenSim.Framework.Communications.Cache;
40 39
41namespace OpenSim.ApplicationPlugins.Rest.Inventory 40namespace OpenSim.ApplicationPlugins.Rest.Inventory
42{ 41{
43
44 public class RestAssetServices : IRest 42 public class RestAssetServices : IRest
45 { 43 {
46
47 private bool enabled = false; 44 private bool enabled = false;
48 private string qPrefix = "assets"; 45 private string qPrefix = "assets";
49 46
@@ -52,7 +49,6 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
52 49
53 public RestAssetServices() 50 public RestAssetServices()
54 { 51 {
55
56 Rest.Log.InfoFormat("{0} Asset services initializing", MsgId); 52 Rest.Log.InfoFormat("{0} Asset services initializing", MsgId);
57 Rest.Log.InfoFormat("{0} Using REST Implementation Version {1}", MsgId, Rest.Version); 53 Rest.Log.InfoFormat("{0} Using REST Implementation Version {1}", MsgId, Rest.Version);
58 54
@@ -73,7 +69,6 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
73 enabled = true; 69 enabled = true;
74 70
75 Rest.Log.InfoFormat("{0} Asset services initialization complete", MsgId); 71 Rest.Log.InfoFormat("{0} Asset services initialization complete", MsgId);
76
77 } 72 }
78 73
79 // Post-construction, pre-enabled initialization opportunity 74 // Post-construction, pre-enabled initialization opportunity
@@ -84,7 +79,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
84 } 79 }
85 80
86 // Called by the plug-in to halt REST processing. Local processing is 81 // Called by the plug-in to halt REST processing. Local processing is
87 // disabled, and control blocks until all current processing has 82 // disabled, and control blocks until all current processing has
88 // completed. No new processing will be started 83 // completed. No new processing will be started
89 84
90 public void Close() 85 public void Close()
@@ -111,14 +106,13 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
111 106
112 private void DoAsset(RequestData rparm) 107 private void DoAsset(RequestData rparm)
113 { 108 {
114
115 if (!enabled) return; 109 if (!enabled) return;
116 110
117 AssetRequestData rdata = (AssetRequestData) rparm; 111 AssetRequestData rdata = (AssetRequestData) rparm;
118 112
119 Rest.Log.DebugFormat("{0} REST Asset handler ENTRY", MsgId); 113 Rest.Log.DebugFormat("{0} REST Asset handler ENTRY", MsgId);
120 114
121 // Now that we know this is a serious attempt to 115 // Now that we know this is a serious attempt to
122 // access inventory data, we should find out who 116 // access inventory data, we should find out who
123 // is asking, and make sure they are authorized 117 // is asking, and make sure they are authorized
124 // to do so. We need to validate the caller's 118 // to do so. We need to validate the caller's
@@ -129,9 +123,9 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
129 // With the present HTTP server we can't use the 123 // With the present HTTP server we can't use the
130 // builtin authentication mechanisms because they 124 // builtin authentication mechanisms because they
131 // would be enforced for all in-bound requests. 125 // would be enforced for all in-bound requests.
132 // Instead we look at the headers ourselves and 126 // Instead we look at the headers ourselves and
133 // handle authentication directly. 127 // handle authentication directly.
134 128
135 try 129 try
136 { 130 {
137 if (!rdata.IsAuthenticated) 131 if (!rdata.IsAuthenticated)
@@ -144,13 +138,13 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
144 if (e.statusCode == Rest.HttpStatusCodeNotAuthorized) 138 if (e.statusCode == Rest.HttpStatusCodeNotAuthorized)
145 { 139 {
146 Rest.Log.WarnFormat("{0} User not authenticated", MsgId); 140 Rest.Log.WarnFormat("{0} User not authenticated", MsgId);
147 Rest.Log.DebugFormat("{0} Authorization header: {1}", MsgId, 141 Rest.Log.DebugFormat("{0} Authorization header: {1}", MsgId,
148 rdata.request.Headers.Get("Authorization")); 142 rdata.request.Headers.Get("Authorization"));
149 } 143 }
150 else 144 else
151 { 145 {
152 Rest.Log.ErrorFormat("{0} User authentication failed", MsgId); 146 Rest.Log.ErrorFormat("{0} User authentication failed", MsgId);
153 Rest.Log.DebugFormat("{0} Authorization header: {1}", MsgId, 147 Rest.Log.DebugFormat("{0} Authorization header: {1}", MsgId,
154 rdata.request.Headers.Get("Authorization")); 148 rdata.request.Headers.Get("Authorization"));
155 } 149 }
156 throw (e); 150 throw (e);
@@ -173,7 +167,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
173 case "post" : 167 case "post" :
174 case "delete" : 168 case "delete" :
175 default : 169 default :
176 Rest.Log.WarnFormat("{0} Asset: Method not supported: {1}", 170 Rest.Log.WarnFormat("{0} Asset: Method not supported: {1}",
177 MsgId, rdata.method); 171 MsgId, rdata.method);
178 rdata.Fail(Rest.HttpStatusCodeBadRequest,String.Format("method <{0}> not supported", rdata.method)); 172 rdata.Fail(Rest.HttpStatusCodeBadRequest,String.Format("method <{0}> not supported", rdata.method));
179 break; 173 break;
@@ -186,14 +180,12 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
186 } 180 }
187 181
188 Rest.Log.DebugFormat("{0} REST Asset handler EXIT", MsgId); 182 Rest.Log.DebugFormat("{0} REST Asset handler EXIT", MsgId);
189
190 } 183 }
191 184
192 #endregion Interface 185 #endregion Interface
193 186
194 private void DoGet(AssetRequestData rdata) 187 private void DoGet(AssetRequestData rdata)
195 { 188 {
196
197 bool istexture = false; 189 bool istexture = false;
198 190
199 Rest.Log.DebugFormat("{0} REST Asset handler, Method = <{1}> ENTRY", MsgId, rdata.method); 191 Rest.Log.DebugFormat("{0} REST Asset handler, Method = <{1}> ENTRY", MsgId, rdata.method);
@@ -203,13 +195,11 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
203 195
204 if (rdata.Parameters.Length == 1) 196 if (rdata.Parameters.Length == 1)
205 { 197 {
206
207 LLUUID uuid = new LLUUID(rdata.Parameters[0]); 198 LLUUID uuid = new LLUUID(rdata.Parameters[0]);
208 AssetBase asset = Rest.AssetServices.GetAsset(uuid, istexture); 199 AssetBase asset = Rest.AssetServices.GetAsset(uuid, istexture);
209 200
210 if (asset != null) 201 if (asset != null)
211 { 202 {
212
213 Rest.Log.DebugFormat("{0} Asset located <{1}>", MsgId, rdata.Parameters[0]); 203 Rest.Log.DebugFormat("{0} Asset located <{1}>", MsgId, rdata.Parameters[0]);
214 204
215 rdata.initXmlWriter(); 205 rdata.initXmlWriter();
@@ -237,7 +227,6 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
237 227
238 rdata.Complete(); 228 rdata.Complete();
239 rdata.Respond("Asset " + rdata.method + ": Normal completion"); 229 rdata.Respond("Asset " + rdata.method + ": Normal completion");
240
241 } 230 }
242 231
243 private void DoPut(AssetRequestData rdata) 232 private void DoPut(AssetRequestData rdata)
@@ -255,7 +244,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
255 if (!xml.ReadToFollowing("Asset")) 244 if (!xml.ReadToFollowing("Asset"))
256 { 245 {
257 Rest.Log.DebugFormat("{0} Invalid request data: <{1}>", MsgId, rdata.path); 246 Rest.Log.DebugFormat("{0} Invalid request data: <{1}>", MsgId, rdata.path);
258 rdata.Fail(Rest.HttpStatusCodeBadRequest,"invalid request data"); 247 rdata.Fail(Rest.HttpStatusCodeBadRequest,"invalid request data");
259 } 248 }
260 249
261 AssetBase asset = new AssetBase(); 250 AssetBase asset = new AssetBase();
@@ -272,12 +261,11 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
272 else 261 else
273 { 262 {
274 Rest.Log.DebugFormat("{0} Invalid parameters: <{1}>", MsgId, rdata.path); 263 Rest.Log.DebugFormat("{0} Invalid parameters: <{1}>", MsgId, rdata.path);
275 rdata.Fail(Rest.HttpStatusCodeNotFound, "invalid parameters"); 264 rdata.Fail(Rest.HttpStatusCodeNotFound, "invalid parameters");
276 } 265 }
277 266
278 rdata.Complete(); 267 rdata.Complete();
279 rdata.Respond("Asset " + rdata.method + ": Normal completion"); 268 rdata.Respond("Asset " + rdata.method + ": Normal completion");
280
281 } 269 }
282 270
283 internal class AssetRequestData : RequestData 271 internal class AssetRequestData : RequestData
@@ -287,6 +275,5 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
287 { 275 {
288 } 276 }
289 } 277 }
290
291 } 278 }
292} 279}
diff --git a/OpenSim/ApplicationPlugins/Rest/Inventory/RestHandler.cs b/OpenSim/ApplicationPlugins/Rest/Inventory/RestHandler.cs
index 61cf0e4..ab6128f 100644
--- a/OpenSim/ApplicationPlugins/Rest/Inventory/RestHandler.cs
+++ b/OpenSim/ApplicationPlugins/Rest/Inventory/RestHandler.cs
@@ -23,7 +23,6 @@
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 *
27 */ 26 */
28 27
29using System; 28using System;
@@ -35,7 +34,6 @@ using OpenSim.ApplicationPlugins.Rest;
35 34
36namespace OpenSim.ApplicationPlugins.Rest.Inventory 35namespace OpenSim.ApplicationPlugins.Rest.Inventory
37{ 36{
38
39 /// <remarks> 37 /// <remarks>
40 /// The class signature reveals the roles that RestHandler plays. 38 /// The class signature reveals the roles that RestHandler plays.
41 /// 39 ///
@@ -74,10 +72,10 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
74 /// <summary> 72 /// <summary>
75 /// This static initializer scans the ASSEMBLY for classes that 73 /// This static initializer scans the ASSEMBLY for classes that
76 /// export the IRest interface and builds a list of them. These 74 /// export the IRest interface and builds a list of them. These
77 /// are later activated by the handler. To add a new handler it 75 /// are later activated by the handler. To add a new handler it
78 /// is only necessary to create a new services class that implements 76 /// is only necessary to create a new services class that implements
79 /// the IRest interface, and recompile the handler. This gives 77 /// the IRest interface, and recompile the handler. This gives
80 /// all of the build-time flexibility of a modular approach 78 /// all of the build-time flexibility of a modular approach
81 /// while not introducing yet-another module loader. Note that 79 /// while not introducing yet-another module loader. Note that
82 /// multiple assembles can still be built, each with its own set 80 /// multiple assembles can still be built, each with its own set
83 /// of handlers. Examples of services classes are RestInventoryServices 81 /// of handlers. Examples of services classes are RestInventoryServices
@@ -86,13 +84,12 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
86 84
87 static RestHandler() 85 static RestHandler()
88 { 86 {
89
90 Module[] mods = Assembly.GetExecutingAssembly().GetModules(); 87 Module[] mods = Assembly.GetExecutingAssembly().GetModules();
91 88
92 foreach (Module m in mods) 89 foreach (Module m in mods)
93 { 90 {
94 Type[] types = m.GetTypes(); 91 Type[] types = m.GetTypes();
95 foreach (Type t in types) 92 foreach (Type t in types)
96 { 93 {
97 try 94 try
98 { 95 {
@@ -108,7 +105,6 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
108 } 105 }
109 } 106 }
110 } 107 }
111
112 } 108 }
113 109
114 #endregion local static state 110 #endregion local static state
@@ -117,13 +113,13 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
117 113
118 /// <summary> 114 /// <summary>
119 /// This routine loads all of the handlers discovered during 115 /// This routine loads all of the handlers discovered during
120 /// instance initialization. 116 /// instance initialization.
121 /// A table of all loaded and successfully constructed handlers 117 /// A table of all loaded and successfully constructed handlers
122 /// is built, and this table is then used by the constructor to 118 /// is built, and this table is then used by the constructor to
123 /// initialize each of the handlers in turn. 119 /// initialize each of the handlers in turn.
124 /// NOTE: The loading process does not automatically imply that 120 /// NOTE: The loading process does not automatically imply that
125 /// the handler has registered any kind of an interface, that 121 /// the handler has registered any kind of an interface, that
126 /// may be (optionally) done by the handler either during 122 /// may be (optionally) done by the handler either during
127 /// construction, or during initialization. 123 /// construction, or during initialization.
128 /// 124 ///
129 /// I was not able to make this code work within a constructor 125 /// I was not able to make this code work within a constructor
@@ -136,7 +132,6 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
136 { 132 {
137 if (!handlersLoaded) 133 if (!handlersLoaded)
138 { 134 {
139
140 ConstructorInfo ci; 135 ConstructorInfo ci;
141 Object ht; 136 Object ht;
142 137
@@ -167,8 +162,8 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
167 162
168 // Name is used to differentiate the message header. 163 // Name is used to differentiate the message header.
169 164
170 public override string Name 165 public override string Name
171 { 166 {
172 get { return "HANDLER"; } 167 get { return "HANDLER"; }
173 } 168 }
174 169
@@ -181,7 +176,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
181 176
182 // We have to rename these because we want 177 // We have to rename these because we want
183 // to be able to share the values with other 178 // to be able to share the values with other
184 // classes in our assembly and the base 179 // classes in our assembly and the base
185 // names are protected. 180 // names are protected.
186 181
187 public string MsgId 182 public string MsgId
@@ -211,7 +206,6 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
211 { 206 {
212 try 207 try
213 { 208 {
214
215 // This plugin will only be enabled if the broader 209 // This plugin will only be enabled if the broader
216 // REST plugin mechanism is enabled. 210 // REST plugin mechanism is enabled.
217 211
@@ -222,7 +216,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
222 // IsEnabled is implemented by the base class and 216 // IsEnabled is implemented by the base class and
223 // reflects an overall RestPlugin status 217 // reflects an overall RestPlugin status
224 218
225 if (!IsEnabled) 219 if (!IsEnabled)
226 { 220 {
227 Rest.Log.WarnFormat("{0} Plugins are disabled", MsgId); 221 Rest.Log.WarnFormat("{0} Plugins are disabled", MsgId);
228 return; 222 return;
@@ -278,15 +272,15 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
278 Rest.DumpLineSize); 272 Rest.DumpLineSize);
279 } 273 }
280 274
281 // Load all of the handlers present in the 275 // Load all of the handlers present in the
282 // assembly 276 // assembly
283 277
284 // In principle, as we're an application plug-in, 278 // In principle, as we're an application plug-in,
285 // most of what needs to be done could be done using 279 // most of what needs to be done could be done using
286 // static resources, however the Open Sim plug-in 280 // static resources, however the Open Sim plug-in
287 // model makes this an instance, so that's what we 281 // model makes this an instance, so that's what we
288 // need to be. 282 // need to be.
289 // There is only one Communications manager per 283 // There is only one Communications manager per
290 // server, and by inference, only one each of the 284 // server, and by inference, only one each of the
291 // user, asset, and inventory servers. So we can cache 285 // user, asset, and inventory servers. So we can cache
292 // those using a static initializer. 286 // those using a static initializer.
@@ -329,13 +323,12 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
329 { 323 {
330 Rest.Log.ErrorFormat("{0} Plugin initialization has failed: {1}", MsgId, e.Message); 324 Rest.Log.ErrorFormat("{0} Plugin initialization has failed: {1}", MsgId, e.Message);
331 } 325 }
332
333 } 326 }
334 327
335 /// <summary> 328 /// <summary>
336 /// In the interests of efficiency, and because we cannot determine whether 329 /// In the interests of efficiency, and because we cannot determine whether
337 /// or not this instance will actually be harvested, we clobber the only 330 /// or not this instance will actually be harvested, we clobber the only
338 /// anchoring reference to the working state for this plug-in. What the 331 /// anchoring reference to the working state for this plug-in. What the
339 /// call to close does is irrelevant to this class beyond knowing that it 332 /// call to close does is irrelevant to this class beyond knowing that it
340 /// can nullify the reference when it returns. 333 /// can nullify the reference when it returns.
341 /// To make sure everything is copacetic we make sure the primary interface 334 /// To make sure everything is copacetic we make sure the primary interface
@@ -344,7 +337,6 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
344 337
345 public override void Close() 338 public override void Close()
346 { 339 {
347
348 Rest.Log.InfoFormat("{0} Plugin is terminating", MsgId); 340 Rest.Log.InfoFormat("{0} Plugin is terminating", MsgId);
349 341
350 try 342 try
@@ -352,12 +344,11 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
352 RemoveAgentHandler(Rest.Name, this); 344 RemoveAgentHandler(Rest.Name, this);
353 } 345 }
354 catch (KeyNotFoundException){} 346 catch (KeyNotFoundException){}
355 347
356 foreach (IRest handler in handlers) 348 foreach (IRest handler in handlers)
357 { 349 {
358 handler.Close(); 350 handler.Close();
359 } 351 }
360
361 } 352 }
362 353
363 #endregion overriding methods 354 #endregion overriding methods
@@ -383,7 +374,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
383 foreach (string key in pathHandlers.Keys) 374 foreach (string key in pathHandlers.Keys)
384 { 375 {
385 Rest.Log.DebugFormat("{0} Match testing {1} against agent prefix <{2}>", MsgId, path, key); 376 Rest.Log.DebugFormat("{0} Match testing {1} against agent prefix <{2}>", MsgId, path, key);
386 377
387 // Note that Match will not necessarily find the handler that will 378 // Note that Match will not necessarily find the handler that will
388 // actually be used - it does no test for the "closest" fit. It 379 // actually be used - it does no test for the "closest" fit. It
389 // simply reflects that at least one possible handler exists. 380 // simply reflects that at least one possible handler exists.
@@ -393,7 +384,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
393 Rest.Log.DebugFormat("{0} Matched prefix <{1}>", MsgId, key); 384 Rest.Log.DebugFormat("{0} Matched prefix <{1}>", MsgId, key);
394 385
395 // This apparently odd evaluation is needed to prevent a match 386 // This apparently odd evaluation is needed to prevent a match
396 // on anything other than a URI token boundary. Otherwise we 387 // on anything other than a URI token boundary. Otherwise we
397 // may match on URL's that were not intended for this handler. 388 // may match on URL's that were not intended for this handler.
398 389
399 return ( path.Length == key.Length || 390 return ( path.Length == key.Length ||
@@ -406,9 +397,8 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
406 397
407 foreach (string key in streamHandlers.Keys) 398 foreach (string key in streamHandlers.Keys)
408 { 399 {
409
410 Rest.Log.DebugFormat("{0} Match testing {1} against stream prefix <{2}>", MsgId, path, key); 400 Rest.Log.DebugFormat("{0} Match testing {1} against stream prefix <{2}>", MsgId, path, key);
411 401
412 // Note that Match will not necessarily find the handler that will 402 // Note that Match will not necessarily find the handler that will
413 // actually be used - it does no test for the "closest" fit. It 403 // actually be used - it does no test for the "closest" fit. It
414 // simply reflects that at least one possible handler exists. 404 // simply reflects that at least one possible handler exists.
@@ -418,7 +408,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
418 Rest.Log.DebugFormat("{0} Matched prefix <{1}>", MsgId, key); 408 Rest.Log.DebugFormat("{0} Matched prefix <{1}>", MsgId, key);
419 409
420 // This apparently odd evaluation is needed to prevent a match 410 // This apparently odd evaluation is needed to prevent a match
421 // on anything other than a URI token boundary. Otherwise we 411 // on anything other than a URI token boundary. Otherwise we
422 // may match on URL's that were not intended for this handler. 412 // may match on URL's that were not intended for this handler.
423 413
424 return ( path.Length == key.Length || 414 return ( path.Length == key.Length ||
@@ -426,7 +416,6 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
426 416
427 } 417 }
428 } 418 }
429
430 } 419 }
431 catch (Exception e) 420 catch (Exception e)
432 { 421 {
@@ -460,7 +449,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
460 449
461 for (int i = 0; i < request.Headers.Count; i++) 450 for (int i = 0; i < request.Headers.Count; i++)
462 { 451 {
463 Rest.Log.DebugFormat("{0} Header [{1}] : <{2}> = <{3}>", 452 Rest.Log.DebugFormat("{0} Header [{1}] : <{2}> = <{3}>",
464 MsgId, i, request.Headers.GetKey(i), request.Headers.Get(i)); 453 MsgId, i, request.Headers.GetKey(i), request.Headers.Get(i));
465 } 454 }
466 Rest.Log.DebugFormat("{0} URI: {1}", MsgId, request.RawUrl); 455 Rest.Log.DebugFormat("{0} URI: {1}", MsgId, request.RawUrl);
@@ -486,7 +475,6 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
486 Rest.Log.DebugFormat("{0} EXIT", MsgId); 475 Rest.Log.DebugFormat("{0} EXIT", MsgId);
487 476
488 return handled; 477 return handled;
489
490 } 478 }
491 479
492 #endregion interface methods 480 #endregion interface methods
@@ -534,7 +522,6 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
534 } 522 }
535 523
536 return rdata.handled; 524 return rdata.handled;
537
538 } 525 }
539 526
540 /// <summary> 527 /// <summary>
@@ -547,13 +534,12 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
547 534
548 public void AddStreamHandler(string httpMethod, string path, RestMethod method) 535 public void AddStreamHandler(string httpMethod, string path, RestMethod method)
549 { 536 {
550
551 if (!IsEnabled) 537 if (!IsEnabled)
552 { 538 {
553 return; 539 return;
554 } 540 }
555 541
556 if (!path.StartsWith(Rest.Prefix)) 542 if (!path.StartsWith(Rest.Prefix))
557 { 543 {
558 path = String.Format("{0}{1}", Rest.Prefix, path); 544 path = String.Format("{0}{1}", Rest.Prefix, path);
559 } 545 }
@@ -571,7 +557,6 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
571 { 557 {
572 Rest.Log.WarnFormat("{0} Ignoring duplicate handler for {1}", MsgId, path); 558 Rest.Log.WarnFormat("{0} Ignoring duplicate handler for {1}", MsgId, path);
573 } 559 }
574
575 } 560 }
576 561
577 /// <summary> 562 /// <summary>
@@ -586,10 +571,9 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
586 571
587 internal bool FindPathHandler(OSHttpRequest request, OSHttpResponse response) 572 internal bool FindPathHandler(OSHttpRequest request, OSHttpResponse response)
588 { 573 {
589
590 RequestData rdata = null; 574 RequestData rdata = null;
591 string bestMatch = null; 575 string bestMatch = null;
592 576
593 if (!IsEnabled) 577 if (!IsEnabled)
594 { 578 {
595 return false; 579 return false;
@@ -612,7 +596,6 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
612 596
613 if (!String.IsNullOrEmpty(bestMatch)) 597 if (!String.IsNullOrEmpty(bestMatch))
614 { 598 {
615
616 rdata = pathAllocators[bestMatch](request, response, bestMatch); 599 rdata = pathAllocators[bestMatch](request, response, bestMatch);
617 600
618 Rest.Log.DebugFormat("{0} Path based REST handler matched with <{1}>", MsgId, bestMatch); 601 Rest.Log.DebugFormat("{0} Path based REST handler matched with <{1}>", MsgId, bestMatch);
@@ -621,7 +604,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
621 { 604 {
622 pathHandlers[bestMatch](rdata); 605 pathHandlers[bestMatch](rdata);
623 } 606 }
624 607
625 // A plugin generated error indicates a request-related error 608 // A plugin generated error indicates a request-related error
626 // that has been handled by the plugin. 609 // that has been handled by the plugin.
627 610
@@ -629,11 +612,9 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
629 { 612 {
630 Rest.Log.WarnFormat("{0} Request failed: {1}", MsgId, r.Message); 613 Rest.Log.WarnFormat("{0} Request failed: {1}", MsgId, r.Message);
631 } 614 }
632
633 } 615 }
634 616
635 return (rdata == null) ? false : rdata.handled; 617 return (rdata == null) ? false : rdata.handled;
636
637 } 618 }
638 619
639 /// <summary> 620 /// <summary>
@@ -643,7 +624,6 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
643 624
644 public void AddPathHandler(RestMethodHandler mh, string path, RestMethodAllocator ra) 625 public void AddPathHandler(RestMethodHandler mh, string path, RestMethodAllocator ra)
645 { 626 {
646
647 if (!IsEnabled) 627 if (!IsEnabled)
648 { 628 {
649 return; 629 return;
@@ -665,8 +645,6 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
665 645
666 pathHandlers.Add(path, mh); 646 pathHandlers.Add(path, mh);
667 pathAllocators.Add(path, ra); 647 pathAllocators.Add(path, ra);
668
669 } 648 }
670 } 649 }
671
672} 650}
diff --git a/OpenSim/ApplicationPlugins/Rest/Inventory/RestInventoryServices.cs b/OpenSim/ApplicationPlugins/Rest/Inventory/RestInventoryServices.cs
index 1ea598e..82e9a13 100644
--- a/OpenSim/ApplicationPlugins/Rest/Inventory/RestInventoryServices.cs
+++ b/OpenSim/ApplicationPlugins/Rest/Inventory/RestInventoryServices.cs
@@ -23,7 +23,6 @@
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 *
27 */ 26 */
28 27
29using System; 28using System;
@@ -42,11 +41,9 @@ using Nini.Config;
42 41
43namespace OpenSim.ApplicationPlugins.Rest.Inventory 42namespace OpenSim.ApplicationPlugins.Rest.Inventory
44{ 43{
45
46 public class RestInventoryServices : IRest 44 public class RestInventoryServices : IRest
47 { 45 {
48 46 private static readonly int PARM_USERID = 0;
49 private static readonly int PARM_USERID = 0;
50 private static readonly int PARM_PATH = 1; 47 private static readonly int PARM_PATH = 1;
51 48
52 private bool enabled = false; 49 private bool enabled = false;
@@ -61,11 +58,10 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
61 58
62 public RestInventoryServices() 59 public RestInventoryServices()
63 { 60 {
64
65 Rest.Log.InfoFormat("{0} Inventory services initializing", MsgId); 61 Rest.Log.InfoFormat("{0} Inventory services initializing", MsgId);
66 Rest.Log.InfoFormat("{0} Using REST Implementation Version {1}", MsgId, Rest.Version); 62 Rest.Log.InfoFormat("{0} Using REST Implementation Version {1}", MsgId, Rest.Version);
67 63
68 // If a relative path was specified for the handler's domain, 64 // If a relative path was specified for the handler's domain,
69 // add the standard prefix to make it absolute, e.g. /admin 65 // add the standard prefix to make it absolute, e.g. /admin
70 66
71 if (!qPrefix.StartsWith(Rest.UrlPathSeparator)) 67 if (!qPrefix.StartsWith(Rest.UrlPathSeparator))
@@ -82,7 +78,6 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
82 enabled = true; 78 enabled = true;
83 79
84 Rest.Log.InfoFormat("{0} Inventory services initialization complete", MsgId); 80 Rest.Log.InfoFormat("{0} Inventory services initialization complete", MsgId);
85
86 } 81 }
87 82
88 /// <summary> 83 /// <summary>
@@ -143,7 +138,6 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
143 138
144 private void DoInventory(RequestData hdata) 139 private void DoInventory(RequestData hdata)
145 { 140 {
146
147 InventoryRequestData rdata = (InventoryRequestData) hdata; 141 InventoryRequestData rdata = (InventoryRequestData) hdata;
148 142
149 Rest.Log.DebugFormat("{0} DoInventory ENTRY", MsgId); 143 Rest.Log.DebugFormat("{0} DoInventory ENTRY", MsgId);
@@ -155,7 +149,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
155 return; 149 return;
156 } 150 }
157 151
158 // Now that we know this is a serious attempt to 152 // Now that we know this is a serious attempt to
159 // access inventory data, we should find out who 153 // access inventory data, we should find out who
160 // is asking, and make sure they are authorized 154 // is asking, and make sure they are authorized
161 // to do so. We need to validate the caller's 155 // to do so. We need to validate the caller's
@@ -166,9 +160,9 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
166 // With the present HTTP server we can't use the 160 // With the present HTTP server we can't use the
167 // builtin authentication mechanisms because they 161 // builtin authentication mechanisms because they
168 // would be enforced for all in-bound requests. 162 // would be enforced for all in-bound requests.
169 // Instead we look at the headers ourselves and 163 // Instead we look at the headers ourselves and
170 // handle authentication directly. 164 // handle authentication directly.
171 165
172 try 166 try
173 { 167 {
174 if (!rdata.IsAuthenticated) 168 if (!rdata.IsAuthenticated)
@@ -205,7 +199,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
205 // 199 //
206 // Indicating that this is an inventory request for 200 // Indicating that this is an inventory request for
207 // an avatar named Arthur Dent. This is ALL that is 201 // an avatar named Arthur Dent. This is ALL that is
208 // required to designate a GET for an entire 202 // required to designate a GET for an entire
209 // inventory. 203 // inventory.
210 // 204 //
211 // Do we have at least a user agent name? 205 // Do we have at least a user agent name?
@@ -247,7 +241,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
247 241
248 if (rdata.userProfile != null) 242 if (rdata.userProfile != null)
249 { 243 {
250 Rest.Log.DebugFormat("{0} Profile obtained for agent {1} {2}", 244 Rest.Log.DebugFormat("{0} Profile obtained for agent {1} {2}",
251 MsgId, rdata.userProfile.FirstName, rdata.userProfile.SurName); 245 MsgId, rdata.userProfile.FirstName, rdata.userProfile.SurName);
252 } 246 }
253 else 247 else
@@ -269,18 +263,17 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
269 // response is not recieved in a timely fashion. 263 // response is not recieved in a timely fashion.
270 264
271 rdata.uuid = rdata.userProfile.ID; 265 rdata.uuid = rdata.userProfile.ID;
272 266
273 if (Rest.InventoryServices.HasInventoryForUser(rdata.uuid)) 267 if (Rest.InventoryServices.HasInventoryForUser(rdata.uuid))
274 { 268 {
275
276 rdata.root = Rest.InventoryServices.RequestRootFolder(rdata.uuid); 269 rdata.root = Rest.InventoryServices.RequestRootFolder(rdata.uuid);
277 270
278 Rest.Log.DebugFormat("{0} Inventory Root retrieved for {1} {2}", 271 Rest.Log.DebugFormat("{0} Inventory Root retrieved for {1} {2}",
279 MsgId, rdata.userProfile.FirstName, rdata.userProfile.SurName); 272 MsgId, rdata.userProfile.FirstName, rdata.userProfile.SurName);
280 273
281 Rest.InventoryServices.RequestInventoryForUser(rdata.uuid, rdata.GetUserInventory); 274 Rest.InventoryServices.RequestInventoryForUser(rdata.uuid, rdata.GetUserInventory);
282 275
283 Rest.Log.DebugFormat("{0} Inventory catalog requested for {1} {2}", 276 Rest.Log.DebugFormat("{0} Inventory catalog requested for {1} {2}",
284 MsgId, rdata.userProfile.FirstName, rdata.userProfile.SurName); 277 MsgId, rdata.userProfile.FirstName, rdata.userProfile.SurName);
285 278
286 lock (rdata) 279 lock (rdata)
@@ -293,7 +286,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
293 286
294 if (rdata.root == null) 287 if (rdata.root == null)
295 { 288 {
296 Rest.Log.WarnFormat("{0} Inventory is not available [1] for agent {1} {2}", 289 Rest.Log.WarnFormat("{0} Inventory is not available [1] for agent {1} {2}",
297 MsgId, rdata.userProfile.FirstName, rdata.userProfile.SurName); 290 MsgId, rdata.userProfile.FirstName, rdata.userProfile.SurName);
298 rdata.Fail(Rest.HttpStatusCodeServerError, "inventory retrieval failed"); 291 rdata.Fail(Rest.HttpStatusCodeServerError, "inventory retrieval failed");
299 } 292 }
@@ -301,7 +294,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
301 } 294 }
302 else 295 else
303 { 296 {
304 Rest.Log.WarnFormat("{0} Inventory is not locally available for agent {1} {2}", 297 Rest.Log.WarnFormat("{0} Inventory is not locally available for agent {1} {2}",
305 MsgId, rdata.userProfile.FirstName, rdata.userProfile.SurName); 298 MsgId, rdata.userProfile.FirstName, rdata.userProfile.SurName);
306 rdata.Fail(Rest.HttpStatusCodeNotFound, "no local inventory for user"); 299 rdata.Fail(Rest.HttpStatusCodeNotFound, "no local inventory for user");
307 } 300 }
@@ -311,7 +304,6 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
311 304
312 switch (rdata.method) 305 switch (rdata.method)
313 { 306 {
314
315 case Rest.HEAD : // Do the processing, set the status code, suppress entity 307 case Rest.HEAD : // Do the processing, set the status code, suppress entity
316 DoGet(rdata); 308 DoGet(rdata);
317 rdata.buffer = null; 309 rdata.buffer = null;
@@ -334,12 +326,11 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
334 break; 326 break;
335 327
336 default : 328 default :
337 Rest.Log.WarnFormat("{0} Method {1} not supported for {2}", 329 Rest.Log.WarnFormat("{0} Method {1} not supported for {2}",
338 MsgId, rdata.method, rdata.path); 330 MsgId, rdata.method, rdata.path);
339 rdata.Fail(Rest.HttpStatusCodeMethodNotAllowed, rdata.method+" not supported"); 331 rdata.Fail(Rest.HttpStatusCodeMethodNotAllowed, rdata.method+" not supported");
340 break; 332 break;
341 } 333 }
342
343 } 334 }
344 335
345 #endregion Interface 336 #endregion Interface
@@ -355,18 +346,17 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
355 346
356 private void DoGet(InventoryRequestData rdata) 347 private void DoGet(InventoryRequestData rdata)
357 { 348 {
358
359 rdata.initXmlWriter(); 349 rdata.initXmlWriter();
360 350
361 rdata.writer.WriteStartElement(String.Empty,"Inventory",String.Empty); 351 rdata.writer.WriteStartElement(String.Empty,"Inventory",String.Empty);
362 352
363 // If there are additional parameters, then these represent 353 // If there are additional parameters, then these represent
364 // a path relative to the root of the inventory. This path 354 // a path relative to the root of the inventory. This path
365 // must be traversed before we format the sub-tree thus 355 // must be traversed before we format the sub-tree thus
366 // identified. 356 // identified.
367 357
368 traverse(rdata, rdata.root, PARM_PATH); 358 traverse(rdata, rdata.root, PARM_PATH);
369 359
370 // Close all open elements 360 // Close all open elements
371 361
372 rdata.writer.WriteFullEndElement(); 362 rdata.writer.WriteFullEndElement();
@@ -379,9 +369,8 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
379 // constructed from the result of the XML writer. 369 // constructed from the result of the XML writer.
380 370
381 rdata.Respond(String.Format("Inventory {0} Normal completion", rdata.method)); 371 rdata.Respond(String.Format("Inventory {0} Normal completion", rdata.method));
382
383 } 372 }
384 373
385 /// <summary> 374 /// <summary>
386 /// In the case of the inventory, and probably in general, 375 /// In the case of the inventory, and probably in general,
387 /// the distinction between PUT and POST is not always 376 /// the distinction between PUT and POST is not always
@@ -392,7 +381,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
392 /// consistency across different implementations. 381 /// consistency across different implementations.
393 /// 382 ///
394 /// For OpenSim PUT is an update and POST is an addition. This 383 /// For OpenSim PUT is an update and POST is an addition. This
395 /// is the behavior required by the HTTP specification and 384 /// is the behavior required by the HTTP specification and
396 /// therefore as required by REST. 385 /// therefore as required by REST.
397 /// 386 ///
398 /// The best way to explain the distinction is to 387 /// The best way to explain the distinction is to
@@ -401,53 +390,51 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
401 /// actual entity to be modified or replaced, i.e. the 390 /// actual entity to be modified or replaced, i.e. the
402 /// enclosed entity. 391 /// enclosed entity.
403 /// 392 ///
404 /// If the operation is POST,then the URI describes the 393 /// If the operation is POST,then the URI describes the
405 /// context into which the new entity will be added. 394 /// context into which the new entity will be added.
406 /// 395 ///
407 /// As an example, suppose the URI contains: 396 /// As an example, suppose the URI contains:
408 /// /admin/inventory/Clothing 397 /// /admin/inventory/Clothing
409 /// 398 ///
410 /// A PUT request will normally result in some modification of 399 /// A PUT request will normally result in some modification of
411 /// the folder or item named "Clothing". Whereas a POST 400 /// the folder or item named "Clothing". Whereas a POST
412 /// request will normally add some new information into the 401 /// request will normally add some new information into the
413 /// content identified by Clothing. It follows from this 402 /// content identified by Clothing. It follows from this
414 /// that for POST, the element identified by the URI MUST 403 /// that for POST, the element identified by the URI MUST
415 /// be a folder. 404 /// be a folder.
416 /// </summary> 405 /// </summary>
417 406
418 /// <summary> 407 /// <summary>
419 /// POST adds new information to the inventory in the 408 /// POST adds new information to the inventory in the
420 /// context identified by the URI. 409 /// context identified by the URI.
421 /// </summary> 410 /// </summary>
422 /// <param name=rdata>HTTP service request work area</param> 411 /// <param name=rdata>HTTP service request work area</param>
423 412
424 private void DoExtend(InventoryRequestData rdata) 413 private void DoExtend(InventoryRequestData rdata)
425 { 414 {
426
427 bool created = false; 415 bool created = false;
428 bool modified = false; 416 bool modified = false;
429 string newnode = String.Empty; 417 string newnode = String.Empty;
430 418
431 // Resolve the context node specified in the URI. Entity 419 // Resolve the context node specified in the URI. Entity
432 // data will be ADDED beneath this node. rdata already contains 420 // data will be ADDED beneath this node. rdata already contains
433 // information about the current content of the user's 421 // information about the current content of the user's
434 // inventory. 422 // inventory.
435 423
436 Object InventoryNode = getInventoryNode(rdata, rdata.root, PARM_PATH, Rest.Fill); 424 Object InventoryNode = getInventoryNode(rdata, rdata.root, PARM_PATH, Rest.Fill);
437 425
438 // Processing depends upon the type of inventory node 426 // Processing depends upon the type of inventory node
439 // identified in the URI. This is the CONTEXT for the 427 // identified in the URI. This is the CONTEXT for the
440 // change. We either got a context or we threw an 428 // change. We either got a context or we threw an
441 // exception. 429 // exception.
442 430
443 // It follows that we can only add information if the URI 431 // It follows that we can only add information if the URI
444 // has identified a folder. So only a type of folder is supported 432 // has identified a folder. So only a type of folder is supported
445 // in this case. 433 // in this case.
446 434
447 if (typeof(InventoryFolderBase) == InventoryNode.GetType() || 435 if (typeof(InventoryFolderBase) == InventoryNode.GetType() ||
448 typeof(InventoryFolderImpl) == InventoryNode.GetType()) 436 typeof(InventoryFolderImpl) == InventoryNode.GetType())
449 { 437 {
450
451 // Cast the context node appropriately. 438 // Cast the context node appropriately.
452 439
453 InventoryFolderBase context = (InventoryFolderBase) InventoryNode; 440 InventoryFolderBase context = (InventoryFolderBase) InventoryNode;
@@ -466,12 +453,11 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
466 XmlInventoryCollection entity = ReconstituteEntity(rdata); 453 XmlInventoryCollection entity = ReconstituteEntity(rdata);
467 454
468 // Inlined assets can be included in entity. These must be incorporated into 455 // Inlined assets can be included in entity. These must be incorporated into
469 // the asset database before we attempt to update the inventory. If anything 456 // the asset database before we attempt to update the inventory. If anything
470 // fails, return a failure to requestor. 457 // fails, return a failure to requestor.
471 458
472 if (entity.Assets.Count > 0) 459 if (entity.Assets.Count > 0)
473 { 460 {
474
475 Rest.Log.DebugFormat("{0} Adding {1} assets to server", 461 Rest.Log.DebugFormat("{0} Adding {1} assets to server",
476 MsgId, entity.Assets.Count); 462 MsgId, entity.Assets.Count);
477 463
@@ -489,9 +475,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
489 { 475 {
490 Rest.Dump(asset.Data); 476 Rest.Dump(asset.Data);
491 } 477 }
492
493 } 478 }
494
495 } 479 }
496 480
497 // Modify the context using the collection of folders and items 481 // Modify the context using the collection of folders and items
@@ -499,7 +483,6 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
499 483
500 foreach (InventoryFolderBase folder in entity.Folders) 484 foreach (InventoryFolderBase folder in entity.Folders)
501 { 485 {
502
503 InventoryFolderBase found; 486 InventoryFolderBase found;
504 487
505 // If the parentID is zero, then this folder is going 488 // If the parentID is zero, then this folder is going
@@ -544,7 +527,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
544 527
545 modified = true; 528 modified = true;
546 rdata.appendStatus(String.Format("<p> Created folder {0}, UUID {1}<p>", 529 rdata.appendStatus(String.Format("<p> Created folder {0}, UUID {1}<p>",
547 folder.Name, folder.ID)); 530 folder.Name, folder.ID));
548 } 531 }
549 else 532 else
550 { 533 {
@@ -553,10 +536,8 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
553 536
554 created = true; 537 created = true;
555 rdata.appendStatus(String.Format("<p> Modified folder {0}, UUID {1}<p>", 538 rdata.appendStatus(String.Format("<p> Modified folder {0}, UUID {1}<p>",
556 folder.Name, folder.ID)); 539 folder.Name, folder.ID));
557
558 } 540 }
559
560 } 541 }
561 542
562 // Now we repeat a similar process for the items included 543 // Now we repeat a similar process for the items included
@@ -564,7 +545,6 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
564 545
565 foreach (InventoryItemBase item in entity.Items) 546 foreach (InventoryItemBase item in entity.Items)
566 { 547 {
567
568 InventoryItemBase found = null; 548 InventoryItemBase found = null;
569 549
570 // If the parentID is zero, then this is going 550 // If the parentID is zero, then this is going
@@ -575,7 +555,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
575 item.Folder = context.ID; 555 item.Folder = context.ID;
576 } 556 }
577 557
578 // Determine whether this is a new item or a 558 // Determine whether this is a new item or a
579 // replacement definition. 559 // replacement definition.
580 560
581 foreach (InventoryItemBase xi in rdata.items) 561 foreach (InventoryItemBase xi in rdata.items)
@@ -604,7 +584,6 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
604 created = true; 584 created = true;
605 rdata.appendStatus(String.Format("<p> Created item {2}, UUID {3}<p>", item.Name, item.ID)); 585 rdata.appendStatus(String.Format("<p> Created item {2}, UUID {3}<p>", item.Name, item.ID));
606 } 586 }
607
608 } 587 }
609 588
610 if (created) 589 if (created)
@@ -627,7 +606,6 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
627 } 606 }
628 607
629 rdata.Respond("Inventory " + rdata.method + ": Normal completion"); 608 rdata.Respond("Inventory " + rdata.method + ": Normal completion");
630
631 } 609 }
632 else 610 else
633 { 611 {
@@ -635,35 +613,33 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
635 MsgId, rdata.method, rdata.path, InventoryNode.GetType()); 613 MsgId, rdata.method, rdata.path, InventoryNode.GetType());
636 rdata.Fail(Rest.HttpStatusCodeBadRequest, "invalid resource context"); 614 rdata.Fail(Rest.HttpStatusCodeBadRequest, "invalid resource context");
637 } 615 }
638
639 } 616 }
640 617
641 /// <summary> 618 /// <summary>
642 /// PUT updates the URI-identified element in the inventory. This 619 /// PUT updates the URI-identified element in the inventory. This
643 /// is actually far more flexible than it might at first sound. For 620 /// is actually far more flexible than it might at first sound. For
644 /// PUT the URI serves two purposes: 621 /// PUT the URI serves two purposes:
645 /// [1] It identifies the user whose inventory is to be 622 /// [1] It identifies the user whose inventory is to be
646 /// processed. 623 /// processed.
647 /// [2] It optionally specifies a subtree of the inventory 624 /// [2] It optionally specifies a subtree of the inventory
648 /// that is to be used to resolve any relative subtree 625 /// that is to be used to resolve any relative subtree
649 /// specifications in the entity. If nothing is specified 626 /// specifications in the entity. If nothing is specified
650 /// then the whole of the private inventory is implied. 627 /// then the whole of the private inventory is implied.
651 /// Please note that the subtree specified by the URI is only relevant 628 /// Please note that the subtree specified by the URI is only relevant
652 /// to an entity containing a URI relative specification, i.e. one or 629 /// to an entity containing a URI relative specification, i.e. one or
653 /// more elements do not specify parent folder information. These 630 /// more elements do not specify parent folder information. These
654 /// elements will be implicitly referenced within the context identified 631 /// elements will be implicitly referenced within the context identified
655 /// by the URI. 632 /// by the URI.
656 /// If an element in the entity specifies an explicit parent folder, then 633 /// If an element in the entity specifies an explicit parent folder, then
657 /// that parent is effective, regardless of any value specified in the 634 /// that parent is effective, regardless of any value specified in the
658 /// URI. If the parent does not exist, then the element, and any dependent 635 /// URI. If the parent does not exist, then the element, and any dependent
659 /// elements, are ignored. This case is actually detected and handled 636 /// elements, are ignored. This case is actually detected and handled
660 /// during the reconstitution process. 637 /// during the reconstitution process.
661 /// </summary> 638 /// </summary>
662 /// <param name=rdata>HTTP service request work area</param> 639 /// <param name=rdata>HTTP service request work area</param>
663 640
664 private void DoUpdate(InventoryRequestData rdata) 641 private void DoUpdate(InventoryRequestData rdata)
665 { 642 {
666
667 int count = 0; 643 int count = 0;
668 bool created = false; 644 bool created = false;
669 bool modified = false; 645 bool modified = false;
@@ -675,8 +651,8 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
675 Object InventoryNode = getInventoryNode(rdata, rdata.root, PARM_PATH, Rest.Fill); 651 Object InventoryNode = getInventoryNode(rdata, rdata.root, PARM_PATH, Rest.Fill);
676 652
677 // As long as we have a node, then we have something 653 // As long as we have a node, then we have something
678 // meaningful to do, unlike POST. So we reconstitute the 654 // meaningful to do, unlike POST. So we reconstitute the
679 // subtree before doing anything else. Note that we 655 // subtree before doing anything else. Note that we
680 // etiher got a valid node or we threw an exception. 656 // etiher got a valid node or we threw an exception.
681 657
682 XmlInventoryCollection entity = ReconstituteEntity(rdata); 658 XmlInventoryCollection entity = ReconstituteEntity(rdata);
@@ -705,33 +681,31 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
705 { 681 {
706 Rest.Dump(asset.Data); 682 Rest.Dump(asset.Data);
707 } 683 }
708
709 } 684 }
710 } 685 }
711 686
712 // The URI specifies either a folder or an item to be updated. 687 // The URI specifies either a folder or an item to be updated.
713 // 688 //
714 // The root node in the entity will replace the node identified 689 // The root node in the entity will replace the node identified
715 // by the URI. This means the parent will remain the same, but 690 // by the URI. This means the parent will remain the same, but
716 // any or all attributes associated with the named element 691 // any or all attributes associated with the named element
717 // will change. 692 // will change.
718 // 693 //
719 // If the inventory collection contains an element with a zero 694 // If the inventory collection contains an element with a zero
720 // parent ID, then this is taken to be the replacement for the 695 // parent ID, then this is taken to be the replacement for the
721 // named node. The collection MAY also specify an explicit 696 // named node. The collection MAY also specify an explicit
722 // parent ID, in this case it MAY identify the same parent as 697 // parent ID, in this case it MAY identify the same parent as
723 // the current node, or it MAY specify a different parent, 698 // the current node, or it MAY specify a different parent,
724 // indicating that the folder is being moved in addition to any 699 // indicating that the folder is being moved in addition to any
725 // other modifications being made. 700 // other modifications being made.
726 701
727 if (typeof(InventoryFolderBase) == InventoryNode.GetType() || 702 if (typeof(InventoryFolderBase) == InventoryNode.GetType() ||
728 typeof(InventoryFolderImpl) == InventoryNode.GetType()) 703 typeof(InventoryFolderImpl) == InventoryNode.GetType())
729 { 704 {
730
731 bool rfound = false; 705 bool rfound = false;
732 InventoryFolderBase uri = (InventoryFolderBase) InventoryNode; 706 InventoryFolderBase uri = (InventoryFolderBase) InventoryNode;
733 InventoryFolderBase xml = null; 707 InventoryFolderBase xml = null;
734 708
735 // If the entity to be replaced resolved to be the root 709 // If the entity to be replaced resolved to be the root
736 // directory itself (My Inventory), then make sure that 710 // directory itself (My Inventory), then make sure that
737 // the supplied data include as appropriately typed and 711 // the supplied data include as appropriately typed and
@@ -741,7 +715,6 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
741 715
742 if (uri == rdata.root) 716 if (uri == rdata.root)
743 { 717 {
744
745 foreach (InventoryFolderBase folder in entity.Folders) 718 foreach (InventoryFolderBase folder in entity.Folders)
746 { 719 {
747 if ((rfound = (folder.Name == PRIVATE_ROOT_NAME))) 720 if ((rfound = (folder.Name == PRIVATE_ROOT_NAME)))
@@ -757,7 +730,6 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
757 MsgId, rdata.method, rdata.path); 730 MsgId, rdata.method, rdata.path);
758 rdata.Fail(Rest.HttpStatusCodeBadRequest, "invalid inventory structure"); 731 rdata.Fail(Rest.HttpStatusCodeBadRequest, "invalid inventory structure");
759 } 732 }
760
761 } 733 }
762 734
763 // Scan the set of folders in the entity collection for an 735 // Scan the set of folders in the entity collection for an
@@ -768,7 +740,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
768 // ambiguity in this case because this is POST and we are 740 // ambiguity in this case because this is POST and we are
769 // supposed to be modifying a specific node. 741 // supposed to be modifying a specific node.
770 // We assign any element IDs required as an economy; we don't 742 // We assign any element IDs required as an economy; we don't
771 // want to iterate over the fodler set again if it can be 743 // want to iterate over the fodler set again if it can be
772 // helped. 744 // helped.
773 745
774 foreach (InventoryFolderBase folder in entity.Folders) 746 foreach (InventoryFolderBase folder in entity.Folders)
@@ -795,13 +767,12 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
795 // Exactly one entry means we ARE replacing the node 767 // Exactly one entry means we ARE replacing the node
796 // identified by the URI. So we delete the old folder 768 // identified by the URI. So we delete the old folder
797 // by moving it to the trash and then purging it. 769 // by moving it to the trash and then purging it.
798 // We then add all of the folders and items we 770 // We then add all of the folders and items we
799 // included in the entity. The subtree has been 771 // included in the entity. The subtree has been
800 // modified. 772 // modified.
801 773
802 if (count == 1) 774 if (count == 1)
803 { 775 {
804
805 InventoryFolderBase TrashCan = GetTrashCan(rdata); 776 InventoryFolderBase TrashCan = GetTrashCan(rdata);
806 777
807 // All went well, so we generate a UUID is one is 778 // All went well, so we generate a UUID is one is
@@ -816,10 +787,9 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
816 Rest.InventoryServices.MoveFolder(uri); 787 Rest.InventoryServices.MoveFolder(uri);
817 Rest.InventoryServices.PurgeFolder(TrashCan); 788 Rest.InventoryServices.PurgeFolder(TrashCan);
818 modified = true; 789 modified = true;
819
820 } 790 }
821 791
822 // Now, regardelss of what they represent, we 792 // Now, regardelss of what they represent, we
823 // integrate all of the elements in the entity. 793 // integrate all of the elements in the entity.
824 794
825 foreach (InventoryFolderBase f in entity.Folders) 795 foreach (InventoryFolderBase f in entity.Folders)
@@ -833,7 +803,6 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
833 rdata.appendStatus(String.Format("<p>Storing item {0} UUID {1}<p>", it.Name, it.ID)); 803 rdata.appendStatus(String.Format("<p>Storing item {0} UUID {1}<p>", it.Name, it.ID));
834 Rest.InventoryServices.AddItem(it); 804 Rest.InventoryServices.AddItem(it);
835 } 805 }
836
837 } 806 }
838 807
839 /// <summary> 808 /// <summary>
@@ -846,7 +815,6 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
846 815
847 else 816 else
848 { 817 {
849
850 InventoryItemBase uri = (InventoryItemBase) InventoryNode; 818 InventoryItemBase uri = (InventoryItemBase) InventoryNode;
851 InventoryItemBase xml = null; 819 InventoryItemBase xml = null;
852 820
@@ -865,7 +833,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
865 } 833 }
866 834
867 xml = entity.Items[0]; 835 xml = entity.Items[0];
868 836
869 if (xml.ID == LLUUID.Zero) 837 if (xml.ID == LLUUID.Zero)
870 { 838 {
871 xml.ID = LLUUID.Random(); 839 xml.ID = LLUUID.Random();
@@ -884,7 +852,6 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
884 Rest.InventoryServices.AddItem(xml); 852 Rest.InventoryServices.AddItem(xml);
885 853
886 rdata.appendStatus(String.Format("<p>Storing item {0} UUID {1}<p>", xml.Name, xml.ID)); 854 rdata.appendStatus(String.Format("<p>Storing item {0} UUID {1}<p>", xml.Name, xml.ID));
887
888 } 855 }
889 856
890 if (created) 857 if (created)
@@ -904,7 +871,6 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
904 } 871 }
905 872
906 rdata.Respond("Inventory " + rdata.method + ": Normal completion"); 873 rdata.Respond("Inventory " + rdata.method + ": Normal completion");
907
908 } 874 }
909 875
910 /// <summary> 876 /// <summary>
@@ -917,7 +883,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
917 /// 883 ///
918 /// Folders are deleted by moving them to another folder and then 884 /// Folders are deleted by moving them to another folder and then
919 /// purging that folder. We'll do that by creating a temporary 885 /// purging that folder. We'll do that by creating a temporary
920 /// sub-folder in the TrashCan and purging that folder's 886 /// sub-folder in the TrashCan and purging that folder's
921 /// contents. If we can't can it, we don't delete it... 887 /// contents. If we can't can it, we don't delete it...
922 /// So, if no trashcan is available, the request does nothing. 888 /// So, if no trashcan is available, the request does nothing.
923 /// Items are summarily deleted. 889 /// Items are summarily deleted.
@@ -930,13 +896,11 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
930 896
931 private void DoDelete(InventoryRequestData rdata) 897 private void DoDelete(InventoryRequestData rdata)
932 { 898 {
933
934 Object InventoryNode = getInventoryNode(rdata, rdata.root, PARM_PATH, false); 899 Object InventoryNode = getInventoryNode(rdata, rdata.root, PARM_PATH, false);
935 900
936 if (typeof(InventoryFolderBase) == InventoryNode.GetType() || 901 if (typeof(InventoryFolderBase) == InventoryNode.GetType() ||
937 typeof(InventoryFolderImpl) == InventoryNode.GetType()) 902 typeof(InventoryFolderImpl) == InventoryNode.GetType())
938 { 903 {
939
940 InventoryFolderBase TrashCan = GetTrashCan(rdata); 904 InventoryFolderBase TrashCan = GetTrashCan(rdata);
941 905
942 InventoryFolderBase folder = (InventoryFolderBase) InventoryNode; 906 InventoryFolderBase folder = (InventoryFolderBase) InventoryNode;
@@ -947,7 +911,6 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
947 Rest.InventoryServices.PurgeFolder(TrashCan); 911 Rest.InventoryServices.PurgeFolder(TrashCan);
948 912
949 rdata.appendStatus(String.Format("<p>Deleted folder {0} UUID {1}<p>", folder.Name, folder.ID)); 913 rdata.appendStatus(String.Format("<p>Deleted folder {0} UUID {1}<p>", folder.Name, folder.ID));
950
951 } 914 }
952 915
953 // Deleting items is much more straight forward. 916 // Deleting items is much more straight forward.
@@ -963,7 +926,6 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
963 926
964 rdata.Complete(); 927 rdata.Complete();
965 rdata.Respond("Inventory " + rdata.method + ": Normal completion"); 928 rdata.Respond("Inventory " + rdata.method + ": Normal completion");
966
967 } 929 }
968 930
969#endregion method-specific processing 931#endregion method-specific processing
@@ -971,10 +933,10 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
971 /// <summary> 933 /// <summary>
972 /// This method is called to obtain the OpenSim inventory object identified 934 /// This method is called to obtain the OpenSim inventory object identified
973 /// by the supplied URI. This may be either an Item or a Folder, so a suitably 935 /// by the supplied URI. This may be either an Item or a Folder, so a suitably
974 /// ambiguous return type is employed (Object). This method recurses as 936 /// ambiguous return type is employed (Object). This method recurses as
975 /// necessary to process the designated hierarchy. 937 /// necessary to process the designated hierarchy.
976 /// 938 ///
977 /// If we reach the end of the URI then we return the contextual folder to 939 /// If we reach the end of the URI then we return the contextual folder to
978 /// our caller. 940 /// our caller.
979 /// 941 ///
980 /// If we are not yet at the end of the URI we attempt to find a child folder 942 /// If we are not yet at the end of the URI we attempt to find a child folder
@@ -1000,7 +962,6 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
1000 InventoryFolderBase folder, 962 InventoryFolderBase folder,
1001 int pi, bool fill) 963 int pi, bool fill)
1002 { 964 {
1003
1004 InventoryFolderBase foundf = null; 965 InventoryFolderBase foundf = null;
1005 int fk = 0; 966 int fk = 0;
1006 967
@@ -1013,18 +974,19 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
1013 return folder; 974 return folder;
1014 } 975 }
1015 976
1016 // There are more names in the parameter sequence, 977 // There are more names in the parameter sequence,
1017 // look for the folder named by param[pi] as a 978 // look for the folder named by param[pi] as a
1018 // child of the folder supplied as an argument. 979 // child of the folder supplied as an argument.
1019 // Note that a UUID may have been supplied as the 980 // Note that a UUID may have been supplied as the
1020 // identifier (it is the ONLY guaranteed unambiguous 981 // identifier (it is the ONLY guaranteed unambiguous
1021 // option. 982 // option.
1022 983
1023 if (rdata.folders != null) 984 if (rdata.folders != null)
985 {
1024 foreach (InventoryFolderBase f in rdata.folders) 986 foreach (InventoryFolderBase f in rdata.folders)
1025 { 987 {
1026 // Look for the present node in the directory list 988 // Look for the present node in the directory list
1027 if (f.ParentID == folder.ID && 989 if (f.ParentID == folder.ID &&
1028 (f.Name == rdata.Parameters[pi] || 990 (f.Name == rdata.Parameters[pi] ||
1029 f.ID.ToString() == rdata.Parameters[pi])) 991 f.ID.ToString() == rdata.Parameters[pi]))
1030 { 992 {
@@ -1032,7 +994,8 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
1032 fk++; 994 fk++;
1033 } 995 }
1034 } 996 }
1035 997 }
998
1036 // If more than one node matched, then the path, as specified 999 // If more than one node matched, then the path, as specified
1037 // is ambiguous. 1000 // is ambiguous.
1038 1001
@@ -1063,7 +1026,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
1063 InventoryItemBase li = null; 1026 InventoryItemBase li = null;
1064 foreach (InventoryItemBase i in rdata.items) 1027 foreach (InventoryItemBase i in rdata.items)
1065 { 1028 {
1066 if (i.Folder == folder.ID && 1029 if (i.Folder == folder.ID &&
1067 (i.Name == rdata.Parameters[pi] || 1030 (i.Name == rdata.Parameters[pi] ||
1068 i.ID.ToString() == rdata.Parameters[pi])) 1031 i.ID.ToString() == rdata.Parameters[pi]))
1069 { 1032 {
@@ -1099,11 +1062,10 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
1099 rdata.Fail(Rest.HttpStatusCodeNotFound, "resource "+rdata.path+" not found"); 1062 rdata.Fail(Rest.HttpStatusCodeNotFound, "resource "+rdata.path+" not found");
1100 1063
1101 return null; /* Never reached */ 1064 return null; /* Never reached */
1102
1103 } 1065 }
1104 1066
1105 /// <summary> 1067 /// <summary>
1106 /// This routine traverse the inventory's structure until the end-point identified 1068 /// This routine traverse the inventory's structure until the end-point identified
1107 /// in the URI is reached, the remainder of the inventory (if any) is then formatted 1069 /// in the URI is reached, the remainder of the inventory (if any) is then formatted
1108 /// and returned to the requestor. 1070 /// and returned to the requestor.
1109 /// 1071 ///
@@ -1119,13 +1081,11 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
1119 1081
1120 private void traverse(InventoryRequestData rdata, InventoryFolderBase folder, int pi) 1082 private void traverse(InventoryRequestData rdata, InventoryFolderBase folder, int pi)
1121 { 1083 {
1122
1123 Rest.Log.DebugFormat("{0} Traverse[initial] : {1} {2} [{3}]", MsgId, folder.ID, folder.Name, pi); 1084 Rest.Log.DebugFormat("{0} Traverse[initial] : {1} {2} [{3}]", MsgId, folder.ID, folder.Name, pi);
1124 1085
1125 if (rdata.folders != null) 1086 if (rdata.folders != null)
1126 { 1087 {
1127 1088 // If there was only one parameter (avatar name), then the entire
1128 // If there was only one parameter (avatar name), then the entire
1129 // inventory is being requested. 1089 // inventory is being requested.
1130 1090
1131 if (rdata.Parameters.Length == 1) 1091 if (rdata.Parameters.Length == 1)
@@ -1159,18 +1119,16 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
1159 } 1119 }
1160 1120
1161 return; 1121 return;
1162
1163 } 1122 }
1164 } 1123 }
1165 1124
1166 /// <summary> 1125 /// <summary>
1167 /// This is the recursive method. I've separated them in this way so that 1126 /// This is the recursive method. I've separated them in this way so that
1168 /// we do not have to waste cycles on any first-case-only processing. 1127 /// we do not have to waste cycles on any first-case-only processing.
1169 /// </summary> 1128 /// </summary>
1170 1129
1171 private void traverseInventory(InventoryRequestData rdata, InventoryFolderBase folder, int pi) 1130 private void traverseInventory(InventoryRequestData rdata, InventoryFolderBase folder, int pi)
1172 { 1131 {
1173
1174 int fk = 0; 1132 int fk = 0;
1175 InventoryFolderBase ffound = null; 1133 InventoryFolderBase ffound = null;
1176 InventoryItemBase ifound = null; 1134 InventoryItemBase ifound = null;
@@ -1179,7 +1137,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
1179 1137
1180 foreach (InventoryFolderBase f in rdata.folders) 1138 foreach (InventoryFolderBase f in rdata.folders)
1181 { 1139 {
1182 if (f.ParentID == folder.ID && 1140 if (f.ParentID == folder.ID &&
1183 (f.Name == rdata.Parameters[pi] || 1141 (f.Name == rdata.Parameters[pi] ||
1184 f.ID.ToString() == rdata.Parameters[pi])) 1142 f.ID.ToString() == rdata.Parameters[pi]))
1185 { 1143 {
@@ -1194,14 +1152,13 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
1194 1152
1195 if (pi == rdata.Parameters.Length-1) 1153 if (pi == rdata.Parameters.Length-1)
1196 { 1154 {
1197
1198 // Only if there are any items, and there pretty much always are. 1155 // Only if there are any items, and there pretty much always are.
1199 1156
1200 if (rdata.items != null) 1157 if (rdata.items != null)
1201 { 1158 {
1202 foreach (InventoryItemBase i in rdata.items) 1159 foreach (InventoryItemBase i in rdata.items)
1203 { 1160 {
1204 if (i.Folder == folder.ID && 1161 if (i.Folder == folder.ID &&
1205 (i.Name == rdata.Parameters[pi] || 1162 (i.Name == rdata.Parameters[pi] ||
1206 i.ID.ToString() == rdata.Parameters[pi])) 1163 i.ID.ToString() == rdata.Parameters[pi]))
1207 { 1164 {
@@ -1230,7 +1187,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
1230 { 1187 {
1231 // Fetching an Item has a special significance. In this 1188 // Fetching an Item has a special significance. In this
1232 // case we also want to fetch the associated asset. 1189 // case we also want to fetch the associated asset.
1233 // To make it interesting, we'll d this via redirection. 1190 // To make it interesting, we'll d this via redirection.
1234 string asseturl = "http://" + rdata.hostname + ":" + rdata.port + 1191 string asseturl = "http://" + rdata.hostname + ":" + rdata.port +
1235 "/admin/assets" + Rest.UrlPathSeparator + ifound.AssetID.ToString(); 1192 "/admin/assets" + Rest.UrlPathSeparator + ifound.AssetID.ToString();
1236 rdata.Redirect(asseturl,Rest.PERMANENT); 1193 rdata.Redirect(asseturl,Rest.PERMANENT);
@@ -1240,14 +1197,14 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
1240 else if (fk > 1) 1197 else if (fk > 1)
1241 { 1198 {
1242 rdata.Fail(Rest.HttpStatusCodeConflict, 1199 rdata.Fail(Rest.HttpStatusCodeConflict,
1243 String.Format("ambiguous element ({0}) in path specified: <{1}>", 1200 String.Format("ambiguous element ({0}) in path specified: <{1}>",
1244 pi, rdata.path)); 1201 pi, rdata.path));
1245 } 1202 }
1246 1203
1247 Rest.Log.DebugFormat("{0} Inventory does not contain item/folder: <{1}>", 1204 Rest.Log.DebugFormat("{0} Inventory does not contain item/folder: <{1}>",
1248 MsgId, rdata.path); 1205 MsgId, rdata.path);
1249 rdata.Fail(Rest.HttpStatusCodeNotFound,String.Format("no such item/folder : {0}", 1206 rdata.Fail(Rest.HttpStatusCodeNotFound,String.Format("no such item/folder : {0}",
1250 rdata.Parameters[pi])); 1207 rdata.Parameters[pi]));
1251 1208
1252 } 1209 }
1253 1210
@@ -1264,10 +1221,9 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
1264 1221
1265 private void formatInventory(InventoryRequestData rdata, InventoryFolderBase folder, string indent) 1222 private void formatInventory(InventoryRequestData rdata, InventoryFolderBase folder, string indent)
1266 { 1223 {
1267
1268 if (Rest.DEBUG) 1224 if (Rest.DEBUG)
1269 { 1225 {
1270 Rest.Log.DebugFormat("{0} Folder : {1} {2} {3} type = {4}", 1226 Rest.Log.DebugFormat("{0} Folder : {1} {2} {3} type = {4}",
1271 MsgId, folder.ID, indent, folder.Name, folder.Type); 1227 MsgId, folder.ID, indent, folder.Name, folder.Type);
1272 indent += "\t"; 1228 indent += "\t";
1273 } 1229 }
@@ -1307,7 +1263,6 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
1307 // End folder item 1263 // End folder item
1308 1264
1309 rdata.writer.WriteEndElement(); 1265 rdata.writer.WriteEndElement();
1310
1311 } 1266 }
1312 1267
1313 /// <summary> 1268 /// <summary>
@@ -1319,8 +1274,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
1319 1274
1320 private void formatItem(InventoryRequestData rdata, InventoryItemBase i, string indent) 1275 private void formatItem(InventoryRequestData rdata, InventoryItemBase i, string indent)
1321 { 1276 {
1322 1277 Rest.Log.DebugFormat("{0} Item : {1} {2} {3} Type = {4}, AssetType = {5}",
1323 Rest.Log.DebugFormat("{0} Item : {1} {2} {3} Type = {4}, AssetType = {5}",
1324 MsgId, i.ID, indent, i.Name, i.InvType, i.AssetType); 1278 MsgId, i.ID, indent, i.Name, i.InvType, i.AssetType);
1325 1279
1326 rdata.writer.WriteStartElement(String.Empty,"Item",String.Empty); 1280 rdata.writer.WriteStartElement(String.Empty,"Item",String.Empty);
@@ -1350,11 +1304,10 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
1350 rdata.writer.WriteElementString("Asset",i.AssetID.ToString()); 1304 rdata.writer.WriteElementString("Asset",i.AssetID.ToString());
1351 1305
1352 rdata.writer.WriteEndElement(); 1306 rdata.writer.WriteEndElement();
1353
1354 } 1307 }
1355 1308
1356 /// <summary> 1309 /// <summary>
1357 /// This method creates a "trashcan" folder to support folder and item 1310 /// This method creates a "trashcan" folder to support folder and item
1358 /// deletions by this interface. The xisting trash folder is found and 1311 /// deletions by this interface. The xisting trash folder is found and
1359 /// this folder is created within it. It is called "tmp" to indicate to 1312 /// this folder is created within it. It is called "tmp" to indicate to
1360 /// the client that it is OK to delete this folder. The REST interface 1313 /// the client that it is OK to delete this folder. The REST interface
@@ -1366,7 +1319,6 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
1366 1319
1367 private InventoryFolderBase GetTrashCan(InventoryRequestData rdata) 1320 private InventoryFolderBase GetTrashCan(InventoryRequestData rdata)
1368 { 1321 {
1369
1370 InventoryFolderBase TrashCan = null; 1322 InventoryFolderBase TrashCan = null;
1371 1323
1372 foreach (InventoryFolderBase f in rdata.folders) 1324 foreach (InventoryFolderBase f in rdata.folders)
@@ -1393,7 +1345,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
1393 } 1345 }
1394 } 1346 }
1395 } 1347 }
1396 1348
1397 if (TrashCan == null) 1349 if (TrashCan == null)
1398 { 1350 {
1399 Rest.Log.DebugFormat("{0} No Trash Can available", MsgId); 1351 Rest.Log.DebugFormat("{0} No Trash Can available", MsgId);
@@ -1401,7 +1353,6 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
1401 } 1353 }
1402 1354
1403 return TrashCan; 1355 return TrashCan;
1404
1405 } 1356 }
1406 1357
1407 /// <summary> 1358 /// <summary>
@@ -1413,11 +1364,11 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
1413 1364
1414 private bool FolderHasChanged(InventoryFolderBase newf, InventoryFolderBase oldf) 1365 private bool FolderHasChanged(InventoryFolderBase newf, InventoryFolderBase oldf)
1415 { 1366 {
1416 return ( newf.Name != oldf.Name 1367 return (newf.Name != oldf.Name
1417 || newf.ParentID != oldf.ParentID 1368 || newf.ParentID != oldf.ParentID
1418 || newf.Owner != oldf.Owner 1369 || newf.Owner != oldf.Owner
1419 || newf.Type != oldf.Type 1370 || newf.Type != oldf.Type
1420 || newf.Version != oldf.Version 1371 || newf.Version != oldf.Version
1421 ); 1372 );
1422 } 1373 }
1423 1374
@@ -1430,24 +1381,24 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
1430 1381
1431 private bool ItemHasChanged(InventoryItemBase newf, InventoryItemBase oldf) 1382 private bool ItemHasChanged(InventoryItemBase newf, InventoryItemBase oldf)
1432 { 1383 {
1433 return ( newf.Name != oldf.Name 1384 return (newf.Name != oldf.Name
1434 || newf.Folder != oldf.Description 1385 || newf.Folder != oldf.Description
1435 || newf.Description != oldf.Description 1386 || newf.Description != oldf.Description
1436 || newf.Owner != oldf.Owner 1387 || newf.Owner != oldf.Owner
1437 || newf.Creator != oldf.Creator 1388 || newf.Creator != oldf.Creator
1438 || newf.AssetID != oldf.AssetID 1389 || newf.AssetID != oldf.AssetID
1439 || newf.GroupID != oldf.GroupID 1390 || newf.GroupID != oldf.GroupID
1440 || newf.GroupOwned != oldf.GroupOwned 1391 || newf.GroupOwned != oldf.GroupOwned
1441 || newf.InvType != oldf.InvType 1392 || newf.InvType != oldf.InvType
1442 || newf.AssetType != oldf.AssetType 1393 || newf.AssetType != oldf.AssetType
1443 ); 1394 );
1444 } 1395 }
1445 1396
1446 /// <summary> 1397 /// <summary>
1447 /// This method is called by PUT and POST to create an XmlInventoryCollection 1398 /// This method is called by PUT and POST to create an XmlInventoryCollection
1448 /// instance that reflects the content of the entity supplied on the request. 1399 /// instance that reflects the content of the entity supplied on the request.
1449 /// Any elements in the completed collection whose UUID is zero, are 1400 /// Any elements in the completed collection whose UUID is zero, are
1450 /// considered to be located relative to the end-point identified int he 1401 /// considered to be located relative to the end-point identified int he
1451 /// URI. In this way, an entire sub-tree can be conveyed in a single REST 1402 /// URI. In this way, an entire sub-tree can be conveyed in a single REST
1452 /// PUT or POST request. 1403 /// PUT or POST request.
1453 /// 1404 ///
@@ -1455,27 +1406,25 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
1455 /// has an entity, it is more completely initialized. thus, if no entity was 1406 /// has an entity, it is more completely initialized. thus, if no entity was
1456 /// provided the collection is valid, but empty. 1407 /// provided the collection is valid, but empty.
1457 /// 1408 ///
1458 /// The entity is then scanned and each tag is processed to produce the 1409 /// The entity is then scanned and each tag is processed to produce the
1459 /// appropriate inventory elements. At the end f the scan, teh XmlInventoryCollection 1410 /// appropriate inventory elements. At the end f the scan, teh XmlInventoryCollection
1460 /// will reflect the subtree described by the entity. 1411 /// will reflect the subtree described by the entity.
1461 /// 1412 ///
1462 /// This is a very flexible mechanism, the entity may contain arbitrary, 1413 /// This is a very flexible mechanism, the entity may contain arbitrary,
1463 /// discontiguous tree fragments, or may contain single element. The caller is 1414 /// discontiguous tree fragments, or may contain single element. The caller is
1464 /// responsible for integrating this collection (and ensuring that any 1415 /// responsible for integrating this collection (and ensuring that any
1465 /// missing parent IDs are resolved). 1416 /// missing parent IDs are resolved).
1466 /// </summary> 1417 /// </summary>
1467 /// <param name=rdata>HTTP service request work area</param> 1418 /// <param name=rdata>HTTP service request work area</param>
1468 1419
1469 internal XmlInventoryCollection ReconstituteEntity(InventoryRequestData rdata) 1420 internal XmlInventoryCollection ReconstituteEntity(InventoryRequestData rdata)
1470 { 1421 {
1471
1472 Rest.Log.DebugFormat("{0} Reconstituting entity", MsgId); 1422 Rest.Log.DebugFormat("{0} Reconstituting entity", MsgId);
1473 1423
1474 XmlInventoryCollection ic = new XmlInventoryCollection(); 1424 XmlInventoryCollection ic = new XmlInventoryCollection();
1475 1425
1476 if (rdata.request.HasEntityBody) 1426 if (rdata.request.HasEntityBody)
1477 { 1427 {
1478
1479 Rest.Log.DebugFormat("{0} Entity present", MsgId); 1428 Rest.Log.DebugFormat("{0} Entity present", MsgId);
1480 1429
1481 ic.init(rdata); 1430 ic.init(rdata);
@@ -1571,7 +1520,6 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
1571 Rest.Log.WarnFormat("{0} Unexpected XML parsing error: {1}", MsgId, e.Message); 1520 Rest.Log.WarnFormat("{0} Unexpected XML parsing error: {1}", MsgId, e.Message);
1572 throw e; 1521 throw e;
1573 } 1522 }
1574
1575 } 1523 }
1576 else 1524 else
1577 { 1525 {
@@ -1587,14 +1535,13 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
1587 } 1535 }
1588 1536
1589 return ic; 1537 return ic;
1590
1591 } 1538 }
1592 1539
1593 /// <summary> 1540 /// <summary>
1594 /// This method creates an inventory Folder from the 1541 /// This method creates an inventory Folder from the
1595 /// information supplied in the request's entity. 1542 /// information supplied in the request's entity.
1596 /// A folder instance is created and initialized to reflect 1543 /// A folder instance is created and initialized to reflect
1597 /// default values. These values are then overridden 1544 /// default values. These values are then overridden
1598 /// by information supplied in the entity. 1545 /// by information supplied in the entity.
1599 /// If context was not explicitly provided, then the 1546 /// If context was not explicitly provided, then the
1600 /// appropriate ID values are determined. 1547 /// appropriate ID values are determined.
@@ -1602,7 +1549,6 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
1602 1549
1603 private void CollectFolder(XmlInventoryCollection ic) 1550 private void CollectFolder(XmlInventoryCollection ic)
1604 { 1551 {
1605
1606 Rest.Log.DebugFormat("{0} Interpret folder element", MsgId); 1552 Rest.Log.DebugFormat("{0} Interpret folder element", MsgId);
1607 1553
1608 InventoryFolderBase result = new InventoryFolderBase(); 1554 InventoryFolderBase result = new InventoryFolderBase();
@@ -1614,7 +1560,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
1614 result.Owner = ic.UserID; 1560 result.Owner = ic.UserID;
1615 result.ParentID = LLUUID.Zero; // Context 1561 result.ParentID = LLUUID.Zero; // Context
1616 result.Type = (short) AssetType.Folder; 1562 result.Type = (short) AssetType.Folder;
1617 result.Version = 1; 1563 result.Version = 1;
1618 1564
1619 if (ic.xml.HasAttributes) 1565 if (ic.xml.HasAttributes)
1620 { 1566 {
@@ -1642,7 +1588,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
1642 result.Version = UInt16.Parse(ic.xml.Value); 1588 result.Version = UInt16.Parse(ic.xml.Value);
1643 break; 1589 break;
1644 default : 1590 default :
1645 Rest.Log.DebugFormat("{0} Folder: unrecognized attribute: {1}:{2}", 1591 Rest.Log.DebugFormat("{0} Folder: unrecognized attribute: {1}:{2}",
1646 MsgId, ic.xml.Name, ic.xml.Value); 1592 MsgId, ic.xml.Name, ic.xml.Value);
1647 ic.Fail(Rest.HttpStatusCodeBadRequest, String.Format("unrecognized attribute <{0}>", 1593 ic.Fail(Rest.HttpStatusCodeBadRequest, String.Format("unrecognized attribute <{0}>",
1648 ic.xml.Name)); 1594 ic.xml.Name));
@@ -1664,7 +1610,6 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
1664 } 1610 }
1665 else 1611 else
1666 { 1612 {
1667
1668 bool found = false; 1613 bool found = false;
1669 1614
1670 foreach (InventoryFolderBase parent in ic.rdata.folders) 1615 foreach (InventoryFolderBase parent in ic.rdata.folders)
@@ -1678,11 +1623,10 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
1678 1623
1679 if (!found) 1624 if (!found)
1680 { 1625 {
1681 Rest.Log.ErrorFormat("{0} Invalid parent ID ({1}) in folder {2}", 1626 Rest.Log.ErrorFormat("{0} Invalid parent ID ({1}) in folder {2}",
1682 MsgId, ic.Item.Folder, result.ID); 1627 MsgId, ic.Item.Folder, result.ID);
1683 ic.Fail(Rest.HttpStatusCodeBadRequest, "invalid parent"); 1628 ic.Fail(Rest.HttpStatusCodeBadRequest, "invalid parent");
1684 } 1629 }
1685
1686 } 1630 }
1687 1631
1688 // This is a new folder, so no existing UUID is available 1632 // This is a new folder, so no existing UUID is available
@@ -1697,15 +1641,14 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
1697 // obsolete as a consequence. 1641 // obsolete as a consequence.
1698 1642
1699 ic.Push(result); 1643 ic.Push(result);
1700
1701 } 1644 }
1702 1645
1703 /// <summary> 1646 /// <summary>
1704 /// This method is called to handle the construction of an Item 1647 /// This method is called to handle the construction of an Item
1705 /// instance from the supplied request entity. It is called 1648 /// instance from the supplied request entity. It is called
1706 /// whenever an Item start tag is detected. 1649 /// whenever an Item start tag is detected.
1707 /// An instance of an Item is created and initialized to default 1650 /// An instance of an Item is created and initialized to default
1708 /// values. These values are then overridden from values supplied 1651 /// values. These values are then overridden from values supplied
1709 /// as attributes to the Item element. 1652 /// as attributes to the Item element.
1710 /// This item is then stored in the XmlInventoryCollection and 1653 /// This item is then stored in the XmlInventoryCollection and
1711 /// will be verified by Validate. 1654 /// will be verified by Validate.
@@ -1715,7 +1658,6 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
1715 1658
1716 private void CollectItem(XmlInventoryCollection ic) 1659 private void CollectItem(XmlInventoryCollection ic)
1717 { 1660 {
1718
1719 Rest.Log.DebugFormat("{0} Interpret item element", MsgId); 1661 Rest.Log.DebugFormat("{0} Interpret item element", MsgId);
1720 1662
1721 InventoryItemBase result = new InventoryItemBase(); 1663 InventoryItemBase result = new InventoryItemBase();
@@ -1736,7 +1678,6 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
1736 { 1678 {
1737 for (int i = 0; i < ic.xml.AttributeCount; i++) 1679 for (int i = 0; i < ic.xml.AttributeCount; i++)
1738 { 1680 {
1739
1740 ic.xml.MoveToAttribute(i); 1681 ic.xml.MoveToAttribute(i);
1741 1682
1742 switch (ic.xml.Name) 1683 switch (ic.xml.Name)
@@ -1785,37 +1726,36 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
1785 break; 1726 break;
1786 1727
1787 default : 1728 default :
1788 Rest.Log.DebugFormat("{0} Item: Unrecognized attribute: {1}:{2}", 1729 Rest.Log.DebugFormat("{0} Item: Unrecognized attribute: {1}:{2}",
1789 MsgId, ic.xml.Name, ic.xml.Value); 1730 MsgId, ic.xml.Name, ic.xml.Value);
1790 ic.Fail(Rest.HttpStatusCodeBadRequest, String.Format("unrecognized attribute", 1731 ic.Fail(Rest.HttpStatusCodeBadRequest, String.Format("unrecognized attribute",
1791 ic.xml.Name)); 1732 ic.xml.Name));
1792 break; 1733 break;
1793 } 1734 }
1794 } 1735 }
1795 } 1736 }
1796 1737
1797 ic.xml.MoveToElement(); 1738 ic.xml.MoveToElement();
1798 1739
1799 ic.Push(result); 1740 ic.Push(result);
1800
1801 } 1741 }
1802 1742
1803 /// <summary> 1743 /// <summary>
1804 /// This method assembles an asset instance from the 1744 /// This method assembles an asset instance from the
1805 /// information supplied in the request's entity. It is 1745 /// information supplied in the request's entity. It is
1806 /// called as a result of detecting a start tag for a 1746 /// called as a result of detecting a start tag for a
1807 /// type of Asset. 1747 /// type of Asset.
1808 /// The information is collected locally, and an asset 1748 /// The information is collected locally, and an asset
1809 /// instance is created only if the basic XML parsing 1749 /// instance is created only if the basic XML parsing
1810 /// completes successfully. 1750 /// completes successfully.
1811 /// Default values for all parts of the asset are 1751 /// Default values for all parts of the asset are
1812 /// established before overriding them from the supplied 1752 /// established before overriding them from the supplied
1813 /// XML. 1753 /// XML.
1814 /// If an asset has inline=true as an attribute, then 1754 /// If an asset has inline=true as an attribute, then
1815 /// the element contains the data representing the 1755 /// the element contains the data representing the
1816 /// asset. This is saved as the data component. 1756 /// asset. This is saved as the data component.
1817 /// inline=false means that the element's payload is 1757 /// inline=false means that the element's payload is
1818 /// simply the UUID of the asset referenced by the 1758 /// simply the UUID of the asset referenced by the
1819 /// item being constructed. 1759 /// item being constructed.
1820 /// An asset, if created is stored in the 1760 /// An asset, if created is stored in the
1821 /// XmlInventoryCollection 1761 /// XmlInventoryCollection
@@ -1876,9 +1816,9 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
1876 break; 1816 break;
1877 1817
1878 default : 1818 default :
1879 Rest.Log.DebugFormat("{0} Asset: Unrecognized attribute: {1}:{2}", 1819 Rest.Log.DebugFormat("{0} Asset: Unrecognized attribute: {1}:{2}",
1880 MsgId, ic.xml.Name, ic.xml.Value); 1820 MsgId, ic.xml.Name, ic.xml.Value);
1881 ic.Fail(Rest.HttpStatusCodeBadRequest, 1821 ic.Fail(Rest.HttpStatusCodeBadRequest,
1882 String.Format("unrecognized attribute <{0}>", ic.xml.Name)); 1822 String.Format("unrecognized attribute <{0}>", ic.xml.Name));
1883 break; 1823 break;
1884 } 1824 }
@@ -1889,7 +1829,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
1889 1829
1890 // If this is a reference to an existing asset, just store the 1830 // If this is a reference to an existing asset, just store the
1891 // asset ID into the item. 1831 // asset ID into the item.
1892 1832
1893 if (!inline) 1833 if (!inline)
1894 { 1834 {
1895 if (ic.Item != null) 1835 if (ic.Item != null)
@@ -1904,13 +1844,12 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
1904 } 1844 }
1905 } 1845 }
1906 1846
1907 // Otherwise, generate an asset ID, store that into the item, and 1847 // Otherwise, generate an asset ID, store that into the item, and
1908 // create an entry in the asset list for the inlined asset. But 1848 // create an entry in the asset list for the inlined asset. But
1909 // only if the size is non-zero. 1849 // only if the size is non-zero.
1910 1850
1911 else 1851 else
1912 { 1852 {
1913
1914 string b64string = null; 1853 string b64string = null;
1915 1854
1916 // Generate a UUID of none were given, and generally none should 1855 // Generate a UUID of none were given, and generally none should
@@ -1923,17 +1862,17 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
1923 1862
1924 // Create AssetBase entity to hold the inlined asset 1863 // Create AssetBase entity to hold the inlined asset
1925 1864
1926 asset = new AssetBase(uuid, name); 1865 asset = new AssetBase(uuid, name);
1927 1866
1928 asset.Description = desc; 1867 asset.Description = desc;
1929 asset.Type = type; // type == 0 == texture 1868 asset.Type = type; // type == 0 == texture
1930 asset.Local = local; 1869 asset.Local = local;
1931 asset.Temporary = temp; 1870 asset.Temporary = temp;
1932 1871
1933 b64string = ic.xml.ReadElementContentAsString(); 1872 b64string = ic.xml.ReadElementContentAsString();
1934 1873
1935 Rest.Log.DebugFormat("{0} Data length is {1}", MsgId, b64string.Length); 1874 Rest.Log.DebugFormat("{0} Data length is {1}", MsgId, b64string.Length);
1936 Rest.Log.DebugFormat("{0} Data content starts with: \n\t<{1}>", MsgId, 1875 Rest.Log.DebugFormat("{0} Data content starts with: \n\t<{1}>", MsgId,
1937 b64string.Substring(0, b64string.Length > 132 ? 132 : b64string.Length)); 1876 b64string.Substring(0, b64string.Length > 132 ? 132 : b64string.Length));
1938 1877
1939 asset.Data = Convert.FromBase64String(b64string); 1878 asset.Data = Convert.FromBase64String(b64string);
@@ -1952,7 +1891,6 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
1952 { 1891 {
1953 ic.Item.AssetID = uuid; 1892 ic.Item.AssetID = uuid;
1954 } 1893 }
1955
1956 } 1894 }
1957 1895
1958 ic.Push(asset); 1896 ic.Push(asset);
@@ -1961,13 +1899,12 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
1961 1899
1962 /// <summary> 1900 /// <summary>
1963 /// Store any permissions information provided by the request. 1901 /// Store any permissions information provided by the request.
1964 /// This overrides the default permissions set when the 1902 /// This overrides the default permissions set when the
1965 /// XmlInventoryCollection object was created. 1903 /// XmlInventoryCollection object was created.
1966 /// </summary> 1904 /// </summary>
1967 1905
1968 private void CollectPermissions(XmlInventoryCollection ic) 1906 private void CollectPermissions(XmlInventoryCollection ic)
1969 { 1907 {
1970
1971 if (ic.xml.HasAttributes) 1908 if (ic.xml.HasAttributes)
1972 { 1909 {
1973 for (int i = 0; i < ic.xml.AttributeCount; i++) 1910 for (int i = 0; i < ic.xml.AttributeCount; i++)
@@ -1990,7 +1927,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
1990 default : 1927 default :
1991 Rest.Log.DebugFormat("{0} Permissions: invalid attribute {1}:{2}", 1928 Rest.Log.DebugFormat("{0} Permissions: invalid attribute {1}:{2}",
1992 MsgId,ic.xml.Name, ic.xml.Value); 1929 MsgId,ic.xml.Name, ic.xml.Value);
1993 ic.Fail(Rest.HttpStatusCodeBadRequest, 1930 ic.Fail(Rest.HttpStatusCodeBadRequest,
1994 String.Format("invalid attribute <{0}>", ic.xml.Name)); 1931 String.Format("invalid attribute <{0}>", ic.xml.Name));
1995 break; 1932 break;
1996 } 1933 }
@@ -1998,7 +1935,6 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
1998 } 1935 }
1999 1936
2000 ic.xml.MoveToElement(); 1937 ic.xml.MoveToElement();
2001
2002 } 1938 }
2003 1939
2004 /// <summary> 1940 /// <summary>
@@ -2013,7 +1949,6 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
2013 1949
2014 private void Validate(XmlInventoryCollection ic) 1950 private void Validate(XmlInventoryCollection ic)
2015 { 1951 {
2016
2017 // There really should be an item present if we've 1952 // There really should be an item present if we've
2018 // called validate. So fail if there is not. 1953 // called validate. So fail if there is not.
2019 1954
@@ -2022,7 +1957,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
2022 Rest.Log.ErrorFormat("{0} Unable to parse request", MsgId); 1957 Rest.Log.ErrorFormat("{0} Unable to parse request", MsgId);
2023 ic.Fail(Rest.HttpStatusCodeBadRequest, "request parse error"); 1958 ic.Fail(Rest.HttpStatusCodeBadRequest, "request parse error");
2024 } 1959 }
2025 1960
2026 // Every item is required to have a name (via REST anyway) 1961 // Every item is required to have a name (via REST anyway)
2027 1962
2028 if (ic.Item.Name == String.Empty) 1963 if (ic.Item.Name == String.Empty)
@@ -2030,18 +1965,16 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
2030 Rest.Log.ErrorFormat("{0} An item name MUST be specified", MsgId); 1965 Rest.Log.ErrorFormat("{0} An item name MUST be specified", MsgId);
2031 ic.Fail(Rest.HttpStatusCodeBadRequest, "item name required"); 1966 ic.Fail(Rest.HttpStatusCodeBadRequest, "item name required");
2032 } 1967 }
2033 1968
2034 // An item MUST have an asset ID. AssetID should never be zero 1969 // An item MUST have an asset ID. AssetID should never be zero
2035 // here. It should always get set from the information stored 1970 // here. It should always get set from the information stored
2036 // when the Asset element was processed. 1971 // when the Asset element was processed.
2037 1972
2038 if (ic.Item.AssetID == LLUUID.Zero) 1973 if (ic.Item.AssetID == LLUUID.Zero)
2039 { 1974 {
2040
2041 Rest.Log.ErrorFormat("{0} Unable to complete request", MsgId); 1975 Rest.Log.ErrorFormat("{0} Unable to complete request", MsgId);
2042 Rest.Log.InfoFormat("{0} Asset information is missing", MsgId); 1976 Rest.Log.InfoFormat("{0} Asset information is missing", MsgId);
2043 ic.Fail(Rest.HttpStatusCodeBadRequest, "asset information required"); 1977 ic.Fail(Rest.HttpStatusCodeBadRequest, "asset information required");
2044
2045 } 1978 }
2046 1979
2047 // If the item is new, then assign it an ID 1980 // If the item is new, then assign it an ID
@@ -2054,14 +1987,13 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
2054 // If the context is being implied, obtain the current 1987 // If the context is being implied, obtain the current
2055 // folder item's ID. If it was specified explicitly, make 1988 // folder item's ID. If it was specified explicitly, make
2056 // sure that theparent folder exists. 1989 // sure that theparent folder exists.
2057 1990
2058 if (ic.Item.Folder == LLUUID.Zero) 1991 if (ic.Item.Folder == LLUUID.Zero)
2059 { 1992 {
2060 ic.Item.Folder = ic.Parent(); 1993 ic.Item.Folder = ic.Parent();
2061 } 1994 }
2062 else 1995 else
2063 { 1996 {
2064
2065 bool found = false; 1997 bool found = false;
2066 1998
2067 foreach (InventoryFolderBase parent in ic.rdata.folders) 1999 foreach (InventoryFolderBase parent in ic.rdata.folders)
@@ -2075,11 +2007,10 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
2075 2007
2076 if (!found) 2008 if (!found)
2077 { 2009 {
2078 Rest.Log.ErrorFormat("{0} Invalid parent ID ({1}) in item {2}", 2010 Rest.Log.ErrorFormat("{0} Invalid parent ID ({1}) in item {2}",
2079 MsgId, ic.Item.Folder, ic.Item.ID); 2011 MsgId, ic.Item.Folder, ic.Item.ID);
2080 ic.Fail(Rest.HttpStatusCodeBadRequest, "parent information required"); 2012 ic.Fail(Rest.HttpStatusCodeBadRequest, "parent information required");
2081 } 2013 }
2082
2083 } 2014 }
2084 2015
2085 // If this is an inline asset being constructed in the context 2016 // If this is an inline asset being constructed in the context
@@ -2101,13 +2032,12 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
2101 ic.Item.NextPermissions = ic.NextPermissions; 2032 ic.Item.NextPermissions = ic.NextPermissions;
2102 2033
2103 // If no type was specified for this item, we can attempt to 2034 // If no type was specified for this item, we can attempt to
2104 // infer something from the file type maybe. This is NOT as 2035 // infer something from the file type maybe. This is NOT as
2105 // good as having type be specified in the XML. 2036 // good as having type be specified in the XML.
2106 2037
2107 if (ic.Item.AssetType == (int) AssetType.Unknown || 2038 if (ic.Item.AssetType == (int) AssetType.Unknown ||
2108 ic.Item.InvType == (int) AssetType.Unknown) 2039 ic.Item.InvType == (int) AssetType.Unknown)
2109 { 2040 {
2110
2111 Rest.Log.DebugFormat("{0} Attempting to infer item type", MsgId); 2041 Rest.Log.DebugFormat("{0} Attempting to infer item type", MsgId);
2112 2042
2113 string[] parts = ic.Item.Name.Split(Rest.CA_PERIOD); 2043 string[] parts = ic.Item.Name.Split(Rest.CA_PERIOD);
@@ -2127,7 +2057,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
2127 2057
2128 if (parts.Length > 1) 2058 if (parts.Length > 1)
2129 { 2059 {
2130 Rest.Log.DebugFormat("{0} File type is {1}", 2060 Rest.Log.DebugFormat("{0} File type is {1}",
2131 MsgId, parts[parts.Length - 1]); 2061 MsgId, parts[parts.Length - 1]);
2132 switch (parts[parts.Length - 1]) 2062 switch (parts[parts.Length - 1])
2133 { 2063 {
@@ -2135,7 +2065,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
2135 case "jpeg-2000" : 2065 case "jpeg-2000" :
2136 case "jpg2000" : 2066 case "jpg2000" :
2137 case "jpg-2000" : 2067 case "jpg-2000" :
2138 Rest.Log.DebugFormat("{0} Type {1} inferred", 2068 Rest.Log.DebugFormat("{0} Type {1} inferred",
2139 MsgId, parts[parts.Length-1]); 2069 MsgId, parts[parts.Length-1]);
2140 if (ic.Item.AssetType == (int) AssetType.Unknown) 2070 if (ic.Item.AssetType == (int) AssetType.Unknown)
2141 ic.Item.AssetType = (int) AssetType.ImageJPEG; 2071 ic.Item.AssetType = (int) AssetType.ImageJPEG;
@@ -2144,7 +2074,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
2144 break; 2074 break;
2145 case "jpg" : 2075 case "jpg" :
2146 case "jpeg" : 2076 case "jpeg" :
2147 Rest.Log.DebugFormat("{0} Type {1} inferred", 2077 Rest.Log.DebugFormat("{0} Type {1} inferred",
2148 MsgId, parts[parts.Length - 1]); 2078 MsgId, parts[parts.Length - 1]);
2149 if (ic.Item.AssetType == (int) AssetType.Unknown) 2079 if (ic.Item.AssetType == (int) AssetType.Unknown)
2150 ic.Item.AssetType = (int) AssetType.ImageJPEG; 2080 ic.Item.AssetType = (int) AssetType.ImageJPEG;
@@ -2168,7 +2098,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
2168 } 2098 }
2169 break; 2099 break;
2170 default : 2100 default :
2171 Rest.Log.DebugFormat("{0} Asset/Inventory type could not be inferred for {1}", 2101 Rest.Log.DebugFormat("{0} Asset/Inventory type could not be inferred for {1}",
2172 MsgId,ic.Item.Name); 2102 MsgId,ic.Item.Name);
2173 break; 2103 break;
2174 } 2104 }
@@ -2186,16 +2116,14 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
2186 temp = OpenJPEGNet.LoadTGAClass.LoadTGA(tgadata); 2116 temp = OpenJPEGNet.LoadTGAClass.LoadTGA(tgadata);
2187 ic.Asset.Data = OpenJPEGNet.OpenJPEG.EncodeFromImage(temp, true); 2117 ic.Asset.Data = OpenJPEGNet.OpenJPEG.EncodeFromImage(temp, true);
2188 } 2118 }
2189
2190 ic.reset();
2191 2119
2120 ic.reset();
2192 } 2121 }
2193 2122
2194 #region Inventory RequestData extension 2123 #region Inventory RequestData extension
2195 2124
2196 internal class InventoryRequestData : RequestData 2125 internal class InventoryRequestData : RequestData
2197 { 2126 {
2198
2199 /// <summary> 2127 /// <summary>
2200 /// These are the inventory specific request/response state 2128 /// These are the inventory specific request/response state
2201 /// extensions. 2129 /// extensions.
@@ -2214,7 +2142,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
2214 } 2142 }
2215 2143
2216 /// <summary> 2144 /// <summary>
2217 /// This is the callback method required by inventory services. The 2145 /// This is the callback method required by inventory services. The
2218 /// requestor issues an inventory request and then blocks until this 2146 /// requestor issues an inventory request and then blocks until this
2219 /// method signals the monitor. 2147 /// method signals the monitor.
2220 /// </summary> 2148 /// </summary>
@@ -2230,7 +2158,6 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
2230 Monitor.Pulse(this); 2158 Monitor.Pulse(this);
2231 } 2159 }
2232 } 2160 }
2233
2234 } 2161 }
2235 2162
2236 #endregion Inventory RequestData extension 2163 #endregion Inventory RequestData extension
@@ -2243,7 +2170,6 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
2243 2170
2244 internal class XmlInventoryCollection : InventoryCollection 2171 internal class XmlInventoryCollection : InventoryCollection
2245 { 2172 {
2246
2247 internal InventoryRequestData rdata; 2173 internal InventoryRequestData rdata;
2248 private Stack<InventoryFolderBase> stk; 2174 private Stack<InventoryFolderBase> stk;
2249 2175
@@ -2336,7 +2262,6 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
2336 { 2262 {
2337 rdata.Fail(code, addendum); 2263 rdata.Fail(code, addendum);
2338 } 2264 }
2339
2340 } 2265 }
2341 } 2266 }
2342} 2267}
diff --git a/OpenSim/ApplicationPlugins/Rest/Inventory/tests/Remote.cs b/OpenSim/ApplicationPlugins/Rest/Inventory/tests/Remote.cs
index c50a945..1cbe38f 100644
--- a/OpenSim/ApplicationPlugins/Rest/Inventory/tests/Remote.cs
+++ b/OpenSim/ApplicationPlugins/Rest/Inventory/tests/Remote.cs
@@ -23,7 +23,6 @@
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 *
27 */ 26 */
28 27
29using libsecondlife; 28using libsecondlife;
@@ -41,10 +40,8 @@ using OpenSim.Framework.Communications.Cache;
41 40
42namespace OpenSim.ApplicationPlugins.Rest.Inventory.Tests 41namespace OpenSim.ApplicationPlugins.Rest.Inventory.Tests
43{ 42{
44
45 public class Remote : ITest 43 public class Remote : ITest
46 { 44 {
47
48 private static readonly int PARM_TESTID = 0; 45 private static readonly int PARM_TESTID = 0;
49 private static readonly int PARM_COMMAND = 1; 46 private static readonly int PARM_COMMAND = 1;
50 47
@@ -72,7 +69,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory.Tests
72 } 69 }
73 70
74 // Called by the plug-in to halt REST processing. Local processing is 71 // Called by the plug-in to halt REST processing. Local processing is
75 // disabled, and control blocks until all current processing has 72 // disabled, and control blocks until all current processing has
76 // completed. No new processing will be started 73 // completed. No new processing will be started
77 74
78 public void Close() 75 public void Close()
@@ -91,11 +88,10 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory.Tests
91 // Remote Handler 88 // Remote Handler
92 // Key information of interest here is the Parameters array, each 89 // Key information of interest here is the Parameters array, each
93 // entry represents an element of the URI, with element zero being 90 // entry represents an element of the URI, with element zero being
94 // the 91 // the
95 92
96 public void Execute(RequestData rdata) 93 public void Execute(RequestData rdata)
97 { 94 {
98
99 if (!enabled) return; 95 if (!enabled) return;
100 96
101 // If we can't relate to what's there, leave it for others. 97 // If we can't relate to what's there, leave it for others.
@@ -125,7 +121,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory.Tests
125 { 121 {
126 DoHelp(rdata); 122 DoHelp(rdata);
127 } 123 }
128 } 124 }
129 125
130 private void DoHelp(RequestData rdata) 126 private void DoHelp(RequestData rdata)
131 { 127 {
@@ -138,7 +134,6 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory.Tests
138 { 134 {
139 if (rdata.Parameters.Length >= 6) 135 if (rdata.Parameters.Length >= 6)
140 { 136 {
141
142 string[] names = rdata.Parameters[PARM_MOVE_AVATAR].Split(Rest.CA_SPACE); 137 string[] names = rdata.Parameters[PARM_MOVE_AVATAR].Split(Rest.CA_SPACE);
143 ScenePresence avatar = null; 138 ScenePresence avatar = null;
144 Scene scene = null; 139 Scene scene = null;
@@ -149,7 +144,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory.Tests
149 String.Format("invalid avatar name: <{0}>",rdata.Parameters[PARM_MOVE_AVATAR])); 144 String.Format("invalid avatar name: <{0}>",rdata.Parameters[PARM_MOVE_AVATAR]));
150 } 145 }
151 146
152 Rest.Log.WarnFormat("{0} '{1}' command received for {2} {3}", 147 Rest.Log.WarnFormat("{0} '{1}' command received for {2} {3}",
153 MsgId, rdata.Parameters[0], names[0], names[1]); 148 MsgId, rdata.Parameters[0], names[0], names[1]);
154 149
155 // The first parameter should be an avatar name, look for the 150 // The first parameter should be an avatar name, look for the
@@ -171,8 +166,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory.Tests
171 166
172 if (avatar != null) 167 if (avatar != null)
173 { 168 {
174 169 Rest.Log.DebugFormat("{0} Move : Avatar {1} located in region {2}",
175 Rest.Log.DebugFormat("{0} Move : Avatar {1} located in region {2}",
176 MsgId, rdata.Parameters[PARM_MOVE_AVATAR], scene.RegionInfo.RegionName); 170 MsgId, rdata.Parameters[PARM_MOVE_AVATAR], scene.RegionInfo.RegionName);
177 171
178 try 172 try
@@ -185,16 +179,16 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory.Tests
185 } 179 }
186 catch (Exception e) 180 catch (Exception e)
187 { 181 {
188 rdata.Fail(Rest.HttpStatusCodeBadRequest, 182 rdata.Fail(Rest.HttpStatusCodeBadRequest,
189 String.Format("invalid parameters: {0}", e.Message)); 183 String.Format("invalid parameters: {0}", e.Message));
190 } 184 }
191 185
192 } 186 }
193 else 187 else
194 { 188 {
195 rdata.Fail(Rest.HttpStatusCodeBadRequest, 189 rdata.Fail(Rest.HttpStatusCodeBadRequest,
196 String.Format("avatar {0} not present", rdata.Parameters[PARM_MOVE_AVATAR])); 190 String.Format("avatar {0} not present", rdata.Parameters[PARM_MOVE_AVATAR]));
197 } 191 }
198 192
199 rdata.Complete(); 193 rdata.Complete();
200 rdata.Respond("OK"); 194 rdata.Respond("OK");
@@ -205,7 +199,6 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory.Tests
205 Rest.Log.WarnFormat("{0} Move: No movement information provided", MsgId); 199 Rest.Log.WarnFormat("{0} Move: No movement information provided", MsgId);
206 rdata.Fail(Rest.HttpStatusCodeBadRequest, "no movement information provided"); 200 rdata.Fail(Rest.HttpStatusCodeBadRequest, "no movement information provided");
207 } 201 }
208
209 } 202 }
210 203
211 private static readonly string Help = 204 private static readonly string Help =
@@ -220,6 +213,5 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory.Tests
220 + "</body>" 213 + "</body>"
221 + "</html>" 214 + "</html>"
222 ; 215 ;
223
224 } 216 }
225} 217}
diff --git a/OpenSim/Framework/AgentCircuitManager.cs b/OpenSim/Framework/AgentCircuitManager.cs
index 80e2f87..a235688 100644
--- a/OpenSim/Framework/AgentCircuitManager.cs
+++ b/OpenSim/Framework/AgentCircuitManager.cs
@@ -112,7 +112,7 @@ namespace OpenSim.Framework
112 } 112 }
113 } 113 }
114 114
115 115
116 /// <summary> 116 /// <summary>
117 /// Sometimes the circuitcode may not be known before setting up the connection 117 /// Sometimes the circuitcode may not be known before setting up the connection
118 /// </summary> 118 /// </summary>
@@ -126,7 +126,7 @@ namespace OpenSim.Framework
126 if (AgentCircuits.ContainsKey((uint)circuitcode) && !AgentCircuits.ContainsKey((uint)newcircuitcode)) 126 if (AgentCircuits.ContainsKey((uint)circuitcode) && !AgentCircuits.ContainsKey((uint)newcircuitcode))
127 { 127 {
128 AgentCircuitData agentData = AgentCircuits[(uint)circuitcode]; 128 AgentCircuitData agentData = AgentCircuits[(uint)circuitcode];
129 129
130 agentData.circuitcode = newcircuitcode; 130 agentData.circuitcode = newcircuitcode;
131 131
132 AgentCircuits.Remove((uint)circuitcode); 132 AgentCircuits.Remove((uint)circuitcode);
@@ -155,4 +155,4 @@ namespace OpenSim.Framework
155 return false; 155 return false;
156 } 156 }
157 } 157 }
158} \ No newline at end of file 158}
diff --git a/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs b/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs
index 17f927d..3a20b9e 100644
--- a/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs
+++ b/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs
@@ -306,7 +306,7 @@ namespace OpenSim.Framework.Communications.Cache
306 // "[INVENTORY CACHE]: Received item {0} {1} for user {2}", 306 // "[INVENTORY CACHE]: Received item {0} {1} for user {2}",
307 // itemInfo.Name, itemInfo.ID, userID); 307 // itemInfo.Name, itemInfo.ID, userID);
308 InventoryFolderImpl folder = null; 308 InventoryFolderImpl folder = null;
309 309
310 if ( RootFolder != null ) 310 if ( RootFolder != null )
311 folder = RootFolder.FindFolder(itemInfo.Folder); 311 folder = RootFolder.FindFolder(itemInfo.Folder);
312 312
diff --git a/OpenSim/Framework/Communications/Cache/UserProfileCacheService.cs b/OpenSim/Framework/Communications/Cache/UserProfileCacheService.cs
index 017cb29..45f6c7e 100644
--- a/OpenSim/Framework/Communications/Cache/UserProfileCacheService.cs
+++ b/OpenSim/Framework/Communications/Cache/UserProfileCacheService.cs
@@ -168,7 +168,7 @@ namespace OpenSim.Framework.Communications.Cache
168 { 168 {
169 if (userID == LLUUID.Zero) 169 if (userID == LLUUID.Zero)
170 return; 170 return;
171 171
172 lock (m_userProfiles) 172 lock (m_userProfiles)
173 { 173 {
174 if (m_userProfiles.ContainsKey(userID)) 174 if (m_userProfiles.ContainsKey(userID))
diff --git a/OpenSim/Framework/Communications/Capabilities/Caps.cs b/OpenSim/Framework/Communications/Capabilities/Caps.cs
index 18ddd9e..a7486d6 100644
--- a/OpenSim/Framework/Communications/Capabilities/Caps.cs
+++ b/OpenSim/Framework/Communications/Capabilities/Caps.cs
@@ -617,9 +617,9 @@ namespace OpenSim.Framework.Communications.Capabilities
617 617
618 IMoneyModule mm = scene.RequestModuleInterface<IMoneyModule>(); 618 IMoneyModule mm = scene.RequestModuleInterface<IMoneyModule>();
619 619
620 if(mm != null) 620 if (mm != null)
621 { 621 {
622 if(!mm.UploadCovered(client)) 622 if (!mm.UploadCovered(client))
623 { 623 {
624 client.SendAgentAlertMessage("Unable to upload asset. Insufficient funds.", false); 624 client.SendAgentAlertMessage("Unable to upload asset. Insufficient funds.", false);
625 625
diff --git a/OpenSim/Framework/Communications/GridInfoService.cs b/OpenSim/Framework/Communications/GridInfoService.cs
index ce66c82..bd108c1 100644
--- a/OpenSim/Framework/Communications/GridInfoService.cs
+++ b/OpenSim/Framework/Communications/GridInfoService.cs
@@ -53,7 +53,7 @@ namespace OpenSim.Framework.Communications
53 /// GridInfoService uses the [GridInfo] section of the 53 /// GridInfoService uses the [GridInfo] section of the
54 /// standard OpenSim.ini file --- which is not optimal, but 54 /// standard OpenSim.ini file --- which is not optimal, but
55 /// anything else requires a general redesign of the config 55 /// anything else requires a general redesign of the config
56 /// system. 56 /// system.
57 /// </remarks> 57 /// </remarks>
58 public GridInfoService(IConfigSource configSource) 58 public GridInfoService(IConfigSource configSource)
59 { 59 {
@@ -65,7 +65,7 @@ namespace OpenSim.Framework.Communications
65 /// </summary> 65 /// </summary>
66 public GridInfoService() 66 public GridInfoService()
67 { 67 {
68 try 68 try
69 { 69 {
70 IConfigSource configSource = new IniConfigSource(Path.Combine(Util.configDir(), "OpenSim.ini")); 70 IConfigSource configSource = new IniConfigSource(Path.Combine(Util.configDir(), "OpenSim.ini"));
71 loadGridInfo(configSource); 71 loadGridInfo(configSource);
@@ -84,15 +84,15 @@ namespace OpenSim.Framework.Communications
84 IConfig startupCfg = configSource.Configs["Startup"]; 84 IConfig startupCfg = configSource.Configs["Startup"];
85 IConfig gridCfg = configSource.Configs["GridInfo"]; 85 IConfig gridCfg = configSource.Configs["GridInfo"];
86 IConfig netCfg = configSource.Configs["Network"]; 86 IConfig netCfg = configSource.Configs["Network"];
87 87
88 bool grid = startupCfg.GetBoolean("gridmode", false); 88 bool grid = startupCfg.GetBoolean("gridmode", false);
89 89
90 if (grid) 90 if (grid)
91 _info["mode"] = "grid"; 91 _info["mode"] = "grid";
92 else 92 else
93 _info["mode"] = "standalone"; 93 _info["mode"] = "standalone";
94 94
95 95
96 if (null != gridCfg) 96 if (null != gridCfg)
97 { 97 {
98 foreach (string k in gridCfg.GetKeys()) 98 foreach (string k in gridCfg.GetKeys())
diff --git a/OpenSim/Framework/IClientAPI.cs b/OpenSim/Framework/IClientAPI.cs
index f437902..224b51b 100644
--- a/OpenSim/Framework/IClientAPI.cs
+++ b/OpenSim/Framework/IClientAPI.cs
@@ -351,8 +351,8 @@ namespace OpenSim.Framework
351 351
352 bool SendLogoutPacketWhenClosing 352 bool SendLogoutPacketWhenClosing
353 { 353 {
354 set; 354 set;
355 } 355 }
356 356
357 // [Obsolete("LLClientView Specific - Circuits are unique to LLClientView")] 357 // [Obsolete("LLClientView Specific - Circuits are unique to LLClientView")]
358 uint CircuitCode { get; } 358 uint CircuitCode { get; }
@@ -526,7 +526,7 @@ namespace OpenSim.Framework
526 event TerrainUnacked OnUnackedTerrain; 526 event TerrainUnacked OnUnackedTerrain;
527 event ActivateGesture OnActivateGesture; 527 event ActivateGesture OnActivateGesture;
528 event DeactivateGesture OnDeactivateGesture; 528 event DeactivateGesture OnDeactivateGesture;
529 529
530 // void ActivateGesture(LLUUID assetId, LLUUID gestureId); 530 // void ActivateGesture(LLUUID assetId, LLUUID gestureId);
531 531
532 // [Obsolete("IClientAPI.OutPacket SHOULD NOT EXIST outside of LLClientView please refactor appropriately.")] 532 // [Obsolete("IClientAPI.OutPacket SHOULD NOT EXIST outside of LLClientView please refactor appropriately.")]
diff --git a/OpenSim/Framework/Servers/BaseHttpServer.cs b/OpenSim/Framework/Servers/BaseHttpServer.cs
index 79929bd..d326b66 100644
--- a/OpenSim/Framework/Servers/BaseHttpServer.cs
+++ b/OpenSim/Framework/Servers/BaseHttpServer.cs
@@ -278,7 +278,7 @@ namespace OpenSim.Framework.Servers
278 HandleLLSDRequests(request, response); 278 HandleLLSDRequests(request, response);
279 279
280 return; 280 return;
281 } 281 }
282 HandleXmlRpcRequests(request, response); 282 HandleXmlRpcRequests(request, response);
283 return; 283 return;
284 } 284 }
@@ -498,7 +498,7 @@ namespace OpenSim.Framework.Servers
498 { 498 {
499 // we didn't find a registered llsd handler to service this request 499 // we didn't find a registered llsd handler to service this request
500 // check if we have a default llsd handler 500 // check if we have a default llsd handler
501 501
502 if (m_defaultLlsdHandler != null) 502 if (m_defaultLlsdHandler != null)
503 { 503 {
504 // LibOMV path 504 // LibOMV path
@@ -541,7 +541,7 @@ namespace OpenSim.Framework.Servers
541 541
542 private bool DoWeHaveALLSDHandler(string path) 542 private bool DoWeHaveALLSDHandler(string path)
543 { 543 {
544 544
545 string[] pathbase = path.Split('/'); 545 string[] pathbase = path.Split('/');
546 string searchquery = "/"; 546 string searchquery = "/";
547 547
@@ -559,27 +559,27 @@ namespace OpenSim.Framework.Servers
559 559
560 foreach (string pattern in m_llsdHandlers.Keys) 560 foreach (string pattern in m_llsdHandlers.Keys)
561 { 561 {
562 562
563 if (searchquery.StartsWith(pattern) && searchquery.Length >= pattern.Length) 563 if (searchquery.StartsWith(pattern) && searchquery.Length >= pattern.Length)
564 { 564 {
565 565
566 bestMatch = pattern; 566 bestMatch = pattern;
567 567
568 } 568 }
569 } 569 }
570 570
571 // extra kicker to remove the default XMLRPC login case.. just in case.. 571 // extra kicker to remove the default XMLRPC login case.. just in case..
572 if (path == "/") 572 if (path == "/")
573 return false; 573 return false;
574 574
575 if (String.IsNullOrEmpty(bestMatch)) 575 if (String.IsNullOrEmpty(bestMatch))
576 { 576 {
577 577
578 return false; 578 return false;
579 } 579 }
580 else 580 else
581 { 581 {
582 582
583 return true; 583 return true;
584 } 584 }
585 } 585 }
@@ -588,7 +588,7 @@ namespace OpenSim.Framework.Servers
588 { 588 {
589 llsdHandler = null; 589 llsdHandler = null;
590 // Pull out the first part of the path 590 // Pull out the first part of the path
591 // splitting the path by '/' means we'll get the following return.. 591 // splitting the path by '/' means we'll get the following return..
592 // {0}/{1}/{2} 592 // {0}/{1}/{2}
593 // where {0} isn't something we really control 100% 593 // where {0} isn't something we really control 100%
594 594
@@ -599,7 +599,7 @@ namespace OpenSim.Framework.Servers
599 return false; 599 return false;
600 600
601 for (int i=1; i<pathbase.Length; i++) 601 for (int i=1; i<pathbase.Length; i++)
602 { 602 {
603 searchquery += pathbase[i]; 603 searchquery += pathbase[i];
604 if (pathbase.Length-1 != i) 604 if (pathbase.Length-1 != i)
605 searchquery += "/"; 605 searchquery += "/";
@@ -609,7 +609,7 @@ namespace OpenSim.Framework.Servers
609 // 609 //
610 // [] = optional 610 // [] = optional
611 // /resource/UUID/action[/action] 611 // /resource/UUID/action[/action]
612 // 612 //
613 // now try to get the closest match to the reigstered path 613 // now try to get the closest match to the reigstered path
614 // at least for OGP, registered path would probably only consist of the /resource/ 614 // at least for OGP, registered path would probably only consist of the /resource/
615 615
diff --git a/OpenSim/Framework/Servers/BaseOpenSimServer.cs b/OpenSim/Framework/Servers/BaseOpenSimServer.cs
index b26d397..794dbd8 100644
--- a/OpenSim/Framework/Servers/BaseOpenSimServer.cs
+++ b/OpenSim/Framework/Servers/BaseOpenSimServer.cs
@@ -107,20 +107,20 @@ namespace OpenSim.Framework.Servers
107 { 107 {
108 sb.Append(m_stats.Report()); 108 sb.Append(m_stats.Report());
109 } 109 }
110 110
111 sb.Append(Environment.NewLine); 111 sb.Append(Environment.NewLine);
112 sb.Append(GetThreadsReport()); 112 sb.Append(GetThreadsReport());
113 113
114 m_log.Debug(sb); 114 m_log.Debug(sb);
115 } 115 }
116 116
117 /// <summary> 117 /// <summary>
118 /// Get a report about the registered threads in this server. 118 /// Get a report about the registered threads in this server.
119 /// </summary> 119 /// </summary>
120 protected string GetThreadsReport() 120 protected string GetThreadsReport()
121 { 121 {
122 StringBuilder sb = new StringBuilder(); 122 StringBuilder sb = new StringBuilder();
123 123
124 List<Thread> threads = ThreadTracker.GetThreads(); 124 List<Thread> threads = ThreadTracker.GetThreads();
125 if (threads == null) 125 if (threads == null)
126 { 126 {
@@ -132,13 +132,13 @@ namespace OpenSim.Framework.Servers
132 foreach (Thread t in threads) 132 foreach (Thread t in threads)
133 { 133 {
134 sb.Append( 134 sb.Append(
135 "ID: " + t.ManagedThreadId + ", Name: " + t.Name + ", Alive: " + t.IsAlive 135 "ID: " + t.ManagedThreadId + ", Name: " + t.Name + ", Alive: " + t.IsAlive
136 + ", Pri: " + t.Priority + ", State: " + t.ThreadState + Environment.NewLine); 136 + ", Pri: " + t.Priority + ", State: " + t.ThreadState + Environment.NewLine);
137 } 137 }
138 } 138 }
139 139
140 return sb.ToString(); 140 return sb.ToString();
141 } 141 }
142 142
143 /// <summary> 143 /// <summary>
144 /// Return a report about the uptime of this server 144 /// Return a report about the uptime of this server
@@ -312,7 +312,7 @@ namespace OpenSim.Framework.Servers
312 312
313 return; 313 return;
314 } 314 }
315 } 315 }
316 316
317 /// <summary> 317 /// <summary>
318 /// Outputs to the console information about the region 318 /// Outputs to the console information about the region
diff --git a/OpenSim/Grid/UserServer/UserLoginService.cs b/OpenSim/Grid/UserServer/UserLoginService.cs
index 09a25e4..e897787 100644
--- a/OpenSim/Grid/UserServer/UserLoginService.cs
+++ b/OpenSim/Grid/UserServer/UserLoginService.cs
@@ -160,7 +160,7 @@ namespace OpenSim.Grid.UserServer
160 theUser.HomeRegion, m_config.GridServerURL, 160 theUser.HomeRegion, m_config.GridServerURL,
161 m_config.GridSendKey, m_config.GridRecvKey); 161 m_config.GridSendKey, m_config.GridRecvKey);
162 } 162 }
163 163
164 if (startLocationRequest == "last") 164 if (startLocationRequest == "last")
165 { 165 {
166 SimInfo = 166 SimInfo =
diff --git a/OpenSim/Region/ClientStack/LindenUDP/KillPacket.cs b/OpenSim/Region/ClientStack/LindenUDP/KillPacket.cs
index 616d8d9..d7d9128 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/KillPacket.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/KillPacket.cs
@@ -34,7 +34,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
34{ 34{
35 /// <summary> 35 /// <summary>
36 /// When packetqueue dequeues this packet in the outgoing stream, it thread aborts 36 /// When packetqueue dequeues this packet in the outgoing stream, it thread aborts
37 /// Ensures that the thread abort happens from within the client thread 37 /// Ensures that the thread abort happens from within the client thread
38 /// regardless of where the close method is called 38 /// regardless of where the close method is called
39 /// </summary> 39 /// </summary>
40 class KillPacket : Packet 40 class KillPacket : Packet
@@ -42,20 +42,19 @@ namespace OpenSim.Region.ClientStack.LindenUDP
42 private Header header; 42 private Header header;
43 public override void FromBytes(Header header, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) 43 public override void FromBytes(Header header, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer)
44 { 44 {
45
46 } 45 }
47 46
48 public override void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer) 47 public override void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer)
49 { 48 {
50
51 } 49 }
52 50
53 public override Header Header { get { return header; } set { header = value; }} 51 public override Header Header { get { return header; } set { header = value; }}
54 52
55 public override byte[] ToBytes() 53 public override byte[] ToBytes()
56 { 54 {
57 return new byte[0]; 55 return new byte[0];
58 } 56 }
57
59 public KillPacket() 58 public KillPacket()
60 { 59 {
61 Header = new LowHeader(); 60 Header = new LowHeader();
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
index fc99334..0a067d5 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
@@ -373,7 +373,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
373 public bool SendLogoutPacketWhenClosing 373 public bool SendLogoutPacketWhenClosing
374 { 374 {
375 set { m_SendLogoutPacketWhenClosing = value; } 375 set { m_SendLogoutPacketWhenClosing = value; }
376 } 376 }
377 377
378 /* METHODS */ 378 /* METHODS */
379 379
@@ -459,10 +459,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP
459 { 459 {
460 GC.Collect(); 460 GC.Collect();
461 461
462 // Sends a KillPacket object, with which, the 462 // Sends a KillPacket object, with which, the
463 // blockingqueue dequeues and sees it's a killpacket 463 // blockingqueue dequeues and sees it's a killpacket
464 // and terminates within the context of the client thread. 464 // and terminates within the context of the client thread.
465 // This ensures that it's done from within the context 465 // This ensures that it's done from within the context
466 // of the client thread regardless of where Close() is called. 466 // of the client thread regardless of where Close() is called.
467 KillEndDone(); 467 KillEndDone();
468 } 468 }
@@ -2099,8 +2099,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
2099 #endregion 2099 #endregion
2100 2100
2101 // Gesture 2101 // Gesture
2102
2103
2104 2102
2105 #region Appearance/ Wearables Methods 2103 #region Appearance/ Wearables Methods
2106 2104
@@ -5964,11 +5962,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP
5964 if (handlerActivateGesture != null) 5962 if (handlerActivateGesture != null)
5965 { 5963 {
5966 handlerActivateGesture(this, 5964 handlerActivateGesture(this,
5967 activateGesturePacket.Data[0].AssetID, 5965 activateGesturePacket.Data[0].AssetID,
5968 activateGesturePacket.Data[0].ItemID); 5966 activateGesturePacket.Data[0].ItemID);
5969 } 5967 }
5970 else m_log.Error("Null pointer for activateGesture"); 5968 else m_log.Error("Null pointer for activateGesture");
5971 5969
5972 break; 5970 break;
5973 5971
5974 case PacketType.DeactivateGestures: 5972 case PacketType.DeactivateGestures:
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLPacketHandler.cs b/OpenSim/Region/ClientStack/LindenUDP/LLPacketHandler.cs
index e874394..551e7ab 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/LLPacketHandler.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/LLPacketHandler.cs
@@ -234,7 +234,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
234 // to. Packet drop notifies will not be triggered in this 234 // to. Packet drop notifies will not be triggered in this
235 // configuration! 235 // configuration!
236 // 236 //
237 237
238 if ((m_SynchronizeClient != null) && (!m_Client.IsActive)) 238 if ((m_SynchronizeClient != null) && (!m_Client.IsActive))
239 { 239 {
240 if (m_SynchronizeClient(m_Client.Scene, packet, 240 if (m_SynchronizeClient(m_Client.Scene, packet,
@@ -749,7 +749,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
749 // If we sent a killpacket 749 // If we sent a killpacket
750 if (packet is KillPacket) 750 if (packet is KillPacket)
751 Thread.CurrentThread.Abort(); 751 Thread.CurrentThread.Abort();
752 752
753 // Actually make the byte array and send it 753 // Actually make the byte array and send it
754 byte[] sendbuffer = packet.ToBytes(); 754 byte[] sendbuffer = packet.ToBytes();
755 755
diff --git a/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs b/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs
index abaf743..da2e4a2 100644
--- a/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs
+++ b/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs
@@ -260,9 +260,9 @@ namespace OpenSim.Region.Communications.OGS1
260 catch (SocketException e) 260 catch (SocketException e)
261 { 261 {
262 m_log.WarnFormat( 262 m_log.WarnFormat(
263 "[OGS1 GRID SERVICES]: RequestNeighbours(): Lookup of neighbour {0} failed! Not including in neighbours list. {1}", 263 "[OGS1 GRID SERVICES]: RequestNeighbours(): Lookup of neighbour {0} failed! Not including in neighbours list. {1}",
264 simIp, e); 264 simIp, e);
265 265
266 continue; 266 continue;
267 } 267 }
268 268
@@ -304,7 +304,7 @@ namespace OpenSim.Region.Communications.OGS1
304 SendParams.Add(requestData); 304 SendParams.Add(requestData);
305 XmlRpcRequest gridReq = new XmlRpcRequest("simulator_data_request", SendParams); 305 XmlRpcRequest gridReq = new XmlRpcRequest("simulator_data_request", SendParams);
306 XmlRpcResponse gridResp = null; 306 XmlRpcResponse gridResp = null;
307 307
308 try 308 try
309 { 309 {
310 gridResp = gridReq.Send(serversInfo.GridURL, 3000); 310 gridResp = gridReq.Send(serversInfo.GridURL, 3000);
@@ -312,9 +312,9 @@ namespace OpenSim.Region.Communications.OGS1
312 catch (WebException e) 312 catch (WebException e)
313 { 313 {
314 m_log.ErrorFormat( 314 m_log.ErrorFormat(
315 "[OGS1 GRID SERVICES]: Communication with the grid server at {0} failed, {1}", 315 "[OGS1 GRID SERVICES]: Communication with the grid server at {0} failed, {1}",
316 serversInfo.GridURL, e); 316 serversInfo.GridURL, e);
317 317
318 return null; 318 return null;
319 } 319 }
320 320
@@ -1621,14 +1621,14 @@ namespace OpenSim.Region.Communications.OGS1
1621 { 1621 {
1622 m_log.DebugFormat( 1622 m_log.DebugFormat(
1623 "[OGS1 GRID SERVICES]: CheckRegion Socket Setup exception: {0}:{1}", e.Message, e.StackTrace); 1623 "[OGS1 GRID SERVICES]: CheckRegion Socket Setup exception: {0}:{1}", e.Message, e.StackTrace);
1624 1624
1625 return false; 1625 return false;
1626 } 1626 }
1627 1627
1628 if (timed_out) 1628 if (timed_out)
1629 { 1629 {
1630 m_log.DebugFormat( 1630 m_log.DebugFormat(
1631 "[OGS1 GRID SERVICES]: socket [{0}] timed out ({1}) waiting to obtain a connection.", 1631 "[OGS1 GRID SERVICES]: socket [{0}] timed out ({1}) waiting to obtain a connection.",
1632 m_EndPoint, timeOut * 1000); 1632 m_EndPoint, timeOut * 1000);
1633 1633
1634 if (retry) 1634 if (retry)
diff --git a/OpenSim/Region/Environment/Modules/Avatar/Currency/SampleMoney/SampleMoneyModule.cs b/OpenSim/Region/Environment/Modules/Avatar/Currency/SampleMoney/SampleMoneyModule.cs
index 77dd0f9..9f01ad8 100644
--- a/OpenSim/Region/Environment/Modules/Avatar/Currency/SampleMoney/SampleMoneyModule.cs
+++ b/OpenSim/Region/Environment/Modules/Avatar/Currency/SampleMoney/SampleMoneyModule.cs
@@ -1537,7 +1537,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney
1537 { 1537 {
1538 GetClientFunds(client); 1538 GetClientFunds(client);
1539 1539
1540 lock(m_KnownClientFunds) 1540 lock (m_KnownClientFunds)
1541 { 1541 {
1542 if (!m_KnownClientFunds.ContainsKey(client.AgentId)) 1542 if (!m_KnownClientFunds.ContainsKey(client.AgentId))
1543 return 0; 1543 return 0;
@@ -1570,7 +1570,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney
1570 1570
1571 int funds = m_KnownClientFunds[remoteClient.AgentId]; 1571 int funds = m_KnownClientFunds[remoteClient.AgentId];
1572 1572
1573 if(salePrice != 0 && funds < salePrice) 1573 if (salePrice != 0 && funds < salePrice)
1574 { 1574 {
1575 remoteClient.SendAgentAlertMessage("Unable to buy now. You don't have sufficient funds.", false); 1575 remoteClient.SendAgentAlertMessage("Unable to buy now. You don't have sufficient funds.", false);
1576 return; 1576 return;
@@ -1584,7 +1584,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney
1584 remoteClient.SendAgentAlertMessage("Unable to buy now. The object was not found.", false); 1584 remoteClient.SendAgentAlertMessage("Unable to buy now. The object was not found.", false);
1585 return; 1585 return;
1586 } 1586 }
1587 1587
1588 doMoneyTransfer(remoteClient.AgentId, part.OwnerID, salePrice, 5000, "Object buy"); 1588 doMoneyTransfer(remoteClient.AgentId, part.OwnerID, salePrice, 5000, "Object buy");
1589 1589
1590 s.PerformObjectBuy(remoteClient, categoryID, localID, saleType); 1590 s.PerformObjectBuy(remoteClient, categoryID, localID, saleType);
diff --git a/OpenSim/Region/Environment/Modules/InterGrid/OpenGridProtocolModule.cs b/OpenSim/Region/Environment/Modules/InterGrid/OpenGridProtocolModule.cs
index 926e584..0c15637 100644
--- a/OpenSim/Region/Environment/Modules/InterGrid/OpenGridProtocolModule.cs
+++ b/OpenSim/Region/Environment/Modules/InterGrid/OpenGridProtocolModule.cs
@@ -83,16 +83,13 @@ namespace OpenSim.Region.Environment.Modules.InterGrid
83 public bool visible_to_parent; 83 public bool visible_to_parent;
84 } 84 }
85 85
86
87 public class OpenGridProtocolModule : IRegionModule 86 public class OpenGridProtocolModule : IRegionModule
88 { 87 {
89 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 88 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
90 private List<Scene> m_scene = new List<Scene>(); 89 private List<Scene> m_scene = new List<Scene>();
91 90
92 private Dictionary<string, AgentCircuitData> CapsLoginID = new Dictionary<string, AgentCircuitData>(); 91 private Dictionary<string, AgentCircuitData> CapsLoginID = new Dictionary<string, AgentCircuitData>();
93 private Dictionary<LLUUID, OGPState> m_OGPState = new Dictionary<LLUUID, OGPState>(); 92 private Dictionary<LLUUID, OGPState> m_OGPState = new Dictionary<LLUUID, OGPState>();
94
95
96 93
97 #region IRegionModule Members 94 #region IRegionModule Members
98 95
@@ -134,7 +131,7 @@ namespace OpenSim.Region.Environment.Modules.InterGrid
134 m_log.Error("[OGP]: Certificate validation handler change not supported. You may get ssl certificate validation errors teleporting from your region to some SSL regions."); 131 m_log.Error("[OGP]: Certificate validation handler change not supported. You may get ssl certificate validation errors teleporting from your region to some SSL regions.");
135 } 132 }
136 } 133 }
137 134
138 } 135 }
139 136
140 if (!m_scene.Contains(scene)) 137 if (!m_scene.Contains(scene))
@@ -217,15 +214,12 @@ namespace OpenSim.Region.Environment.Modules.InterGrid
217 m_log.WarnFormat("[REQUESTREZAVATAR]: {0}", request.ToString()); 214 m_log.WarnFormat("[REQUESTREZAVATAR]: {0}", request.ToString());
218 215
219 LLSDMap requestMap = (LLSDMap)request; 216 LLSDMap requestMap = (LLSDMap)request;
220 217
221 Scene homeScene = GetRootScene(); 218 Scene homeScene = GetRootScene();
222
223
224 219
225 if (homeScene == null) 220 if (homeScene == null)
226 return GenerateNoHandlerMessage(); 221 return GenerateNoHandlerMessage();
227 222
228
229 RegionInfo reg = homeScene.RegionInfo; 223 RegionInfo reg = homeScene.RegionInfo;
230 ulong regionhandle = GetOSCompatibleRegionHandle(reg); 224 ulong regionhandle = GetOSCompatibleRegionHandle(reg);
231 //string RegionURI = reg.ServerURI; 225 //string RegionURI = reg.ServerURI;
@@ -234,14 +228,13 @@ namespace OpenSim.Region.Environment.Modules.InterGrid
234 LLUUID RemoteAgentID = requestMap["agent_id"].AsUUID(); 228 LLUUID RemoteAgentID = requestMap["agent_id"].AsUUID();
235 229
236 // will be used in the future. The client always connects with the aditi agentid currently 230 // will be used in the future. The client always connects with the aditi agentid currently
237 LLUUID LocalAgentID = RemoteAgentID; 231 LLUUID LocalAgentID = RemoteAgentID;
238 232
239 string FirstName = requestMap["first_name"].AsString(); 233 string FirstName = requestMap["first_name"].AsString();
240 string LastName = requestMap["last_name"].AsString(); 234 string LastName = requestMap["last_name"].AsString();
241 235
242
243 OGPState userState = GetOGPState(LocalAgentID); 236 OGPState userState = GetOGPState(LocalAgentID);
244 237
245 userState.first_name = requestMap["first_name"].AsString(); 238 userState.first_name = requestMap["first_name"].AsString();
246 userState.last_name = requestMap["last_name"].AsString(); 239 userState.last_name = requestMap["last_name"].AsString();
247 userState.age_verified = requestMap["age_verified"].AsBoolean(); 240 userState.age_verified = requestMap["age_verified"].AsBoolean();
@@ -268,7 +261,7 @@ namespace OpenSim.Region.Environment.Modules.InterGrid
268 responseMap["region_Y"] = LLSD.FromInteger(reg.RegionLocY * (uint)Constants.RegionSize); // LLY 261 responseMap["region_Y"] = LLSD.FromInteger(reg.RegionLocY * (uint)Constants.RegionSize); // LLY
269 responseMap["region_id"] = LLSD.FromUUID(reg.originRegionID); 262 responseMap["region_id"] = LLSD.FromUUID(reg.originRegionID);
270 responseMap["sim_access"] = LLSD.FromString((reg.RegionSettings.Maturity == 1) ? "Mature" : "PG"); 263 responseMap["sim_access"] = LLSD.FromString((reg.RegionSettings.Maturity == 1) ? "Mature" : "PG");
271 264
272 // Generate a dummy agent for the user so we can get back a CAPS path 265 // Generate a dummy agent for the user so we can get back a CAPS path
273 AgentCircuitData agentData = new AgentCircuitData(); 266 AgentCircuitData agentData = new AgentCircuitData();
274 agentData.AgentID = LocalAgentID; 267 agentData.AgentID = LocalAgentID;
@@ -299,7 +292,6 @@ namespace OpenSim.Region.Environment.Modules.InterGrid
299 useragent.SecureSessionID=agentData.SecureSessionID; 292 useragent.SecureSessionID=agentData.SecureSessionID;
300 useragent.SessionID = agentData.SessionID; 293 useragent.SessionID = agentData.SessionID;
301 294
302
303 UserProfileData userProfile = new UserProfileData(); 295 UserProfileData userProfile = new UserProfileData();
304 userProfile.AboutText = "OGP User"; 296 userProfile.AboutText = "OGP User";
305 userProfile.CanDoMask = (uint)0; 297 userProfile.CanDoMask = (uint)0;
@@ -338,15 +330,13 @@ namespace OpenSim.Region.Environment.Modules.InterGrid
338 330
339 // Do caps registration 331 // Do caps registration
340 // get seed cap 332 // get seed cap
341 333
342
343 // Stick our data in the cache so the region will know something about us 334 // Stick our data in the cache so the region will know something about us
344 homeScene.CommsManager.UserProfileCacheService.PreloadUserCache(agentData.AgentID, userProfile); 335 homeScene.CommsManager.UserProfileCacheService.PreloadUserCache(agentData.AgentID, userProfile);
345 336
346 // Call 'new user' event handler 337 // Call 'new user' event handler
347 homeScene.NewUserConnection(reg.RegionHandle, agentData); 338 homeScene.NewUserConnection(reg.RegionHandle, agentData);
348 339
349
350 //string raCap = string.Empty; 340 //string raCap = string.Empty;
351 341
352 LLUUID AvatarRezCapUUID = LLUUID.Random(); 342 LLUUID AvatarRezCapUUID = LLUUID.Random();
@@ -379,16 +369,16 @@ namespace OpenSim.Region.Environment.Modules.InterGrid
379 public LLSD RezAvatarMethod(string path, LLSD request) 369 public LLSD RezAvatarMethod(string path, LLSD request)
380 { 370 {
381 m_log.WarnFormat("[REZAVATAR]: {0}", request.ToString()); 371 m_log.WarnFormat("[REZAVATAR]: {0}", request.ToString());
382 372
383 LLSDMap responseMap = new LLSDMap(); 373 LLSDMap responseMap = new LLSDMap();
384 374
385 AgentCircuitData userData = null; 375 AgentCircuitData userData = null;
386 376
387 // Only people we've issued a cap can go further 377 // Only people we've issued a cap can go further
388 if (TryGetAgentCircuitData(path,out userData)) 378 if (TryGetAgentCircuitData(path,out userData))
389 { 379 {
390 LLSDMap requestMap = (LLSDMap)request; 380 LLSDMap requestMap = (LLSDMap)request;
391 381
392 // take these values to start. There's a few more 382 // take these values to start. There's a few more
393 LLUUID SecureSessionID=requestMap["secure_session_id"].AsUUID(); 383 LLUUID SecureSessionID=requestMap["secure_session_id"].AsUUID();
394 LLUUID SessionID = requestMap["session_id"].AsUUID(); 384 LLUUID SessionID = requestMap["session_id"].AsUUID();
@@ -419,7 +409,7 @@ namespace OpenSim.Region.Environment.Modules.InterGrid
419 if (item.ContainsKey("parent_estate_id")) 409 if (item.ContainsKey("parent_estate_id"))
420 { 410 {
421 parentEstateID = item["parent_estate_id"].AsInteger(); 411 parentEstateID = item["parent_estate_id"].AsInteger();
422 412
423 } 413 }
424 if (item.ContainsKey("region_id")) 414 if (item.ContainsKey("region_id"))
425 { 415 {
@@ -437,11 +427,11 @@ namespace OpenSim.Region.Environment.Modules.InterGrid
437 427
438 // Locate a home scene suitable for the user. 428 // Locate a home scene suitable for the user.
439 Scene homeScene = GetRootScene(); 429 Scene homeScene = GetRootScene();
440 430
441 if (homeScene != null) 431 if (homeScene != null)
442 { 432 {
443 // Get a reference to their Cap object so we can pull out the capobjectroot 433 // Get a reference to their Cap object so we can pull out the capobjectroot
444 OpenSim.Framework.Communications.Capabilities.Caps userCap = 434 OpenSim.Framework.Communications.Capabilities.Caps userCap =
445 homeScene.GetCapsHandlerForUser(userData.AgentID); 435 homeScene.GetCapsHandlerForUser(userData.AgentID);
446 436
447 //Update the circuit data in the region so this user is authorized 437 //Update the circuit data in the region so this user is authorized
@@ -470,7 +460,7 @@ namespace OpenSim.Region.Environment.Modules.InterGrid
470 userState.region_id = regionID; 460 userState.region_id = regionID;
471 userState.src_parent_estate_id = parentEstateID; 461 userState.src_parent_estate_id = parentEstateID;
472 userState.visible_to_parent = visibleToParent; 462 userState.visible_to_parent = visibleToParent;
473 463
474 // Save state changes 464 // Save state changes
475 UpdateOGPState(userData.AgentID, userState); 465 UpdateOGPState(userData.AgentID, userState);
476 466
@@ -481,8 +471,8 @@ namespace OpenSim.Region.Environment.Modules.InterGrid
481 LLSDArray PositionArray = new LLSDArray(); 471 LLSDArray PositionArray = new LLSDArray();
482 PositionArray.Add(LLSD.FromInteger(128)); 472 PositionArray.Add(LLSD.FromInteger(128));
483 PositionArray.Add(LLSD.FromInteger(128)); 473 PositionArray.Add(LLSD.FromInteger(128));
484 PositionArray.Add(LLSD.FromInteger(40)); 474 PositionArray.Add(LLSD.FromInteger(40));
485 475
486 LLSDArray LookAtArray = new LLSDArray(); 476 LLSDArray LookAtArray = new LLSDArray();
487 LookAtArray.Add(LLSD.FromInteger(1)); 477 LookAtArray.Add(LLSD.FromInteger(1));
488 LookAtArray.Add(LLSD.FromInteger(1)); 478 LookAtArray.Add(LLSD.FromInteger(1));
@@ -503,44 +493,36 @@ namespace OpenSim.Region.Environment.Modules.InterGrid
503 responseMap["seed_capability"] = LLSD.FromString("http://" + reg.ExternalHostName + ":" + reg.HttpPort + "/CAPS/" + userCap.CapsObjectPath + "0000/"); 493 responseMap["seed_capability"] = LLSD.FromString("http://" + reg.ExternalHostName + ":" + reg.HttpPort + "/CAPS/" + userCap.CapsObjectPath + "0000/");
504 responseMap["region"] = LLSD.FromUUID(reg.originRegionID); 494 responseMap["region"] = LLSD.FromUUID(reg.originRegionID);
505 responseMap["look_at"] = LookAtArray; 495 responseMap["look_at"] = LookAtArray;
506 496
507 responseMap["sim_port"] = LLSD.FromInteger(reg.InternalEndPoint.Port); 497 responseMap["sim_port"] = LLSD.FromInteger(reg.InternalEndPoint.Port);
508 responseMap["sim_host"] = LLSD.FromString(Util.GetHostFromDNS(reg.ExternalHostName).ToString());// + ":" + reg.InternalEndPoint.Port.ToString()); 498 responseMap["sim_host"] = LLSD.FromString(Util.GetHostFromDNS(reg.ExternalHostName).ToString());// + ":" + reg.InternalEndPoint.Port.ToString());
509 responseMap["sim_ip"] = LLSD.FromString(Util.GetHostFromDNS(reg.ExternalHostName).ToString()); 499 responseMap["sim_ip"] = LLSD.FromString(Util.GetHostFromDNS(reg.ExternalHostName).ToString());
510 500
511 responseMap["session_id"] = LLSD.FromUUID(SessionID); 501 responseMap["session_id"] = LLSD.FromUUID(SessionID);
512 responseMap["secure_session_id"] = LLSD.FromUUID(SecureSessionID); 502 responseMap["secure_session_id"] = LLSD.FromUUID(SecureSessionID);
513 responseMap["circuit_code"] = LLSD.FromInteger(circuitcode); 503 responseMap["circuit_code"] = LLSD.FromInteger(circuitcode);
514 504
515 responseMap["position"] = PositionArray; 505 responseMap["position"] = PositionArray;
516 506
517 responseMap["region_id"] = LLSD.FromUUID(reg.originRegionID); 507 responseMap["region_id"] = LLSD.FromUUID(reg.originRegionID);
518 508
519 responseMap["sim_access"] = LLSD.FromString("Mature"); 509 responseMap["sim_access"] = LLSD.FromString("Mature");
520 510
521 responseMap["connect"] = LLSD.FromBoolean(true); 511 responseMap["connect"] = LLSD.FromBoolean(true);
522 512
523 m_log.InfoFormat("[OGP]: host: {0}, IP {1}", responseMap["sim_host"].ToString(), responseMap["sim_ip"].ToString()); 513 m_log.InfoFormat("[OGP]: host: {0}, IP {1}", responseMap["sim_host"].ToString(), responseMap["sim_ip"].ToString());
524
525 } 514 }
526
527 } 515 }
528 516
529 return responseMap; 517 return responseMap;
530 } 518 }
531 519
532
533
534 public LLSD DerezAvatarMethod(string path, LLSD request) 520 public LLSD DerezAvatarMethod(string path, LLSD request)
535 { 521 {
536
537
538 m_log.ErrorFormat("DerezPath: {0}, Request: {1}", path, request.ToString()); 522 m_log.ErrorFormat("DerezPath: {0}, Request: {1}", path, request.ToString());
539 523
540 //LLSD llsdResponse = null; 524 //LLSD llsdResponse = null;
541 LLSDMap responseMap = new LLSDMap(); 525 LLSDMap responseMap = new LLSDMap();
542
543
544 526
545 string[] PathArray = path.Split('/'); 527 string[] PathArray = path.Split('/');
546 m_log.InfoFormat("[OGP]: prefix {0}, uuid {1}, suffix {2}", PathArray[1], PathArray[2], PathArray[3]); 528 m_log.InfoFormat("[OGP]: prefix {0}, uuid {1}, suffix {2}", PathArray[1], PathArray[2], PathArray[3]);
@@ -549,17 +531,15 @@ namespace OpenSim.Region.Environment.Modules.InterGrid
549 LLUUID userUUID = LLUUID.Zero; 531 LLUUID userUUID = LLUUID.Zero;
550 if (Helpers.TryParse(uuidString, out userUUID)) 532 if (Helpers.TryParse(uuidString, out userUUID))
551 { 533 {
552
553 LLUUID RemoteID = uuidString; 534 LLUUID RemoteID = uuidString;
554 LLUUID LocalID = RemoteID; 535 LLUUID LocalID = RemoteID;
555 // FIXME: TODO: Routine to map RemoteUUIDs to LocalUUIds 536 // FIXME: TODO: Routine to map RemoteUUIDs to LocalUUIds
556 // would be done already.. but the client connects with the Aditi UUID 537 // would be done already.. but the client connects with the Aditi UUID
557 // regardless over the UDP stack 538 // regardless over the UDP stack
558 539
559 OGPState userState = GetOGPState(LocalID); 540 OGPState userState = GetOGPState(LocalID);
560 if (userState.agent_id != LLUUID.Zero) 541 if (userState.agent_id != LLUUID.Zero)
561 { 542 {
562
563 //LLSDMap outboundRequestMap = new LLSDMap(); 543 //LLSDMap outboundRequestMap = new LLSDMap();
564 LLSDMap inboundRequestMap = (LLSDMap)request; 544 LLSDMap inboundRequestMap = (LLSDMap)request;
565 string rezAvatarString = inboundRequestMap["rez_avatar"].AsString(); 545 string rezAvatarString = inboundRequestMap["rez_avatar"].AsString();
@@ -569,12 +549,11 @@ namespace OpenSim.Region.Environment.Modules.InterGrid
569 LookAtArray.Add(LLSD.FromInteger(1)); 549 LookAtArray.Add(LLSD.FromInteger(1));
570 LookAtArray.Add(LLSD.FromInteger(1)); 550 LookAtArray.Add(LLSD.FromInteger(1));
571 551
572
573 LLSDArray PositionArray = new LLSDArray(); 552 LLSDArray PositionArray = new LLSDArray();
574 PositionArray.Add(LLSD.FromInteger(128)); 553 PositionArray.Add(LLSD.FromInteger(128));
575 PositionArray.Add(LLSD.FromInteger(128)); 554 PositionArray.Add(LLSD.FromInteger(128));
576 PositionArray.Add(LLSD.FromInteger(40)); 555 PositionArray.Add(LLSD.FromInteger(40));
577 556
578 LLSDArray lookArray = new LLSDArray(); 557 LLSDArray lookArray = new LLSDArray();
579 lookArray.Add(LLSD.FromInteger(128)); 558 lookArray.Add(LLSD.FromInteger(128));
580 lookArray.Add(LLSD.FromInteger(128)); 559 lookArray.Add(LLSD.FromInteger(128));
@@ -582,11 +561,11 @@ namespace OpenSim.Region.Environment.Modules.InterGrid
582 561
583 responseMap["connect"] = LLSD.FromBoolean(true);// it's okay to give this user up 562 responseMap["connect"] = LLSD.FromBoolean(true);// it's okay to give this user up
584 responseMap["look_at"] = LookAtArray; 563 responseMap["look_at"] = LookAtArray;
585 564
586 m_log.WarnFormat("[OGP]: Invoking rez_avatar on host:{0} for avatar: {1} {2}", rezAvatarString, userState.first_name, userState.last_name); 565 m_log.WarnFormat("[OGP]: Invoking rez_avatar on host:{0} for avatar: {1} {2}", rezAvatarString, userState.first_name, userState.last_name);
587 566
588 LLSDMap rezResponseMap = invokeRezAvatarCap(responseMap, rezAvatarString,userState); 567 LLSDMap rezResponseMap = invokeRezAvatarCap(responseMap, rezAvatarString,userState);
589 568
590 // If invoking it returned an error, parse and end 569 // If invoking it returned an error, parse and end
591 if (rezResponseMap.ContainsKey("connect")) 570 if (rezResponseMap.ContainsKey("connect"))
592 { 571 {
@@ -599,17 +578,16 @@ namespace OpenSim.Region.Environment.Modules.InterGrid
599 string rezRespSeedCap = rezResponseMap["seed_capability"].AsString(); 578 string rezRespSeedCap = rezResponseMap["seed_capability"].AsString();
600 string rezRespSim_ip = rezResponseMap["sim_ip"].AsString(); 579 string rezRespSim_ip = rezResponseMap["sim_ip"].AsString();
601 string rezRespSim_host = rezResponseMap["sim_host"].AsString(); 580 string rezRespSim_host = rezResponseMap["sim_host"].AsString();
602 581
603 int rrPort = rezResponseMap["sim_port"].AsInteger(); 582 int rrPort = rezResponseMap["sim_port"].AsInteger();
604 int rrX = rezResponseMap["region_x"].AsInteger(); 583 int rrX = rezResponseMap["region_x"].AsInteger();
605 int rrY = rezResponseMap["region_y"].AsInteger(); 584 int rrY = rezResponseMap["region_y"].AsInteger();
606 m_log.ErrorFormat("X:{0}, Y:{1}", rrX, rrY); 585 m_log.ErrorFormat("X:{0}, Y:{1}", rrX, rrY);
607 LLUUID rrRID = rezResponseMap["region_id"].AsUUID(); 586 LLUUID rrRID = rezResponseMap["region_id"].AsUUID();
608 587
609 string rrAccess = rezResponseMap["sim_access"].AsString(); 588 string rrAccess = rezResponseMap["sim_access"].AsString();
610 589
611 LLSDArray RezResponsePositionArray = (LLSDArray)rezResponseMap["position"]; 590 LLSDArray RezResponsePositionArray = (LLSDArray)rezResponseMap["position"];
612
613 591
614 responseMap["seed_capability"] = LLSD.FromString(rezRespSeedCap); 592 responseMap["seed_capability"] = LLSD.FromString(rezRespSeedCap);
615 responseMap["sim_ip"] = LLSD.FromString(Util.GetHostFromDNS(rezRespSim_ip).ToString()); 593 responseMap["sim_ip"] = LLSD.FromString(Util.GetHostFromDNS(rezRespSim_ip).ToString());
@@ -619,23 +597,17 @@ namespace OpenSim.Region.Environment.Modules.InterGrid
619 responseMap["region_y"] = LLSD.FromInteger(rrY ); 597 responseMap["region_y"] = LLSD.FromInteger(rrY );
620 responseMap["region_id"] = LLSD.FromUUID(rrRID); 598 responseMap["region_id"] = LLSD.FromUUID(rrRID);
621 responseMap["sim_access"] = LLSD.FromString(rrAccess); 599 responseMap["sim_access"] = LLSD.FromString(rrAccess);
622
623
624
625 responseMap["position"] = RezResponsePositionArray; 600 responseMap["position"] = RezResponsePositionArray;
626 responseMap["look_at"] = lookArray; 601 responseMap["look_at"] = lookArray;
627 responseMap["connect"] = LLSD.FromBoolean(true); 602 responseMap["connect"] = LLSD.FromBoolean(true);
628 603
629 ShutdownConnection(LocalID,this); 604 ShutdownConnection(LocalID,this);
630 605
631
632 m_log.Warn("RESPONSEDEREZ: " + responseMap.ToString()); 606 m_log.Warn("RESPONSEDEREZ: " + responseMap.ToString());
633 return responseMap; 607 return responseMap;
634
635 } 608 }
636 else 609 else
637 { 610 {
638
639 return GenerateNoHandlerMessage(); 611 return GenerateNoHandlerMessage();
640 } 612 }
641 } 613 }
@@ -649,20 +621,18 @@ namespace OpenSim.Region.Environment.Modules.InterGrid
649 621
650 private LLSDMap invokeRezAvatarCap(LLSDMap responseMap, string CapAddress, OGPState userState) 622 private LLSDMap invokeRezAvatarCap(LLSDMap responseMap, string CapAddress, OGPState userState)
651 { 623 {
652
653 Scene reg = GetRootScene(); 624 Scene reg = GetRootScene();
654 625
655 WebRequest DeRezRequest = WebRequest.Create(CapAddress); 626 WebRequest DeRezRequest = WebRequest.Create(CapAddress);
656 DeRezRequest.Method = "POST"; 627 DeRezRequest.Method = "POST";
657 DeRezRequest.ContentType = "application/xml+llsd"; 628 DeRezRequest.ContentType = "application/xml+llsd";
658
659 629
660 LLSDMap RAMap = new LLSDMap(); 630 LLSDMap RAMap = new LLSDMap();
661 LLSDMap AgentParms = new LLSDMap(); 631 LLSDMap AgentParms = new LLSDMap();
662 LLSDMap RegionParms = new LLSDMap(); 632 LLSDMap RegionParms = new LLSDMap();
663 633
664 LLSDArray Parameter = new LLSDArray(2); 634 LLSDArray Parameter = new LLSDArray(2);
665 635
666 LLSDMap version = new LLSDMap(); 636 LLSDMap version = new LLSDMap();
667 version["version"] = LLSD.FromInteger(userState.src_version); 637 version["version"] = LLSD.FromInteger(userState.src_version);
668 Parameter.Add((LLSD)version); 638 Parameter.Add((LLSD)version);
@@ -673,7 +643,7 @@ namespace OpenSim.Region.Environment.Modules.InterGrid
673 SrcData["region_id"] = LLSD.FromUUID(reg.RegionInfo.originRegionID); 643 SrcData["region_id"] = LLSD.FromUUID(reg.RegionInfo.originRegionID);
674 SrcData["visible_to_parent"] = LLSD.FromBoolean(userState.visible_to_parent); 644 SrcData["visible_to_parent"] = LLSD.FromBoolean(userState.visible_to_parent);
675 Parameter.Add((LLSD)SrcData); 645 Parameter.Add((LLSD)SrcData);
676 646
677 AgentParms["first_name"] = LLSD.FromString(userState.first_name); 647 AgentParms["first_name"] = LLSD.FromString(userState.first_name);
678 AgentParms["last_name"] = LLSD.FromString(userState.last_name); 648 AgentParms["last_name"] = LLSD.FromString(userState.last_name);
679 AgentParms["agent_id"] = LLSD.FromUUID(userState.agent_id); 649 AgentParms["agent_id"] = LLSD.FromUUID(userState.agent_id);
@@ -689,13 +659,12 @@ namespace OpenSim.Region.Environment.Modules.InterGrid
689 AgentParms["age_verified"] = LLSD.FromBoolean(userState.age_verified); 659 AgentParms["age_verified"] = LLSD.FromBoolean(userState.age_verified);
690 AgentParms["limited_to_estate"] = LLSD.FromInteger(userState.limited_to_estate); 660 AgentParms["limited_to_estate"] = LLSD.FromInteger(userState.limited_to_estate);
691 AgentParms["inventory_host"] = LLSD.FromString(userState.inventory_host); 661 AgentParms["inventory_host"] = LLSD.FromString(userState.inventory_host);
692 662
693 // version 1 663 // version 1
694 RAMap = AgentParms; 664 RAMap = AgentParms;
695 665
696 // Planned for version 2 666 // Planned for version 2
697 // RAMap["agent_params"] = AgentParms; 667 // RAMap["agent_params"] = AgentParms;
698
699 668
700 RAMap["region_params"] = RegionParms; 669 RAMap["region_params"] = RegionParms;
701 RAMap["parameter"] = Parameter; 670 RAMap["parameter"] = Parameter;
@@ -770,15 +739,13 @@ namespace OpenSim.Region.Environment.Modules.InterGrid
770 return responseMap; 739 return responseMap;
771 } 740 }
772 741
773
774
775 public LLSD GenerateNoHandlerMessage() 742 public LLSD GenerateNoHandlerMessage()
776 { 743 {
777 LLSDMap map = new LLSDMap(); 744 LLSDMap map = new LLSDMap();
778 map["reason"] = LLSD.FromString("LLSDRequest"); 745 map["reason"] = LLSD.FromString("LLSDRequest");
779 map["message"] = LLSD.FromString("No handler registered for LLSD Requests"); 746 map["message"] = LLSD.FromString("No handler registered for LLSD Requests");
780 map["login"] = LLSD.FromString("false"); 747 map["login"] = LLSD.FromString("false");
781 748
782 return map; 749 return map;
783 } 750 }
784 751
@@ -802,7 +769,6 @@ namespace OpenSim.Region.Environment.Modules.InterGrid
802 CapsLoginID.Remove(path); 769 CapsLoginID.Remove(path);
803 } 770 }
804 771
805
806 private Scene GetRootScene() 772 private Scene GetRootScene()
807 { 773 {
808 Scene ReturnScene = null; 774 Scene ReturnScene = null;
@@ -815,9 +781,8 @@ namespace OpenSim.Region.Environment.Modules.InterGrid
815 } 781 }
816 782
817 return ReturnScene; 783 return ReturnScene;
818
819 } 784 }
820 785
821 private ulong GetOSCompatibleRegionHandle(RegionInfo reg) 786 private ulong GetOSCompatibleRegionHandle(RegionInfo reg)
822 { 787 {
823 return Util.UIntsToLong(reg.RegionLocX, reg.RegionLocY); 788 return Util.UIntsToLong(reg.RegionLocX, reg.RegionLocY);
@@ -849,7 +814,7 @@ namespace OpenSim.Region.Environment.Modules.InterGrid
849 returnState.src_version = 1; 814 returnState.src_version = 1;
850 returnState.src_parent_estate_id = 1; 815 returnState.src_parent_estate_id = 1;
851 returnState.visible_to_parent = true; 816 returnState.visible_to_parent = true;
852 817
853 return returnState; 818 return returnState;
854 } 819 }
855 820
@@ -871,9 +836,10 @@ namespace OpenSim.Region.Environment.Modules.InterGrid
871 public void DeleteOGPState(LLUUID agentId) 836 public void DeleteOGPState(LLUUID agentId)
872 { 837 {
873 lock (m_OGPState) 838 lock (m_OGPState)
839 {
874 if (m_OGPState.ContainsKey(agentId)) 840 if (m_OGPState.ContainsKey(agentId))
875 m_OGPState.Remove(agentId); 841 m_OGPState.Remove(agentId);
876 842 }
877 } 843 }
878 844
879 private void UpdateOGPState(LLUUID agentId, OGPState state) 845 private void UpdateOGPState(LLUUID agentId, OGPState state)
@@ -884,12 +850,13 @@ namespace OpenSim.Region.Environment.Modules.InterGrid
884 { 850 {
885 m_OGPState[agentId] = state; 851 m_OGPState[agentId] = state;
886 } 852 }
887 else 853 else
888 { 854 {
889 m_OGPState.Add(agentId,state); 855 m_OGPState.Add(agentId,state);
890 } 856 }
891 } 857 }
892 } 858 }
859
893 public void ShutdownConnection(LLUUID avatarId, OpenGridProtocolModule mod) 860 public void ShutdownConnection(LLUUID avatarId, OpenGridProtocolModule mod)
894 { 861 {
895 Scene homeScene = GetRootScene(); 862 Scene homeScene = GetRootScene();
@@ -903,22 +870,17 @@ namespace OpenSim.Region.Environment.Modules.InterGrid
903 ta.Start(); 870 ta.Start();
904 } 871 }
905 } 872 }
873
906 // Temporary hack to allow teleporting to and from Vaak 874 // Temporary hack to allow teleporting to and from Vaak
907 private static bool customXertificateValidation(object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors error) 875 private static bool customXertificateValidation(object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors error)
908 { 876 {
909
910 //if (cert.Subject == "E=root@lindenlab.com, CN=*.vaak.lindenlab.com, O=\"Linden Lab, Inc.\", L=San Francisco, S=California, C=US") 877 //if (cert.Subject == "E=root@lindenlab.com, CN=*.vaak.lindenlab.com, O=\"Linden Lab, Inc.\", L=San Francisco, S=California, C=US")
911 //{ 878 //{
912
913 return true; 879 return true;
914
915 //} 880 //}
916 881
917 //return false; 882 //return false;
918
919 } 883 }
920
921
922 } 884 }
923 885
924 public class KillAUser 886 public class KillAUser
@@ -944,7 +906,7 @@ namespace OpenSim.Region.Environment.Modules.InterGrid
944 avToBeKilled.ControllingClient.SendLogoutPacketWhenClosing = false; 906 avToBeKilled.ControllingClient.SendLogoutPacketWhenClosing = false;
945 907
946 Thread.Sleep(30000); 908 Thread.Sleep(30000);
947 909
948 // test for child agent because they might have come back 910 // test for child agent because they might have come back
949 if (avToBeKilled.IsChildAgent) 911 if (avToBeKilled.IsChildAgent)
950 { 912 {
@@ -953,12 +915,10 @@ namespace OpenSim.Region.Environment.Modules.InterGrid
953 } 915 }
954 } 916 }
955 } 917 }
956
957 } 918 }
919
958 public class MonoCert : ICertificatePolicy 920 public class MonoCert : ICertificatePolicy
959 { 921 {
960
961
962 #region ICertificatePolicy Members 922 #region ICertificatePolicy Members
963 923
964 public bool CheckValidationResult(ServicePoint srvPoint, X509Certificate certificate, WebRequest request, int certificateProblem) 924 public bool CheckValidationResult(ServicePoint srvPoint, X509Certificate certificate, WebRequest request, int certificateProblem)
diff --git a/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveConstants.cs b/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveConstants.cs
index 5e22e57..0b68c5f 100644
--- a/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveConstants.cs
+++ b/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveConstants.cs
@@ -59,7 +59,7 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver
59 /// Path for terrains. Technically these may be assets, but I think it's quite nice to split them out. 59 /// Path for terrains. Technically these may be assets, but I think it's quite nice to split them out.
60 /// </summary> 60 /// </summary>
61 public static readonly string TERRAINS_PATH = "terrains/"; 61 public static readonly string TERRAINS_PATH = "terrains/";
62 62
63 /// <summary> 63 /// <summary>
64 /// The character the separates the uuid from extension information in an archived asset filename 64 /// The character the separates the uuid from extension information in an archived asset filename
65 /// </summary> 65 /// </summary>
diff --git a/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveReadRequest.cs b/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveReadRequest.cs
index 201986e..89f5fd7 100644
--- a/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveReadRequest.cs
+++ b/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveReadRequest.cs
@@ -212,16 +212,16 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver
212 // Right now we're nastily obtaining the lluuid from the filename 212 // Right now we're nastily obtaining the lluuid from the filename
213 string filename = assetPath.Remove(0, ArchiveConstants.ASSETS_PATH.Length); 213 string filename = assetPath.Remove(0, ArchiveConstants.ASSETS_PATH.Length);
214 int i = filename.LastIndexOf(ArchiveConstants.ASSET_EXTENSION_SEPARATOR); 214 int i = filename.LastIndexOf(ArchiveConstants.ASSET_EXTENSION_SEPARATOR);
215 215
216 if (i == -1) 216 if (i == -1)
217 { 217 {
218 m_log.ErrorFormat( 218 m_log.ErrorFormat(
219 "[ARCHIVER]: Could not find extension information in asset path {0} since it's missing the separator {1}. Skipping", 219 "[ARCHIVER]: Could not find extension information in asset path {0} since it's missing the separator {1}. Skipping",
220 assetPath, ArchiveConstants.ASSET_EXTENSION_SEPARATOR); 220 assetPath, ArchiveConstants.ASSET_EXTENSION_SEPARATOR);
221 221
222 return false; 222 return false;
223 } 223 }
224 224
225 string extension = filename.Substring(i); 225 string extension = filename.Substring(i);
226 string uuid = filename.Remove(filename.Length - extension.Length); 226 string uuid = filename.Remove(filename.Length - extension.Length);
227 227
diff --git a/OpenSim/Region/Environment/Modules/World/NPC/NPCAvatar.cs b/OpenSim/Region/Environment/Modules/World/NPC/NPCAvatar.cs
index 2d27b11..c1f5566 100644
--- a/OpenSim/Region/Environment/Modules/World/NPC/NPCAvatar.cs
+++ b/OpenSim/Region/Environment/Modules/World/NPC/NPCAvatar.cs
@@ -315,13 +315,13 @@ namespace OpenSim.Region.Environment.Modules.World.NPC
315 public event RegionHandleRequest OnRegionHandleRequest; 315 public event RegionHandleRequest OnRegionHandleRequest;
316 public event ParcelInfoRequest OnParcelInfoRequest; 316 public event ParcelInfoRequest OnParcelInfoRequest;
317 317
318 public event ActivateGesture OnActivateGesture; 318 public event ActivateGesture OnActivateGesture;
319 public event DeactivateGesture OnDeactivateGesture; 319 public event DeactivateGesture OnDeactivateGesture;
320 320
321#pragma warning restore 67 321#pragma warning restore 67
322 322
323 #endregion 323 #endregion
324 324
325 public void ActivateGesture(LLUUID assetId, LLUUID gestureId) 325 public void ActivateGesture(LLUUID assetId, LLUUID gestureId)
326 { 326 {
327 } 327 }
diff --git a/OpenSim/Region/Environment/Modules/World/WorldMap/MapImageModule.cs b/OpenSim/Region/Environment/Modules/World/WorldMap/MapImageModule.cs
index 2ae4174..bfb5016 100644
--- a/OpenSim/Region/Environment/Modules/World/WorldMap/MapImageModule.cs
+++ b/OpenSim/Region/Environment/Modules/World/WorldMap/MapImageModule.cs
@@ -103,7 +103,7 @@ namespace OpenSim.Region.Environment.Modules.World.WorldMap
103 103
104 Bitmap mapbmp = new Bitmap(256, 256); 104 Bitmap mapbmp = new Bitmap(256, 256);
105 //long t = System.Environment.TickCount; 105 //long t = System.Environment.TickCount;
106 //for(int i = 0; i < 10; ++i) { 106 //for (int i = 0; i < 10; ++i) {
107 terrainRenderer.TerrainToBitmap(mapbmp); 107 terrainRenderer.TerrainToBitmap(mapbmp);
108 //} 108 //}
109 //t = System.Environment.TickCount - t; 109 //t = System.Environment.TickCount - t;
diff --git a/OpenSim/Region/Environment/Modules/World/WorldMap/ShadedMapTileRenderer.cs b/OpenSim/Region/Environment/Modules/World/WorldMap/ShadedMapTileRenderer.cs
index 253a7f5..1ee86ba 100644
--- a/OpenSim/Region/Environment/Modules/World/WorldMap/ShadedMapTileRenderer.cs
+++ b/OpenSim/Region/Environment/Modules/World/WorldMap/ShadedMapTileRenderer.cs
@@ -97,8 +97,6 @@ namespace OpenSim.Region.Environment.Modules.World.WorldMap
97 // No, that doesn't scale it: 97 // No, that doesn't scale it:
98 // heightvalue = low + mid * (heightvalue - low) / mid; => low + (heightvalue - low) * mid / mid = low + (heightvalue - low) * 1 = low + heightvalue - low = heightvalue 98 // heightvalue = low + mid * (heightvalue - low) / mid; => low + (heightvalue - low) * mid / mid = low + (heightvalue - low) * 1 = low + heightvalue - low = heightvalue
99 99
100
101
102 if (Single.IsInfinity(heightvalue) || Single.IsNaN(heightvalue)) 100 if (Single.IsInfinity(heightvalue) || Single.IsNaN(heightvalue))
103 heightvalue = 0; 101 heightvalue = 0;
104 else if (heightvalue > 255f) 102 else if (heightvalue > 255f)
@@ -136,7 +134,7 @@ namespace OpenSim.Region.Environment.Modules.World.WorldMap
136 int hfdiffi = 0; 134 int hfdiffi = 0;
137 int hfdiffihighlight = 0; 135 int hfdiffihighlight = 0;
138 float highlightfactor = 0.18f; 136 float highlightfactor = 0.18f;
139 137
140 try 138 try
141 { 139 {
142 // hfdiffi = Math.Abs((int)((hfdiff * 4) + (hfdiff * 0.5))) + 1; 140 // hfdiffi = Math.Abs((int)((hfdiff * 4) + (hfdiff * 0.5))) + 1;
@@ -146,7 +144,7 @@ namespace OpenSim.Region.Environment.Modules.World.WorldMap
146 // hfdiffi = hfdiffi + Math.Abs((int)(((hfdiff % 1) * 0.5f) * 10f) - 1); 144 // hfdiffi = hfdiffi + Math.Abs((int)(((hfdiff % 1) * 0.5f) * 10f) - 1);
147 hfdiffi = hfdiffi + Math.Abs((int)((hfdiff % 1f) * 5f) - 1); 145 hfdiffi = hfdiffi + Math.Abs((int)((hfdiff % 1f) * 5f) - 1);
148 } 146 }
149 147
150 hfdiffihighlight = Math.Abs((int)((hfdiff * highlightfactor) * 4.5f)) + 1; 148 hfdiffihighlight = Math.Abs((int)((hfdiff * highlightfactor) * 4.5f)) + 1;
151 if (hfdiff % 1f != 0) 149 if (hfdiff % 1f != 0)
152 { 150 {
@@ -195,10 +193,9 @@ namespace OpenSim.Region.Environment.Modules.World.WorldMap
195 color = Color.FromArgb((r - hfdiffi > 0) ? r - hfdiffi : 0, 193 color = Color.FromArgb((r - hfdiffi > 0) ? r - hfdiffi : 0,
196 (g - hfdiffi > 0) ? g - hfdiffi : 0, 194 (g - hfdiffi > 0) ? g - hfdiffi : 0,
197 (b - hfdiffi > 0) ? b - hfdiffi : 0); 195 (b - hfdiffi > 0) ? b - hfdiffi : 0);
198 196
199 mapbmp.SetPixel(x-1, yr+1, color); 197 mapbmp.SetPixel(x-1, yr+1, color);
200 } 198 }
201
202 } 199 }
203 } 200 }
204 } 201 }
@@ -213,7 +210,6 @@ namespace OpenSim.Region.Environment.Modules.World.WorldMap
213 color = Color.Black; 210 color = Color.Black;
214 mapbmp.SetPixel(x, yr, color); 211 mapbmp.SetPixel(x, yr, color);
215 } 212 }
216
217 } 213 }
218 else 214 else
219 { 215 {
diff --git a/OpenSim/Region/Environment/Modules/World/WorldMap/TexturedMapTileRenderer.cs b/OpenSim/Region/Environment/Modules/World/WorldMap/TexturedMapTileRenderer.cs
index 957a1df..615befc 100644
--- a/OpenSim/Region/Environment/Modules/World/WorldMap/TexturedMapTileRenderer.cs
+++ b/OpenSim/Region/Environment/Modules/World/WorldMap/TexturedMapTileRenderer.cs
@@ -82,10 +82,10 @@ namespace OpenSim.Region.Environment.Modules.World.WorldMap
82 // (for info about algorithm, see http://en.wikipedia.org/wiki/HSL_and_HSV) 82 // (for info about algorithm, see http://en.wikipedia.org/wiki/HSL_and_HSV)
83 public Color toColor() 83 public Color toColor()
84 { 84 {
85 if(s < 0f) Console.WriteLine("S < 0: " + s); 85 if (s < 0f) Console.WriteLine("S < 0: " + s);
86 else if(s > 1f) Console.WriteLine("S > 1: " + s); 86 else if (s > 1f) Console.WriteLine("S > 1: " + s);
87 if(v < 0f) Console.WriteLine("V < 0: " + v); 87 if (v < 0f) Console.WriteLine("V < 0: " + v);
88 else if(v > 1f) Console.WriteLine("V > 1: " + v); 88 else if (v > 1f) Console.WriteLine("V > 1: " + v);
89 89
90 float f = h / 60f; 90 float f = h / 60f;
91 int sector = (int)f % 6; 91 int sector = (int)f % 6;
@@ -95,7 +95,7 @@ namespace OpenSim.Region.Environment.Modules.World.WorldMap
95 int ti = (int)(v * (1f - (1f - f) * s) * 255f); 95 int ti = (int)(v * (1f - (1f - f) * s) * 255f);
96 int vi = (int)(v * 255f); 96 int vi = (int)(v * 255f);
97 97
98 switch(sector) 98 switch (sector)
99 { 99 {
100 case 0: 100 case 0:
101 return Color.FromArgb(vi, ti, pi); 101 return Color.FromArgb(vi, ti, pi);
@@ -168,7 +168,7 @@ namespace OpenSim.Region.Environment.Modules.World.WorldMap
168 { 168 {
169 AssetBase asset = m_scene.AssetCache.GetAsset(id, true); 169 AssetBase asset = m_scene.AssetCache.GetAsset(id, true);
170 m_log.DebugFormat("Fetched texture {0}, found: {1}", id, asset != null); 170 m_log.DebugFormat("Fetched texture {0}, found: {1}", id, asset != null);
171 if(asset == null) return null; 171 if (asset == null) return null;
172 return new Bitmap(OpenJPEG.DecodeToImage(asset.Data)); 172 return new Bitmap(OpenJPEG.DecodeToImage(asset.Data));
173 } 173 }
174 174
@@ -179,9 +179,9 @@ namespace OpenSim.Region.Environment.Modules.World.WorldMap
179 // color-channel, so 2^24 is the maximum value we can get, adding everything. 179 // color-channel, so 2^24 is the maximum value we can get, adding everything.
180 // int is be big enough for that. 180 // int is be big enough for that.
181 int r = 0, g = 0, b = 0; 181 int r = 0, g = 0, b = 0;
182 for(int y = 0; y < bmp.Height; ++y) 182 for (int y = 0; y < bmp.Height; ++y)
183 { 183 {
184 for(int x = 0; x < bmp.Width; ++x) 184 for (int x = 0; x < bmp.Width; ++x)
185 { 185 {
186 Color c = bmp.GetPixel(x, y); 186 Color c = bmp.GetPixel(x, y);
187 r += (int)c.R & 0xff; 187 r += (int)c.R & 0xff;
@@ -218,14 +218,14 @@ namespace OpenSim.Region.Environment.Modules.World.WorldMap
218 218
219 // interpolate two colors in HSV space and return the resulting color 219 // interpolate two colors in HSV space and return the resulting color
220 private HSV interpolateHSV(ref HSV c1, ref HSV c2, float ratio) { 220 private HSV interpolateHSV(ref HSV c1, ref HSV c2, float ratio) {
221 if(ratio <= 0f) return c1; 221 if (ratio <= 0f) return c1;
222 if(ratio >= 1f) return c2; 222 if (ratio >= 1f) return c2;
223 223
224 // make sure we are on the same side on the hue-circle for interpolation 224 // make sure we are on the same side on the hue-circle for interpolation
225 // We change the hue of the parameters here, but we don't change the color 225 // We change the hue of the parameters here, but we don't change the color
226 // represented by that value 226 // represented by that value
227 if(c1.h - c2.h > 180f) c1.h -= 360f; 227 if (c1.h - c2.h > 180f) c1.h -= 360f;
228 else if(c2.h - c1.h > 180f) c1.h += 360f; 228 else if (c2.h - c1.h > 180f) c1.h += 360f;
229 229
230 return new HSV(c1.h * (1f - ratio) + c2.h * ratio, 230 return new HSV(c1.h * (1f - ratio) + c2.h * ratio,
231 c1.s * (1f - ratio) + c2.s * ratio, 231 c1.s * (1f - ratio) + c2.s * ratio,
@@ -321,16 +321,16 @@ namespace OpenSim.Region.Environment.Modules.World.WorldMap
321 } 321 }
322 322
323 HSV hsv; 323 HSV hsv;
324 if(hmod <= low) hsv = hsv1; // too low 324 if (hmod <= low) hsv = hsv1; // too low
325 else if(hmod >= high) hsv = hsv4; // too high 325 else if (hmod >= high) hsv = hsv4; // too high
326 else 326 else
327 { 327 {
328 // HSV-interpolate along the colors 328 // HSV-interpolate along the colors
329 // first, rescale h to 0.0 - 1.0 329 // first, rescale h to 0.0 - 1.0
330 hmod = (hmod - low) / (high - low); 330 hmod = (hmod - low) / (high - low);
331 // now we have to split: 0.00 => color1, 0.33 => color2, 0.67 => color3, 1.00 => color4 331 // now we have to split: 0.00 => color1, 0.33 => color2, 0.67 => color3, 1.00 => color4
332 if(hmod < 1f/3f) hsv = interpolateHSV(ref hsv1, ref hsv2, hmod * 3f); 332 if (hmod < 1f/3f) hsv = interpolateHSV(ref hsv1, ref hsv2, hmod * 3f);
333 else if(hmod < 2f/3f) hsv = interpolateHSV(ref hsv2, ref hsv3, (hmod * 3f) - 1f); 333 else if (hmod < 2f/3f) hsv = interpolateHSV(ref hsv2, ref hsv3, (hmod * 3f) - 1f);
334 else hsv = interpolateHSV(ref hsv3, ref hsv4, (hmod * 3f) - 2f); 334 else hsv = interpolateHSV(ref hsv3, ref hsv4, (hmod * 3f) - 2f);
335 } 335 }
336 336
diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs
index 424c56c..0bd0028 100644
--- a/OpenSim/Region/Environment/Scenes/Scene.cs
+++ b/OpenSim/Region/Environment/Scenes/Scene.cs
@@ -276,8 +276,6 @@ namespace OpenSim.Region.Environment.Scenes
276 if (m_storageManager.EstateDataStore != null) 276 if (m_storageManager.EstateDataStore != null)
277 m_regInfo.EstateSettings = m_storageManager.EstateDataStore.LoadEstateSettings(m_regInfo.RegionID); 277 m_regInfo.EstateSettings = m_storageManager.EstateDataStore.LoadEstateSettings(m_regInfo.RegionID);
278 278
279
280
281 //Bind Storage Manager functions to some land manager functions for this scene 279 //Bind Storage Manager functions to some land manager functions for this scene
282 EventManager.OnLandObjectAdded += 280 EventManager.OnLandObjectAdded +=
283 new EventManager.LandObjectAdded(m_storageManager.DataStore.StoreLandObject); 281 new EventManager.LandObjectAdded(m_storageManager.DataStore.StoreLandObject);
@@ -322,7 +320,6 @@ namespace OpenSim.Region.Environment.Scenes
322 { 320 {
323 m_log.Warn("Failed to load StartupConfig"); 321 m_log.Warn("Failed to load StartupConfig");
324 } 322 }
325
326 } 323 }
327 324
328 #endregion 325 #endregion
@@ -351,7 +348,6 @@ namespace OpenSim.Region.Environment.Scenes
351 // we add it to the notify list regardless of distance. 348 // we add it to the notify list regardless of distance.
352 // We'll check the agent's draw distance before notifying them though. 349 // We'll check the agent's draw distance before notifying them though.
353 350
354
355 if (RegionInfo.RegionHandle != otherRegion.RegionHandle) 351 if (RegionInfo.RegionHandle != otherRegion.RegionHandle)
356 { 352 {
357 for (int i = 0; i < m_neighbours.Count; i++) 353 for (int i = 0; i < m_neighbours.Count; i++)
@@ -386,8 +382,7 @@ namespace OpenSim.Region.Environment.Scenes
386 382
387 int resultX = Math.Abs((int)otherRegion.RegionLocX - (int)RegionInfo.RegionLocX); 383 int resultX = Math.Abs((int)otherRegion.RegionLocX - (int)RegionInfo.RegionLocX);
388 int resultY = Math.Abs((int)otherRegion.RegionLocY - (int)RegionInfo.RegionLocY); 384 int resultY = Math.Abs((int)otherRegion.RegionLocY - (int)RegionInfo.RegionLocY);
389 if ((resultX <= 1) && 385 if (resultX <= 1 && resultY <= 1)
390 (resultY <= 1))
391 { 386 {
392 try 387 try
393 { 388 {
@@ -584,8 +579,6 @@ namespace OpenSim.Region.Environment.Scenes
584 } 579 }
585 } 580 }
586 } 581 }
587
588
589 } 582 }
590 m_scripts_enabled = !ScriptEngine; 583 m_scripts_enabled = !ScriptEngine;
591 m_log.Info("[TOTEDD]: Here is the method to trigger disabling of the scripting engine"); 584 m_log.Info("[TOTEDD]: Here is the method to trigger disabling of the scripting engine");
@@ -600,7 +593,9 @@ namespace OpenSim.Region.Environment.Scenes
600 public int GetInaccurateNeighborCount() 593 public int GetInaccurateNeighborCount()
601 { 594 {
602 lock (m_neighbours) 595 lock (m_neighbours)
596 {
603 return m_neighbours.Count; 597 return m_neighbours.Count;
598 }
604 } 599 }
605 600
606 // This is the method that shuts down the scene. 601 // This is the method that shuts down the scene.
@@ -1062,7 +1057,6 @@ namespace OpenSim.Region.Environment.Scenes
1062 float hfdiff = hfvalue; 1057 float hfdiff = hfvalue;
1063 int hfdiffi = 0; 1058 int hfdiffi = 0;
1064 1059
1065
1066 for (int x = 0; x < 256; x++) 1060 for (int x = 0; x < 256; x++)
1067 { 1061 {
1068 //int tc = System.Environment.TickCount; 1062 //int tc = System.Environment.TickCount;
@@ -1087,10 +1081,8 @@ namespace OpenSim.Region.Environment.Scenes
1087 //float tmpval = (float)hm[x, y]; 1081 //float tmpval = (float)hm[x, y];
1088 float heightvalue = (float)hm[x, y]; 1082 float heightvalue = (float)hm[x, y];
1089 1083
1090
1091 if (heightvalue > (float)m_regInfo.RegionSettings.WaterHeight) 1084 if (heightvalue > (float)m_regInfo.RegionSettings.WaterHeight)
1092 { 1085 {
1093
1094 // scale height value 1086 // scale height value
1095 heightvalue = low + mid * (heightvalue - low) / mid; 1087 heightvalue = low + mid * (heightvalue - low) / mid;
1096 1088
@@ -1102,6 +1094,7 @@ namespace OpenSim.Region.Environment.Scenes
1102 1094
1103 if (Single.IsInfinity(heightvalue) || Single.IsNaN(heightvalue)) 1095 if (Single.IsInfinity(heightvalue) || Single.IsNaN(heightvalue))
1104 heightvalue = 0; 1096 heightvalue = 0;
1097
1105 try 1098 try
1106 { 1099 {
1107 Color green = Color.FromArgb((int)heightvalue, 100, (int)heightvalue); 1100 Color green = Color.FromArgb((int)heightvalue, 100, (int)heightvalue);
@@ -1136,7 +1129,6 @@ namespace OpenSim.Region.Environment.Scenes
1136 // we use floats, colors use bytes, so shrink are space down to 1129 // we use floats, colors use bytes, so shrink are space down to
1137 // 0-255 1130 // 0-255
1138 1131
1139
1140 try 1132 try
1141 { 1133 {
1142 hfdiffi = Math.Abs((int)((hfdiff * 4) + (hfdiff * 0.5))) + 1; 1134 hfdiffi = Math.Abs((int)((hfdiff * 4) + (hfdiff * 0.5))) + 1;
@@ -1166,15 +1158,8 @@ namespace OpenSim.Region.Environment.Scenes
1166 mapbmp.SetPixel(x - 1, (256 - y) - 1, Shade); 1158 mapbmp.SetPixel(x - 1, (256 - y) - 1, Shade);
1167 } 1159 }
1168 } 1160 }
1169
1170
1171 } 1161 }
1172
1173 } 1162 }
1174
1175
1176
1177
1178 } 1163 }
1179 catch (System.ArgumentException) 1164 catch (System.ArgumentException)
1180 { 1165 {
@@ -1264,7 +1249,6 @@ namespace OpenSim.Region.Environment.Scenes
1264 if (part == null) 1249 if (part == null)
1265 continue; 1250 continue;
1266 1251
1267
1268 // Draw if the object is at least 1 meter wide in any direction 1252 // Draw if the object is at least 1 meter wide in any direction
1269 if (part.Scale.X > 1f || part.Scale.Y > 1f || part.Scale.Z > 1f) 1253 if (part.Scale.X > 1f || part.Scale.Y > 1f || part.Scale.Z > 1f)
1270 { 1254 {
@@ -1426,6 +1410,7 @@ namespace OpenSim.Region.Environment.Scenes
1426 } 1410 }
1427 } 1411 }
1428 } 1412 }
1413
1429 public void LazySaveGeneratedMaptile(byte[] data, bool temporary) 1414 public void LazySaveGeneratedMaptile(byte[] data, bool temporary)
1430 { 1415 {
1431 // Overwrites the local Asset cache with new maptile data 1416 // Overwrites the local Asset cache with new maptile data
@@ -1482,6 +1467,7 @@ namespace OpenSim.Region.Environment.Scenes
1482 asset.Temporary = temporary; 1467 asset.Temporary = temporary;
1483 AssetCache.AddAsset(asset); 1468 AssetCache.AddAsset(asset);
1484 } 1469 }
1470
1485 #endregion 1471 #endregion
1486 1472
1487 #region Load Land 1473 #region Load Land
@@ -1556,6 +1542,7 @@ namespace OpenSim.Region.Environment.Scenes
1556 pos = RayEnd; 1542 pos = RayEnd;
1557 return pos; 1543 return pos;
1558 } 1544 }
1545
1559 if (RayTargetID != LLUUID.Zero) 1546 if (RayTargetID != LLUUID.Zero)
1560 { 1547 {
1561 SceneObjectPart target = GetSceneObjectPart(RayTargetID); 1548 SceneObjectPart target = GetSceneObjectPart(RayTargetID);
@@ -1921,9 +1908,7 @@ namespace OpenSim.Region.Environment.Scenes
1921 if (position.X > Constants.RegionSize + 0.1f) 1908 if (position.X > Constants.RegionSize + 0.1f)
1922 { 1909 {
1923 pos.X = ((pos.X - Constants.RegionSize)); 1910 pos.X = ((pos.X - Constants.RegionSize));
1924
1925 newRegionHandle = Util.UIntsToLong((uint)((thisx + 1) * Constants.RegionSize), (uint)(thisy * Constants.RegionSize)); 1911 newRegionHandle = Util.UIntsToLong((uint)((thisx + 1) * Constants.RegionSize), (uint)(thisy * Constants.RegionSize));
1926
1927 // x + 1 1912 // x + 1
1928 } 1913 }
1929 else if (position.X < -0.1f) 1914 else if (position.X < -0.1f)
@@ -2165,9 +2150,7 @@ namespace OpenSim.Region.Environment.Scenes
2165 client.OnScriptReset += ProcessScriptReset; 2150 client.OnScriptReset += ProcessScriptReset;
2166 client.OnGetScriptRunning += GetScriptRunning; 2151 client.OnGetScriptRunning += GetScriptRunning;
2167 client.OnSetScriptRunning += SetScriptRunning; 2152 client.OnSetScriptRunning += SetScriptRunning;
2168
2169 client.OnRegionHandleRequest += RegionHandleRequest; 2153 client.OnRegionHandleRequest += RegionHandleRequest;
2170
2171 client.OnUnackedTerrain += TerrainUnAcked; 2154 client.OnUnackedTerrain += TerrainUnAcked;
2172 2155
2173 //Gesture 2156 //Gesture
@@ -2185,7 +2168,6 @@ namespace OpenSim.Region.Environment.Scenes
2185 2168
2186 if (userInfo != null) 2169 if (userInfo != null)
2187 { 2170 {
2188
2189 InventoryItemBase item = userInfo.RootFolder.FindItem(gestureId); 2171 InventoryItemBase item = userInfo.RootFolder.FindItem(gestureId);
2190 if (item != null) 2172 if (item != null)
2191 { 2173 {
@@ -2206,7 +2188,6 @@ namespace OpenSim.Region.Environment.Scenes
2206 2188
2207 if (userInfo != null) 2189 if (userInfo != null)
2208 { 2190 {
2209
2210 InventoryItemBase item = userInfo.RootFolder.FindItem(gestureId); 2191 InventoryItemBase item = userInfo.RootFolder.FindItem(gestureId);
2211 if (item != null) 2192 if (item != null)
2212 { 2193 {
@@ -2607,7 +2588,6 @@ namespace OpenSim.Region.Environment.Scenes
2607 "[CONNECTION DEBUGGING]: Skipping this region for welcoming avatar {0} [{1}] at {2}", 2588 "[CONNECTION DEBUGGING]: Skipping this region for welcoming avatar {0} [{1}] at {2}",
2608 agent.AgentID, regionHandle, RegionInfo.RegionName); 2589 agent.AgentID, regionHandle, RegionInfo.RegionName);
2609 } 2590 }
2610
2611 } 2591 }
2612 2592
2613 public void UpdateCircuitData(AgentCircuitData data) 2593 public void UpdateCircuitData(AgentCircuitData data)
@@ -2645,9 +2625,8 @@ namespace OpenSim.Region.Environment.Scenes
2645 m_log.InfoFormat("[USERLOGOFF]: Got a logoff request for {0} but the user isn't here. The user might already have been logged out", AvatarID.ToString()); 2625 m_log.InfoFormat("[USERLOGOFF]: Got a logoff request for {0} but the user isn't here. The user might already have been logged out", AvatarID.ToString());
2646 } 2626 }
2647 } 2627 }
2648
2649
2650 } 2628 }
2629
2651 /// <summary> 2630 /// <summary>
2652 /// Add a caps handler for the given agent. If the CAPS handler already exists for this agent, 2631 /// Add a caps handler for the given agent. If the CAPS handler already exists for this agent,
2653 /// then it is replaced by a new CAPS handler. 2632 /// then it is replaced by a new CAPS handler.
@@ -2905,14 +2884,14 @@ namespace OpenSim.Region.Environment.Scenes
2905 public void RequestTeleportLandmark(IClientAPI remoteClient, LLUUID regionID, LLVector3 position) 2884 public void RequestTeleportLandmark(IClientAPI remoteClient, LLUUID regionID, LLVector3 position)
2906 { 2885 {
2907 RegionInfo info = CommsManager.GridService.RequestNeighbourInfo(regionID); 2886 RegionInfo info = CommsManager.GridService.RequestNeighbourInfo(regionID);
2908 2887
2909 if (info == null) 2888 if (info == null)
2910 { 2889 {
2911 // can't find the region: Tell viewer and abort 2890 // can't find the region: Tell viewer and abort
2912 remoteClient.SendTeleportFailed("The teleport destination could not be found."); 2891 remoteClient.SendTeleportFailed("The teleport destination could not be found.");
2913 return; 2892 return;
2914 } 2893 }
2915 2894
2916 lock (m_scenePresences) 2895 lock (m_scenePresences)
2917 { 2896 {
2918 if (m_scenePresences.ContainsKey(remoteClient.AgentId)) 2897 if (m_scenePresences.ContainsKey(remoteClient.AgentId))
@@ -3016,7 +2995,6 @@ namespace OpenSim.Region.Environment.Scenes
3016 m_statsReporter.SetObjectCapacity(objects); 2995 m_statsReporter.SetObjectCapacity(objects);
3017 } 2996 }
3018 objectCapacity = objects; 2997 objectCapacity = objects;
3019
3020 } 2998 }
3021 2999
3022 public List<FriendListItem> GetFriendList(LLUUID avatarID) 3000 public List<FriendListItem> GetFriendList(LLUUID avatarID)
@@ -3089,7 +3067,6 @@ namespace OpenSim.Region.Environment.Scenes
3089 return LLUUID.Zero; 3067 return LLUUID.Zero;
3090 } 3068 }
3091 3069
3092
3093 /// <summary> 3070 /// <summary>
3094 /// This method is a way for the Friends Module to create an instant 3071 /// This method is a way for the Friends Module to create an instant
3095 /// message to the avatar and for Instant Messages that travel across 3072 /// message to the avatar and for Instant Messages that travel across
@@ -3105,7 +3082,6 @@ namespace OpenSim.Region.Environment.Scenes
3105 m_eventManager.TriggerGridInstantMessage(message, options); 3082 m_eventManager.TriggerGridInstantMessage(message, options);
3106 } 3083 }
3107 3084
3108
3109 public virtual void StoreAddFriendship(LLUUID ownerID, LLUUID friendID, uint perms) 3085 public virtual void StoreAddFriendship(LLUUID ownerID, LLUUID friendID, uint perms)
3110 { 3086 {
3111 // TODO: m_sceneGridService.DoStuff; 3087 // TODO: m_sceneGridService.DoStuff;
@@ -3123,6 +3099,7 @@ namespace OpenSim.Region.Environment.Scenes
3123 // TODO: m_sceneGridService.DoStuff; 3099 // TODO: m_sceneGridService.DoStuff;
3124 m_sceneGridService.RemoveUserFriend(ownerID, ExfriendID); 3100 m_sceneGridService.RemoveUserFriend(ownerID, ExfriendID);
3125 } 3101 }
3102
3126 public virtual List<FriendListItem> StoreGetFriendsForUser(LLUUID ownerID) 3103 public virtual List<FriendListItem> StoreGetFriendsForUser(LLUUID ownerID)
3127 { 3104 {
3128 // TODO: m_sceneGridService.DoStuff; 3105 // TODO: m_sceneGridService.DoStuff;
@@ -3135,11 +3112,13 @@ namespace OpenSim.Region.Environment.Scenes
3135 m_statsReporter.AddOutPackets(outPackets); 3112 m_statsReporter.AddOutPackets(outPackets);
3136 m_statsReporter.AddunAckedBytes(unAckedBytes); 3113 m_statsReporter.AddunAckedBytes(unAckedBytes);
3137 } 3114 }
3115
3138 public void AddAgentTime(int ms) 3116 public void AddAgentTime(int ms)
3139 { 3117 {
3140 m_statsReporter.addFrameMS(ms); 3118 m_statsReporter.addFrameMS(ms);
3141 m_statsReporter.addAgentMS(ms); 3119 m_statsReporter.addAgentMS(ms);
3142 } 3120 }
3121
3143 public void AddAgentUpdates(int count) 3122 public void AddAgentUpdates(int count)
3144 { 3123 {
3145 m_statsReporter.AddAgentUpdates(count); 3124 m_statsReporter.AddAgentUpdates(count);
@@ -3239,7 +3218,6 @@ namespace OpenSim.Region.Environment.Scenes
3239 /// <param name="Message">The Message being sent to the user</param> 3218 /// <param name="Message">The Message being sent to the user</param>
3240 public void SendRegionMessageFromEstateTools(LLUUID FromAvatarID, LLUUID fromSessionID, String FromAvatarName, String Message) 3219 public void SendRegionMessageFromEstateTools(LLUUID FromAvatarID, LLUUID fromSessionID, String FromAvatarName, String Message)
3241 { 3220 {
3242
3243 List<ScenePresence> presenceList = GetScenePresences(); 3221 List<ScenePresence> presenceList = GetScenePresences();
3244 3222
3245 foreach (ScenePresence presence in presenceList) 3223 foreach (ScenePresence presence in presenceList)
@@ -3359,7 +3337,7 @@ namespace OpenSim.Region.Environment.Scenes
3359 3337
3360 foreach (ScenePresence presence in presenceList) 3338 foreach (ScenePresence presence in presenceList)
3361 { 3339 {
3362 if ((presence.Firstname == firstName) && (presence.Lastname == lastName)) 3340 if (presence.Firstname == firstName && presence.Lastname == lastName)
3363 { 3341 {
3364 presence.ControllingClient.SendAgentAlertMessage(message, modal); 3342 presence.ControllingClient.SendAgentAlertMessage(message, modal);
3365 break; 3343 break;
@@ -3876,7 +3854,6 @@ namespace OpenSim.Region.Environment.Scenes
3876 return m_httpListener.AddLLSDHandler(path, handler); 3854 return m_httpListener.AddLLSDHandler(path, handler);
3877 } 3855 }
3878 3856
3879
3880 public void RemoveStreamHandler(string httpMethod, string path) 3857 public void RemoveStreamHandler(string httpMethod, string path)
3881 { 3858 {
3882 m_httpListener.RemoveStreamHandler(httpMethod, path); 3859 m_httpListener.RemoveStreamHandler(httpMethod, path);
@@ -3945,7 +3922,6 @@ namespace OpenSim.Region.Environment.Scenes
3945 client.SendRegionHandle(regionID, info.RegionHandle); 3922 client.SendRegionHandle(regionID, info.RegionHandle);
3946 } 3923 }
3947 3924
3948
3949 public void TerrainUnAcked(IClientAPI client, int patchX, int patchY) 3925 public void TerrainUnAcked(IClientAPI client, int patchX, int patchY)
3950 { 3926 {
3951 //Console.WriteLine("Terrain packet unacked, resending patch: " + patchX + " , " + patchY); 3927 //Console.WriteLine("Terrain packet unacked, resending patch: " + patchX + " , " + patchY);
@@ -3973,10 +3949,10 @@ namespace OpenSim.Region.Environment.Scenes
3973 public void ObjectSaleInfo(IClientAPI client, LLUUID agentID, LLUUID sessionID, uint localID, byte saleType, int salePrice) 3949 public void ObjectSaleInfo(IClientAPI client, LLUUID agentID, LLUUID sessionID, uint localID, byte saleType, int salePrice)
3974 { 3950 {
3975 SceneObjectPart part = GetSceneObjectPart(localID); 3951 SceneObjectPart part = GetSceneObjectPart(localID);
3976 if(part == null || part.ParentGroup == null) 3952 if (part == null || part.ParentGroup == null)
3977 return; 3953 return;
3978 3954
3979 if(part.ParentGroup.RootPart == null) 3955 if (part.ParentGroup.RootPart == null)
3980 return; 3956 return;
3981 3957
3982 part = part.ParentGroup.RootPart; 3958 part = part.ParentGroup.RootPart;
@@ -3994,10 +3970,10 @@ namespace OpenSim.Region.Environment.Scenes
3994 { 3970 {
3995 SceneObjectPart part = GetSceneObjectPart(localID); 3971 SceneObjectPart part = GetSceneObjectPart(localID);
3996 3972
3997 if(part == null) 3973 if (part == null)
3998 return; 3974 return;
3999 3975
4000 if(part.ParentGroup == null) 3976 if (part.ParentGroup == null)
4001 return; 3977 return;
4002 3978
4003 SceneObjectGroup group = part.ParentGroup; 3979 SceneObjectGroup group = part.ParentGroup;
diff --git a/OpenSim/Region/Environment/Scenes/SceneCommunicationService.cs b/OpenSim/Region/Environment/Scenes/SceneCommunicationService.cs
index 24f814e..f8c5814 100644
--- a/OpenSim/Region/Environment/Scenes/SceneCommunicationService.cs
+++ b/OpenSim/Region/Environment/Scenes/SceneCommunicationService.cs
@@ -636,7 +636,7 @@ namespace OpenSim.Region.Environment.Scenes
636 // both regions 636 // both regions
637 if (avatar.ParentID != (uint)0) 637 if (avatar.ParentID != (uint)0)
638 avatar.StandUp(); 638 avatar.StandUp();
639 if(!avatar.ValidateAttachments()) 639 if (!avatar.ValidateAttachments())
640 { 640 {
641 avatar.ControllingClient.SendTeleportFailed("Inconsistent attachment state"); 641 avatar.ControllingClient.SendTeleportFailed("Inconsistent attachment state");
642 return; 642 return;
diff --git a/OpenSim/Region/Environment/Scenes/ScenePresence.cs b/OpenSim/Region/Environment/Scenes/ScenePresence.cs
index cf24c73..4b785e9 100644
--- a/OpenSim/Region/Environment/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Environment/Scenes/ScenePresence.cs
@@ -2350,10 +2350,10 @@ namespace OpenSim.Region.Environment.Scenes
2350 // Validate 2350 // Validate
2351 foreach (SceneObjectGroup gobj in m_attachments) 2351 foreach (SceneObjectGroup gobj in m_attachments)
2352 { 2352 {
2353 if(gobj == null) 2353 if (gobj == null)
2354 return false; 2354 return false;
2355 2355
2356 if(gobj.RootPart == null) 2356 if (gobj.RootPart == null)
2357 { 2357 {
2358 return false; 2358 return false;
2359 } 2359 }
@@ -2370,7 +2370,7 @@ namespace OpenSim.Region.Environment.Scenes
2370 // Validate 2370 // Validate
2371 foreach (SceneObjectGroup gobj in m_attachments) 2371 foreach (SceneObjectGroup gobj in m_attachments)
2372 { 2372 {
2373 if(gobj == null || gobj.RootPart == null) 2373 if (gobj == null || gobj.RootPart == null)
2374 return false; 2374 return false;
2375 } 2375 }
2376 2376
diff --git a/OpenSim/Region/Physics/Meshing/Mesh.cs b/OpenSim/Region/Physics/Meshing/Mesh.cs
index 394dcf3..4630d98 100644
--- a/OpenSim/Region/Physics/Meshing/Mesh.cs
+++ b/OpenSim/Region/Physics/Meshing/Mesh.cs
@@ -231,7 +231,7 @@ namespace OpenSim.Region.Physics.Meshing
231 { 231 {
232 int[] result = getIndexListAsInt(); 232 int[] result = getIndexListAsInt();
233 pinnedIndex = GCHandle.Alloc(result, GCHandleType.Pinned); 233 pinnedIndex = GCHandle.Alloc(result, GCHandleType.Pinned);
234 234
235 return result; 235 return result;
236 } 236 }
237 237
diff --git a/OpenSim/Region/Physics/Meshing/Meshmerizer.cs b/OpenSim/Region/Physics/Meshing/Meshmerizer.cs
index a66a1b1..7cf8b76 100644
--- a/OpenSim/Region/Physics/Meshing/Meshmerizer.cs
+++ b/OpenSim/Region/Physics/Meshing/Meshmerizer.cs
@@ -1890,9 +1890,9 @@ namespace OpenSim.Region.Physics.Meshing
1890 else if ((primShape.ProfileCurve & 0x07) == (byte)ProfileShape.HalfCircle) 1890 else if ((primShape.ProfileCurve & 0x07) == (byte)ProfileShape.HalfCircle)
1891 { // half circle, prim is a sphere 1891 { // half circle, prim is a sphere
1892 sides = 24; 1892 sides = 24;
1893 1893
1894 profileBegin = 0.5f * profileBegin + 0.5f; 1894 profileBegin = 0.5f * profileBegin + 0.5f;
1895 profileEnd = 0.5f * profileEnd + 0.5f; 1895 profileEnd = 0.5f * profileEnd + 0.5f;
1896 1896
1897 //profileHollow = 0.0f; // debugging only 1897 //profileHollow = 0.0f; // debugging only
1898 } 1898 }
@@ -1904,7 +1904,6 @@ namespace OpenSim.Region.Physics.Meshing
1904 hollowSides = 4; 1904 hollowSides = 4;
1905 else if (primShape.HollowShape == HollowShape.Triangle) 1905 else if (primShape.HollowShape == HollowShape.Triangle)
1906 hollowSides = 3; 1906 hollowSides = 3;
1907
1908 1907
1909 PrimMesh primMesh = new PrimMesh(sides, profileBegin, profileEnd, profileHollow, hollowSides); 1908 PrimMesh primMesh = new PrimMesh(sides, profileBegin, profileEnd, profileHollow, hollowSides);
1910 //PrimMesh primMesh = new PrimMesh(sides, profileBegin, profileEnd, 0.0f, 4); 1909 //PrimMesh primMesh = new PrimMesh(sides, profileBegin, profileEnd, 0.0f, 4);
diff --git a/OpenSim/Region/Physics/Meshing/PrimMesher.cs b/OpenSim/Region/Physics/Meshing/PrimMesher.cs
index 53cc443..58bb82e 100644
--- a/OpenSim/Region/Physics/Meshing/PrimMesher.cs
+++ b/OpenSim/Region/Physics/Meshing/PrimMesher.cs
@@ -99,8 +99,8 @@ namespace OpenSim.Region.Physics.Meshing
99 internal List<Angle> angles; 99 internal List<Angle> angles;
100 100
101 // this class should have a table of most commonly computed values 101 // this class should have a table of most commonly computed values
102 // instead of all the trig function calls 102 // instead of all the trig function calls
103 // most common would be for sides = 3, 4, or 24 103 // most common would be for sides = 3, 4, or 24
104 internal void makeAngles( int sides, float startAngle, float stopAngle ) 104 internal void makeAngles( int sides, float startAngle, float stopAngle )
105 { 105 {
106 angles = new List<Angle>(); 106 angles = new List<Angle>();
@@ -134,7 +134,7 @@ namespace OpenSim.Region.Physics.Meshing
134 newAngle.Y = (float) System.Math.Sin(angle); 134 newAngle.Y = (float) System.Math.Sin(angle);
135 angles.Add(newAngle); 135 angles.Add(newAngle);
136 step += 1; 136 step += 1;
137 angle = stepSize * step; 137 angle = stepSize * step;
138 } 138 }
139 139
140 if (startAngle > angles[0].angle) 140 if (startAngle > angles[0].angle)
@@ -187,15 +187,15 @@ namespace OpenSim.Region.Physics.Meshing
187 AngleList hollowAngles = new AngleList(); 187 AngleList hollowAngles = new AngleList();
188 188
189 float xScale = 0.5f; 189 float xScale = 0.5f;
190 float yScale = 0.5f; 190 float yScale = 0.5f;
191 if (sides == 4) // corners of a square are sqrt(2) from center 191 if (sides == 4) // corners of a square are sqrt(2) from center
192 { 192 {
193 xScale = 0.707f; 193 xScale = 0.707f;
194 yScale = 0.707f; 194 yScale = 0.707f;
195 } 195 }
196 196
197 float startAngle = profileStart * twoPi; 197 float startAngle = profileStart * twoPi;
198 float stopAngle = profileEnd * twoPi; 198 float stopAngle = profileEnd * twoPi;
199 float stepSize = twoPi / sides; 199 float stepSize = twoPi / sides;
200 200
201 try { angles.makeAngles(sides, startAngle, stopAngle); } 201 try { angles.makeAngles(sides, startAngle, stopAngle); }
@@ -397,7 +397,7 @@ namespace OpenSim.Region.Physics.Meshing
397 { 397 {
398 vert = this.coords[i]; 398 vert = this.coords[i];
399 Vertex v = new Vertex(vert.X, vert.Y, vert.Z) * q; 399 Vertex v = new Vertex(vert.X, vert.Y, vert.Z) * q;
400 400
401 vert.X = v.X; 401 vert.X = v.X;
402 vert.Y = v.Y; 402 vert.Y = v.Y;
403 vert.Z = v.Z; 403 vert.Z = v.Z;
@@ -507,23 +507,23 @@ namespace OpenSim.Region.Physics.Meshing
507 s += "sides..................: " + this.sides.ToString(); 507 s += "sides..................: " + this.sides.ToString();
508 s += "\nhollowSides..........: " + this.hollowSides.ToString(); 508 s += "\nhollowSides..........: " + this.hollowSides.ToString();
509 s += "\nprofileStart.........: " + this.profileStart.ToString(); 509 s += "\nprofileStart.........: " + this.profileStart.ToString();
510 s += "\nprofileEnd...........: " + this.profileEnd.ToString(); 510 s += "\nprofileEnd...........: " + this.profileEnd.ToString();
511 s += "\nhollow...............: " + this.hollow.ToString(); 511 s += "\nhollow...............: " + this.hollow.ToString();
512 s += "\ntwistBegin...........: " + this.twistBegin.ToString(); 512 s += "\ntwistBegin...........: " + this.twistBegin.ToString();
513 s += "\ntwistEnd.............: " + this.twistEnd.ToString(); 513 s += "\ntwistEnd.............: " + this.twistEnd.ToString();
514 s += "\ntopShearX............: " + this.topShearX.ToString(); 514 s += "\ntopShearX............: " + this.topShearX.ToString();
515 s += "\ntopShearY............: " + this.topShearY.ToString(); 515 s += "\ntopShearY............: " + this.topShearY.ToString();
516 s += "\npathCutBegin.........: " + this.pathCutBegin.ToString(); 516 s += "\npathCutBegin.........: " + this.pathCutBegin.ToString();
517 s += "\npathCutEnd...........: " + this.pathCutEnd.ToString(); 517 s += "\npathCutEnd...........: " + this.pathCutEnd.ToString();
518 s += "\ndimpleBegin..........: " + this.dimpleBegin.ToString(); 518 s += "\ndimpleBegin..........: " + this.dimpleBegin.ToString();
519 s += "\ndimpleEnd............: " + this.dimpleEnd.ToString(); 519 s += "\ndimpleEnd............: " + this.dimpleEnd.ToString();
520 s += "\nskew.................: " + this.skew.ToString(); 520 s += "\nskew.................: " + this.skew.ToString();
521 s += "\nholeSizeX............: " + this.holeSizeX.ToString(); 521 s += "\nholeSizeX............: " + this.holeSizeX.ToString();
522 s += "\nholeSizeY............: " + this.holeSizeY.ToString(); 522 s += "\nholeSizeY............: " + this.holeSizeY.ToString();
523 s += "\ntaperX...............: " + this.taperX.ToString(); 523 s += "\ntaperX...............: " + this.taperX.ToString();
524 s += "\ntaperY...............: " + this.taperY.ToString(); 524 s += "\ntaperY...............: " + this.taperY.ToString();
525 s += "\nradius...............: " + this.radius.ToString(); 525 s += "\nradius...............: " + this.radius.ToString();
526 s += "\nrevolutions..........: " + this.revolutions.ToString(); 526 s += "\nrevolutions..........: " + this.revolutions.ToString();
527 s += "\nstepsPerRevolution...: " + this.stepsPerRevolution.ToString(); 527 s += "\nstepsPerRevolution...: " + this.stepsPerRevolution.ToString();
528 528
529 return s; 529 return s;
@@ -542,20 +542,20 @@ namespace OpenSim.Region.Physics.Meshing
542 this.hollowSides = hollowSides; 542 this.hollowSides = hollowSides;
543 543
544 if (sides < 3) 544 if (sides < 3)
545 this.sides = 3; 545 this.sides = 3;
546 if ( hollowSides < 3) 546 if ( hollowSides < 3)
547 this.hollowSides = 3; 547 this.hollowSides = 3;
548 if (profileStart < 0.0f) 548 if (profileStart < 0.0f)
549 this.profileStart = 0.0f; 549 this.profileStart = 0.0f;
550 if (profileEnd > 1.0f) 550 if (profileEnd > 1.0f)
551 this.profileEnd = 1.0f; 551 this.profileEnd = 1.0f;
552 if (profileEnd < 0.02f) 552 if (profileEnd < 0.02f)
553 this.profileEnd = 0.02f; 553 this.profileEnd = 0.02f;
554 if (profileStart >= profileEnd) 554 if (profileStart >= profileEnd)
555 this.profileStart = profileEnd - 0.02f; 555 this.profileStart = profileEnd - 0.02f;
556 if (hollow > 1.0f) 556 if (hollow > 1.0f)
557 this.hollow = 1.0f; 557 this.hollow = 1.0f;
558 if (hollow < 0.0f) 558 if (hollow < 0.0f)
559 this.hollow = 0.0f; 559 this.hollow = 0.0f;
560 } 560 }
561 561
@@ -578,7 +578,7 @@ namespace OpenSim.Region.Physics.Meshing
578 steps = (int)(steps * 4.5 * length); 578 steps = (int)(steps * 4.5 * length);
579 } 579 }
580#endif 580#endif
581 581
582 float twistBegin = this.twistBegin / 360.0f * twoPi; 582 float twistBegin = this.twistBegin / 360.0f * twoPi;
583 float twistEnd = this.twistEnd / 360.0f * twoPi; 583 float twistEnd = this.twistEnd / 360.0f * twoPi;
584 float twistTotal = twistEnd - twistBegin; 584 float twistTotal = twistEnd - twistBegin;
@@ -661,7 +661,7 @@ namespace OpenSim.Region.Physics.Meshing
661 newLayer.AddValue2Faces(coordsLen); 661 newLayer.AddValue2Faces(coordsLen);
662 662
663 this.coords.AddRange(newLayer.coords); 663 this.coords.AddRange(newLayer.coords);
664 this.faces.AddRange(newLayer.faces); 664 this.faces.AddRange(newLayer.faces);
665 665
666 // fill faces between layers 666 // fill faces between layers
667 667
@@ -707,7 +707,6 @@ namespace OpenSim.Region.Physics.Meshing
707 else done = true; 707 else done = true;
708 } 708 }
709 } 709 }
710
711 710
712 public void ExtrudeCircular() 711 public void ExtrudeCircular()
713 { 712 {
@@ -721,9 +720,9 @@ namespace OpenSim.Region.Physics.Meshing
721 float twistEnd = this.twistEnd / 360.0f * twoPi; 720 float twistEnd = this.twistEnd / 360.0f * twoPi;
722 float twistTotal = twistEnd - twistBegin; 721 float twistTotal = twistEnd - twistBegin;
723 722
724 // if the profile has a lot of twist, add more layers otherwise the layers may overlap 723 // if the profile has a lot of twist, add more layers otherwise the layers may overlap
725 // and the resulting mesh may be quite inaccurate. This method is arbitrary and doesn't 724 // and the resulting mesh may be quite inaccurate. This method is arbitrary and doesn't
726 // accurately match the viewer 725 // accurately match the viewer
727 float twistTotalAbs = Math.Abs(twistTotal); 726 float twistTotalAbs = Math.Abs(twistTotal);
728 if (twistTotalAbs > 0.01f) 727 if (twistTotalAbs > 0.01f)
729 { 728 {
@@ -732,19 +731,19 @@ namespace OpenSim.Region.Physics.Meshing
732 if (twistTotalAbs > Math.PI * 3.0f) 731 if (twistTotalAbs > Math.PI * 3.0f)
733 steps *= 2; 732 steps *= 2;
734 } 733 }
735 734
736 float yPathScale = this.holeSizeY * 0.5f; 735 float yPathScale = this.holeSizeY * 0.5f;
737 float pathLength = this.pathCutEnd - this.pathCutBegin; 736 float pathLength = this.pathCutEnd - this.pathCutBegin;
738 float totalSkew = this.skew * 2.0f * pathLength; 737 float totalSkew = this.skew * 2.0f * pathLength;
739 float skewStart = this.pathCutBegin * 2.0f * this.skew - this.skew; 738 float skewStart = this.pathCutBegin * 2.0f * this.skew - this.skew;
740 739
741 // It's not quite clear what pushY (Y top shear) does, but subtracting it from the start and end 740 // It's not quite clear what pushY (Y top shear) does, but subtracting it from the start and end
742 // angles appears to approximate it's effects on path cut. Likewise, adding it to the angle used 741 // angles appears to approximate it's effects on path cut. Likewise, adding it to the angle used
743 // to calculate the sine for generating the path radius appears to approximate it's effects there 742 // to calculate the sine for generating the path radius appears to approximate it's effects there
744 // too, but there are some subtle differences in the radius which are noticeable as the prim size 743 // too, but there are some subtle differences in the radius which are noticeable as the prim size
745 // increases and it may affect megaprims quite a bit. The effect of the Y top shear parameter on 744 // increases and it may affect megaprims quite a bit. The effect of the Y top shear parameter on
746 // the meshes generated with this technique appear nearly identical in shape to the same prims when 745 // the meshes generated with this technique appear nearly identical in shape to the same prims when
747 // displayed by the viewer. 746 // displayed by the viewer.
748 747
749 float startAngle = (twoPi * this.pathCutBegin * this.revolutions) - this.topShearY * 0.9f; 748 float startAngle = (twoPi * this.pathCutBegin * this.revolutions) - this.topShearY * 0.9f;
750 float endAngle = (twoPi * this.pathCutEnd * this.revolutions) - this.topShearY * 0.9f; 749 float endAngle = (twoPi * this.pathCutEnd * this.revolutions) - this.topShearY * 0.9f;
@@ -784,7 +783,7 @@ namespace OpenSim.Region.Physics.Meshing
784 hollow /= 0.7f; 783 hollow /= 0.7f;
785 } 784 }
786 } 785 }
787 786
788 Profile profile = new Profile(this.sides, this.profileStart, this.profileEnd, hollow, this.hollowSides); 787 Profile profile = new Profile(this.sides, this.profileStart, this.profileEnd, hollow, this.hollowSides);
789 788
790 if (initialProfileRot != 0.0f) 789 if (initialProfileRot != 0.0f)
@@ -834,7 +833,7 @@ namespace OpenSim.Region.Physics.Meshing
834 newLayer.AddRot(new Quaternion(new Vertex(0.0f, 0.0f, 1.0f), twist)); 833 newLayer.AddRot(new Quaternion(new Vertex(0.0f, 0.0f, 1.0f), twist));
835 834
836 // now orient the rotation of the profile layer relative to it's position on the path 835 // now orient the rotation of the profile layer relative to it's position on the path
837 // adding taperY to the angle used to generate the quat appears to approximate the viewer 836 // adding taperY to the angle used to generate the quat appears to approximate the viewer
838 newLayer.AddRot(new Quaternion(new Vertex(1.0f, 0.0f, 0.0f), angle + this.topShearY * 0.9f)); 837 newLayer.AddRot(new Quaternion(new Vertex(1.0f, 0.0f, 0.0f), angle + this.topShearY * 0.9f));
839 newLayer.AddPos(xOffset, yOffset, zOffset); 838 newLayer.AddPos(xOffset, yOffset, zOffset);
840 839
@@ -959,7 +958,7 @@ namespace OpenSim.Region.Physics.Meshing
959 958
960 sw.WriteLine(s); 959 sw.WriteLine(s);
961 } 960 }
962 961
963 sw.Close(); 962 sw.Close();
964 } 963 }
965 } 964 }
diff --git a/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs b/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs
index 9fdf3ce..f10a854 100644
--- a/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs
+++ b/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs
@@ -2296,7 +2296,7 @@ namespace OpenSim.Region.ScriptEngine.Common
2296 bool found = false; 2296 bool found = false;
2297 2297
2298 float dist = (float)llVecDist(llGetPos(), pos); 2298 float dist = (float)llVecDist(llGetPos(), pos);
2299 if(dist > m_distanceFactor * 10.0f) 2299 if (dist > m_distanceFactor * 10.0f)
2300 return; 2300 return;
2301 2301
2302 // Instead of using return;, I'm using continue; because in our TaskInventory implementation 2302 // Instead of using return;, I'm using continue; because in our TaskInventory implementation
@@ -6247,7 +6247,7 @@ namespace OpenSim.Region.ScriptEngine.Common
6247 switch (primType) 6247 switch (primType)
6248 { 6248 {
6249 case BuiltIn_Commands_BaseClass.PRIM_TYPE_BOX: 6249 case BuiltIn_Commands_BaseClass.PRIM_TYPE_BOX:
6250 case BuiltIn_Commands_BaseClass.PRIM_TYPE_CYLINDER: 6250 case BuiltIn_Commands_BaseClass.PRIM_TYPE_CYLINDER:
6251 case BuiltIn_Commands_BaseClass.PRIM_TYPE_PRISM: 6251 case BuiltIn_Commands_BaseClass.PRIM_TYPE_PRISM:
6252 res.Add(new LSL_Types.LSLInteger(Shape.ProfileCurve)); 6252 res.Add(new LSL_Types.LSLInteger(Shape.ProfileCurve));
6253 res.Add(new LSL_Types.Vector3(Shape.ProfileBegin / 50000.0, 1 - Shape.ProfileEnd / 50000.0, 0)); 6253 res.Add(new LSL_Types.Vector3(Shape.ProfileBegin / 50000.0, 1 - Shape.ProfileEnd / 50000.0, 0));
@@ -6298,10 +6298,10 @@ namespace OpenSim.Region.ScriptEngine.Common
6298 // vector tapera 6298 // vector tapera
6299 res.Add(new LSL_Types.Vector3(Shape.PathTaperX / 100.0, Shape.PathTaperY / 100.0, 0)); 6299 res.Add(new LSL_Types.Vector3(Shape.PathTaperX / 100.0, Shape.PathTaperY / 100.0, 0));
6300 6300
6301 // float revolutions, 6301 // float revolutions,
6302 res.Add(new LSL_Types.LSLFloat(Shape.PathRevolutions / 50.0)); // needs fixing :( 6302 res.Add(new LSL_Types.LSLFloat(Shape.PathRevolutions / 50.0)); // needs fixing :(
6303 6303
6304 // float radiusoffset, 6304 // float radiusoffset,
6305 res.Add(new LSL_Types.LSLFloat(Shape.PathRadiusOffset / 100.0)); 6305 res.Add(new LSL_Types.LSLFloat(Shape.PathRadiusOffset / 100.0));
6306 6306
6307 // float skew 6307 // float skew
@@ -7014,10 +7014,10 @@ namespace OpenSim.Region.ScriptEngine.Common
7014 { 7014 {
7015 case 5: // DATA_SIM_POS 7015 case 5: // DATA_SIM_POS
7016 if (info == null) 7016 if (info == null)
7017 { 7017 {
7018 // ScriptSleep(1000); 7018 // ScriptSleep(1000);
7019 return LLUUID.Zero.ToString(); 7019 return LLUUID.Zero.ToString();
7020 } 7020 }
7021 reply = new LSL_Types.Vector3( 7021 reply = new LSL_Types.Vector3(
7022 info.RegionLocX * Constants.RegionSize, 7022 info.RegionLocX * Constants.RegionSize,
7023 info.RegionLocY * Constants.RegionSize, 7023 info.RegionLocY * Constants.RegionSize,
@@ -7031,10 +7031,10 @@ namespace OpenSim.Region.ScriptEngine.Common
7031 break; 7031 break;
7032 case 7: // DATA_SIM_RATING 7032 case 7: // DATA_SIM_RATING
7033 if (info == null) 7033 if (info == null)
7034 { 7034 {
7035 // ScriptSleep(1000); 7035 // ScriptSleep(1000);
7036 return LLUUID.Zero.ToString(); 7036 return LLUUID.Zero.ToString();
7037 } 7037 }
7038 int access = info.RegionSettings.Maturity; 7038 int access = info.RegionSettings.Maturity;
7039 if (access == 0) 7039 if (access == 0)
7040 reply = "PG"; 7040 reply = "PG";
@@ -7047,18 +7047,18 @@ namespace OpenSim.Region.ScriptEngine.Common
7047 reply = m_ScriptEngine.World.GetSimulatorVersion(); 7047 reply = m_ScriptEngine.World.GetSimulatorVersion();
7048 break; 7048 break;
7049 default: 7049 default:
7050 // ScriptSleep(1000); 7050 // ScriptSleep(1000);
7051 return LLUUID.Zero.ToString(); // Raise no event 7051 return LLUUID.Zero.ToString(); // Raise no event
7052 } 7052 }
7053 LLUUID rq = LLUUID.Random(); 7053 LLUUID rq = LLUUID.Random();
7054 7054
7055 LLUUID tid = m_ScriptEngine.m_ASYNCLSLCommandManager. 7055 LLUUID tid = m_ScriptEngine.m_ASYNCLSLCommandManager.
7056 m_Dataserver.RegisterRequest(m_localID, m_itemID, rq.ToString()); 7056 m_Dataserver.RegisterRequest(m_localID, m_itemID, rq.ToString());
7057 7057
7058 m_ScriptEngine.m_ASYNCLSLCommandManager. 7058 m_ScriptEngine.m_ASYNCLSLCommandManager.
7059 m_Dataserver.DataserverReply(rq.ToString(), reply); 7059 m_Dataserver.DataserverReply(rq.ToString(), reply);
7060 7060
7061 // ScriptSleep(1000); 7061 // ScriptSleep(1000);
7062 return tid.ToString(); 7062 return tid.ToString();
7063 } 7063 }
7064 catch(Exception e) 7064 catch(Exception e)
@@ -8041,12 +8041,12 @@ namespace OpenSim.Region.ScriptEngine.Common
8041 (line >= 0) && 8041 (line >= 0) &&
8042 (line < notecardLines.Length)) 8042 (line < notecardLines.Length))
8043 { 8043 {
8044 // ScriptSleep(100); 8044 // ScriptSleep(100);
8045 return notecardLines[line]; 8045 return notecardLines[line];
8046 } 8046 }
8047 else 8047 else
8048 { 8048 {
8049 // ScriptSleep(100); 8049 // ScriptSleep(100);
8050 return String.Empty; 8050 return String.Empty;
8051 } 8051 }
8052 } 8052 }
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
index b48edfb..b5ca167 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
@@ -2130,7 +2130,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
2130 { 2130 {
2131 float dist = (float)llVecMag(llGetPos() - pos); 2131 float dist = (float)llVecMag(llGetPos() - pos);
2132 2132
2133 if(dist > m_ScriptDistanceFactor * 10.0f) 2133 if (dist > m_ScriptDistanceFactor * 10.0f)
2134 return; 2134 return;
2135 2135
2136 m_host.AddScriptLPS(1); 2136 m_host.AddScriptLPS(1);
@@ -5735,8 +5735,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
5735 case (int)ScriptBaseClass.PRIM_POINT_LIGHT: 5735 case (int)ScriptBaseClass.PRIM_POINT_LIGHT:
5736 if (remain < 5) 5736 if (remain < 5)
5737 return; 5737 return;
5738 LSL_Types.LSLInteger light = new LSL_Types.LSLInteger(rules.Data[idx++].ToString()); 5738 LSL_Types.LSLInteger light = new LSL_Types.LSLInteger(rules.Data[idx++].ToString());
5739 LSL_Types.Vector3 lightcolor =new LSL_Types.Vector3(rules.Data[idx++].ToString()); 5739 LSL_Types.Vector3 lightcolor = new LSL_Types.Vector3(rules.Data[idx++].ToString());
5740 float intensity = (float)Convert.ToDouble(rules.Data[idx++]); 5740 float intensity = (float)Convert.ToDouble(rules.Data[idx++]);
5741 float radius = (float)Convert.ToDouble(rules.Data[idx++]); 5741 float radius = (float)Convert.ToDouble(rules.Data[idx++]);
5742 float falloff = (float)Convert.ToDouble(rules.Data[idx++]); 5742 float falloff = (float)Convert.ToDouble(rules.Data[idx++]);
@@ -6895,10 +6895,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
6895 { 6895 {
6896 case 5: // DATA_SIM_POS 6896 case 5: // DATA_SIM_POS
6897 if (info == null) 6897 if (info == null)
6898 { 6898 {
6899 // ScriptSleep(1000); 6899 // ScriptSleep(1000);
6900 return LLUUID.Zero.ToString(); 6900 return LLUUID.Zero.ToString();
6901 } 6901 }
6902 reply = new LSL_Types.Vector3( 6902 reply = new LSL_Types.Vector3(
6903 info.RegionLocX * Constants.RegionSize, 6903 info.RegionLocX * Constants.RegionSize,
6904 info.RegionLocY * Constants.RegionSize, 6904 info.RegionLocY * Constants.RegionSize,
@@ -6912,10 +6912,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
6912 break; 6912 break;
6913 case 7: // DATA_SIM_RATING 6913 case 7: // DATA_SIM_RATING
6914 if (info == null) 6914 if (info == null)
6915 { 6915 {
6916 // ScriptSleep(1000); 6916 // ScriptSleep(1000);
6917 return LLUUID.Zero.ToString(); 6917 return LLUUID.Zero.ToString();
6918 } 6918 }
6919 int access = info.RegionSettings.Maturity; 6919 int access = info.RegionSettings.Maturity;
6920 if (access == 0) 6920 if (access == 0)
6921 reply = "PG"; 6921 reply = "PG";
@@ -6928,7 +6928,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
6928 reply = m_ScriptEngine.World.GetSimulatorVersion(); 6928 reply = m_ScriptEngine.World.GetSimulatorVersion();
6929 break; 6929 break;
6930 default: 6930 default:
6931 // ScriptSleep(1000); 6931 // ScriptSleep(1000);
6932 return LLUUID.Zero.ToString(); // Raise no event 6932 return LLUUID.Zero.ToString(); // Raise no event
6933 } 6933 }
6934 LLUUID rq = LLUUID.Random(); 6934 LLUUID rq = LLUUID.Random();
@@ -6939,7 +6939,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
6939 AsyncCommands. 6939 AsyncCommands.
6940 DataserverPlugin.DataserverReply(rq.ToString(), reply); 6940 DataserverPlugin.DataserverReply(rq.ToString(), reply);
6941 6941
6942 // ScriptSleep(1000); 6942 // ScriptSleep(1000);
6943 return tid.ToString(); 6943 return tid.ToString();
6944 } 6944 }
6945 catch(Exception e) 6945 catch(Exception e)
@@ -7910,7 +7910,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
7910 AsyncCommands. 7910 AsyncCommands.
7911 DataserverPlugin.DataserverReply(item.AssetID.ToString(), 7911 DataserverPlugin.DataserverReply(item.AssetID.ToString(),
7912 NotecardCache.GetLines(item.AssetID).ToString()); 7912 NotecardCache.GetLines(item.AssetID).ToString());
7913 // ScriptSleep(100); 7913 // ScriptSleep(100);
7914 return tid.ToString(); 7914 return tid.ToString();
7915 } 7915 }
7916 WithNotecard(item.AssetID, delegate (LLUUID id, AssetBase a) 7916 WithNotecard(item.AssetID, delegate (LLUUID id, AssetBase a)
@@ -7924,7 +7924,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
7924 DataserverPlugin.DataserverReply(id.ToString(), 7924 DataserverPlugin.DataserverReply(id.ToString(),
7925 NotecardCache.GetLines(id).ToString()); 7925 NotecardCache.GetLines(id).ToString());
7926 }); 7926 });
7927 // ScriptSleep(100); 7927 // ScriptSleep(100);
7928 return tid.ToString(); 7928 return tid.ToString();
7929 } 7929 }
7930 } 7930 }
@@ -7948,7 +7948,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
7948 AsyncCommands. 7948 AsyncCommands.
7949 DataserverPlugin.DataserverReply(item.AssetID.ToString(), 7949 DataserverPlugin.DataserverReply(item.AssetID.ToString(),
7950 NotecardCache.GetLine(item.AssetID, line)); 7950 NotecardCache.GetLine(item.AssetID, line));
7951 // ScriptSleep(100); 7951 // ScriptSleep(100);
7952 return tid.ToString(); 7952 return tid.ToString();
7953 } 7953 }
7954 WithNotecard(item.AssetID, delegate (LLUUID id, AssetBase a) 7954 WithNotecard(item.AssetID, delegate (LLUUID id, AssetBase a)
@@ -7963,7 +7963,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
7963 NotecardCache.GetLine(id, line)); 7963 NotecardCache.GetLine(id, line));
7964 }); 7964 });
7965 7965
7966 // ScriptSleep(100); 7966 // ScriptSleep(100);
7967 return tid.ToString(); 7967 return tid.ToString();
7968 } 7968 }
7969 } 7969 }
diff --git a/OpenSim/Region/ScriptEngine/XEngine/EventManager.cs b/OpenSim/Region/ScriptEngine/XEngine/EventManager.cs
index 3a01dc6..d431286 100644
--- a/OpenSim/Region/ScriptEngine/XEngine/EventManager.cs
+++ b/OpenSim/Region/ScriptEngine/XEngine/EventManager.cs
@@ -89,7 +89,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine
89 det[0].Key = remoteClient.AgentId; 89 det[0].Key = remoteClient.AgentId;
90 det[0].Populate(myScriptEngine.World); 90 det[0].Populate(myScriptEngine.World);
91 91
92
93 if (originalID == 0) 92 if (originalID == 0)
94 { 93 {
95 SceneObjectPart part = myScriptEngine.World.GetSceneObjectPart(localID); 94 SceneObjectPart part = myScriptEngine.World.GetSceneObjectPart(localID);
@@ -103,7 +102,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
103 SceneObjectPart originalPart = myScriptEngine.World.GetSceneObjectPart(originalID); 102 SceneObjectPart originalPart = myScriptEngine.World.GetSceneObjectPart(originalID);
104 det[0].LinkNum = originalPart.LinkNum; 103 det[0].LinkNum = originalPart.LinkNum;
105 } 104 }
106 105
107 myScriptEngine.PostObjectEvent(localID, new EventParams( 106 myScriptEngine.PostObjectEvent(localID, new EventParams(
108 "touch_start", new Object[] { new LSL_Types.LSLInteger(1) }, 107 "touch_start", new Object[] { new LSL_Types.LSLInteger(1) },
109 det)); 108 det));