Example #1
0
        public bool LoggedOut(string userID, UUID sessionID, UUID regionID, Vector3 lastPosition, Vector3 lastLookAt)
        {
            // m_log.DebugFormat("[SIMIAN PRESENCE CONNECTOR]: Logging out user " + userID);

            // Remove the session to mark this user offline
            if (!LogoutAgent(sessionID))
            {
                return(false);
            }

            // Save our last position as user data
            NameValueCollection requestArgs = new NameValueCollection
            {
                { "RequestMethod", "AddUserData" },
                { "UserID", userID.ToString() },
                { "LastLocation", SerializeLocation(regionID, lastPosition, lastLookAt) }
            };

            OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs);
            bool   success  = response["Success"].AsBoolean();

            if (!success)
            {
                m_log.Warn("[SIMIAN PRESENCE CONNECTOR]: Failed to set last location for " + userID + ": " + response["Message"].AsString());
            }

            return(success);
        }
        // <summary>
        // </summary>
        // <param name=""></param>
        public bool SetAppearance(UUID userID, AvatarAppearance appearance)
        {
            OSDMap map = appearance.Pack();

            if (map == null)
            {
                m_log.WarnFormat("[SIMIAN AVATAR CONNECTOR]: Failed to encode appearance for {0}", userID);
                return(false);
            }

            // m_log.DebugFormat("[SIMIAN AVATAR CONNECTOR] save appearance for {0}",userID);

            NameValueCollection requestArgs = new NameValueCollection
            {
                { "RequestMethod", "AddUserData" },
                { "UserID", userID.ToString() },
                { "LLPackedAppearance", OSDParser.SerializeJsonString(map) }
            };

            OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs);
            bool   success  = response["Success"].AsBoolean();

            if (!success)
            {
                m_log.WarnFormat("[SIMIAN AVATAR CONNECTOR]: Failed to save appearance for {0}: {1}",
                                 userID, response["Message"].AsString());
            }

            return(success);
        }
Example #3
0
        public PresenceInfo[] GetAgents(string[] userIDs)
        {
            List <PresenceInfo> presences = new List <PresenceInfo>();

            NameValueCollection requestArgs = new NameValueCollection
            {
                { "RequestMethod", "GetSessions" },
                { "UserIDList", String.Join(",", userIDs) }
            };

            OSDMap sessionListResponse = SimianGrid.PostToService(m_serverUrl, requestArgs);

            if (!sessionListResponse["Success"].AsBoolean())
            {
                m_log.WarnFormat("[SIMIAN PRESENCE CONNECTOR]: Failed to retrieve sessions: {0}", sessionListResponse["Message"].AsString());
                return(null);
            }

            OSDArray sessionList = sessionListResponse["Sessions"] as OSDArray;

            for (int i = 0; i < sessionList.Count; i++)
            {
                OSDMap sessionInfo = sessionList[i] as OSDMap;
                presences.Add(ResponseToPresenceInfo(sessionInfo));
            }

            return(presences.ToArray());
        }
        /// <summary>
        /// Helper method for the various ways of retrieving a user account
        /// </summary>
        /// <param name="requestArgs">Service query parameters</param>
        /// <returns>A UserAccount object on success, null on failure</returns>
        private UserAccount GetUser(NameValueCollection requestArgs)
        {
            string lookupValue = (requestArgs.Count > 1) ? requestArgs[1] : "(Unknown)";
//            m_log.DebugFormat("[SIMIAN ACCOUNT CONNECTOR]: Looking up user account with query: " + lookupValue);

            OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs);

            if (response["Success"].AsBoolean())
            {
                OSDMap user = response["User"] as OSDMap;
                if (user != null)
                {
                    return(ResponseToUserAccount(user));
                }
                else
                {
                    m_log.Warn("[SIMIAN ACCOUNT CONNECTOR]: Account search failed, response data was in an invalid format");
                }
            }
            else
            {
                m_log.Warn("[SIMIAN ACCOUNT CONNECTOR]: Failed to lookup user account with query: " + lookupValue);
            }

            return(null);
        }
