Implement UploadBakedTexture cap
							parent
							
								
									fd28b59768
								
							
						
					
					
						commit
						afd2bf5769
					
				|  | @ -44,6 +44,8 @@ namespace OpenSim.Framework.Capabilities | |||
|         string assetName, string description, UUID assetID, UUID inventoryItem, UUID parentFolder, | ||||
|         byte[] data, string inventoryType, string assetType); | ||||
| 
 | ||||
|     public delegate void UploadedBakedTexture(UUID assetID, byte[] data); | ||||
| 
 | ||||
|     public delegate UUID UpdateItem(UUID itemID, byte[] data); | ||||
| 
 | ||||
|     public delegate void UpdateTaskScript(UUID itemID, UUID primID, bool isScriptRunning, byte[] data, ref ArrayList errors); | ||||
|  | @ -97,6 +99,7 @@ namespace OpenSim.Framework.Capabilities | |||
|         // private static readonly string m_provisionVoiceAccountRequestPath = "0008/";// This is in a module. | ||||
| 
 | ||||
|         // private static readonly string m_remoteParcelRequestPath = "0009/";// This is in the LandManagementModule. | ||||
|         private static readonly string m_uploadBakedTexturePath = "0010/";// This is in the LandManagementModule. | ||||
| 
 | ||||
|         //private string eventQueue = "0100/"; | ||||
|         private IScene m_Scene; | ||||
|  | @ -185,6 +188,8 @@ namespace OpenSim.Framework.Capabilities | |||
|                 m_capsHandlers["UpdateScriptTaskInventory"] = | ||||
|                     new RestStreamHandler("POST", capsBase + m_notecardTaskUpdatePath, ScriptTaskInventory); | ||||
|                 m_capsHandlers["UpdateScriptTask"] = m_capsHandlers["UpdateScriptTaskInventory"]; | ||||
|                 m_capsHandlers["UploadBakedTexture"] = | ||||
|                     new RestStreamHandler("POST", capsBase + m_uploadBakedTexturePath, UploadBakedTexture); | ||||
| 
 | ||||
|             } | ||||
|             catch (Exception e) | ||||
|  | @ -742,6 +747,50 @@ namespace OpenSim.Framework.Capabilities | |||
|             return null; | ||||
|         } | ||||
| 
 | ||||
|         public string UploadBakedTexture(string request, string path, | ||||
|                 string param, OSHttpRequest httpRequest, | ||||
|                 OSHttpResponse httpResponse) | ||||
|         { | ||||
|             try | ||||
|             { | ||||
|                 m_log.Debug("[CAPS]: UploadBakedTexture Request in region: " + | ||||
|                         m_regionName); | ||||
| 
 | ||||
|                 string capsBase = "/CAPS/" + m_capsObjectPath; | ||||
|                 string uploaderPath = Util.RandomClass.Next(5000, 8000).ToString("0000"); | ||||
| 
 | ||||
|                 BakedTextureUploader uploader = | ||||
|                     new BakedTextureUploader( capsBase + uploaderPath, | ||||
|                         m_httpListener); | ||||
|                 uploader.OnUpLoad += BakedTextureUploaded; | ||||
| 
 | ||||
|                 m_httpListener.AddStreamHandler( | ||||
|                         new BinaryStreamHandler("POST", capsBase + uploaderPath, | ||||
|                         uploader.uploaderCaps)); | ||||
| 
 | ||||
|                 string protocol = "http://"; | ||||
| 
 | ||||
|                 if (m_httpListener.UseSSL) | ||||
|                     protocol = "https://"; | ||||
| 
 | ||||
|                 string uploaderURL = protocol + m_httpListenerHostName + ":" + | ||||
|                         m_httpListenPort.ToString() + capsBase + uploaderPath; | ||||
| 
 | ||||
|                 LLSDAssetUploadResponse uploadResponse = | ||||
|                         new LLSDAssetUploadResponse(); | ||||
|                 uploadResponse.uploader = uploaderURL; | ||||
|                 uploadResponse.state = "upload"; | ||||
| 
 | ||||
|                 return LLSDHelpers.SerialiseLLSDReply(uploadResponse); | ||||
|             } | ||||
|             catch (Exception e) | ||||
|             { | ||||
|                 m_log.Error("[CAPS]: " + e.ToString()); | ||||
|             } | ||||
| 
 | ||||
|             return null; | ||||
|         } | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// Called by the notecard update handler.  Provides a URL to which the client can upload a new asset. | ||||
|         /// </summary> | ||||
|  | @ -925,6 +974,17 @@ namespace OpenSim.Framework.Capabilities | |||
|             } | ||||
|         } | ||||
| 
 | ||||
|         public void BakedTextureUploaded(UUID assetID, byte[] data) | ||||
|         { | ||||
|             m_log.DebugFormat("[CAPS]: Received baked texture {0}", assetID.ToString()); | ||||
|             AssetBase asset; | ||||
|             asset = new AssetBase(assetID, "Baked Texture", (sbyte)AssetType.Texture, m_agentID.ToString()); | ||||
|             asset.Data = data; | ||||
|             asset.Temporary = true; | ||||
|             asset.Local = true; | ||||
|             m_assetCache.Store(asset); | ||||
|         } | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// Called when new asset data for an agent inventory item update has been uploaded. | ||||
|         /// </summary> | ||||
|  | @ -1243,5 +1303,50 @@ namespace OpenSim.Framework.Capabilities | |||
|                 fs.Close(); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         public class BakedTextureUploader | ||||
|         { | ||||
|             public event UploadedBakedTexture OnUpLoad; | ||||
|             private UploadedBakedTexture handlerUpLoad = null; | ||||
| 
 | ||||
|             private string uploaderPath = String.Empty; | ||||
|             private UUID newAssetID; | ||||
|             private IHttpServer httpListener; | ||||
| 
 | ||||
|             public BakedTextureUploader(string path, IHttpServer httpServer) | ||||
|             { | ||||
|                 newAssetID = UUID.Random(); | ||||
|                 uploaderPath = path; | ||||
|                 httpListener = httpServer; | ||||
|             } | ||||
| 
 | ||||
|             /// <summary> | ||||
|             /// | ||||
|             /// </summary> | ||||
|             /// <param name="data"></param> | ||||
|             /// <param name="path"></param> | ||||
|             /// <param name="param"></param> | ||||
|             /// <returns></returns> | ||||
|             public string uploaderCaps(byte[] data, string path, string param) | ||||
|             { | ||||
|                 string res = String.Empty; | ||||
|                 LLSDAssetUploadComplete uploadComplete = new LLSDAssetUploadComplete(); | ||||
|                 uploadComplete.new_asset = newAssetID.ToString(); | ||||
|                 uploadComplete.new_inventory_item = UUID.Zero; | ||||
|                 uploadComplete.state = "complete"; | ||||
| 
 | ||||
|                 res = LLSDHelpers.SerialiseLLSDReply(uploadComplete); | ||||
| 
 | ||||
|                 httpListener.RemoveStreamHandler("POST", uploaderPath); | ||||
| 
 | ||||
|                 handlerUpLoad = OnUpLoad; | ||||
|                 if (handlerUpLoad != null) | ||||
|                 { | ||||
|                     handlerUpLoad(newAssetID, data); | ||||
|                 } | ||||
| 
 | ||||
|                 return res; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Melanie Thielker
						Melanie Thielker