aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ClientStack
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs76
1 files changed, 76 insertions, 0 deletions
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
index ea2831c..b298578 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
@@ -6242,6 +6242,82 @@ namespace OpenSim.Region.ClientStack.LindenUDP
6242 OutPacket(lsrp, ThrottleOutPacketType.Task); 6242 OutPacket(lsrp, ThrottleOutPacketType.Task);
6243 } 6243 }
6244 6244
6245 public void SendAsset(AssetRequestToClient req)
6246 {
6247
6248 //Console.WriteLine("sending asset " + req.RequestAssetID);
6249 TransferInfoPacket Transfer = new TransferInfoPacket();
6250 Transfer.TransferInfo.ChannelType = 2;
6251 Transfer.TransferInfo.Status = 0;
6252 Transfer.TransferInfo.TargetType = 0;
6253 if (req.AssetRequestSource == 2)
6254 {
6255 Transfer.TransferInfo.Params = new byte[20];
6256 Array.Copy(req.RequestAssetID.GetBytes(), 0, Transfer.TransferInfo.Params, 0, 16);
6257 int assType = (int)req.AssetInf.Type;
6258 Array.Copy(Helpers.IntToBytes(assType), 0, Transfer.TransferInfo.Params, 16, 4);
6259 }
6260 else if (req.AssetRequestSource == 3)
6261 {
6262 Transfer.TransferInfo.Params = req.Params;
6263 // Transfer.TransferInfo.Params = new byte[100];
6264 //Array.Copy(req.RequestUser.AgentId.GetBytes(), 0, Transfer.TransferInfo.Params, 0, 16);
6265 //Array.Copy(req.RequestUser.SessionId.GetBytes(), 0, Transfer.TransferInfo.Params, 16, 16);
6266 }
6267 Transfer.TransferInfo.Size = (int)req.AssetInf.Data.Length;
6268 Transfer.TransferInfo.TransferID = req.TransferRequestID;
6269 Transfer.Header.Zerocoded = true;
6270 OutPacket(Transfer, ThrottleOutPacketType.Asset);
6271
6272 if (req.NumPackets == 1)
6273 {
6274 TransferPacketPacket TransferPacket = new TransferPacketPacket();
6275 TransferPacket.TransferData.Packet = 0;
6276 TransferPacket.TransferData.ChannelType = 2;
6277 TransferPacket.TransferData.TransferID = req.TransferRequestID;
6278 TransferPacket.TransferData.Data = req.AssetInf.Data;
6279 TransferPacket.TransferData.Status = 1;
6280 TransferPacket.Header.Zerocoded = true;
6281 OutPacket(TransferPacket, ThrottleOutPacketType.Asset);
6282 }
6283 else
6284 {
6285 int processedLength = 0;
6286 // libsecondlife hardcodes 1500 as the maximum data chunk size
6287 int maxChunkSize = 1250;
6288 int packetNumber = 0;
6289
6290 while (processedLength < req.AssetInf.Data.Length)
6291 {
6292 TransferPacketPacket TransferPacket = new TransferPacketPacket();
6293 TransferPacket.TransferData.Packet = packetNumber;
6294 TransferPacket.TransferData.ChannelType = 2;
6295 TransferPacket.TransferData.TransferID = req.TransferRequestID;
6296
6297 int chunkSize = Math.Min(req.AssetInf.Data.Length - processedLength, maxChunkSize);
6298 byte[] chunk = new byte[chunkSize];
6299 Array.Copy(req.AssetInf.Data, processedLength, chunk, 0, chunk.Length);
6300
6301 TransferPacket.TransferData.Data = chunk;
6302
6303 // 0 indicates more packets to come, 1 indicates last packet
6304 if (req.AssetInf.Data.Length - processedLength > maxChunkSize)
6305 {
6306 TransferPacket.TransferData.Status = 0;
6307 }
6308 else
6309 {
6310 TransferPacket.TransferData.Status = 1;
6311 }
6312 TransferPacket.Header.Zerocoded = true;
6313 OutPacket(TransferPacket, ThrottleOutPacketType.Asset);
6314
6315 processedLength += chunkSize;
6316 packetNumber++;
6317 }
6318 }
6319 }
6320
6245 public ClientInfo GetClientInfo() 6321 public ClientInfo GetClientInfo()
6246 { 6322 {
6247 //MainLog.Instance.Verbose("CLIENT", "GetClientInfo BGN"); 6323 //MainLog.Instance.Verbose("CLIENT", "GetClientInfo BGN");