/// <summary> /// On our own thread, make the synchronous texture request from the asset server /// </summary> /// <param name="qInstance"></param> /// <param name="obinID"></param> /// <returns></returns> private bool ThrottleTextureMakeRequest(DoLaterBase qInstance, Object obinID) { OMV.UUID binID = (OMV.UUID)obinID; Uri assetPath = new Uri(m_baseUri.ToString() + "?texture_id=" + binID.ToString()); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(assetPath); request.MaximumAutomaticRedirections = 4; request.MaximumResponseHeadersLength = 4; request.Timeout = 30000; // 30 second timeout if (m_proxyPath != null) { // configure proxy if necessary WebProxy myProxy = new WebProxy(); myProxy.Address = new Uri(m_proxyPath); request.Proxy = myProxy; } try { m_log.Log(LogLevel.DCOMMDETAIL, "ThrottleTextureMakeRequest: requesting '{0}'", assetPath); using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) { m_log.Log(LogLevel.DCOMMDETAIL, "ThrottleTextureMakeRequest: request returned. resp={0}, l={1}", response.StatusCode, response.ContentLength); if (response.StatusCode == HttpStatusCode.OK) { using (Stream receiveStream = response.GetResponseStream()) { OMV.Assets.AssetTexture at; if (m_dataFetch) { // we're getting raw binary data byte[] textureBuff = new byte[response.ContentLength]; receiveStream.Read(textureBuff, 0, (int)response.ContentLength); at = new OMV.Assets.AssetTexture(binID, textureBuff); } else { // receiving a serialized package XmlSerializer xserial = new XmlSerializer(typeof(OpenSim.Framework.AssetBase)); OpenSim.Framework.AssetBase abase = (OpenSim.Framework.AssetBase)xserial.Deserialize(receiveStream); at = new OMV.Assets.AssetTexture(binID, abase.Data); } ProcessDownloadFinished(OMV.TextureRequestState.Finished, at); } } else { m_log.Log(LogLevel.DCOMMDETAIL, "ThrottleTextureMakeRequest: Non-OK status code"); OMV.Assets.AssetTexture at = new OMV.Assets.AssetTexture(binID, new byte[0]); ProcessDownloadFinished(OMV.TextureRequestState.NotFound, at); } } } catch (Exception e) { m_log.Log(LogLevel.DBADERROR, "Error fetching asset: {0}", e); OMV.Assets.AssetTexture at = new OMV.Assets.AssetTexture(binID, new byte[0]); ProcessDownloadFinished(OMV.TextureRequestState.NotFound, at); } return(true); }
/// <summary> /// Converts from an opensim asset to a stratus asset /// </summary> /// <param name="asset"></param> /// <returns></returns> internal static StratusAsset FromAssetBase(OpenSim.Framework.AssetBase asset) { return(new StratusAsset { CreateTime = asset.Metadata.CreationDate, Data = asset.Data, Description = asset.Description, Id = asset.FullID.Guid, Local = asset.Local, Name = asset.Name, Temporary = asset.Temporary, Type = asset.Type }); }
/// <summary> /// Converts from a stratus asset to an opensim asset /// </summary> /// <returns></returns> internal OpenSim.Framework.AssetBase ToAssetBase() { OpenSim.Framework.AssetBase asset = new OpenSim.Framework.AssetBase { Data = this.Data, Description = this.Description, ID = new OpenMetaverse.UUID(this.Id).ToString(), FullID = new OpenMetaverse.UUID(this.Id), Local = this.Local, Name = this.Name, Temporary = this.Temporary, Type = this.Type, }; asset.Metadata.CreationDate = CreateTime; return(asset); }
/// <summary> /// Converts from a stratus asset to an opensim asset /// </summary> /// <returns></returns> internal OpenSim.Framework.AssetBase ToAssetBase() { OpenSim.Framework.AssetBase asset = new OpenSim.Framework.AssetBase { Data = this.Data, Description = this.Description, ID = new OpenMetaverse.UUID(this.Id).ToString(), FullID = new OpenMetaverse.UUID(this.Id), Local = this.Local, Name = this.Name, Temporary = this.Temporary, Type = this.Type, }; asset.Metadata.CreationDate = CreateTime; return asset; }