Пример #1
0
 bool IAssetMetadataServiceInterface.TryGetValue(UUID key, out AssetMetadata metadata)
 {
     using (var conn = new MySqlConnection(m_ConnectionString))
     {
         conn.Open();
         using (var cmd = new MySqlCommand("SELECT * FROM assetrefs WHERE id=@id LIMIT 1", conn))
         {
             cmd.Parameters.AddParameter("@id", key);
             using (MySqlDataReader dbReader = cmd.ExecuteReader())
             {
                 if (dbReader.Read())
                 {
                     metadata = new AssetMetadata
                     {
                         ID         = dbReader.GetUUID("id"),
                         Type       = dbReader.GetEnum <AssetType>("assetType"),
                         Name       = dbReader.GetString("name"),
                         CreateTime = dbReader.GetDate("create_time"),
                         AccessTime = dbReader.GetDate("access_time"),
                         Flags      = dbReader.GetEnum <AssetFlags>("asset_flags"),
                         Temporary  = dbReader.GetBool("temporary")
                     };
                     return(true);
                 }
             }
         }
     }
     metadata = null;
     return(false);
 }
        public static InventoryItem ToItem(this MySqlDataReader reader)
        {
            var item = new InventoryItem(reader.GetUUID("ID"))
            {
                ParentFolderID = reader.GetUUID("ParentFolderID"),
                Name           = reader.GetString("Name"),
                Description    = reader.GetString("Description"),
                InventoryType  = reader.GetEnum <InventoryType>("InventoryType"),
                Flags          = reader.GetEnum <InventoryFlags>("Flags"),
                CreationDate   = reader.GetDate("CreationDate"),
                IsGroupOwned   = reader.GetBool("IsGroupOwned"),
                AssetID        = reader.GetUUID("AssetID"),
                AssetType      = reader.GetEnum <AssetType>("AssetType"),

                Owner     = reader.GetUGUI("OwnerID"),
                LastOwner = reader.GetUGUI("LastOwnerID"),

                Creator = reader.GetUGUI("CreatorID"),
                Group   = new UGI(reader.GetUUID("GroupID"))
            };

            item.Permissions.Base      = reader.GetEnum <InventoryPermissionsMask>("BasePermissionsMask");
            item.Permissions.Current   = reader.GetEnum <InventoryPermissionsMask>("CurrentPermissionsMask");
            item.Permissions.EveryOne  = reader.GetEnum <InventoryPermissionsMask>("EveryOnePermissionsMask");
            item.Permissions.NextOwner = reader.GetEnum <InventoryPermissionsMask>("NextOwnerPermissionsMask");
            item.Permissions.Group     = reader.GetEnum <InventoryPermissionsMask>("GroupPermissionsMask");
            item.SaleInfo.Price        = reader.GetInt32("SalePrice");
            item.SaleInfo.Type         = reader.GetEnum <InventoryItem.SaleInfoData.SaleType>("SaleType");
            item.SaleInfo.PermMask     = reader.GetEnum <InventoryPermissionsMask>("SalePermissionsMask");

            return(item);
        }
        public override List <MuteListEntry> GetList(UUID muteListOwnerID)
        {
            var res = new List <MuteListEntry>();

            using (var conn = new MySqlConnection(m_ConnectionString))
            {
                conn.Open();
                using (var cmd = new MySqlCommand("SELECT * FROM mutelists WHERE agentID = @agentid", conn))
                {
                    cmd.Parameters.AddParameter("@agentid", muteListOwnerID);
                    using (MySqlDataReader reader = cmd.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            res.Add(new MuteListEntry
                            {
                                Flags    = reader.GetEnum <MuteFlags>("flags"),
                                Type     = reader.GetEnum <MuteType>("type"),
                                MuteID   = reader.GetUUID("muteID"),
                                MuteName = reader.GetString("muteName")
                            });
                        }
                    }
                }
            }

            return(res);
        }
        public static FriendInfo ToFriendInfo(this MySqlDataReader reader)
        {
            var fi = new FriendInfo();

            fi.User.ID          = reader.GetUUID("UserID");
            fi.Friend.ID        = reader.GetUUID("FriendID");
            fi.Secret           = reader.GetString("Secret");
            fi.FriendGivenFlags = reader.GetEnum <FriendRightFlags>("RightsToFriend");
            fi.UserGivenFlags   = reader.GetEnum <FriendRightFlags>("RightsToUser");
            return(fi);
        }
Пример #5
0
        void IInventoryItemServiceInterface.Update(InventoryItem item)
        {
            using (var connection = new MySqlConnection(m_ConnectionString))
            {
                connection.Open();
                InventoryFlags flags;
                AssetType      assetType;
                UUID           assetID;
                connection.InsideTransaction((transaction) =>
                {
                    using (var cmd = new MySqlCommand("SELECT `AssetID`, `Flags`,`AssetType` FROM " + m_InventoryItemTable + " WHERE OwnerID = @ownerid AND ID = @itemid LIMIT 1", connection)
                    {
                        Transaction = transaction
                    })
                    {
                        cmd.Parameters.AddParameter("@ownerid", item.Owner.ID);
                        cmd.Parameters.AddParameter("@itemid", item.ID);
                        using (MySqlDataReader dbReader = cmd.ExecuteReader())
                        {
                            if (!dbReader.Read())
                            {
                                throw new InventoryItemNotFoundException(item.ID);
                            }
                            assetID   = dbReader.GetUUID("AssetID");
                            flags     = dbReader.GetEnum <InventoryFlags>("Flags") & InventoryFlags.PermOverwriteMask;
                            assetType = dbReader.GetEnum <AssetType>("AssetType");
                        }
                    }

                    if (assetType != AssetType.Object || assetID != item.AssetID)
                    {
                        flags = InventoryFlags.None;
                    }

                    var newVals = new Dictionary <string, object>
                    {
                        ["AssetID"]                  = item.AssetID,
                        ["Name"]                     = item.Name,
                        ["Description"]              = item.Description,
                        ["BasePermissionsMask"]      = item.Permissions.Base,
                        ["CurrentPermissionsMask"]   = item.Permissions.Current,
                        ["EveryOnePermissionsMask"]  = item.Permissions.EveryOne,
                        ["NextOwnerPermissionsMask"] = item.Permissions.NextOwner,
                        ["GroupPermissionsMask"]     = item.Permissions.Group,
                        ["SalePrice"]                = item.SaleInfo.Price,
                        ["SaleType"]                 = item.SaleInfo.Type,
                        ["Flags"]                    = item.Flags | flags
                    };
                    connection.UpdateSet(m_InventoryItemTable, newVals, string.Format("OwnerID = '{0}' AND ID = '{1}'", item.Owner.ID, item.ID), transaction);
                });
            }
            IncrementVersion(item.Owner.ID, item.ParentFolderID);
        }