Example #5
0
        public List <GridRegion> GetHyperlinks(UUID scopeID)
        {
            List <GridRegion> foundRegions = new List <GridRegion>();

            NameValueCollection requestArgs = new NameValueCollection
            {
                { "RequestMethod", "GetScenes" },
                { "HyperGrid", "true" },
                { "Enabled", "1" }
            };

            OSDMap response = SimianGrid.PostToService(m_ServerURI, requestArgs);

            if (response["Success"].AsBoolean())
            {
                // m_log.DebugFormat("[SIMIAN GRID CONNECTOR] found regions with name {0}",name);

                OSDArray array = response["Scenes"] as OSDArray;
                if (array != null)
                {
                    for (int i = 0; i < array.Count; i++)
                    {
                        GridRegion region = ResponseToGridRegion(array[i] as OSDMap);
                        if (region != null)
                        {
                            foundRegions.Add(region);
                        }
                    }
                }
            }

            return(foundRegions);
        }
        public bool Delete(string principalID, string friend)
        {
            if (String.IsNullOrEmpty(m_serverUrl))
            {
                return(true);
            }

            NameValueCollection requestArgs = new NameValueCollection
            {
                { "RequestMethod", "RemoveGeneric" },
                { "OwnerID", principalID.ToString() },
                { "Type", "Friend" },
                { "Key", friend }
            };

            OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs);
            bool   success  = response["Success"].AsBoolean();

            if (!success)
            {
                m_log.Error("[SIMIAN FRIENDS CONNECTOR]: Failed to remove friend " + friend + " for user " + principalID + ": " + response["Message"].AsString());
            }

            return(success);
        }
Example #7
0
        public bool LoginAgent(string userID, UUID sessionID, UUID secureSessionID)
        {
            m_log.ErrorFormat("[SIMIAN PRESENCE CONNECTOR]: Login requested, UserID={0}, SessionID={1}, SecureSessionID={2}",
                              userID, sessionID, secureSessionID);

            NameValueCollection requestArgs = new NameValueCollection
            {
                { "RequestMethod", "AddSession" },
                { "UserID", userID.ToString() }
            };

            if (sessionID != UUID.Zero)
            {
                requestArgs["SessionID"]       = sessionID.ToString();
                requestArgs["SecureSessionID"] = secureSessionID.ToString();
            }

            OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs);
            bool   success  = response["Success"].AsBoolean();

            if (!success)
            {
                m_log.Warn("[SIMIAN PRESENCE CONNECTOR]: Failed to login agent " + userID + ": " + response["Message"].AsString());
            }

            return(success);
        }
Example #8
0
        /// <summary>
        /// Invokes the xRemoveAsset operation on the simian server to delete an asset
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        private bool SimianDeleteOperation(string id)
        {
            try
            {
                NameValueCollection requestArgs = new NameValueCollection
                {
                    { "RequestMethod", "xRemoveAsset" },
                    { "AssetID", id }
                };

                OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs);
                if (!response["Success"].AsBoolean())
                {
                    m_log.WarnFormat("[SIMIAN ASSET CONNECTOR]: failed to delete asset; {0}", response["Message"].AsString());
                    return(false);
                }

                return(true);
            }
            catch (Exception ex)
            {
                m_log.WarnFormat("[SIMIAN ASSET CONNECTOR]: failed to delete asset {0}; {1}", id, ex.Message);
            }

            return(false);
        }
        // <summary>
        // Retrieves the LLPackedAppearance field from user data and unpacks
        // it into an AvatarAppearance structure
        // </summary>
        // <param name="userID"></param>
        public AvatarAppearance GetAppearance(UUID userID)
        {
            NameValueCollection requestArgs = new NameValueCollection
            {
                { "RequestMethod", "GetUser" },
                { "UserID", userID.ToString() }
            };

            OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs);

            if (response["Success"].AsBoolean())
            {
                OSDMap map = null;
                try { map = OSDParser.DeserializeJson(response["LLPackedAppearance"].AsString()) as OSDMap; }
                catch { }

                if (map != null)
                {
                    AvatarAppearance appearance = new AvatarAppearance(map);
                    // DEBUG ON
                    m_log.WarnFormat("[SIMIAN AVATAR CONNECTOR] retrieved appearance for {0}:\n{1}", userID, appearance.ToString());
                    // DEBUG OFF
                    return(appearance);
                }

                m_log.WarnFormat("[SIMIAN AVATAR CONNECTOR]: Failed to decode appearance for {0}", userID);
                return(null);
            }

            m_log.WarnFormat("[SIMIAN AVATAR CONNECTOR]: Failed to get appearance for {0}: {1}",
                             userID, response["Message"].AsString());
            return(null);
        }
