aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/ApplicationPlugins/Rest/Inventory/RestAppearanceServices.cs
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--OpenSim/ApplicationPlugins/Rest/Inventory/RestAppearanceServices.cs236
1 files changed, 127 insertions, 109 deletions
diff --git a/OpenSim/ApplicationPlugins/Rest/Inventory/RestAppearanceServices.cs b/OpenSim/ApplicationPlugins/Rest/Inventory/RestAppearanceServices.cs
index 82c0c2b..c375ade 100644
--- a/OpenSim/ApplicationPlugins/Rest/Inventory/RestAppearanceServices.cs
+++ b/OpenSim/ApplicationPlugins/Rest/Inventory/RestAppearanceServices.cs
@@ -42,9 +42,12 @@ using Nini.Config;
42 42
43namespace OpenSim.ApplicationPlugins.Rest.Inventory 43namespace OpenSim.ApplicationPlugins.Rest.Inventory
44{ 44{
45
45 public class RestAppearanceServices : IRest 46 public class RestAppearanceServices : IRest
46 { 47 {
48
47 private static readonly int PARM_USERID = 0; 49 private static readonly int PARM_USERID = 0;
50
48 // private static readonly int PARM_PATH = 1; 51 // private static readonly int PARM_PATH = 1;
49 52
50 private bool enabled = false; 53 private bool enabled = false;
@@ -139,6 +142,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
139 142
140 private void DoAppearance(RequestData hdata) 143 private void DoAppearance(RequestData hdata)
141 { 144 {
145
142 AppearanceRequestData rdata = (AppearanceRequestData) hdata; 146 AppearanceRequestData rdata = (AppearanceRequestData) hdata;
143 147
144 Rest.Log.DebugFormat("{0} DoAppearance ENTRY", MsgId); 148 Rest.Log.DebugFormat("{0} DoAppearance ENTRY", MsgId);
@@ -207,7 +211,6 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
207 // inventory. 211 // inventory.
208 // 212 //
209 213
210
211 // Do we have at least a user agent name? 214 // Do we have at least a user agent name?
212 215
213 if (rdata.Parameters.Length < 1) 216 if (rdata.Parameters.Length < 1)
@@ -306,7 +309,9 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
306 309
307 if (rdata.userAppearance == null) 310 if (rdata.userAppearance == null)
308 { 311 {
309 rdata.Fail(Rest.HttpStatusCodeNoContent,"appearance data not found"); 312 rdata.Fail(Rest.HttpStatusCodeNoContent,
313 String.Format("appearance data not found for user {0} {1}",
314 rdata.userProfile.FirstName, rdata.userProfile.SurName));
310 } 315 }
311 316
312 rdata.initXmlWriter(); 317 rdata.initXmlWriter();
@@ -331,26 +336,34 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
331 336
332 private void DoExtend(AppearanceRequestData rdata) 337 private void DoExtend(AppearanceRequestData rdata)
333 { 338 {
339
334 bool created = false; 340 bool created = false;
335 bool modified = false; 341 bool modified = false;
336 string newnode = String.Empty; 342 string newnode = String.Empty;
337 343
344 Rest.Log.DebugFormat("{0} POST ENTRY", MsgId);
345
338 AvatarAppearance old = Rest.AvatarServices.GetUserAppearance(rdata.userProfile.ID); 346 AvatarAppearance old = Rest.AvatarServices.GetUserAppearance(rdata.userProfile.ID);
347
339 rdata.userAppearance = new AvatarAppearance(); 348 rdata.userAppearance = new AvatarAppearance();
340 349
341 rdata.userAppearance.Owner = old.Owner; 350 // Although the following behavior is admitted by HTTP I am becoming
342 rdata.userAppearance.Serial = old.Serial; 351 // increasingly doubtful that it is appropriate for REST. If I attempt to
352 // add a new record, and it already exists, then it seems to me that the
353 // attempt should fail, rather than update the existing record.
343 354
344 if (GetUserAppearance(rdata)) 355 if (GetUserAppearance(rdata))
345 { 356 {
346 modified = rdata.userAppearance != null; 357 modified = rdata.userAppearance != null;
347 created = !modified; 358 created = !modified;
348 Rest.AvatarServices.UpdateUserAppearance(rdata.userProfile.ID, rdata.userAppearance); 359 Rest.AvatarServices.UpdateUserAppearance(rdata.userProfile.ID, rdata.userAppearance);
360 // Rest.UserServices.UpdateUserProfile(rdata.userProfile);
349 } 361 }
350 else 362 else
351 { 363 {
352 created = true; 364 created = true;
353 Rest.AvatarServices.UpdateUserAppearance(rdata.userProfile.ID, rdata.userAppearance); 365 Rest.AvatarServices.UpdateUserAppearance(rdata.userProfile.ID, rdata.userAppearance);
366 // Rest.UserServices.UpdateUserProfile(rdata.userProfile);
354 } 367 }
355 368
356 if (created) 369 if (created)
@@ -358,9 +371,11 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
358 newnode = String.Format("{0} {1}", rdata.userProfile.FirstName, 371 newnode = String.Format("{0} {1}", rdata.userProfile.FirstName,
359 rdata.userProfile.SurName); 372 rdata.userProfile.SurName);
360 // Must include a location header with a URI that identifies the new resource. 373 // Must include a location header with a URI that identifies the new resource.
374
361 rdata.AddHeader(Rest.HttpHeaderLocation,String.Format("http://{0}{1}:{2}{3}{4}", 375 rdata.AddHeader(Rest.HttpHeaderLocation,String.Format("http://{0}{1}:{2}{3}{4}",
362 rdata.hostname,rdata.port,rdata.path,Rest.UrlPathSeparator, newnode)); 376 rdata.hostname,rdata.port,rdata.path,Rest.UrlPathSeparator, newnode));
363 rdata.Complete(Rest.HttpStatusCodeCreated); 377 rdata.Complete(Rest.HttpStatusCodeCreated);
378
364 } 379 }
365 else 380 else
366 { 381 {
@@ -399,6 +414,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
399 { 414 {
400 modified = true; 415 modified = true;
401 Rest.AvatarServices.UpdateUserAppearance(rdata.userProfile.ID, rdata.userAppearance); 416 Rest.AvatarServices.UpdateUserAppearance(rdata.userProfile.ID, rdata.userAppearance);
417 Rest.UserServices.UpdateUserProfile(rdata.userProfile);
402 } 418 }
403 419
404 if (created) 420 if (created)
@@ -703,121 +719,123 @@ namespace OpenSim.ApplicationPlugins.Rest.Inventory
703 719
704 } 720 }
705 721
706 private void FormatUserAppearance(AppearanceRequestData rdata) 722 private void FormatPart(AppearanceRequestData rdata, string part, UUID item, UUID asset)
707 { 723 {
708 724 if(item != UUID.Zero || asset != UUID.Zero)
709 rdata.writer.WriteStartElement("Appearance");
710 rdata.writer.WriteAttributeString("Height", rdata.userAppearance.AvatarHeight.ToString());
711 rdata.writer.WriteAttributeString("Owner", rdata.userAppearance.Owner.ToString());
712 rdata.writer.WriteAttributeString("Serial", rdata.userAppearance.Serial.ToString());
713
714 rdata.writer.WriteStartElement("Body");
715 rdata.writer.WriteAttributeString("Item",rdata.userAppearance.BodyItem.ToString());
716 rdata.writer.WriteAttributeString("Asset",rdata.userAppearance.BodyAsset.ToString());
717 rdata.writer.WriteEndElement();
718
719 rdata.writer.WriteStartElement("Skin");
720 rdata.writer.WriteAttributeString("Item",rdata.userAppearance.SkinItem.ToString());
721 rdata.writer.WriteAttributeString("Asset",rdata.userAppearance.SkinAsset.ToString());
722 rdata.writer.WriteEndElement();
723
724 rdata.writer.WriteStartElement("Hair");
725 rdata.writer.WriteAttributeString("Item",rdata.userAppearance.HairItem.ToString());
726 rdata.writer.WriteAttributeString("Asset",rdata.userAppearance.HairAsset.ToString());
727 rdata.writer.WriteEndElement();
728
729 rdata.writer.WriteStartElement("Eyes");
730 rdata.writer.WriteAttributeString("Item",rdata.userAppearance.EyesItem.ToString());
731 rdata.writer.WriteAttributeString("Asset",rdata.userAppearance.EyesAsset.ToString());
732 rdata.writer.WriteEndElement();
733
734 rdata.writer.WriteStartElement("Shirt");
735 rdata.writer.WriteAttributeString("Item",rdata.userAppearance.ShirtItem.ToString());
736 rdata.writer.WriteAttributeString("Asset",rdata.userAppearance.ShirtAsset.ToString());
737 rdata.writer.WriteEndElement();
738
739 rdata.writer.WriteStartElement("Pants");
740 rdata.writer.WriteAttributeString("Item",rdata.userAppearance.PantsItem.ToString());
741 rdata.writer.WriteAttributeString("Asset",rdata.userAppearance.PantsAsset.ToString());
742 rdata.writer.WriteEndElement();
743
744 rdata.writer.WriteStartElement("Shoes");
745 rdata.writer.WriteAttributeString("Item",rdata.userAppearance.ShoesItem.ToString());
746 rdata.writer.WriteAttributeString("Asset",rdata.userAppearance.ShoesAsset.ToString());
747 rdata.writer.WriteEndElement();
748
749 rdata.writer.WriteStartElement("Socks");
750 rdata.writer.WriteAttributeString("Item",rdata.userAppearance.SocksItem.ToString());
751 rdata.writer.WriteAttributeString("Asset",rdata.userAppearance.SocksAsset.ToString());
752 rdata.writer.WriteEndElement();
753
754 rdata.writer.WriteStartElement("Jacket");
755 rdata.writer.WriteAttributeString("Item",rdata.userAppearance.JacketItem.ToString());
756 rdata.writer.WriteAttributeString("Asset",rdata.userAppearance.JacketAsset.ToString());
757 rdata.writer.WriteEndElement();
758
759 rdata.writer.WriteStartElement("Gloves");
760 rdata.writer.WriteAttributeString("Item",rdata.userAppearance.GlovesItem.ToString());
761 rdata.writer.WriteAttributeString("Asset",rdata.userAppearance.GlovesAsset.ToString());
762 rdata.writer.WriteEndElement();
763
764 rdata.writer.WriteStartElement("UnderShirt");
765 rdata.writer.WriteAttributeString("Item",rdata.userAppearance.UnderShirtItem.ToString());
766 rdata.writer.WriteAttributeString("Asset",rdata.userAppearance.UnderShirtAsset.ToString());
767 rdata.writer.WriteEndElement();
768
769 rdata.writer.WriteStartElement("UnderPants");
770 rdata.writer.WriteAttributeString("Item",rdata.userAppearance.UnderPantsItem.ToString());
771 rdata.writer.WriteAttributeString("Asset",rdata.userAppearance.UnderPantsAsset.ToString());
772 rdata.writer.WriteEndElement();
773
774 rdata.writer.WriteStartElement("Skirt");
775 rdata.writer.WriteAttributeString("Item",rdata.userAppearance.SkirtItem.ToString());
776 rdata.writer.WriteAttributeString("Asset",rdata.userAppearance.SkirtAsset.ToString());
777 rdata.writer.WriteEndElement();
778
779 Hashtable attachments = rdata.userAppearance.GetAttachments();
780
781 rdata.writer.WriteStartElement("Attachments");
782
783 for (int i=0; i<attachments.Count;i++)
784 { 725 {
785 Hashtable attachment = attachments[i] as Hashtable; 726 rdata.writer.WriteStartElement(part);
786 rdata.writer.WriteStartElement("Attachment"); 727 if(item != UUID.Zero)
787 rdata.writer.WriteAttributeString("AtPoint", i.ToString()); 728 {
788 rdata.writer.WriteAttributeString("Item", (string) attachment["item"]); 729 rdata.writer.WriteAttributeString("Item",item.ToString());
789 rdata.writer.WriteAttributeString("Asset", (string) attachment["asset"]); 730 }
790 rdata.writer.WriteEndElement(); 731 if(asset != UUID.Zero)
732 {
733 rdata.writer.WriteAttributeString("Item",asset.ToString());
734 }
735 rdata.writer.WriteEndElement();
791 } 736 }
737 }
792 738
793 rdata.writer.WriteEndElement(); 739 private void FormatUserAppearance(AppearanceRequestData rdata)
794 740 {
795 741
796 Primitive.TextureEntry texture = rdata.userAppearance.Texture; 742 Rest.Log.DebugFormat("{0} FormatUserAppearance", MsgId);
797 743
798 if (texture != null) 744 if(rdata.userAppearance != null)
799 { 745 {
800 rdata.writer.WriteStartElement("Texture");
801 rdata.writer.WriteAttributeString("Default",
802 rdata.userAppearance.Texture.DefaultTexture.TextureID.ToString());
803
804 for (int i=0; i<Primitive.TextureEntry.MAX_FACES;i++)
805 {
806 rdata.writer.WriteStartElement("Face");
807 rdata.writer.WriteAttributeString("Index", i.ToString());
808 rdata.writer.WriteAttributeString("Id",
809 rdata.userAppearance.Texture.FaceTextures[i].TextureID.ToString());
810 rdata.writer.WriteEndElement();
811 }
812 746
813 rdata.writer.WriteEndElement(); 747 Rest.Log.DebugFormat("{0} FormatUserAppearance: appearance object exists", MsgId);
748 rdata.writer.WriteStartElement("Appearance");
749
750 rdata.writer.WriteAttributeString("Height", rdata.userAppearance.AvatarHeight.ToString());
751 if(rdata.userAppearance.Owner != null)
752 rdata.writer.WriteAttributeString("Owner", rdata.userAppearance.Owner.ToString());
753 rdata.writer.WriteAttributeString("Serial", rdata.userAppearance.Serial.ToString());
754
755 FormatPart(rdata, "Body", rdata.userAppearance.BodyItem, rdata.userAppearance.BodyAsset);
756 FormatPart(rdata, "Skin", rdata.userAppearance.SkinItem, rdata.userAppearance.SkinAsset);
757 FormatPart(rdata, "Hair", rdata.userAppearance.HairItem, rdata.userAppearance.HairAsset);
758 FormatPart(rdata, "Eyes", rdata.userAppearance.EyesItem, rdata.userAppearance.EyesAsset);
759
760 FormatPart(rdata, "Shirt", rdata.userAppearance.ShirtItem, rdata.userAppearance.ShirtAsset);
761 FormatPart(rdata, "Pants", rdata.userAppearance.PantsItem, rdata.userAppearance.PantsAsset);
762 FormatPart(rdata, "Skirt", rdata.userAppearance.SkirtItem, rdata.userAppearance.SkirtAsset);
763 FormatPart(rdata, "Shoes", rdata.userAppearance.ShoesItem, rdata.userAppearance.ShoesAsset);
764 FormatPart(rdata, "Socks", rdata.userAppearance.SocksItem, rdata.userAppearance.SocksAsset);
765
766 FormatPart(rdata, "Jacket", rdata.userAppearance.JacketItem, rdata.userAppearance.JacketAsset);
767 FormatPart(rdata, "Gloves", rdata.userAppearance.GlovesItem, rdata.userAppearance.GlovesAsset);
768
769 FormatPart(rdata, "UnderShirt", rdata.userAppearance.UnderShirtItem, rdata.userAppearance.UnderShirtAsset);
770 FormatPart(rdata, "UnderPants", rdata.userAppearance.UnderPantsItem, rdata.userAppearance.UnderPantsAsset);
771
772 Hashtable attachments = rdata.userAppearance.GetAttachments();
773
774 if(attachments != null)
775 {
776
777 Rest.Log.DebugFormat("{0} FormatUserAppearance: Formatting attachments", MsgId);
778
779 rdata.writer.WriteStartElement("Attachments");
780 for (int i=0; i<attachments.Count;i++)
781 {
782 Hashtable attachment = attachments[i] as Hashtable;
783 rdata.writer.WriteStartElement("Attachment");
784 rdata.writer.WriteAttributeString("AtPoint", i.ToString());
785 rdata.writer.WriteAttributeString("Item", (string) attachment["item"]);
786 rdata.writer.WriteAttributeString("Asset", (string) attachment["asset"]);
787 rdata.writer.WriteEndElement();
788 }
789 rdata.writer.WriteEndElement();
790 }
791
792 Primitive.TextureEntry texture = rdata.userAppearance.Texture;
793
794 if (texture != null && (texture.DefaultTexture != null || texture.FaceTextures != null))
795 {
796
797 Rest.Log.DebugFormat("{0} FormatUserAppearance: Formatting textures", MsgId);
798
799 rdata.writer.WriteStartElement("Texture");
800
801 if(texture.DefaultTexture != null)
802 {
803 Rest.Log.DebugFormat("{0} FormatUserAppearance: Formatting default texture", MsgId);
804 rdata.writer.WriteAttributeString("Default",
805 texture.DefaultTexture.TextureID.ToString());
806 }
807
808 if(texture.FaceTextures != null)
809 {
810
811 Rest.Log.DebugFormat("{0} FormatUserAppearance: Formatting face textures", MsgId);
812
813 for (int i=0; i<texture.FaceTextures.Length;i++)
814 {
815 if (texture.FaceTextures[i] != null)
816 {
817 rdata.writer.WriteStartElement("Face");
818 rdata.writer.WriteAttributeString("Index", i.ToString());
819 rdata.writer.WriteAttributeString("Id",
820 texture.FaceTextures[i].TextureID.ToString());
821 rdata.writer.WriteEndElement();
822 }
823 }
824 }
825
826 rdata.writer.WriteEndElement();
827 }
828
829 Rest.Log.DebugFormat("{0} FormatUserAppearance: Formatting visual parameters", MsgId);
830
831 rdata.writer.WriteStartElement("VisualParameters");
832 rdata.writer.WriteBase64(rdata.userAppearance.VisualParams,0,
833 rdata.userAppearance.VisualParams.Length);
834 rdata.writer.WriteEndElement();
835 rdata.writer.WriteFullEndElement();
814 } 836 }
815 837
816 rdata.writer.WriteStartElement("VisualParameters"); 838 Rest.Log.DebugFormat("{0} FormatUserAppearance: completed", MsgId);
817 rdata.writer.WriteBase64(rdata.userAppearance.VisualParams,0,
818 rdata.userAppearance.VisualParams.Length);
819 rdata.writer.WriteEndElement();
820 rdata.writer.WriteFullEndElement();
821 839
822 return; 840 return;
823 } 841 }