From e0765fa6c8fbcb385802d194a7bf08b4e686553a Mon Sep 17 00:00:00 2001 From: MW Date: Fri, 12 Dec 2008 22:20:13 +0000 Subject: more work on moving FileTransfer code to the clientstack. Although its still not enabled. --- OpenSim/Framework/IClientFileTransfer.cs | 3 +- .../Region/ClientStack/LindenUDP/LLFileTransfer.cs | 44 +++++++++++++++++++++- 2 files changed, 44 insertions(+), 3 deletions(-) diff --git a/OpenSim/Framework/IClientFileTransfer.cs b/OpenSim/Framework/IClientFileTransfer.cs index 8cdf795..ec8e623 100644 --- a/OpenSim/Framework/IClientFileTransfer.cs +++ b/OpenSim/Framework/IClientFileTransfer.cs @@ -1,10 +1,11 @@ using System; using System.Collections.Generic; using System.Text; +using OpenMetaverse; namespace OpenSim.Framework { - public delegate void UploadComplete(string filename, byte[] fileData, IClientAPI remoteClient); + public delegate void UploadComplete(string filename, UUID fileID, byte[] fileData, IClientAPI remoteClient); public delegate void UploadAborted(string filename, ulong id, IClientAPI remoteClient); public interface IClientFileTransfer diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLFileTransfer.cs b/OpenSim/Region/ClientStack/LindenUDP/LLFileTransfer.cs index b2e7bc4..5526a16 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLFileTransfer.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLFileTransfer.cs @@ -17,6 +17,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP { protected IClientAPI m_clientAPI; + /// Dictionary of handlers for uploading files from client + /// TODO: Need to add cleanup code to remove handlers that have completed their upload protected Dictionary m_handlers; protected object m_handlerLock = new object(); @@ -47,6 +49,24 @@ namespace OpenSim.Region.ClientStack.LindenUDP } XferHandler uploader = new XferHandler(m_clientAPI, clientFileName); + + return StartUpload(uploader, uploadCompleteCallback, abortCallback); + } + + public bool RequestUpload(UUID fileID, UploadComplete uploadCompleteCallback, UploadAborted abortCallback) + { + if ((fileID == UUID.Zero) || (uploadCompleteCallback == null)) + { + return false; + } + + XferHandler uploader = new XferHandler(m_clientAPI, fileID); + + return StartUpload(uploader, uploadCompleteCallback, abortCallback); + } + + private bool StartUpload(XferHandler uploader, UploadComplete uploadCompleteCallback, UploadAborted abortCallback) + { uploader.UploadDone += uploadCompleteCallback; if (abortCallback != null) @@ -133,6 +153,19 @@ namespace OpenSim.Region.ClientStack.LindenUDP mXferID = Util.GetNextXferID(); } + public XferHandler(IClientAPI pRemoteClient, UUID fileID) + { + m_asset = new AssetBase(); + m_asset.FullID = fileID; + m_asset.Type = type; + m_asset.Data = new byte[0]; + m_asset.Name = null; + m_asset.Description = "empty"; + m_asset.Local = true; + m_asset.Temporary = true; + mXferID = Util.GetNextXferID(); + } + public ulong XferID { get { return mXferID; } @@ -140,7 +173,14 @@ namespace OpenSim.Region.ClientStack.LindenUDP public void RequestStartXfer(IClientAPI pRemoteClient) { - pRemoteClient.SendXferRequest(mXferID, m_asset.Type, m_asset.FullID, 0, Utils.StringToBytes(m_asset.Name)); + if (m_asset.Name != null) + { + pRemoteClient.SendXferRequest(mXferID, m_asset.Type, m_asset.FullID, 0, Utils.StringToBytes(m_asset.Name)); + } + else + { + pRemoteClient.SendXferRequest(mXferID, m_asset.Type, m_asset.FullID, 0, new byte[0]); + } } /// @@ -183,7 +223,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP handlerUploadDone = UploadDone; if (handlerUploadDone != null) { - handlerUploadDone(m_asset.Name, m_asset.Data, remoteClient); + handlerUploadDone(m_asset.Name, m_asset.FullID, m_asset.Data, remoteClient); } } -- cgit v1.1