Example #10
0
        /// <summary>
        /// Delete an item from the user's inventory
        /// </summary>
        /// <param name="item"></param>
        /// <returns>true if the item was successfully deleted</returns>
        public bool DeleteItems(UUID userID, List <UUID> itemIDs)
        {
            // TODO: RemoveInventoryNode should be replaced with RemoveInventoryNodes
            bool allSuccess = true;

            for (int i = 0; i < itemIDs.Count; i++)
            {
                UUID itemID = itemIDs[i];

                NameValueCollection requestArgs = new NameValueCollection
                {
                    { "RequestMethod", "RemoveInventoryNode" },
                    { "OwnerID", userID.ToString() },
                    { "ItemID", itemID.ToString() }
                };

                OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs);
                bool   success  = response["Success"].AsBoolean();

                if (!success)
                {
                    m_log.Warn("[SIMIAN INVENTORY CONNECTOR]: Error removing item " + itemID + " for " + userID + ": " +
                               response["Message"].AsString());
                    allSuccess = false;
                }
            }

            return(allSuccess);
        }
Example #11
0
        ///<summary>
        ///
        ///</summary>
        private void ConvertAndUploadMaptile(Image mapTile, uint locX, uint locY)
        {
            //m_log.DebugFormat("[SIMIAN MAPTILE]: upload maptile for location {0}, {1}", locX, locY);

            byte[] pngData = Utils.EmptyBytes;
            using (MemoryStream stream = new MemoryStream())
            {
                mapTile.Save(stream, ImageFormat.Png);
                pngData = stream.ToArray();
            }

            NameValueCollection requestArgs = new NameValueCollection
            {
                { "RequestMethod", "xAddMapTile" },
                { "X", locX.ToString() },
                { "Y", locY.ToString() },
                { "ContentType", "image/png" },
                { "EncodedData", System.Convert.ToBase64String(pngData) }
            };

            OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs);

            if (!response["Success"].AsBoolean())
            {
                m_log.WarnFormat("[SIMIAN MAPTILE] failed to store map tile; {0}", response["Message"].AsString());
            }
        }
Example #12
0
        /// <summary>
        /// Get a folder, given by its UUID
        /// </summary>
        /// <param name="folder"></param>
        /// <returns></returns>
        public InventoryFolderBase GetFolder(InventoryFolderBase folder)
        {
            NameValueCollection requestArgs = new NameValueCollection
            {
                { "RequestMethod", "GetInventoryNode" },
                { "ItemID", folder.ID.ToString() },
                { "OwnerID", folder.Owner.ToString() },
                { "IncludeFolders", "1" },
                { "IncludeItems", "0" },
                { "ChildrenOnly", "1" }
            };

            OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs);

            if (response["Success"].AsBoolean() && response["Items"] is OSDArray)
            {
                OSDArray items = (OSDArray)response["Items"];
                List <InventoryFolderBase> folders = GetFoldersFromResponse(items, folder.ID, true);

                if (folders.Count > 0)
                {
                    return(folders[0]);
                }
            }

            return(null);
        }
Example #13
0
        /// <summary>
        /// Gets the items inside a folder
        /// </summary>
        /// <param name="userID"></param>
        /// <param name="folderID"></param>
        /// <returns></returns>
        public List <InventoryItemBase> GetFolderItems(UUID userID, UUID folderID)
        {
            InventoryCollection inventory = new InventoryCollection();

            inventory.UserID = userID;

            NameValueCollection requestArgs = new NameValueCollection
            {
                { "RequestMethod", "GetInventoryNode" },
                { "ItemID", folderID.ToString() },
                { "OwnerID", userID.ToString() },
                { "IncludeFolders", "0" },
                { "IncludeItems", "1" },
                { "ChildrenOnly", "1" }
            };

            OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs);

            if (response["Success"].AsBoolean() && response["Items"] is OSDArray)
            {
                OSDArray items = (OSDArray)response["Items"];
                return(GetItemsFromResponse(items));
            }
            else
            {
                m_log.Warn("[SIMIAN INVENTORY CONNECTOR]: Error fetching folder " + folderID + " for " + userID + ": " +
                           response["Message"].AsString());
                return(new List <InventoryItemBase>(0));
            }
        }