Пример #6
0
 public static ExperienceInfo ToExperienceInfo(this MySqlDataReader reader) => new ExperienceInfo
 {
     ID          = new UEI(reader.GetUUID("ID"), reader.GetString("Name"), reader.GetUri("HomeURI")),
     Description = reader.GetString("Description"),
     Properties  = reader.GetEnum <ExperiencePropertyFlags>("Properties"),
     Owner       = reader.GetUGUI("Owner"),
     Creator     = reader.GetUGUI("Creator"),
     Group       = reader.GetUGI("Group"),
     Maturity    = reader.GetEnum <RegionAccess>("Maturity"),
     Marketplace = reader.GetString("Marketplace"),
     LogoID      = reader.GetUUID("LogoID"),
     SlUrl       = reader.GetString("SlUrl")
 };
        public override GroupPowers GetAgentPowers(UGI group, UGUI agent)
        {
            if (!Members.ContainsKey(agent, group, agent))
            {
                return(GroupPowers.None);
            }

            GroupPowers powers;

            if (!TryGetGroupRoleRights(agent, group, UUID.Zero, out powers))
            {
                return(GroupPowers.None);
            }

            using (var conn = new MySqlConnection(m_ConnectionString))
            {
                conn.Open();
                using (var cmd = new MySqlCommand(
                           "SELECT Powers FROM roles AS r INNER JOIN " +
                           "((grouprolemembers AS rm INNER JOIN groupmembers AS m ON rm.GroupID = m.GroupID AND rm.PrincipalID = m.PrincipalID) ON " +
                           "r.RoleID = rm.RoleID WHERE rm.GroupID = @groupid AND rm.PrincipalID = @principalid", conn))
                {
                    cmd.Parameters.AddParameter("@groupid", group.ID);
                    cmd.Parameters.AddParameter("@principalid", agent.ID);
                    using (MySqlDataReader reader = cmd.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            powers |= reader.GetEnum <GroupPowers>("Powers");
                        }
                    }
                }
            }
            return(powers);
        }
 public static GroupRolemember ToGroupRolemember(this MySqlDataReader reader) => new GroupRolemember()
 {
     Group     = new UGI(reader.GetUUID("GroupID")),
     RoleID    = reader.GetUUID("RoleID"),
     Principal = new UUI(reader.GetUUID("PrincipalID")),
     Powers    = reader.GetEnum <GroupPowers>("Powers")
 };
Пример #9
0
 public override bool TryGetValue(UUID userid, UUID dstTransactionID, out InventoryTransferInfo info)
 {
     info = null;
     using (var connection = new MySqlConnection(m_ConnectionString))
     {
         connection.Open();
         using (var cmd = new MySqlCommand("SELECT * FROM inventorytransfertransactions WHERE dsttransactionid = @transactionid AND dstagentid LIKE @userid", connection))
         {
             cmd.Parameters.AddParameter("@transactionid", dstTransactionID);
             cmd.Parameters.AddParameter("@userid", userid + "%");
             using (MySqlDataReader reader = cmd.ExecuteReader())
             {
                 if (reader.Read())
                 {
                     info = new InventoryTransferInfo
                     {
                         SrcAgent         = reader.GetUGUI("srcagentid"),
                         DstAgent         = reader.GetUGUI("dstagentid"),
                         SrcTransactionID = reader.GetUUID("srctransactionid"),
                         DstTransactionID = reader.GetUUID("dsttransactionid"),
                         AssetType        = reader.GetEnum <AssetType>("assettype"),
                         InventoryID      = reader.GetUUID("inventoryid")
                     };
                 }
             }
         }
     }
     return(info != null);
 }
 public static GroupRolemembership ToGroupRolemembership(this MySqlDataReader reader) => new GroupRolemembership
 {
     Group      = new UGI(reader.GetUUID("GroupID")),
     RoleID     = reader.GetUUID("RoleID"),
     Principal  = reader.GetUGUI("PrincipalID"),
     Powers     = reader.GetEnum <GroupPowers>("Powers"),
     GroupTitle = reader.GetString("Title")
 };
 public static InventoryFolder ToFolder(this MySqlDataReader reader) => new InventoryFolder(reader.GetUUID("ID"))
 {
     ParentFolderID = reader.GetUUID("ParentFolderID"),
     Name           = reader.GetString("Name"),
     DefaultType    = reader.GetEnum <AssetType>("DefaultType"),
     Owner          = reader.GetUGUI("OwnerID"),
     Version        = reader.GetInt32("Version")
 };
 private ObjectGroup ObjectGroupFromDbReader(MySqlDataReader dbReader) => new ObjectGroup()
 {
     IsTempOnRez        = dbReader.GetBool("IsTempOnRez"),
     Owner              = dbReader.GetUUI("Owner"),
     LastOwner          = dbReader.GetUUI("LastOwner"),
     Group              = dbReader.GetUGI("Group"),
     SaleType           = dbReader.GetEnum <InventoryItem.SaleInfoData.SaleType>("SaleType"),
     SalePrice          = dbReader.GetInt32("SalePrice"),
     PayPrice0          = dbReader.GetInt32("PayPrice0"),
     PayPrice1          = dbReader.GetInt32("PayPrice1"),
     PayPrice2          = dbReader.GetInt32("PayPrice2"),
     PayPrice3          = dbReader.GetInt32("PayPrice3"),
     PayPrice4          = dbReader.GetInt32("PayPrice4"),
     AttachedPos        = dbReader.GetVector3("AttachedPos"),
     AttachPoint        = dbReader.GetEnum <AttachmentPoint>("AttachPoint"),
     IsIncludedInSearch = dbReader.GetBool("IsIncludedInSearch"),
     RezzingObjectID    = dbReader.GetUUID("RezzingObjectID")
 };
