private void SetClassifiedCategories(ref LindenLoginData response) { response.AddClassifiedCategory(1, "Shopping"); response.AddClassifiedCategory(2, "Land Rental"); response.AddClassifiedCategory(3, "Property Rental"); response.AddClassifiedCategory(4, "Special Attraction"); response.AddClassifiedCategory(5, "New Products"); response.AddClassifiedCategory(6, "Employment"); response.AddClassifiedCategory(7, "Wanted"); response.AddClassifiedCategory(8, "Service"); response.AddClassifiedCategory(9, "Personal"); }
private void GetInventory(User user, ref LindenLoginData response) { Hashtable folderData; if (m_inventoryClient != null) { InventorySkeleton skeleton; if (m_inventoryClient.TryGetInventorySkeleton(user.ID, out skeleton)) { response.InventoryRoot = skeleton.RootFolderID; response.AgentInventory = FillInventorySkeleton(skeleton.Skeleton); response.InventoryLibRoot = skeleton.LibraryFolderID; response.InventoryLibraryOwner = skeleton.LibraryOwner; response.InventoryLibrary = FillInventorySkeleton(skeleton.LibrarySkeleton); response.SetInitialOutfit("Default Outfit", false); return; } else { m_log.Error("Failed to fetch inventory for " + user.Name + ", returning a temporary root folder"); } } m_log.Info("Returning a random root folder ID so login will succeed"); response.InventoryRoot = UUID.Random(); response.AgentInventory = new ArrayList(1); folderData = new Hashtable(); folderData["name"] = "My Inventory"; folderData["parent_id"] = UUID.Zero.ToString(); folderData["type_default"] = (int)AssetType.Folder; folderData["folder_id"] = response.InventoryRoot.ToString(); folderData["version"] = 1; response.AgentInventory.Add(folderData); response.SetInitialOutfit("Default Outfit", false); }
private void SetActiveGestures(User user, ref LindenLoginData response) { // TODO: Pull this information out of user.ExtraData //response.ActiveGestures }
private XmlRpcResponse LoginHandler(XmlRpcRequest request, IHttpRequest httpRequest) { Hashtable requestData = (Hashtable)request.Params[0]; bool validLogin = requestData.ContainsKey("first") && requestData.ContainsKey("last") && (requestData.ContainsKey("passwd") || requestData.Contains("web_login_key")); if (validLogin) { string startLocation = (requestData.ContainsKey("start") ? (string)requestData["start"] : "last"); string version = (requestData.ContainsKey("version") ? (string)requestData["version"] : "Unknown"); string firstName = (string)requestData["first"]; string lastName = (string)requestData["last"]; string passHash = (string)requestData["passwd"]; m_log.InfoFormat("Received XML-RPC login request for {0} {1} with client \"{2}\" to destination \"{3}\"", firstName, lastName, version, startLocation); if (!String.IsNullOrEmpty(passHash)) { // Try to login string name = firstName + ' ' + lastName; // DEBUG: Anonymous logins are always enabled UserSession session = AnonymousLogin(name, 200, null, name, AUTH_METHOD, passHash); SceneInfo loginScene; Vector3 startPosition, lookAt; IPAddress address; int port; Uri seedCap; // Find a scene that this user is authorized to login to if (TryGetLoginScene(session, ref startLocation, out loginScene, out startPosition, out lookAt, out address, out port, out seedCap)) { m_log.Debug("Authenticated " + session.User.Name); #region Login Success Response // Session is created, construct the login response LindenLoginData response = new LindenLoginData(); uint regionX, regionY; GetRegionXY(loginScene.MinPosition, out regionX, out regionY); response.AgentID = session.User.ID; response.BuddyList = GetBuddyList(session.User.ID); response.CircuitCode = session.GetField("CircuitCode").AsInteger(); SetClassifiedCategories(ref response); response.FirstName = firstName; response.LastName = lastName; response.Login = true; response.LookAt = lookAt; response.Message = "Welcome to Simian"; response.RegionX = regionX; response.RegionY = regionY; response.SeedCapability = (seedCap != null) ? seedCap.AbsoluteUri : "http://localhost:0/"; response.SessionID = session.SessionID; response.SecureSessionID = session.SecureSessionID; response.StartLocation = startLocation; response.SimAddress = address.ToString(); response.SimPort = (uint)port; // Set the home scene information SceneInfo homeScene; if (m_gridClient.TryGetScene(session.User.HomeSceneID, out homeScene)) { uint homeRegionX, homeRegionY; GetRegionXY(homeScene.MinPosition, out homeRegionX, out homeRegionY); response.HomeLookAt = session.User.HomeLookAt; response.HomePosition = session.User.HomePosition; response.HomeRegionX = homeRegionX; response.HomeRegionY = homeRegionY; } else { response.HomeLookAt = lookAt; response.HomePosition = startPosition; response.HomeRegionX = regionX; response.HomeRegionY = regionY; } SetActiveGestures(session.User, ref response); GetInventory(session.User, ref response); m_log.Info("Login to " + loginScene.Name + " prepared for " + session.User.Name + ", returning response"); return response.ToXmlRpcResponse(); #endregion Login Success Response } else { m_log.Error("Could not find a default local scene for " + name + ", cancelling login"); m_userClient.RemoveSession(session); return CreateLoginNoRegionResponse(); } } } m_log.Warn("Received invalid login data, returning an error response"); return CreateLoginGridErrorResponse(); }
private XmlRpcResponse LoginHandler(XmlRpcRequest request, IHttpRequest httpRequest) { Hashtable requestData = (Hashtable)request.Params[0]; bool validLogin = requestData.ContainsKey("first") && requestData.ContainsKey("last") && (requestData.ContainsKey("passwd") || requestData.Contains("web_login_key")); if (validLogin) { string startLocation = (requestData.ContainsKey("start") ? (string)requestData["start"] : "last"); string version = (requestData.ContainsKey("version") ? (string)requestData["version"] : "Unknown"); string firstName = (string)requestData["first"]; string lastName = (string)requestData["last"]; string passHash = (string)requestData["passwd"]; m_log.InfoFormat("Received XML-RPC login request for {0} {1} with client \"{2}\" to destination \"{3}\"", firstName, lastName, version, startLocation); if (!String.IsNullOrEmpty(passHash)) { // Try to login string name = firstName + ' ' + lastName; // DEBUG: Anonymous logins are always enabled UserSession session = AnonymousLogin(name, 200, null, name, AUTH_METHOD, passHash); SceneInfo loginScene; Vector3 startPosition, lookAt; IPAddress address; int port; Uri seedCap; // Find a scene that this user is authorized to login to if (TryGetLoginScene(session, ref startLocation, out loginScene, out startPosition, out lookAt, out address, out port, out seedCap)) { m_log.Debug("Authenticated " + session.User.Name); #region Login Success Response // Session is created, construct the login response LindenLoginData response = new LindenLoginData(); uint regionX, regionY; GetRegionXY(loginScene.MinPosition, out regionX, out regionY); response.AgentID = session.User.ID; response.BuddyList = GetBuddyList(session.User.ID); response.CircuitCode = session.GetField("CircuitCode").AsInteger(); SetClassifiedCategories(ref response); response.FirstName = firstName; response.LastName = lastName; response.Login = true; response.LookAt = lookAt; response.Message = "Welcome to Simian"; response.RegionX = regionX; response.RegionY = regionY; response.SeedCapability = (seedCap != null) ? seedCap.AbsoluteUri : "http://localhost:0/"; response.SessionID = session.SessionID; response.SecureSessionID = session.SecureSessionID; response.StartLocation = startLocation; response.SimAddress = address.ToString(); response.SimPort = (uint)port; // Set the home scene information SceneInfo homeScene; if (m_gridClient.TryGetScene(session.User.HomeSceneID, out homeScene)) { uint homeRegionX, homeRegionY; GetRegionXY(homeScene.MinPosition, out homeRegionX, out homeRegionY); response.HomeLookAt = session.User.HomeLookAt; response.HomePosition = session.User.HomePosition; response.HomeRegionX = homeRegionX; response.HomeRegionY = homeRegionY; } else { response.HomeLookAt = lookAt; response.HomePosition = startPosition; response.HomeRegionX = regionX; response.HomeRegionY = regionY; } SetActiveGestures(session.User, ref response); GetInventory(session.User, ref response); m_log.Info("Login to " + loginScene.Name + " prepared for " + session.User.Name + ", returning response"); return(response.ToXmlRpcResponse()); #endregion Login Success Response } else { m_log.Error("Could not find a default local scene for " + name + ", cancelling login"); m_userClient.RemoveSession(session); return(CreateLoginNoRegionResponse()); } } } m_log.Warn("Received invalid login data, returning an error response"); return(CreateLoginGridErrorResponse()); }