Example #14
0
        /// <summary>
        /// Get an item, given by its UUID
        /// </summary>
        /// <param name="item"></param>
        /// <returns></returns>
        public InventoryItemBase GetItem(InventoryItemBase item)
        {
            NameValueCollection requestArgs = new NameValueCollection
            {
                { "RequestMethod", "GetInventoryNode" },
                { "ItemID", item.ID.ToString() },
                { "OwnerID", item.Owner.ToString() },
                { "IncludeFolders", "1" },
                { "IncludeItems", "1" },
                { "ChildrenOnly", "1" }
            };

            OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs);

            if (response["Success"].AsBoolean() && response["Items"] is OSDArray)
            {
                List <InventoryItemBase> items = GetItemsFromResponse((OSDArray)response["Items"]);
                if (items.Count > 0)
                {
                    // The requested item should be the first in this list, but loop through
                    // and sanity check just in case
                    for (int i = 0; i < items.Count; i++)
                    {
                        if (items[i].ID == item.ID)
                        {
                            return(items[i]);
                        }
                    }
                }
            }

            m_log.Warn("[SIMIAN INVENTORY CONNECTOR]: Item " + item.ID + " owned by " + item.Owner + " not found");
            return(null);
        }
Example #15
0
        /// <summary>
        /// Gets the user folder for the given folder-type
        /// </summary>
        /// <param name="userID"></param>
        /// <param name="type"></param>
        /// <returns></returns>
        public InventoryFolderBase GetFolderForType(UUID userID, AssetType type)
        {
            string contentType = SLUtil.SLAssetTypeToContentType((int)type);

            NameValueCollection requestArgs = new NameValueCollection
            {
                { "RequestMethod", "GetFolderForType" },
                { "ContentType", contentType },
                { "OwnerID", userID.ToString() }
            };

            OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs);

            if (response["Success"].AsBoolean() && response["Folder"] is OSDMap)
            {
                OSDMap folder = (OSDMap)response["Folder"];

                return(new InventoryFolderBase(
                           folder["ID"].AsUUID(),
                           folder["Name"].AsString(),
                           folder["OwnerID"].AsUUID(),
                           (short)SLUtil.ContentTypeToSLAssetType(folder["ContentType"].AsString()),
                           folder["ParentID"].AsUUID(),
                           (ushort)folder["Version"].AsInteger()
                           ));
            }
            else
            {
                m_log.Warn("[SIMIAN INVENTORY CONNECTOR]: Default folder not found for content type " + contentType + ": " + response["Message"].AsString());
                return(GetRootFolder(userID));
            }
        }
Example #16
0
        /// <summary>
        /// Gets the skeleton of the inventory -- folders only
        /// </summary>
        /// <param name="userID"></param>
        /// <returns></returns>
        public List <InventoryFolderBase> GetInventorySkeleton(UUID userID)
        {
            NameValueCollection requestArgs = new NameValueCollection
            {
                { "RequestMethod", "GetInventoryNode" },
                { "ItemID", userID.ToString() },
                { "OwnerID", userID.ToString() },
                { "IncludeFolders", "1" },
                { "IncludeItems", "0" },
                { "ChildrenOnly", "0" }
            };

            OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs);

            if (response["Success"].AsBoolean() && response["Items"] is OSDArray)
            {
                OSDArray items = (OSDArray)response["Items"];
                return(GetFoldersFromResponse(items, userID, true));
            }
            else
            {
                m_log.Warn("[SIMIAN INVENTORY CONNECTOR]: Failed to retrieve inventory skeleton for " + userID + ": " +
                           response["Message"].AsString());
                return(new List <InventoryFolderBase>(0));
            }
        }
