diff options
Diffstat (limited to 'OpenSim')
4 files changed, 129 insertions, 3 deletions
diff --git a/OpenSim/Framework/Communications/Capabilities/Caps.cs b/OpenSim/Framework/Communications/Capabilities/Caps.cs index f9af7ea..53cb955 100644 --- a/OpenSim/Framework/Communications/Capabilities/Caps.cs +++ b/OpenSim/Framework/Communications/Capabilities/Caps.cs | |||
@@ -66,6 +66,7 @@ namespace OpenSim.Region.Capabilities | |||
66 | //private string m_requestTexture = "0003/"; | 66 | //private string m_requestTexture = "0003/"; |
67 | private string m_notecardUpdatePath = "0004/"; | 67 | private string m_notecardUpdatePath = "0004/"; |
68 | private string m_notecardTaskUpdatePath = "0005/"; | 68 | private string m_notecardTaskUpdatePath = "0005/"; |
69 | private string m_fetchInventoryPath = "0006/"; | ||
69 | 70 | ||
70 | //private string eventQueue = "0100/"; | 71 | //private string eventQueue = "0100/"; |
71 | private BaseHttpServer m_httpListener; | 72 | private BaseHttpServer m_httpListener; |
@@ -110,10 +111,17 @@ namespace OpenSim.Region.Capabilities | |||
110 | capsBase + m_newInventory, | 111 | capsBase + m_newInventory, |
111 | NewAgentInventoryRequest)); | 112 | NewAgentInventoryRequest)); |
112 | 113 | ||
114 | // m_httpListener.AddStreamHandler( | ||
115 | // new LLSDStreamhandler<LLSDFetchInventoryDescendents, LLSDInventoryDescendents>("POST", | ||
116 | // capsBase + m_fetchInventory, | ||
117 | // FetchInventory)); | ||
118 | |||
119 | |||
113 | AddLegacyCapsHandler(m_httpListener, m_requestPath, CapsRequest); | 120 | AddLegacyCapsHandler(m_httpListener, m_requestPath, CapsRequest); |
114 | //AddLegacyCapsHandler(m_httpListener, m_requestTexture , RequestTexture); | 121 | //AddLegacyCapsHandler(m_httpListener, m_requestTexture , RequestTexture); |
115 | AddLegacyCapsHandler(m_httpListener, m_notecardUpdatePath, NoteCardAgentInventory); | 122 | AddLegacyCapsHandler(m_httpListener, m_notecardUpdatePath, NoteCardAgentInventory); |
116 | AddLegacyCapsHandler(m_httpListener, m_notecardTaskUpdatePath, ScriptTaskInventory); | 123 | AddLegacyCapsHandler(m_httpListener, m_notecardTaskUpdatePath, ScriptTaskInventory); |
124 | AddLegacyCapsHandler(m_httpListener, m_fetchInventoryPath, FetchInventoryRequest); | ||
117 | } | 125 | } |
118 | catch (Exception e) | 126 | catch (Exception e) |
119 | { | 127 | { |
@@ -160,9 +168,37 @@ namespace OpenSim.Region.Capabilities | |||
160 | caps.UpdateNotecardAgentInventory = capsBaseUrl + m_notecardUpdatePath; | 168 | caps.UpdateNotecardAgentInventory = capsBaseUrl + m_notecardUpdatePath; |
161 | caps.UpdateScriptAgentInventory = capsBaseUrl + m_notecardUpdatePath; | 169 | caps.UpdateScriptAgentInventory = capsBaseUrl + m_notecardUpdatePath; |
162 | caps.UpdateScriptTaskInventory = capsBaseUrl + m_notecardTaskUpdatePath; | 170 | caps.UpdateScriptTaskInventory = capsBaseUrl + m_notecardTaskUpdatePath; |
171 | caps.FetchInventoryDescendents = capsBaseUrl + m_fetchInventoryPath; | ||
163 | return caps; | 172 | return caps; |
164 | } | 173 | } |
165 | 174 | ||
175 | public string FetchInventoryRequest(string request, string path, string param) | ||
176 | { | ||
177 | request = request.Replace("<llsd><map><key>folders</key><array>", "<llsd>"); | ||
178 | request = request.Replace("</map></array></map>", "</map>"); | ||
179 | |||
180 | //Console.WriteLine("inventory request " + request); | ||
181 | Hashtable hash = (Hashtable)LLSD.LLSDDeserialize(Helpers.StringToField(request)); | ||
182 | LLSDFetchInventoryDescendents llsdRequest = new LLSDFetchInventoryDescendents(); | ||
183 | LLSDHelpers.DeserialiseLLSDMap(hash, llsdRequest); | ||
184 | LLSDInventoryDescendents reply = FetchInventory(llsdRequest); | ||
185 | string response = LLSDHelpers.SerialiseLLSDReply(reply); | ||
186 | return response; | ||
187 | } | ||
188 | |||
189 | private LLSDInventoryDescendents FetchInventory(LLSDFetchInventoryDescendents invFetch) | ||
190 | { | ||
191 | LLSDInventoryDescendents reply = new LLSDInventoryDescendents(); | ||
192 | LLSDInventoryFolderContents contents = new LLSDInventoryFolderContents(); | ||
193 | contents.agent___id = m_agentID; | ||
194 | contents.owner___id = m_agentID; | ||
195 | contents.folder___id = invFetch.folder_id; | ||
196 | contents.version = 1; | ||
197 | contents.descendents = 0; | ||
198 | reply.folders.Array.Add(contents); | ||
199 | return reply; | ||
200 | } | ||
201 | |||
166 | /// <summary> | 202 | /// <summary> |
167 | /// | 203 | /// |
168 | /// </summary> | 204 | /// </summary> |
diff --git a/OpenSim/Framework/Communications/Capabilities/LLSDCapsDetails.cs b/OpenSim/Framework/Communications/Capabilities/LLSDCapsDetails.cs index 6bec162..dc866ba 100644 --- a/OpenSim/Framework/Communications/Capabilities/LLSDCapsDetails.cs +++ b/OpenSim/Framework/Communications/Capabilities/LLSDCapsDetails.cs | |||
@@ -42,6 +42,7 @@ namespace OpenSim.Region.Capabilities | |||
42 | public string UpdateScriptAgentInventory = String.Empty; | 42 | public string UpdateScriptAgentInventory = String.Empty; |
43 | public string UpdateScriptTaskInventory = String.Empty; | 43 | public string UpdateScriptTaskInventory = String.Empty; |
44 | // public string ParcelVoiceInfoRequest = String.Empty; | 44 | // public string ParcelVoiceInfoRequest = String.Empty; |
45 | public string FetchInventoryDescendents = String.Empty; | ||
45 | 46 | ||
46 | public LLSDCapsDetails() | 47 | public LLSDCapsDetails() |
47 | { | 48 | { |
diff --git a/OpenSim/Framework/Communications/Capabilities/LLSDHelpers.cs b/OpenSim/Framework/Communications/Capabilities/LLSDHelpers.cs index 28f838d..193927d 100644 --- a/OpenSim/Framework/Communications/Capabilities/LLSDHelpers.cs +++ b/OpenSim/Framework/Communications/Capabilities/LLSDHelpers.cs | |||
@@ -66,14 +66,18 @@ namespace OpenSim.Region.Capabilities | |||
66 | if (fieldAttributes.Length > 0) | 66 | if (fieldAttributes.Length > 0) |
67 | { | 67 | { |
68 | writer.WriteStartElement(String.Empty, "key", String.Empty); | 68 | writer.WriteStartElement(String.Empty, "key", String.Empty); |
69 | writer.WriteString(fields[i].Name); | 69 | string fieldName = fields[i].Name; |
70 | fieldName = fieldName.Replace("___", "-"); | ||
71 | writer.WriteString(fieldName); | ||
70 | writer.WriteEndElement(); | 72 | writer.WriteEndElement(); |
71 | SerializeLLSDType(writer, fieldValue); | 73 | SerializeLLSDType(writer, fieldValue); |
72 | } | 74 | } |
73 | else | 75 | else |
74 | { | 76 | { |
75 | writer.WriteStartElement(String.Empty, "key", String.Empty); | 77 | writer.WriteStartElement(String.Empty, "key", String.Empty); |
76 | writer.WriteString(fields[i].Name); | 78 | string fieldName = fields[i].Name; |
79 | fieldName = fieldName.Replace("___", "-"); | ||
80 | writer.WriteString(fieldName); | ||
77 | writer.WriteEndElement(); | 81 | writer.WriteEndElement(); |
78 | LLSD.LLSDWriteOne(writer, fieldValue); | 82 | LLSD.LLSDWriteOne(writer, fieldValue); |
79 | // libsecondlife.StructuredData.LLSDParser.SerializeXmlElement( | 83 | // libsecondlife.StructuredData.LLSDParser.SerializeXmlElement( |
@@ -118,7 +122,9 @@ namespace OpenSim.Region.Capabilities | |||
118 | IDictionaryEnumerator enumerator = llsd.GetEnumerator(); | 122 | IDictionaryEnumerator enumerator = llsd.GetEnumerator(); |
119 | while (enumerator.MoveNext()) | 123 | while (enumerator.MoveNext()) |
120 | { | 124 | { |
121 | FieldInfo field = myType.GetField((string) enumerator.Key); | 125 | string keyName = (string)enumerator.Key; |
126 | keyName = keyName.Replace("-","_"); | ||
127 | FieldInfo field = myType.GetField(keyName); | ||
122 | if (field != null) | 128 | if (field != null) |
123 | { | 129 | { |
124 | // if (enumerator.Value is libsecondlife.StructuredData.LLSDMap) | 130 | // if (enumerator.Value is libsecondlife.StructuredData.LLSDMap) |
diff --git a/OpenSim/Framework/Communications/Capabilities/LLSDInventoryItem.cs b/OpenSim/Framework/Communications/Capabilities/LLSDInventoryItem.cs new file mode 100644 index 0000000..2d1d441 --- /dev/null +++ b/OpenSim/Framework/Communications/Capabilities/LLSDInventoryItem.cs | |||
@@ -0,0 +1,83 @@ | |||
1 | using System; | ||
2 | using System.Collections.Generic; | ||
3 | using System.Text; | ||
4 | using libsecondlife; | ||
5 | |||
6 | namespace OpenSim.Region.Capabilities | ||
7 | { | ||
8 | [LLSDMap] | ||
9 | public class LLSDInventoryItem | ||
10 | { | ||
11 | public LLUUID parent_id; | ||
12 | |||
13 | public LLUUID asset_id; | ||
14 | public LLUUID item_id; | ||
15 | |||
16 | public string type; | ||
17 | public string inv_type; | ||
18 | public int flags; | ||
19 | |||
20 | public LLSDSaleInfo sale_info; | ||
21 | public string name; | ||
22 | public string desc; | ||
23 | public int created_at; | ||
24 | |||
25 | } | ||
26 | |||
27 | [LLSDMap] | ||
28 | public class LLSDPermissions | ||
29 | { | ||
30 | public LLUUID creator_id; | ||
31 | public LLUUID owner_id; | ||
32 | public LLUUID group_id; | ||
33 | public int base_mask; | ||
34 | public int owner_mask; | ||
35 | public int group_mask; | ||
36 | public int everyone_mask; | ||
37 | public int next_owner_mask; | ||
38 | public bool is_owner_group; | ||
39 | } | ||
40 | |||
41 | [LLSDMap] | ||
42 | public class LLSDSaleInfo | ||
43 | { | ||
44 | public int sale_price; | ||
45 | public string sale_type; | ||
46 | } | ||
47 | |||
48 | /* [LLSDMap] | ||
49 | public class LLSDFolderItem | ||
50 | { | ||
51 | public LLUUID folder_id; | ||
52 | public LLUUID parent_id; | ||
53 | public int type; | ||
54 | public string name; | ||
55 | }*/ | ||
56 | |||
57 | [LLSDMap] | ||
58 | public class LLSDInventoryDescendents | ||
59 | { | ||
60 | public LLSDArray folders= new LLSDArray(); | ||
61 | } | ||
62 | |||
63 | [LLSDMap] | ||
64 | public class LLSDFetchInventoryDescendents | ||
65 | { | ||
66 | public LLUUID folder_id; | ||
67 | public LLUUID owner_id; | ||
68 | public int sort_order; | ||
69 | public bool fetch_folders; | ||
70 | public bool fetch_items; | ||
71 | } | ||
72 | |||
73 | [LLSDMap] | ||
74 | public class LLSDInventoryFolderContents | ||
75 | { | ||
76 | public LLUUID agent___id; | ||
77 | public int descendents; | ||
78 | public LLUUID folder___id; // the (three "_") "___" so the serialising knows to change this to a "-" | ||
79 | public LLSDArray items = new LLSDArray(); | ||
80 | public LLUUID owner___id; | ||
81 | public int version; | ||
82 | } | ||
83 | } | ||