public override byte[] Handle(string path, Stream request, OSHttpRequest httpRequest, OSHttpResponse httpResponse) { CreateAssetReplyMessage reply = new CreateAssetReplyMessage(); reply.AssetID = UUID.Zero; reply.AssetUri = null; try { OSD osdata = OSDParser.DeserializeJson(httpRequest.InputStream); if (osdata.Type == OSDType.Map) { CreateAssetMessage message = new CreateAssetMessage(); message.Deserialize((OSDMap)osdata); byte[] assetData = null; try { assetData = Convert.FromBase64String(message.Base64Data); } catch (Exception) { } if (assetData != null && assetData.Length > 0) { AssetBase asset = new AssetBase( (message.Metadata.ID != UUID.Zero) ? message.Metadata.ID : UUID.Random(), message.Metadata.Name, CableBeachUtils.ContentTypeToSLAssetType(message.Metadata.ContentType) ); asset.Data = assetData; asset.Metadata.ContentType = message.Metadata.ContentType; asset.Metadata.CreationDate = DateTime.Now; asset.Metadata.Description = message.Metadata.Description; asset.Metadata.ID = asset.Metadata.FullID.ToString(); asset.Metadata.Local = false; asset.Metadata.SHA1 = OpenMetaverse.Utils.EmptyBytes; // TODO: Calculate the SHA-1 hash of the asset here? asset.Metadata.Temporary = message.Metadata.Temporary; string assetID = m_AssetService.Store(asset); if (!String.IsNullOrEmpty(assetID)) { reply.AssetID = message.Metadata.ID; httpResponse.StatusCode = (int)HttpStatusCode.Created; } else { httpResponse.StatusCode = (int)HttpStatusCode.InternalServerError; } } else { httpResponse.StatusCode = (int)HttpStatusCode.BadRequest; } } } catch (Exception) { httpResponse.StatusCode = (int)HttpStatusCode.InternalServerError; } httpResponse.ContentType = "application/json"; httpResponse.ContentEncoding = Encoding.UTF8; return Encoding.UTF8.GetBytes(OSDParser.SerializeJsonString(reply.Serialize())); }