Example #17
0
        public int GetRegionFlags(UUID scopeID, UUID regionID)
        {
            NameValueCollection requestArgs = new NameValueCollection
            {
                { "RequestMethod", "GetScene" },
                { "SceneID", regionID.ToString() }
            };

            m_log.DebugFormat("[SIMIAN GRID CONNECTOR] request region flags for {0}", regionID.ToString());

            OSDMap response = SimianGrid.PostToService(m_ServerURI, requestArgs);

            if (response["Success"].AsBoolean())
            {
                OSDMap extraData = response["ExtraData"] as OSDMap;
                int    enabled   = response["Enabled"].AsBoolean() ? (int)OpenSim.Framework.RegionFlags.RegionOnline : 0;
                int    hypergrid = extraData["HyperGrid"].AsBoolean() ? (int)OpenSim.Framework.RegionFlags.Hyperlink : 0;
                int    flags     = enabled | hypergrid;
                m_log.DebugFormat("[SGGC] enabled - {0} hg - {1} flags - {2}", enabled, hypergrid, flags);
                return(flags);
            }
            else
            {
                m_log.Warn("[SIMIAN GRID CONNECTOR]: Grid service did not find a match for region " + regionID + " during region flags check");
                return(-1);
            }
        }
Example #18
0
        private bool MoveItems(UUID ownerID, List <InventoryItemBase> items, UUID destFolderID)
        {
            string[] itemIDs = new string[items.Count];
            for (int i = 0; i < items.Count; i++)
            {
                itemIDs[i] = items[i].ID.ToString();
            }

            NameValueCollection requestArgs = new NameValueCollection
            {
                { "RequestMethod", "MoveInventoryNodes" },
                { "OwnerID", ownerID.ToString() },
                { "FolderID", destFolderID.ToString() },
                { "Items", String.Join(",", itemIDs) }
            };

            OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs);
            bool   success  = response["Success"].AsBoolean();

            if (!success)
            {
                m_log.Warn("[SIMIAN INVENTORY CONNECTOR]: Failed to move " + items.Count + " items to " +
                           destFolderID + ": " + response["Message"].AsString());
            }

            return(success);
        }
Example #19
0
        private GridRegion GetNearestRegion(Vector3d position, bool onlyEnabled)
        {
            NameValueCollection requestArgs = new NameValueCollection
            {
                { "RequestMethod", "GetScene" },
                { "Position", position.ToString() },
                { "FindClosest", "1" }
            };

            if (onlyEnabled)
            {
                requestArgs["Enabled"] = "1";
            }

            OSDMap response = SimianGrid.PostToService(m_ServerURI, requestArgs);

            if (response["Success"].AsBoolean())
            {
                return(ResponseToGridRegion(response));
            }
            else
            {
                m_log.Warn("[SIMIAN GRID CONNECTOR]: Grid service did not find a match for region at " + position);
                return(null);
            }
        }
Example #20
0
        private OSDArray FetchGestures(UUID userID)
        {
            NameValueCollection requestArgs = new NameValueCollection
            {
                { "RequestMethod", "GetUser" },
                { "UserID", userID.ToString() }
            };

            OSDMap response = SimianGrid.PostToService(m_userServerUrl, requestArgs);

            if (response["Success"].AsBoolean())
            {
                OSDMap user = response["User"] as OSDMap;
                if (user != null && response.ContainsKey("Gestures"))
                {
                    OSD gestures = OSDParser.DeserializeJson(response["Gestures"].AsString());
                    if (gestures != null && gestures is OSDArray)
                    {
                        return((OSDArray)gestures);
                    }
                    else
                    {
                        m_log.Error("[SIMIAN INVENTORY CONNECTOR]: Unrecognized active gestures data for " + userID);
                    }
                }
            }
            else
            {
                m_log.Warn("[SIMIAN INVENTORY CONNECTOR]: Failed to fetch active gestures for " + userID + ": " +
                           response["Message"].AsString());
            }

            return(new OSDArray());
        }
