aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--OpenSim/Region/Environment/Scenes/Scene.Inventory.cs4
-rw-r--r--OpenSim/Region/Environment/Scenes/SceneEvents.cs6
-rw-r--r--OpenSim/Region/Environment/XferManagaer.cs142
3 files changed, 147 insertions, 5 deletions
diff --git a/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs b/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs
index bf7bb7e..fa1b865 100644
--- a/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs
+++ b/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs
@@ -229,7 +229,7 @@ namespace OpenSim.Region.Environment.Scenes
229 { 229 {
230 string script = Util.FieldToString(rezAsset.Data); 230 string script = Util.FieldToString(rezAsset.Data);
231 //Console.WriteLine("rez script "+script); 231 //Console.WriteLine("rez script "+script);
232 this.EventManager.TriggerRezScript(localID, script); 232 this.EventManager.TriggerRezScript(localID, itemID, script);
233 rezzed = true; 233 rezzed = true;
234 } 234 }
235 else 235 else
@@ -240,7 +240,7 @@ namespace OpenSim.Region.Environment.Scenes
240 { 240 {
241 string script = Util.FieldToString(rezAsset.Data); 241 string script = Util.FieldToString(rezAsset.Data);
242 // Console.WriteLine("rez script " + script); 242 // Console.WriteLine("rez script " + script);
243 this.EventManager.TriggerRezScript(localID, script); 243 this.EventManager.TriggerRezScript(localID, itemID, script);
244 rezzed = true; 244 rezzed = true;
245 } 245 }
246 } 246 }
diff --git a/OpenSim/Region/Environment/Scenes/SceneEvents.cs b/OpenSim/Region/Environment/Scenes/SceneEvents.cs
index 89aeda6..09a7f21 100644
--- a/OpenSim/Region/Environment/Scenes/SceneEvents.cs
+++ b/OpenSim/Region/Environment/Scenes/SceneEvents.cs
@@ -37,7 +37,7 @@ namespace OpenSim.Region.Environment.Scenes
37 public event ObjectGrabDelegate OnObjectGrab; 37 public event ObjectGrabDelegate OnObjectGrab;
38 public event OnPermissionErrorDelegate OnPermissionError; 38 public event OnPermissionErrorDelegate OnPermissionError;
39 39
40 public delegate void NewRezScript(uint localID, string script); 40 public delegate void NewRezScript(uint localID, LLUUID itemID, string script);
41 public event NewRezScript OnRezScript; 41 public event NewRezScript OnRezScript;
42 42
43 43
@@ -110,11 +110,11 @@ namespace OpenSim.Region.Environment.Scenes
110 OnObjectGrab(localID, offsetPos, remoteClient); 110 OnObjectGrab(localID, offsetPos, remoteClient);
111 } 111 }
112 112
113 public void TriggerRezScript(uint localID, string script) 113 public void TriggerRezScript(uint localID, LLUUID itemID, string script)
114 { 114 {
115 if (OnRezScript != null) 115 if (OnRezScript != null)
116 { 116 {
117 OnRezScript(localID, script); 117 OnRezScript(localID, itemID, script);
118 } 118 }
119 } 119 }
120 } 120 }
diff --git a/OpenSim/Region/Environment/XferManagaer.cs b/OpenSim/Region/Environment/XferManagaer.cs
new file mode 100644
index 0000000..30fbaf0
--- /dev/null
+++ b/OpenSim/Region/Environment/XferManagaer.cs
@@ -0,0 +1,142 @@
1using System;
2using System.Collections.Generic;
3using System.Text;
4
5using libsecondlife;
6using OpenSim.Framework.Interfaces;
7using OpenSim.Framework.Utilities;
8
9namespace OpenSim.Region.Environment
10{
11 public class XferManagaer
12 {
13 public Dictionary<string, byte[]> NewFiles = new Dictionary<string, byte[]>();
14 public Dictionary<ulong, XferDownLoad> Transfers = new Dictionary<ulong, XferDownLoad>();
15
16 public XferManagaer()
17 {
18
19 }
20
21 /// <summary>
22 ///
23 /// </summary>
24 /// <param name="remoteClient"></param>
25 /// <param name="xferID"></param>
26 /// <param name="fileName"></param>
27 public void RequestXfer(IClientAPI remoteClient, ulong xferID, string fileName)
28 {
29 Console.WriteLine("xfer request for " + fileName);
30 lock (NewFiles)
31 {
32 if (NewFiles.ContainsKey(fileName))
33 {
34 if (!Transfers.ContainsKey(xferID))
35 {
36 byte[] fileData = NewFiles[fileName];
37 XferDownLoad transaction = new XferDownLoad(fileName, fileData, xferID, remoteClient);
38 Transfers.Add(xferID, transaction);
39 NewFiles.Remove(fileName);
40 transaction.StartSend();
41 }
42 }
43 }
44 }
45
46 public void AckPacket(IClientAPI remoteClient, ulong xferID, uint packet)
47 {
48 if (this.Transfers.ContainsKey(xferID))
49 {
50 Transfers[xferID].AckPacket(packet);
51 }
52 }
53
54 public void AddNewFile(string fileName, byte[] data)
55 {
56 lock (NewFiles)
57 {
58 if (NewFiles.ContainsKey(fileName))
59 {
60 NewFiles[fileName] = data;
61 }
62 else
63 {
64 NewFiles.Add(fileName, data);
65 }
66 }
67 }
68
69 public class XferDownLoad
70 {
71 public byte[] Data = new byte[0];
72 public string FileName = "";
73 public ulong XferID = 0;
74 public int DataPointer = 0;
75 public uint Packet = 0;
76 public IClientAPI Client;
77 public uint Serial = 1;
78 private bool complete = false;
79
80 public XferDownLoad(string fileName, byte[] data, ulong xferID, IClientAPI client)
81 {
82 FileName = fileName;
83 Data = data;
84 XferID = xferID;
85 Client = client;
86 }
87
88 public XferDownLoad()
89 {
90
91 }
92
93 public void StartSend()
94 {
95 if (Data.Length < 1000)
96 {
97 // for now (testing ) we only support files under 1000 bytes
98 byte[] transferData = new byte[Data.Length + 4];
99 Array.Copy(Helpers.IntToBytes(Data.Length), 0, transferData, 0, 4);
100 Array.Copy(Data, 0, transferData, 4, Data.Length);
101 Client.SendXferPacket(XferID, 0 + 0x80000000, transferData);
102 complete = true;
103 Console.WriteLine("xfer is under 1000 bytes");
104 }
105 else
106 {
107 byte[] transferData = new byte[1000 +4];
108 Array.Copy(Helpers.IntToBytes(Data.Length), 0, transferData, 0, 4);
109 Array.Copy(Data, 0, transferData, 4, 1000);
110 Client.SendXferPacket(XferID, 0 , transferData);
111 Packet++;
112 DataPointer = 1000;
113 }
114 }
115
116 public void AckPacket(uint packet)
117 {
118 if (!complete)
119 {
120 if ((Data.Length - DataPointer) > 1000)
121 {
122 byte[] transferData = new byte[1000];
123 Array.Copy(Data, DataPointer, transferData, 0, 1000);
124 Client.SendXferPacket(XferID, Packet, transferData);
125 Packet++;
126 DataPointer += 1000;
127 }
128 else
129 {
130 byte[] transferData = new byte[Data.Length - DataPointer];
131 Array.Copy(Data, DataPointer, transferData, 0, Data.Length - DataPointer);
132 uint endPacket = Packet |= (uint)0x80000000;
133 Client.SendXferPacket(XferID, endPacket, transferData);
134 Packet++;
135 DataPointer += (Data.Length - DataPointer);
136 complete = true;
137 }
138 }
139 }
140 }
141 }
142}