diff --git a/Programs/Simian/Extensions/AvatarPropertiesReply.cs b/Programs/Simian/Extensions/AvatarPropertiesReply.cs new file mode 100644 index 00000000..1c2a1347 --- /dev/null +++ b/Programs/Simian/Extensions/AvatarPropertiesReply.cs @@ -0,0 +1,61 @@ +using OpenMetaverse; +using OpenMetaverse.Packets; +using System; +using System.Collections.Generic; +using System.Text; + +namespace Simian.Extensions +{ + class AvatarPropertiesReply : ISimianExtension + { + Simian Server; + + public AvatarPropertiesReply(Simian server) + { + Server = server; + } + + public void Start() + { + Server.UDPServer.RegisterPacketCallback(PacketType.AvatarPropertiesRequest, new UDPServer.PacketCallback(AvatarPropertiesRequestHandler)); + } + + public void Stop() + { + } + + void AvatarPropertiesRequestHandler(Packet packet, Agent agent) + { + AvatarPropertiesRequestPacket request = (AvatarPropertiesRequestPacket)packet; + + lock (Server.Agents) + { + foreach (Agent agt in Server.Agents.Values) + { + if (agent.AgentID == request.AgentData.AvatarID) + { + AvatarPropertiesReplyPacket reply = new AvatarPropertiesReplyPacket(); + reply.AgentData.AgentID = agt.AgentID; + reply.AgentData.AvatarID = request.AgentData.AvatarID; + reply.PropertiesData.AboutText = Utils.StringToBytes("Profile info unavailable"); + reply.PropertiesData.BornOn = Utils.StringToBytes("Unknown"); + reply.PropertiesData.CharterMember = Utils.StringToBytes("Test User"); + reply.PropertiesData.FLAboutText = Utils.StringToBytes("First life info unavailable"); + reply.PropertiesData.Flags = 0; + //TODO: at least generate static image uuids based on name. + //this will prevent re-caching the default image for the same av name. + reply.PropertiesData.FLImageID = agent.AgentID; //temporary hack + reply.PropertiesData.ImageID = agent.AgentID; //temporary hack + reply.PropertiesData.PartnerID = UUID.Zero; + reply.PropertiesData.ProfileURL = Utils.StringToBytes(String.Empty); + + agent.SendPacket(reply); + + break; + } + } + } + } + + } +} diff --git a/Programs/Simian/Extensions/ImageDelivery.cs b/Programs/Simian/Extensions/ImageDelivery.cs new file mode 100644 index 00000000..5f056928 --- /dev/null +++ b/Programs/Simian/Extensions/ImageDelivery.cs @@ -0,0 +1,59 @@ +using OpenMetaverse; +using OpenMetaverse.Imaging; +using OpenMetaverse.Packets; +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Text; + +namespace Simian.Extensions +{ + public class ImageDelivery : ISimianExtension + { + Simian Server; + Bitmap DefaultImage; + + public ImageDelivery(Simian server) + { + Server = server; + } + + public void Start() + { + Server.UDPServer.RegisterPacketCallback(PacketType.RequestImage, new UDPServer.PacketCallback(RequestImageHandler)); + + if (DefaultImage != null) DefaultImage = null; + DefaultImage = new Bitmap(32, 32); + Graphics gfx = Graphics.FromImage(DefaultImage); + gfx.Clear(Color.White); + gfx.FillRectangles(Brushes.LightGray, new Rectangle[] { new Rectangle(16, 16, 16, 16), new Rectangle(0, 0, 16, 16) }); + gfx.DrawImage(DefaultImage, 0, 0, 32, 32); + } + + public void Stop() + { + } + + void RequestImageHandler(Packet packet, Agent agent) + { + RequestImagePacket request = (RequestImagePacket)packet; + + foreach (RequestImagePacket.RequestImageBlock block in request.RequestImage) + { + //ImageNotInDatabasePacket missing = new ImageNotInDatabasePacket(); + //missing.ImageID.ID = block.Image; + //agent.SendPacket(missing); + + ImageDataPacket imageData = new ImageDataPacket(); + imageData.ImageData.Data = OpenJPEG.EncodeFromImage(DefaultImage, true); + imageData.ImageID.ID = block.Image; + imageData.ImageID.Codec = 1; + imageData.ImageID.Packets = 1; + imageData.ImageID.Size = (uint)imageData.ImageData.Data.Length; + + agent.SendPacket(imageData); + } + } + + } +} diff --git a/prebuild.xml b/prebuild.xml index cf7388a0..086e37f5 100644 --- a/prebuild.xml +++ b/prebuild.xml @@ -679,6 +679,7 @@ ../../bin/ +