Example #21
0
        /// <summary>
        /// Invokes the xAddAsset operation on the simian server to create or update an asset
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        private string SimianStoreOperation(AssetBase asset)
        {
            try
            {
                NameValueCollection requestArgs = new NameValueCollection
                {
                    { "RequestMethod", "xAddAsset" },
                    { "ContentType", asset.Metadata.ContentType },
                    { "EncodedData", Convert.ToBase64String(asset.Data) },
                    { "AssetID", asset.FullID.ToString() },
                    { "CreatorID", asset.Metadata.CreatorID },
                    { "Temporary", asset.Temporary ? "1" : "0" },
                    { "Name", asset.Name }
                };

                OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs);
                if (!response["Success"].AsBoolean())
                {
                    m_log.WarnFormat("[SIMIAN ASSET CONNECTOR] failed to store asset; {0}", response["Message"].AsString());
                    return(null);
                }

                // asset.ID is always set before calling this function
                return(asset.ID);
            }
            catch (Exception ex)
            {
                m_log.ErrorFormat("[SIMIAN ASSET CONNECTOR] failed to store asset; {0}", ex.Message);
            }

            return(null);
        }
Example #22
0
        public GridRegion GetRegionByPosition(UUID scopeID, int x, int y)
        {
            // Go one meter in from the requested x/y coords to avoid requesting a position
            // that falls on the border of two sims
            Vector3d position = new Vector3d(x + 1, y + 1, 0.0);

            NameValueCollection requestArgs = new NameValueCollection
            {
                { "RequestMethod", "GetScene" },
                { "Position", position.ToString() },
                { "Enabled", "1" }
            };

            // m_log.DebugFormat("[SIMIAN GRID CONNECTOR] request grid at {0}",position.ToString());

            OSDMap response = SimianGrid.PostToService(m_ServerURI, requestArgs);

            if (response["Success"].AsBoolean())
            {
                // m_log.DebugFormat("[SIMIAN GRID CONNECTOR] position request successful {0}",response["Name"].AsString());
                return(ResponseToGridRegion(response));
            }
            else
            {
                // m_log.InfoFormat("[SIMIAN GRID CONNECTOR]: Grid service did not find a match for region at {0},{1}",
                //     Util.WorldToRegionLoc(x), Util.WorldToRegionLoc(y));
                return(null);
            }
        }
