Example #1
0
 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");
 }
Example #2
0
        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);
        }
Example #3
0
 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");
 }
Example #4
0
 private void SetActiveGestures(User user, ref LindenLoginData response)
 {
     // TODO: Pull this information out of user.ExtraData
     //response.ActiveGestures
 }
Example #5
0
        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();
        }
Example #6
0
        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);
        }
Example #7
0
 private void SetActiveGestures(User user, ref LindenLoginData response)
 {
     // TODO: Pull this information out of user.ExtraData
     //response.ActiveGestures
 }
Example #8
0
        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());
        }