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()));
        }