Example #23
0
        public string RegisterRegion(UUID scopeID, GridRegion regionInfo)
        {
            IPEndPoint ext = regionInfo.ExternalEndPoint;

            if (ext == null)
            {
                return("Region registration for " + regionInfo.RegionName + " failed: Could not resolve EndPoint");
            }
            // Generate and upload our map tile in PNG format to the SimianGrid AddMapTile service
//            Scene scene;
//            if (m_scenes.TryGetValue(regionInfo.RegionID, out scene))
//                UploadMapTile(scene);
//            else
//                m_log.Warn("Registering region " + regionInfo.RegionName + " (" + regionInfo.RegionID + ") that we are not tracking");

            Vector3d minPosition = new Vector3d(regionInfo.RegionLocX, regionInfo.RegionLocY, 0.0);
            Vector3d maxPosition = minPosition + new Vector3d(regionInfo.RegionSizeX, regionInfo.RegionSizeY, Constants.RegionHeight);

            OSDMap extraData = new OSDMap
            {
                { "ServerURI", OSD.FromString(regionInfo.ServerURI) },
                { "InternalAddress", OSD.FromString(regionInfo.InternalEndPoint.Address.ToString()) },
                { "InternalPort", OSD.FromInteger(regionInfo.InternalEndPoint.Port) },
                { "ExternalAddress", OSD.FromString(ext.Address.ToString()) },
                { "ExternalPort", OSD.FromInteger(regionInfo.ExternalEndPoint.Port) },
                { "MapTexture", OSD.FromUUID(regionInfo.TerrainImage) },
                { "Access", OSD.FromInteger(regionInfo.Access) },
                { "RegionSecret", OSD.FromString(regionInfo.RegionSecret) },
                { "EstateOwner", OSD.FromUUID(regionInfo.EstateOwner) },
                { "Token", OSD.FromString(regionInfo.Token) }
            };

            NameValueCollection requestArgs = new NameValueCollection
            {
                { "RequestMethod", "AddScene" },
                { "SceneID", regionInfo.RegionID.ToString() },
                { "Name", regionInfo.RegionName },
                { "MinPosition", minPosition.ToString() },
                { "MaxPosition", maxPosition.ToString() },
                { "Address", regionInfo.ServerURI },
                { "Enabled", "1" },
                { "ExtraData", OSDParser.SerializeJsonString(extraData) }
            };

            OSDMap response = SimianGrid.PostToService(m_ServerURI, requestArgs);

            if (response["Success"].AsBoolean())
            {
                return(String.Empty);
            }
            else
            {
                return("Region registration for " + regionInfo.RegionName + " failed: " + response["Message"].AsString());
            }
        }
        public bool StoreUserAccount(UserAccount data)
        {
//            m_log.InfoFormat("[SIMIAN ACCOUNT CONNECTOR]: Storing user account for " + data.Name);

            NameValueCollection requestArgs = new NameValueCollection
            {
                { "RequestMethod", "AddUser" },
                { "UserID", data.PrincipalID.ToString() },
                { "Name", data.Name },
                { "Email", data.Email },
                { "AccessLevel", data.UserLevel.ToString() }
            };

            OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs);

            if (response["Success"].AsBoolean())
            {
                m_log.InfoFormat("[SIMIAN ACCOUNT CONNECTOR]: Storing user account data for " + data.Name);

                requestArgs = new NameValueCollection
                {
                    { "RequestMethod", "AddUserData" },
                    { "UserID", data.PrincipalID.ToString() },
                    { "CreationDate", data.Created.ToString() },
                    { "UserFlags", data.UserFlags.ToString() },
                    { "UserTitle", data.UserTitle }
                };

                response = SimianGrid.PostToService(m_serverUrl, requestArgs);
                bool success = response["Success"].AsBoolean();

                if (success)
                {
                    // Cache the user account info
                    m_accountCache.AddOrUpdate(data.PrincipalID, data, CACHE_EXPIRATION_SECONDS);
                }
                else
                {
                    m_log.Warn("[SIMIAN ACCOUNT CONNECTOR]: Failed to store user account data for " + data.Name + ": " + response["Message"].AsString());
                }

                return(success);
            }
            else
            {
                m_log.Warn("[SIMIAN ACCOUNT CONNECTOR]: Failed to store user account for " + data.Name + ": " + response["Message"].AsString());
            }

            return(false);
        }
        public bool SetPassword(UUID principalID, string passwd)
        {
            // Fetch the user name first
            NameValueCollection requestArgs = new NameValueCollection
            {
                { "RequestMethod", "GetUser" },
                { "UserID", principalID.ToString() }
            };

            OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs);

            if (response["Success"].AsBoolean() && response["User"] is OSDMap)
            {
                OSDMap userMap    = (OSDMap)response["User"];
                string identifier = userMap["Name"].AsString();

                if (!String.IsNullOrEmpty(identifier))
                {
                    // Add/update the md5hash identity
                    // TODO: Support salts when AddIdentity does
                    // TODO: Create an a1hash too for WebDAV logins
                    requestArgs = new NameValueCollection
                    {
                        { "RequestMethod", "AddIdentity" },
                        { "Identifier", identifier },
                        { "Credential", "$1$" + Utils.MD5String(passwd) },
                        { "Type", "md5hash" },
                        { "UserID", principalID.ToString() }
                    };

                    response = SimianGrid.PostToService(m_serverUrl, requestArgs);
                    bool success = response["Success"].AsBoolean();

                    if (!success)
                    {
                        m_log.WarnFormat("[SIMIAN AUTH CONNECTOR]: Failed to set password for {0} ({1})", identifier, principalID);
                    }

                    return(success);
                }
            }
            else
            {
                m_log.Warn("[SIMIAN AUTH CONNECTOR]: Failed to retrieve identities for " + principalID + ": " +
                           response["Message"].AsString());
            }

            return(false);
        }
        public string Authenticate(UUID principalID, string password, int lifetime)
        {
            NameValueCollection requestArgs = new NameValueCollection
            {
                { "RequestMethod", "GetIdentities" },
                { "UserID", principalID.ToString() }
            };

            OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs);

            if (response["Success"].AsBoolean() && response["Identities"] is OSDArray)
            {
                bool md5hashFound = false;

                OSDArray identities = (OSDArray)response["Identities"];
                for (int i = 0; i < identities.Count; i++)
                {
                    OSDMap identity = identities[i] as OSDMap;
                    if (identity != null)
                    {
                        if (identity["Type"].AsString() == "md5hash")
                        {
                            string authorizeResult;
                            if (CheckPassword(principalID, password, identity["Credential"].AsString(), out authorizeResult))
                            {
                                return(authorizeResult);
                            }

                            md5hashFound = true;
                            break;
                        }
                    }
                }

                if (!md5hashFound)
                {
                    m_log.Warn("[SIMIAN AUTH CONNECTOR]: Authentication failed for " + principalID + ", no md5hash identity found");
                }
            }
            else
            {
                m_log.Warn("[SIMIAN AUTH CONNECTOR]: Failed to retrieve identities for " + principalID + ": " +
                           response["Message"].AsString());
            }

            return(String.Empty);
        }