Пример #13
0
 public override bool TryGetValue(UUID key, out AssetMetadata metadata, out int length)
 {
     metadata = null;
     length   = 0;
     using (var conn = new MySqlConnection(m_ConnectionString))
     {
         conn.Open();
         using (var cmd = new MySqlCommand("SELECT id, LENGTH(data) AS dataLength, assetrefs.assetType, name, create_time, access_time, asset_flags, temporary FROM assetrefs INNER JOIN assetdata ON assetrefs.hash = assetdata.hash AND assetrefs.assetType = assetdata.assetType WHERE id = @id LIMIT 1", conn))
         {
             cmd.Parameters.AddParameter("@id", key);
             using (MySqlDataReader dbReader = cmd.ExecuteReader())
             {
                 if (!dbReader.Read())
                 {
                     return(false);
                 }
                 metadata = new AssetMetadata
                 {
                     ID         = dbReader.GetUUID("id"),
                     Type       = dbReader.GetEnum <AssetType>("assetType"),
                     Name       = dbReader.GetString("name"),
                     CreateTime = dbReader.GetDate("create_time"),
                     AccessTime = dbReader.GetDate("access_time"),
                     Flags      = dbReader.GetEnum <AssetFlags>("asset_flags"),
                     Temporary  = dbReader.GetBool("temporary")
                 };
                 length = dbReader.GetInt32("dataLength");
             }
         }
         if (DateTime.UtcNow - metadata.AccessTime > TimeSpan.FromHours(1))
         {
             /* update access_time */
             using (var cmd = new MySqlCommand("UPDATE assetrefs SET access_time = @access WHERE id = @id", conn))
             {
                 cmd.Parameters.AddWithValue("@access", Date.GetUnixTime());
                 cmd.Parameters.AddWithValue("@id", key);
                 cmd.ExecuteNonQuery();
             }
         }
         return(true);
     }
 }
 private RegionInfo ToRegionInfo(MySqlDataReader dbReader) => new RegionInfo
 {
     ID                      = dbReader.GetUUID("uuid"),
     Name                    = dbReader.GetString("regionName"),
     RegionSecret            = dbReader.GetString("regionSecret"),
     ServerIP                = dbReader.GetString("serverIP"),
     ServerPort              = dbReader.GetUInt32("serverPort"),
     ServerURI               = dbReader.GetString("serverURI"),
     Location                = dbReader.GetGridVector("loc"),
     RegionMapTexture        = dbReader.GetUUID("regionMapTexture"),
     ServerHttpPort          = dbReader.GetUInt32("serverHttpPort"),
     Owner                   = dbReader.GetUGUI("owner"),
     Access                  = dbReader.GetEnum <RegionAccess>("access"),
     Size                    = dbReader.GetGridVector("size"),
     Flags                   = dbReader.GetEnum <RegionFlags>("flags"),
     AuthenticatingToken     = dbReader.GetString("AuthenticatingToken"),
     AuthenticatingPrincipal = dbReader.GetUGUI("AuthenticatingPrincipalID"),
     ParcelMapTexture        = dbReader.GetUUID("parcelMapTexture"),
     ProductName             = dbReader.GetString("ProductName")
 };
