diff --git a/OpenSim/Framework/SLUtil.cs b/OpenSim/Framework/SLUtil.cs index f6d6a7cf60..a4898061da 100644 --- a/OpenSim/Framework/SLUtil.cs +++ b/OpenSim/Framework/SLUtil.cs @@ -106,6 +106,39 @@ namespace OpenSim.Framework } } + public static string SLInvTypeToContentType(int invType) + { + switch ((InventoryType)invType) + { + case InventoryType.Animation: + return "application/vnd.ll.animation"; + case InventoryType.CallingCard: + return "application/vnd.ll.callingcard"; + case InventoryType.Folder: + return "application/vnd.ll.folder"; + case InventoryType.Gesture: + return "application/vnd.ll.gesture"; + case InventoryType.Landmark: + return "application/vnd.ll.landmark"; + case InventoryType.LSL: + return "application/vnd.ll.lsltext"; + case InventoryType.Notecard: + return "application/vnd.ll.notecard"; + case InventoryType.Attachment: + case InventoryType.Object: + return "application/vnd.ll.primitive"; + case InventoryType.Sound: + return "application/ogg"; + case InventoryType.Snapshot: + case InventoryType.Texture: + return "image/x-j2c"; + case InventoryType.Wearable: + return "application/vnd.ll.clothing"; + default: + return "application/octet-stream"; + } + } + public static sbyte ContentTypeToSLAssetType(string contentType) { switch (contentType) diff --git a/OpenSim/Services/Connectors/SimianGrid/SimianInventoryServiceConnector.cs b/OpenSim/Services/Connectors/SimianGrid/SimianInventoryServiceConnector.cs index 56e74755bb..9005e947fd 100644 --- a/OpenSim/Services/Connectors/SimianGrid/SimianInventoryServiceConnector.cs +++ b/OpenSim/Services/Connectors/SimianGrid/SimianInventoryServiceConnector.cs @@ -583,6 +583,14 @@ namespace OpenSim.Services.Connectors.SimianGrid { "Permissions", permissions } }; + // Add different asset type only if it differs from inventory type + // (needed for links) + string invContentType = SLUtil.SLInvTypeToContentType(item.InvType); + string assetContentType = SLUtil.SLAssetTypeToContentType(item.AssetType); + + if (invContentType != assetContentType) + extraData["LinkedItemType"] = OSD.FromString(assetContentType); + NameValueCollection requestArgs = new NameValueCollection { { "RequestMethod", "AddInventoryItem" }, @@ -593,6 +601,7 @@ namespace OpenSim.Services.Connectors.SimianGrid { "Name", item.Name }, { "Description", item.Description }, { "CreatorID", item.CreatorId }, + { "ContentType", invContentType }, { "ExtraData", OSDParser.SerializeJsonString(extraData) } }; @@ -781,6 +790,9 @@ namespace OpenSim.Services.Connectors.SimianGrid invItem.GroupPermissions = perms["GroupMask"].AsUInteger(); invItem.NextPermissions = perms["NextOwnerMask"].AsUInteger(); } + + if (extraData.ContainsKey("LinkedItemType")) + invItem.AssetType = extraData["LinkedItemType"].AsInteger(); } if (invItem.BasePermissions == 0)