LoginResponseData HandleLogin(string firstName, string lastName, string password, string start, string version, string channel) { LoginResponseData response = new LoginResponseData(); Agent agent; UUID agentID = Authentication.Authenticate(firstName, lastName, password); if (agentID != UUID.Zero) { // Authentication successful, create a login instance of this agent agent = Accounts.CreateInstance(agentID); if (agent != null) { // Assign a circuit code and insert the agent into the unassociatedAgents dictionary agent.CircuitCode = UDP.CreateCircuit(agent); agent.TickLastPacketReceived = Environment.TickCount; agent.LastLoginTime = Utils.DateTimeToUnixTime(DateTime.Now); // Get this machine's IP address IPHostEntry addresses = Dns.GetHostByName(Dns.GetHostName()); IPAddress simIP = addresses.AddressList.Length > 0 ? addresses.AddressList[0] : IPAddress.Loopback; response.AgentID = agent.AgentID; response.SecureSessionID = agent.SecureSessionID; response.SessionID = agent.SessionID; response.CircuitCode = agent.CircuitCode; response.AgentAccess = agent.AccessLevel; response.BuddyList = null; // FIXME: response.FirstName = agent.FirstName; response.HomeLookAt = agent.HomeLookAt; response.HomePosition = agent.HomePosition; response.HomeRegion = agent.HomeRegionHandle; response.InventoryRoot = agent.InventoryRoot; response.InventorySkeleton = null; // FIXME: response.LastName = agent.LastName; response.LibraryOwner = agent.InventoryLibraryOwner; response.LibraryRoot = agent.InventoryLibraryRoot; response.LibrarySkeleton = null; // FIXME: response.LookAt = agent.CurrentLookAt; response.Message = "Welcome to Simian"; response.Reason = String.Empty; uint regionX, regionY; Utils.LongToUInts(agent.CurrentRegionHandle, out regionX, out regionY); response.RegionX = regionX; response.RegionY = regionY; response.SecondsSinceEpoch = DateTime.Now; // FIXME: Actually generate a seed capability response.SeedCapability = String.Format("http://{0}:{1}/seed_caps", simIP, HttpPort); response.SimIP = simIP; response.SimPort = (ushort)UDPPort; response.StartLocation = "last"; // FIXME: response.Success = true; } else { // Something went wrong creating an agent instance, return a fail response response.AgentID = agentID; response.FirstName = firstName; response.LastName = lastName; response.Message = "Failed to create an account instance"; response.Reason = "account"; response.Success = false; } } else { // Authentication failed, return a fail response response.AgentID = agentID; response.FirstName = firstName; response.LastName = lastName; response.Message = "Authentication failed"; response.Reason = "key"; response.Success = false; } return(response); }