Пример #15
0
 public override bool TryGetValue(UUID key, out AssetData asset)
 {
     asset = null;
     using (var conn = new MySqlConnection(m_ConnectionString))
     {
         conn.Open();
         using (var cmd = new MySqlCommand("SELECT * FROM assetrefs INNER JOIN assetdata ON assetrefs.hash = assetdata.hash AND assetrefs.assetType = assetdata.assetType WHERE id = @id", conn))
         {
             cmd.Parameters.AddParameter("@id", key);
             using (MySqlDataReader dbReader = cmd.ExecuteReader())
             {
                 if (!dbReader.Read())
                 {
                     return(false);
                 }
                 asset = new AssetData()
                 {
                     ID         = dbReader.GetUUID("id"),
                     Data       = dbReader.GetBytes("data"),
                     Type       = dbReader.GetEnum <AssetType>("assetType"),
                     Name       = dbReader.GetString("name"),
                     CreateTime = dbReader.GetDate("create_time"),
                     AccessTime = dbReader.GetDate("access_time"),
                     Flags      = dbReader.GetEnum <AssetFlags>("asset_flags"),
                     Temporary  = dbReader.GetBool("temporary")
                 };
             }
         }
         if (DateTime.UtcNow - asset.AccessTime > TimeSpan.FromHours(1))
         {
             /* update access_time */
             using (var cmd = new MySqlCommand("UPDATE assetrefs SET access_time = @access WHERE id = @id", conn))
             {
                 cmd.Parameters.AddWithValue("@access", Date.GetUnixTime());
                 cmd.Parameters.AddWithValue("@id", key);
                 cmd.ExecuteNonQuery();
             }
         }
         return(true);
     }
 }
        public static UserAccount ToUserAccount(this MySqlDataReader reader, Uri homeURI)
        {
            var            info = new UserAccount();
            string         gkUri;
            UserRegionData regData;

            info.Principal.ID              = reader.GetUUID("ID");
            info.Principal.FirstName       = reader.GetString("FirstName");
            info.Principal.LastName        = reader.GetString("LastName");
            info.Principal.HomeURI         = homeURI;
            info.Principal.IsAuthoritative = true;
            info.Email          = reader.GetString("Email");
            info.Created        = reader.GetDate("Created");
            info.UserLevel      = reader.GetInt32("UserLevel");
            info.UserFlags      = reader.GetEnum <UserFlags>("UserFlags");
            info.UserTitle      = reader.GetString("UserTitle");
            info.IsLocalToGrid  = true;
            info.IsEverLoggedIn = reader.GetBool("IsEverLoggedIn");

            gkUri   = reader.GetString("LastGatekeeperURI");
            regData = new UserRegionData
            {
                RegionID = reader.GetUUID("LastRegionID"),
                Position = reader.GetVector3("LastPosition"),
                LookAt   = reader.GetVector3("LastLookAt"),
            };
            if (!string.IsNullOrEmpty(gkUri))
            {
                regData.GatekeeperURI = new URI(gkUri);
            }
            if (regData.RegionID != UUID.Zero)
            {
                info.LastRegion = regData;
            }

            gkUri   = reader.GetString("HomeGatekeeperURI");
            regData = new UserRegionData
            {
                RegionID = reader.GetUUID("HomeRegionID"),
                Position = reader.GetVector3("HomePosition"),
                LookAt   = reader.GetVector3("HomeLookAt"),
            };
            if (!string.IsNullOrEmpty(gkUri))
            {
                regData.GatekeeperURI = new URI(gkUri);
            }
            if (regData.RegionID != UUID.Zero)
            {
                info.HomeRegion = regData;
            }

            return(info);
        }
 public static GroupNotice ToGroupNotice(this MySqlDataReader reader) => new GroupNotice()
 {
     Group            = new UGI(reader.GetUUID("GroupID")),
     ID               = reader.GetUUID("NoticeID"),
     Timestamp        = reader.GetDate("Timestamp"),
     FromName         = reader.GetString("FromName"),
     Subject          = reader.GetString("Subject"),
     Message          = reader.GetString("Message"),
     HasAttachment    = reader.GetBool("HasAttachment"),
     AttachmentType   = reader.GetEnum <AssetType>("AttachmentType"),
     AttachmentName   = reader.GetString("AttachmentName"),
     AttachmentItemID = reader.GetUUID("AttachmentItemID"),
     AttachmentOwner  = new UUI(reader.GetUUID("AttachmentOwnerID"))
 };
Пример #18
0
 public static EstateInfo ToEstateInfo(this MySqlDataReader reader) => new EstateInfo
 {
     ID                = reader.GetUInt32("ID"),
     Name              = reader.GetString("Name"),
     Owner             = reader.GetUGUI("Owner"),
     Flags             = reader.GetEnum <RegionOptionFlags>("Flags"),
     PricePerMeter     = reader.GetInt32("PricePerMeter"),
     BillableFactor    = reader.GetDouble("BillableFactor"),
     SunPosition       = reader.GetDouble("SunPosition"),
     AbuseEmail        = reader.GetString("AbuseEmail"),
     CovenantID        = reader.GetUUID("CovenantID"),
     CovenantTimestamp = reader.GetDate("CovenantTimestamp"),
     UseGlobalTime     = reader.GetBool("UseGlobalTime"),
     ParentEstateID    = reader.GetUInt32("ParentEstateID")
 };
 private NpcPresenceInfo ReaderToPresenceInfo(MySqlDataReader reader) => new NpcPresenceInfo
 {
     Npc = new UGUIWithName
     {
         ID        = reader.GetUUID("NpcID"),
         FirstName = reader.GetString("FirstName"),
         LastName  = reader.GetString("LastName")
     },
     Owner             = reader.GetUGUI("Owner"),
     Group             = reader.GetUGI("Group"),
     Options           = reader.GetEnum <NpcOptions>("Options"),
     RegionID          = reader.GetUUID("RegionID"),
     Position          = reader.GetVector3("Position"),
     LookAt            = reader.GetVector3("LookAt"),
     SittingOnObjectID = reader.GetUUID("SittingOnObjectID")
 };
Пример #20
0
        public override Dictionary <UUID, RegionFlags> GetAllRegionDefaultFlags()
        {
            var result = new Dictionary <UUID, RegionFlags>();

            using (var connection = new MySqlConnection(m_ConnectionString))
            {
                connection.Open();
                using (var cmd = new MySqlCommand("SELECT * FROM regiondefaults", connection))
                {
                    using (MySqlDataReader reader = cmd.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            result.Add(reader.GetUUID("uuid"), reader.GetEnum <RegionFlags>("flags"));
                        }
                    }
                }
            }
            return(result);
        }
