private void UploadBakedTextureDataHandler(Capability cap, IHttpClientContext context, IHttpRequest request, IHttpResponse response) { byte[] textureData = request.GetBody(); UUID assetID = UUID.Zero; m_log.Debug("Received baked texture upload from " + cap.OwnerID + " (" + textureData.Length + " bytes)"); if (textureData != null && textureData.Length > 0) { if (!m_assetClient.StoreAsset("image/x-j2c", true, true, textureData, cap.OwnerID, out assetID)) { m_log.WarnFormat("Failed to store uploaded texture bake ({0} bytes)", textureData.Length); } } else { m_log.Warn("Texture bake upload contained no data"); } UploadBakedTextureMessage reply = new UploadBakedTextureMessage(); UploaderRequestComplete replyBlock = new UploaderRequestComplete(); replyBlock.AssetID = assetID; reply.Request = replyBlock; LLUtil.SendLLSDXMLResponse(response, reply.Serialize()); }
private void NewFileAgentInventoryUploadHandler(NewFileAgentInventoryMessage message, Capability cap, IHttpClientContext context, IHttpRequest request, IHttpResponse response) { byte[] assetData = request.GetBody(); UUID assetID = UUID.Zero; UUID itemID = UUID.Zero; m_log.Debug("Received inventory asset upload from " + cap.OwnerID + " (" + assetData.Length + " bytes)"); if (assetData != null && assetData.Length > 0) { string contentType = LLUtil.LLAssetTypeToContentType((int)message.AssetType); // Create the asset if (m_assetClient.StoreAsset(contentType, false, false, assetData, cap.OwnerID, out assetID)) { // Create the inventory item LLInventoryItem item = new LLInventoryItem(); item.AssetID = assetID; item.ContentType = contentType; item.CreationDate = DateTime.UtcNow; item.CreatorID = cap.OwnerID; item.Description = message.Description; item.ID = UUID.Random(); item.Name = message.Name; item.OwnerID = cap.OwnerID; item.ParentID = message.FolderID; item.Permissions = (m_permissions != null) ? m_permissions.GetDefaultPermissions() : Permissions.FullPermissions; item.SalePrice = 10; item.SaleType = SaleType.Not; if (m_inventoryClient.TryCreateItem(cap.OwnerID, item)) { itemID = item.ID; } else { m_log.Warn("Failed to create inventory item for uploaded asset " + assetID); } } else { m_log.WarnFormat("Failed to store uploaded inventory asset ({0} bytes)", assetData.Length); } } else { m_log.Warn("Inventory asset upload contained no data"); } // Build the response message OSDMap reply = new OSDMap { { "state", OSD.FromString("complete") }, { "new_asset", OSD.FromUUID(assetID) }, { "new_inventory_item", OSD.FromUUID(itemID) } }; LLUtil.SendLLSDXMLResponse(response, reply); }
private void UploadBakedTextureHandler(Capability cap, IHttpClientContext context, IHttpRequest request, IHttpResponse response) { UploadBakedTextureMessage reply = new UploadBakedTextureMessage(); UploaderRequestUpload replyBlock = new UploaderRequestUpload(); // Create a temporary uploader capability replyBlock.Url = m_scene.Capabilities.AddCapability(cap.OwnerID, true, m_scene.ID, "UploadBakedTextureData"); reply.Request = replyBlock; m_log.Debug("Created baked texture upload capability " + replyBlock.Url + " for " + cap.OwnerID); LLUtil.SendLLSDXMLResponse(response, reply.Serialize()); }
private void NewFileAgentInventoryVariablePriceHandler(Capability cap, IHttpClientContext context, IHttpRequest request, IHttpResponse response) { NewFileAgentInventoryVariablePriceMessage message; if (LLUtil.TryGetMessage <NewFileAgentInventoryVariablePriceMessage>(request.Body, out message)) { NewFileAgentInventoryVariablePriceReplyMessage reply = new NewFileAgentInventoryVariablePriceReplyMessage(); reply.ResourceCost = 0; reply.UploadPrice = 0; // Create a one time upload capability reply.Rsvp = m_scene.Capabilities.AddOneTimeCapability(cap.OwnerID, true, delegate(Capability _cap, IHttpClientContext _context, IHttpRequest _request, IHttpResponse _response) { NewFileAgentInventoryVariablePriceUploadHandler(message, _cap, _context, _request, _response); } ); LLUtil.SendLLSDXMLResponse(response, reply.Serialize()); } else { m_log.Warn("Received invalid data for NewFileAgentInventoryVariablePrice"); response.Status = System.Net.HttpStatusCode.BadRequest; } }
private void NewFileAgentInventoryVariablePriceUploadHandler(NewFileAgentInventoryVariablePriceMessage message, Capability cap, IHttpClientContext context, IHttpRequest request, IHttpResponse response) { byte[] assetData = request.GetBody(); UUID assetID = UUID.Zero; LLInventoryItem item = null; m_log.Debug("Received inventory asset upload from " + cap.OwnerID + " (" + assetData.Length + " bytes)"); if (assetData != null && assetData.Length > 0) { string contentType = LLUtil.LLAssetTypeToContentType((int)message.AssetType); // Create the asset if (m_assetClient.StoreAsset(contentType, false, false, assetData, cap.OwnerID, out assetID)) { // Create the inventory item item = new LLInventoryItem(); item.AssetID = assetID; item.ContentType = contentType; item.CreationDate = DateTime.UtcNow; item.CreatorID = cap.OwnerID; item.Description = message.Description; item.ID = UUID.Random(); item.Name = message.Name; item.OwnerID = cap.OwnerID; item.ParentID = message.FolderID; Permissions perms = (m_permissions != null) ? m_permissions.GetDefaultPermissions() : Permissions.FullPermissions; perms.EveryoneMask = message.EveryoneMask; perms.GroupMask = message.GroupMask; perms.NextOwnerMask = message.NextOwnerMask; item.Permissions = perms; item.SalePrice = 10; item.SaleType = SaleType.Not; if (!m_inventoryClient.TryCreateItem(cap.OwnerID, item)) { m_log.Warn("Failed to create inventory item for uploaded asset " + assetID); } } else { m_log.WarnFormat("Failed to store uploaded inventory asset ({0} bytes)", assetData.Length); } } else { m_log.Warn("Inventory asset upload contained no data"); } // Build the response message NewFileAgentInventoryUploadReplyMessage reply = new NewFileAgentInventoryUploadReplyMessage(); reply.NewAsset = assetID; if (item != null) { reply.NewInventoryItem = item.ID; reply.NewBaseMask = item.Permissions.BaseMask; reply.NewEveryoneMask = item.Permissions.EveryoneMask; reply.NewNextOwnerMask = item.Permissions.NextOwnerMask; reply.NewOwnerMask = item.Permissions.OwnerMask; } LLUtil.SendLLSDXMLResponse(response, reply.Serialize()); }
private void ObjectMediaHandler(Capability cap, IHttpClientContext context, IHttpRequest request, IHttpResponse response) { ObjectMediaMessage message; if (LLUtil.TryGetMessage <ObjectMediaMessage>(request.Body, out message)) { if (message.Request is ObjectMediaRequest) { ObjectMediaRequest mediaRequest = (ObjectMediaRequest)message.Request; ISceneEntity entity; if (m_scene.TryGetEntity(mediaRequest.PrimID, out entity) && entity is LLPrimitive) { LLPrimitive prim = (LLPrimitive)entity; ObjectMediaResponse reply = new ObjectMediaResponse(); reply.PrimID = prim.ID; reply.FaceMedia = prim.Prim.FaceMedia ?? new MediaEntry[0]; reply.Version = prim.Prim.MediaVersion ?? String.Empty; LLUtil.SendLLSDXMLResponse(response, reply.Serialize()); } else { m_log.Warn("Received an ObjectMedia request for unknown prim " + mediaRequest.PrimID); } } else if (message.Request is ObjectMediaUpdate) { ObjectMediaUpdate update = (ObjectMediaUpdate)message.Request; ISceneEntity entity; if (m_scene.TryGetEntity(update.PrimID, out entity) && entity is LLPrimitive) { LLPrimitive prim = (LLPrimitive)entity; int lastVersion = ParseMediaVersion(prim.Prim.MediaVersion); prim.Prim.FaceMedia = update.FaceMedia; prim.Prim.MediaVersion = CreateMediaVersion(lastVersion + 1, cap.OwnerID); // Set the CurrentURL fields for (int i = 0; i < prim.Prim.FaceMedia.Length; i++) { MediaEntry entry = prim.Prim.FaceMedia[i]; if (entry != null && String.IsNullOrEmpty(entry.CurrentURL)) { entry.CurrentURL = entry.HomeURL; } } // Set the texture face media flags for (int i = 0; i < prim.Prim.Textures.FaceTextures.Length; i++) { Primitive.TextureEntryFace face = prim.Prim.Textures.FaceTextures[i]; MediaEntry entry = (update.FaceMedia.Length > i) ? update.FaceMedia[i] : null; if (entry != null) { if (face == null) { face = prim.Prim.Textures.CreateFace((uint)i); } face.MediaFlags = true; } else if (face != null) { face.MediaFlags = false; } } m_scene.EntityAddOrUpdate(this, prim, UpdateFlags.FullUpdate, 0); } else { m_log.Warn("Could not update ObjectMedia for " + update.PrimID + ", prim not found"); } } else { m_log.Warn("Unrecognized ObjectMedia message: " + message.Request); } } else { m_log.Warn("Received invalid data for ObjectMedia"); response.Status = System.Net.HttpStatusCode.BadRequest; } }