Example #27
0
        private void SaveGestures(UUID userID, OSDArray gestures)
        {
            NameValueCollection requestArgs = new NameValueCollection
            {
                { "RequestMethod", "AddUserData" },
                { "UserID", userID.ToString() },
                { "Gestures", OSDParser.SerializeJsonString(gestures) }
            };

            OSDMap response = SimianGrid.PostToService(m_userServerUrl, requestArgs);

            if (!response["Success"].AsBoolean())
            {
                m_log.Warn("[SIMIAN INVENTORY CONNECTOR]: Failed to save active gestures for " + userID + ": " +
                           response["Message"].AsString());
            }
        }
Example #28
0
        private OSDMap GetSessionDataFromSessionID(UUID sessionID)
        {
            NameValueCollection requestArgs = new NameValueCollection
            {
                { "RequestMethod", "GetSession" },
                { "SessionID", sessionID.ToString() }
            };

            OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs);

            if (response["Success"].AsBoolean())
            {
                return(response);
            }

            m_log.WarnFormat("[SIMIAN PRESENCE CONNECTOR]: Failed to retrieve session data for {0}; {1}", sessionID.ToString(), response["Message"].AsString());
            return(null);
        }
Example #29
0
        /// <summary>
        /// Create the entire inventory for a given user
        /// </summary>
        /// <param name="user"></param>
        /// <returns></returns>
        public bool CreateUserInventory(UUID userID)
        {
            NameValueCollection requestArgs = new NameValueCollection
            {
                { "RequestMethod", "AddInventory" },
                { "OwnerID", userID.ToString() }
            };

            OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs);
            bool   success  = response["Success"].AsBoolean();

            if (!success)
            {
                m_log.Warn("[SIMIAN INVENTORY CONNECTOR]: Inventory creation for " + userID + " failed: " + response["Message"].AsString());
            }

            return(success);
        }
Example #30
0
        /// <summary>
        /// Invokes the xGetAssetMetadata operation on the simian server to retrieve metadata for an asset
        /// This operation is generally used to determine if an asset exists in the database
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        private AssetMetadata SimianGetMetadataOperation(string id)
        {
            try
            {
                NameValueCollection requestArgs = new NameValueCollection
                {
                    { "RequestMethod", "xGetAssetMetadata" },
                    { "ID", id }
                };

                OSDMap response = SimianGrid.PostToService(m_serverUrl, requestArgs);
                if (!response["Success"].AsBoolean())
                {
                    // this is not really an error, this call is used to test existence
                    // m_log.DebugFormat("[SIMIAN ASSET CONNECTOR] Failed to get asset metadata; {0}",response["Message"].AsString());
                    return(null);
                }

                AssetMetadata metadata = new AssetMetadata();
                metadata.ID          = id;
                metadata.ContentType = response["ContentType"].AsString();
                metadata.CreatorID   = response["CreatorID"].AsString();
                metadata.Local       = false;
                metadata.Temporary   = response["Temporary"];

                string lastModifiedStr = response["Last-Modified"].AsString();
                if (!String.IsNullOrEmpty(lastModifiedStr))
                {
                    DateTime lastModified;
                    if (DateTime.TryParse(lastModifiedStr, out lastModified))
                    {
                        metadata.CreationDate = lastModified;
                    }
                }

                return(metadata);
            }
            catch (Exception ex)
            {
                m_log.WarnFormat("[SIMIAN ASSET CONNECTOR]: Failed to get asset metadata; {0}", ex.Message);
            }

            return(null);
        }