Пример #21
0
        public override RegionFlags GetRegionDefaultFlags(UUID regionId)
        {
            var flags = RegionFlags.None;

            using (var connection = new MySqlConnection(m_ConnectionString))
            {
                connection.Open();
                using (var cmd = new MySqlCommand("SELECT flags FROM regiondefaults WHERE uuid = @id LIMIT 1", connection))
                {
                    cmd.Parameters.AddParameter("@id", regionId);
                    using (MySqlDataReader reader = cmd.ExecuteReader())
                    {
                        if (reader.Read())
                        {
                            flags = reader.GetEnum <RegionFlags>("flags");
                        }
                    }
                }
            }
            return(flags);
        }
Пример #22
0
        private GroupMembership MembershipFromReader(MySqlDataReader reader, UUI requestingAgent) => new GroupMembership()
        {
            IsAcceptNotices = reader.GetBool("AcceptNotices"),
            Contribution    = reader.GetInt32("Contribution"),
            GroupInsigniaID = reader.GetUUID("InsigniaID"),
            GroupPowers     = reader.GetEnum <GroupPowers>("RolePowers"),
            GroupTitle      = reader.GetString("RoleTitle"),
            IsListInProfile = reader.GetBool("ListInProfile"),
            Group           = ResolveName(requestingAgent, new UGI(reader.GetUUID("GroupID"))),
            Principal       = ResolveName(new UUI(reader.GetUUID("PrincipalID"))),

            IsAllowPublish   = reader.GetBool("AllowPublish"),
            Charter          = reader.GetString("Charter"),
            ActiveRoleID     = reader.GetUUID("ActiveRoleID"),
            Founder          = ResolveName(new UUI(reader.GetUUID("FounderID"))),
            AccessToken      = reader.GetString("AccessToken"),
            IsMaturePublish  = reader.GetBool("MaturePublish"),
            IsOpenEnrollment = reader.GetBool("OpenEnrollment"),
            MembershipFee    = reader.GetInt32("MembershipFee"),
            IsShownInList    = reader.GetBool("ShowInList")
        };
 private bool TryGetGroupRoleRights(UGUI requestingAgent, UGI group, UUID roleID, out GroupPowers powers)
 {
     powers = GroupPowers.None;
     using (var conn = new MySqlConnection(m_ConnectionString))
     {
         conn.Open();
         using (var cmd = new MySqlCommand("SELECT Powers FROM grouproles AS r WHERE r.GroupID = @groupid AND r.RoleID = @grouproleid LIMIT 1", conn))
         {
             cmd.Parameters.AddParameter("@groupid", group.ID);
             cmd.Parameters.AddParameter("@grouproleid", roleID);
             using (MySqlDataReader reader = cmd.ExecuteReader())
             {
                 if (reader.Read())
                 {
                     powers = reader.GetEnum <GroupPowers>("Powers");
                     return(true);
                 }
             }
         }
     }
     return(false);
 }
        public override List <GridInstantMessage> GetOfflineIMs(UUID principalID)
        {
            var ims = new List <GridInstantMessage>();

            using (var connection = new MySqlConnection(m_ConnectionString))
            {
                connection.Open();
                using (var cmd = new MySqlCommand("SELECT * FROM offlineim WHERE ToAgentID = @id", connection))
                {
                    cmd.Parameters.AddParameter("@id", principalID);
                    using (MySqlDataReader reader = cmd.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            var im = new GridInstantMessage()
                            {
                                ID             = reader.GetUInt64("ID"),
                                FromAgent      = reader.GetUUI("FromAgent"),
                                FromGroup      = reader.GetUGI("FromGroup"),
                                ToAgent        = new UUI(reader.GetUUID("ToAgentID")),
                                Dialog         = reader.GetEnum <GridInstantMessageDialog>("Dialog"),
                                IsFromGroup    = reader.GetBool("IsFromGroup"),
                                Message        = reader.GetString("Message"),
                                IMSessionID    = reader.GetUUID("IMSessionID"),
                                Position       = reader.GetVector3("Position"),
                                BinaryBucket   = reader.GetBytes("BinaryBucket"),
                                ParentEstateID = reader.GetUInt32("ParentEstateID"),
                                RegionID       = reader.GetUUID("RegionID"),
                                Timestamp      = reader.GetDate("Timestamp"),
                                IsOffline      = true
                            };
                            ims.Add(im);
                        }
                    }
                }
            }
            return(ims);
        }
        public static GroupRole ToGroupRole(this MySqlDataReader reader, string prefix = "")
        {
            var role = new GroupRole()
            {
                Group       = new UGI(reader.GetUUID("GroupID")),
                ID          = reader.GetUUID("RoleID"),
                Name        = reader.GetString(prefix + "Name"),
                Description = reader.GetString(prefix + "Description"),
                Title       = reader.GetString(prefix + "Title"),
                Powers      = reader.GetEnum <GroupPowers>(prefix + "Powers")
            };

            if (role.ID == UUID.Zero)
            {
                role.Members = reader.GetUInt32("GroupMembers");
            }
            else
            {
                role.Members = reader.GetUInt32("RoleMembers");
            }

            return(role);
        }
        private ObjectPart ObjectPartFromDbReader(MySqlDataReader dbReader)
        {
            var objpart = new ObjectPart(dbReader.GetUUID("ID"))
            {
                LoadedLinkNumber     = dbReader.GetInt32("LinkNumber"),
                Position             = dbReader.GetVector3("Position"),
                Rotation             = dbReader.GetQuaternion("Rotation"),
                SitText              = dbReader.GetString("SitText"),
                TouchText            = dbReader.GetString("TouchText"),
                Name                 = dbReader.GetString("Name"),
                Description          = dbReader.GetString("Description"),
                SitTargetOffset      = dbReader.GetVector3("SitTargetOffset"),
                SitTargetOrientation = dbReader.GetQuaternion("SitTargetOrientation"),
                Creator              = dbReader.GetUUI("Creator"),
                CreationDate         = dbReader.GetDate("CreationDate"),
                RezDate              = dbReader.GetDate("RezDate"),
                Flags                = dbReader.GetEnum <PrimitiveFlags>("Flags"),

                CameraAtOffset  = dbReader.GetVector3("CameraAtOffset"),
                CameraEyeOffset = dbReader.GetVector3("CameraEyeOffset"),

                PhysicsShapeType          = dbReader.GetEnum <PrimitivePhysicsShapeType>("PhysicsShapeType"),
                PathfindingType           = dbReader.GetEnum <PathfindingType>("PathfindingType"),
                WalkableCoefficientAvatar = dbReader.GetDouble("WalkableCoefficientAvatar"),
                WalkableCoefficientA      = dbReader.GetDouble("WalkableCoefficientA"),
                WalkableCoefficientB      = dbReader.GetDouble("WalkableCoefficientB"),
                WalkableCoefficientC      = dbReader.GetDouble("WalkableCoefficientC"),
                WalkableCoefficientD      = dbReader.GetDouble("WalkableCoefficientD"),
                Material = dbReader.GetEnum <PrimitiveMaterial>("Material"),
                Size     = dbReader.GetVector3("Size"),
                Slice    = dbReader.GetVector3("Slice"),

                MediaURL = dbReader.GetString("MediaURL"),

                AngularVelocity = dbReader.GetVector3("AngularVelocity"),
                PointLight      = new ObjectPart.PointLightParam
                {
                    DbSerialization = dbReader.GetBytes("LightData")
                },
                Projection = new ObjectPart.ProjectionParam
                {
                    DbSerialization = dbReader.GetBytes("ProjectionData")
                },
                Text = new ObjectPart.TextParam
                {
                    Serialization = dbReader.GetBytes("HoverTextData")
                },
                Flexible = new ObjectPart.FlexibleParam
                {
                    DbSerialization = dbReader.GetBytes("FlexibleData")
                },
                Sound = new ObjectPart.SoundParam
                {
                    Serialization = dbReader.GetBytes("LoopedSoundData")
                },
                CollisionSound = new ObjectPart.CollisionSoundParam
                {
                    Serialization = dbReader.GetBytes("ImpactSoundData")
                },
                Shape = new ObjectPart.PrimitiveShape
                {
                    Serialization = dbReader.GetBytes("PrimitiveShapeData")
                },
                ParticleSystemBytes   = dbReader.GetBytes("ParticleSystem"),
                TextureEntryBytes     = dbReader.GetBytes("TextureEntryBytes"),
                TextureAnimationBytes = dbReader.GetBytes("TextureAnimationBytes"),

                ScriptAccessPin          = dbReader.GetInt32("ScriptAccessPin"),
                ForceMouselook           = dbReader.GetBoolean("ForceMouselook"),
                BaseMask                 = dbReader.GetEnum <InventoryPermissionsMask>("BasePermissions"),
                OwnerMask                = dbReader.GetEnum <InventoryPermissionsMask>("CurrentPermissions"),
                EveryoneMask             = dbReader.GetEnum <InventoryPermissionsMask>("EveryOnePermissions"),
                GroupMask                = dbReader.GetEnum <InventoryPermissionsMask>("GroupPermissions"),
                NextOwnerMask            = dbReader.GetEnum <InventoryPermissionsMask>("NextOwnerPermissions"),
                ClickAction              = dbReader.GetEnum <ClickActionType>("ClickAction"),
                PassCollisionMode        = dbReader.GetEnum <PassEventMode>("PassCollisionMode"),
                PassTouchMode            = dbReader.GetEnum <PassEventMode>("PassTouchMode"),
                Velocity                 = dbReader.GetVector3("Velocity"),
                IsSoundQueueing          = dbReader.GetBool("IsSoundQueueing"),
                IsAllowedDrop            = dbReader.GetBool("IsAllowedDrop"),
                PhysicsDensity           = dbReader.GetDouble("PhysicsDensity"),
                PhysicsFriction          = dbReader.GetDouble("PhysicsFriction"),
                PhysicsRestitution       = dbReader.GetDouble("PhysicsRestitution"),
                PhysicsGravityMultiplier = dbReader.GetDouble("PhysicsGravityMultiplier"),

                IsVolumeDetect    = dbReader.GetBool("IsVolumeDetect"),
                IsPhantom         = dbReader.GetBool("IsPhantom"),
                IsPhysics         = dbReader.GetBool("IsPhysics"),
                IsRotateXEnabled  = dbReader.GetBool("IsRotateXEnabled"),
                IsRotateYEnabled  = dbReader.GetBool("IsRotateYEnabled"),
                IsRotateZEnabled  = dbReader.GetBool("IsRotateZEnabled"),
                IsBlockGrab       = dbReader.GetBool("IsBlockGrab"),
                IsSandbox         = dbReader.GetBool("IsSandbox"),
                IsDieAtEdge       = dbReader.GetBool("IsDieAtEdge"),
                IsReturnAtEdge    = dbReader.GetBool("IsReturnAtEdge"),
                IsBlockGrabObject = dbReader.GetBool("IsBlockGrabObject"),
                SandboxOrigin     = dbReader.GetVector3("SandboxOrigin"),
                ExtendedMesh      = new ObjectPart.ExtendedMeshParams {
                    DbSerialization = dbReader.GetBytes("ExtendedMeshData")
                }
            };

            using (var ms = new MemoryStream(dbReader.GetBytes("DynAttrs")))
            {
                foreach (KeyValuePair <string, IValue> kvp in (Map)LlsdBinary.Deserialize(ms))
                {
                    objpart.DynAttrs.Add(kvp.Key, kvp.Value);
                }
            }

            return(objpart);
        }
        ParcelInfo ISimulationDataParcelStorageInterface.this[UUID regionID, UUID parcelID]
        {
            get
            {
                using (var connection = new MySqlConnection(m_ConnectionString))
                {
                    connection.Open();
                    using (var cmd = new MySqlCommand("SELECT * FROM parcels WHERE RegionID = '" + regionID.ToString() + "' AND ParcelID = '" + parcelID.ToString() + "' LIMIT 1", connection))
                    {
                        using (MySqlDataReader dbReader = cmd.ExecuteReader())
                        {
                            if (!dbReader.Read())
                            {
                                throw new KeyNotFoundException();
                            }

                            var pi = new ParcelInfo((int)dbReader["BitmapWidth"], (int)dbReader["BitmapHeight"])
                            {
                                Area              = dbReader.GetInt32("Area"),
                                AuctionID         = dbReader.GetUInt32("AuctionID"),
                                AuthBuyer         = dbReader.GetUGUI("AuthBuyer"),
                                Category          = dbReader.GetEnum <ParcelCategory>("Category"),
                                ClaimDate         = dbReader.GetDate("ClaimDate"),
                                ClaimPrice        = dbReader.GetInt32("ClaimPrice"),
                                ID                = dbReader.GetUUID("ParcelID"),
                                Group             = dbReader.GetUGI("Group"),
                                GroupOwned        = dbReader.GetBool("IsGroupOwned"),
                                Description       = dbReader.GetString("Description"),
                                Flags             = dbReader.GetEnum <ParcelFlags>("Flags"),
                                LandingType       = dbReader.GetEnum <TeleportLandingType>("LandingType"),
                                LandingPosition   = dbReader.GetVector3("LandingPosition"),
                                LandingLookAt     = dbReader.GetVector3("LandingLookAt"),
                                Name              = dbReader.GetString("Name"),
                                LocalID           = dbReader.GetInt32("LocalID"),
                                MediaID           = dbReader.GetUUID("MediaID"),
                                Owner             = dbReader.GetUGUI("Owner"),
                                SnapshotID        = dbReader.GetUUID("SnapshotID"),
                                SalePrice         = dbReader.GetInt32("SalePrice"),
                                OtherCleanTime    = dbReader.GetInt32("OtherCleanTime"),
                                MediaAutoScale    = dbReader.GetBool("MediaAutoScale"),
                                MediaType         = dbReader.GetString("MediaType"),
                                MediaWidth        = dbReader.GetInt32("MediaWidth"),
                                MediaHeight       = dbReader.GetInt32("MediaHeight"),
                                MediaLoop         = dbReader.GetBool("MediaLoop"),
                                ObscureMedia      = dbReader.GetBool("ObscureMedia"),
                                ObscureMusic      = dbReader.GetBool("ObscureMusic"),
                                MediaDescription  = dbReader.GetString("MediaDescription"),
                                RentPrice         = dbReader.GetInt32("RentPrice"),
                                AABBMin           = dbReader.GetVector3("AABBMin"),
                                AABBMax           = dbReader.GetVector3("AABBMax"),
                                ParcelPrimBonus   = dbReader.GetDouble("ParcelPrimBonus"),
                                PassPrice         = dbReader.GetInt32("PassPrice"),
                                PassHours         = dbReader.GetDouble("PassHours"),
                                ActualArea        = dbReader.GetInt32("ActualArea"),
                                BillableArea      = dbReader.GetInt32("BillAbleArea"),
                                Status            = dbReader.GetEnum <ParcelStatus>("Status"),
                                SeeAvatars        = dbReader.GetBool("SeeAvatars"),
                                AnyAvatarSounds   = dbReader.GetBool("AnyAvatarSounds"),
                                GroupAvatarSounds = dbReader.GetBool("GroupAvatarSounds"),
                                IsPrivate         = dbReader.GetBool("IsPrivate")
                            };
                            pi.LandBitmap.DataNoAABBUpdate = dbReader.GetBytes("Bitmap");

                            var uri = (string)dbReader["MusicURI"];
                            if (!string.IsNullOrEmpty(uri))
                            {
                                pi.MusicURI = new URI(uri);
                            }
                            uri = (string)dbReader["MediaURI"];
                            if (!string.IsNullOrEmpty(uri))
                            {
                                pi.MediaURI = new URI(uri);
                            }

                            return(pi);
                        }
                    }
                }
            }
        }
        public override void RegisterRegion(RegionInfo regionInfo, bool keepOnlineUnmodified)
        {
            foreach (RegionDefaultFlagsServiceInterface service in m_RegionDefaultServices)
            {
                regionInfo.Flags |= service.GetRegionDefaultFlags(regionInfo.ID);
            }

            using (var conn = new MySqlConnection(m_ConnectionString))
            {
                conn.Open();

                if (!m_AllowDuplicateRegionNames)
                {
                    using (var cmd = new MySqlCommand("SELECT uuid FROM `" + MySqlHelper.EscapeString(m_TableName) + "` WHERE regionName = @name LIMIT 1", conn))
                    {
                        cmd.Parameters.AddParameter("@name", regionInfo.Name);
                        using (MySqlDataReader dbReader = cmd.ExecuteReader())
                        {
                            if (dbReader.Read() &&
                                dbReader.GetUUID("uuid") != regionInfo.ID)
                            {
                                throw new GridRegionUpdateFailedException("Duplicate region name");
                            }
                        }
                    }
                }

                if (keepOnlineUnmodified)
                {
                    using (var cmd = new MySqlCommand("SELECT flags FROM `" + MySqlHelper.EscapeString(m_TableName) + "` WHERE uuid = @id LIMIT 1", conn))
                    {
                        cmd.Parameters.AddParameter("@id", regionInfo.ID);
                        using (MySqlDataReader dbReader = cmd.ExecuteReader())
                        {
                            if (dbReader.Read())
                            {
                                RegionFlags flags = dbReader.GetEnum <RegionFlags>("flags");
                                regionInfo.Flags &= ~RegionFlags.RegionOnline;
                                regionInfo.Flags |= (flags & RegionFlags.RegionOnline);
                            }
                        }
                    }
                }


                /* we have to give checks for all intersection variants */
                using (var cmd = new MySqlCommand("SELECT uuid FROM `" + MySqlHelper.EscapeString(m_TableName) + "` WHERE (" +
                                                  "(locX >= @minx AND locY >= @miny AND locX < @maxx AND locY < @maxy) OR " +
                                                  "(locX + sizeX > @minx AND locY+sizeY > @miny AND locX + sizeX < @maxx AND locY + sizeY < @maxy)" +
                                                  ") AND (NOT uuid = @regionid) LIMIT 1", conn))
                {
                    cmd.Parameters.AddParameter("@min", regionInfo.Location);
                    cmd.Parameters.AddParameter("@max", regionInfo.Location + regionInfo.Size);
                    cmd.Parameters.AddParameter("@regionid", regionInfo.ID);
                    using (MySqlDataReader dbReader = cmd.ExecuteReader())
                    {
                        if (dbReader.Read() &&
                            dbReader.GetUUID("uuid") != regionInfo.ID)
                        {
                            throw new GridRegionUpdateFailedException("Overlapping regions");
                        }
                    }
                }

                var regionData = new Dictionary <string, object>
                {
                    ["uuid"]                      = regionInfo.ID,
                    ["regionName"]                = regionInfo.Name,
                    ["loc"]                       = regionInfo.Location,
                    ["size"]                      = regionInfo.Size,
                    ["regionName"]                = regionInfo.Name,
                    ["serverIP"]                  = regionInfo.ServerIP,
                    ["serverHttpPort"]            = regionInfo.ServerHttpPort,
                    ["serverURI"]                 = regionInfo.ServerURI,
                    ["serverPort"]                = regionInfo.ServerPort,
                    ["regionMapTexture"]          = regionInfo.RegionMapTexture,
                    ["parcelMapTexture"]          = regionInfo.ParcelMapTexture,
                    ["access"]                    = regionInfo.Access,
                    ["regionSecret"]              = regionInfo.RegionSecret,
                    ["owner"]                     = regionInfo.Owner,
                    ["AuthenticatingToken"]       = regionInfo.AuthenticatingToken,
                    ["AuthenticatingPrincipalID"] = regionInfo.AuthenticatingPrincipal,
                    ["flags"]                     = regionInfo.Flags,
                    ["ProductName"]               = regionInfo.ProductName
                };
                MySQLUtilities.ReplaceInto(conn, m_TableName, regionData);
            }
        }
        private ObjectPartInventoryItem ObjectPartInventoryItemFromDbReader(MySqlDataReader dbReader)
        {
            var item = new ObjectPartInventoryItem(dbReader.GetUUID("InventoryID"))
            {
                AssetID          = dbReader.GetUUID("AssetID"),
                AssetType        = dbReader.GetEnum <AssetType>("AssetType"),
                CreationDate     = dbReader.GetDate("CreationDate"),
                Creator          = dbReader.GetUUI("Creator"),
                Description      = dbReader.GetString("Description"),
                Flags            = dbReader.GetEnum <InventoryFlags>("Flags"),
                Group            = dbReader.GetUGI("Group"),
                IsGroupOwned     = dbReader.GetBool("GroupOwned"),
                InventoryType    = dbReader.GetEnum <InventoryType>("InventoryType"),
                LastOwner        = dbReader.GetUUI("LastOwner"),
                Name             = dbReader.GetString("Name"),
                Owner            = dbReader.GetUUI("Owner"),
                ParentFolderID   = dbReader.GetUUID("PrimID"),
                NextOwnerAssetID = dbReader.GetUUID("NextOwnerAssetID"),
                ExperienceID     = dbReader.GetUUID("ExperienceID")
            };

            item.Permissions.Base      = dbReader.GetEnum <InventoryPermissionsMask>("BasePermissions");
            item.Permissions.Current   = dbReader.GetEnum <InventoryPermissionsMask>("CurrentPermissions");
            item.Permissions.EveryOne  = dbReader.GetEnum <InventoryPermissionsMask>("EveryOnePermissions");
            item.Permissions.Group     = dbReader.GetEnum <InventoryPermissionsMask>("GroupPermissions");
            item.Permissions.NextOwner = dbReader.GetEnum <InventoryPermissionsMask>("NextOwnerPermissions");
            item.SaleInfo.Type         = dbReader.GetEnum <InventoryItem.SaleInfoData.SaleType>("SaleType");
            item.SaleInfo.Price        = dbReader.GetInt32("SalePrice");
            item.SaleInfo.PermMask     = dbReader.GetEnum <InventoryPermissionsMask>("SalePermMask");
            var grantinfo = new ObjectPartInventoryItem.PermsGranterInfo();

            if (((string)dbReader["PermsGranter"]).Length != 0)
            {
                try
                {
                    grantinfo.PermsGranter = dbReader.GetUUI("PermsGranter");
                }
                catch
                {
                    /* no action required */
                }
            }
            grantinfo.PermsMask = dbReader.GetEnum <ScriptPermissions>("PermsMask");

            return(item);
        }