Formatting cleanup.
							parent
							
								
									e25818d832
								
							
						
					
					
						commit
						65c5efe43b
					
				| 
						 | 
				
			
			@ -28,7 +28,7 @@
 | 
			
		|||
using System.Reflection;
 | 
			
		||||
using System.Runtime.InteropServices;
 | 
			
		||||
 | 
			
		||||
// General Information about an assembly is controlled through the following 
 | 
			
		||||
// General information about an assembly is controlled through the following
 | 
			
		||||
// set of attributes. Change these attribute values to modify the information
 | 
			
		||||
// associated with an assembly.
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -41,8 +41,8 @@ using System.Runtime.InteropServices;
 | 
			
		|||
[assembly : AssemblyTrademark("")]
 | 
			
		||||
[assembly : AssemblyCulture("")]
 | 
			
		||||
 | 
			
		||||
// Setting ComVisible to false makes the types in this assembly not visible 
 | 
			
		||||
// to COM components.  If you need to access a type in this assembly from 
 | 
			
		||||
// Setting ComVisible to false makes the types in this assembly not visible
 | 
			
		||||
// to COM components.  If you need to access a type in this assembly from
 | 
			
		||||
// COM, set the ComVisible attribute to true on that type.
 | 
			
		||||
 | 
			
		||||
[assembly : ComVisible(false)]
 | 
			
		||||
| 
						 | 
				
			
			@ -54,11 +54,11 @@ using System.Runtime.InteropServices;
 | 
			
		|||
// Version information for an assembly consists of the following four values:
 | 
			
		||||
//
 | 
			
		||||
//      Major Version
 | 
			
		||||
//      Minor Version 
 | 
			
		||||
//      Minor Version
 | 
			
		||||
//      Build Number
 | 
			
		||||
//      Revision
 | 
			
		||||
//
 | 
			
		||||
// You can specify all the values or you can default the Build and Revision Numbers 
 | 
			
		||||
// You can specify all the values or you can default the Build and Revision Numbers
 | 
			
		||||
// by using the '*' as shown below:
 | 
			
		||||
// [assembly: AssemblyVersion("1.0.*")]
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -58,7 +58,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController
 | 
			
		|||
        {
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                if (openSim.ConfigSource.Configs["RemoteAdmin"] != null && 
 | 
			
		||||
                if (openSim.ConfigSource.Configs["RemoteAdmin"] != null &&
 | 
			
		||||
                    openSim.ConfigSource.Configs["RemoteAdmin"].GetBoolean("enabled", false))
 | 
			
		||||
                {
 | 
			
		||||
                    m_log.Info("[RADMIN]: Remote Admin Plugin Enabled");
 | 
			
		||||
| 
						 | 
				
			
			@ -96,7 +96,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController
 | 
			
		|||
                if (requiredPassword != String.Empty &&
 | 
			
		||||
                    (!requestData.Contains("password") || (string) requestData["password"] != requiredPassword))
 | 
			
		||||
                    throw new Exception("wrong password");
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                LLUUID regionID = new LLUUID((string) requestData["regionID"]);
 | 
			
		||||
 | 
			
		||||
                responseData["accepted"] = "true";
 | 
			
		||||
| 
						 | 
				
			
			@ -106,10 +106,10 @@ namespace OpenSim.ApplicationPlugins.RemoteController
 | 
			
		|||
 | 
			
		||||
                if (!m_app.SceneManager.TryGetScene(regionID, out rebootedScene))
 | 
			
		||||
                    throw new Exception("region not found");
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                responseData["rebooting"] = "true";
 | 
			
		||||
                rebootedScene.Restart(30);
 | 
			
		||||
            } 
 | 
			
		||||
            }
 | 
			
		||||
            catch(Exception e)
 | 
			
		||||
            {
 | 
			
		||||
                m_log.ErrorFormat("[RADMIN]: Restart region: failed: {0}", e.Message);
 | 
			
		||||
| 
						 | 
				
			
			@ -136,7 +136,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController
 | 
			
		|||
                if (requiredPassword != String.Empty &&
 | 
			
		||||
                    (!requestData.Contains("password") || (string) requestData["password"] != requiredPassword))
 | 
			
		||||
                    throw new Exception("wrong password");
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                string message = (string) requestData["message"];
 | 
			
		||||
                m_log.InfoFormat("[RADMIN]: Broadcasting: {0}", message);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -167,7 +167,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController
 | 
			
		|||
            m_log.DebugFormat("[RADMIN]: Load Terrain: XmlRpc {0}", request.ToString());
 | 
			
		||||
            foreach (string k in requestData.Keys)
 | 
			
		||||
            {
 | 
			
		||||
                m_log.DebugFormat("[RADMIN]: Load Terrain: XmlRpc {0}: >{1}< {2}", 
 | 
			
		||||
                m_log.DebugFormat("[RADMIN]: Load Terrain: XmlRpc {0}: >{1}< {2}",
 | 
			
		||||
                                  k, (string)requestData[k], ((string)requestData[k]).Length);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -198,7 +198,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController
 | 
			
		|||
 | 
			
		||||
                response.Value = responseData;
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception e) 
 | 
			
		||||
            catch (Exception e)
 | 
			
		||||
            {
 | 
			
		||||
                m_log.ErrorFormat("[RADMIN] Terrain Loading: failed: {0}", e.Message);
 | 
			
		||||
                m_log.DebugFormat("[RADMIN] Terrain Loading: failed: {0}", e.ToString());
 | 
			
		||||
| 
						 | 
				
			
			@ -227,14 +227,14 @@ namespace OpenSim.ApplicationPlugins.RemoteController
 | 
			
		|||
 | 
			
		||||
                int timeout = 2000;
 | 
			
		||||
 | 
			
		||||
                if (requestData.ContainsKey("shutdown") && 
 | 
			
		||||
                if (requestData.ContainsKey("shutdown") &&
 | 
			
		||||
                    ((string) requestData["shutdown"] == "delayed") &&
 | 
			
		||||
                    requestData.ContainsKey("milliseconds"))
 | 
			
		||||
                {
 | 
			
		||||
                    timeout = (Int32) requestData["milliseconds"];
 | 
			
		||||
                    m_app.SceneManager.SendGeneralMessage("Region is going down in " + ((int) (timeout/1000)).ToString() +
 | 
			
		||||
                                                          " second(s). Please save what you are doing and log out.");
 | 
			
		||||
                } 
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    m_app.SceneManager.SendGeneralMessage("Region is going down now.");
 | 
			
		||||
| 
						 | 
				
			
			@ -248,7 +248,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController
 | 
			
		|||
 | 
			
		||||
                responseData["success"] = "true";
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception e) 
 | 
			
		||||
            catch (Exception e)
 | 
			
		||||
            {
 | 
			
		||||
                m_log.ErrorFormat("[RADMIN] Shutdown: failed: {0}", e.Message);
 | 
			
		||||
                m_log.DebugFormat("[RADMIN] Shutdown: failed: {0}", e.ToString());
 | 
			
		||||
| 
						 | 
				
			
			@ -272,7 +272,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController
 | 
			
		|||
            Hashtable requestData = (Hashtable) request.Params[0];
 | 
			
		||||
            foreach (string p in param)
 | 
			
		||||
            {
 | 
			
		||||
                if (!requestData.Contains(p)) 
 | 
			
		||||
                if (!requestData.Contains(p))
 | 
			
		||||
                    throw new Exception(String.Format("missing string parameter {0}", p));
 | 
			
		||||
                if (String.IsNullOrEmpty((string)requestData[p]))
 | 
			
		||||
                    throw new Exception(String.Format("parameter {0} is empty", p));
 | 
			
		||||
| 
						 | 
				
			
			@ -284,7 +284,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController
 | 
			
		|||
            Hashtable requestData = (Hashtable) request.Params[0];
 | 
			
		||||
            foreach (string p in param)
 | 
			
		||||
            {
 | 
			
		||||
                if (!requestData.Contains(p)) 
 | 
			
		||||
                if (!requestData.Contains(p))
 | 
			
		||||
                    throw new Exception(String.Format("missing integer parameter {0}", p));
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -324,7 +324,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController
 | 
			
		|||
        ///       <description>if true, persist the region info
 | 
			
		||||
        ///       ('true' or 'false')</description></item>
 | 
			
		||||
        /// </list>
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// XmlRpcCreateRegionMethod returns
 | 
			
		||||
        /// <list type="table">
 | 
			
		||||
        /// <listheader><term>name</term><description>description</description></listheader>
 | 
			
		||||
| 
						 | 
				
			
			@ -346,9 +346,9 @@ namespace OpenSim.ApplicationPlugins.RemoteController
 | 
			
		|||
            Hashtable responseData = new Hashtable();
 | 
			
		||||
 | 
			
		||||
            try {
 | 
			
		||||
                checkStringParameters(request, new string[] { "password", 
 | 
			
		||||
                                                              "region_name", 
 | 
			
		||||
                                                              "region_master_first", "region_master_last", 
 | 
			
		||||
                checkStringParameters(request, new string[] { "password",
 | 
			
		||||
                                                              "region_name",
 | 
			
		||||
                                                              "region_master_first", "region_master_last",
 | 
			
		||||
                                                              "region_master_password",
 | 
			
		||||
                                                              "listen_ip", "external_address"});
 | 
			
		||||
                checkIntegerParams(request, new string[] { "region_x", "region_y", "listen_port"});
 | 
			
		||||
| 
						 | 
				
			
			@ -360,16 +360,16 @@ namespace OpenSim.ApplicationPlugins.RemoteController
 | 
			
		|||
                // extract or generate region ID now
 | 
			
		||||
                Scene scene = null;
 | 
			
		||||
                LLUUID regionID = LLUUID.Zero;
 | 
			
		||||
                if (requestData.ContainsKey("region_id") && 
 | 
			
		||||
                    !String.IsNullOrEmpty((string)requestData["region_id"])) 
 | 
			
		||||
                if (requestData.ContainsKey("region_id") &&
 | 
			
		||||
                    !String.IsNullOrEmpty((string)requestData["region_id"]))
 | 
			
		||||
                {
 | 
			
		||||
                    regionID = (string) requestData["region_id"];
 | 
			
		||||
                    if (m_app.SceneManager.TryGetScene(regionID, out scene)) 
 | 
			
		||||
                    if (m_app.SceneManager.TryGetScene(regionID, out scene))
 | 
			
		||||
                        throw new Exception(String.Format("region UUID already in use by region {0}, UUID {1}, <{2},{3}>",
 | 
			
		||||
                                                          scene.RegionInfo.RegionName, scene.RegionInfo.RegionID,
 | 
			
		||||
                                                          scene.RegionInfo.RegionLocX, scene.RegionInfo.RegionLocY));
 | 
			
		||||
                } 
 | 
			
		||||
                else 
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    regionID = LLUUID.Random();
 | 
			
		||||
                    m_log.DebugFormat("[RADMIN] CreateRegion: new region UUID {0}", regionID);
 | 
			
		||||
| 
						 | 
				
			
			@ -385,7 +385,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController
 | 
			
		|||
 | 
			
		||||
                // check for collisions: region name, region UUID,
 | 
			
		||||
                // region location
 | 
			
		||||
                if (m_app.SceneManager.TryGetScene(region.RegionName, out scene)) 
 | 
			
		||||
                if (m_app.SceneManager.TryGetScene(region.RegionName, out scene))
 | 
			
		||||
                    throw new Exception(String.Format("region name already in use by region {0}, UUID {1}, <{2},{3}>",
 | 
			
		||||
                                                      scene.RegionInfo.RegionName, scene.RegionInfo.RegionID,
 | 
			
		||||
                                                      scene.RegionInfo.RegionLocX, scene.RegionInfo.RegionLocY));
 | 
			
		||||
| 
						 | 
				
			
			@ -395,43 +395,43 @@ namespace OpenSim.ApplicationPlugins.RemoteController
 | 
			
		|||
                                                      region.RegionLocX, region.RegionLocY,
 | 
			
		||||
                                                      scene.RegionInfo.RegionName, scene.RegionInfo.RegionID,
 | 
			
		||||
                                                      scene.RegionInfo.RegionLocX, scene.RegionInfo.RegionLocY));
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                // Security risk [and apparently not used]
 | 
			
		||||
                // if (requestData.ContainsKey("datastore"))
 | 
			
		||||
                //     region.DataStore = (string) requestData["datastore"];
 | 
			
		||||
 | 
			
		||||
                region.InternalEndPoint = 
 | 
			
		||||
                region.InternalEndPoint =
 | 
			
		||||
                    new IPEndPoint(IPAddress.Parse((string) requestData["listen_ip"]), 0);
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                region.InternalEndPoint.Port = (Int32) requestData["listen_port"];
 | 
			
		||||
                if (0 == region.InternalEndPoint.Port) throw new Exception("listen_port is 0");
 | 
			
		||||
                if (m_app.SceneManager.TryGetScene(region.InternalEndPoint, out scene))
 | 
			
		||||
                    throw new Exception(String.Format("region internal IP {0} and port {1} already in use by region {2}, UUID {3}, <{4},{5}>",
 | 
			
		||||
                                                      region.InternalEndPoint.Address, 
 | 
			
		||||
                                                      region.InternalEndPoint.Address,
 | 
			
		||||
                                                      region.InternalEndPoint.Port,
 | 
			
		||||
                                                      scene.RegionInfo.RegionName, scene.RegionInfo.RegionID,
 | 
			
		||||
                                                      scene.RegionInfo.RegionLocX, scene.RegionInfo.RegionLocY));
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                region.ExternalHostName = (string) requestData["external_address"];
 | 
			
		||||
                    
 | 
			
		||||
 | 
			
		||||
                region.MasterAvatarFirstName = (string) requestData["region_master_first"];
 | 
			
		||||
                region.MasterAvatarLastName = (string) requestData["region_master_last"];
 | 
			
		||||
                region.MasterAvatarSandboxPassword = (string) requestData["region_master_password"];
 | 
			
		||||
 | 
			
		||||
                bool persist = Convert.ToBoolean((string)requestData["persist"]);
 | 
			
		||||
                if (persist) 
 | 
			
		||||
                if (persist)
 | 
			
		||||
                {
 | 
			
		||||
                    string regionConfigPath = Path.Combine(Path.Combine(Util.configDir(), "Regions"),
 | 
			
		||||
                                                           String.Format("{0}x{1}-{2}.xml",
 | 
			
		||||
                                                                         region.RegionLocX.ToString(),
 | 
			
		||||
                                                                         region.RegionLocY.ToString(),
 | 
			
		||||
                                                                         regionID.ToString()));
 | 
			
		||||
                    m_log.DebugFormat("[RADMIN] CreateRegion: persisting region {0} to {1}", 
 | 
			
		||||
                    m_log.DebugFormat("[RADMIN] CreateRegion: persisting region {0} to {1}",
 | 
			
		||||
                                      region.RegionID, regionConfigPath);
 | 
			
		||||
                    region.SaveRegionToFile("dynamic region", regionConfigPath);
 | 
			
		||||
                }
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                m_app.CreateRegion(region);
 | 
			
		||||
 | 
			
		||||
                responseData["success"]     = "true";
 | 
			
		||||
| 
						 | 
				
			
			@ -476,7 +476,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController
 | 
			
		|||
        /// <item><term>start_region_y</term>
 | 
			
		||||
        ///       <description>avatar's start region coordinates, Y value</description></item>
 | 
			
		||||
        /// </list>
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// XmlRpcCreateUserMethod returns
 | 
			
		||||
        /// <list type="table">
 | 
			
		||||
        /// <listheader><term>name</term><description>description</description></listheader>
 | 
			
		||||
| 
						 | 
				
			
			@ -497,10 +497,10 @@ namespace OpenSim.ApplicationPlugins.RemoteController
 | 
			
		|||
            Hashtable requestData = (Hashtable) request.Params[0];
 | 
			
		||||
            Hashtable responseData = new Hashtable();
 | 
			
		||||
 | 
			
		||||
            try 
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                // check completeness
 | 
			
		||||
                checkStringParameters(request, new string[] { "password", "user_firstname", 
 | 
			
		||||
                checkStringParameters(request, new string[] { "password", "user_firstname",
 | 
			
		||||
                                                              "user_lastname", "user_password" });
 | 
			
		||||
                checkIntegerParams(request, new string[] { "start_region_x", "start_region_y" });
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -514,16 +514,16 @@ namespace OpenSim.ApplicationPlugins.RemoteController
 | 
			
		|||
                string passwd    = (string) requestData["user_password"];
 | 
			
		||||
                uint   regX      = Convert.ToUInt32((Int32)requestData["start_region_x"]);
 | 
			
		||||
                uint   regY      = Convert.ToUInt32((Int32)requestData["start_region_y"]);
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                UserProfileData userProfile = m_app.CommunicationsManager.UserService.GetUserProfile(firstname, lastname);
 | 
			
		||||
                if (null != userProfile) 
 | 
			
		||||
                if (null != userProfile)
 | 
			
		||||
                    throw new Exception(String.Format("avatar {0} {1} already exists", firstname, lastname));
 | 
			
		||||
 | 
			
		||||
                LLUUID userID = m_app.CreateUser(firstname, lastname, passwd, regX, regY);
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                if (userID == LLUUID.Zero) throw new Exception(String.Format("failed to create new user {0} {1}",
 | 
			
		||||
                                                                             firstname, lastname));
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                responseData["success"]     = "true";
 | 
			
		||||
                responseData["avatar_uuid"] = userID.ToString();
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -531,7 +531,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController
 | 
			
		|||
 | 
			
		||||
                m_log.InfoFormat("[RADMIN]: CreateUser: User {0} {1} created, UUID {2}", firstname, lastname, userID);
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception e) 
 | 
			
		||||
            catch (Exception e)
 | 
			
		||||
            {
 | 
			
		||||
                m_log.ErrorFormat("[RADMIN] CreateUser: failed: {0}", e.Message);
 | 
			
		||||
                m_log.DebugFormat("[RADMIN] CreateUser: failed: {0}", e.ToString());
 | 
			
		||||
| 
						 | 
				
			
			@ -553,33 +553,33 @@ namespace OpenSim.ApplicationPlugins.RemoteController
 | 
			
		|||
            Hashtable requestData = (Hashtable) request.Params[0];
 | 
			
		||||
            Hashtable responseData = new Hashtable();
 | 
			
		||||
 | 
			
		||||
            try 
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                // check completeness
 | 
			
		||||
                foreach (string p in new string[] { "password", "filename" })
 | 
			
		||||
                {
 | 
			
		||||
                    if (!requestData.Contains(p)) 
 | 
			
		||||
                    if (!requestData.Contains(p))
 | 
			
		||||
                        throw new Exception(String.Format("missing parameter {0}", p));
 | 
			
		||||
                    if (String.IsNullOrEmpty((string)requestData[p]))
 | 
			
		||||
                        throw new Exception(String.Format("parameter {0} is empty"));
 | 
			
		||||
                }
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                // check password
 | 
			
		||||
                if (!String.IsNullOrEmpty(requiredPassword) &&
 | 
			
		||||
                    (string)requestData["password"] != requiredPassword) throw new Exception("wrong password");
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                string filename = (string)requestData["filename"];
 | 
			
		||||
                if (requestData.Contains("region_uuid"))
 | 
			
		||||
                {
 | 
			
		||||
                    LLUUID region_uuid = (string)requestData["region_uuid"];
 | 
			
		||||
                    if (!m_app.SceneManager.TrySetCurrentScene(region_uuid)) 
 | 
			
		||||
                    if (!m_app.SceneManager.TrySetCurrentScene(region_uuid))
 | 
			
		||||
                        throw new Exception(String.Format("failed to switch to region {0}", region_uuid.ToString()));
 | 
			
		||||
                    m_log.InfoFormat("[RADMIN] Switched to region {0}", region_uuid.ToString());
 | 
			
		||||
                }
 | 
			
		||||
                else if (requestData.Contains("region_name"))
 | 
			
		||||
                {
 | 
			
		||||
                    string region_name = (string)requestData["region_name"];
 | 
			
		||||
                    if (!m_app.SceneManager.TrySetCurrentScene(region_name)) 
 | 
			
		||||
                    if (!m_app.SceneManager.TrySetCurrentScene(region_name))
 | 
			
		||||
                        throw new Exception(String.Format("failed to switch to region {0}", region_name));
 | 
			
		||||
                    m_log.InfoFormat("[RADMIN] Switched to region {0}", region_name);
 | 
			
		||||
                }
 | 
			
		||||
| 
						 | 
				
			
			@ -589,7 +589,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController
 | 
			
		|||
 | 
			
		||||
                m_app.SceneManager.LoadCurrentSceneFromXml(filename, true, new LLVector3(0, 0, 0));
 | 
			
		||||
                responseData["loaded"]   = "true";
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                response.Value           = responseData;
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception e)
 | 
			
		||||
| 
						 | 
				
			
			@ -600,10 +600,10 @@ namespace OpenSim.ApplicationPlugins.RemoteController
 | 
			
		|||
                responseData["loaded"]  = "false";
 | 
			
		||||
                responseData["switched"] = "false";
 | 
			
		||||
                responseData["error"]   = e.Message;
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                response.Value          = responseData;
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            return response;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -23,7 +23,7 @@
 | 
			
		|||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 | 
			
		||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
* 
 | 
			
		||||
*
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
using libsecondlife;
 | 
			
		||||
| 
						 | 
				
			
			@ -65,7 +65,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Regions
 | 
			
		|||
            region_external_hostname = regInfo.ExternalHostName;
 | 
			
		||||
 | 
			
		||||
            if (!String.IsNullOrEmpty(regInfo.MasterAvatarFirstName))
 | 
			
		||||
                region_owner = String.Format("{0} {1}", regInfo.MasterAvatarFirstName, 
 | 
			
		||||
                region_owner = String.Format("{0} {1}", regInfo.MasterAvatarFirstName,
 | 
			
		||||
                                             regInfo.MasterAvatarLastName);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -23,7 +23,7 @@
 | 
			
		|||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 | 
			
		||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
* 
 | 
			
		||||
*
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
using System;
 | 
			
		||||
| 
						 | 
				
			
			@ -57,12 +57,12 @@ namespace OpenSim.ApplicationPlugins.Rest.Regions
 | 
			
		|||
    [Extension("/OpenSim/Startup")]
 | 
			
		||||
    public class RestRegionPlugin : RestPlugin
 | 
			
		||||
    {
 | 
			
		||||
        private static readonly log4net.ILog  _log = 
 | 
			
		||||
        private static readonly log4net.ILog  _log =
 | 
			
		||||
            log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
 | 
			
		||||
 | 
			
		||||
        #region overriding properties
 | 
			
		||||
        public override string Name 
 | 
			
		||||
        { 
 | 
			
		||||
        public override string Name
 | 
			
		||||
        {
 | 
			
		||||
            get { return "REGION"; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -86,7 +86,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Regions
 | 
			
		|||
            try
 | 
			
		||||
            {
 | 
			
		||||
                base.Initialise(openSim);
 | 
			
		||||
                if (IsEnabled)                     
 | 
			
		||||
                if (IsEnabled)
 | 
			
		||||
                    m_log.InfoFormat("{0} Rest Plugins Enabled", MsgID);
 | 
			
		||||
                else
 | 
			
		||||
                    m_log.WarnFormat("{0} Rest Plugins are disabled", MsgID);
 | 
			
		||||
| 
						 | 
				
			
			@ -122,7 +122,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Regions
 | 
			
		|||
            StringWriter sw = new StringWriter();
 | 
			
		||||
            XmlTextWriter xw = new XmlTextWriter(sw);
 | 
			
		||||
            xw.Formatting = Formatting.Indented;
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            xw.WriteStartElement(String.Empty, "regions", String.Empty);
 | 
			
		||||
            foreach (Scene s in App.SceneManager.Scenes)
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			@ -132,7 +132,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Regions
 | 
			
		|||
            }
 | 
			
		||||
            xw.WriteEndElement();
 | 
			
		||||
            xw.Close();
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            return sw.ToString();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -154,7 +154,7 @@ namespace OpenSim.ApplicationPlugins.Rest.Regions
 | 
			
		|||
 | 
			
		||||
            xs.Serialize(xw, new RegionDetails(scene.RegionInfo));
 | 
			
		||||
            xw.Close();
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            return sw.ToString();
 | 
			
		||||
        }
 | 
			
		||||
        #endregion methods
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -23,7 +23,7 @@
 | 
			
		|||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 | 
			
		||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
* 
 | 
			
		||||
*
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
using System;
 | 
			
		||||
| 
						 | 
				
			
			@ -54,7 +54,7 @@ namespace OpenSim.ApplicationPlugins.Rest
 | 
			
		|||
    {
 | 
			
		||||
        #region properties
 | 
			
		||||
 | 
			
		||||
        protected static readonly log4net.ILog  m_log = 
 | 
			
		||||
        protected static readonly log4net.ILog  m_log =
 | 
			
		||||
            log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
 | 
			
		||||
 | 
			
		||||
        private IConfig        _config;       // Configuration source: Rest Plugins
 | 
			
		||||
| 
						 | 
				
			
			@ -100,8 +100,8 @@ namespace OpenSim.ApplicationPlugins.Rest
 | 
			
		|||
        /// </summary>
 | 
			
		||||
        public bool IsEnabled
 | 
			
		||||
        {
 | 
			
		||||
            get 
 | 
			
		||||
            { 
 | 
			
		||||
            get
 | 
			
		||||
            {
 | 
			
		||||
                return (null != _pluginConfig) && _pluginConfig.GetBoolean("enabled", false);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -109,7 +109,7 @@ namespace OpenSim.ApplicationPlugins.Rest
 | 
			
		|||
        /// <summary>
 | 
			
		||||
        /// OpenSimMain application
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public OpenSimMain App 
 | 
			
		||||
        public OpenSimMain App
 | 
			
		||||
        {
 | 
			
		||||
            get { return _app; }
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -117,7 +117,7 @@ namespace OpenSim.ApplicationPlugins.Rest
 | 
			
		|||
        /// <summary>
 | 
			
		||||
        /// RPC server
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public BaseHttpServer HttpServer 
 | 
			
		||||
        public BaseHttpServer HttpServer
 | 
			
		||||
        {
 | 
			
		||||
            get { return _httpd; }
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -171,7 +171,7 @@ namespace OpenSim.ApplicationPlugins.Rest
 | 
			
		|||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if (!_config.GetBoolean("enabled", false)) 
 | 
			
		||||
                if (!_config.GetBoolean("enabled", false))
 | 
			
		||||
                {
 | 
			
		||||
                    m_log.WarnFormat("{0} Rest Plugins are disabled", MsgID);
 | 
			
		||||
                    return;
 | 
			
		||||
| 
						 | 
				
			
			@ -184,10 +184,10 @@ namespace OpenSim.ApplicationPlugins.Rest
 | 
			
		|||
                _godkey = _config.GetString("god_key", String.Empty);
 | 
			
		||||
                // Retrive prefix if any.
 | 
			
		||||
                _prefix = _config.GetString("prefix", "/admin");
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                // Get plugin specific config
 | 
			
		||||
                _pluginConfig = openSim.ConfigSource.Configs[ConfigName];
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                m_log.InfoFormat("{0} Rest Plugins Enabled", MsgID);
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception e)
 | 
			
		||||
| 
						 | 
				
			
			@ -200,7 +200,7 @@ namespace OpenSim.ApplicationPlugins.Rest
 | 
			
		|||
                // not possible for the openSim pointer to be null. However
 | 
			
		||||
                // were the implementation to be changed, this could
 | 
			
		||||
                // result in a silent initialization failure. Harmless
 | 
			
		||||
                // except for lack of function and lack of any 
 | 
			
		||||
                // except for lack of function and lack of any
 | 
			
		||||
                // diagnostic indication as to why. The same is true if
 | 
			
		||||
                // the HTTP server reference is bad.
 | 
			
		||||
                // We should at least issue a message...
 | 
			
		||||
| 
						 | 
				
			
			@ -214,7 +214,7 @@ namespace OpenSim.ApplicationPlugins.Rest
 | 
			
		|||
 | 
			
		||||
        public void AddRestStreamHandler(string httpMethod, string path, RestMethod method)
 | 
			
		||||
        {
 | 
			
		||||
            if (!path.StartsWith(_prefix)) 
 | 
			
		||||
            if (!path.StartsWith(_prefix))
 | 
			
		||||
            {
 | 
			
		||||
                path = String.Format("{0}{1}", _prefix, path);
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -226,7 +226,7 @@ namespace OpenSim.ApplicationPlugins.Rest
 | 
			
		|||
            m_log.DebugFormat("{0} Added REST handler {1} {2}", MsgID, httpMethod, path);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        public bool VerifyGod(string key)
 | 
			
		||||
        {
 | 
			
		||||
            if (String.IsNullOrEmpty(key)) return false;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -126,7 +126,7 @@ namespace OpenSim.Data.Base
 | 
			
		|||
        {
 | 
			
		||||
            int ordinal = m_source.GetOrdinal(name);
 | 
			
		||||
            int int32 = m_source.GetInt32(ordinal);
 | 
			
		||||
            return int32;            
 | 
			
		||||
            return int32;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public Int64 GetInt64(string name)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -30,7 +30,7 @@ using System.Collections.Generic;
 | 
			
		|||
using System.Data.Common;
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Data.Base
 | 
			
		||||
{  
 | 
			
		||||
{
 | 
			
		||||
    public delegate TField ObjectGetAccessor<TObj, TField>(TObj obj);
 | 
			
		||||
    public delegate void ObjectSetAccessor<TObj, TField>(TObj obj, TField value);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -29,7 +29,7 @@ using System.Reflection;
 | 
			
		|||
using System.Runtime.InteropServices;
 | 
			
		||||
using System.Security;
 | 
			
		||||
 | 
			
		||||
// General Information about an assembly is controlled through the following 
 | 
			
		||||
// General information about an assembly is controlled through the following
 | 
			
		||||
// set of attributes. Change these attribute values to modify the information
 | 
			
		||||
// associated with an assembly.
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -42,8 +42,8 @@ using System.Security;
 | 
			
		|||
[assembly : AssemblyTrademark("")]
 | 
			
		||||
[assembly : AssemblyCulture("")]
 | 
			
		||||
 | 
			
		||||
// Setting ComVisible to false makes the types in this assembly not visible 
 | 
			
		||||
// to COM components.  If you need to access a type in this assembly from 
 | 
			
		||||
// Setting ComVisible to false makes the types in this assembly not visible
 | 
			
		||||
// to COM components.  If you need to access a type in this assembly from
 | 
			
		||||
// COM, set the ComVisible attribute to true on that type.
 | 
			
		||||
 | 
			
		||||
[assembly : ComVisible(false)]
 | 
			
		||||
| 
						 | 
				
			
			@ -55,11 +55,11 @@ using System.Security;
 | 
			
		|||
// Version information for an assembly consists of the following four values:
 | 
			
		||||
//
 | 
			
		||||
//      Major Version
 | 
			
		||||
//      Minor Version 
 | 
			
		||||
//      Minor Version
 | 
			
		||||
//      Build Number
 | 
			
		||||
//      Revision
 | 
			
		||||
//
 | 
			
		||||
// You can specify all the values or you can default the Revision and Build Numbers 
 | 
			
		||||
// You can specify all the values or you can default the Revision and Build Numbers
 | 
			
		||||
// by using the '*' as shown below:
 | 
			
		||||
 | 
			
		||||
[assembly : AssemblyVersion("1.0.0.0")]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -28,7 +28,7 @@
 | 
			
		|||
using libsecondlife;
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Data
 | 
			
		||||
{  
 | 
			
		||||
{
 | 
			
		||||
    public enum DataResponse
 | 
			
		||||
    {
 | 
			
		||||
        RESPONSE_OK,
 | 
			
		||||
| 
						 | 
				
			
			@ -74,7 +74,7 @@ namespace OpenSim.Data
 | 
			
		|||
        RegionProfileData[] GetProfilesInRange(uint Xmin, uint Ymin, uint Xmax, uint Ymax);
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Authenticates a sim by use of its recv key. 
 | 
			
		||||
        /// Authenticates a sim by use of its recv key.
 | 
			
		||||
        /// WARNING: Insecure
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="UUID">The UUID sent by the sim</param>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -28,7 +28,7 @@
 | 
			
		|||
using System.IO;
 | 
			
		||||
using System.Text.RegularExpressions;
 | 
			
		||||
 | 
			
		||||
/* 
 | 
			
		||||
/*
 | 
			
		||||
 Taken from public code listing at by Alex Pinsker
 | 
			
		||||
 http://alexpinsker.blogspot.com/2005/12/reading-ini-file-from-c_113432097333021549.html
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -216,7 +216,7 @@ namespace OpenSim.Data.MSSQL
 | 
			
		|||
 | 
			
		||||
        override public string Version
 | 
			
		||||
        {
 | 
			
		||||
//            get { return database.getVersion(); } 
 | 
			
		||||
//            get { return database.getVersion(); }
 | 
			
		||||
            get { return database.getVersion(); }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -140,7 +140,7 @@ namespace OpenSim.Data.MSSQL
 | 
			
		|||
                m_landAccessListTable = createLandAccessListTable();
 | 
			
		||||
                m_dataSet.Tables.Add(m_landAccessListTable);
 | 
			
		||||
                setupLandAccessCommands(m_landAccessListDataAdapter, m_connection);
 | 
			
		||||
                m_landAccessListDataAdapter.Fill(m_landAccessListTable);                
 | 
			
		||||
                m_landAccessListDataAdapter.Fill(m_landAccessListTable);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -172,7 +172,7 @@ namespace OpenSim.Data.MSSQL
 | 
			
		|||
        public void RemoveObject(LLUUID obj, LLUUID regionUUID)
 | 
			
		||||
        {
 | 
			
		||||
            // Instance.RemoveObject(obj, regionUUID);
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            m_log.InfoFormat("[REGION DB]: Removing obj: {0} from region: {1}", obj.UUID, regionUUID);
 | 
			
		||||
 | 
			
		||||
            DataTable prims = m_primTable;
 | 
			
		||||
| 
						 | 
				
			
			@ -222,7 +222,7 @@ namespace OpenSim.Data.MSSQL
 | 
			
		|||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Load persisted objects from region storage.
 | 
			
		||||
        /// </summary>        
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public List<SceneObjectGroup> LoadObjects(LLUUID regionUUID)
 | 
			
		||||
        {
 | 
			
		||||
            // return Instance.LoadObjects(regionUUID);
 | 
			
		||||
| 
						 | 
				
			
			@ -328,12 +328,12 @@ namespace OpenSim.Data.MSSQL
 | 
			
		|||
                TaskInventoryItem item = buildItem(row);
 | 
			
		||||
                inventory.Add(item);
 | 
			
		||||
 | 
			
		||||
                //m_log.DebugFormat("[DATASTORE]: Restored item {0}, {1}", item.Name, item.ItemID); 
 | 
			
		||||
                //m_log.DebugFormat("[DATASTORE]: Restored item {0}, {1}", item.Name, item.ItemID);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            prim.RestoreInventoryItems(inventory);
 | 
			
		||||
 | 
			
		||||
            // XXX A nasty little hack to recover the folder id for the prim (which is currently stored in 
 | 
			
		||||
            // XXX A nasty little hack to recover the folder id for the prim (which is currently stored in
 | 
			
		||||
            // every item).  This data should really be stored in the prim table itself.
 | 
			
		||||
            if (dbItemRows.Length > 0)
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			@ -527,7 +527,7 @@ namespace OpenSim.Data.MSSQL
 | 
			
		|||
        /***********************************************************************
 | 
			
		||||
         *
 | 
			
		||||
         *  Database Definition Functions
 | 
			
		||||
         * 
 | 
			
		||||
         *
 | 
			
		||||
         *  This should be db agnostic as we define them in ADO.NET terms
 | 
			
		||||
         *
 | 
			
		||||
         **********************************************************************/
 | 
			
		||||
| 
						 | 
				
			
			@ -742,7 +742,7 @@ namespace OpenSim.Data.MSSQL
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        /***********************************************************************
 | 
			
		||||
         *  
 | 
			
		||||
         *
 | 
			
		||||
         *  Convert between ADO.NET <=> OpenSim Objects
 | 
			
		||||
         *
 | 
			
		||||
         *  These should be database independant
 | 
			
		||||
| 
						 | 
				
			
			@ -1198,7 +1198,7 @@ namespace OpenSim.Data.MSSQL
 | 
			
		|||
 | 
			
		||||
            m_log.InfoFormat("[REGION DB]: Persisting Prim Inventory with prim ID {0}", primID);
 | 
			
		||||
 | 
			
		||||
            // For now, we're just going to crudely remove all the previous inventory items 
 | 
			
		||||
            // For now, we're just going to crudely remove all the previous inventory items
 | 
			
		||||
            // no matter whether they have changed or not, and replace them with the current set.
 | 
			
		||||
            lock (m_dataSet)
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			@ -1209,7 +1209,7 @@ namespace OpenSim.Data.MSSQL
 | 
			
		|||
                {
 | 
			
		||||
                    //                    m_log.InfoFormat(
 | 
			
		||||
                    //                        "[REGION DB]: " +
 | 
			
		||||
                    //                        "Adding item {0}, {1} to prim ID {2}", 
 | 
			
		||||
                    //                        "Adding item {0}, {1} to prim ID {2}",
 | 
			
		||||
                    //                        newItem.Name, newItem.ItemID, newItem.ParentPartID);
 | 
			
		||||
 | 
			
		||||
                    DataRow newItemRow = m_itemsTable.NewRow();
 | 
			
		||||
| 
						 | 
				
			
			@ -1282,7 +1282,7 @@ namespace OpenSim.Data.MSSQL
 | 
			
		|||
            sql += subsql;
 | 
			
		||||
            sql += " where " + pk;
 | 
			
		||||
            SqlCommand cmd = new SqlCommand(sql);
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            // this provides the binding for all our parameters, so
 | 
			
		||||
            // much less code than it used to be
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1329,7 +1329,7 @@ namespace OpenSim.Data.MSSQL
 | 
			
		|||
        /// This is a convenience function that collapses 5 repetitive
 | 
			
		||||
        /// lines for defining SqlParameters to 2 parameters:
 | 
			
		||||
        /// column name and database type.
 | 
			
		||||
        ///        
 | 
			
		||||
        ///
 | 
			
		||||
        /// It assumes certain conventions like :param as the param
 | 
			
		||||
        /// name to replace in parametrized queries, and that source
 | 
			
		||||
        /// version is always current version, both of which are fine
 | 
			
		||||
| 
						 | 
				
			
			@ -1424,7 +1424,7 @@ namespace OpenSim.Data.MSSQL
 | 
			
		|||
            SqlCommand tcmd = new SqlCommand(createTerrain, conn);
 | 
			
		||||
            SqlCommand lcmd = new SqlCommand(createLand, conn);
 | 
			
		||||
            SqlCommand lalcmd = new SqlCommand(createLandAccessList, conn);
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            conn.Open();
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			@ -1604,6 +1604,6 @@ namespace OpenSim.Data.MSSQL
 | 
			
		|||
            {
 | 
			
		||||
                return DbType.String;
 | 
			
		||||
            }
 | 
			
		||||
        }           
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -79,7 +79,7 @@ namespace OpenSim.Data.MSSQL
 | 
			
		|||
        private void TestTables()
 | 
			
		||||
        {
 | 
			
		||||
            IDbCommand cmd = database.Query("SELECT TOP 1 * FROM "+m_regionsTableName, new Dictionary<string, string>());
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                cmd.ExecuteNonQuery();
 | 
			
		||||
| 
						 | 
				
			
			@ -88,7 +88,7 @@ namespace OpenSim.Data.MSSQL
 | 
			
		|||
            catch (Exception)
 | 
			
		||||
            {
 | 
			
		||||
                m_log.Info("[GRID DB]: MSSQL Database doesn't exist... creating");
 | 
			
		||||
                database.ExecuteResourceSql("Mssql-regions.sql");            
 | 
			
		||||
                database.ExecuteResourceSql("Mssql-regions.sql");
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -161,7 +161,7 @@ namespace OpenSim.Data.MSSQL
 | 
			
		|||
            }
 | 
			
		||||
            return null;
 | 
			
		||||
        }
 | 
			
		||||
       
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Returns a sim profile from its UUID
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -255,17 +255,17 @@ namespace OpenSim.Data.MSSQL
 | 
			
		|||
        {
 | 
			
		||||
            //Insert new region
 | 
			
		||||
            string sql =
 | 
			
		||||
                "UPDATE " + m_regionsTableName + @" SET 
 | 
			
		||||
                [regionHandle]=@regionHandle, [regionName]=@regionName, 
 | 
			
		||||
                "UPDATE " + m_regionsTableName + @" SET
 | 
			
		||||
                [regionHandle]=@regionHandle, [regionName]=@regionName,
 | 
			
		||||
                [regionRecvKey]=@regionRecvKey, [regionSecret]=@regionSecret, [regionSendKey]=@regionSendKey,
 | 
			
		||||
                [regionDataURI]=@regionDataURI, [serverIP]=@serverIP, [serverPort]=@serverPort, [serverURI]=@serverURI,
 | 
			
		||||
                [locX]=@locX, [locY]=@locY, [locZ]=@locZ, [eastOverrideHandle]=@eastOverrideHandle, 
 | 
			
		||||
                [westOverrideHandle]=@westOverrideHandle, [southOverrideHandle]=@southOverrideHandle, 
 | 
			
		||||
                [northOverrideHandle]=@northOverrideHandle, [regionAssetURI]=@regionAssetURI, 
 | 
			
		||||
                [locX]=@locX, [locY]=@locY, [locZ]=@locZ, [eastOverrideHandle]=@eastOverrideHandle,
 | 
			
		||||
                [westOverrideHandle]=@westOverrideHandle, [southOverrideHandle]=@southOverrideHandle,
 | 
			
		||||
                [northOverrideHandle]=@northOverrideHandle, [regionAssetURI]=@regionAssetURI,
 | 
			
		||||
                [regionAssetRecvKey]=@regionAssetRecvKey, [regionAssetSendKey]=@regionAssetSendKey,
 | 
			
		||||
                [regionUserURI]=@regionUserURI, [regionUserRecvKey]=@regionUserRecvKey, [regionUserSendKey]=@regionUserSendKey,
 | 
			
		||||
                [regionMapTexture]=@regionMapTexture, [serverHttpPort]=@serverHttpPort,
 | 
			
		||||
                [serverRemotingPort]=@serverRemotingPort, [owner_uuid]=@owner_uuid 
 | 
			
		||||
                [serverRemotingPort]=@serverRemotingPort, [owner_uuid]=@owner_uuid
 | 
			
		||||
                where [uuid]=@uuid";
 | 
			
		||||
 | 
			
		||||
            Dictionary<string, string> parameters = new Dictionary<string, string>();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -80,7 +80,7 @@ namespace OpenSim.Data.MSSQL
 | 
			
		|||
            if (tableName == null)
 | 
			
		||||
            {
 | 
			
		||||
                database.ExecuteResourceSql("CreateFoldersTable.sql");
 | 
			
		||||
                //database.ExecuteResourceSql("UpgradeFoldersTableToVersion2.sql");   
 | 
			
		||||
                //database.ExecuteResourceSql("UpgradeFoldersTableToVersion2.sql");
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -236,9 +236,9 @@ namespace OpenSim.Data.MSSQL
 | 
			
		|||
 | 
			
		||||
                    // There should only ever be one root folder for a user.  However, if there's more
 | 
			
		||||
                    // than one we'll simply use the first one rather than failing.  It would be even
 | 
			
		||||
                    // nicer to print some message to this effect, but this feels like it's too low a 
 | 
			
		||||
                    // nicer to print some message to this effect, but this feels like it's too low a
 | 
			
		||||
                    // to put such a message out, and it's too minor right now to spare the time to
 | 
			
		||||
                    // suitably refactor.                    
 | 
			
		||||
                    // suitably refactor.
 | 
			
		||||
                    if (items.Count > 0)
 | 
			
		||||
                    {
 | 
			
		||||
                        rootFolder = items[0];
 | 
			
		||||
| 
						 | 
				
			
			@ -326,7 +326,7 @@ namespace OpenSim.Data.MSSQL
 | 
			
		|||
                item.GroupID = new LLUUID(reader["groupID"].ToString());
 | 
			
		||||
                item.GroupOwned = Convert.ToBoolean(reader["groupOwned"]);
 | 
			
		||||
                item.Flags = (uint) reader["flags"];
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                return item;
 | 
			
		||||
            }
 | 
			
		||||
            catch (SqlException e)
 | 
			
		||||
| 
						 | 
				
			
			@ -455,7 +455,7 @@ namespace OpenSim.Data.MSSQL
 | 
			
		|||
                    + ", @inventoryNextPermissions, @inventoryCurrentPermissions, @invType, @creatorID"
 | 
			
		||||
                    + ", @inventoryBasePermissions, @inventoryEveryOnePermissions, @salePrice, @saleType"
 | 
			
		||||
                    + ", @creationDate, @groupID, @groupOwned, @flags);";
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                Dictionary<string, string> param = new Dictionary<string, string>();
 | 
			
		||||
| 
						 | 
				
			
			@ -472,7 +472,7 @@ namespace OpenSim.Data.MSSQL
 | 
			
		|||
                param["creatorID"] = item.Creator.ToString();
 | 
			
		||||
                param["inventoryBasePermissions"] = Convert.ToString(item.BasePermissions);
 | 
			
		||||
                param["inventoryEveryOnePermissions"] = Convert.ToString(item.EveryOnePermissions);
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                param["salePrice"] = Convert.ToString(item.SalePrice);
 | 
			
		||||
                param["saleType"] = Convert.ToString(item.SaleType);
 | 
			
		||||
                param["creationDate"] = Convert.ToString(item.CreationDate);
 | 
			
		||||
| 
						 | 
				
			
			@ -550,7 +550,7 @@ namespace OpenSim.Data.MSSQL
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="item"></param>
 | 
			
		||||
        public void deleteInventoryItem(LLUUID itemID)
 | 
			
		||||
| 
						 | 
				
			
			@ -667,7 +667,7 @@ namespace OpenSim.Data.MSSQL
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Append a list of all the child folders of a parent folder 
 | 
			
		||||
        /// Append a list of all the child folders of a parent folder
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="folders">list where folders will be appended</param>
 | 
			
		||||
        /// <param name="parentID">ID of parent</param>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -442,7 +442,7 @@ namespace OpenSim.Data.MSSQL
 | 
			
		|||
 | 
			
		||||
            return returnval;
 | 
			
		||||
        }
 | 
			
		||||
       
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Execute a SQL statement stored in a resource, as a string
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -509,7 +509,7 @@ namespace OpenSim.Data.MSSQL
 | 
			
		|||
            throw new Exception(string.Format("Resource '{0}' was not found", name));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary> 
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Returns the version of this DB provider
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <returns>A string containing the DB provider</returns>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -105,7 +105,7 @@ namespace OpenSim.Data.MSSQL
 | 
			
		|||
            {
 | 
			
		||||
                database.ExecuteResourceSql("Mssql-users.sql");
 | 
			
		||||
            }
 | 
			
		||||
       
 | 
			
		||||
 | 
			
		||||
            cmd = database.Query("select top 1 * from " + m_agentsTableName, new Dictionary<string, string>());
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			@ -747,7 +747,7 @@ namespace OpenSim.Data.MSSQL
 | 
			
		|||
 | 
			
		||||
        /// Appearance
 | 
			
		||||
        /// TODO: stubs for now to get us to a compiling state gently
 | 
			
		||||
        // override public AvatarAppearance GetUserAppearance(LLUUID user) 
 | 
			
		||||
        // override public AvatarAppearance GetUserAppearance(LLUUID user)
 | 
			
		||||
        // {
 | 
			
		||||
        //     return new AvatarAppearance();
 | 
			
		||||
        // }
 | 
			
		||||
| 
						 | 
				
			
			@ -761,12 +761,12 @@ namespace OpenSim.Data.MSSQL
 | 
			
		|||
        {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        override public void RemoveAttachment(LLUUID user, LLUUID item)
 | 
			
		||||
        {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        override public List<LLUUID> GetAttachments(LLUUID user)
 | 
			
		||||
        {
 | 
			
		||||
            return new List<LLUUID>();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -28,7 +28,7 @@
 | 
			
		|||
using System.Reflection;
 | 
			
		||||
using System.Runtime.InteropServices;
 | 
			
		||||
 | 
			
		||||
// General Information about an assembly is controlled through the following 
 | 
			
		||||
// General information about an assembly is controlled through the following
 | 
			
		||||
// set of attributes. Change these attribute values to modify the information
 | 
			
		||||
// associated with an assembly.
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -41,8 +41,8 @@ using System.Runtime.InteropServices;
 | 
			
		|||
[assembly : AssemblyTrademark("")]
 | 
			
		||||
[assembly : AssemblyCulture("")]
 | 
			
		||||
 | 
			
		||||
// Setting ComVisible to false makes the types in this assembly not visible 
 | 
			
		||||
// to COM components.  If you need to access a type in this assembly from 
 | 
			
		||||
// Setting ComVisible to false makes the types in this assembly not visible
 | 
			
		||||
// to COM components.  If you need to access a type in this assembly from
 | 
			
		||||
// COM, set the ComVisible attribute to true on that type.
 | 
			
		||||
 | 
			
		||||
[assembly : ComVisible(false)]
 | 
			
		||||
| 
						 | 
				
			
			@ -54,11 +54,11 @@ using System.Runtime.InteropServices;
 | 
			
		|||
// Version information for an assembly consists of the following four values:
 | 
			
		||||
//
 | 
			
		||||
//      Major Version
 | 
			
		||||
//      Minor Version 
 | 
			
		||||
//      Minor Version
 | 
			
		||||
//      Build Number
 | 
			
		||||
//      Revision
 | 
			
		||||
//
 | 
			
		||||
// You can specify all the values or you can default the Revision and Build Numbers 
 | 
			
		||||
// You can specify all the values or you can default the Revision and Build Numbers
 | 
			
		||||
// by using the '*' as shown below:
 | 
			
		||||
 | 
			
		||||
[assembly : AssemblyVersion("1.0.0.0")]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -49,7 +49,7 @@ namespace OpenSim.Data.MapperFactory
 | 
			
		|||
                    return new MSSQLDatabaseMapper(connectionString);
 | 
			
		||||
                default:
 | 
			
		||||
                    throw new ArgumentException("Unknown Database Mapper type [" + type + "].");
 | 
			
		||||
            }            
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -79,7 +79,7 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
                        _dbConnection.Connection);
 | 
			
		||||
                MySqlParameter p = cmd.Parameters.Add("?id", MySqlDbType.Binary, 16);
 | 
			
		||||
                p.Value = assetID.GetBytes();
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                try
 | 
			
		||||
                {
 | 
			
		||||
                    using (MySqlDataReader dbReader = cmd.ExecuteReader(CommandBehavior.SingleRow))
 | 
			
		||||
| 
						 | 
				
			
			@ -111,7 +111,7 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        override public void CreateAsset(AssetBase asset)
 | 
			
		||||
        {            
 | 
			
		||||
        {
 | 
			
		||||
            lock (_dbConnection)
 | 
			
		||||
            {
 | 
			
		||||
                MySqlCommand cmd =
 | 
			
		||||
| 
						 | 
				
			
			@ -119,10 +119,10 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
                        "REPLACE INTO assets(id, name, description, assetType, invType, local, temporary, data)" +
 | 
			
		||||
                        "VALUES(?id, ?name, ?description, ?assetType, ?invType, ?local, ?temporary, ?data)",
 | 
			
		||||
                        _dbConnection.Connection);
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
                // need to ensure we dispose
 | 
			
		||||
                try
 | 
			
		||||
                {            
 | 
			
		||||
                {
 | 
			
		||||
                    using (cmd)
 | 
			
		||||
                    {
 | 
			
		||||
                        MySqlParameter p = cmd.Parameters.Add("?id", MySqlDbType.Binary, 16);
 | 
			
		||||
| 
						 | 
				
			
			@ -145,7 +145,7 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
                        "MySql failure creating asset {0} with name {1}" + Environment.NewLine + e.ToString()
 | 
			
		||||
                        + Environment.NewLine + "Attempting reconnection", asset.FullID, asset.Name);
 | 
			
		||||
                    _dbConnection.Reconnect();
 | 
			
		||||
                }   
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -50,12 +50,12 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
        private const string m_terrainSelect = "select * from terrain limit 1";
 | 
			
		||||
        private const string m_landSelect = "select * from land";
 | 
			
		||||
        private const string m_landAccessListSelect = "select * from landaccesslist";
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// We're only using this to version the table!
 | 
			
		||||
        /// </summary>
 | 
			
		||||
       
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        private DataSet m_dataSet;
 | 
			
		||||
        private MySqlDataAdapter m_primDataAdapter;
 | 
			
		||||
| 
						 | 
				
			
			@ -65,16 +65,16 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
        private MySqlDataAdapter m_terrainDataAdapter;
 | 
			
		||||
        private MySqlDataAdapter m_landDataAdapter;
 | 
			
		||||
        private MySqlDataAdapter m_landAccessListDataAdapter;
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        private DataTable m_primTable;
 | 
			
		||||
        private DataTable m_shapeTable;
 | 
			
		||||
        private DataTable m_itemsTable;
 | 
			
		||||
        private DataTable m_terrainTable;
 | 
			
		||||
        private DataTable m_landTable;
 | 
			
		||||
        private DataTable m_landAccessListTable;
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        // Temporary attribute while this is experimental
 | 
			
		||||
        private bool persistPrimInventories;        
 | 
			
		||||
        private bool persistPrimInventories;
 | 
			
		||||
 | 
			
		||||
        /***********************************************************************
 | 
			
		||||
         *
 | 
			
		||||
| 
						 | 
				
			
			@ -98,9 +98,9 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
 | 
			
		||||
            MySqlCommand shapeSelectCmd = new MySqlCommand(m_shapeSelect, m_connection);
 | 
			
		||||
            m_shapeDataAdapter = new MySqlDataAdapter(shapeSelectCmd);
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            MySqlCommand itemsSelectCmd = new MySqlCommand(m_itemsSelect, m_connection);
 | 
			
		||||
            m_itemsDataAdapter = new MySqlDataAdapter(itemsSelectCmd);            
 | 
			
		||||
            m_itemsDataAdapter = new MySqlDataAdapter(itemsSelectCmd);
 | 
			
		||||
 | 
			
		||||
            MySqlCommand terrainSelectCmd = new MySqlCommand(m_terrainSelect, m_connection);
 | 
			
		||||
            m_terrainDataAdapter = new MySqlDataAdapter(terrainSelectCmd);
 | 
			
		||||
| 
						 | 
				
			
			@ -111,7 +111,7 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
            MySqlCommand landAccessListSelectCmd = new MySqlCommand(m_landAccessListSelect, m_connection);
 | 
			
		||||
            m_landAccessListDataAdapter = new MySqlDataAdapter(landAccessListSelectCmd);
 | 
			
		||||
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            TestTables(m_connection);
 | 
			
		||||
 | 
			
		||||
            lock (m_dataSet)
 | 
			
		||||
| 
						 | 
				
			
			@ -125,13 +125,13 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
                m_dataSet.Tables.Add(m_shapeTable);
 | 
			
		||||
                SetupShapeCommands(m_shapeDataAdapter, m_connection);
 | 
			
		||||
                m_shapeDataAdapter.Fill(m_shapeTable);
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                if (persistPrimInventories)
 | 
			
		||||
                {
 | 
			
		||||
                    m_itemsTable = createItemsTable();
 | 
			
		||||
                    m_dataSet.Tables.Add(m_itemsTable);
 | 
			
		||||
                    SetupItemsCommands(m_itemsDataAdapter, m_connection);
 | 
			
		||||
                    m_itemsDataAdapter.Fill(m_itemsTable);                
 | 
			
		||||
                    m_itemsDataAdapter.Fill(m_itemsTable);
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                m_terrainTable = createTerrainTable();
 | 
			
		||||
| 
						 | 
				
			
			@ -195,7 +195,7 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
 | 
			
		||||
            UpgradeLandTable(tableList["land"], dbconn);
 | 
			
		||||
            //database.Close();
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -290,12 +290,12 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
                    {
 | 
			
		||||
                        shapeRow.Delete();
 | 
			
		||||
                    }
 | 
			
		||||
                    
 | 
			
		||||
 | 
			
		||||
                    if (persistPrimInventories)
 | 
			
		||||
                    {                    
 | 
			
		||||
                    {
 | 
			
		||||
                        RemoveItems(uuid);
 | 
			
		||||
                    }
 | 
			
		||||
                    
 | 
			
		||||
 | 
			
		||||
                    // Remove prim row
 | 
			
		||||
                    row.Delete();
 | 
			
		||||
                }
 | 
			
		||||
| 
						 | 
				
			
			@ -309,18 +309,18 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
        /// </summary>
 | 
			
		||||
        private void RemoveItems(LLUUID uuid)
 | 
			
		||||
        {
 | 
			
		||||
            String sql = String.Format("primID = '{0}'", uuid);            
 | 
			
		||||
            String sql = String.Format("primID = '{0}'", uuid);
 | 
			
		||||
            DataRow[] itemRows = m_itemsTable.Select(sql);
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
            foreach (DataRow itemRow in itemRows)
 | 
			
		||||
            {
 | 
			
		||||
                itemRow.Delete();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Load persisted objects from region storage.
 | 
			
		||||
        /// </summary>        
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public List<SceneObjectGroup> LoadObjects(LLUUID regionUUID)
 | 
			
		||||
        {
 | 
			
		||||
            Dictionary<LLUUID, SceneObjectGroup> createdObjects = new Dictionary<LLUUID, SceneObjectGroup>();
 | 
			
		||||
| 
						 | 
				
			
			@ -341,17 +341,17 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
 | 
			
		||||
                foreach (DataRow primRow in primsForRegion)
 | 
			
		||||
                {
 | 
			
		||||
                    try                        
 | 
			
		||||
                    try
 | 
			
		||||
                    {
 | 
			
		||||
                        string uuid = (string) primRow["UUID"];
 | 
			
		||||
                        string objID = (string) primRow["SceneGroupID"];
 | 
			
		||||
                        
 | 
			
		||||
 | 
			
		||||
                        SceneObjectPart prim = buildPrim(primRow);
 | 
			
		||||
                        
 | 
			
		||||
 | 
			
		||||
                        if (uuid == objID) //is new SceneObjectGroup ?
 | 
			
		||||
                        {
 | 
			
		||||
                            SceneObjectGroup group = new SceneObjectGroup();
 | 
			
		||||
                            
 | 
			
		||||
 | 
			
		||||
                            DataRow shapeRow = shapes.Rows.Find(Util.ToRawUuidString(prim.UUID));
 | 
			
		||||
                            if (shapeRow != null)
 | 
			
		||||
                            {
 | 
			
		||||
| 
						 | 
				
			
			@ -384,11 +384,11 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
                            }
 | 
			
		||||
                            createdObjects[new LLUUID(objID)].AddPart(prim);
 | 
			
		||||
                        }
 | 
			
		||||
                        
 | 
			
		||||
 | 
			
		||||
                        if (persistPrimInventories)
 | 
			
		||||
                        {
 | 
			
		||||
                            LoadItems(prim);
 | 
			
		||||
                        }                        
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    catch (Exception e)
 | 
			
		||||
                    {
 | 
			
		||||
| 
						 | 
				
			
			@ -403,7 +403,7 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
            }
 | 
			
		||||
            return retvals;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Load in a prim's persisted inventory.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -411,31 +411,31 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
        private void LoadItems(SceneObjectPart prim)
 | 
			
		||||
        {
 | 
			
		||||
            //m_log.InfoFormat("[DATASTORE]: Loading inventory for {0}, {1}", prim.Name, prim.UUID);
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            DataTable dbItems = m_itemsTable;
 | 
			
		||||
            
 | 
			
		||||
            String sql = String.Format("primID = '{0}'", prim.UUID.ToString());            
 | 
			
		||||
 | 
			
		||||
            String sql = String.Format("primID = '{0}'", prim.UUID.ToString());
 | 
			
		||||
            DataRow[] dbItemRows = dbItems.Select(sql);
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            IList<TaskInventoryItem> inventory = new List<TaskInventoryItem>();
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            foreach (DataRow row in dbItemRows)
 | 
			
		||||
            {
 | 
			
		||||
                TaskInventoryItem item = buildItem(row);
 | 
			
		||||
                inventory.Add(item);
 | 
			
		||||
                
 | 
			
		||||
                //m_log.DebugFormat("[DATASTORE]: Restored item {0}, {1}", item.Name, item.ItemID); 
 | 
			
		||||
 | 
			
		||||
                //m_log.DebugFormat("[DATASTORE]: Restored item {0}, {1}", item.Name, item.ItemID);
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            prim.RestoreInventoryItems(inventory);
 | 
			
		||||
            
 | 
			
		||||
            // XXX A nasty little hack to recover the folder id for the prim (which is currently stored in 
 | 
			
		||||
 | 
			
		||||
            // XXX A nasty little hack to recover the folder id for the prim (which is currently stored in
 | 
			
		||||
            // every item).  This data should really be stored in the prim table itself.
 | 
			
		||||
            if (dbItemRows.Length > 0)
 | 
			
		||||
            {
 | 
			
		||||
                prim.FolderID = inventory[0].ParentID;
 | 
			
		||||
            }
 | 
			
		||||
        }        
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void StoreTerrain(double[,] ter, LLUUID regionID)
 | 
			
		||||
        {
 | 
			
		||||
| 
						 | 
				
			
			@ -474,8 +474,8 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
            {
 | 
			
		||||
                m_connection.Open();
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
            lock (m_dataSet) 
 | 
			
		||||
 | 
			
		||||
            lock (m_dataSet)
 | 
			
		||||
            {
 | 
			
		||||
                using (MySqlDataReader row = cmd.ExecuteReader())
 | 
			
		||||
                {
 | 
			
		||||
| 
						 | 
				
			
			@ -498,7 +498,7 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
                        m_log.Info("[REGION DB]: No terrain found for region");
 | 
			
		||||
                        return null;
 | 
			
		||||
                    }
 | 
			
		||||
                    
 | 
			
		||||
 | 
			
		||||
                    m_log.Info("[REGION DB]: Loaded terrain revision r" + rev.ToString());
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -558,7 +558,7 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
                    fillLandAccessRow(newAccessRow, entry, parcel.landData.globalID);
 | 
			
		||||
                    landaccesslist.Rows.Add(newAccessRow);
 | 
			
		||||
                }
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                Commit();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -624,7 +624,7 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
        /***********************************************************************
 | 
			
		||||
         *
 | 
			
		||||
         *  Database Definition Functions
 | 
			
		||||
         * 
 | 
			
		||||
         *
 | 
			
		||||
         *  This should be db agnostic as we define them in ADO.NET terms
 | 
			
		||||
         *
 | 
			
		||||
         **********************************************************************/
 | 
			
		||||
| 
						 | 
				
			
			@ -803,7 +803,7 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
 | 
			
		||||
            return shapes;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        private static DataTable createItemsTable()
 | 
			
		||||
        {
 | 
			
		||||
            DataTable items = new DataTable("primitems");
 | 
			
		||||
| 
						 | 
				
			
			@ -812,8 +812,8 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
            createCol(items, "primID", typeof (String));
 | 
			
		||||
            createCol(items, "assetID", typeof (String));
 | 
			
		||||
            createCol(items, "parentFolderID", typeof (String));
 | 
			
		||||
            
 | 
			
		||||
            createCol(items, "invType", typeof (Int32));            
 | 
			
		||||
 | 
			
		||||
            createCol(items, "invType", typeof (Int32));
 | 
			
		||||
            createCol(items, "assetType", typeof (Int32));
 | 
			
		||||
 | 
			
		||||
            createCol(items, "name", typeof (String));
 | 
			
		||||
| 
						 | 
				
			
			@ -834,10 +834,10 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
            items.PrimaryKey = new DataColumn[] {items.Columns["itemID"]};
 | 
			
		||||
 | 
			
		||||
            return items;
 | 
			
		||||
        }        
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /***********************************************************************
 | 
			
		||||
         *  
 | 
			
		||||
         *
 | 
			
		||||
         *  Convert between ADO.NET <=> OpenSim Objects
 | 
			
		||||
         *
 | 
			
		||||
         *  These should be database independant
 | 
			
		||||
| 
						 | 
				
			
			@ -932,8 +932,8 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
            }
 | 
			
		||||
            return prim;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Build a prim inventory item from the persisted data.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -942,15 +942,15 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
        private static TaskInventoryItem buildItem(DataRow row)
 | 
			
		||||
        {
 | 
			
		||||
            TaskInventoryItem taskItem = new TaskInventoryItem();
 | 
			
		||||
            
 | 
			
		||||
            taskItem.ItemID        = new LLUUID((String)row["itemID"]); 
 | 
			
		||||
 | 
			
		||||
            taskItem.ItemID        = new LLUUID((String)row["itemID"]);
 | 
			
		||||
            taskItem.ParentPartID  = new LLUUID((String)row["primID"]);
 | 
			
		||||
            taskItem.AssetID       = new LLUUID((String)row["assetID"]);
 | 
			
		||||
            taskItem.ParentID      = new LLUUID((String)row["parentFolderID"]);
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            taskItem.InvType       = Convert.ToInt32(row["invType"]);
 | 
			
		||||
            taskItem.Type          = Convert.ToInt32(row["assetType"]);
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            taskItem.Name          = (String)row["name"];
 | 
			
		||||
            taskItem.Description   = (String)row["description"];
 | 
			
		||||
            taskItem.CreationDate  = Convert.ToUInt32(row["creationDate"]);
 | 
			
		||||
| 
						 | 
				
			
			@ -958,15 +958,15 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
            taskItem.OwnerID       = new LLUUID((String)row["ownerID"]);
 | 
			
		||||
            taskItem.LastOwnerID   = new LLUUID((String)row["lastOwnerID"]);
 | 
			
		||||
            taskItem.GroupID       = new LLUUID((String)row["groupID"]);
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            taskItem.NextOwnerMask = Convert.ToUInt32(row["nextPermissions"]);
 | 
			
		||||
            taskItem.OwnerMask     = Convert.ToUInt32(row["currentPermissions"]);
 | 
			
		||||
            taskItem.BaseMask      = Convert.ToUInt32(row["basePermissions"]);
 | 
			
		||||
            taskItem.EveryoneMask  = Convert.ToUInt32(row["everyonePermissions"]);
 | 
			
		||||
            taskItem.GroupMask     = Convert.ToUInt32(row["groupPermissions"]);
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            return taskItem;
 | 
			
		||||
        }        
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private static LandData buildLandData(DataRow row)
 | 
			
		||||
        {
 | 
			
		||||
| 
						 | 
				
			
			@ -1117,17 +1117,17 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        private static void fillItemRow(DataRow row, TaskInventoryItem taskItem)
 | 
			
		||||
        {
 | 
			
		||||
            row["itemID"] = taskItem.ItemID;
 | 
			
		||||
            row["primID"] = taskItem.ParentPartID;
 | 
			
		||||
            row["assetID"] = taskItem.AssetID;
 | 
			
		||||
            row["parentFolderID"] = taskItem.ParentID;
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            row["invType"] = taskItem.InvType;
 | 
			
		||||
            row["assetType"] = taskItem.Type;
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            row["name"] = taskItem.Name;
 | 
			
		||||
            row["description"] = taskItem.Description;
 | 
			
		||||
            row["creationDate"] = taskItem.CreationDate;
 | 
			
		||||
| 
						 | 
				
			
			@ -1140,7 +1140,7 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
            row["basePermissions"] = taskItem.BaseMask;
 | 
			
		||||
            row["everyonePermissions"] = taskItem.EveryoneMask;
 | 
			
		||||
            row["groupPermissions"] = taskItem.GroupMask;
 | 
			
		||||
        }        
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private static void fillLandRow(DataRow row, LandData land, LLUUID regionUUID)
 | 
			
		||||
        {
 | 
			
		||||
| 
						 | 
				
			
			@ -1322,39 +1322,39 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
            else
 | 
			
		||||
            {
 | 
			
		||||
                fillShapeRow(shapeRow, prim);
 | 
			
		||||
            }           
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        // see IRegionDatastore
 | 
			
		||||
        public void StorePrimInventory(LLUUID primID, ICollection<TaskInventoryItem> items)
 | 
			
		||||
        {
 | 
			
		||||
            if (!persistPrimInventories)
 | 
			
		||||
                return;
 | 
			
		||||
                     
 | 
			
		||||
 | 
			
		||||
            m_log.InfoFormat("[REGION DB]: Persisting Prim Inventory with prim ID {0}", primID);
 | 
			
		||||
            
 | 
			
		||||
            // For now, we're just going to crudely remove all the previous inventory items 
 | 
			
		||||
 | 
			
		||||
            // For now, we're just going to crudely remove all the previous inventory items
 | 
			
		||||
            // no matter whether they have changed or not, and replace them with the current set.
 | 
			
		||||
            lock (m_dataSet)
 | 
			
		||||
            {                              
 | 
			
		||||
                RemoveItems(primID);              
 | 
			
		||||
                
 | 
			
		||||
            {
 | 
			
		||||
                RemoveItems(primID);
 | 
			
		||||
 | 
			
		||||
                // repalce with current inventory details
 | 
			
		||||
                foreach (TaskInventoryItem newItem in items)
 | 
			
		||||
                {
 | 
			
		||||
//                    m_log.InfoFormat(
 | 
			
		||||
//                        "[REGION DB]: " +
 | 
			
		||||
//                        "Adding item {0}, {1} to prim ID {2}", 
 | 
			
		||||
//                        "Adding item {0}, {1} to prim ID {2}",
 | 
			
		||||
//                        newItem.Name, newItem.ItemID, newItem.ParentPartID);
 | 
			
		||||
                    
 | 
			
		||||
 | 
			
		||||
                    DataRow newItemRow = m_itemsTable.NewRow();
 | 
			
		||||
                    fillItemRow(newItemRow, newItem);
 | 
			
		||||
                    m_itemsTable.Rows.Add(newItemRow);                
 | 
			
		||||
                    m_itemsTable.Rows.Add(newItemRow);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            Commit();
 | 
			
		||||
        }        
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /***********************************************************************
 | 
			
		||||
         *
 | 
			
		||||
| 
						 | 
				
			
			@ -1447,9 +1447,9 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
            }
 | 
			
		||||
            sql += subsql;
 | 
			
		||||
            sql += ")";
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            //m_log.InfoFormat("[DATASTORE]: defineTable() sql {0}", sql);
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            return sql;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1466,7 +1466,7 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
        /// This is a convenience function that collapses 5 repetitive
 | 
			
		||||
        /// lines for defining MySqlParameters to 2 parameters:
 | 
			
		||||
        /// column name and database type.
 | 
			
		||||
        ///        
 | 
			
		||||
        ///
 | 
			
		||||
        /// It assumes certain conventions like ?param as the param
 | 
			
		||||
        /// name to replace in parametrized queries, and that source
 | 
			
		||||
        /// version is always current version, both of which are fine
 | 
			
		||||
| 
						 | 
				
			
			@ -1498,7 +1498,7 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
            delete.Connection = conn;
 | 
			
		||||
            da.DeleteCommand = delete;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        private void SetupItemsCommands(MySqlDataAdapter da, MySqlConnection conn)
 | 
			
		||||
        {
 | 
			
		||||
            da.InsertCommand = createInsertCommand("primitems", m_itemsTable);
 | 
			
		||||
| 
						 | 
				
			
			@ -1511,7 +1511,7 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
            delete.Parameters.Add(createMySqlParameter("itemID", typeof (String)));
 | 
			
		||||
            delete.Connection = conn;
 | 
			
		||||
            da.DeleteCommand = delete;
 | 
			
		||||
        }        
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void SetupTerrainCommands(MySqlDataAdapter da, MySqlConnection conn)
 | 
			
		||||
        {
 | 
			
		||||
| 
						 | 
				
			
			@ -1597,7 +1597,7 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
            {
 | 
			
		||||
                m_log.WarnFormat("[REGION DB]: Shapes Table Already Exists: {0}", e);
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                icmd.ExecuteNonQuery();
 | 
			
		||||
| 
						 | 
				
			
			@ -1605,7 +1605,7 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
            catch (MySqlException e)
 | 
			
		||||
            {
 | 
			
		||||
                m_log.WarnFormat("[REGION DB]: Items Table Already Exists: {0}", e);
 | 
			
		||||
            }            
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			@ -1643,7 +1643,7 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
            MySqlCommand shapeSelectCmd = new MySqlCommand(m_shapeSelect, conn);
 | 
			
		||||
            MySqlDataAdapter sDa = new MySqlDataAdapter(shapeSelectCmd);
 | 
			
		||||
            MySqlCommand itemsSelectCmd = new MySqlCommand(m_itemsSelect, conn);
 | 
			
		||||
            MySqlDataAdapter iDa = new MySqlDataAdapter(itemsSelectCmd);            
 | 
			
		||||
            MySqlDataAdapter iDa = new MySqlDataAdapter(itemsSelectCmd);
 | 
			
		||||
            MySqlCommand terrainSelectCmd = new MySqlCommand(m_terrainSelect, conn);
 | 
			
		||||
            MySqlDataAdapter tDa = new MySqlDataAdapter(terrainSelectCmd);
 | 
			
		||||
            MySqlCommand landSelectCmd = new MySqlCommand(m_landSelect, conn);
 | 
			
		||||
| 
						 | 
				
			
			@ -1656,10 +1656,10 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
            {
 | 
			
		||||
                pDa.Fill(tmpDS, "prims");
 | 
			
		||||
                sDa.Fill(tmpDS, "primshapes");
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                if (persistPrimInventories)
 | 
			
		||||
                    iDa.Fill(tmpDS, "primitems");
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                tDa.Fill(tmpDS, "terrain");
 | 
			
		||||
                lDa.Fill(tmpDS, "land");
 | 
			
		||||
                lalDa.Fill(tmpDS, "landaccesslist");
 | 
			
		||||
| 
						 | 
				
			
			@ -1672,10 +1672,10 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
 | 
			
		||||
            pDa.Fill(tmpDS, "prims");
 | 
			
		||||
            sDa.Fill(tmpDS, "primshapes");
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            if (persistPrimInventories)
 | 
			
		||||
                iDa.Fill(tmpDS, "primitems");
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            tDa.Fill(tmpDS, "terrain");
 | 
			
		||||
            lDa.Fill(tmpDS, "land");
 | 
			
		||||
            lalDa.Fill(tmpDS, "landaccesslist");
 | 
			
		||||
| 
						 | 
				
			
			@ -1688,7 +1688,7 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
                    return false;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            foreach (DataColumn col in createShapeTable().Columns)
 | 
			
		||||
            {
 | 
			
		||||
                if (!tmpDS.Tables["primshapes"].Columns.Contains(col.ColumnName))
 | 
			
		||||
| 
						 | 
				
			
			@ -1697,9 +1697,9 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
                    return false;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            // XXX primitems should probably go here eventually
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            foreach (DataColumn col in createTerrainTable().Columns)
 | 
			
		||||
            {
 | 
			
		||||
                if (!tmpDS.Tables["terrain"].Columns.Contains(col.ColumnName))
 | 
			
		||||
| 
						 | 
				
			
			@ -1708,7 +1708,7 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
                    return false;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            foreach (DataColumn col in createLandTable().Columns)
 | 
			
		||||
            {
 | 
			
		||||
                if (!tmpDS.Tables["land"].Columns.Contains(col.ColumnName))
 | 
			
		||||
| 
						 | 
				
			
			@ -1717,7 +1717,7 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
                    return false;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            foreach (DataColumn col in createLandAccessListTable().Columns)
 | 
			
		||||
            {
 | 
			
		||||
                if (!tmpDS.Tables["landaccesslist"].Columns.Contains(col.ColumnName))
 | 
			
		||||
| 
						 | 
				
			
			@ -1726,7 +1726,7 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
                    return false;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1783,7 +1783,7 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
            else if (type == typeof (Int64))
 | 
			
		||||
            {
 | 
			
		||||
                return "bigint";
 | 
			
		||||
            }            
 | 
			
		||||
            }
 | 
			
		||||
            else if (type == typeof (Double))
 | 
			
		||||
            {
 | 
			
		||||
                return "float";
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -40,7 +40,7 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
    /// </summary>
 | 
			
		||||
    public class MySQLInventoryData : IInventoryData
 | 
			
		||||
    {
 | 
			
		||||
        private static readonly ILog m_log 
 | 
			
		||||
        private static readonly ILog m_log
 | 
			
		||||
            = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -249,7 +249,7 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
 | 
			
		||||
                    // There should only ever be one root folder for a user.  However, if there's more
 | 
			
		||||
                    // than one we'll simply use the first one rather than failing.  It would be even
 | 
			
		||||
                    // nicer to print some message to this effect, but this feels like it's too low a 
 | 
			
		||||
                    // nicer to print some message to this effect, but this feels like it's too low a
 | 
			
		||||
                    // to put such a message out, and it's too minor right now to spare the time to
 | 
			
		||||
                    // suitably refactor.
 | 
			
		||||
                    if (items.Count > 0)
 | 
			
		||||
| 
						 | 
				
			
			@ -332,13 +332,13 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
                item.InvType = (int) reader["invType"];
 | 
			
		||||
                item.Creator = new LLUUID((string) reader["creatorID"]);
 | 
			
		||||
                item.BasePermissions = (uint) reader["inventoryBasePermissions"];
 | 
			
		||||
                item.EveryOnePermissions = (uint) reader["inventoryEveryOnePermissions"];                
 | 
			
		||||
                item.EveryOnePermissions = (uint) reader["inventoryEveryOnePermissions"];
 | 
			
		||||
                item.SalePrice = (int) reader["salePrice"];
 | 
			
		||||
                item.SaleType = Convert.ToByte(reader["saleType"]);
 | 
			
		||||
                item.CreationDate = (int) reader["creationDate"];
 | 
			
		||||
                item.GroupID = new LLUUID(reader["groupID"].ToString());
 | 
			
		||||
                item.GroupOwned = Convert.ToBoolean(reader["groupOwned"]);
 | 
			
		||||
                item.Flags = (uint) reader["flags"];         
 | 
			
		||||
                item.Flags = (uint) reader["flags"];
 | 
			
		||||
 | 
			
		||||
                return item;
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -483,12 +483,12 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
                result.Parameters.AddWithValue("?groupID", item.GroupID);
 | 
			
		||||
                result.Parameters.AddWithValue("?groupOwned", item.GroupOwned);
 | 
			
		||||
                result.Parameters.AddWithValue("?flags", item.Flags);
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                lock (database)
 | 
			
		||||
                {
 | 
			
		||||
                    result.ExecuteNonQuery();
 | 
			
		||||
                }
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                result.Dispose();
 | 
			
		||||
            }
 | 
			
		||||
            catch (MySqlException e)
 | 
			
		||||
| 
						 | 
				
			
			@ -507,7 +507,7 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="item"></param>
 | 
			
		||||
        public void deleteInventoryItem(LLUUID itemID)
 | 
			
		||||
| 
						 | 
				
			
			@ -517,7 +517,7 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
                MySqlCommand cmd =
 | 
			
		||||
                    new MySqlCommand("DELETE FROM inventoryitems WHERE inventoryID=?uuid", database.Connection);
 | 
			
		||||
                cmd.Parameters.AddWithValue("?uuid", itemID.ToString());
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                lock (database)
 | 
			
		||||
                {
 | 
			
		||||
                    cmd.ExecuteNonQuery();
 | 
			
		||||
| 
						 | 
				
			
			@ -596,7 +596,7 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Append a list of all the child folders of a parent folder 
 | 
			
		||||
        /// Append a list of all the child folders of a parent folder
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="folders">list where folders will be appended</param>
 | 
			
		||||
        /// <param name="parentID">ID of parent</param>
 | 
			
		||||
| 
						 | 
				
			
			@ -623,11 +623,11 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
        protected void deleteOneFolder(LLUUID folderID)
 | 
			
		||||
        {
 | 
			
		||||
            try
 | 
			
		||||
            {                
 | 
			
		||||
            {
 | 
			
		||||
                MySqlCommand cmd =
 | 
			
		||||
                    new MySqlCommand("DELETE FROM inventoryfolders WHERE folderID=?uuid", database.Connection);
 | 
			
		||||
                cmd.Parameters.AddWithValue("?uuid", folderID.ToString());
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                lock (database)
 | 
			
		||||
                {
 | 
			
		||||
                    cmd.ExecuteNonQuery();
 | 
			
		||||
| 
						 | 
				
			
			@ -647,7 +647,7 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
                MySqlCommand cmd =
 | 
			
		||||
                    new MySqlCommand("DELETE FROM inventoryitems WHERE parentFolderID=?uuid", database.Connection);
 | 
			
		||||
                cmd.Parameters.AddWithValue("?uuid", folderID.ToString());
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                lock (database)
 | 
			
		||||
                {
 | 
			
		||||
                    cmd.ExecuteNonQuery();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -302,7 +302,7 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
                // Region Main gotta-have-or-we-return-null parts
 | 
			
		||||
                UInt64 tmp64;
 | 
			
		||||
                if (!UInt64.TryParse(reader["regionHandle"].ToString(), out tmp64))
 | 
			
		||||
                { 
 | 
			
		||||
                {
 | 
			
		||||
                    return null;
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
| 
						 | 
				
			
			@ -310,7 +310,7 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
                    retval.regionHandle = tmp64;
 | 
			
		||||
                }
 | 
			
		||||
                LLUUID tmp_uuid;
 | 
			
		||||
                if (!LLUUID.TryParse((string)reader["uuid"], out tmp_uuid)) 
 | 
			
		||||
                if (!LLUUID.TryParse((string)reader["uuid"], out tmp_uuid))
 | 
			
		||||
                {
 | 
			
		||||
                    return null;
 | 
			
		||||
                }
 | 
			
		||||
| 
						 | 
				
			
			@ -321,7 +321,7 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
 | 
			
		||||
                // non-critical parts
 | 
			
		||||
                retval.regionName = (string)reader["regionName"];
 | 
			
		||||
                retval.originUUID = new LLUUID((string) reader["originUUID"]); 
 | 
			
		||||
                retval.originUUID = new LLUUID((string) reader["originUUID"]);
 | 
			
		||||
 | 
			
		||||
                // Secrets
 | 
			
		||||
                retval.regionRecvKey = (string) reader["regionRecvKey"];
 | 
			
		||||
| 
						 | 
				
			
			@ -360,8 +360,8 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
 | 
			
		||||
                // World Map Addition
 | 
			
		||||
                LLUUID.TryParse((string)reader["regionMapTexture"], out retval.regionMapTextureID);
 | 
			
		||||
                LLUUID.TryParse((string)reader["owner_uuid"], out retval.owner_uuid);            
 | 
			
		||||
            }        
 | 
			
		||||
                LLUUID.TryParse((string)reader["owner_uuid"], out retval.owner_uuid);
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                return null;
 | 
			
		||||
| 
						 | 
				
			
			@ -418,7 +418,7 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
 | 
			
		||||
                LLUUID.TryParse((string) reader["sessionID"], out tmp);
 | 
			
		||||
                retval.SessionID = tmp;
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                LLUUID.TryParse((string)reader["secureSessionID"], out tmp);
 | 
			
		||||
                retval.SecureSessionID = tmp;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -488,7 +488,7 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
 | 
			
		||||
                if (reader.IsDBNull(reader.GetOrdinal("profileAboutText")))
 | 
			
		||||
                    retval.AboutText = "";
 | 
			
		||||
                else 
 | 
			
		||||
                else
 | 
			
		||||
                    retval.AboutText = (string) reader["profileAboutText"];
 | 
			
		||||
 | 
			
		||||
                if (reader.IsDBNull(reader.GetOrdinal("profileFirstText")))
 | 
			
		||||
| 
						 | 
				
			
			@ -511,7 +511,7 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
                    LLUUID.TryParse((string)reader["profileFirstImage"], out tmp);
 | 
			
		||||
                    retval.FirstLifeImage = tmp;
 | 
			
		||||
                }
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                if (reader.IsDBNull(reader.GetOrdinal("webLoginKey")))
 | 
			
		||||
                {
 | 
			
		||||
                    retval.WebLoginKey = LLUUID.Zero;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -59,7 +59,7 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
        {
 | 
			
		||||
            // TODO: actually do something with our connect string
 | 
			
		||||
            // instead of loading the second config
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            IniFile iniFile = new IniFile("mysql_connection.ini");
 | 
			
		||||
            string settingHostname = iniFile.ParseFileReadValue("hostname");
 | 
			
		||||
            string settingDatabase = iniFile.ParseFileReadValue("database");
 | 
			
		||||
| 
						 | 
				
			
			@ -67,7 +67,7 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
            string settingPassword = iniFile.ParseFileReadValue("password");
 | 
			
		||||
            string settingPooling = iniFile.ParseFileReadValue("pooling");
 | 
			
		||||
            string settingPort = iniFile.ParseFileReadValue("port");
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            m_usersTableName = iniFile.ParseFileReadValue("userstablename");
 | 
			
		||||
            if (m_usersTableName == null)
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			@ -206,15 +206,15 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
            param["?friendID"] = friend.UUID.ToString();
 | 
			
		||||
            param["?friendPerms"] = perms.ToString();
 | 
			
		||||
            param["?datetimestamp"] = dtvalue.ToString();
 | 
			
		||||
            
 | 
			
		||||
            try 
 | 
			
		||||
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                lock (database)
 | 
			
		||||
                {
 | 
			
		||||
                    IDbCommand adder =
 | 
			
		||||
                        database.Query(
 | 
			
		||||
                        "INSERT INTO `" + m_userFriendsTableName + "` " +
 | 
			
		||||
                        "(`ownerID`,`friendID`,`friendPerms`,`datetimestamp`) " + 
 | 
			
		||||
                        "(`ownerID`,`friendID`,`friendPerms`,`datetimestamp`) " +
 | 
			
		||||
                        "VALUES " +
 | 
			
		||||
                        "(?ownerID,?friendID,?friendPerms,?datetimestamp)",
 | 
			
		||||
                            param);
 | 
			
		||||
| 
						 | 
				
			
			@ -325,7 +325,7 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
 | 
			
		||||
                        // This is not a real column in the database table, it's a joined column from the opposite record
 | 
			
		||||
                        fli.FriendListOwnerPerms = (uint)Convert.ToInt32(reader["ownerperms"]);
 | 
			
		||||
                        
 | 
			
		||||
 | 
			
		||||
                        Lfli.Add(fli);
 | 
			
		||||
                    }
 | 
			
		||||
                    reader.Close();
 | 
			
		||||
| 
						 | 
				
			
			@ -599,7 +599,7 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
                                       user.UserAssetURI, user.CanDoMask, user.WantDoMask, user.AboutText,
 | 
			
		||||
                                       user.FirstLifeAboutText, user.Image, user.FirstLifeImage, user.WebLoginKey);
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -630,7 +630,7 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
 | 
			
		||||
        /// Appearance
 | 
			
		||||
        /// TODO: stubs for now to get us to a compiling state gently
 | 
			
		||||
        // override public AvatarAppearance GetUserAppearance(LLUUID user) 
 | 
			
		||||
        // override public AvatarAppearance GetUserAppearance(LLUUID user)
 | 
			
		||||
        // {
 | 
			
		||||
        //     return new AvatarAppearance();
 | 
			
		||||
        // }
 | 
			
		||||
| 
						 | 
				
			
			@ -644,12 +644,12 @@ namespace OpenSim.Data.MySQL
 | 
			
		|||
        {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        override public void RemoveAttachment(LLUUID user, LLUUID item)
 | 
			
		||||
        {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        override public List<LLUUID> GetAttachments(LLUUID user)
 | 
			
		||||
        {
 | 
			
		||||
            return new List<LLUUID>();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -28,7 +28,7 @@
 | 
			
		|||
using System.Reflection;
 | 
			
		||||
using System.Runtime.InteropServices;
 | 
			
		||||
 | 
			
		||||
// General Information about an assembly is controlled through the following 
 | 
			
		||||
// General information about an assembly is controlled through the following
 | 
			
		||||
// set of attributes. Change these attribute values to modify the information
 | 
			
		||||
// associated with an assembly.
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -41,8 +41,8 @@ using System.Runtime.InteropServices;
 | 
			
		|||
[assembly : AssemblyTrademark("")]
 | 
			
		||||
[assembly : AssemblyCulture("")]
 | 
			
		||||
 | 
			
		||||
// Setting ComVisible to false makes the types in this assembly not visible 
 | 
			
		||||
// to COM components.  If you need to access a type in this assembly from 
 | 
			
		||||
// Setting ComVisible to false makes the types in this assembly not visible
 | 
			
		||||
// to COM components.  If you need to access a type in this assembly from
 | 
			
		||||
// COM, set the ComVisible attribute to true on that type.
 | 
			
		||||
 | 
			
		||||
[assembly : ComVisible(false)]
 | 
			
		||||
| 
						 | 
				
			
			@ -54,11 +54,11 @@ using System.Runtime.InteropServices;
 | 
			
		|||
// Version information for an assembly consists of the following four values:
 | 
			
		||||
//
 | 
			
		||||
//      Major Version
 | 
			
		||||
//      Minor Version 
 | 
			
		||||
//      Minor Version
 | 
			
		||||
//      Build Number
 | 
			
		||||
//      Revision
 | 
			
		||||
//
 | 
			
		||||
// You can specify all the values or you can default the Revision and Build Numbers 
 | 
			
		||||
// You can specify all the values or you can default the Revision and Build Numbers
 | 
			
		||||
// by using the '*' as shown below:
 | 
			
		||||
 | 
			
		||||
[assembly : AssemblyVersion("1.0.0.0")]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -35,7 +35,7 @@ using NHibernate.UserTypes;
 | 
			
		|||
namespace OpenSim.Data.NHibernate
 | 
			
		||||
{
 | 
			
		||||
    [Serializable]
 | 
			
		||||
    public class LLUUIDUserType: IUserType 
 | 
			
		||||
    public class LLUUIDUserType: IUserType
 | 
			
		||||
    {
 | 
			
		||||
        public object Assemble(object cached, object owner)
 | 
			
		||||
        {
 | 
			
		||||
| 
						 | 
				
			
			@ -69,7 +69,7 @@ namespace OpenSim.Data.NHibernate
 | 
			
		|||
 | 
			
		||||
        public object NullSafeGet(IDataReader rs, string[] names, object owner)
 | 
			
		||||
        {
 | 
			
		||||
            object uuid = null; 
 | 
			
		||||
            object uuid = null;
 | 
			
		||||
 | 
			
		||||
            int ord = rs.GetOrdinal(names[0]);
 | 
			
		||||
            if (!rs.IsDBNull(ord))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -65,20 +65,20 @@ namespace OpenSim.Data.NHibernate
 | 
			
		|||
                // TODO: make this a real exception type
 | 
			
		||||
                throw new Exception("Malformed Inventory connection string '" + connect + "'");
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            // NHibernate setup
 | 
			
		||||
            cfg = new Configuration();
 | 
			
		||||
            cfg.SetProperty(Environment.ConnectionProvider, 
 | 
			
		||||
            cfg.SetProperty(Environment.ConnectionProvider,
 | 
			
		||||
                            "NHibernate.Connection.DriverConnectionProvider");
 | 
			
		||||
            cfg.SetProperty(Environment.Dialect, 
 | 
			
		||||
            cfg.SetProperty(Environment.Dialect,
 | 
			
		||||
                            "NHibernate.Dialect." + parts[0]);
 | 
			
		||||
            cfg.SetProperty(Environment.ConnectionDriver, 
 | 
			
		||||
            cfg.SetProperty(Environment.ConnectionDriver,
 | 
			
		||||
                            "NHibernate.Driver." + parts[1]);
 | 
			
		||||
            cfg.SetProperty(Environment.ConnectionString, parts[2]);
 | 
			
		||||
            cfg.AddAssembly("OpenSim.Data.NHibernate");
 | 
			
		||||
 | 
			
		||||
            HbmSerializer.Default.Validate = true;
 | 
			
		||||
            using ( MemoryStream stream = 
 | 
			
		||||
            using ( MemoryStream stream =
 | 
			
		||||
                    HbmSerializer.Default.Serialize(Assembly.GetExecutingAssembly()))
 | 
			
		||||
                cfg.AddInputStream(stream);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -62,23 +62,23 @@ namespace OpenSim.Data.NHibernate
 | 
			
		|||
                // TODO: make this a real exception type
 | 
			
		||||
                throw new Exception("Malformed Inventory connection string '" + connect + "'");
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            // Establish NHibernate Connection
 | 
			
		||||
            cfg = new Configuration();
 | 
			
		||||
            cfg.SetProperty(Environment.ConnectionProvider, 
 | 
			
		||||
            cfg.SetProperty(Environment.ConnectionProvider,
 | 
			
		||||
                            "NHibernate.Connection.DriverConnectionProvider");
 | 
			
		||||
            cfg.SetProperty(Environment.Dialect, 
 | 
			
		||||
            cfg.SetProperty(Environment.Dialect,
 | 
			
		||||
                            "NHibernate.Dialect." + parts[0]);
 | 
			
		||||
            cfg.SetProperty(Environment.ConnectionDriver, 
 | 
			
		||||
            cfg.SetProperty(Environment.ConnectionDriver,
 | 
			
		||||
                            "NHibernate.Driver." + parts[1]);
 | 
			
		||||
            cfg.SetProperty(Environment.ConnectionString, parts[2]);
 | 
			
		||||
            cfg.AddAssembly("OpenSim.Data.NHibernate");
 | 
			
		||||
 | 
			
		||||
            HbmSerializer.Default.Validate = true;
 | 
			
		||||
            using ( MemoryStream stream = 
 | 
			
		||||
            using ( MemoryStream stream =
 | 
			
		||||
                    HbmSerializer.Default.Serialize(Assembly.GetExecutingAssembly()))
 | 
			
		||||
                cfg.AddInputStream(stream);
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            // If uncommented this will auto create tables, but it
 | 
			
		||||
            // does drops of the old tables, so we need a smarter way
 | 
			
		||||
            // to acturally manage this.
 | 
			
		||||
| 
						 | 
				
			
			@ -120,8 +120,8 @@ namespace OpenSim.Data.NHibernate
 | 
			
		|||
 | 
			
		||||
        /*****************************************************************
 | 
			
		||||
         *
 | 
			
		||||
         *   Basic CRUD operations on Data 
 | 
			
		||||
         * 
 | 
			
		||||
         *   Basic CRUD operations on Data
 | 
			
		||||
         *
 | 
			
		||||
         ****************************************************************/
 | 
			
		||||
 | 
			
		||||
        // READ
 | 
			
		||||
| 
						 | 
				
			
			@ -195,7 +195,7 @@ namespace OpenSim.Data.NHibernate
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="item"></param>
 | 
			
		||||
        public void deleteInventoryItem(LLUUID itemID)
 | 
			
		||||
| 
						 | 
				
			
			@ -279,7 +279,7 @@ namespace OpenSim.Data.NHibernate
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="folder"></param>
 | 
			
		||||
        public void deleteInventoryFolder(LLUUID folderID)
 | 
			
		||||
| 
						 | 
				
			
			@ -353,7 +353,7 @@ namespace OpenSim.Data.NHibernate
 | 
			
		|||
        {
 | 
			
		||||
            updateInventoryItem(item);
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -403,9 +403,9 @@ namespace OpenSim.Data.NHibernate
 | 
			
		|||
                return null;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Append a list of all the child folders of a parent folder 
 | 
			
		||||
        /// Append a list of all the child folders of a parent folder
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="folders">list where folders will be appended</param>
 | 
			
		||||
        /// <param name="parentID">ID of parent</param>
 | 
			
		||||
| 
						 | 
				
			
			@ -413,7 +413,7 @@ namespace OpenSim.Data.NHibernate
 | 
			
		|||
        {
 | 
			
		||||
            using (ISession session = factory.OpenSession())
 | 
			
		||||
            {
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                ICriteria criteria = session.CreateCriteria(typeof(InventoryFolderBase));
 | 
			
		||||
                criteria.Add(Expression.Eq("ParentID", parentID));
 | 
			
		||||
                foreach (InventoryFolderBase item in criteria.List())
 | 
			
		||||
| 
						 | 
				
			
			@ -443,7 +443,7 @@ namespace OpenSim.Data.NHibernate
 | 
			
		|||
 | 
			
		||||
            for (int i = 0; i < folders.Count; i++)
 | 
			
		||||
                getInventoryFolders(ref folders, folders[i].ID);
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            return folders;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -64,20 +64,20 @@ namespace OpenSim.Data.NHibernate
 | 
			
		|||
 | 
			
		||||
            // This is stubbing for now, it will become dynamic later and support different db backends
 | 
			
		||||
            cfg = new Configuration();
 | 
			
		||||
            cfg.SetProperty(Environment.ConnectionProvider, 
 | 
			
		||||
            cfg.SetProperty(Environment.ConnectionProvider,
 | 
			
		||||
                            "NHibernate.Connection.DriverConnectionProvider");
 | 
			
		||||
            cfg.SetProperty(Environment.Dialect, 
 | 
			
		||||
            cfg.SetProperty(Environment.Dialect,
 | 
			
		||||
                            "NHibernate.Dialect." + parts[0]);
 | 
			
		||||
            cfg.SetProperty(Environment.ConnectionDriver, 
 | 
			
		||||
            cfg.SetProperty(Environment.ConnectionDriver,
 | 
			
		||||
                            "NHibernate.Driver." + parts[1]);
 | 
			
		||||
            cfg.SetProperty(Environment.ConnectionString, parts[2]);
 | 
			
		||||
            cfg.AddAssembly("OpenSim.Data.NHibernate");
 | 
			
		||||
 | 
			
		||||
            HbmSerializer.Default.Validate = true;
 | 
			
		||||
            using ( MemoryStream stream = 
 | 
			
		||||
            using ( MemoryStream stream =
 | 
			
		||||
                    HbmSerializer.Default.Serialize(Assembly.GetExecutingAssembly()))
 | 
			
		||||
                cfg.AddInputStream(stream);
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            // new SchemaExport(cfg).Create(true, true);
 | 
			
		||||
 | 
			
		||||
            factory  = cfg.BuildSessionFactory();
 | 
			
		||||
| 
						 | 
				
			
			@ -122,7 +122,7 @@ namespace OpenSim.Data.NHibernate
 | 
			
		|||
                // BUG: CATCHALL IS BAD.
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception) {}
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            return (user != null);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -151,7 +151,7 @@ namespace OpenSim.Data.NHibernate
 | 
			
		|||
                        // TODO: save agent
 | 
			
		||||
                        transaction.Commit();
 | 
			
		||||
                    }
 | 
			
		||||
                } 
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			@ -162,7 +162,7 @@ namespace OpenSim.Data.NHibernate
 | 
			
		|||
 | 
			
		||||
        private static void SetAgentData(LLUUID uuid, UserAgentData agent, ISession session)
 | 
			
		||||
        {
 | 
			
		||||
            if (agent == null) 
 | 
			
		||||
            if (agent == null)
 | 
			
		||||
            {
 | 
			
		||||
                // TODO: got to figure out how to do a delete right
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -178,7 +178,7 @@ namespace OpenSim.Data.NHibernate
 | 
			
		|||
                    session.Update(agent);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
        override public bool UpdateUserProfile(UserProfileData profile)
 | 
			
		||||
        {
 | 
			
		||||
| 
						 | 
				
			
			@ -193,7 +193,7 @@ namespace OpenSim.Data.NHibernate
 | 
			
		|||
                        transaction.Commit();
 | 
			
		||||
                        return true;
 | 
			
		||||
                    }
 | 
			
		||||
                } 
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			@ -202,7 +202,7 @@ namespace OpenSim.Data.NHibernate
 | 
			
		|||
                return true;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        override public void AddNewUserAgent(UserAgentData agent)
 | 
			
		||||
        {
 | 
			
		||||
            using (ISession session = factory.OpenSession())
 | 
			
		||||
| 
						 | 
				
			
			@ -212,9 +212,9 @@ namespace OpenSim.Data.NHibernate
 | 
			
		|||
                    session.Save(agent);
 | 
			
		||||
                    transaction.Commit();
 | 
			
		||||
                }
 | 
			
		||||
            } 
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        public void UpdateUserAgent(UserAgentData agent)
 | 
			
		||||
        {
 | 
			
		||||
            using (ISession session = factory.OpenSession())
 | 
			
		||||
| 
						 | 
				
			
			@ -224,7 +224,7 @@ namespace OpenSim.Data.NHibernate
 | 
			
		|||
                    session.Update(agent);
 | 
			
		||||
                    transaction.Commit();
 | 
			
		||||
                }
 | 
			
		||||
            } 
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        override public UserAgentData GetAgentByUUID(LLUUID uuid)
 | 
			
		||||
| 
						 | 
				
			
			@ -262,7 +262,7 @@ namespace OpenSim.Data.NHibernate
 | 
			
		|||
        {
 | 
			
		||||
            return GetUserByName(fname, lname).CurrentAgent;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        override public UserAgentData GetAgentByName(string name)
 | 
			
		||||
        {
 | 
			
		||||
            return GetAgentByName(name.Split(' ')[0], name.Split(' ')[1]);
 | 
			
		||||
| 
						 | 
				
			
			@ -273,7 +273,7 @@ namespace OpenSim.Data.NHibernate
 | 
			
		|||
            List<AvatarPickerAvatar> results = new List<AvatarPickerAvatar>();
 | 
			
		||||
            string[] querysplit;
 | 
			
		||||
            querysplit = query.Split(' ');
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            if (querysplit.Length == 2)
 | 
			
		||||
            {
 | 
			
		||||
                using (ISession session = factory.OpenSession())
 | 
			
		||||
| 
						 | 
				
			
			@ -293,7 +293,7 @@ namespace OpenSim.Data.NHibernate
 | 
			
		|||
            }
 | 
			
		||||
            return results;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        // TODO: actually implement these
 | 
			
		||||
        public override void UpdateUserCurrentRegion(LLUUID avatarid, LLUUID regionuuid) {return;}
 | 
			
		||||
        public override void StoreWebLoginKey(LLUUID agentID, LLUUID webLoginKey) {return;}
 | 
			
		||||
| 
						 | 
				
			
			@ -306,7 +306,7 @@ namespace OpenSim.Data.NHibernate
 | 
			
		|||
 | 
			
		||||
        /// Appearance
 | 
			
		||||
        /// TODO: stubs for now to get us to a compiling state gently
 | 
			
		||||
        public AvatarAppearance GetUserAppearance(LLUUID user) 
 | 
			
		||||
        public AvatarAppearance GetUserAppearance(LLUUID user)
 | 
			
		||||
        {
 | 
			
		||||
            AvatarAppearance appearance;
 | 
			
		||||
            // TODO: I'm sure I'll have to do something silly here
 | 
			
		||||
| 
						 | 
				
			
			@ -345,19 +345,19 @@ namespace OpenSim.Data.NHibernate
 | 
			
		|||
                    }
 | 
			
		||||
                    transaction.Commit();
 | 
			
		||||
                }
 | 
			
		||||
            } 
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        override public void AddAttachment(LLUUID user, LLUUID item)
 | 
			
		||||
        {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        override public void RemoveAttachment(LLUUID user, LLUUID item)
 | 
			
		||||
        {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        override public List<LLUUID> GetAttachments(LLUUID user)
 | 
			
		||||
        {
 | 
			
		||||
            return new List<LLUUID>();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -47,11 +47,11 @@ namespace OpenSim.Data.Null
 | 
			
		|||
        public void RemoveObject(LLUUID obj, LLUUID regionUUID)
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        // see IRegionDatastore
 | 
			
		||||
        public void StorePrimInventory(LLUUID primID, ICollection<TaskInventoryItem> items)
 | 
			
		||||
        {
 | 
			
		||||
        }        
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public List<SceneObjectGroup> LoadObjects(LLUUID regionUUID)
 | 
			
		||||
        {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -28,7 +28,7 @@
 | 
			
		|||
using System.Reflection;
 | 
			
		||||
using System.Runtime.InteropServices;
 | 
			
		||||
 | 
			
		||||
// General Information about an assembly is controlled through the following 
 | 
			
		||||
// General information about an assembly is controlled through the following
 | 
			
		||||
// set of attributes. Change these attribute values to modify the information
 | 
			
		||||
// associated with an assembly.
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -41,8 +41,8 @@ using System.Runtime.InteropServices;
 | 
			
		|||
[assembly : AssemblyTrademark("")]
 | 
			
		||||
[assembly : AssemblyCulture("")]
 | 
			
		||||
 | 
			
		||||
// Setting ComVisible to false makes the types in this assembly not visible 
 | 
			
		||||
// to COM components.  If you need to access a type in this assembly from 
 | 
			
		||||
// Setting ComVisible to false makes the types in this assembly not visible
 | 
			
		||||
// to COM components.  If you need to access a type in this assembly from
 | 
			
		||||
// COM, set the ComVisible attribute to true on that type.
 | 
			
		||||
 | 
			
		||||
[assembly : ComVisible(false)]
 | 
			
		||||
| 
						 | 
				
			
			@ -54,11 +54,11 @@ using System.Runtime.InteropServices;
 | 
			
		|||
// Version information for an assembly consists of the following four values:
 | 
			
		||||
//
 | 
			
		||||
//      Major Version
 | 
			
		||||
//      Minor Version 
 | 
			
		||||
//      Minor Version
 | 
			
		||||
//      Build Number
 | 
			
		||||
//      Revision
 | 
			
		||||
//
 | 
			
		||||
// You can specify all the values or you can default the Revision and Build Numbers 
 | 
			
		||||
// You can specify all the values or you can default the Revision and Build Numbers
 | 
			
		||||
// by using the '*' as shown below:
 | 
			
		||||
 | 
			
		||||
[assembly : AssemblyVersion("1.0.0.0")]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -95,6 +95,6 @@ namespace OpenSim.Data
 | 
			
		|||
            }
 | 
			
		||||
 | 
			
		||||
            return value;
 | 
			
		||||
        }      
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -135,7 +135,7 @@ namespace OpenSim.Data
 | 
			
		|||
 | 
			
		||||
            rowMapperSchema.AddMapping<byte[]>("ExtraParams",
 | 
			
		||||
                                               delegate(PrimitiveBaseShapeRowMapper shape) { return shape.Object.ExtraParams; },
 | 
			
		||||
                                               delegate(PrimitiveBaseShapeRowMapper shape, byte[] value) { shape.Object.ExtraParams = value; });            
 | 
			
		||||
                                               delegate(PrimitiveBaseShapeRowMapper shape, byte[] value) { shape.Object.ExtraParams = value; });
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public override PrimitiveBaseShapeRowMapper FromReader(BaseDataReader reader)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -28,7 +28,7 @@
 | 
			
		|||
using System.Reflection;
 | 
			
		||||
using System.Runtime.InteropServices;
 | 
			
		||||
 | 
			
		||||
// General Information about an assembly is controlled through the following 
 | 
			
		||||
// General information about an assembly is controlled through the following
 | 
			
		||||
// set of attributes. Change these attribute values to modify the information
 | 
			
		||||
// associated with an assembly.
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -41,8 +41,8 @@ using System.Runtime.InteropServices;
 | 
			
		|||
[assembly : AssemblyTrademark("")]
 | 
			
		||||
[assembly : AssemblyCulture("")]
 | 
			
		||||
 | 
			
		||||
// Setting ComVisible to false makes the types in this assembly not visible 
 | 
			
		||||
// to COM components.  If you need to access a type in this assembly from 
 | 
			
		||||
// Setting ComVisible to false makes the types in this assembly not visible
 | 
			
		||||
// to COM components.  If you need to access a type in this assembly from
 | 
			
		||||
// COM, set the ComVisible attribute to true on that type.
 | 
			
		||||
 | 
			
		||||
[assembly : ComVisible(false)]
 | 
			
		||||
| 
						 | 
				
			
			@ -54,11 +54,11 @@ using System.Runtime.InteropServices;
 | 
			
		|||
// Version information for an assembly consists of the following four values:
 | 
			
		||||
//
 | 
			
		||||
//      Major Version
 | 
			
		||||
//      Minor Version 
 | 
			
		||||
//      Minor Version
 | 
			
		||||
//      Build Number
 | 
			
		||||
//      Revision
 | 
			
		||||
//
 | 
			
		||||
// You can specify all the values or you can default the Revision and Build Numbers 
 | 
			
		||||
// You can specify all the values or you can default the Revision and Build Numbers
 | 
			
		||||
// by using the '*' as shown below:
 | 
			
		||||
 | 
			
		||||
[assembly : AssemblyVersion("1.0.0.0")]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -120,7 +120,7 @@ namespace OpenSim.Data
 | 
			
		|||
        public LLUUID regionMapTextureID = new LLUUID("00000000-0000-1111-9999-000000000006");
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// this particular mod to the file provides support within the spec for RegionProfileData for the 
 | 
			
		||||
        /// this particular mod to the file provides support within the spec for RegionProfileData for the
 | 
			
		||||
        /// owner_uuid for the region
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public LLUUID owner_uuid = LLUUID.Zero;
 | 
			
		||||
| 
						 | 
				
			
			@ -128,7 +128,7 @@ namespace OpenSim.Data
 | 
			
		|||
        /// <summary>
 | 
			
		||||
        /// OGS/OpenSim Specific original ID for a region after move/split
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public LLUUID originUUID; 
 | 
			
		||||
        public LLUUID originUUID;
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Get Sim profile data from grid server when in grid mode
 | 
			
		||||
| 
						 | 
				
			
			@ -163,7 +163,7 @@ namespace OpenSim.Data
 | 
			
		|||
            simData.serverPort = Convert.ToUInt32((string) responseData["sim_port"]);
 | 
			
		||||
            simData.httpPort = Convert.ToUInt32((string) responseData["http_port"]);
 | 
			
		||||
            simData.remotingPort = Convert.ToUInt32((string) responseData["remoting_port"]);
 | 
			
		||||
            simData.serverURI = (string)responseData["server_uri"]; 
 | 
			
		||||
            simData.serverURI = (string)responseData["server_uri"];
 | 
			
		||||
            simData.httpServerURI = "http://" + simData.serverIP + ":" + simData.httpPort.ToString() + "/";
 | 
			
		||||
            simData.UUID = new LLUUID((string) responseData["region_UUID"]);
 | 
			
		||||
            simData.regionName = (string) responseData["region_name"];
 | 
			
		||||
| 
						 | 
				
			
			@ -206,7 +206,7 @@ namespace OpenSim.Data
 | 
			
		|||
            simData.httpPort = Convert.ToUInt32((string) responseData["http_port"]);
 | 
			
		||||
            simData.remotingPort = Convert.ToUInt32((string) responseData["remoting_port"]);
 | 
			
		||||
            simData.httpServerURI = "http://" + simData.serverIP + ":" + simData.httpPort.ToString() + "/";
 | 
			
		||||
            simData.serverURI = (string)responseData["server_uri"]; 
 | 
			
		||||
            simData.serverURI = (string)responseData["server_uri"];
 | 
			
		||||
            simData.UUID = new LLUUID((string) responseData["region_UUID"]);
 | 
			
		||||
            simData.regionName = (string) responseData["region_name"];
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -28,7 +28,7 @@
 | 
			
		|||
using System.Reflection;
 | 
			
		||||
using System.Runtime.InteropServices;
 | 
			
		||||
 | 
			
		||||
// General Information about an assembly is controlled through the following 
 | 
			
		||||
// General information about an assembly is controlled through the following
 | 
			
		||||
// set of attributes. Change these attribute values to modify the information
 | 
			
		||||
// associated with an assembly.
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -41,8 +41,8 @@ using System.Runtime.InteropServices;
 | 
			
		|||
[assembly : AssemblyTrademark("")]
 | 
			
		||||
[assembly : AssemblyCulture("")]
 | 
			
		||||
 | 
			
		||||
// Setting ComVisible to false makes the types in this assembly not visible 
 | 
			
		||||
// to COM components.  If you need to access a type in this assembly from 
 | 
			
		||||
// Setting ComVisible to false makes the types in this assembly not visible
 | 
			
		||||
// to COM components.  If you need to access a type in this assembly from
 | 
			
		||||
// COM, set the ComVisible attribute to true on that type.
 | 
			
		||||
 | 
			
		||||
[assembly : ComVisible(false)]
 | 
			
		||||
| 
						 | 
				
			
			@ -54,11 +54,11 @@ using System.Runtime.InteropServices;
 | 
			
		|||
// Version information for an assembly consists of the following four values:
 | 
			
		||||
//
 | 
			
		||||
//      Major Version
 | 
			
		||||
//      Minor Version 
 | 
			
		||||
//      Minor Version
 | 
			
		||||
//      Build Number
 | 
			
		||||
//      Revision
 | 
			
		||||
//
 | 
			
		||||
// You can specify all the values or you can default the Revision and Build Numbers 
 | 
			
		||||
// You can specify all the values or you can default the Revision and Build Numbers
 | 
			
		||||
// by using the '*' as shown below:
 | 
			
		||||
 | 
			
		||||
[assembly : AssemblyVersion("1.0.0.0")]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -51,7 +51,7 @@ namespace OpenSim.Data.SQLite
 | 
			
		|||
        private const string SelectAssetSQL = "select * from assets where UUID=:UUID";
 | 
			
		||||
        private const string DeleteAssetSQL = "delete from assets where UUID=:UUID";
 | 
			
		||||
        private const string InsertAssetSQL = "insert into assets(UUID, Name, Description, Type, InvType, Local, Temporary, Data) values(:UUID, :Name, :Description, :Type, :InvType, :Local, :Temporary, :Data)";
 | 
			
		||||
        private const string UpdateAssetSQL = "update assets set Name=:Name, Description=:Description, Type=:Type, InvType=:InvType, Local=:Local, Temporary=:Temporary, Data=:Data where UUID=:UUID"; 
 | 
			
		||||
        private const string UpdateAssetSQL = "update assets set Name=:Name, Description=:Description, Type=:Type, InvType=:InvType, Local=:Local, Temporary=:Temporary, Data=:Data where UUID=:UUID";
 | 
			
		||||
        private const string assetSelect = "select * from assets";
 | 
			
		||||
 | 
			
		||||
        private SqliteConnection m_conn;
 | 
			
		||||
| 
						 | 
				
			
			@ -70,11 +70,11 @@ namespace OpenSim.Data.SQLite
 | 
			
		|||
 | 
			
		||||
        override public AssetBase FetchAsset(LLUUID uuid)
 | 
			
		||||
        {
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            using (SqliteCommand cmd = new SqliteCommand(SelectAssetSQL, m_conn))
 | 
			
		||||
            {
 | 
			
		||||
                cmd.Parameters.Add(new SqliteParameter(":UUID", Util.ToRawUuidString(uuid)));
 | 
			
		||||
                using (IDataReader reader = cmd.ExecuteReader()) 
 | 
			
		||||
                using (IDataReader reader = cmd.ExecuteReader())
 | 
			
		||||
                {
 | 
			
		||||
                    if (reader.Read())
 | 
			
		||||
                    {
 | 
			
		||||
| 
						 | 
				
			
			@ -98,7 +98,7 @@ namespace OpenSim.Data.SQLite
 | 
			
		|||
            {
 | 
			
		||||
                m_log.Info("[ASSET DB]: Asset exists already, ignoring.");
 | 
			
		||||
            }
 | 
			
		||||
            else 
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                using (SqliteCommand cmd = new SqliteCommand(InsertAssetSQL, m_conn))
 | 
			
		||||
                {
 | 
			
		||||
| 
						 | 
				
			
			@ -110,7 +110,7 @@ namespace OpenSim.Data.SQLite
 | 
			
		|||
                    cmd.Parameters.Add(new SqliteParameter(":Local", asset.Local));
 | 
			
		||||
                    cmd.Parameters.Add(new SqliteParameter(":Temporary", asset.Temporary));
 | 
			
		||||
                    cmd.Parameters.Add(new SqliteParameter(":Data", asset.Data));
 | 
			
		||||
                    
 | 
			
		||||
 | 
			
		||||
                    cmd.ExecuteNonQuery();
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -119,7 +119,7 @@ namespace OpenSim.Data.SQLite
 | 
			
		|||
        override public void UpdateAsset(AssetBase asset)
 | 
			
		||||
        {
 | 
			
		||||
            LogAssetLoad(asset);
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            using (SqliteCommand cmd = new SqliteCommand(UpdateAssetSQL, m_conn))
 | 
			
		||||
            {
 | 
			
		||||
                cmd.Parameters.Add(new SqliteParameter(":UUID", Util.ToRawUuidString(asset.FullID)));
 | 
			
		||||
| 
						 | 
				
			
			@ -130,7 +130,7 @@ namespace OpenSim.Data.SQLite
 | 
			
		|||
                cmd.Parameters.Add(new SqliteParameter(":Local", asset.Local));
 | 
			
		||||
                cmd.Parameters.Add(new SqliteParameter(":Temporary", asset.Temporary));
 | 
			
		||||
                cmd.Parameters.Add(new SqliteParameter(":Data", asset.Data));
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                cmd.ExecuteNonQuery();
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -154,14 +154,14 @@ namespace OpenSim.Data.SQLite
 | 
			
		|||
            using (SqliteCommand cmd = new SqliteCommand(SelectAssetSQL, m_conn))
 | 
			
		||||
            {
 | 
			
		||||
                cmd.Parameters.Add(new SqliteParameter(":UUID", Util.ToRawUuidString(uuid)));
 | 
			
		||||
                using (IDataReader reader = cmd.ExecuteReader()) 
 | 
			
		||||
                using (IDataReader reader = cmd.ExecuteReader())
 | 
			
		||||
                {
 | 
			
		||||
                    if (reader.Read())
 | 
			
		||||
                    {
 | 
			
		||||
                        reader.Close();
 | 
			
		||||
                        return true;
 | 
			
		||||
                    }
 | 
			
		||||
                    else 
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        reader.Close();
 | 
			
		||||
                        return false;
 | 
			
		||||
| 
						 | 
				
			
			@ -175,7 +175,7 @@ namespace OpenSim.Data.SQLite
 | 
			
		|||
            using (SqliteCommand cmd = new SqliteCommand(DeleteAssetSQL, m_conn))
 | 
			
		||||
            {
 | 
			
		||||
                cmd.Parameters.Add(new SqliteParameter(":UUID", Util.ToRawUuidString(uuid)));
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                cmd.ExecuteNonQuery();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -193,7 +193,7 @@ namespace OpenSim.Data.SQLite
 | 
			
		|||
        /***********************************************************************
 | 
			
		||||
         *
 | 
			
		||||
         *  Database Definition Functions
 | 
			
		||||
         * 
 | 
			
		||||
         *
 | 
			
		||||
         *  This should be db agnostic as we define them in ADO.NET terms
 | 
			
		||||
         *
 | 
			
		||||
         **********************************************************************/
 | 
			
		||||
| 
						 | 
				
			
			@ -216,7 +216,7 @@ namespace OpenSim.Data.SQLite
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        /***********************************************************************
 | 
			
		||||
         *  
 | 
			
		||||
         *
 | 
			
		||||
         *  Convert between ADO.NET <=> OpenSim Objects
 | 
			
		||||
         *
 | 
			
		||||
         *  These should be database independant
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -106,22 +106,22 @@ namespace OpenSim.Data.SQLite
 | 
			
		|||
            // new fields
 | 
			
		||||
            if (!Convert.IsDBNull(row["salePrice"]))
 | 
			
		||||
                item.SalePrice = Convert.ToInt32(row["salePrice"]);
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            if (!Convert.IsDBNull(row["saleType"]))
 | 
			
		||||
                item.SaleType = Convert.ToByte(row["saleType"]);
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            if (!Convert.IsDBNull(row["creationDate"]))
 | 
			
		||||
                item.CreationDate = Convert.ToInt32(row["creationDate"]);
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            if (!Convert.IsDBNull(row["groupID"]))
 | 
			
		||||
                item.GroupID = new LLUUID((string)row["groupID"]);
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            if (!Convert.IsDBNull(row["groupOwned"]))
 | 
			
		||||
                item.GroupOwned = Convert.ToBoolean(row["groupOwned"]);
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            if (!Convert.IsDBNull(row["Flags"]))
 | 
			
		||||
                item.Flags = Convert.ToUInt32(row["Flags"]);
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            return item;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -221,7 +221,7 @@ namespace OpenSim.Data.SQLite
 | 
			
		|||
                {
 | 
			
		||||
                    if (add)
 | 
			
		||||
                        m_log.ErrorFormat("[INVENTORY DB]: Interface Misuse: Attempting to Add inventory item that already exists: {0}", item.ID);
 | 
			
		||||
                    
 | 
			
		||||
 | 
			
		||||
                    fillItemRow(inventoryRow, item);
 | 
			
		||||
                }
 | 
			
		||||
                invItemsDa.Update(ds, "inventoryitems");
 | 
			
		||||
| 
						 | 
				
			
			@ -314,9 +314,9 @@ namespace OpenSim.Data.SQLite
 | 
			
		|||
 | 
			
		||||
                // There should only ever be one root folder for a user.  However, if there's more
 | 
			
		||||
                // than one we'll simply use the first one rather than failing.  It would be even
 | 
			
		||||
                // nicer to print some message to this effect, but this feels like it's too low a 
 | 
			
		||||
                // nicer to print some message to this effect, but this feels like it's too low a
 | 
			
		||||
                // to put such a message out, and it's too minor right now to spare the time to
 | 
			
		||||
                // suitably refactor.            
 | 
			
		||||
                // suitably refactor.
 | 
			
		||||
                if (folders.Count > 0)
 | 
			
		||||
                {
 | 
			
		||||
                    return folders[0];
 | 
			
		||||
| 
						 | 
				
			
			@ -327,7 +327,7 @@ namespace OpenSim.Data.SQLite
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Append a list of all the child folders of a parent folder 
 | 
			
		||||
        /// Append a list of all the child folders of a parent folder
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="folders">list where folders will be appended</param>
 | 
			
		||||
        /// <param name="parentID">ID of parent</param>
 | 
			
		||||
| 
						 | 
				
			
			@ -435,7 +435,7 @@ namespace OpenSim.Data.SQLite
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="item"></param>
 | 
			
		||||
        public void deleteInventoryItem(LLUUID itemID)
 | 
			
		||||
| 
						 | 
				
			
			@ -664,7 +664,7 @@ namespace OpenSim.Data.SQLite
 | 
			
		|||
        {
 | 
			
		||||
            string createInventoryItems = defineTable(createInventoryItemsTable());
 | 
			
		||||
            string createInventoryFolders = defineTable(createInventoryFoldersTable());
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            SqliteCommand pcmd = new SqliteCommand(createInventoryItems, conn);
 | 
			
		||||
            SqliteCommand scmd = new SqliteCommand(createInventoryFolders, conn);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -697,7 +697,7 @@ namespace OpenSim.Data.SQLite
 | 
			
		|||
            // Very clumsy way of checking whether we need to upgrade the database table version and then updating.  Only
 | 
			
		||||
            // putting up with this because this code should be blown away soon by nhibernate...
 | 
			
		||||
            conn.Open();
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            SqliteCommand cmd;
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			@ -707,7 +707,7 @@ namespace OpenSim.Data.SQLite
 | 
			
		|||
            catch (SqliteSyntaxException)
 | 
			
		||||
            {
 | 
			
		||||
                m_log.Info("[INVENTORY DB]: Upgrading sqlite inventory database to version 2");
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                cmd = new SqliteCommand("alter table inventoryitems add column salePrice integer default 99;", conn);
 | 
			
		||||
                cmd.ExecuteNonQuery();
 | 
			
		||||
                cmd = new SqliteCommand("alter table inventoryitems add column saleType integer default 0;", conn);
 | 
			
		||||
| 
						 | 
				
			
			@ -719,15 +719,15 @@ namespace OpenSim.Data.SQLite
 | 
			
		|||
                cmd = new SqliteCommand("alter table inventoryitems add column groupOwned integer default 0;", conn);
 | 
			
		||||
                cmd.ExecuteNonQuery();
 | 
			
		||||
                cmd = new SqliteCommand("alter table inventoryitems add column flags integer default 0;", conn);
 | 
			
		||||
                cmd.ExecuteNonQuery();  
 | 
			
		||||
                
 | 
			
		||||
                cmd.ExecuteNonQuery();
 | 
			
		||||
 | 
			
		||||
                pDa.Fill(tmpDS, "inventoryitems");
 | 
			
		||||
            }
 | 
			
		||||
            finally
 | 
			
		||||
            {
 | 
			
		||||
                conn.Close();
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            foreach (DataColumn col in createInventoryItemsTable().Columns)
 | 
			
		||||
            {
 | 
			
		||||
                if (! tmpDS.Tables["inventoryitems"].Columns.Contains(col.ColumnName))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -90,11 +90,11 @@ namespace OpenSim.Data.SQLite
 | 
			
		|||
 | 
			
		||||
            SqliteCommand shapeSelectCmd = new SqliteCommand(shapeSelect, m_conn);
 | 
			
		||||
            shapeDa = new SqliteDataAdapter(shapeSelectCmd);
 | 
			
		||||
            // SqliteCommandBuilder shapeCb = new SqliteCommandBuilder(shapeDa);      
 | 
			
		||||
            // SqliteCommandBuilder shapeCb = new SqliteCommandBuilder(shapeDa);
 | 
			
		||||
 | 
			
		||||
            SqliteCommand itemsSelectCmd = new SqliteCommand(itemsSelect, m_conn);
 | 
			
		||||
            itemsDa = new SqliteDataAdapter(itemsSelectCmd);
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            SqliteCommand terrainSelectCmd = new SqliteCommand(terrainSelect, m_conn);
 | 
			
		||||
            terrainDa = new SqliteDataAdapter(terrainSelectCmd);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -117,7 +117,7 @@ namespace OpenSim.Data.SQLite
 | 
			
		|||
 | 
			
		||||
                ds.Tables.Add(createShapeTable());
 | 
			
		||||
                setupShapeCommands(shapeDa, m_conn);
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                if (persistPrimInventories)
 | 
			
		||||
                {
 | 
			
		||||
                    ds.Tables.Add(createItemsTable());
 | 
			
		||||
| 
						 | 
				
			
			@ -183,8 +183,8 @@ namespace OpenSim.Data.SQLite
 | 
			
		|||
            {
 | 
			
		||||
                foreach (SceneObjectPart prim in obj.Children.Values)
 | 
			
		||||
                {
 | 
			
		||||
                    if ((prim.GetEffectiveObjectFlags() & (uint)LLObject.ObjectFlags.Physics) == 0 
 | 
			
		||||
                        && (prim.GetEffectiveObjectFlags() & (uint)LLObject.ObjectFlags.Temporary) == 0 
 | 
			
		||||
                    if ((prim.GetEffectiveObjectFlags() & (uint)LLObject.ObjectFlags.Physics) == 0
 | 
			
		||||
                        && (prim.GetEffectiveObjectFlags() & (uint)LLObject.ObjectFlags.Temporary) == 0
 | 
			
		||||
                        && (prim.GetEffectiveObjectFlags() & (uint)LLObject.ObjectFlags.TemporaryOnRez) == 0)
 | 
			
		||||
                    {
 | 
			
		||||
                        m_log.Info("[REGION DB]: Adding obj: " + obj.UUID + " to region: " + regionUUID);
 | 
			
		||||
| 
						 | 
				
			
			@ -210,7 +210,7 @@ namespace OpenSim.Data.SQLite
 | 
			
		|||
        public void RemoveObject(LLUUID obj, LLUUID regionUUID)
 | 
			
		||||
        {
 | 
			
		||||
            m_log.InfoFormat("[REGION DB]: Removing obj: {0} from region: {1}", obj.UUID, regionUUID);
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            DataTable prims = ds.Tables["prims"];
 | 
			
		||||
            DataTable shapes = ds.Tables["primshapes"];
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -234,7 +234,7 @@ namespace OpenSim.Data.SQLite
 | 
			
		|||
                    }
 | 
			
		||||
 | 
			
		||||
                    // Remove prim row
 | 
			
		||||
                    row.Delete();                    
 | 
			
		||||
                    row.Delete();
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -247,11 +247,11 @@ namespace OpenSim.Data.SQLite
 | 
			
		|||
        /// </summary>
 | 
			
		||||
        private void RemoveItems(LLUUID uuid)
 | 
			
		||||
        {
 | 
			
		||||
            DataTable items = ds.Tables["primitems"];            
 | 
			
		||||
            DataTable items = ds.Tables["primitems"];
 | 
			
		||||
 | 
			
		||||
            String sql = String.Format("primID = '{0}'", uuid);            
 | 
			
		||||
            String sql = String.Format("primID = '{0}'", uuid);
 | 
			
		||||
            DataRow[] itemRows = items.Select(sql);
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
            foreach (DataRow itemRow in itemRows)
 | 
			
		||||
            {
 | 
			
		||||
                itemRow.Delete();
 | 
			
		||||
| 
						 | 
				
			
			@ -286,7 +286,7 @@ namespace OpenSim.Data.SQLite
 | 
			
		|||
                    try
 | 
			
		||||
                    {
 | 
			
		||||
                        SceneObjectPart prim = null;
 | 
			
		||||
                            
 | 
			
		||||
 | 
			
		||||
                        string uuid = (string) primRow["UUID"];
 | 
			
		||||
                        string objID = (string) primRow["SceneGroupID"];
 | 
			
		||||
                        if (uuid == objID) //is new SceneObjectGroup ?
 | 
			
		||||
| 
						 | 
				
			
			@ -353,25 +353,25 @@ namespace OpenSim.Data.SQLite
 | 
			
		|||
        private void LoadItems(SceneObjectPart prim)
 | 
			
		||||
        {
 | 
			
		||||
            //m_log.DebugFormat("[DATASTORE]: Loading inventory for {0}, {1}", prim.Name, prim.UUID);
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            DataTable dbItems = ds.Tables["primitems"];
 | 
			
		||||
            
 | 
			
		||||
            String sql = String.Format("primID = '{0}'", prim.UUID.ToString());            
 | 
			
		||||
 | 
			
		||||
            String sql = String.Format("primID = '{0}'", prim.UUID.ToString());
 | 
			
		||||
            DataRow[] dbItemRows = dbItems.Select(sql);
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            IList<TaskInventoryItem> inventory = new List<TaskInventoryItem>();
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            foreach (DataRow row in dbItemRows)
 | 
			
		||||
            {
 | 
			
		||||
                TaskInventoryItem item = buildItem(row);
 | 
			
		||||
                inventory.Add(item);
 | 
			
		||||
                
 | 
			
		||||
                //m_log.DebugFormat("[DATASTORE]: Restored item {0}, {1}", item.Name, item.ItemID); 
 | 
			
		||||
 | 
			
		||||
                //m_log.DebugFormat("[DATASTORE]: Restored item {0}, {1}", item.Name, item.ItemID);
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            prim.RestoreInventoryItems(inventory);
 | 
			
		||||
            
 | 
			
		||||
            // XXX A nasty little hack to recover the folder id for the prim (which is currently stored in 
 | 
			
		||||
 | 
			
		||||
            // XXX A nasty little hack to recover the folder id for the prim (which is currently stored in
 | 
			
		||||
            // every item).  This data should really be stored in the prim table itself.
 | 
			
		||||
            if (dbItemRows.Length > 0)
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			@ -548,12 +548,12 @@ namespace OpenSim.Data.SQLite
 | 
			
		|||
            {
 | 
			
		||||
                primDa.Update(ds, "prims");
 | 
			
		||||
                shapeDa.Update(ds, "primshapes");
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                if (persistPrimInventories)
 | 
			
		||||
                {
 | 
			
		||||
                    itemsDa.Update(ds, "primitems");
 | 
			
		||||
                }
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                terrainDa.Update(ds, "terrain");
 | 
			
		||||
                landDa.Update(ds, "land");
 | 
			
		||||
                landAccessListDa.Update(ds, "landaccesslist");
 | 
			
		||||
| 
						 | 
				
			
			@ -569,7 +569,7 @@ namespace OpenSim.Data.SQLite
 | 
			
		|||
        /***********************************************************************
 | 
			
		||||
         *
 | 
			
		||||
         *  Database Definition Functions
 | 
			
		||||
         * 
 | 
			
		||||
         *
 | 
			
		||||
         *  This should be db agnostic as we define them in ADO.NET terms
 | 
			
		||||
         *
 | 
			
		||||
         **********************************************************************/
 | 
			
		||||
| 
						 | 
				
			
			@ -705,8 +705,8 @@ namespace OpenSim.Data.SQLite
 | 
			
		|||
            createCol(items, "primID", typeof (String));
 | 
			
		||||
            createCol(items, "assetID", typeof (String));
 | 
			
		||||
            createCol(items, "parentFolderID", typeof (String));
 | 
			
		||||
            
 | 
			
		||||
            createCol(items, "invType", typeof (Int32));            
 | 
			
		||||
 | 
			
		||||
            createCol(items, "invType", typeof (Int32));
 | 
			
		||||
            createCol(items, "assetType", typeof (Int32));
 | 
			
		||||
 | 
			
		||||
            createCol(items, "name", typeof (String));
 | 
			
		||||
| 
						 | 
				
			
			@ -784,7 +784,7 @@ namespace OpenSim.Data.SQLite
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        /***********************************************************************
 | 
			
		||||
         *  
 | 
			
		||||
         *
 | 
			
		||||
         *  Convert between ADO.NET <=> OpenSim Objects
 | 
			
		||||
         *
 | 
			
		||||
         *  These should be database independant
 | 
			
		||||
| 
						 | 
				
			
			@ -897,7 +897,7 @@ namespace OpenSim.Data.SQLite
 | 
			
		|||
 | 
			
		||||
            return prim;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Build a prim inventory item from the persisted data.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -906,15 +906,15 @@ namespace OpenSim.Data.SQLite
 | 
			
		|||
        private static TaskInventoryItem buildItem(DataRow row)
 | 
			
		||||
        {
 | 
			
		||||
            TaskInventoryItem taskItem = new TaskInventoryItem();
 | 
			
		||||
            
 | 
			
		||||
            taskItem.ItemID        = new LLUUID((String)row["itemID"]); 
 | 
			
		||||
 | 
			
		||||
            taskItem.ItemID        = new LLUUID((String)row["itemID"]);
 | 
			
		||||
            taskItem.ParentPartID  = new LLUUID((String)row["primID"]);
 | 
			
		||||
            taskItem.AssetID       = new LLUUID((String)row["assetID"]);
 | 
			
		||||
            taskItem.ParentID      = new LLUUID((String)row["parentFolderID"]);
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            taskItem.InvType       = Convert.ToInt32(row["invType"]);
 | 
			
		||||
            taskItem.Type          = Convert.ToInt32(row["assetType"]);
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            taskItem.Name          = (String)row["name"];
 | 
			
		||||
            taskItem.Description   = (String)row["description"];
 | 
			
		||||
            taskItem.CreationDate  = Convert.ToUInt32(row["creationDate"]);
 | 
			
		||||
| 
						 | 
				
			
			@ -922,13 +922,13 @@ namespace OpenSim.Data.SQLite
 | 
			
		|||
            taskItem.OwnerID       = new LLUUID((String)row["ownerID"]);
 | 
			
		||||
            taskItem.LastOwnerID   = new LLUUID((String)row["lastOwnerID"]);
 | 
			
		||||
            taskItem.GroupID       = new LLUUID((String)row["groupID"]);
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            taskItem.NextOwnerMask = Convert.ToUInt32(row["nextPermissions"]);
 | 
			
		||||
            taskItem.OwnerMask     = Convert.ToUInt32(row["currentPermissions"]);
 | 
			
		||||
            taskItem.BaseMask      = Convert.ToUInt32(row["basePermissions"]);
 | 
			
		||||
            taskItem.EveryoneMask  = Convert.ToUInt32(row["everyonePermissions"]);
 | 
			
		||||
            taskItem.GroupMask     = Convert.ToUInt32(row["groupPermissions"]);
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            return taskItem;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -990,14 +990,14 @@ namespace OpenSim.Data.SQLite
 | 
			
		|||
                    cmd.ExecuteNonQuery();
 | 
			
		||||
                    m_conn.Close();
 | 
			
		||||
                    m_conn.Dispose();
 | 
			
		||||
                   
 | 
			
		||||
 | 
			
		||||
                    m_log.Error("[REGION DB]: The land table was recently updated.  You need to restart the simulator.  Exiting now.");
 | 
			
		||||
 | 
			
		||||
                    Thread.Sleep(10000);
 | 
			
		||||
 | 
			
		||||
                    // ICK!  but it's better then A thousand red SQLITE error messages!
 | 
			
		||||
                    Environment.Exit(0);
 | 
			
		||||
                   
 | 
			
		||||
 | 
			
		||||
                }
 | 
			
		||||
                catch (Exception)
 | 
			
		||||
                {
 | 
			
		||||
| 
						 | 
				
			
			@ -1006,7 +1006,7 @@ namespace OpenSim.Data.SQLite
 | 
			
		|||
                    Environment.Exit(0);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            return newData;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1107,17 +1107,17 @@ namespace OpenSim.Data.SQLite
 | 
			
		|||
            row["SitTargetOrientY"] = sitTargetOrient.Y;
 | 
			
		||||
            row["SitTargetOrientZ"] = sitTargetOrient.Z;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        private static void fillItemRow(DataRow row, TaskInventoryItem taskItem)
 | 
			
		||||
        {
 | 
			
		||||
            row["itemID"] = taskItem.ItemID;
 | 
			
		||||
            row["primID"] = taskItem.ParentPartID;
 | 
			
		||||
            row["assetID"] = taskItem.AssetID;
 | 
			
		||||
            row["parentFolderID"] = taskItem.ParentID;
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            row["invType"] = taskItem.InvType;
 | 
			
		||||
            row["assetType"] = taskItem.Type;
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            row["name"] = taskItem.Name;
 | 
			
		||||
            row["description"] = taskItem.Description;
 | 
			
		||||
            row["creationDate"] = taskItem.CreationDate;
 | 
			
		||||
| 
						 | 
				
			
			@ -1294,37 +1294,37 @@ namespace OpenSim.Data.SQLite
 | 
			
		|||
                fillShapeRow(shapeRow, prim);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        // see IRegionDatastore
 | 
			
		||||
        public void StorePrimInventory(LLUUID primID, ICollection<TaskInventoryItem> items)
 | 
			
		||||
        {
 | 
			
		||||
            if (!persistPrimInventories)
 | 
			
		||||
                return;
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            m_log.InfoFormat("[REGION DB]: Entered StorePrimInventory with prim ID {0}", primID);
 | 
			
		||||
            
 | 
			
		||||
            DataTable dbItems = ds.Tables["primitems"]; 
 | 
			
		||||
            
 | 
			
		||||
            // For now, we're just going to crudely remove all the previous inventory items 
 | 
			
		||||
            // no matter whether they have changed or not, and replace them with the current set.            
 | 
			
		||||
 | 
			
		||||
            DataTable dbItems = ds.Tables["primitems"];
 | 
			
		||||
 | 
			
		||||
            // For now, we're just going to crudely remove all the previous inventory items
 | 
			
		||||
            // no matter whether they have changed or not, and replace them with the current set.
 | 
			
		||||
            lock (ds)
 | 
			
		||||
            {
 | 
			
		||||
                RemoveItems(primID);
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                // repalce with current inventory details
 | 
			
		||||
                foreach (TaskInventoryItem newItem in items)
 | 
			
		||||
                {
 | 
			
		||||
//                    m_log.InfoFormat(
 | 
			
		||||
//                        "[DATASTORE]: ", 
 | 
			
		||||
//                        "Adding item {0}, {1} to prim ID {2}", 
 | 
			
		||||
//                        "[DATASTORE]: ",
 | 
			
		||||
//                        "Adding item {0}, {1} to prim ID {2}",
 | 
			
		||||
//                        newItem.Name, newItem.ItemID, newItem.ParentPartID);
 | 
			
		||||
                    
 | 
			
		||||
 | 
			
		||||
                    DataRow newItemRow = dbItems.NewRow();
 | 
			
		||||
                    fillItemRow(newItemRow, newItem);
 | 
			
		||||
                    dbItems.Rows.Add(newItemRow);                
 | 
			
		||||
                    dbItems.Rows.Add(newItemRow);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            Commit();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1436,7 +1436,7 @@ namespace OpenSim.Data.SQLite
 | 
			
		|||
        /// This is a convenience function that collapses 5 repetitive
 | 
			
		||||
        /// lines for defining SqliteParameters to 2 parameters:
 | 
			
		||||
        /// column name and database type.
 | 
			
		||||
        ///        
 | 
			
		||||
        ///
 | 
			
		||||
        /// It assumes certain conventions like :param as the param
 | 
			
		||||
        /// name to replace in parametrized queries, and that source
 | 
			
		||||
        /// version is always current version, both of which are fine
 | 
			
		||||
| 
						 | 
				
			
			@ -1451,7 +1451,7 @@ namespace OpenSim.Data.SQLite
 | 
			
		|||
            param.SourceColumn = name;
 | 
			
		||||
            param.SourceVersion = DataRowVersion.Current;
 | 
			
		||||
            return param;
 | 
			
		||||
        }                
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void setupPrimCommands(SqliteDataAdapter da, SqliteConnection conn)
 | 
			
		||||
        {
 | 
			
		||||
| 
						 | 
				
			
			@ -1466,7 +1466,7 @@ namespace OpenSim.Data.SQLite
 | 
			
		|||
            delete.Connection = conn;
 | 
			
		||||
            da.DeleteCommand = delete;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        private void setupItemsCommands(SqliteDataAdapter da, SqliteConnection conn)
 | 
			
		||||
        {
 | 
			
		||||
            da.InsertCommand = createInsertCommand("primitems", ds.Tables["primitems"]);
 | 
			
		||||
| 
						 | 
				
			
			@ -1479,7 +1479,7 @@ namespace OpenSim.Data.SQLite
 | 
			
		|||
            delete.Parameters.Add(createSqliteParameter("itemID", typeof (String)));
 | 
			
		||||
            delete.Connection = conn;
 | 
			
		||||
            da.DeleteCommand = delete;
 | 
			
		||||
        }        
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void setupTerrainCommands(SqliteDataAdapter da, SqliteConnection conn)
 | 
			
		||||
        {
 | 
			
		||||
| 
						 | 
				
			
			@ -1660,7 +1660,7 @@ namespace OpenSim.Data.SQLite
 | 
			
		|||
                    return false;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            // XXX primitems should probably go here eventually
 | 
			
		||||
 | 
			
		||||
            foreach (DataColumn col in createTerrainTable().Columns)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -58,7 +58,7 @@ namespace OpenSim.Data.SQLite
 | 
			
		|||
 | 
			
		||||
        private const string AvatarPickerAndSQL = "select * from users where username like :username and surname like :surname";
 | 
			
		||||
        private const string AvatarPickerOrSQL = "select * from users where username like :username or surname like :surname";
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        private DataSet ds;
 | 
			
		||||
        private SqliteDataAdapter da;
 | 
			
		||||
        private SqliteDataAdapter daf;
 | 
			
		||||
| 
						 | 
				
			
			@ -67,16 +67,16 @@ namespace OpenSim.Data.SQLite
 | 
			
		|||
        override public void Initialise(string connect)
 | 
			
		||||
        {
 | 
			
		||||
            // default to something sensible
 | 
			
		||||
            if (connect == "") 
 | 
			
		||||
            if (connect == "")
 | 
			
		||||
                connect = "URI=file:userprofiles.db,version=3";
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            SqliteConnection conn = new SqliteConnection(connect);
 | 
			
		||||
            TestTables(conn);
 | 
			
		||||
 | 
			
		||||
            // This sucks, but It doesn't seem to work with the dataset Syncing :P
 | 
			
		||||
            g_conn = conn;
 | 
			
		||||
            g_conn.Open();
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            ds = new DataSet();
 | 
			
		||||
            da = new SqliteDataAdapter(new SqliteCommand(userSelect, conn));
 | 
			
		||||
            daf = new SqliteDataAdapter(new SqliteCommand(userFriendsSelect, conn));
 | 
			
		||||
| 
						 | 
				
			
			@ -159,7 +159,7 @@ namespace OpenSim.Data.SQLite
 | 
			
		|||
        override public void AddNewUserFriend(LLUUID friendlistowner, LLUUID friend, uint perms)
 | 
			
		||||
        {
 | 
			
		||||
            string InsertFriends = "insert into userfriends(ownerID, friendID, friendPerms) values(:ownerID, :friendID, :perms)";
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            using (SqliteCommand cmd = new SqliteCommand(InsertFriends, g_conn))
 | 
			
		||||
            {
 | 
			
		||||
                cmd.Parameters.Add(new SqliteParameter(":ownerID", friendlistowner.UUID.ToString()));
 | 
			
		||||
| 
						 | 
				
			
			@ -228,11 +228,11 @@ namespace OpenSim.Data.SQLite
 | 
			
		|||
                    m_log.Error("[USER DB]: Exception getting friends list for user: " + ex.ToString());
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
             
 | 
			
		||||
 | 
			
		||||
            return returnlist;
 | 
			
		||||
        }
 | 
			
		||||
       
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
| 
						 | 
				
			
			@ -380,9 +380,9 @@ namespace OpenSim.Data.SQLite
 | 
			
		|||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    fillUserRow(row, user);
 | 
			
		||||
                    
 | 
			
		||||
 | 
			
		||||
                }
 | 
			
		||||
                // This is why we're getting the 'logins never log-off'..    because It isn't clearing the 
 | 
			
		||||
                // This is why we're getting the 'logins never log-off'..    because It isn't clearing the
 | 
			
		||||
                // useragents table once the useragent is null
 | 
			
		||||
                //
 | 
			
		||||
                // A database guy should look at this and figure out the best way to clear the useragents table.
 | 
			
		||||
| 
						 | 
				
			
			@ -403,7 +403,7 @@ namespace OpenSim.Data.SQLite
 | 
			
		|||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    // I just added this to help the standalone login situation.  
 | 
			
		||||
                    // I just added this to help the standalone login situation.
 | 
			
		||||
                    //It still needs to be looked at by a Database guy
 | 
			
		||||
                    DataTable ua = ds.Tables["useragents"];
 | 
			
		||||
                    row = ua.Rows.Find(Util.ToRawUuidString(user.ID));
 | 
			
		||||
| 
						 | 
				
			
			@ -480,7 +480,7 @@ namespace OpenSim.Data.SQLite
 | 
			
		|||
 | 
			
		||||
        /// Appearance
 | 
			
		||||
        /// TODO: stubs for now to get us to a compiling state gently
 | 
			
		||||
        // override public AvatarAppearance GetUserAppearance(LLUUID user) 
 | 
			
		||||
        // override public AvatarAppearance GetUserAppearance(LLUUID user)
 | 
			
		||||
        // {
 | 
			
		||||
        //     return new AvatarAppearance();
 | 
			
		||||
        // }
 | 
			
		||||
| 
						 | 
				
			
			@ -494,17 +494,17 @@ namespace OpenSim.Data.SQLite
 | 
			
		|||
        {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        override public void RemoveAttachment(LLUUID user, LLUUID item)
 | 
			
		||||
        {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        override public List<LLUUID> GetAttachments(LLUUID user)
 | 
			
		||||
        {
 | 
			
		||||
            return new List<LLUUID>();
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Returns the name of the storage provider
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -525,13 +525,13 @@ namespace OpenSim.Data.SQLite
 | 
			
		|||
 | 
			
		||||
        /***********************************************************************
 | 
			
		||||
         *
 | 
			
		||||
         *  DataTable creation 
 | 
			
		||||
         *  DataTable creation
 | 
			
		||||
         *
 | 
			
		||||
         **********************************************************************/
 | 
			
		||||
        /***********************************************************************
 | 
			
		||||
         *
 | 
			
		||||
         *  Database Definition Functions
 | 
			
		||||
         * 
 | 
			
		||||
         *
 | 
			
		||||
         *  This should be db agnostic as we define them in ADO.NET terms
 | 
			
		||||
         *
 | 
			
		||||
         **********************************************************************/
 | 
			
		||||
| 
						 | 
				
			
			@ -610,7 +610,7 @@ namespace OpenSim.Data.SQLite
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        /***********************************************************************
 | 
			
		||||
         *  
 | 
			
		||||
         *
 | 
			
		||||
         *  Convert between ADO.NET <=> OpenSim Objects
 | 
			
		||||
         *
 | 
			
		||||
         *  These should be database independant
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -39,7 +39,7 @@ namespace OpenSim.Data.SQLite
 | 
			
		|||
        /***********************************************************************
 | 
			
		||||
         *
 | 
			
		||||
         *  Database Definition Helper Functions
 | 
			
		||||
         * 
 | 
			
		||||
         *
 | 
			
		||||
         *  This should be db agnostic as we define them in ADO.NET terms
 | 
			
		||||
         *
 | 
			
		||||
         **********************************************************************/
 | 
			
		||||
| 
						 | 
				
			
			@ -161,7 +161,7 @@ namespace OpenSim.Data.SQLite
 | 
			
		|||
        /// This is a convenience function that collapses 5 repetitive
 | 
			
		||||
        /// lines for defining SqliteParameters to 2 parameters:
 | 
			
		||||
        /// column name and database type.
 | 
			
		||||
        ///        
 | 
			
		||||
        ///
 | 
			
		||||
        /// It assumes certain conventions like :param as the param
 | 
			
		||||
        /// name to replace in parametrized queries, and that source
 | 
			
		||||
        /// version is always current version, both of which are fine
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -36,11 +36,11 @@ namespace OpenSim.Data
 | 
			
		|||
    public abstract class UserDataBase : IUserData
 | 
			
		||||
    {
 | 
			
		||||
        private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        private Dictionary<LLUUID, AvatarAppearance> aplist = new Dictionary<LLUUID, AvatarAppearance>();
 | 
			
		||||
 | 
			
		||||
        public abstract UserProfileData GetUserByUUID(LLUUID user);
 | 
			
		||||
        public abstract UserProfileData GetUserByName(string fname, string lname);        
 | 
			
		||||
        public abstract UserProfileData GetUserByName(string fname, string lname);
 | 
			
		||||
        public abstract UserAgentData GetAgentByUUID(LLUUID user);
 | 
			
		||||
        public abstract UserAgentData GetAgentByName(string name);
 | 
			
		||||
        public abstract UserAgentData GetAgentByName(string fname, string lname);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -28,7 +28,7 @@
 | 
			
		|||
using System.Reflection;
 | 
			
		||||
using System.Runtime.InteropServices;
 | 
			
		||||
 | 
			
		||||
// General Information about an assembly is controlled through the following 
 | 
			
		||||
// General information about an assembly is controlled through the following
 | 
			
		||||
// set of attributes. Change these attribute values to modify the information
 | 
			
		||||
// associated with an assembly.
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -41,8 +41,8 @@ using System.Runtime.InteropServices;
 | 
			
		|||
[assembly : AssemblyTrademark("")]
 | 
			
		||||
[assembly : AssemblyCulture("")]
 | 
			
		||||
 | 
			
		||||
// Setting ComVisible to false makes the types in this assembly not visible 
 | 
			
		||||
// to COM components.  If you need to access a type in this assembly from 
 | 
			
		||||
// Setting ComVisible to false makes the types in this assembly not visible
 | 
			
		||||
// to COM components.  If you need to access a type in this assembly from
 | 
			
		||||
// COM, set the ComVisible attribute to true on that type.
 | 
			
		||||
 | 
			
		||||
[assembly : ComVisible(false)]
 | 
			
		||||
| 
						 | 
				
			
			@ -54,7 +54,7 @@ using System.Runtime.InteropServices;
 | 
			
		|||
// Version information for an assembly consists of the following four values:
 | 
			
		||||
//
 | 
			
		||||
//      Major Version
 | 
			
		||||
//      Minor Version 
 | 
			
		||||
//      Minor Version
 | 
			
		||||
//      Build Number
 | 
			
		||||
//      Revision
 | 
			
		||||
//
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -38,7 +38,7 @@ using Nini.Config;
 | 
			
		|||
/// Loads assets from the filesystem location.  Not yet a plugin, though it should be.
 | 
			
		||||
/// </summary>
 | 
			
		||||
namespace OpenSim.Framework.AssetLoader.Filesystem
 | 
			
		||||
{ 
 | 
			
		||||
{
 | 
			
		||||
    public class AssetLoaderFileSystem : IAssetLoader
 | 
			
		||||
    {
 | 
			
		||||
        private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
 | 
			
		||||
| 
						 | 
				
			
			@ -63,7 +63,7 @@ namespace OpenSim.Framework.AssetLoader.Filesystem
 | 
			
		|||
 | 
			
		||||
            return asset;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        protected static void LoadAsset(AssetBase info, bool image, string path)
 | 
			
		||||
        {
 | 
			
		||||
            FileInfo fInfo = new FileInfo(path);
 | 
			
		||||
| 
						 | 
				
			
			@ -77,7 +77,7 @@ namespace OpenSim.Framework.AssetLoader.Filesystem
 | 
			
		|||
            info.Data = idata;
 | 
			
		||||
            //info.loaded=true;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        public void ForEachDefaultXmlAsset(Action<AssetBase> action)
 | 
			
		||||
        {
 | 
			
		||||
            string assetSetFilename = Path.Combine(Util.assetsDir(), "AssetSets.xml");
 | 
			
		||||
| 
						 | 
				
			
			@ -91,28 +91,28 @@ namespace OpenSim.Framework.AssetLoader.Filesystem
 | 
			
		|||
            if (File.Exists(assetSetFilename))
 | 
			
		||||
            {
 | 
			
		||||
                string assetSetPath = "ERROR";
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                try
 | 
			
		||||
                {
 | 
			
		||||
                    XmlConfigSource source = new XmlConfigSource(assetSetFilename);
 | 
			
		||||
                    
 | 
			
		||||
 | 
			
		||||
                    for (int i = 0; i < source.Configs.Count; i++)
 | 
			
		||||
                    {
 | 
			
		||||
                        assetSetPath = source.Configs[i].GetString("file", String.Empty);
 | 
			
		||||
                        
 | 
			
		||||
 | 
			
		||||
                        LoadXmlAssetSet(Path.Combine(Util.assetsDir(), assetSetPath), assets);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                catch (XmlException e)
 | 
			
		||||
                {
 | 
			
		||||
                    m_log.ErrorFormat("[ASSETS]: Error loading {0} : {1}", assetSetPath, e);
 | 
			
		||||
                }                
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                m_log.Error("[ASSETS]: Asset set control file assets/AssetSets.xml does not exist!  No assets loaded.");
 | 
			
		||||
            }
 | 
			
		||||
                                        
 | 
			
		||||
 | 
			
		||||
            assets.ForEach(action);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -124,7 +124,7 @@ namespace OpenSim.Framework.AssetLoader.Filesystem
 | 
			
		|||
        protected static void LoadXmlAssetSet(string assetSetPath, List<AssetBase> assets)
 | 
			
		||||
        {
 | 
			
		||||
            m_log.InfoFormat("[ASSETS]: Loading asset set {0}", assetSetPath);
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            if (File.Exists(assetSetPath))
 | 
			
		||||
            {
 | 
			
		||||
                try
 | 
			
		||||
| 
						 | 
				
			
			@ -156,6 +156,6 @@ namespace OpenSim.Framework.AssetLoader.Filesystem
 | 
			
		|||
            {
 | 
			
		||||
                m_log.ErrorFormat("[ASSETS]: Asset set file {0} does not exist!", assetSetPath);
 | 
			
		||||
            }
 | 
			
		||||
        }        
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -56,7 +56,7 @@ namespace OpenSim.Framework
 | 
			
		|||
        public readonly static int SKIRT = 12;
 | 
			
		||||
 | 
			
		||||
        private readonly static int MAX_WEARABLES = 13;
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
        private static LLUUID BODY_ASSET = new LLUUID("66c41e39-38f9-f75a-024e-585989bfab73");
 | 
			
		||||
        private static LLUUID BODY_ITEM = new LLUUID("66c41e39-38f9-f75a-024e-585989bfaba9");
 | 
			
		||||
        private static LLUUID SKIN_ASSET = new LLUUID("77c41e39-38f9-f75a-024e-585989bbabbb");
 | 
			
		||||
| 
						 | 
				
			
			@ -204,7 +204,7 @@ namespace OpenSim.Framework
 | 
			
		|||
            set { m_wearables[SKIRT].AssetID = value; }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void SetDefaultWearables() 
 | 
			
		||||
        public void SetDefaultWearables()
 | 
			
		||||
        {
 | 
			
		||||
            m_wearables[BODY].AssetID = BODY_ASSET;
 | 
			
		||||
            m_wearables[BODY].ItemID = BODY_ITEM;
 | 
			
		||||
| 
						 | 
				
			
			@ -257,7 +257,7 @@ namespace OpenSim.Framework
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="texture"></param>
 | 
			
		||||
        /// <param name="visualParam"></param>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -72,7 +72,7 @@ namespace OpenSim.Framework
 | 
			
		|||
 | 
			
		||||
        public void Remove(uint id)
 | 
			
		||||
        {
 | 
			
		||||
            //m_log.InfoFormat("[CLIENT]: Removing client with code {0}, current count {1}", id, m_clients.Count);            
 | 
			
		||||
            //m_log.InfoFormat("[CLIENT]: Removing client with code {0}, current count {1}", id, m_clients.Count);
 | 
			
		||||
            lock (m_clients)
 | 
			
		||||
            {
 | 
			
		||||
                m_clients.Remove(id);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -40,12 +40,12 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// Manages local cache of assets and their sending to viewers.
 | 
			
		||||
    /// 
 | 
			
		||||
    ///
 | 
			
		||||
    /// This class actually encapsulates two largely separate mechanisms.  One mechanism fetches assets either
 | 
			
		||||
    /// synchronously or async and passes the data back to the requester.  The second mechanism fetches assets and
 | 
			
		||||
    /// sends packetised data directly back to the client.  The only point where they meet is AssetReceived() and
 | 
			
		||||
    /// AssetNotFound(), which means they do share the same asset and texture caches.
 | 
			
		||||
    /// 
 | 
			
		||||
    ///
 | 
			
		||||
    /// TODO  Assets in this cache are effectively immortal (they are never disposed off through old age).
 | 
			
		||||
    /// This is not a huge problem at the moment since other memory use usually dwarfs that used by assets
 | 
			
		||||
    /// but it's something to bear in mind.
 | 
			
		||||
| 
						 | 
				
			
			@ -281,8 +281,8 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Synchronously retreive an asset.  If the asset isn't in the cache, a request will be made to the persistent store to
 | 
			
		||||
        /// load it into the cache.  
 | 
			
		||||
        /// 
 | 
			
		||||
        /// load it into the cache.
 | 
			
		||||
        ///
 | 
			
		||||
        /// XXX We'll keep polling the cache until we get the asset or we exceed
 | 
			
		||||
        /// the allowed number of polls.  This isn't a very good way of doing things since a single thread
 | 
			
		||||
        /// is processing inbound packets, so if the asset server is slow, we could block this for up to
 | 
			
		||||
| 
						 | 
				
			
			@ -431,11 +431,11 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
                        //making a copy of the list is not ideal
 | 
			
		||||
                        //but the old method of locking around this whole block of code was causing a multi-thread lock
 | 
			
		||||
                        //between this and the TextureDownloadModule
 | 
			
		||||
                        //while the localAsset thread running this and trying to send a texture to the callback in the 
 | 
			
		||||
                        //while the localAsset thread running this and trying to send a texture to the callback in the
 | 
			
		||||
                        //texturedownloadmodule , and hitting a lock in there. While the texturedownload thread (which was holding
 | 
			
		||||
                        // the lock in the texturedownload module) was trying to 
 | 
			
		||||
                        // the lock in the texturedownload module) was trying to
 | 
			
		||||
                        //request a new asset and hitting a lock in here on the RequestLists.
 | 
			
		||||
                        
 | 
			
		||||
 | 
			
		||||
                        List<NewAssetRequest> theseRequests = new List<NewAssetRequest>(reqList.Requests);
 | 
			
		||||
                        reqList.Requests.Clear();
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -460,7 +460,7 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
        {
 | 
			
		||||
            // m_log.WarnFormat("[ASSET CACHE]: AssetNotFound for {0}", assetID);
 | 
			
		||||
 | 
			
		||||
            // Notify requesters for this asset 
 | 
			
		||||
            // Notify requesters for this asset
 | 
			
		||||
            AssetRequestsList reqList = null;
 | 
			
		||||
            lock (RequestLists)
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			@ -552,7 +552,7 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
                }
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            //it is in our cache 
 | 
			
		||||
            //it is in our cache
 | 
			
		||||
            AssetInfo asset = Assets[requestID];
 | 
			
		||||
 | 
			
		||||
            // add to the AssetRequests list
 | 
			
		||||
| 
						 | 
				
			
			@ -679,14 +679,14 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
            public byte AssetRequestSource = 2;
 | 
			
		||||
            public byte[] Params = null;
 | 
			
		||||
            //public bool AssetInCache;
 | 
			
		||||
            //public int TimeRequested; 
 | 
			
		||||
            //public int TimeRequested;
 | 
			
		||||
            public int DiscardLevel = -1;
 | 
			
		||||
 | 
			
		||||
            public AssetRequest()
 | 
			
		||||
            {
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        public class AssetInfo : AssetBase
 | 
			
		||||
        {
 | 
			
		||||
            public AssetInfo()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -36,7 +36,7 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
{
 | 
			
		||||
    public abstract class AssetServerBase : IAssetServer
 | 
			
		||||
    {
 | 
			
		||||
        private static readonly ILog m_log 
 | 
			
		||||
        private static readonly ILog m_log
 | 
			
		||||
            = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
 | 
			
		||||
 | 
			
		||||
        protected IAssetReceiver m_receiver;
 | 
			
		||||
| 
						 | 
				
			
			@ -47,12 +47,12 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
 | 
			
		||||
        // Temporarily hardcoded - should be a plugin
 | 
			
		||||
        protected IAssetLoader assetLoader = new AssetLoaderFileSystem();
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        protected abstract void StoreAsset(AssetBase asset);
 | 
			
		||||
        protected abstract void CommitAssets();
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// This method must be implemented by a subclass to retrieve the asset named in the 
 | 
			
		||||
        /// This method must be implemented by a subclass to retrieve the asset named in the
 | 
			
		||||
        /// AssetRequest.  If the asset is not found, null should be returned.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="req"></param>
 | 
			
		||||
| 
						 | 
				
			
			@ -60,7 +60,7 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
        protected abstract AssetBase GetAsset(AssetRequest req);
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Process an asset request.  This method will call GetAsset(AssetRequest req) 
 | 
			
		||||
        /// Process an asset request.  This method will call GetAsset(AssetRequest req)
 | 
			
		||||
        /// on the subclass.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="req"></param>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -36,55 +36,55 @@ using log4net;
 | 
			
		|||
namespace OpenSim.Framework.Communications.Cache
 | 
			
		||||
{
 | 
			
		||||
    internal delegate void AddItemDelegate(InventoryItemBase itemInfo);
 | 
			
		||||
    internal delegate void UpdateItemDelegate(InventoryItemBase itemInfo);    
 | 
			
		||||
    internal delegate void UpdateItemDelegate(InventoryItemBase itemInfo);
 | 
			
		||||
    internal delegate void DeleteItemDelegate(LLUUID itemID);
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    internal delegate void CreateFolderDelegate(string folderName, LLUUID folderID, ushort folderType, LLUUID parentID);
 | 
			
		||||
    internal delegate void MoveFolderDelegate(LLUUID folderID, LLUUID parentID);         
 | 
			
		||||
    internal delegate void MoveFolderDelegate(LLUUID folderID, LLUUID parentID);
 | 
			
		||||
    internal delegate void PurgeFolderDelegate(LLUUID folderID);
 | 
			
		||||
    internal delegate void UpdateFolderDelegate(string name, LLUUID folderID, ushort type, LLUUID parentID);
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    internal delegate void SendInventoryDescendentsDelegate(
 | 
			
		||||
        IClientAPI client, LLUUID folderID, bool fetchFolders, bool fetchItems);
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// Stores user profile and inventory data received from backend services for a particular user.
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    public class CachedUserInfo
 | 
			
		||||
    {
 | 
			
		||||
        private static readonly ILog m_log 
 | 
			
		||||
        private static readonly ILog m_log
 | 
			
		||||
            = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// The comms manager holds references to services (user, grid, inventory, etc.)
 | 
			
		||||
        /// </summary>        
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        private readonly CommunicationsManager m_commsManager;
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        public UserProfileData UserProfile { get { return m_userProfile; } }
 | 
			
		||||
        private readonly UserProfileData m_userProfile;                
 | 
			
		||||
        private readonly UserProfileData m_userProfile;
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Has we received the user's inventory from the inventory service?
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        private bool m_hasInventory;
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Inventory requests waiting for receipt of this user's inventory from the inventory service.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        private readonly IList<IInventoryRequest> m_pendingRequests = new List<IInventoryRequest>();         
 | 
			
		||||
        
 | 
			
		||||
        private readonly IList<IInventoryRequest> m_pendingRequests = new List<IInventoryRequest>();
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Has this user info object yet received its inventory information from the invetnroy service?
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public bool HasInventory { get { return m_hasInventory; } }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        private InventoryFolderImpl m_rootFolder;
 | 
			
		||||
        public InventoryFolderImpl RootFolder { get { return m_rootFolder; } }        
 | 
			
		||||
        
 | 
			
		||||
        public InventoryFolderImpl RootFolder { get { return m_rootFolder; } }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// FIXME: This could be contained within a local variable - it doesn't need to be a field
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        private IDictionary<LLUUID, IList<InventoryFolderImpl>> pendingCategorizationFolders 
 | 
			
		||||
        private IDictionary<LLUUID, IList<InventoryFolderImpl>> pendingCategorizationFolders
 | 
			
		||||
            = new Dictionary<LLUUID, IList<InventoryFolderImpl>>();
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -97,7 +97,7 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
            m_commsManager = commsManager;
 | 
			
		||||
            m_userProfile = userProfile;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// This allows a request to be added to be processed once we receive a user's inventory
 | 
			
		||||
        /// from the inventory service.  If we already have the inventory, the request
 | 
			
		||||
| 
						 | 
				
			
			@ -118,7 +118,7 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Store a folder pending arrival of its parent
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -126,7 +126,7 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
        private void AddPendingFolder(InventoryFolderImpl folder)
 | 
			
		||||
        {
 | 
			
		||||
            LLUUID parentFolderId = folder.ParentID;
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            if (pendingCategorizationFolders.ContainsKey(parentFolderId))
 | 
			
		||||
            {
 | 
			
		||||
                pendingCategorizationFolders[parentFolderId].Add(folder);
 | 
			
		||||
| 
						 | 
				
			
			@ -135,11 +135,11 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
            {
 | 
			
		||||
                IList<InventoryFolderImpl> folders = new List<InventoryFolderImpl>();
 | 
			
		||||
                folders.Add(folder);
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                pendingCategorizationFolders[parentFolderId] = folders;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Add any pending folders which were received before the given folder
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -155,18 +155,18 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
//                    m_log.DebugFormat(
 | 
			
		||||
//                        "[INVENTORY CACHE]: Resolving pending received folder {0} {1} into {2} {3}",
 | 
			
		||||
//                        folder.name, folder.folderID, parent.name, parent.folderID);
 | 
			
		||||
                    
 | 
			
		||||
 | 
			
		||||
                    lock (newFolder.SubFolders)
 | 
			
		||||
                    {
 | 
			
		||||
                        if (!newFolder.SubFolders.ContainsKey(folder.ID))
 | 
			
		||||
                        {
 | 
			
		||||
                            newFolder.SubFolders.Add(folder.ID, folder);
 | 
			
		||||
                        }                    
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Callback invoked when the inventory is received from an async request to the inventory service
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -177,12 +177,12 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
            // FIXME: Exceptions thrown upwards never appear on the console.  Could fix further up if these
 | 
			
		||||
            // are simply being swallowed
 | 
			
		||||
            try
 | 
			
		||||
            {            
 | 
			
		||||
            {
 | 
			
		||||
                foreach (InventoryFolderImpl folder in folders)
 | 
			
		||||
                {
 | 
			
		||||
                    FolderReceive(folder);
 | 
			
		||||
                }
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                foreach (InventoryItemBase item in items)
 | 
			
		||||
                {
 | 
			
		||||
                    ItemReceive(item);
 | 
			
		||||
| 
						 | 
				
			
			@ -191,15 +191,15 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
            catch (Exception e)
 | 
			
		||||
            {
 | 
			
		||||
                m_log.ErrorFormat("[INVENTORY CACHE]: Error processing inventory received from inventory service, {0}", e);
 | 
			
		||||
            } 
 | 
			
		||||
                                    
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // Deal with pending requests
 | 
			
		||||
            lock (m_pendingRequests)
 | 
			
		||||
            {
 | 
			
		||||
                // We're going to change inventory status within the lock to avoid a race condition
 | 
			
		||||
                // where requests are processed after the AddRequest() method has been called.
 | 
			
		||||
                m_hasInventory = true;
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                foreach (IInventoryRequest request in m_pendingRequests)
 | 
			
		||||
                {
 | 
			
		||||
                    request.Execute();
 | 
			
		||||
| 
						 | 
				
			
			@ -215,7 +215,7 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
        private void FolderReceive(InventoryFolderImpl newFolder)
 | 
			
		||||
        {
 | 
			
		||||
//            m_log.DebugFormat(
 | 
			
		||||
//                "[INVENTORY CACHE]: Received folder {0} {1} for user {2}", 
 | 
			
		||||
//                "[INVENTORY CACHE]: Received folder {0} {1} for user {2}",
 | 
			
		||||
//                folderInfo.Name, folderInfo.ID, userID);
 | 
			
		||||
 | 
			
		||||
            if (RootFolder == null)
 | 
			
		||||
| 
						 | 
				
			
			@ -232,7 +232,7 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
            else
 | 
			
		||||
            {
 | 
			
		||||
                InventoryFolderImpl parentFolder = RootFolder.FindFolder(newFolder.ParentID);
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                if (parentFolder != null)
 | 
			
		||||
                {
 | 
			
		||||
                    lock (parentFolder.SubFolders)
 | 
			
		||||
| 
						 | 
				
			
			@ -252,44 +252,44 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    AddPendingFolder(newFolder);
 | 
			
		||||
                }              
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            ResolvePendingFolders(newFolder);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Callback invoked when an item is received from an async request to the inventory service.
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// We're assuming here that items are always received after all the folders
 | 
			
		||||
        /// received.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="folderInfo"></param>        
 | 
			
		||||
        /// <param name="folderInfo"></param>
 | 
			
		||||
        private void ItemReceive(InventoryItemBase itemInfo)
 | 
			
		||||
        {
 | 
			
		||||
//            m_log.DebugFormat(
 | 
			
		||||
//                "[INVENTORY CACHE]: Received item {0} {1} for user {2}", 
 | 
			
		||||
//                "[INVENTORY CACHE]: Received item {0} {1} for user {2}",
 | 
			
		||||
//                itemInfo.Name, itemInfo.ID, userID);
 | 
			
		||||
            InventoryFolderImpl folder = RootFolder.FindFolder(itemInfo.Folder);
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            if (null == folder)
 | 
			
		||||
            {
 | 
			
		||||
                m_log.WarnFormat(
 | 
			
		||||
                    "Received item {0} {1} but its folder {2} does not exist", 
 | 
			
		||||
                    "Received item {0} {1} but its folder {2} does not exist",
 | 
			
		||||
                    itemInfo.Name, itemInfo.ID, itemInfo.Folder);
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            lock (folder.Items)
 | 
			
		||||
            {
 | 
			
		||||
                folder.Items[itemInfo.ID] = itemInfo;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Create a folder in this agent's inventory.  
 | 
			
		||||
        /// 
 | 
			
		||||
        /// Create a folder in this agent's inventory.
 | 
			
		||||
        ///
 | 
			
		||||
        /// If the inventory service has not yet delievered the inventory
 | 
			
		||||
        /// for this user then the request will be queued.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -299,20 +299,20 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
        {
 | 
			
		||||
//            m_log.DebugFormat(
 | 
			
		||||
//                "[AGENT INVENTORY]: Creating inventory folder {0} {1} for {2} {3}", folderID, folderName, remoteClient.Name, remoteClient.AgentId);
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            if (HasInventory)
 | 
			
		||||
            {
 | 
			
		||||
                InventoryFolderImpl parentFolder = RootFolder.FindFolder(parentID);
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                if (null == parentFolder)
 | 
			
		||||
                {
 | 
			
		||||
                    m_log.WarnFormat(
 | 
			
		||||
                        "[AGENT INVENTORY]: Tried to create folder {0} {1} but the parent {2} does not exist",
 | 
			
		||||
                        folderName, folderID, parentID);
 | 
			
		||||
                    
 | 
			
		||||
 | 
			
		||||
                    return false;
 | 
			
		||||
                }
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                InventoryFolderImpl createdFolder = parentFolder.CreateChildFolder(folderID, folderName, folderType);
 | 
			
		||||
 | 
			
		||||
                if (createdFolder != null)
 | 
			
		||||
| 
						 | 
				
			
			@ -324,17 +324,17 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
                    createdBaseFolder.ParentID = createdFolder.ParentID;
 | 
			
		||||
                    createdBaseFolder.Type = createdFolder.Type;
 | 
			
		||||
                    createdBaseFolder.Version = createdFolder.Version;
 | 
			
		||||
                    
 | 
			
		||||
 | 
			
		||||
                    m_commsManager.InventoryService.AddFolder(createdBaseFolder);
 | 
			
		||||
                    
 | 
			
		||||
 | 
			
		||||
                    return true;
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    m_log.WarnFormat(
 | 
			
		||||
                         "[AGENT INVENTORY]: Tried to create folder {0} {1} but the folder already exists", 
 | 
			
		||||
                         "[AGENT INVENTORY]: Tried to create folder {0} {1} but the folder already exists",
 | 
			
		||||
                         folderName, folderID);
 | 
			
		||||
                    
 | 
			
		||||
 | 
			
		||||
                    return false;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -344,22 +344,22 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
                    new InventoryRequest(
 | 
			
		||||
                        Delegate.CreateDelegate(typeof(CreateFolderDelegate), this, "CreateFolder"),
 | 
			
		||||
                        new object[] { folderName, folderID, folderType, parentID }));
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                return true;
 | 
			
		||||
            }   
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Handle a client request to update the inventory folder
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// If the inventory service has not yet delievered the inventory
 | 
			
		||||
        /// for this user then the request will be queued.
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// FIXME: We call add new inventory folder because in the data layer, we happen to use an SQL REPLACE
 | 
			
		||||
        /// so this will work to rename an existing folder.  Needless to say, to rely on this is very confusing,
 | 
			
		||||
        /// and needs to be changed.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// <param name="folderID"></param>
 | 
			
		||||
        /// <param name="type"></param>
 | 
			
		||||
        /// <param name="name"></param>
 | 
			
		||||
| 
						 | 
				
			
			@ -367,7 +367,7 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
        public bool UpdateFolder(string name, LLUUID folderID, ushort type, LLUUID parentID)
 | 
			
		||||
        {
 | 
			
		||||
//            m_log.DebugFormat(
 | 
			
		||||
//                "[AGENT INVENTORY]: Updating inventory folder {0} {1} for {2} {3}", folderID, name, remoteClient.Name, remoteClient.AgentId);            
 | 
			
		||||
//                "[AGENT INVENTORY]: Updating inventory folder {0} {1} for {2} {3}", folderID, name, remoteClient.Name, remoteClient.AgentId);
 | 
			
		||||
 | 
			
		||||
            if (HasInventory)
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			@ -378,7 +378,7 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
                baseFolder.ParentID = parentID;
 | 
			
		||||
                baseFolder.Type = (short) type;
 | 
			
		||||
                baseFolder.Version = RootFolder.Version;
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                m_commsManager.InventoryService.AddFolder(baseFolder);
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
| 
						 | 
				
			
			@ -387,18 +387,18 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
                    new InventoryRequest(
 | 
			
		||||
                        Delegate.CreateDelegate(typeof(UpdateFolderDelegate), this, "UpdateFolder"),
 | 
			
		||||
                        new object[] { name, folderID, type, parentID }));
 | 
			
		||||
            }          
 | 
			
		||||
            
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return true;
 | 
			
		||||
        }      
 | 
			
		||||
        
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Handle an inventory folder move request from the client.
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// If the inventory service has not yet delievered the inventory
 | 
			
		||||
        /// for this user then the request will be queued.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// <param name="folderID"></param>
 | 
			
		||||
        /// <param name="parentID"></param>
 | 
			
		||||
        public bool MoveFolder(LLUUID folderID, LLUUID parentID)
 | 
			
		||||
| 
						 | 
				
			
			@ -413,9 +413,9 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
                baseFolder.Owner = m_userProfile.ID;
 | 
			
		||||
                baseFolder.ID = folderID;
 | 
			
		||||
                baseFolder.ParentID = parentID;
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                m_commsManager.InventoryService.MoveFolder(baseFolder);
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                return true;
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
| 
						 | 
				
			
			@ -424,30 +424,30 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
                    new InventoryRequest(
 | 
			
		||||
                        Delegate.CreateDelegate(typeof(MoveFolderDelegate), this, "MoveFolder"),
 | 
			
		||||
                        new object[] { folderID, parentID }));
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                return true;
 | 
			
		||||
            }        
 | 
			
		||||
        }        
 | 
			
		||||
        
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// This method will delete all the items and folders in the given folder.
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// If the inventory service has not yet delievered the inventory
 | 
			
		||||
        /// for this user then the request will be queued.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// <param name="folderID"></param>
 | 
			
		||||
        public bool PurgeFolder(LLUUID folderID)
 | 
			
		||||
        {
 | 
			
		||||
//            m_log.InfoFormat("[AGENT INVENTORY]: Purging folder {0} for {1} uuid {2}", 
 | 
			
		||||
//            m_log.InfoFormat("[AGENT INVENTORY]: Purging folder {0} for {1} uuid {2}",
 | 
			
		||||
//                folderID, remoteClient.Name, remoteClient.AgentId);
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            if (HasInventory)
 | 
			
		||||
            {
 | 
			
		||||
                InventoryFolderImpl purgedFolder = RootFolder.FindFolder(folderID);
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                if (purgedFolder != null)
 | 
			
		||||
                {                        
 | 
			
		||||
                {
 | 
			
		||||
                    // XXX Nasty - have to create a new object to hold details we already have
 | 
			
		||||
                    InventoryFolderBase purgedBaseFolder = new InventoryFolderBase();
 | 
			
		||||
                    purgedBaseFolder.Owner = purgedFolder.Owner;
 | 
			
		||||
| 
						 | 
				
			
			@ -455,12 +455,12 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
                    purgedBaseFolder.Name = purgedFolder.Name;
 | 
			
		||||
                    purgedBaseFolder.ParentID = purgedFolder.ParentID;
 | 
			
		||||
                    purgedBaseFolder.Type = purgedFolder.Type;
 | 
			
		||||
                    purgedBaseFolder.Version = purgedFolder.Version;                        
 | 
			
		||||
                    
 | 
			
		||||
                    m_commsManager.InventoryService.PurgeFolder(purgedBaseFolder);                                              
 | 
			
		||||
                    
 | 
			
		||||
                    purgedBaseFolder.Version = purgedFolder.Version;
 | 
			
		||||
 | 
			
		||||
                    m_commsManager.InventoryService.PurgeFolder(purgedBaseFolder);
 | 
			
		||||
 | 
			
		||||
                    purgedFolder.Purge();
 | 
			
		||||
                    
 | 
			
		||||
 | 
			
		||||
                    return true;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -470,12 +470,12 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
                    new InventoryRequest(
 | 
			
		||||
                        Delegate.CreateDelegate(typeof(PurgeFolderDelegate), this, "PurgeFolder"),
 | 
			
		||||
                        new object[] { folderID }));
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                return true;
 | 
			
		||||
            }           
 | 
			
		||||
            
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return false;
 | 
			
		||||
        }        
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Add an item to the user's inventory
 | 
			
		||||
| 
						 | 
				
			
			@ -494,7 +494,7 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
                    new InventoryRequest(
 | 
			
		||||
                        Delegate.CreateDelegate(typeof(AddItemDelegate), this, "AddItem"),
 | 
			
		||||
                        new object[] { item }));
 | 
			
		||||
            }            
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -514,18 +514,18 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
                    new InventoryRequest(
 | 
			
		||||
                        Delegate.CreateDelegate(typeof(UpdateItemDelegate), this, "UpdateItem"),
 | 
			
		||||
                        new object[] { item }));
 | 
			
		||||
            }              
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Delete an item from the user's inventory
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// If the inventory service has not yet delievered the inventory
 | 
			
		||||
        /// for this user then the request will be queued.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="itemID"></param>
 | 
			
		||||
        /// <returns>
 | 
			
		||||
        /// true on a successful delete or a if the request is queued.  
 | 
			
		||||
        /// true on a successful delete or a if the request is queued.
 | 
			
		||||
        /// Returns false on an immediate failure
 | 
			
		||||
        /// </returns>
 | 
			
		||||
        public bool DeleteItem(LLUUID itemID)
 | 
			
		||||
| 
						 | 
				
			
			@ -535,14 +535,14 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
                // XXX For historical reasons (grid comms), we need to retrieve the whole item in order to delete, even though
 | 
			
		||||
                // really only the item id is required.
 | 
			
		||||
                InventoryItemBase item = RootFolder.FindItem(itemID);
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                if (null == item)
 | 
			
		||||
                {
 | 
			
		||||
                    m_log.WarnFormat("[AGENT INVENTORY]: Tried to delete item {0} which does not exist", itemID);
 | 
			
		||||
                    
 | 
			
		||||
 | 
			
		||||
                    return false;
 | 
			
		||||
                }
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                if (RootFolder.DeleteItem(item.ID))
 | 
			
		||||
                {
 | 
			
		||||
                    return m_commsManager.InventoryService.DeleteItem(item);
 | 
			
		||||
| 
						 | 
				
			
			@ -554,13 +554,13 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
                    new InventoryRequest(
 | 
			
		||||
                        Delegate.CreateDelegate(typeof(DeleteItemDelegate), this, "DeleteItem"),
 | 
			
		||||
                        new object[] { itemID }));
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                return true;
 | 
			
		||||
            }              
 | 
			
		||||
            
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Send details of the inventory items and/or folders in a given folder to the client.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -574,13 +574,13 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
            if (HasInventory)
 | 
			
		||||
            {
 | 
			
		||||
                InventoryFolderImpl folder;
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                if ((folder = RootFolder.FindFolder(folderID)) != null)
 | 
			
		||||
                {
 | 
			
		||||
//                            m_log.DebugFormat(
 | 
			
		||||
//                                "[AGENT INVENTORY]: Found folder {0} for client {1}", 
 | 
			
		||||
//                                "[AGENT INVENTORY]: Found folder {0} for client {1}",
 | 
			
		||||
//                                folderID, remoteClient.AgentId);
 | 
			
		||||
                    
 | 
			
		||||
 | 
			
		||||
                    client.SendInventoryFolderDetails(
 | 
			
		||||
                        client.AgentId, folderID, folder.RequestListOfItems(),
 | 
			
		||||
                        folder.RequestListOfFolders(), fetchFolders, fetchItems);
 | 
			
		||||
| 
						 | 
				
			
			@ -592,7 +592,7 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
                    m_log.WarnFormat(
 | 
			
		||||
                        "[AGENT INVENTORY]: Could not find folder {0} requested by user {1} {2}",
 | 
			
		||||
                        folderID, client.Name, client.AgentId);
 | 
			
		||||
                    
 | 
			
		||||
 | 
			
		||||
                    return false;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -604,13 +604,13 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
                        new object[] { client, folderID, fetchFolders, fetchItems }));
 | 
			
		||||
 | 
			
		||||
                return true;
 | 
			
		||||
            }            
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// Should be implemented by callers which require a callback when the user's inventory is received
 | 
			
		||||
    /// </summary>    
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    public interface IInventoryRequest
 | 
			
		||||
    {
 | 
			
		||||
        /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -618,7 +618,7 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
        /// </summary>
 | 
			
		||||
        void Execute();
 | 
			
		||||
    }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// Generic inventory request
 | 
			
		||||
    /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -626,16 +626,16 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
    {
 | 
			
		||||
        private Delegate m_delegate;
 | 
			
		||||
        private Object[] m_args;
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        internal InventoryRequest(Delegate delegat, Object[] args)
 | 
			
		||||
        {
 | 
			
		||||
            m_delegate = delegat; 
 | 
			
		||||
            m_delegate = delegat;
 | 
			
		||||
            m_args = args;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        public void Execute()
 | 
			
		||||
        {
 | 
			
		||||
            m_delegate.DynamicInvoke(m_args);
 | 
			
		||||
        }
 | 
			
		||||
    }      
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -95,9 +95,9 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
                // XmlSerializer xs = new XmlSerializer(typeof(AssetBase));
 | 
			
		||||
                //   xs.Serialize(s, asset);
 | 
			
		||||
                //  RestClient rc = new RestClient(_assetServerUrl);
 | 
			
		||||
                
 | 
			
		||||
                string assetUrl = _assetServerUrl + "/assets/";                
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                string assetUrl = _assetServerUrl + "/assets/";
 | 
			
		||||
 | 
			
		||||
                //rc.AddResourcePath("assets");
 | 
			
		||||
 | 
			
		||||
                // rc.RequestMethod = "POST";
 | 
			
		||||
| 
						 | 
				
			
			@ -105,7 +105,7 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
                //m_log.InfoFormat("[ASSET]: Stored {0}", rc);
 | 
			
		||||
 | 
			
		||||
                m_log.InfoFormat("[GRID ASSET CLIENT]: Sending store request for asset {0}", asset.FullID);
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                RestObjectPoster.BeginPostObject<AssetBase>(assetUrl, asset);
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception e)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -36,7 +36,7 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
    public class InventoryFolderImpl : InventoryFolderBase
 | 
			
		||||
    {
 | 
			
		||||
        //private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        // Fields
 | 
			
		||||
        public Dictionary<LLUUID, InventoryItemBase> Items = new Dictionary<LLUUID, InventoryItemBase>();
 | 
			
		||||
        public Dictionary<LLUUID, InventoryFolderImpl> SubFolders = new Dictionary<LLUUID, InventoryFolderImpl>();
 | 
			
		||||
| 
						 | 
				
			
			@ -82,14 +82,14 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
                    subFold.ParentID = this.ID;
 | 
			
		||||
                    subFold.Owner = Owner;
 | 
			
		||||
                    SubFolders.Add(subFold.ID, subFold);
 | 
			
		||||
                    
 | 
			
		||||
 | 
			
		||||
                    return subFold;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            return null;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Delete all the folders and items in this folder.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -97,9 +97,9 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
        {
 | 
			
		||||
            foreach (InventoryFolderImpl folder in SubFolders.Values)
 | 
			
		||||
            {
 | 
			
		||||
                folder.Purge();                
 | 
			
		||||
                folder.Purge();
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            SubFolders.Clear();
 | 
			
		||||
            Items.Clear();
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -118,20 +118,20 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
                    return Items[itemID];
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            lock (SubFolders)
 | 
			
		||||
            {
 | 
			
		||||
                foreach (InventoryFolderImpl folder in SubFolders.Values)
 | 
			
		||||
                {
 | 
			
		||||
                    InventoryItemBase item = folder.FindItem(itemID);
 | 
			
		||||
                    
 | 
			
		||||
 | 
			
		||||
                    if (item != null)
 | 
			
		||||
                    {
 | 
			
		||||
                        return item;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            return null;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -143,7 +143,7 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
        public bool DeleteItem(LLUUID itemID)
 | 
			
		||||
        {
 | 
			
		||||
            bool found = false;
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            lock (Items)
 | 
			
		||||
            {
 | 
			
		||||
                if (Items.ContainsKey(itemID))
 | 
			
		||||
| 
						 | 
				
			
			@ -152,20 +152,20 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
                    return true;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            lock (SubFolders)
 | 
			
		||||
            {
 | 
			
		||||
                foreach (InventoryFolderImpl folder in SubFolders.Values)
 | 
			
		||||
                {
 | 
			
		||||
                    found = folder.DeleteItem(itemID);
 | 
			
		||||
                    
 | 
			
		||||
 | 
			
		||||
                    if (found == true)
 | 
			
		||||
                    {
 | 
			
		||||
                        break;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            return found;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -175,25 +175,25 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
        /// </summary>
 | 
			
		||||
        /// <returns>The requested folder if it exists, null if it does not.</returns>
 | 
			
		||||
        public InventoryFolderImpl FindFolder(LLUUID folderID)
 | 
			
		||||
        {            
 | 
			
		||||
        {
 | 
			
		||||
            if (folderID == ID)
 | 
			
		||||
            {
 | 
			
		||||
                return this;
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            lock (SubFolders)
 | 
			
		||||
            {
 | 
			
		||||
                foreach (InventoryFolderImpl folder in SubFolders.Values)
 | 
			
		||||
                {
 | 
			
		||||
                    InventoryFolderImpl returnFolder = folder.FindFolder(folderID);
 | 
			
		||||
                    
 | 
			
		||||
 | 
			
		||||
                    if (returnFolder != null)
 | 
			
		||||
                    {
 | 
			
		||||
                        return returnFolder;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            return null;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -203,7 +203,7 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
        public List<InventoryItemBase> RequestListOfItems()
 | 
			
		||||
        {
 | 
			
		||||
            List<InventoryItemBase> itemList = new List<InventoryItemBase>();
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
            lock (Items)
 | 
			
		||||
            {
 | 
			
		||||
                foreach (InventoryItemBase item in Items.Values)
 | 
			
		||||
| 
						 | 
				
			
			@ -211,9 +211,9 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
                    itemList.Add(item);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            //m_log.DebugFormat("[INVENTORY FOLDER IMPL]: Found {0} items", itemList.Count);
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            return itemList;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -221,9 +221,9 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
        /// Return the list of immediate child folders in this folder.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public List<InventoryFolderBase> RequestListOfFolders()
 | 
			
		||||
        {            
 | 
			
		||||
        {
 | 
			
		||||
            List<InventoryFolderBase> folderList = new List<InventoryFolderBase>();
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            lock (SubFolders)
 | 
			
		||||
            {
 | 
			
		||||
                foreach (InventoryFolderBase folder in SubFolders.Values)
 | 
			
		||||
| 
						 | 
				
			
			@ -231,7 +231,7 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
                    folderList.Add(folder);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            return folderList;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -45,34 +45,34 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
        private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
 | 
			
		||||
 | 
			
		||||
        private LLUUID libOwner = new LLUUID("11111111-1111-0000-0000-000100bba000");
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Holds the root library folder and all its descendents.  This is really only used during inventory
 | 
			
		||||
        /// setup so that we don't have to repeatedly search the tree of library folders.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        protected Dictionary<LLUUID, InventoryFolderImpl> libraryFolders 
 | 
			
		||||
        protected Dictionary<LLUUID, InventoryFolderImpl> libraryFolders
 | 
			
		||||
            = new Dictionary<LLUUID, InventoryFolderImpl>();
 | 
			
		||||
 | 
			
		||||
        public LibraryRootFolder()
 | 
			
		||||
        {
 | 
			
		||||
            m_log.Info("[LIBRARY INVENTORY]: Loading library inventory");
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            Owner = libOwner;
 | 
			
		||||
            ID = new LLUUID("00000112-000f-0000-0000-000100bba000");
 | 
			
		||||
            Name = "OpenSim Library";
 | 
			
		||||
            ParentID = LLUUID.Zero;
 | 
			
		||||
            Type = (short) 8;
 | 
			
		||||
            Version = (ushort) 1;
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            libraryFolders.Add(ID, this);
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            LoadLibraries(Path.Combine(Util.inventoryDir(), "Libraries.xml"));
 | 
			
		||||
 | 
			
		||||
            // CreateLibraryItems();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Hardcoded item creation.  Please don't add any more items here - future items should be created 
 | 
			
		||||
        /// Hardcoded item creation.  Please don't add any more items here - future items should be created
 | 
			
		||||
        /// in the xml in the bin/inventory folder.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        ///
 | 
			
		||||
| 
						 | 
				
			
			@ -132,7 +132,7 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
            item.NextPermissions = 0x7FFFFFFF;
 | 
			
		||||
            return item;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Use the asset set information at path to load assets
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -142,49 +142,49 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
        {
 | 
			
		||||
            m_log.InfoFormat(
 | 
			
		||||
                "[LIBRARY INVENTORY]: Loading libraries control file {0}", librariesControlPath);
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            LoadFromFile(librariesControlPath, "Libraries control", ReadLibraryFromConfig);
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Read a library set from config
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="config"></param>
 | 
			
		||||
        protected void ReadLibraryFromConfig(IConfig config)
 | 
			
		||||
        {
 | 
			
		||||
            string foldersPath 
 | 
			
		||||
            string foldersPath
 | 
			
		||||
                = Path.Combine(
 | 
			
		||||
                    Util.inventoryDir(), config.GetString("foldersFile", String.Empty));
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            LoadFromFile(foldersPath, "Library folders", ReadFolderFromConfig);
 | 
			
		||||
            
 | 
			
		||||
            string itemsPath 
 | 
			
		||||
 | 
			
		||||
            string itemsPath
 | 
			
		||||
                = Path.Combine(
 | 
			
		||||
                    Util.inventoryDir(), config.GetString("itemsFile", String.Empty));
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            LoadFromFile(itemsPath, "Library items", ReadItemFromConfig);
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Read a library inventory folder from a loaded configuration
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="source"></param>
 | 
			
		||||
        private void ReadFolderFromConfig(IConfig config)
 | 
			
		||||
        {                        
 | 
			
		||||
        {
 | 
			
		||||
            InventoryFolderImpl folderInfo = new InventoryFolderImpl();
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            folderInfo.ID = new LLUUID(config.GetString("folderID", ID.ToString()));
 | 
			
		||||
            folderInfo.Name = config.GetString("name", "unknown");                
 | 
			
		||||
            folderInfo.Name = config.GetString("name", "unknown");
 | 
			
		||||
            folderInfo.ParentID = new LLUUID(config.GetString("parentFolderID", ID.ToString()));
 | 
			
		||||
            folderInfo.Type = (short)config.GetInt("type", 8);
 | 
			
		||||
            
 | 
			
		||||
            folderInfo.Owner = libOwner;                
 | 
			
		||||
            folderInfo.Version = 1;                
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            folderInfo.Owner = libOwner;
 | 
			
		||||
            folderInfo.Version = 1;
 | 
			
		||||
 | 
			
		||||
            if (libraryFolders.ContainsKey(folderInfo.ParentID))
 | 
			
		||||
            {                
 | 
			
		||||
            {
 | 
			
		||||
                InventoryFolderImpl parentFolder = libraryFolders[folderInfo.ParentID];
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                libraryFolders.Add(folderInfo.ID, folderInfo);
 | 
			
		||||
                parentFolder.SubFolders.Add(folderInfo.ID, folderInfo);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -201,7 +201,7 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
        /// <summary>
 | 
			
		||||
        /// Read a library inventory item metadata from a loaded configuration
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="source"></param>        
 | 
			
		||||
        /// <param name="source"></param>
 | 
			
		||||
        private void ReadItemFromConfig(IConfig config)
 | 
			
		||||
        {
 | 
			
		||||
            InventoryItemBase item = new InventoryItemBase();
 | 
			
		||||
| 
						 | 
				
			
			@ -218,11 +218,11 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
            item.NextPermissions = (uint)config.GetLong("nextPermissions", 0x7FFFFFFF);
 | 
			
		||||
            item.EveryOnePermissions = (uint)config.GetLong("everyonePermissions", 0x7FFFFFFF);
 | 
			
		||||
            item.BasePermissions = (uint)config.GetLong("basePermissions", 0x7FFFFFFF);
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            if (libraryFolders.ContainsKey(item.Folder))
 | 
			
		||||
            {
 | 
			
		||||
                InventoryFolderImpl parentFolder = libraryFolders[item.Folder];
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                parentFolder.Items.Add(item.ID, item);
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
| 
						 | 
				
			
			@ -230,11 +230,11 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
                m_log.WarnFormat(
 | 
			
		||||
                    "[LIBRARY INVENTORY]: Couldn't add item {0} ({1}) since parent folder with ID {2} does not exist!",
 | 
			
		||||
                    item.Name, item.ID, item.Folder);
 | 
			
		||||
            }                
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
                
 | 
			
		||||
        private delegate void ConfigAction(IConfig config);        
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        private delegate void ConfigAction(IConfig config);
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Load the given configuration at a path and perform an action on each Config contained within it
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -242,7 +242,7 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
        /// <param name="fileDescription"></param>
 | 
			
		||||
        /// <param name="action"></param>
 | 
			
		||||
        private static void LoadFromFile(string path, string fileDescription, ConfigAction action)
 | 
			
		||||
        {            
 | 
			
		||||
        {
 | 
			
		||||
            if (File.Exists(path))
 | 
			
		||||
            {
 | 
			
		||||
                try
 | 
			
		||||
| 
						 | 
				
			
			@ -250,21 +250,21 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
                    XmlConfigSource source = new XmlConfigSource(path);
 | 
			
		||||
 | 
			
		||||
                    for (int i = 0; i < source.Configs.Count; i++)
 | 
			
		||||
                    {    
 | 
			
		||||
                    {
 | 
			
		||||
                        action(source.Configs[i]);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                catch (XmlException e)
 | 
			
		||||
                {
 | 
			
		||||
                    m_log.ErrorFormat("[LIBRARY INVENTORY]: Error loading {0} : {1}", path, e);
 | 
			
		||||
                }                
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                m_log.ErrorFormat("[LIBRARY INVENTORY]: {0} file {1} does not exist!", fileDescription, path);
 | 
			
		||||
            }            
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Looks like a simple getter, but is written like this for some consistency with the other Request
 | 
			
		||||
        /// methods in the superclass
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -33,7 +33,7 @@ using libsecondlife;
 | 
			
		|||
using log4net;
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Framework.Communications.Cache
 | 
			
		||||
{            
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// Holds user profile information and retrieves it from backend services.
 | 
			
		||||
    /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -45,7 +45,7 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
        /// The comms manager holds references to services (user, grid, inventory, etc.)
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        private readonly CommunicationsManager m_commsManager;
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Each user has a cached profile.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -84,8 +84,8 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }        
 | 
			
		||||
        
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Remove this user's profile cache.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -103,9 +103,9 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    m_log.ErrorFormat("[USER CACHE]: Tried to remove the profile of user {0}, but this was not in the scene", userID);
 | 
			
		||||
                }               
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -118,14 +118,14 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
        {
 | 
			
		||||
            CachedUserInfo userInfo = GetUserDetails(userID);
 | 
			
		||||
            if (userInfo != null)
 | 
			
		||||
            {            
 | 
			
		||||
            {
 | 
			
		||||
                m_commsManager.InventoryService.RequestInventoryForUser(userID, userInfo.InventoryReceive);
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                m_log.ErrorFormat("[USER CACHE]: RequestInventoryForUser() - user profile for user {0} not found", userID);
 | 
			
		||||
            }
 | 
			
		||||
        }            
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Get the details of the given user.  A caller should try this method first if it isn't sure that
 | 
			
		||||
| 
						 | 
				
			
			@ -151,7 +151,7 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
        /// <param name="parentID"></param>
 | 
			
		||||
        public void HandleCreateInventoryFolder(IClientAPI remoteClient, LLUUID folderID, ushort folderType,
 | 
			
		||||
                                                string folderName, LLUUID parentID)
 | 
			
		||||
        {           
 | 
			
		||||
        {
 | 
			
		||||
            CachedUserInfo userProfile;
 | 
			
		||||
 | 
			
		||||
            if (m_userProfiles.TryGetValue(remoteClient.AgentId, out userProfile))
 | 
			
		||||
| 
						 | 
				
			
			@ -159,21 +159,21 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
                if (!userProfile.CreateFolder(folderName, folderID, folderType, parentID))
 | 
			
		||||
                {
 | 
			
		||||
                    m_log.ErrorFormat(
 | 
			
		||||
                         "[AGENT INVENTORY]: Failed to create folder for user {0} {1}", 
 | 
			
		||||
                         "[AGENT INVENTORY]: Failed to create folder for user {0} {1}",
 | 
			
		||||
                         remoteClient.Name, remoteClient.AgentId);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                m_log.ErrorFormat(
 | 
			
		||||
                    "[AGENT INVENTORY]: Could not find user profile for {0} {1}", 
 | 
			
		||||
                    "[AGENT INVENTORY]: Could not find user profile for {0} {1}",
 | 
			
		||||
                    remoteClient.Name, remoteClient.AgentId);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Handle a client request to update the inventory folder
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// FIXME: We call add new inventory folder because in the data layer, we happen to use an SQL REPLACE
 | 
			
		||||
        /// so this will work to rename an existing folder.  Needless to say, to rely on this is very confusing,
 | 
			
		||||
        /// and needs to be changed.
 | 
			
		||||
| 
						 | 
				
			
			@ -188,7 +188,7 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
        {
 | 
			
		||||
//            m_log.DebugFormat(
 | 
			
		||||
//                "[AGENT INVENTORY]: Updating inventory folder {0} {1} for {2} {3}", folderID, name, remoteClient.Name, remoteClient.AgentId);
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            CachedUserInfo userProfile;
 | 
			
		||||
 | 
			
		||||
            if (m_userProfiles.TryGetValue(remoteClient.AgentId, out userProfile))
 | 
			
		||||
| 
						 | 
				
			
			@ -196,16 +196,16 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
                if (!userProfile.UpdateFolder(name, folderID, type, parentID))
 | 
			
		||||
                {
 | 
			
		||||
                    m_log.ErrorFormat(
 | 
			
		||||
                         "[AGENT INVENTORY]: Failed to update folder for user {0} {1}", 
 | 
			
		||||
                         "[AGENT INVENTORY]: Failed to update folder for user {0} {1}",
 | 
			
		||||
                         remoteClient.Name, remoteClient.AgentId);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                m_log.ErrorFormat(
 | 
			
		||||
                    "[AGENT INVENTORY]: Could not find user profile for {0} {1}", 
 | 
			
		||||
                    "[AGENT INVENTORY]: Could not find user profile for {0} {1}",
 | 
			
		||||
                    remoteClient.Name, remoteClient.AgentId);
 | 
			
		||||
            }            
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -223,16 +223,16 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
                if (!userProfile.MoveFolder(folderID, parentID))
 | 
			
		||||
                {
 | 
			
		||||
                    m_log.ErrorFormat(
 | 
			
		||||
                         "[AGENT INVENTORY]: Failed to move folder for user {0} {1}", 
 | 
			
		||||
                         "[AGENT INVENTORY]: Failed to move folder for user {0} {1}",
 | 
			
		||||
                         remoteClient.Name, remoteClient.AgentId);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                m_log.ErrorFormat(
 | 
			
		||||
                    "[AGENT INVENTORY]: Could not find user profile for {0} {1}", 
 | 
			
		||||
                    "[AGENT INVENTORY]: Could not find user profile for {0} {1}",
 | 
			
		||||
                    remoteClient.Name, remoteClient.AgentId);
 | 
			
		||||
            }           
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -267,14 +267,14 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
            else
 | 
			
		||||
            {
 | 
			
		||||
                m_log.ErrorFormat(
 | 
			
		||||
                    "[AGENT INVENTORY]: Could not find user profile for {0} {1}", 
 | 
			
		||||
                    "[AGENT INVENTORY]: Could not find user profile for {0} {1}",
 | 
			
		||||
                    remoteClient.Name, remoteClient.AgentId);
 | 
			
		||||
            }    
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Handle the caps inventory descendents fetch.
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// Since the folder structure is sent to the client on login, I believe we only need to handle items.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="agentID"></param>
 | 
			
		||||
| 
						 | 
				
			
			@ -288,20 +288,20 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
                                                   bool fetchFolders, bool fetchItems, int sortOrder)
 | 
			
		||||
        {
 | 
			
		||||
//            m_log.DebugFormat(
 | 
			
		||||
//                "[INVENTORY CACHE]: Fetching folders ({0}), items ({1}) from {2} for agent {3}", 
 | 
			
		||||
//                "[INVENTORY CACHE]: Fetching folders ({0}), items ({1}) from {2} for agent {3}",
 | 
			
		||||
//                fetchFolders, fetchItems, folderID, agentID);
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            // FIXME MAYBE: We're not handling sortOrder!
 | 
			
		||||
 | 
			
		||||
            InventoryFolderImpl fold;
 | 
			
		||||
            if ((fold = libraryRoot.FindFolder(folderID)) != null)
 | 
			
		||||
            {
 | 
			
		||||
                return fold.RequestListOfItems();
 | 
			
		||||
            }         
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            CachedUserInfo userProfile;
 | 
			
		||||
            if (m_userProfiles.TryGetValue(agentID, out userProfile))
 | 
			
		||||
            {            
 | 
			
		||||
            {
 | 
			
		||||
                // XXX: When a client crosses into a scene, their entire inventory is fetched
 | 
			
		||||
                // asynchronously.  If the client makes a request before the inventory is received, we need
 | 
			
		||||
                // to give the inventory a chance to come in.
 | 
			
		||||
| 
						 | 
				
			
			@ -315,18 +315,18 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
                    while (attempts++ < 30)
 | 
			
		||||
                    {
 | 
			
		||||
                        m_log.DebugFormat(
 | 
			
		||||
                             "[INVENTORY CACHE]: Poll number {0} for inventory items in folder {1} for user {2}", 
 | 
			
		||||
                             "[INVENTORY CACHE]: Poll number {0} for inventory items in folder {1} for user {2}",
 | 
			
		||||
                             attempts, folderID, agentID);
 | 
			
		||||
                        
 | 
			
		||||
 | 
			
		||||
                        Thread.Sleep(2000);
 | 
			
		||||
                        
 | 
			
		||||
 | 
			
		||||
                        if (userProfile.HasInventory)
 | 
			
		||||
                        {
 | 
			
		||||
                            break;
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }   
 | 
			
		||||
                
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if (userProfile.HasInventory)
 | 
			
		||||
                {
 | 
			
		||||
                    if ((fold = userProfile.RootFolder.FindFolder(folderID)) != null)
 | 
			
		||||
| 
						 | 
				
			
			@ -338,9 +338,9 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
                        m_log.WarnFormat(
 | 
			
		||||
                            "[AGENT INVENTORY]: Could not find folder {0} requested by user {1}",
 | 
			
		||||
                            folderID, agentID);
 | 
			
		||||
                        
 | 
			
		||||
 | 
			
		||||
                        return null;
 | 
			
		||||
                    }                    
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
| 
						 | 
				
			
			@ -352,7 +352,7 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
            else
 | 
			
		||||
            {
 | 
			
		||||
                m_log.ErrorFormat("[AGENT INVENTORY]: Could not find user profile for {0}", agentID);
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
                return null;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -371,16 +371,16 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
                if (!userProfile.PurgeFolder(folderID))
 | 
			
		||||
                {
 | 
			
		||||
                    m_log.ErrorFormat(
 | 
			
		||||
                         "[AGENT INVENTORY]: Failed to purge folder for user {0} {1}", 
 | 
			
		||||
                         "[AGENT INVENTORY]: Failed to purge folder for user {0} {1}",
 | 
			
		||||
                         remoteClient.Name, remoteClient.AgentId);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                m_log.ErrorFormat(
 | 
			
		||||
                    "[AGENT INVENTORY]: Could not find user profile for {0} {1}", 
 | 
			
		||||
                    "[AGENT INVENTORY]: Could not find user profile for {0} {1}",
 | 
			
		||||
                    remoteClient.Name, remoteClient.AgentId);
 | 
			
		||||
            }   
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void HandleFetchInventory(IClientAPI remoteClient, LLUUID itemID, LLUUID ownerID)
 | 
			
		||||
| 
						 | 
				
			
			@ -407,9 +407,9 @@ namespace OpenSim.Framework.Communications.Cache
 | 
			
		|||
            else
 | 
			
		||||
            {
 | 
			
		||||
                m_log.ErrorFormat(
 | 
			
		||||
                    "[AGENT INVENTORY]: Could not find user profile for {0} {1}", 
 | 
			
		||||
                    "[AGENT INVENTORY]: Could not find user profile for {0} {1}",
 | 
			
		||||
                    remoteClient.Name, remoteClient.AgentId);
 | 
			
		||||
            }            
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -64,16 +64,16 @@ namespace OpenSim.Framework.Communications.Capabilities
 | 
			
		|||
 | 
			
		||||
    public class Caps
 | 
			
		||||
    {
 | 
			
		||||
        private static readonly ILog m_log = 
 | 
			
		||||
        private static readonly ILog m_log =
 | 
			
		||||
            LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        private string m_httpListenerHostName;
 | 
			
		||||
        private uint m_httpListenPort;
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// This is the uuid portion of every CAPS path.  It is used to make capability urls private to the requester.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        private string m_capsObjectPath;        
 | 
			
		||||
        private string m_capsObjectPath;
 | 
			
		||||
        public string CapsObjectPath { get { return m_capsObjectPath; } }
 | 
			
		||||
 | 
			
		||||
        private CapsHandlers m_capsHandlers;
 | 
			
		||||
| 
						 | 
				
			
			@ -88,7 +88,7 @@ namespace OpenSim.Framework.Communications.Capabilities
 | 
			
		|||
 | 
			
		||||
        // The following two entries are in a module, however, there also here so that we don't re-assign
 | 
			
		||||
        // the path to another cap by mistake.
 | 
			
		||||
        private static readonly string m_parcelVoiceInfoRequestPath = "0007/"; // This is in a module. 
 | 
			
		||||
        private static readonly string m_parcelVoiceInfoRequestPath = "0007/"; // This is in a module.
 | 
			
		||||
        private static readonly string m_provisionVoiceAccountRequestPath = "0008/";// This is in a module.
 | 
			
		||||
 | 
			
		||||
        //private string eventQueue = "0100/";
 | 
			
		||||
| 
						 | 
				
			
			@ -100,7 +100,7 @@ namespace OpenSim.Framework.Communications.Capabilities
 | 
			
		|||
        private bool m_dumpAssetsToFile;
 | 
			
		||||
        private string m_regionName;
 | 
			
		||||
 | 
			
		||||
        // These are callbacks which will be setup by the scene so that we can update scene data when we 
 | 
			
		||||
        // These are callbacks which will be setup by the scene so that we can update scene data when we
 | 
			
		||||
        // receive capability calls
 | 
			
		||||
        public NewInventoryItem AddNewInventoryItem = null;
 | 
			
		||||
        public ItemUpdatedCallback ItemUpdatedCall = null;
 | 
			
		||||
| 
						 | 
				
			
			@ -128,46 +128,46 @@ namespace OpenSim.Framework.Communications.Capabilities
 | 
			
		|||
        public void RegisterHandlers()
 | 
			
		||||
        {
 | 
			
		||||
            DeregisterHandlers();
 | 
			
		||||
            
 | 
			
		||||
            string capsBase = "/CAPS/" + m_capsObjectPath;                        
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            string capsBase = "/CAPS/" + m_capsObjectPath;
 | 
			
		||||
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                // the root of all evil
 | 
			
		||||
                m_capsHandlers["SEED"] = new RestStreamHandler("POST", capsBase + m_requestPath, CapsRequest);
 | 
			
		||||
                m_capsHandlers["MapLayer"] = 
 | 
			
		||||
                    new LLSDStreamhandler<LLSDMapRequest, LLSDMapLayerResponse>("POST", 
 | 
			
		||||
                                                                                capsBase + m_mapLayerPath, 
 | 
			
		||||
                m_capsHandlers["MapLayer"] =
 | 
			
		||||
                    new LLSDStreamhandler<LLSDMapRequest, LLSDMapLayerResponse>("POST",
 | 
			
		||||
                                                                                capsBase + m_mapLayerPath,
 | 
			
		||||
                                                                                GetMapLayer);
 | 
			
		||||
                m_capsHandlers["NewFileAgentInventory"] =  
 | 
			
		||||
                m_capsHandlers["NewFileAgentInventory"] =
 | 
			
		||||
                    new LLSDStreamhandler<LLSDAssetUploadRequest, LLSDAssetUploadResponse>("POST",
 | 
			
		||||
                                                                                           capsBase + m_newInventory,
 | 
			
		||||
                                                                                           NewAgentInventoryRequest);
 | 
			
		||||
                m_capsHandlers["UpdateNotecardAgentInventory"] = 
 | 
			
		||||
                m_capsHandlers["UpdateNotecardAgentInventory"] =
 | 
			
		||||
                    new RestStreamHandler("POST", capsBase + m_notecardUpdatePath, NoteCardAgentInventory);
 | 
			
		||||
                m_capsHandlers["UpdateScriptAgentInventory"] = m_capsHandlers["UpdateNotecardAgentInventory"];
 | 
			
		||||
                m_capsHandlers["UpdateScriptTaskInventory"] = 
 | 
			
		||||
                m_capsHandlers["UpdateScriptTaskInventory"] =
 | 
			
		||||
                    new RestStreamHandler("POST", capsBase + m_notecardTaskUpdatePath, ScriptTaskInventory);
 | 
			
		||||
                
 | 
			
		||||
                // justincc: I've disabled the CAPS service for now to fix problems with selecting textures, and 
 | 
			
		||||
                // subsequent inventory breakage, in the edit object pane (such as mantis 1085).  This requires 
 | 
			
		||||
                // enhancements (probably filling out the folder part of the LLSD reply) to our CAPS service, 
 | 
			
		||||
                // but when I went on the Linden grid, the 
 | 
			
		||||
 | 
			
		||||
                // justincc: I've disabled the CAPS service for now to fix problems with selecting textures, and
 | 
			
		||||
                // subsequent inventory breakage, in the edit object pane (such as mantis 1085).  This requires
 | 
			
		||||
                // enhancements (probably filling out the folder part of the LLSD reply) to our CAPS service,
 | 
			
		||||
                // but when I went on the Linden grid, the
 | 
			
		||||
                // simulators I visited (version 1.21) were, surprisingly, no longer supplying this capability.  Instead,
 | 
			
		||||
                // the 1.19.1.4 client appeared to be happily flowing inventory data over UDP
 | 
			
		||||
                //
 | 
			
		||||
                // This is very probably just a temporary measure - once the CAPS service appears again on the Linden grid 
 | 
			
		||||
                // we will be 
 | 
			
		||||
                // This is very probably just a temporary measure - once the CAPS service appears again on the Linden grid
 | 
			
		||||
                // we will be
 | 
			
		||||
                // able to get the data we need to implement the necessary part of the protocol to fix the issue above.
 | 
			
		||||
//                m_capsHandlers["FetchInventoryDescendents"] = 
 | 
			
		||||
//                m_capsHandlers["FetchInventoryDescendents"] =
 | 
			
		||||
//                    new RestStreamHandler("POST", capsBase + m_fetchInventoryPath, FetchInventoryRequest);
 | 
			
		||||
                
 | 
			
		||||
                // m_capsHandlers["FetchInventoryDescendents"] = 
 | 
			
		||||
 | 
			
		||||
                // m_capsHandlers["FetchInventoryDescendents"] =
 | 
			
		||||
                //     new LLSDStreamhandler<LLSDFetchInventoryDescendents, LLSDInventoryDescendents>("POST",
 | 
			
		||||
                //                                                                                    capsBase + m_fetchInventory,
 | 
			
		||||
                //                                                                                    FetchInventory));
 | 
			
		||||
                // m_capsHandlers["RequestTextureDownload"] = new RestStreamHandler("POST",
 | 
			
		||||
                //                                                                  capsBase + m_requestTexture, 
 | 
			
		||||
                //                                                                  capsBase + m_requestTexture,
 | 
			
		||||
                //                                                                  RequestTexture);
 | 
			
		||||
            }
 | 
			
		||||
            catch (Exception e)
 | 
			
		||||
| 
						 | 
				
			
			@ -181,7 +181,7 @@ namespace OpenSim.Framework.Communications.Capabilities
 | 
			
		|||
        /// </summary>
 | 
			
		||||
        /// <param name="capName"></param>
 | 
			
		||||
        /// <param name="handler"></param>
 | 
			
		||||
        public void RegisterHandler(string capName, IRequestHandler handler) 
 | 
			
		||||
        public void RegisterHandler(string capName, IRequestHandler handler)
 | 
			
		||||
        {
 | 
			
		||||
            m_capsHandlers[capName] = handler;
 | 
			
		||||
            m_log.DebugFormat("[CAPS]: Registering handler for \"{0}\": path {1}", capName, handler.Path);
 | 
			
		||||
| 
						 | 
				
			
			@ -189,14 +189,14 @@ namespace OpenSim.Framework.Communications.Capabilities
 | 
			
		|||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Remove all CAPS service handlers.
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="httpListener"></param>
 | 
			
		||||
        /// <param name="path"></param>
 | 
			
		||||
        /// <param name="restMethod"></param>
 | 
			
		||||
        public void DeregisterHandlers()
 | 
			
		||||
        {
 | 
			
		||||
            foreach (string capsName in m_capsHandlers.Caps) 
 | 
			
		||||
            foreach (string capsName in m_capsHandlers.Caps)
 | 
			
		||||
            {
 | 
			
		||||
                m_capsHandlers.Remove(capsName);
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -220,7 +220,7 @@ namespace OpenSim.Framework.Communications.Capabilities
 | 
			
		|||
 | 
			
		||||
        // FIXME: these all should probably go into the respective region
 | 
			
		||||
        // modules
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Processes a fetch inventory request and sends the reply
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -229,7 +229,7 @@ namespace OpenSim.Framework.Communications.Capabilities
 | 
			
		|||
        /// <param name="path"></param>
 | 
			
		||||
        /// <param name="param"></param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        // Request is like: 
 | 
			
		||||
        // Request is like:
 | 
			
		||||
        //<llsd>
 | 
			
		||||
        //   <map><key>folders</key>
 | 
			
		||||
        //       <array>
 | 
			
		||||
| 
						 | 
				
			
			@ -240,14 +240,14 @@ namespace OpenSim.Framework.Communications.Capabilities
 | 
			
		|||
        //   </map>
 | 
			
		||||
        //</llsd>
 | 
			
		||||
        //
 | 
			
		||||
        // multiple fetch-folder maps are allowed within the larger folders map. 
 | 
			
		||||
        // multiple fetch-folder maps are allowed within the larger folders map.
 | 
			
		||||
        public string FetchInventoryRequest(string request, string path, string param)
 | 
			
		||||
        {
 | 
			
		||||
            string unmodifiedRequest = request.ToString();
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            //m_log.DebugFormat("[AGENT INVENTORY]: Received CAPS fetch inventory request {0}", unmodifiedRequest);
 | 
			
		||||
            m_log.Debug("[CAPS]: Inventory Request in region: " + m_regionName);
 | 
			
		||||
           
 | 
			
		||||
 | 
			
		||||
            Hashtable hash = new Hashtable();
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			@ -258,7 +258,7 @@ namespace OpenSim.Framework.Communications.Capabilities
 | 
			
		|||
                m_log.Error("[AGENT INVENTORY]: Fetch error: " + pe.Message);
 | 
			
		||||
                m_log.Error("Request: " + request.ToString());
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            ArrayList foldersrequested = (ArrayList)hash["folders"];
 | 
			
		||||
 | 
			
		||||
            string response = "";
 | 
			
		||||
| 
						 | 
				
			
			@ -275,15 +275,15 @@ namespace OpenSim.Framework.Communications.Capabilities
 | 
			
		|||
                inventoryitemstr = LLSDHelpers.SerialiseLLSDReply(reply);
 | 
			
		||||
                inventoryitemstr = inventoryitemstr.Replace("<llsd><map><key>folders</key><array>", "");
 | 
			
		||||
                inventoryitemstr = inventoryitemstr.Replace("</array></map></llsd>", "");
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                response += inventoryitemstr;
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            if (response.Length == 0)
 | 
			
		||||
            {
 | 
			
		||||
                // Ter-guess: If requests fail a lot, the client seems to stop requesting descendants.
 | 
			
		||||
                // Therefore, I'm concluding that the client only has so many threads available to do requests
 | 
			
		||||
                // and when a thread stalls..   is stays stalled.  
 | 
			
		||||
                // and when a thread stalls..   is stays stalled.
 | 
			
		||||
                // Therefore we need to return something valid
 | 
			
		||||
                response = "<llsd><map><key>folders</key><array /></map></llsd>";
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -291,7 +291,7 @@ namespace OpenSim.Framework.Communications.Capabilities
 | 
			
		|||
            {
 | 
			
		||||
                response = "<llsd><map><key>folders</key><array>" + response + "</array></map></llsd>";
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            //m_log.DebugFormat("[AGENT INVENTORY]: Replying to CAPS fetch inventory request with following xml");
 | 
			
		||||
            //m_log.Debug(Util.GetFormattedXml(response));
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -310,7 +310,7 @@ namespace OpenSim.Framework.Communications.Capabilities
 | 
			
		|||
            contents.agent___id = m_agentID;
 | 
			
		||||
            contents.owner___id =  invFetch.owner_id;
 | 
			
		||||
            contents.folder___id = invFetch.folder_id;
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            // The version number being sent back was originally 1.
 | 
			
		||||
            // Unfortunately, on 1.19.1.4, this means that we see a problem where on subsequent logins
 | 
			
		||||
            // without clearing client cache, objects in the root folder disappear until the cache is cleared,
 | 
			
		||||
| 
						 | 
				
			
			@ -318,8 +318,8 @@ namespace OpenSim.Framework.Communications.Capabilities
 | 
			
		|||
            //
 | 
			
		||||
            // Seeing the version to something other than 0 may be the right thing to do, but there is
 | 
			
		||||
            // a greater subtlety of the second life protocol that needs to be understood first.
 | 
			
		||||
            contents.version = 0;            
 | 
			
		||||
            
 | 
			
		||||
            contents.version = 0;
 | 
			
		||||
 | 
			
		||||
            contents.descendents = 0;
 | 
			
		||||
            reply.folders.Array.Add(contents);
 | 
			
		||||
            List<InventoryItemBase> itemList = null;
 | 
			
		||||
| 
						 | 
				
			
			@ -327,7 +327,7 @@ namespace OpenSim.Framework.Communications.Capabilities
 | 
			
		|||
            {
 | 
			
		||||
                itemList = CAPSFetchInventoryDescendents(m_agentID, invFetch.folder_id, invFetch.owner_id, invFetch.fetch_folders, invFetch.fetch_items, invFetch.sort_order);
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            if (itemList != null)
 | 
			
		||||
            {
 | 
			
		||||
                foreach (InventoryItemBase invItem in itemList)
 | 
			
		||||
| 
						 | 
				
			
			@ -336,12 +336,12 @@ namespace OpenSim.Framework.Communications.Capabilities
 | 
			
		|||
                }
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {                
 | 
			
		||||
            {
 | 
			
		||||
                IClientAPI client = GetClient(m_agentID);
 | 
			
		||||
                    
 | 
			
		||||
                // We're going to both notify the client of inventory service failure and send back a 'no folder contents' response.  
 | 
			
		||||
 | 
			
		||||
                // We're going to both notify the client of inventory service failure and send back a 'no folder contents' response.
 | 
			
		||||
                // If we don't send back the response,
 | 
			
		||||
                // the client becomes unhappy (see Teravus' comment in FetchInventoryRequest())                
 | 
			
		||||
                // the client becomes unhappy (see Teravus' comment in FetchInventoryRequest())
 | 
			
		||||
                if (client != null)
 | 
			
		||||
                {
 | 
			
		||||
                    client.SendAgentAlertMessage(
 | 
			
		||||
| 
						 | 
				
			
			@ -351,11 +351,11 @@ namespace OpenSim.Framework.Communications.Capabilities
 | 
			
		|||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    m_log.ErrorFormat(
 | 
			
		||||
                        "[AGENT INVENTORY]: Could not lookup controlling client for {0} in order to notify them of the inventory service failure", 
 | 
			
		||||
                        "[AGENT INVENTORY]: Could not lookup controlling client for {0} in order to notify them of the inventory service failure",
 | 
			
		||||
                        m_agentID);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            contents.descendents = contents.items.Array.Count;
 | 
			
		||||
            return reply;
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -375,7 +375,7 @@ namespace OpenSim.Framework.Communications.Capabilities
 | 
			
		|||
            llsdItem.item_id = invItem.ID;
 | 
			
		||||
            llsdItem.name = invItem.Name;
 | 
			
		||||
            llsdItem.parent_id = invItem.Folder;
 | 
			
		||||
            llsdItem.type = Enum.GetName(typeof(AssetType), invItem.AssetType).ToLower();                                
 | 
			
		||||
            llsdItem.type = Enum.GetName(typeof(AssetType), invItem.AssetType).ToLower();
 | 
			
		||||
            llsdItem.inv_type = Enum.GetName(typeof(InventoryType), invItem.InvType).ToLower();
 | 
			
		||||
            llsdItem.permissions = new LLSDPermissions();
 | 
			
		||||
            llsdItem.permissions.creator_id = invItem.Creator;
 | 
			
		||||
| 
						 | 
				
			
			@ -395,7 +395,7 @@ namespace OpenSim.Framework.Communications.Capabilities
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="mapReq"></param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
| 
						 | 
				
			
			@ -408,7 +408,7 @@ namespace OpenSim.Framework.Communications.Capabilities
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        protected static LLSDMapLayer GetLLSDMapLayerResponse()
 | 
			
		||||
| 
						 | 
				
			
			@ -421,7 +421,7 @@ namespace OpenSim.Framework.Communications.Capabilities
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="request"></param>
 | 
			
		||||
        /// <param name="path"></param>
 | 
			
		||||
| 
						 | 
				
			
			@ -437,7 +437,7 @@ namespace OpenSim.Framework.Communications.Capabilities
 | 
			
		|||
        #region EventQueue (Currently not enabled)
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="request"></param>
 | 
			
		||||
        /// <param name="path"></param>
 | 
			
		||||
| 
						 | 
				
			
			@ -463,7 +463,7 @@ namespace OpenSim.Framework.Communications.Capabilities
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="caps"></param>
 | 
			
		||||
        /// <param name="ipAddressPort"></param>
 | 
			
		||||
| 
						 | 
				
			
			@ -482,7 +482,7 @@ namespace OpenSim.Framework.Communications.Capabilities
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        public string CreateEmptyEventResponse()
 | 
			
		||||
| 
						 | 
				
			
			@ -590,7 +590,7 @@ namespace OpenSim.Framework.Communications.Capabilities
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="llsdRequest"></param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
| 
						 | 
				
			
			@ -622,7 +622,7 @@ namespace OpenSim.Framework.Communications.Capabilities
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="assetID"></param>
 | 
			
		||||
        /// <param name="inventoryItem"></param>
 | 
			
		||||
| 
						 | 
				
			
			@ -708,7 +708,7 @@ namespace OpenSim.Framework.Communications.Capabilities
 | 
			
		|||
        /// <param name="itemID">Item to update</param>
 | 
			
		||||
        /// <param name="primID">Prim containing item to update</param>
 | 
			
		||||
        /// <param name="isScriptRunning">Signals whether the script to update is currently running</param>
 | 
			
		||||
        /// <param name="data">New asset data</param>        
 | 
			
		||||
        /// <param name="data">New asset data</param>
 | 
			
		||||
        public void TaskScriptUpdated(LLUUID itemID, LLUUID primID, bool isScriptRunning, byte[] data)
 | 
			
		||||
        {
 | 
			
		||||
            if (TaskScriptUpdatedCall != null)
 | 
			
		||||
| 
						 | 
				
			
			@ -751,7 +751,7 @@ namespace OpenSim.Framework.Communications.Capabilities
 | 
			
		|||
            }
 | 
			
		||||
 | 
			
		||||
            /// <summary>
 | 
			
		||||
            /// 
 | 
			
		||||
            ///
 | 
			
		||||
            /// </summary>
 | 
			
		||||
            /// <param name="data"></param>
 | 
			
		||||
            /// <param name="path"></param>
 | 
			
		||||
| 
						 | 
				
			
			@ -807,7 +807,7 @@ namespace OpenSim.Framework.Communications.Capabilities
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// This class is a callback invoked when a client sends asset data to 
 | 
			
		||||
        /// This class is a callback invoked when a client sends asset data to
 | 
			
		||||
        /// an agent inventory notecard update url
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public class ItemUpdater
 | 
			
		||||
| 
						 | 
				
			
			@ -831,7 +831,7 @@ namespace OpenSim.Framework.Communications.Capabilities
 | 
			
		|||
            }
 | 
			
		||||
 | 
			
		||||
            /// <summary>
 | 
			
		||||
            /// 
 | 
			
		||||
            ///
 | 
			
		||||
            /// </summary>
 | 
			
		||||
            /// <param name="data"></param>
 | 
			
		||||
            /// <param name="path"></param>
 | 
			
		||||
| 
						 | 
				
			
			@ -889,7 +889,7 @@ namespace OpenSim.Framework.Communications.Capabilities
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// This class is a callback invoked when a client sends asset data to 
 | 
			
		||||
        /// This class is a callback invoked when a client sends asset data to
 | 
			
		||||
        /// a task inventory script update url
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public class TaskInventoryScriptUpdater
 | 
			
		||||
| 
						 | 
				
			
			@ -921,7 +921,7 @@ namespace OpenSim.Framework.Communications.Capabilities
 | 
			
		|||
            }
 | 
			
		||||
 | 
			
		||||
            /// <summary>
 | 
			
		||||
            /// 
 | 
			
		||||
            ///
 | 
			
		||||
            /// </summary>
 | 
			
		||||
            /// <param name="data"></param>
 | 
			
		||||
            /// <param name="path"></param>
 | 
			
		||||
| 
						 | 
				
			
			@ -931,7 +931,7 @@ namespace OpenSim.Framework.Communications.Capabilities
 | 
			
		|||
            {
 | 
			
		||||
                try
 | 
			
		||||
                {
 | 
			
		||||
//                    m_log.InfoFormat("[CAPS]: " + 
 | 
			
		||||
//                    m_log.InfoFormat("[CAPS]: " +
 | 
			
		||||
//                                     "TaskInventoryScriptUpdater received data: {0}, path: {1}, param: {2}",
 | 
			
		||||
//                                     data, path, param));
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -64,14 +64,14 @@ namespace OpenSim.Framework.Communications.Capabilities
 | 
			
		|||
        /// </summary>
 | 
			
		||||
        /// <param name="capsName">name of the capability of the cap
 | 
			
		||||
        /// handler to be removed</param>
 | 
			
		||||
        public void Remove(string capsName) 
 | 
			
		||||
        public void Remove(string capsName)
 | 
			
		||||
        {
 | 
			
		||||
            // This line must be here, or caps will break!
 | 
			
		||||
            m_httpListener.RemoveStreamHandler("POST", m_capsHandlers[capsName].Path);
 | 
			
		||||
            m_capsHandlers.Remove(capsName);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public bool ContainsCap(string cap) 
 | 
			
		||||
        public bool ContainsCap(string cap)
 | 
			
		||||
        {
 | 
			
		||||
            return m_capsHandlers.ContainsKey(cap);
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -85,14 +85,14 @@ namespace OpenSim.Framework.Communications.Capabilities
 | 
			
		|||
        /// retrieve a cap handler for a cap that is not contained in
 | 
			
		||||
        /// CapsHandlers.
 | 
			
		||||
        /// </Remarks>
 | 
			
		||||
        public IRequestHandler this[string idx] 
 | 
			
		||||
        public IRequestHandler this[string idx]
 | 
			
		||||
        {
 | 
			
		||||
            get 
 | 
			
		||||
            get
 | 
			
		||||
            {
 | 
			
		||||
                return m_capsHandlers[idx];
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            set 
 | 
			
		||||
            set
 | 
			
		||||
            {
 | 
			
		||||
                if (m_capsHandlers.ContainsKey(idx))
 | 
			
		||||
                {
 | 
			
		||||
| 
						 | 
				
			
			@ -111,9 +111,9 @@ namespace OpenSim.Framework.Communications.Capabilities
 | 
			
		|||
        /// Return the list of cap names for which this CapsHandlers
 | 
			
		||||
        /// object contains cap handlers.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public string[] Caps 
 | 
			
		||||
        public string[] Caps
 | 
			
		||||
        {
 | 
			
		||||
            get 
 | 
			
		||||
            get
 | 
			
		||||
            {
 | 
			
		||||
                string[] __keys = new string[m_capsHandlers.Keys.Count];
 | 
			
		||||
                m_capsHandlers.Keys.CopyTo(__keys, 0);
 | 
			
		||||
| 
						 | 
				
			
			@ -125,7 +125,7 @@ namespace OpenSim.Framework.Communications.Capabilities
 | 
			
		|||
        /// Return an LLSD-serializable Hashtable describing the
 | 
			
		||||
        /// capabilities and their handler details.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public Hashtable CapsDetails 
 | 
			
		||||
        public Hashtable CapsDetails
 | 
			
		||||
        {
 | 
			
		||||
            get
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -37,12 +37,12 @@ using libsecondlife;
 | 
			
		|||
namespace OpenSim.Framework.Communications.Capabilities
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// Borrowed from (a older version of) libsl for now, as their new llsd code doesn't work we our decoding code. 
 | 
			
		||||
    /// Borrowed from (a older version of) libsl for now, as their new llsd code doesn't work we our decoding code.
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    public static class LLSD
 | 
			
		||||
    {
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public class LLSDParseException : Exception
 | 
			
		||||
        {
 | 
			
		||||
| 
						 | 
				
			
			@ -52,7 +52,7 @@ namespace OpenSim.Framework.Communications.Capabilities
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public class LLSDSerializeException : Exception
 | 
			
		||||
        {
 | 
			
		||||
| 
						 | 
				
			
			@ -62,7 +62,7 @@ namespace OpenSim.Framework.Communications.Capabilities
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="b"></param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
| 
						 | 
				
			
			@ -72,7 +72,7 @@ namespace OpenSim.Framework.Communications.Capabilities
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="st"></param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
| 
						 | 
				
			
			@ -96,7 +96,7 @@ namespace OpenSim.Framework.Communications.Capabilities
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="obj"></param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
| 
						 | 
				
			
			@ -116,7 +116,7 @@ namespace OpenSim.Framework.Communications.Capabilities
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="writer"></param>
 | 
			
		||||
        /// <param name="obj"></param>
 | 
			
		||||
| 
						 | 
				
			
			@ -217,7 +217,7 @@ namespace OpenSim.Framework.Communications.Capabilities
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="reader"></param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
| 
						 | 
				
			
			@ -360,7 +360,7 @@ namespace OpenSim.Framework.Communications.Capabilities
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="reader"></param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
| 
						 | 
				
			
			@ -405,7 +405,7 @@ namespace OpenSim.Framework.Communications.Capabilities
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="reader"></param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
| 
						 | 
				
			
			@ -441,7 +441,7 @@ namespace OpenSim.Framework.Communications.Capabilities
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="count"></param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
| 
						 | 
				
			
			@ -453,7 +453,7 @@ namespace OpenSim.Framework.Communications.Capabilities
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="obj"></param>
 | 
			
		||||
        /// <param name="indent"></param>
 | 
			
		||||
| 
						 | 
				
			
			@ -661,7 +661,7 @@ namespace OpenSim.Framework.Communications.Capabilities
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="reader"></param>
 | 
			
		||||
        private static void SkipWS(XmlTextReader reader)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -35,9 +35,9 @@ namespace OpenSim.Framework.Communications.Capabilities
 | 
			
		|||
{
 | 
			
		||||
    public class LLSDHelpers
 | 
			
		||||
    {
 | 
			
		||||
//        private static readonly log4net.ILog m_log 
 | 
			
		||||
//        private static readonly log4net.ILog m_log
 | 
			
		||||
//            = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        public static string SerialiseLLSDReply(object obj)
 | 
			
		||||
        {
 | 
			
		||||
            StringWriter sw = new StringWriter();
 | 
			
		||||
| 
						 | 
				
			
			@ -47,9 +47,9 @@ namespace OpenSim.Framework.Communications.Capabilities
 | 
			
		|||
            SerializeLLSDType(writer, obj);
 | 
			
		||||
            writer.WriteEndElement();
 | 
			
		||||
            writer.Close();
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            //m_log.DebugFormat("[LLSD Helpers]: Generated serialized LLSD reply {0}", sw.ToString());
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            return sw.ToString();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -146,7 +146,7 @@ namespace OpenSim.Framework.Communications.Capabilities
 | 
			
		|||
                                    fieldValue.GetType().GetField("Array").SetValue(fieldValue, enumerator.Value);
 | 
			
		||||
                                    //TODO
 | 
			
		||||
                                    // the LLSD map/array types in the array need to be deserialised
 | 
			
		||||
                                    // but first we need to know the right class to deserialise them into. 
 | 
			
		||||
                                    // but first we need to know the right class to deserialise them into.
 | 
			
		||||
                                }
 | 
			
		||||
                                else
 | 
			
		||||
                                {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -91,7 +91,7 @@ namespace OpenSim.Framework.Communications.Capabilities
 | 
			
		|||
        public int descendents;
 | 
			
		||||
        public LLUUID folder___id; //as LL can't decide if they are going to use "_" or "-" to separate words in the field names
 | 
			
		||||
        public LLSDArray items = new LLSDArray();
 | 
			
		||||
        public LLUUID owner___id; // and of course we can't have field names with "-" in 
 | 
			
		||||
        public LLUUID owner___id; // and of course we can't have field names with "-" in
 | 
			
		||||
        public int version;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -23,7 +23,7 @@
 | 
			
		|||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 | 
			
		||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
* 
 | 
			
		||||
*
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
using System.Collections;
 | 
			
		||||
| 
						 | 
				
			
			@ -41,7 +41,7 @@ namespace OpenSim.Framework.Communications.Capabilities
 | 
			
		|||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public LLSDParcelVoiceInfoResponse(string region, int localID, Hashtable creds) 
 | 
			
		||||
        public LLSDParcelVoiceInfoResponse(string region, int localID, Hashtable creds)
 | 
			
		||||
        {
 | 
			
		||||
            region_name = region;
 | 
			
		||||
            parcel_local_id = localID;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -51,7 +51,7 @@ namespace OpenSim.Framework.Communications.Capabilities
 | 
			
		|||
            //string requestBody = streamReader.ReadToEnd();
 | 
			
		||||
            //streamReader.Close();
 | 
			
		||||
 | 
			
		||||
            // libsecondlife.StructuredData.LLSDMap hash = (libsecondlife.StructuredData.LLSDMap) 
 | 
			
		||||
            // libsecondlife.StructuredData.LLSDMap hash = (libsecondlife.StructuredData.LLSDMap)
 | 
			
		||||
            //    libsecondlife.StructuredData.LLSDParser.DeserializeXml(new XmlTextReader(request));
 | 
			
		||||
 | 
			
		||||
            Hashtable hash = (Hashtable) LLSD.LLSDDeserialize(request);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -34,7 +34,7 @@ namespace OpenSim.Framework.Communications.Capabilities
 | 
			
		|||
    {
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// The task inventory item that was updated
 | 
			
		||||
        /// </summary> 
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public LLUUID item_id;
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -34,17 +34,17 @@ namespace OpenSim.Framework.Communications.Capabilities
 | 
			
		|||
    {
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// The item containing the script to update
 | 
			
		||||
        /// </summary> 
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public LLUUID item_id;
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// The task containing the script
 | 
			
		||||
        /// </summary> 
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public LLUUID task_id;
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Signals whether the script is currently active
 | 
			
		||||
        /// </summary> 
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public int is_script_running;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -23,7 +23,7 @@
 | 
			
		|||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 | 
			
		||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
* 
 | 
			
		||||
*
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Framework.Communications.Capabilities
 | 
			
		||||
| 
						 | 
				
			
			@ -38,7 +38,7 @@ namespace OpenSim.Framework.Communications.Capabilities
 | 
			
		|||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public LLSDVoiceAccountResponse(string user, string pass) 
 | 
			
		||||
        public LLSDVoiceAccountResponse(string user, string pass)
 | 
			
		||||
        {
 | 
			
		||||
            username = user;
 | 
			
		||||
            password = pass;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -236,7 +236,7 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
 | 
			
		||||
        public void UpdateAvatarPropertiesRequest(IClientAPI remote_client, UserProfileData UserProfile)
 | 
			
		||||
        {
 | 
			
		||||
            m_userService.UpdateUserProfileProperties(UserProfile);                
 | 
			
		||||
            m_userService.UpdateUserProfileProperties(UserProfile);
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -112,7 +112,7 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
 | 
			
		||||
        public void EndInvoke()
 | 
			
		||||
        {
 | 
			
		||||
            // This method assumes that only 1 thread calls EndInvoke 
 | 
			
		||||
            // This method assumes that only 1 thread calls EndInvoke
 | 
			
		||||
            if (!IsCompleted)
 | 
			
		||||
            {
 | 
			
		||||
                // If the operation isn't done, wait for it
 | 
			
		||||
| 
						 | 
				
			
			@ -142,7 +142,7 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
            // Save the asynchronous operation's result
 | 
			
		||||
            m_result = result;
 | 
			
		||||
 | 
			
		||||
            // Tell the base class that the operation completed 
 | 
			
		||||
            // Tell the base class that the operation completed
 | 
			
		||||
            // sucessfully (no exception)
 | 
			
		||||
            base.SetAsCompleted(completedSynchronously);
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -43,62 +43,62 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
    public interface IInventoryServices
 | 
			
		||||
    {
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Request the inventory for a user.  This is an asynchronous operation that will call the callback when the 
 | 
			
		||||
        /// Request the inventory for a user.  This is an asynchronous operation that will call the callback when the
 | 
			
		||||
        /// inventory has been received
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="userID"></param>
 | 
			
		||||
        /// <param name="callback"></param>
 | 
			
		||||
        void RequestInventoryForUser(LLUUID userID, InventoryReceiptCallback callback);
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Add a new folder to the user's inventory
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="folder"></param>
 | 
			
		||||
        /// <returns>true if the folder was successfully added</returns>
 | 
			
		||||
        bool AddFolder(InventoryFolderBase folder);
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Move an inventory folder to a new location
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="folder">A folder containing the details of the new location</param>
 | 
			
		||||
        /// <returns>true if the folder was successfully moved</returns>
 | 
			
		||||
        bool MoveFolder(InventoryFolderBase folder);
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Purge an inventory folder of all its items and subfolders.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="folder"></param>
 | 
			
		||||
        /// <returns>true if the folder was successfully purged</returns>
 | 
			
		||||
        bool PurgeFolder(InventoryFolderBase folder);
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Add a new item to the user's inventory
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="item"></param>
 | 
			
		||||
        /// <returns>true if the item was successfully added</returns>
 | 
			
		||||
        bool AddItem(InventoryItemBase item);
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Update an item in the user's inventory
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="item"></param>
 | 
			
		||||
        /// <returns>true if the item was successfully updated</returns>
 | 
			
		||||
        bool UpdateItem(InventoryItemBase item);
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Delete an item from the user's inventory
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="item"></param>
 | 
			
		||||
        /// <returns>true if the item was successfully deleted</returns>
 | 
			
		||||
        bool DeleteItem(InventoryItemBase item);
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Create a new inventory for the given user.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="user"></param>
 | 
			
		||||
        /// <returns>true if the inventory was successfully created, false otherwise</returns>
 | 
			
		||||
        bool CreateNewUserInventory(LLUUID user);
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        bool HasInventoryForUser(LLUUID userID);
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -107,12 +107,12 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
        /// <param name="userID"></param>
 | 
			
		||||
        /// <returns>null if no root folder was found</returns>
 | 
			
		||||
        InventoryFolderBase RequestRootFolder(LLUUID userID);
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Returns a list of all the folders in a given user's inventory.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="userId"></param>
 | 
			
		||||
        /// <returns>A flat list of the user's inventory folder tree,  
 | 
			
		||||
        /// <returns>A flat list of the user's inventory folder tree,
 | 
			
		||||
        /// null if there is no inventory for this user</returns>
 | 
			
		||||
        List<InventoryFolderBase> GetInventorySkeleton(LLUUID userId);
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -37,7 +37,7 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
        /// </summary>
 | 
			
		||||
        /// <param name="fname">First name</param>
 | 
			
		||||
        /// <param name="lname">Last name</param>
 | 
			
		||||
        /// <returns>A user profile.  Returns null if no profile is found</returns>        
 | 
			
		||||
        /// <returns>A user profile.  Returns null if no profile is found</returns>
 | 
			
		||||
        UserProfileData GetUserProfile(string firstName, string lastName);
 | 
			
		||||
 | 
			
		||||
        //UserProfileData GetUserProfile(string name);
 | 
			
		||||
| 
						 | 
				
			
			@ -46,7 +46,7 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
        /// Loads a user profile from a database by UUID
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="uuid">The target UUID</param>
 | 
			
		||||
        /// <returns>A user profile.  Returns null if no user profile is found.</returns>        
 | 
			
		||||
        /// <returns>A user profile.  Returns null if no user profile is found.</returns>
 | 
			
		||||
        UserProfileData GetUserProfile(LLUUID userId);
 | 
			
		||||
 | 
			
		||||
        void clearUserAgent(LLUUID avatarID);
 | 
			
		||||
| 
						 | 
				
			
			@ -57,7 +57,7 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
        UserProfileData SetupMasterUser(LLUUID userId);
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="user"></param>
 | 
			
		||||
        LLUUID AddUserProfile(string firstName, string lastName, string pass, uint regX, uint regY);
 | 
			
		||||
| 
						 | 
				
			
			@ -110,7 +110,7 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
        List<FriendListItem> GetUserFriendList(LLUUID friendlistowner);
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Get's the User Appearance 
 | 
			
		||||
        /// Get's the User Appearance
 | 
			
		||||
        AvatarAppearance GetUserAppearance(LLUUID user);
 | 
			
		||||
 | 
			
		||||
        void UpdateUserAppearance(LLUUID user, AvatarAppearance appearance);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -40,13 +40,13 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
    /// </summary>
 | 
			
		||||
    public abstract class InventoryServiceBase : IInventoryServices
 | 
			
		||||
    {
 | 
			
		||||
        private static readonly ILog m_log 
 | 
			
		||||
        private static readonly ILog m_log
 | 
			
		||||
            = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
 | 
			
		||||
 | 
			
		||||
        protected Dictionary<string, IInventoryData> m_plugins = new Dictionary<string, IInventoryData>();
 | 
			
		||||
 | 
			
		||||
        #region Plugin methods
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Adds a new user server plugin - plugins will be requested in the order they were loaded.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -76,42 +76,42 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
        
 | 
			
		||||
        #region IInventoryServices methods        
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        #region IInventoryServices methods
 | 
			
		||||
 | 
			
		||||
        // See IInventoryServices
 | 
			
		||||
        public List<InventoryFolderBase> GetInventorySkeleton(LLUUID userId)
 | 
			
		||||
        {
 | 
			
		||||
//            m_log.DebugFormat("[AGENT INVENTORY]: Getting inventory skeleton for {0}", userId);
 | 
			
		||||
                                            
 | 
			
		||||
 | 
			
		||||
            InventoryFolderBase rootFolder = RequestRootFolder(userId);
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            // Agent has no inventory structure yet.
 | 
			
		||||
            if (null == rootFolder)
 | 
			
		||||
            {
 | 
			
		||||
                return null;                    
 | 
			
		||||
            }            
 | 
			
		||||
            
 | 
			
		||||
            List<InventoryFolderBase> userFolders = new List<InventoryFolderBase>();                        
 | 
			
		||||
            
 | 
			
		||||
                return null;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            List<InventoryFolderBase> userFolders = new List<InventoryFolderBase>();
 | 
			
		||||
 | 
			
		||||
            userFolders.Add(rootFolder);
 | 
			
		||||
                         
 | 
			
		||||
 | 
			
		||||
            foreach (KeyValuePair<string, IInventoryData> plugin in m_plugins)
 | 
			
		||||
            {
 | 
			
		||||
                IList<InventoryFolderBase> folders = plugin.Value.getFolderHierarchy(rootFolder.ID);
 | 
			
		||||
                userFolders.AddRange(folders);
 | 
			
		||||
            }    
 | 
			
		||||
            
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
//            foreach (InventoryFolderBase folder in userFolders)
 | 
			
		||||
//            {
 | 
			
		||||
//                m_log.DebugFormat("[AGENT INVENTORY]: Got folder {0} {1}", folder.name, folder.folderID);
 | 
			
		||||
//            }
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            return userFolders;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        // See IInventoryServices
 | 
			
		||||
        public virtual bool HasInventoryForUser(LLUUID userID)
 | 
			
		||||
        {
 | 
			
		||||
| 
						 | 
				
			
			@ -133,31 +133,31 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
        public bool CreateNewUserInventory(LLUUID user)
 | 
			
		||||
        {
 | 
			
		||||
            InventoryFolderBase existingRootFolder = RequestRootFolder(user);
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            if (null != existingRootFolder)
 | 
			
		||||
            {
 | 
			
		||||
                m_log.WarnFormat(
 | 
			
		||||
                    "[AGENT INVENTORY]: Did not create a new inventory for user {0} since they already have "
 | 
			
		||||
                    + "a root inventory folder with id {1}", 
 | 
			
		||||
                    + "a root inventory folder with id {1}",
 | 
			
		||||
                    user, existingRootFolder.ID);
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {                
 | 
			
		||||
            {
 | 
			
		||||
                UsersInventory inven = new UsersInventory();
 | 
			
		||||
                inven.CreateNewInventorySet(user);
 | 
			
		||||
                AddNewInventorySet(inven);
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                return true;
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            return false;
 | 
			
		||||
        }      
 | 
			
		||||
        
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // See IInventoryServices
 | 
			
		||||
        public abstract void RequestInventoryForUser(LLUUID userID, InventoryReceiptCallback callback);       
 | 
			
		||||
        
 | 
			
		||||
        public abstract void RequestInventoryForUser(LLUUID userID, InventoryReceiptCallback callback);
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        #region Methods used by GridInventoryService
 | 
			
		||||
 | 
			
		||||
        public List<InventoryFolderBase> RequestSubFolders(LLUUID parentFolderID)
 | 
			
		||||
| 
						 | 
				
			
			@ -180,21 +180,21 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
            }
 | 
			
		||||
            return itemsList;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        // See IInventoryServices
 | 
			
		||||
        public bool AddFolder(InventoryFolderBase folder)
 | 
			
		||||
        {
 | 
			
		||||
            m_log.DebugFormat(
 | 
			
		||||
                "[AGENT INVENTORY]: Adding folder {0} {1} to folder {2}", folder.Name, folder.ID, folder.ParentID);            
 | 
			
		||||
            
 | 
			
		||||
                "[AGENT INVENTORY]: Adding folder {0} {1} to folder {2}", folder.Name, folder.ID, folder.ParentID);
 | 
			
		||||
 | 
			
		||||
            foreach (KeyValuePair<string, IInventoryData> plugin in m_plugins)
 | 
			
		||||
            {
 | 
			
		||||
                plugin.Value.addInventoryFolder(folder);
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
            // FIXME: Should return false on failure 
 | 
			
		||||
 | 
			
		||||
            // FIXME: Should return false on failure
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -203,14 +203,14 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
        {
 | 
			
		||||
            m_log.DebugFormat(
 | 
			
		||||
                "[AGENT INVENTORY]: Moving folder {0} {1} to folder {2}", folder.Name, folder.ID, folder.ParentID);
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            foreach (KeyValuePair<string, IInventoryData> plugin in m_plugins)
 | 
			
		||||
            {
 | 
			
		||||
                plugin.Value.moveInventoryFolder(folder);
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
            // FIXME: Should return false on failure 
 | 
			
		||||
            return true;            
 | 
			
		||||
 | 
			
		||||
            // FIXME: Should return false on failure
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // See IInventoryServices
 | 
			
		||||
| 
						 | 
				
			
			@ -218,14 +218,14 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
        {
 | 
			
		||||
            m_log.DebugFormat(
 | 
			
		||||
                "[AGENT INVENTORY]: Adding item {0} {1} to folder {2}", item.Name, item.ID, item.Folder);
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            foreach (KeyValuePair<string, IInventoryData> plugin in m_plugins)
 | 
			
		||||
            {
 | 
			
		||||
                plugin.Value.addInventoryItem(item);
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
            // FIXME: Should return false on failure 
 | 
			
		||||
            return true;            
 | 
			
		||||
 | 
			
		||||
            // FIXME: Should return false on failure
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // See IInventoryServices
 | 
			
		||||
| 
						 | 
				
			
			@ -233,14 +233,14 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
        {
 | 
			
		||||
            m_log.InfoFormat(
 | 
			
		||||
                "[AGENT INVENTORY]: Updating item {0} {1} in folder {2}", item.Name, item.ID, item.Folder);
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            foreach (KeyValuePair<string, IInventoryData> plugin in m_plugins)
 | 
			
		||||
            {
 | 
			
		||||
                plugin.Value.updateInventoryItem(item);
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
            // FIXME: Should return false on failure 
 | 
			
		||||
            return true;            
 | 
			
		||||
 | 
			
		||||
            // FIXME: Should return false on failure
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // See IInventoryServices
 | 
			
		||||
| 
						 | 
				
			
			@ -248,19 +248,19 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
        {
 | 
			
		||||
            m_log.InfoFormat(
 | 
			
		||||
                "[AGENT INVENTORY]: Deleting item {0} {1} from folder {2}", item.Name, item.ID, item.Folder);
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            foreach (KeyValuePair<string, IInventoryData> plugin in m_plugins)
 | 
			
		||||
            {
 | 
			
		||||
                plugin.Value.deleteInventoryItem(item.ID);
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
            // FIXME: Should return false on failure 
 | 
			
		||||
            return true;            
 | 
			
		||||
 | 
			
		||||
            // FIXME: Should return false on failure
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Purge a folder of all items items and subfolders.
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// FIXME: Really nasty in a sense, because we have to query the database to get information we may
 | 
			
		||||
        /// already know...  Needs heavy refactoring.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -269,13 +269,13 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
        {
 | 
			
		||||
            m_log.DebugFormat(
 | 
			
		||||
                "[AGENT INVENTORY]: Purging folder {0} {1} of its contents", folder.Name, folder.ID);
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            List<InventoryFolderBase> subFolders = RequestSubFolders(folder.ID);
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            foreach (InventoryFolderBase subFolder in subFolders)
 | 
			
		||||
            {
 | 
			
		||||
//                m_log.DebugFormat("[AGENT INVENTORY]: Deleting folder {0} {1}", subFolder.Name, subFolder.ID);
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                foreach (KeyValuePair<string, IInventoryData> plugin in m_plugins)
 | 
			
		||||
                {
 | 
			
		||||
                    plugin.Value.deleteInventoryFolder(subFolder.ID);
 | 
			
		||||
| 
						 | 
				
			
			@ -288,17 +288,17 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
            {
 | 
			
		||||
                DeleteItem(item);
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
            // FIXME: Should return false on failure 
 | 
			
		||||
            return true;            
 | 
			
		||||
 | 
			
		||||
            // FIXME: Should return false on failure
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        private void AddNewInventorySet(UsersInventory inventory)
 | 
			
		||||
        {
 | 
			
		||||
            foreach (InventoryFolderBase folder in inventory.Folders.Values)
 | 
			
		||||
            {
 | 
			
		||||
                AddFolder(folder);
 | 
			
		||||
            }         
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -340,7 +340,7 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
                folder.Type = (short)AssetType.Bodypart;
 | 
			
		||||
                folder.Version = 1;
 | 
			
		||||
                Folders.Add(folder.ID, folder);
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                folder = new InventoryFolderBase();
 | 
			
		||||
                folder.ParentID = rootFolder;
 | 
			
		||||
                folder.Owner = user;
 | 
			
		||||
| 
						 | 
				
			
			@ -348,7 +348,7 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
                folder.Name = "Calling Cards";
 | 
			
		||||
                folder.Type = (short)AssetType.CallingCard;
 | 
			
		||||
                folder.Version = 1;
 | 
			
		||||
                Folders.Add(folder.ID, folder);                
 | 
			
		||||
                Folders.Add(folder.ID, folder);
 | 
			
		||||
 | 
			
		||||
                folder = new InventoryFolderBase();
 | 
			
		||||
                folder.ParentID = rootFolder;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -31,9 +31,9 @@ namespace OpenSim.Framework.Communications.Limit
 | 
			
		|||
    /// Interface for strategies that can limit requests from the client.  Currently only used in the
 | 
			
		||||
    /// texture modules to deal with repeated requests for certain textures.  However, limiting strategies
 | 
			
		||||
    /// could be used with other requests.
 | 
			
		||||
    /// </summary>    
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    public interface IRequestLimitStrategy<TId>
 | 
			
		||||
    {           
 | 
			
		||||
    {
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Should the request be allowed?  If the id is not monitored, then the request is always allowed.
 | 
			
		||||
        /// Otherwise, the strategy criteria will be applied.
 | 
			
		||||
| 
						 | 
				
			
			@ -41,21 +41,21 @@ namespace OpenSim.Framework.Communications.Limit
 | 
			
		|||
        /// <param name="id"></param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        bool AllowRequest(TId id);
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Has the request been refused just once?
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <returns>False if the request has not yet been refused, or if the request has been refused more
 | 
			
		||||
        /// than once.</returns>
 | 
			
		||||
        bool IsFirstRefusal(TId id);
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Start monitoring for future AllowRequest calls.  If the id is already monitored, then monitoring
 | 
			
		||||
        /// continues.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="id"></param>
 | 
			
		||||
        void MonitorRequests(TId id);
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Is the id being monitored?
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -26,15 +26,15 @@
 | 
			
		|||
 */
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Framework.Communications.Limit
 | 
			
		||||
{    
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// Strategy which polices no limits
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    public class NullLimitStrategy<TId> : IRequestLimitStrategy<TId>
 | 
			
		||||
    {        
 | 
			
		||||
    {
 | 
			
		||||
        public bool AllowRequest(TId id) { return true; }
 | 
			
		||||
        public bool IsFirstRefusal(TId id) { return false; }
 | 
			
		||||
        public void MonitorRequests(TId id) { /* intentionally blank */ }
 | 
			
		||||
        public bool IsMonitoringRequests(TId id) { return false; }    
 | 
			
		||||
        public bool IsMonitoringRequests(TId id) { return false; }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -31,14 +31,14 @@ namespace OpenSim.Framework.Communications.Limit
 | 
			
		|||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// Limit requests by discarding them after they've been repeated a certain number of times.
 | 
			
		||||
    /// </summary>    
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    public class RepeatLimitStrategy<TId> : IRequestLimitStrategy<TId>
 | 
			
		||||
    {
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Record each asset request that we're notified about.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        private readonly Dictionary<TId, int> requestCounts = new Dictionary<TId, int>();
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// The maximum number of requests that can be made before we drop subsequent requests.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -47,7 +47,7 @@ namespace OpenSim.Framework.Communications.Limit
 | 
			
		|||
        {
 | 
			
		||||
            get { return m_maxRequests; }
 | 
			
		||||
        }
 | 
			
		||||
       
 | 
			
		||||
 | 
			
		||||
        /// <summary></summary>
 | 
			
		||||
        /// <param name="maxRequests">The maximum number of requests that may be served before all further
 | 
			
		||||
        /// requests are dropped.</param>
 | 
			
		||||
| 
						 | 
				
			
			@ -55,52 +55,52 @@ namespace OpenSim.Framework.Communications.Limit
 | 
			
		|||
        {
 | 
			
		||||
            m_maxRequests = maxRequests;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// <see cref="IRequestLimitStrategy"/>
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public bool AllowRequest(TId id)
 | 
			
		||||
        {                 
 | 
			
		||||
        {
 | 
			
		||||
            if (requestCounts.ContainsKey(id))
 | 
			
		||||
            {
 | 
			
		||||
                requestCounts[id] += 1;
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                if (requestCounts[id] > m_maxRequests)
 | 
			
		||||
                {                    
 | 
			
		||||
                {
 | 
			
		||||
                    return false;
 | 
			
		||||
                }                                                         
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// <see cref="IRequestLimitStrategy"/>
 | 
			
		||||
        /// </summary>        
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public bool IsFirstRefusal(TId id)
 | 
			
		||||
        {
 | 
			
		||||
            if (requestCounts.ContainsKey(id) && m_maxRequests + 1 == requestCounts[id])
 | 
			
		||||
            {
 | 
			
		||||
                return true;
 | 
			
		||||
            }            
 | 
			
		||||
            
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// <see cref="IRequestLimitStrategy"/>
 | 
			
		||||
        /// </summary>        
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public void MonitorRequests(TId id)
 | 
			
		||||
        {
 | 
			
		||||
            if (!IsMonitoringRequests(id))
 | 
			
		||||
            {
 | 
			
		||||
                requestCounts.Add(id, 1);
 | 
			
		||||
            }            
 | 
			
		||||
        }  
 | 
			
		||||
        
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// <see cref="IRequestLimitStrategy"/>
 | 
			
		||||
        /// </summary>         
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public bool IsMonitoringRequests(TId id)
 | 
			
		||||
        {
 | 
			
		||||
            return requestCounts.ContainsKey(id);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -32,17 +32,17 @@ namespace OpenSim.Framework.Communications.Limit
 | 
			
		|||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// Limit requests by discarding repeat attempts that occur within a given time period
 | 
			
		||||
    /// 
 | 
			
		||||
    ///
 | 
			
		||||
    /// XXX Don't use this for limiting texture downloading, at least not until we better handle multiple requests
 | 
			
		||||
    /// for the same texture at different resolutions.
 | 
			
		||||
    /// </summary>    
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    public class TimeLimitStrategy<TId> : IRequestLimitStrategy<TId>
 | 
			
		||||
    {
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Record the time at which an asset request occurs.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        private readonly Dictionary<TId, Request> requests = new Dictionary<TId, Request>();    
 | 
			
		||||
        
 | 
			
		||||
        private readonly Dictionary<TId, Request> requests = new Dictionary<TId, Request>();
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// The minimum time period between which requests for the same data will be serviced.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -53,37 +53,37 @@ namespace OpenSim.Framework.Communications.Limit
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary></summary>
 | 
			
		||||
        /// <param name="repeatPeriod"></param>        
 | 
			
		||||
        /// <param name="repeatPeriod"></param>
 | 
			
		||||
        public TimeLimitStrategy(TimeSpan repeatPeriod)
 | 
			
		||||
        {
 | 
			
		||||
            m_repeatPeriod = repeatPeriod;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// <see cref="IRequestLimitStrategy"/>
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public bool AllowRequest(TId id)
 | 
			
		||||
        {                 
 | 
			
		||||
        {
 | 
			
		||||
            if (IsMonitoringRequests(id))
 | 
			
		||||
            {
 | 
			
		||||
                DateTime now = DateTime.Now;
 | 
			
		||||
                TimeSpan elapsed = now - requests[id].Time;
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                if (elapsed < RepeatPeriod)
 | 
			
		||||
                {
 | 
			
		||||
                    requests[id].Refusals += 1;
 | 
			
		||||
                    return false;
 | 
			
		||||
                }
 | 
			
		||||
                
 | 
			
		||||
                requests[id].Time = now; 
 | 
			
		||||
 | 
			
		||||
                requests[id].Time = now;
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// <see cref="IRequestLimitStrategy"/>
 | 
			
		||||
        /// </summary>        
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public bool IsFirstRefusal(TId id)
 | 
			
		||||
        {
 | 
			
		||||
            if (IsMonitoringRequests(id))
 | 
			
		||||
| 
						 | 
				
			
			@ -92,31 +92,31 @@ namespace OpenSim.Framework.Communications.Limit
 | 
			
		|||
                {
 | 
			
		||||
                    return true;
 | 
			
		||||
                }
 | 
			
		||||
            }           
 | 
			
		||||
            
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// <see cref="IRequestLimitStrategy"/>
 | 
			
		||||
        /// </summary>        
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public void MonitorRequests(TId id)
 | 
			
		||||
        {
 | 
			
		||||
            if (!IsMonitoringRequests(id))
 | 
			
		||||
            {
 | 
			
		||||
                requests.Add(id, new Request(DateTime.Now));
 | 
			
		||||
            }            
 | 
			
		||||
        }  
 | 
			
		||||
        
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// <see cref="IRequestLimitStrategy"/>
 | 
			
		||||
        /// </summary>         
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public bool IsMonitoringRequests(TId id)
 | 
			
		||||
        {
 | 
			
		||||
            return requests.ContainsKey(id);
 | 
			
		||||
        }      
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// Private request details.
 | 
			
		||||
    /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -126,12 +126,12 @@ namespace OpenSim.Framework.Communications.Limit
 | 
			
		|||
        /// Time of last request
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public DateTime Time;
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Number of refusals associated with this request
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public int Refusals;
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        public Request(DateTime time)
 | 
			
		||||
        {
 | 
			
		||||
            Time = time;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -239,7 +239,7 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
                "Could not authenticate your avatar. Please check your username and password, and check the grid if problems persist.",
 | 
			
		||||
                "false");
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Response to indicate that login failed because the agent's inventory was not available.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -249,7 +249,7 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
            return GenerateFailureResponse(
 | 
			
		||||
                "key",
 | 
			
		||||
                "The avatar inventory service is not responding.  Please notify your login region operator.",
 | 
			
		||||
                "false");     
 | 
			
		||||
                "false");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public XmlRpcResponse CreateAlreadyLoggedInResponse()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -48,8 +48,8 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
 | 
			
		||||
        protected string m_welcomeMessage = "Welcome to OpenSim";
 | 
			
		||||
        protected UserManagerBase m_userManager = null;
 | 
			
		||||
        protected Mutex m_loginMutex = new Mutex(false);     
 | 
			
		||||
        
 | 
			
		||||
        protected Mutex m_loginMutex = new Mutex(false);
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Used during login to send the skeleton of the OpenSim Library to the client.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -61,12 +61,12 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
        /// <param name="userManager"></param>
 | 
			
		||||
        /// <param name="libraryRootFolder"></param>
 | 
			
		||||
        /// <param name="welcomeMess"></param>
 | 
			
		||||
        public LoginService(UserManagerBase userManager, LibraryRootFolder libraryRootFolder, 
 | 
			
		||||
        public LoginService(UserManagerBase userManager, LibraryRootFolder libraryRootFolder,
 | 
			
		||||
                            string welcomeMess)
 | 
			
		||||
        {
 | 
			
		||||
            m_userManager = userManager;
 | 
			
		||||
            m_libraryRootFolder = libraryRootFolder;
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            if (welcomeMess != String.Empty)
 | 
			
		||||
            {
 | 
			
		||||
                m_welcomeMessage = welcomeMess;
 | 
			
		||||
| 
						 | 
				
			
			@ -79,15 +79,15 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
        /// <param name="response">The existing response</param>
 | 
			
		||||
        /// <param name="theUser">The user profile</param>
 | 
			
		||||
        public abstract void CustomiseResponse(LoginResponse response, UserProfileData theUser, string startLocationRequest);
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Get the initial login inventory skeleton (in other words, the folder structure) for the given user.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="userID"></param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        /// <exception cref='System.Exception'>This will be thrown if there is a problem with the inventory service</exception>
 | 
			
		||||
        protected abstract InventoryData GetInventorySkeleton(LLUUID userID);     
 | 
			
		||||
        
 | 
			
		||||
        protected abstract InventoryData GetInventorySkeleton(LLUUID userID);
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Called when we receive the client's initial XMLRPC login_to_simulator request message
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -112,7 +112,7 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
 | 
			
		||||
                UserProfileData userProfile;
 | 
			
		||||
                LoginResponse logResponse = new LoginResponse();
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                string firstname = String.Empty;
 | 
			
		||||
                string lastname = String.Empty;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -120,23 +120,23 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
                {
 | 
			
		||||
                    firstname = (string) requestData["first"];
 | 
			
		||||
                    lastname = (string) requestData["last"];
 | 
			
		||||
                    
 | 
			
		||||
 | 
			
		||||
                    m_log.InfoFormat(
 | 
			
		||||
                        "[LOGIN BEGIN]: Received login request message from user {0} {1}", 
 | 
			
		||||
                        "[LOGIN BEGIN]: Received login request message from user {0} {1}",
 | 
			
		||||
                        firstname, lastname);
 | 
			
		||||
 | 
			
		||||
                    string clientVersion = "Unknown";
 | 
			
		||||
                    
 | 
			
		||||
 | 
			
		||||
                    if (requestData.Contains("version"))
 | 
			
		||||
                    {
 | 
			
		||||
                        clientVersion = (string)requestData["version"];                        
 | 
			
		||||
                        clientVersion = (string)requestData["version"];
 | 
			
		||||
                    }
 | 
			
		||||
                     
 | 
			
		||||
 | 
			
		||||
                    if (requestData.Contains("start"))
 | 
			
		||||
                    {
 | 
			
		||||
                        startLocationRequest = (string)requestData["start"];
 | 
			
		||||
                    }                    
 | 
			
		||||
                    
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    m_log.DebugFormat(
 | 
			
		||||
                        "[LOGIN]: Client is {0}, start location is {1}", clientVersion, startLocationRequest);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -163,9 +163,9 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
                        catch (Exception e)
 | 
			
		||||
                        {
 | 
			
		||||
                            m_log.InfoFormat(
 | 
			
		||||
                                "[LOGIN END]: Bad web_login_key: {0} for user {1} {2}, exception {3}", 
 | 
			
		||||
                                "[LOGIN END]: Bad web_login_key: {0} for user {1} {2}, exception {3}",
 | 
			
		||||
                                requestData["web_login_key"], firstname, lastname, e);
 | 
			
		||||
                            
 | 
			
		||||
 | 
			
		||||
                            return logResponse.CreateFailedResponse();
 | 
			
		||||
                        }
 | 
			
		||||
                        GoodLogin = AuthenticateUser(userProfile, webloginkey);
 | 
			
		||||
| 
						 | 
				
			
			@ -176,14 +176,14 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
                {
 | 
			
		||||
                    m_log.Info(
 | 
			
		||||
                        "[LOGIN END]: login_to_simulator login message did not contain all the required data");
 | 
			
		||||
                    
 | 
			
		||||
 | 
			
		||||
                    return logResponse.CreateGridErrorResponse();
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if (!GoodLogin)
 | 
			
		||||
                {
 | 
			
		||||
                    m_log.InfoFormat("[LOGIN END]: User {0} {1} failed authentication", firstname, lastname);
 | 
			
		||||
                    
 | 
			
		||||
 | 
			
		||||
                    return logResponse.CreateLoginFailedResponse();
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
| 
						 | 
				
			
			@ -199,11 +199,11 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
                        m_userManager.CommitAgent(ref userProfile);
 | 
			
		||||
 | 
			
		||||
                        // Reject the login
 | 
			
		||||
                        
 | 
			
		||||
 | 
			
		||||
                        m_log.InfoFormat(
 | 
			
		||||
                            "[LOGIN END]: Notifying user {0} {1} that they are already logged in", 
 | 
			
		||||
                            "[LOGIN END]: Notifying user {0} {1} that they are already logged in",
 | 
			
		||||
                            firstname, lastname);
 | 
			
		||||
                        
 | 
			
		||||
 | 
			
		||||
                        return logResponse.CreateAlreadyLoggedInResponse();
 | 
			
		||||
                    }
 | 
			
		||||
                    // Otherwise...
 | 
			
		||||
| 
						 | 
				
			
			@ -214,9 +214,9 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
                    {
 | 
			
		||||
                        LLUUID agentID = userProfile.ID;
 | 
			
		||||
                        InventoryData inventData = null;
 | 
			
		||||
                        
 | 
			
		||||
 | 
			
		||||
                        try
 | 
			
		||||
                        {                                               
 | 
			
		||||
                        {
 | 
			
		||||
                            inventData = GetInventorySkeleton(agentID);
 | 
			
		||||
                        }
 | 
			
		||||
                        catch (Exception e)
 | 
			
		||||
| 
						 | 
				
			
			@ -224,10 +224,10 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
                            m_log.ErrorFormat(
 | 
			
		||||
                                "[LOGIN END]: Error retrieving inventory skeleton of agent {0}, {1} - {2}",
 | 
			
		||||
                                agentID, e.GetType(), e.Message);
 | 
			
		||||
                                                        
 | 
			
		||||
                            return logResponse.CreateLoginInventoryFailedResponse();                                                                                                        
 | 
			
		||||
                        }                        
 | 
			
		||||
                        
 | 
			
		||||
 | 
			
		||||
                            return logResponse.CreateLoginInventoryFailedResponse();
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                        ArrayList AgentInventoryArray = inventData.InventoryArray;
 | 
			
		||||
 | 
			
		||||
                        Hashtable InventoryRootHash = new Hashtable();
 | 
			
		||||
| 
						 | 
				
			
			@ -235,7 +235,7 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
                        ArrayList InventoryRoot = new ArrayList();
 | 
			
		||||
                        InventoryRoot.Add(InventoryRootHash);
 | 
			
		||||
                        userProfile.RootInventoryFolderID = inventData.RootFolderID;
 | 
			
		||||
                        
 | 
			
		||||
 | 
			
		||||
                        // Inventory Library Section
 | 
			
		||||
                        Hashtable InventoryLibRootHash = new Hashtable();
 | 
			
		||||
                        InventoryLibRootHash["folder_id"] = "00000112-000f-0000-0000-000100bba000";
 | 
			
		||||
| 
						 | 
				
			
			@ -244,10 +244,10 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
                        logResponse.InventoryLibRoot = InventoryLibRoot;
 | 
			
		||||
 | 
			
		||||
                        logResponse.InventoryLibraryOwner = GetLibraryOwner();
 | 
			
		||||
                        
 | 
			
		||||
 | 
			
		||||
                        logResponse.InventoryRoot = InventoryRoot;
 | 
			
		||||
                        logResponse.InventorySkeleton = AgentInventoryArray;
 | 
			
		||||
                        logResponse.InventoryLibrary = GetInventoryLibrary(); 
 | 
			
		||||
                        logResponse.InventoryLibrary = GetInventoryLibrary();
 | 
			
		||||
 | 
			
		||||
                        // Circuit Code
 | 
			
		||||
                        uint circode = (uint) (Util.RandomClass.Next());
 | 
			
		||||
| 
						 | 
				
			
			@ -280,15 +280,15 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
                            //return logResponse.ToXmlRpcResponse();
 | 
			
		||||
                        }
 | 
			
		||||
                        CommitAgent(ref userProfile);
 | 
			
		||||
                        
 | 
			
		||||
 | 
			
		||||
                        // If we reach this point, then the login has successfully logged onto the grid
 | 
			
		||||
                        if (StatsManager.UserStats != null)
 | 
			
		||||
                            StatsManager.UserStats.AddSuccessfulLogin();
 | 
			
		||||
                        
 | 
			
		||||
 | 
			
		||||
                        m_log.DebugFormat(
 | 
			
		||||
                            "[LOGIN END]: Authentication of user {0} {1} successful.  Sending response to client.",
 | 
			
		||||
                            firstname, lastname);
 | 
			
		||||
                        
 | 
			
		||||
 | 
			
		||||
                        return logResponse.ToXmlRpcResponse();
 | 
			
		||||
                    }
 | 
			
		||||
                    catch (Exception e)
 | 
			
		||||
| 
						 | 
				
			
			@ -422,10 +422,10 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
                        }
 | 
			
		||||
 | 
			
		||||
                        CommitAgent(ref userProfile);
 | 
			
		||||
                        
 | 
			
		||||
 | 
			
		||||
                        // If we reach this point, then the login has successfully logged onto the grid
 | 
			
		||||
                        if (StatsManager.UserStats != null)
 | 
			
		||||
                            StatsManager.UserStats.AddSuccessfulLogin();                        
 | 
			
		||||
                            StatsManager.UserStats.AddSuccessfulLogin();
 | 
			
		||||
 | 
			
		||||
                        return logResponse.ToLLSDResponse();
 | 
			
		||||
                    }
 | 
			
		||||
| 
						 | 
				
			
			@ -449,7 +449,7 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
            //    period, space, parens, and dash.
 | 
			
		||||
 | 
			
		||||
            Regex wfcut = new Regex("[^a-zA-Z0-9_\\.\\$ \\(\\)\\-]");
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            Hashtable returnactions = new Hashtable();
 | 
			
		||||
            int statuscode = 200;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -467,7 +467,7 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
            // the client requires the HTML form field be named 'username'
 | 
			
		||||
            // however, the data it sends when it loads the first time is 'firstname'
 | 
			
		||||
            // another one of those little nuances.
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            if (keysvals.Contains("firstname"))
 | 
			
		||||
                firstname = wfcut.Replace((string)keysvals["firstname"], String.Empty, 99999);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -494,7 +494,7 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
 | 
			
		||||
            if (keysvals.Contains("lang"))
 | 
			
		||||
                lang = wfcut.Replace((string)keysvals["lang"], String.Empty, 99999);
 | 
			
		||||
           
 | 
			
		||||
 | 
			
		||||
            if (keysvals.Contains("password"))
 | 
			
		||||
                password = wfcut.Replace((string)keysvals["password"],  String.Empty, 99999);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -541,8 +541,8 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
            return returnactions;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public string GetLoginForm(string firstname, string lastname, string location, string region, 
 | 
			
		||||
                                   string grid, string channel, string version, string lang, 
 | 
			
		||||
        public string GetLoginForm(string firstname, string lastname, string location, string region,
 | 
			
		||||
                                   string grid, string channel, string version, string lang,
 | 
			
		||||
                                   string password, string errormessages)
 | 
			
		||||
        {
 | 
			
		||||
            // inject our values in the form at the markers
 | 
			
		||||
| 
						 | 
				
			
			@ -559,7 +559,7 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
                loginform = sr.ReadToEnd();
 | 
			
		||||
                sr.Close();
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            loginform = loginform.Replace("[$firstname]", firstname);
 | 
			
		||||
            loginform = loginform.Replace("[$lastname]", lastname);
 | 
			
		||||
            loginform = loginform.Replace("[$location]", location);
 | 
			
		||||
| 
						 | 
				
			
			@ -586,7 +586,7 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
            responseString += "<title>OpenSim Login</title>";
 | 
			
		||||
            responseString += "<body><br />";
 | 
			
		||||
            responseString += "<div id=\"login_box\">";
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
            responseString += "<form action=\"/go.cgi\" method=\"GET\" id=\"login-form\">";
 | 
			
		||||
 | 
			
		||||
            responseString += "<div id=\"message\">[$errors]</div>";
 | 
			
		||||
| 
						 | 
				
			
			@ -670,13 +670,13 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
                password = "$1$" + Util.Md5Hash(password);
 | 
			
		||||
 | 
			
		||||
            password = password.Remove(0, 3); //remove $1$
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            string s = Util.Md5Hash(password + ":" + profile.PasswordSalt);
 | 
			
		||||
            // Testing...    
 | 
			
		||||
            // Testing...
 | 
			
		||||
            //m_log.Info("[LOGIN]: SubHash:" + s + " userprofile:" + profile.passwordHash);
 | 
			
		||||
            //m_log.Info("[LOGIN]: userprofile:" + profile.passwordHash + " SubCT:" + password);
 | 
			
		||||
 | 
			
		||||
            passwordSuccess = (profile.PasswordHash.Equals(s.ToString(), StringComparison.InvariantCultureIgnoreCase) 
 | 
			
		||||
            passwordSuccess = (profile.PasswordHash.Equals(s.ToString(), StringComparison.InvariantCultureIgnoreCase)
 | 
			
		||||
                               || profile.PasswordHash.Equals(password, StringComparison.InvariantCultureIgnoreCase));
 | 
			
		||||
 | 
			
		||||
            return passwordSuccess;
 | 
			
		||||
| 
						 | 
				
			
			@ -694,7 +694,7 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="profile"></param>
 | 
			
		||||
        /// <param name="request"></param>
 | 
			
		||||
| 
						 | 
				
			
			@ -709,7 +709,7 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="firstname"></param>
 | 
			
		||||
        /// <param name="lastname"></param>
 | 
			
		||||
| 
						 | 
				
			
			@ -720,7 +720,7 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        public virtual string GetMessage()
 | 
			
		||||
| 
						 | 
				
			
			@ -741,17 +741,17 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
            }
 | 
			
		||||
            return buddylistreturn;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Converts the inventory library skeleton into the form required by the rpc request.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        protected virtual ArrayList GetInventoryLibrary()
 | 
			
		||||
        {
 | 
			
		||||
            Dictionary<LLUUID, InventoryFolderImpl> rootFolders 
 | 
			
		||||
            Dictionary<LLUUID, InventoryFolderImpl> rootFolders
 | 
			
		||||
                = m_libraryRootFolder.RequestSelfAndDescendentFolders();
 | 
			
		||||
            ArrayList folderHashes = new ArrayList();
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            foreach (InventoryFolderBase folder in rootFolders.Values)
 | 
			
		||||
            {
 | 
			
		||||
                Hashtable TempHash = new Hashtable();
 | 
			
		||||
| 
						 | 
				
			
			@ -762,12 +762,12 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
                TempHash["folder_id"] = folder.ID.ToString();
 | 
			
		||||
                folderHashes.Add(TempHash);
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            return folderHashes;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        protected virtual ArrayList GetLibraryOwner()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -28,7 +28,7 @@
 | 
			
		|||
using System.Reflection;
 | 
			
		||||
using System.Runtime.InteropServices;
 | 
			
		||||
 | 
			
		||||
// General Information about an assembly is controlled through the following 
 | 
			
		||||
// General information about an assembly is controlled through the following
 | 
			
		||||
// set of attributes. Change these attribute values to modify the information
 | 
			
		||||
// associated with an assembly.
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -41,8 +41,8 @@ using System.Runtime.InteropServices;
 | 
			
		|||
[assembly : AssemblyTrademark("")]
 | 
			
		||||
[assembly : AssemblyCulture("")]
 | 
			
		||||
 | 
			
		||||
// Setting ComVisible to false makes the types in this assembly not visible 
 | 
			
		||||
// to COM components.  If you need to access a type in this assembly from 
 | 
			
		||||
// Setting ComVisible to false makes the types in this assembly not visible
 | 
			
		||||
// to COM components.  If you need to access a type in this assembly from
 | 
			
		||||
// COM, set the ComVisible attribute to true on that type.
 | 
			
		||||
 | 
			
		||||
[assembly : ComVisible(false)]
 | 
			
		||||
| 
						 | 
				
			
			@ -54,11 +54,11 @@ using System.Runtime.InteropServices;
 | 
			
		|||
// Version information for an assembly consists of the following four values:
 | 
			
		||||
//
 | 
			
		||||
//      Major Version
 | 
			
		||||
//      Minor Version 
 | 
			
		||||
//      Minor Version
 | 
			
		||||
//      Build Number
 | 
			
		||||
//      Revision
 | 
			
		||||
//
 | 
			
		||||
// You can specify all the values or you can default the Revision and Build Numbers 
 | 
			
		||||
// You can specify all the values or you can default the Revision and Build Numbers
 | 
			
		||||
// by using the '*' as shown below:
 | 
			
		||||
 | 
			
		||||
[assembly : AssemblyVersion("1.0.0.0")]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -16,14 +16,14 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
    /// <remarks>
 | 
			
		||||
    /// This class is a generic implementation of a REST (Representational State Transfer) web service. This
 | 
			
		||||
    /// class is designed to execute both synchronously and asynchronously.
 | 
			
		||||
    /// 
 | 
			
		||||
    ///
 | 
			
		||||
    /// Internally the implementation works as a two stage asynchronous web-client.
 | 
			
		||||
    /// When the request is initiated, RestClient will query asynchronously for for a web-response,
 | 
			
		||||
    /// sleeping until the initial response is returned by the server. Once the initial response is retrieved
 | 
			
		||||
    /// the second stage of asynchronous requests will be triggered, in an attempt to read of the response
 | 
			
		||||
    /// object into a memorystream as a sequence of asynchronous reads.
 | 
			
		||||
    /// 
 | 
			
		||||
    /// The asynchronisity of RestClient is designed to move as much processing into the back-ground, allowing 
 | 
			
		||||
    ///
 | 
			
		||||
    /// The asynchronisity of RestClient is designed to move as much processing into the back-ground, allowing
 | 
			
		||||
    /// other threads to execute, while it waits for a response from the web-service. RestClient itself can be
 | 
			
		||||
    /// invoked by the caller in either synchronous mode or asynchronous modes.
 | 
			
		||||
    /// </remarks>
 | 
			
		||||
| 
						 | 
				
			
			@ -36,7 +36,7 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
        #region member variables
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// The base Uri of the web-service e.g. http://www.google.com 
 | 
			
		||||
        /// The base Uri of the web-service e.g. http://www.google.com
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        private string _url;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -92,7 +92,7 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// if an exception occours during async processing, we need to save it, so it can be 
 | 
			
		||||
        /// if an exception occours during async processing, we need to save it, so it can be
 | 
			
		||||
        /// rethrown on the primary thread;
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        private Exception _asyncException;
 | 
			
		||||
| 
						 | 
				
			
			@ -341,7 +341,7 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
        {
 | 
			
		||||
            AsyncResult<Stream> ar = (AsyncResult<Stream>) asyncResult;
 | 
			
		||||
 | 
			
		||||
            // Wait for operation to complete, then return result or 
 | 
			
		||||
            // Wait for operation to complete, then return result or
 | 
			
		||||
            // throw exception
 | 
			
		||||
            return ar.EndInvoke();
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -43,12 +43,12 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
    /// </summary>
 | 
			
		||||
    public abstract class UserManagerBase : IUserService
 | 
			
		||||
    {
 | 
			
		||||
        private static readonly ILog m_log 
 | 
			
		||||
        private static readonly ILog m_log
 | 
			
		||||
            = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
 | 
			
		||||
 | 
			
		||||
        public UserConfig _config;
 | 
			
		||||
        private Dictionary<string, IUserData> _plugins = new Dictionary<string, IUserData>();
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Adds a new user server plugin - user servers will be requested in the order they were loaded.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -85,7 +85,7 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
            m_log.Info("[USERSTORAGE]: Added IUserData Interface");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #region Get UserProfile 
 | 
			
		||||
        #region Get UserProfile
 | 
			
		||||
 | 
			
		||||
        // see IUserService
 | 
			
		||||
        public UserProfileData GetUserProfile(string fname, string lname)
 | 
			
		||||
| 
						 | 
				
			
			@ -103,8 +103,8 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
 | 
			
		||||
            return null;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        // see IUserService        
 | 
			
		||||
 | 
			
		||||
        // see IUserService
 | 
			
		||||
        public UserProfileData GetUserProfile(LLUUID uuid)
 | 
			
		||||
        {
 | 
			
		||||
            foreach (KeyValuePair<string, IUserData> plugin in _plugins)
 | 
			
		||||
| 
						 | 
				
			
			@ -408,7 +408,7 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
 | 
			
		||||
            profile.CurrentAgent = agent;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Process a user logoff from OpenSim.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -422,7 +422,7 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
        {
 | 
			
		||||
            if (StatsManager.UserStats != null)
 | 
			
		||||
                StatsManager.UserStats.AddLogout();
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            UserProfileData userProfile;
 | 
			
		||||
            UserAgentData userAgent;
 | 
			
		||||
            LLVector3 currentPos = new LLVector3(posx, posy, posz);
 | 
			
		||||
| 
						 | 
				
			
			@ -433,7 +433,7 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
            {
 | 
			
		||||
                // This line needs to be in side the above if statement or the UserServer will crash on some logouts.
 | 
			
		||||
                m_log.Info("[LOGOUT]: " + userProfile.FirstName + " " + userProfile.SurName + " from " + regionhandle + "(" + posx + "," + posy + "," + posz + ")");
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                userAgent = userProfile.CurrentAgent;
 | 
			
		||||
                if (userAgent != null)
 | 
			
		||||
                {
 | 
			
		||||
| 
						 | 
				
			
			@ -462,7 +462,7 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
                m_log.Warn("[LOGOUT]: Unknown User logged out");
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        public void CreateAgent(UserProfileData profile, LLSD request)
 | 
			
		||||
        {
 | 
			
		||||
            UserAgentData agent = new UserAgentData();
 | 
			
		||||
| 
						 | 
				
			
			@ -516,7 +516,7 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
        #endregion
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="user"></param>
 | 
			
		||||
        public LLUUID AddUserProfile(string firstName, string lastName, string pass, uint regX, uint regY)
 | 
			
		||||
| 
						 | 
				
			
			@ -598,7 +598,7 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
 | 
			
		||||
        /// Appearance
 | 
			
		||||
        /// TODO: stubs for now to get us to a compiling state gently
 | 
			
		||||
        public AvatarAppearance GetUserAppearance(LLUUID user) 
 | 
			
		||||
        public AvatarAppearance GetUserAppearance(LLUUID user)
 | 
			
		||||
        {
 | 
			
		||||
            foreach (KeyValuePair<string, IUserData> plugin in _plugins)
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			@ -643,7 +643,7 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        public void RemoveAttachment(LLUUID user, LLUUID item)
 | 
			
		||||
        {
 | 
			
		||||
            foreach (KeyValuePair<string, IUserData> plugin in _plugins)
 | 
			
		||||
| 
						 | 
				
			
			@ -658,7 +658,7 @@ namespace OpenSim.Framework.Communications
 | 
			
		|||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        public List<LLUUID> GetAttachments(LLUUID user)
 | 
			
		||||
        {
 | 
			
		||||
            foreach (KeyValuePair<string, IUserData> plugin in _plugins)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -58,7 +58,7 @@ namespace OpenSim.Framework.Console
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// derive an ansi color from a string, ignoring the darker colors.  
 | 
			
		||||
        /// derive an ansi color from a string, ignoring the darker colors.
 | 
			
		||||
        /// This is used to help automatically bin component tags with colors
 | 
			
		||||
        /// in various print functions.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -195,7 +195,7 @@ namespace OpenSim.Framework.Console
 | 
			
		|||
                        System.Console.WriteLine(args);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            } 
 | 
			
		||||
            }
 | 
			
		||||
            catch (ObjectDisposedException)
 | 
			
		||||
            {
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -232,7 +232,7 @@ namespace OpenSim.Framework.Console
 | 
			
		|||
            {
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
         
 | 
			
		||||
 | 
			
		||||
        public string ReadLine()
 | 
			
		||||
        {
 | 
			
		||||
            try
 | 
			
		||||
| 
						 | 
				
			
			@ -245,7 +245,7 @@ namespace OpenSim.Framework.Console
 | 
			
		|||
                return String.Empty;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
         
 | 
			
		||||
 | 
			
		||||
        public int Read()
 | 
			
		||||
        {
 | 
			
		||||
            return System.Console.Read();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -40,32 +40,32 @@ namespace OpenSim.Framework.Console
 | 
			
		|||
                string loggingMessage = RenderLoggingEvent(le);
 | 
			
		||||
 | 
			
		||||
                string regex = @"^(?<Front>.*?)\[(?<Category>[^\]]+)\]:?(?<End>.*)";
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                Regex RE = new Regex(regex, RegexOptions.Multiline);
 | 
			
		||||
                MatchCollection matches = RE.Matches(loggingMessage);
 | 
			
		||||
                // Get some direct matches $1 $4 is a 
 | 
			
		||||
                // Get some direct matches $1 $4 is a
 | 
			
		||||
                if (matches.Count == 1)
 | 
			
		||||
                {
 | 
			
		||||
                    System.Console.Write(matches[0].Groups["Front"].Value);
 | 
			
		||||
                    System.Console.Write("[");
 | 
			
		||||
                    
 | 
			
		||||
 | 
			
		||||
                    WriteColorText(DeriveColor(matches[0].Groups["Category"].Value), matches[0].Groups["Category"].Value);
 | 
			
		||||
                    System.Console.Write("]:");
 | 
			
		||||
                    
 | 
			
		||||
                    if (le.Level == Level.Error) 
 | 
			
		||||
 | 
			
		||||
                    if (le.Level == Level.Error)
 | 
			
		||||
                    {
 | 
			
		||||
                        WriteColorText(ConsoleColor.Red, matches[0].Groups["End"].Value);
 | 
			
		||||
                    }
 | 
			
		||||
                    else if (le.Level == Level.Warn) 
 | 
			
		||||
                    else if (le.Level == Level.Warn)
 | 
			
		||||
                    {
 | 
			
		||||
                        WriteColorText(ConsoleColor.Yellow, matches[0].Groups["End"].Value);
 | 
			
		||||
                    }
 | 
			
		||||
                    else 
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        System.Console.Write(matches[0].Groups["End"].Value);
 | 
			
		||||
                    }
 | 
			
		||||
                    System.Console.WriteLine();
 | 
			
		||||
                } 
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    System.Console.Write(loggingMessage);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -156,7 +156,7 @@ namespace OpenSim.Framework
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public IScene Scene
 | 
			
		||||
        {
 | 
			
		||||
| 
						 | 
				
			
			@ -181,7 +181,7 @@ namespace OpenSim.Framework
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public uint PacketNumber
 | 
			
		||||
        {
 | 
			
		||||
| 
						 | 
				
			
			@ -190,7 +190,7 @@ namespace OpenSim.Framework
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public sbyte DiscardLevel
 | 
			
		||||
        {
 | 
			
		||||
| 
						 | 
				
			
			@ -199,7 +199,7 @@ namespace OpenSim.Framework
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public LLUUID RequestedAssetID
 | 
			
		||||
        {
 | 
			
		||||
| 
						 | 
				
			
			@ -213,7 +213,7 @@ namespace OpenSim.Framework
 | 
			
		|||
        private List<Wearable> m_nowWearing = new List<Wearable>();
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public List<Wearable> NowWearing
 | 
			
		||||
        {
 | 
			
		||||
| 
						 | 
				
			
			@ -381,7 +381,7 @@ namespace OpenSim.Framework
 | 
			
		|||
    public delegate void ImprovedInstantMessage(IClientAPI remoteclient,
 | 
			
		||||
                                                LLUUID fromAgentID, LLUUID fromAgentSession, LLUUID toAgentID, LLUUID imSessionID, uint timestamp,
 | 
			
		||||
                                                string fromAgentName, string message, byte dialog, bool fromGroup, byte offline, uint ParentEstateID,
 | 
			
		||||
                                                LLVector3 Position, LLUUID RegionID, byte[] binaryBucket); // This shouldn't be cut down...  
 | 
			
		||||
                                                LLVector3 Position, LLUUID RegionID, byte[] binaryBucket); // This shouldn't be cut down...
 | 
			
		||||
    // especially if we're ever going to implement groups, presence, estate message dialogs...
 | 
			
		||||
 | 
			
		||||
    public delegate void RezObject(IClientAPI remoteClient, LLUUID itemID, LLVector3 RayEnd, LLVector3 RayStart,
 | 
			
		||||
| 
						 | 
				
			
			@ -607,7 +607,7 @@ namespace OpenSim.Framework
 | 
			
		|||
    public delegate void RequestPayPrice(IClientAPI remoteClient, LLUUID objectID);
 | 
			
		||||
 | 
			
		||||
    public delegate void ForceReleaseControls(IClientAPI remoteClient, LLUUID agentID);
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
    //Estate Requests
 | 
			
		||||
    public delegate void DetailedEstateDataRequest(IClientAPI remoteClient, LLUUID invoice);
 | 
			
		||||
    public delegate void SetEstateFlagsRequest(bool blockTerraform, bool noFly, bool allowDamage, bool blockLandResell, int maxAgents, float objectBonusFactor, int matureLevel, bool restrictPushObject, bool allowParcelChanges);
 | 
			
		||||
| 
						 | 
				
			
			@ -764,7 +764,7 @@ namespace OpenSim.Framework
 | 
			
		|||
        event ParcelPropertiesUpdateRequest OnParcelPropertiesUpdateRequest;
 | 
			
		||||
        event ParcelSelectObjects OnParcelSelectObjects;
 | 
			
		||||
        event ParcelObjectOwnerRequest OnParcelObjectOwnerRequest;
 | 
			
		||||
        event ParcelAbandonRequest OnParcelAbandonRequest;  
 | 
			
		||||
        event ParcelAbandonRequest OnParcelAbandonRequest;
 | 
			
		||||
        event RegionInfoRequest OnRegionInfoRequest;
 | 
			
		||||
        event EstateCovenantRequest OnEstateCovenantRequest;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -808,7 +808,7 @@ namespace OpenSim.Framework
 | 
			
		|||
        event EstateTeleportOneUserHomeRequest OnEstateTeleportOneUserHomeRequest;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        [Obsolete("IClientAPI.OutPacket SHOULD NOT EXIST outside of LLClientView please refactor appropriately.")]
 | 
			
		||||
        void OutPacket(Packet newPack, ThrottleOutPacketType packType);
 | 
			
		||||
        void SendWearables(AvatarWearable[] wearables, int serial);
 | 
			
		||||
| 
						 | 
				
			
			@ -858,16 +858,16 @@ namespace OpenSim.Framework
 | 
			
		|||
        void AttachObject(uint localID, LLQuaternion rotation, byte attachPoint);
 | 
			
		||||
        void SetChildAgentThrottle(byte[] throttle);
 | 
			
		||||
 | 
			
		||||
        void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, PrimitiveBaseShape primShape, 
 | 
			
		||||
        void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, PrimitiveBaseShape primShape,
 | 
			
		||||
                                   LLVector3 pos, LLVector3 vel, LLVector3 acc, LLQuaternion rotation, LLVector3 rvel,
 | 
			
		||||
                                   uint flags,
 | 
			
		||||
                                   LLUUID objectID, LLUUID ownerID, string text, byte[] color, uint parentID, byte[] particleSystem,
 | 
			
		||||
                                   byte clickAction, byte[] textureanim, bool attachment, uint AttachPoint, LLUUID AssetId);
 | 
			
		||||
                                   
 | 
			
		||||
 | 
			
		||||
        void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, PrimitiveBaseShape primShape, 
 | 
			
		||||
 | 
			
		||||
        void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, PrimitiveBaseShape primShape,
 | 
			
		||||
                                          LLVector3 pos, LLVector3 vel, LLVector3 acc, LLQuaternion rotation, LLVector3 rvel,
 | 
			
		||||
                                          uint flags, LLUUID objectID, LLUUID ownerID, string text, byte[] color, 
 | 
			
		||||
                                          uint flags, LLUUID objectID, LLUUID ownerID, string text, byte[] color,
 | 
			
		||||
                                   uint parentID, byte[] particleSystem, byte clickAction);
 | 
			
		||||
 | 
			
		||||
        void SendPrimTerseUpdate(ulong regionHandle, ushort timeDilation, uint localID, LLVector3 position,
 | 
			
		||||
| 
						 | 
				
			
			@ -889,7 +889,7 @@ namespace OpenSim.Framework
 | 
			
		|||
        void SendInventoryItemCreateUpdate(InventoryItemBase Item);
 | 
			
		||||
 | 
			
		||||
        void SendRemoveInventoryItem(LLUUID itemID);
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        void SendTakeControls(int controls, bool passToAgent, bool TakeControls);
 | 
			
		||||
 | 
			
		||||
        void SendTaskInventory(LLUUID taskID, short serial, byte[] fileName);
 | 
			
		||||
| 
						 | 
				
			
			@ -950,7 +950,7 @@ namespace OpenSim.Framework
 | 
			
		|||
        void SendAssetUploadCompleteMessage(sbyte AssetType, bool Success, LLUUID AssetFullID);
 | 
			
		||||
        void SendConfirmXfer(ulong xferID, uint PacketID);
 | 
			
		||||
        void SendXferRequest(ulong XferID, short AssetType, LLUUID vFileID, byte FilePath, byte[] FileName);
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        void SendImagePart(ushort numParts, LLUUID ImageUUID, uint ImageSize, byte[] ImageData, byte imageCodec);
 | 
			
		||||
 | 
			
		||||
        void SendShutdownConnectionNotice();
 | 
			
		||||
| 
						 | 
				
			
			@ -973,9 +973,9 @@ namespace OpenSim.Framework
 | 
			
		|||
                                        LLVector3 CameraAtOffset, LLVector3 CameraEyeOffset, bool ForceMouseLook);
 | 
			
		||||
 | 
			
		||||
        void SendAdminResponse(LLUUID Token, uint AdminLevel);
 | 
			
		||||
       
 | 
			
		||||
 | 
			
		||||
        void SendGroupMembership(GroupData[] GroupMembership);
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        byte[] GetThrottlesPacked(float multiplier);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,14 +5,14 @@ namespace OpenSim.Framework
 | 
			
		|||
    #region Args Classes
 | 
			
		||||
    public class ICA2_ConnectionArgs : EventArgs
 | 
			
		||||
    {
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public class ICA2_DisconnectionArgs : EventArgs
 | 
			
		||||
    {
 | 
			
		||||
        public bool Forced;
 | 
			
		||||
 | 
			
		||||
        // Static Constructor 
 | 
			
		||||
        // Static Constructor
 | 
			
		||||
        // Allows us to recycle these classes later more easily from a pool.
 | 
			
		||||
        public static ICA2_DisconnectionArgs Create(bool forced)
 | 
			
		||||
        {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -120,7 +120,7 @@ namespace OpenSim.Framework
 | 
			
		|||
        void updateInventoryItem(InventoryItemBase item);
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="item"></param>
 | 
			
		||||
        void deleteInventoryItem(LLUUID item);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -87,7 +87,7 @@ namespace OpenSim.Framework
 | 
			
		|||
        void StoreWebLoginKey(LLUUID agentID, LLUUID webLoginKey);
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Adds a new User profile to the database 
 | 
			
		||||
        /// Adds a new User profile to the database
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="user">UserProfile to add</param>
 | 
			
		||||
        void AddNewUserProfile(UserProfileData user);
 | 
			
		||||
| 
						 | 
				
			
			@ -181,8 +181,8 @@ namespace OpenSim.Framework
 | 
			
		|||
        AvatarAppearance GetUserAppearance(LLUUID user);
 | 
			
		||||
 | 
			
		||||
        void UpdateUserAppearance(LLUUID user, AvatarAppearance appearance);
 | 
			
		||||
        
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        void AddAttachment(LLUUID user, LLUUID item);
 | 
			
		||||
        void RemoveAttachment(LLUUID user, LLUUID item);
 | 
			
		||||
        List<LLUUID> GetAttachments(LLUUID user);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -50,7 +50,7 @@ namespace OpenSim.Framework
 | 
			
		|||
        private LLUUID _owner;
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// The folder this folder is contained in 
 | 
			
		||||
        /// The folder this folder is contained in
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        private LLUUID _parentID;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -45,7 +45,7 @@ namespace OpenSim.Framework
 | 
			
		|||
        private int _assetType;
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        private uint _basePermissions;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -69,12 +69,12 @@ namespace OpenSim.Framework
 | 
			
		|||
        private string _description;
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        private uint _everyOnePermissions;
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// The folder this item is contained in 
 | 
			
		||||
        /// The folder this item is contained in
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        private LLUUID _folder;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -93,34 +93,34 @@ namespace OpenSim.Framework
 | 
			
		|||
        /// </summary>
 | 
			
		||||
        private string _name;
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        private LLUUID _groupID;
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        private bool _groupOwned;
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        private int _salePrice;
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        private byte _saleType;
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        private uint _flags;
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public int _creationDate;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -63,7 +63,7 @@ namespace OpenSim.Framework
 | 
			
		|||
        #endregion
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="agent"></param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
| 
						 | 
				
			
			@ -171,7 +171,7 @@ namespace OpenSim.Framework
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <remarks>TODO: Doesnt take any args??</remarks>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
| 
						 | 
				
			
			@ -188,7 +188,7 @@ namespace OpenSim.Framework
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <remarks>Added to avoid a unused compiler warning on OnNeighboursUpdate, TODO: Check me</remarks>
 | 
			
		||||
        /// <param name="neighbours"></param>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -37,7 +37,7 @@ namespace OpenSim.Framework
 | 
			
		|||
    [Serializable]
 | 
			
		||||
    public class SimpleRegionInfo
 | 
			
		||||
    {
 | 
			
		||||
        // private static readonly log4net.ILog m_log 
 | 
			
		||||
        // private static readonly log4net.ILog m_log
 | 
			
		||||
        //     = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
 | 
			
		||||
 | 
			
		||||
        protected bool Allow_Alternate_Ports;
 | 
			
		||||
| 
						 | 
				
			
			@ -114,7 +114,7 @@ namespace OpenSim.Framework
 | 
			
		|||
 | 
			
		||||
        /// <value>
 | 
			
		||||
        /// This accessor can throw all the exceptions that Dns.GetHostAddresses can throw.
 | 
			
		||||
        /// 
 | 
			
		||||
        ///
 | 
			
		||||
        /// XXX Isn't this really doing too much to be a simple getter, rather than an explict method?
 | 
			
		||||
        /// </value>
 | 
			
		||||
        public IPEndPoint ExternalEndPoint
 | 
			
		||||
| 
						 | 
				
			
			@ -187,7 +187,7 @@ namespace OpenSim.Framework
 | 
			
		|||
 | 
			
		||||
    public class RegionInfo : SimpleRegionInfo
 | 
			
		||||
    {
 | 
			
		||||
        // private static readonly log4net.ILog m_log 
 | 
			
		||||
        // private static readonly log4net.ILog m_log
 | 
			
		||||
        //     = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
 | 
			
		||||
 | 
			
		||||
        public bool commFailTF = false;
 | 
			
		||||
| 
						 | 
				
			
			@ -327,7 +327,7 @@ namespace OpenSim.Framework
 | 
			
		|||
 | 
			
		||||
            if (errorMessage != String.Empty)
 | 
			
		||||
            {
 | 
			
		||||
                // a error 
 | 
			
		||||
                // a error
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -87,7 +87,7 @@ namespace OpenSim.Framework
 | 
			
		|||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Signs a new bit of data with the current hash. Returns a byte array which should be affixed to the message.
 | 
			
		||||
        /// Signing a piece of data will automatically increment the hash - if you sign data and do not send it, the 
 | 
			
		||||
        /// Signing a piece of data will automatically increment the hash - if you sign data and do not send it, the
 | 
			
		||||
        /// hashes will get out of sync and throw an exception when validation is attempted.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="data">The outgoing data</param>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -30,7 +30,7 @@ using System.Xml.Serialization;
 | 
			
		|||
 | 
			
		||||
namespace OpenSim.Framework
 | 
			
		||||
{
 | 
			
		||||
    /* 
 | 
			
		||||
    /*
 | 
			
		||||
     * .Net has some issues, serializing a dictionary, so we cannot reuse the InventoryFolder
 | 
			
		||||
     * class defined in Communications.Framework.Communications.Caches. So we serialize/deserialize
 | 
			
		||||
     * into this simpler class, and then use that.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -40,8 +40,8 @@ namespace OpenSim.Framework
 | 
			
		|||
 | 
			
		||||
        /// <value>
 | 
			
		||||
        /// The port by which http communication occurs with the region (most noticeably, CAPS communication)
 | 
			
		||||
        /// 
 | 
			
		||||
        /// FIXME: Defaulting to 9000 temporarily (on the basis that this is the http port most region 
 | 
			
		||||
        ///
 | 
			
		||||
        /// FIXME: Defaulting to 9000 temporarily (on the basis that this is the http port most region
 | 
			
		||||
        /// servers are running) until the revision in which this change is made propogates around grids.
 | 
			
		||||
        /// </value>
 | 
			
		||||
        protected uint m_httpPort = 9000;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -82,10 +82,10 @@ namespace OpenSim.Framework.Servers
 | 
			
		|||
            string path = handler.Path;
 | 
			
		||||
 | 
			
		||||
            string handlerKey = GetHandlerKey(httpMethod, path);
 | 
			
		||||
                                    
 | 
			
		||||
 | 
			
		||||
            if (!m_streamHandlers.ContainsKey(handlerKey))
 | 
			
		||||
            {
 | 
			
		||||
                //m_log.DebugFormat("[BASE HTTP SERVER]: Adding handler key {0}", handlerKey);                
 | 
			
		||||
                //m_log.DebugFormat("[BASE HTTP SERVER]: Adding handler key {0}", handlerKey);
 | 
			
		||||
                m_streamHandlers.Add(handlerKey, handler);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -135,20 +135,20 @@ namespace OpenSim.Framework.Servers
 | 
			
		|||
            try
 | 
			
		||||
            {
 | 
			
		||||
                HttpListenerContext context = (HttpListenerContext) stateinfo;
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
                HttpListenerRequest request = context.Request;
 | 
			
		||||
                HttpListenerResponse response = context.Response;
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
                response.KeepAlive = false;
 | 
			
		||||
                response.SendChunked = false;
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
                string path = request.RawUrl;
 | 
			
		||||
                string handlerKey = GetHandlerKey(request.HttpMethod, path);
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                //m_log.DebugFormat("[BASE HTTP SERVER]: Handling {0} request for {1}", request.HttpMethod, path);
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
                IRequestHandler requestHandler;
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
                if (TryGetStreamHandler(handlerKey, out requestHandler))
 | 
			
		||||
                {
 | 
			
		||||
                    // Okay, so this is bad, but should be considered temporary until everything is IStreamHandler.
 | 
			
		||||
| 
						 | 
				
			
			@ -156,13 +156,13 @@ namespace OpenSim.Framework.Servers
 | 
			
		|||
                    if (requestHandler is IStreamedRequestHandler)
 | 
			
		||||
                    {
 | 
			
		||||
                        IStreamedRequestHandler streamedRequestHandler = requestHandler as IStreamedRequestHandler;
 | 
			
		||||
                                          
 | 
			
		||||
 | 
			
		||||
                        buffer = streamedRequestHandler.Handle(path, request.InputStream);
 | 
			
		||||
                    }
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        IStreamHandler streamHandler = (IStreamHandler) requestHandler;
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
                        using (MemoryStream memoryStream = new MemoryStream())
 | 
			
		||||
                        {
 | 
			
		||||
                            streamHandler.Handle(path, request.InputStream, memoryStream);
 | 
			
		||||
| 
						 | 
				
			
			@ -170,11 +170,11 @@ namespace OpenSim.Framework.Servers
 | 
			
		|||
                            buffer = memoryStream.ToArray();
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
                    request.InputStream.Close();
 | 
			
		||||
                    response.ContentType = requestHandler.ContentType;
 | 
			
		||||
                    response.ContentLength64 = buffer.LongLength;
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
                    try
 | 
			
		||||
                    {
 | 
			
		||||
                        response.OutputStream.Write(buffer, 0, buffer.Length);
 | 
			
		||||
| 
						 | 
				
			
			@ -273,7 +273,7 @@ namespace OpenSim.Framework.Servers
 | 
			
		|||
                return true;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Try all the registered xmlrpc handlers when an xmlrpc request is received.
 | 
			
		||||
        /// Sends back an XMLRPC unknown request response if no handler is registered for the requested method.
 | 
			
		||||
| 
						 | 
				
			
			@ -434,7 +434,7 @@ namespace OpenSim.Framework.Servers
 | 
			
		|||
        {
 | 
			
		||||
            // This is a test.  There's a workable alternative..  as this way sucks.
 | 
			
		||||
            // We'd like to put this into a text file parhaps that's easily editable.
 | 
			
		||||
            // 
 | 
			
		||||
            //
 | 
			
		||||
            // For this test to work, I used the following secondlife.exe parameters
 | 
			
		||||
            // "C:\Program Files\SecondLifeWindLight\SecondLifeWindLight.exe" -settings settings_windlight.xml -channel "Second Life WindLight"  -set SystemLanguage en-us -loginpage http://10.1.1.2:8002/?show_login_form=TRUE -loginuri http://10.1.1.2:8002 -user 10.1.1.2
 | 
			
		||||
            //
 | 
			
		||||
| 
						 | 
				
			
			@ -461,7 +461,7 @@ namespace OpenSim.Framework.Servers
 | 
			
		|||
            string[] querystringkeys = request.QueryString.AllKeys;
 | 
			
		||||
            string[] rHeaders = request.Headers.AllKeys;
 | 
			
		||||
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            foreach (string queryname in querystringkeys)
 | 
			
		||||
            {
 | 
			
		||||
                keysvals.Add(queryname, request.QueryString[queryname]);
 | 
			
		||||
| 
						 | 
				
			
			@ -489,7 +489,7 @@ namespace OpenSim.Framework.Servers
 | 
			
		|||
                {
 | 
			
		||||
                    Hashtable responsedata = requestprocessor(keysvals);
 | 
			
		||||
                    DoHTTPGruntWork(responsedata,response);
 | 
			
		||||
                       
 | 
			
		||||
 | 
			
		||||
                    //SendHTML500(response);
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
| 
						 | 
				
			
			@ -519,7 +519,7 @@ namespace OpenSim.Framework.Servers
 | 
			
		|||
                contentType = "text/html";
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // We're forgoing the usual error status codes here because the client 
 | 
			
		||||
            // We're forgoing the usual error status codes here because the client
 | 
			
		||||
            // ignores anything but 200 and 301
 | 
			
		||||
 | 
			
		||||
            response.StatusCode = 200;
 | 
			
		||||
| 
						 | 
				
			
			@ -649,10 +649,10 @@ namespace OpenSim.Framework.Servers
 | 
			
		|||
 | 
			
		||||
        public void RemoveStreamHandler(string httpMethod, string path)
 | 
			
		||||
        {
 | 
			
		||||
            string handlerKey = GetHandlerKey(httpMethod, path);            
 | 
			
		||||
            
 | 
			
		||||
            string handlerKey = GetHandlerKey(httpMethod, path);
 | 
			
		||||
 | 
			
		||||
            //m_log.DebugFormat("[BASE HTTP SERVER]: Removing handler key {0}", handlerKey);
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            m_streamHandlers.Remove(handlerKey);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -660,7 +660,7 @@ namespace OpenSim.Framework.Servers
 | 
			
		|||
        {
 | 
			
		||||
            m_HTTPHandlers.Remove(GetHandlerKey(httpMethod, path));
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        public string GetHTTP404(string host)
 | 
			
		||||
        {
 | 
			
		||||
            string file = Path.Combine(Util.configDir(), "http_404.html");
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -44,16 +44,16 @@ namespace OpenSim.Framework.Servers
 | 
			
		|||
        {
 | 
			
		||||
            get { return m_httpServer; }
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Holds the non-viewer statistics collection object for this service/server
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        protected IStatsCollector m_stats;
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        public BaseOpenSimServer()
 | 
			
		||||
        {
 | 
			
		||||
            m_startuptime = DateTime.Now;
 | 
			
		||||
        }    
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Should be overriden by descendents if they need to perform extra shutdown processing
 | 
			
		||||
| 
						 | 
				
			
			@ -66,7 +66,7 @@ namespace OpenSim.Framework.Servers
 | 
			
		|||
            }
 | 
			
		||||
            Environment.Exit(0);
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Runs commands issued by the server console from the operator
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -75,17 +75,17 @@ namespace OpenSim.Framework.Servers
 | 
			
		|||
        public virtual void RunCmd(string command, string[] cmdparams)
 | 
			
		||||
        {
 | 
			
		||||
            switch (command)
 | 
			
		||||
            {      
 | 
			
		||||
            {
 | 
			
		||||
                case "help":
 | 
			
		||||
                    Notice("quit - equivalent to shutdown.");
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                    if (m_stats != null)
 | 
			
		||||
                        Notice("show stats - statistical information for this server");
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                    Notice("show uptime - show server startup and uptime.");
 | 
			
		||||
                    Notice("shutdown - shutdown the server.\n");
 | 
			
		||||
                    break;
 | 
			
		||||
                    
 | 
			
		||||
 | 
			
		||||
                case "show":
 | 
			
		||||
                    if (cmdparams.Length > 0)
 | 
			
		||||
                    {
 | 
			
		||||
| 
						 | 
				
			
			@ -96,10 +96,10 @@ namespace OpenSim.Framework.Servers
 | 
			
		|||
                case "quit":
 | 
			
		||||
                case "shutdown":
 | 
			
		||||
                    Shutdown();
 | 
			
		||||
                    break;                   
 | 
			
		||||
                    break;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Outputs to the console information about the region
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -107,18 +107,18 @@ namespace OpenSim.Framework.Servers
 | 
			
		|||
        public virtual void Show(string ShowWhat)
 | 
			
		||||
        {
 | 
			
		||||
            switch (ShowWhat)
 | 
			
		||||
            {                                    
 | 
			
		||||
            {
 | 
			
		||||
                case "stats":
 | 
			
		||||
                    if (m_stats != null)
 | 
			
		||||
                    {
 | 
			
		||||
                        Notice(m_stats.Report());
 | 
			
		||||
                    }
 | 
			
		||||
                    break; 
 | 
			
		||||
                
 | 
			
		||||
                    break;
 | 
			
		||||
 | 
			
		||||
                case "uptime":
 | 
			
		||||
                    Notice("Server has been running since " + m_startuptime.DayOfWeek + ", " + m_startuptime.ToString());
 | 
			
		||||
                    Notice("That is an elapsed time of " + (DateTime.Now - m_startuptime).ToString());
 | 
			
		||||
                    break;                    
 | 
			
		||||
                    break;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -38,12 +38,12 @@ namespace OpenSim.Framework.Servers
 | 
			
		|||
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// Makes an asynchronous REST request with a callback to invoke with the response.
 | 
			
		||||
    /// </summary>    
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    public class RestObjectPosterResponse<TResponse>
 | 
			
		||||
    {
 | 
			
		||||
//        private static readonly log4net.ILog m_log 
 | 
			
		||||
//        private static readonly log4net.ILog m_log
 | 
			
		||||
//            = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        public ReturnResponse<TResponse> ResponseCallback;
 | 
			
		||||
 | 
			
		||||
        public void BeginPostObject<TRequest>(string requestUrl, TRequest obj)
 | 
			
		||||
| 
						 | 
				
			
			@ -87,11 +87,11 @@ namespace OpenSim.Framework.Servers
 | 
			
		|||
                TResponse deserial;
 | 
			
		||||
                XmlSerializer deserializer = new XmlSerializer(typeof (TResponse));
 | 
			
		||||
                Stream stream = resp.GetResponseStream();
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                // This is currently a bad debug stanza since it gobbles us the response...
 | 
			
		||||
//                StreamReader reader = new StreamReader(stream);
 | 
			
		||||
//                m_log.DebugFormat("[REST OBJECT POSTER RESPONSE]: Received {0}", reader.ReadToEnd());
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                deserial = (TResponse) deserializer.Deserialize(stream);
 | 
			
		||||
 | 
			
		||||
                if (deserial != null && ResponseCallback != null)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -34,7 +34,7 @@ namespace OpenSim.Framework.Servers
 | 
			
		|||
    {
 | 
			
		||||
        private RestMethod m_restMethod;
 | 
			
		||||
 | 
			
		||||
        public RestMethod Method 
 | 
			
		||||
        public RestMethod Method
 | 
			
		||||
        {
 | 
			
		||||
            get { return m_restMethod; }
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -75,7 +75,7 @@ namespace OpenSim.Framework.Servers
 | 
			
		|||
            using (WebResponse resp = request.GetResponse())
 | 
			
		||||
            {
 | 
			
		||||
                XmlSerializer deserializer = new XmlSerializer(typeof (TResponse));
 | 
			
		||||
                deserial = (TResponse) deserializer.Deserialize(resp.GetResponseStream());                
 | 
			
		||||
                deserial = (TResponse) deserializer.Deserialize(resp.GetResponseStream());
 | 
			
		||||
            }
 | 
			
		||||
            return deserial;
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -37,35 +37,35 @@ namespace OpenSim.Framework.Statistics
 | 
			
		|||
    {
 | 
			
		||||
        private Timer ageStatsTimer = new Timer(24 * 60 * 60 * 1000);
 | 
			
		||||
        private DateTime startTime = DateTime.Now;
 | 
			
		||||
        
 | 
			
		||||
        private long assetRequestsToday;    
 | 
			
		||||
 | 
			
		||||
        private long assetRequestsToday;
 | 
			
		||||
        private long assetRequestsNotFoundToday;
 | 
			
		||||
        private long assetRequestsYesterday;
 | 
			
		||||
        private long assetRequestsNotFoundYesterday;
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        public long AssetRequestsToday { get { return assetRequestsToday; } }
 | 
			
		||||
        public long AssetRequestsNotFoundToday { get { return assetRequestsNotFoundToday; } }        
 | 
			
		||||
        public long AssetRequestsNotFoundToday { get { return assetRequestsNotFoundToday; } }
 | 
			
		||||
        public long AssetRequestsYesterday { get { return assetRequestsYesterday; } }
 | 
			
		||||
        public long AssetRequestsNotFoundYesterday { get { return assetRequestsNotFoundYesterday; } }        
 | 
			
		||||
        
 | 
			
		||||
        public long AssetRequestsNotFoundYesterday { get { return assetRequestsNotFoundYesterday; } }
 | 
			
		||||
 | 
			
		||||
        public AssetStatsCollector()
 | 
			
		||||
        {
 | 
			
		||||
            ageStatsTimer.Elapsed += new ElapsedEventHandler(OnAgeing);
 | 
			
		||||
            ageStatsTimer.Enabled = true;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        private void OnAgeing(object source, ElapsedEventArgs e)
 | 
			
		||||
        {
 | 
			
		||||
            assetRequestsYesterday = assetRequestsToday;
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            // There is a possibility that an asset request could occur between the execution of these
 | 
			
		||||
            // two statements.  But we're better off without the synchronization overhead.
 | 
			
		||||
            assetRequestsToday = 0;   
 | 
			
		||||
            
 | 
			
		||||
            assetRequestsToday = 0;
 | 
			
		||||
 | 
			
		||||
            assetRequestsNotFoundYesterday = assetRequestsNotFoundToday;
 | 
			
		||||
            assetRequestsNotFoundToday = 0;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Record that an asset request failed to find an asset
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -73,7 +73,7 @@ namespace OpenSim.Framework.Statistics
 | 
			
		|||
        {
 | 
			
		||||
            assetRequestsNotFoundToday++;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Record that a request was made to the asset server
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -90,10 +90,10 @@ namespace OpenSim.Framework.Statistics
 | 
			
		|||
        {
 | 
			
		||||
            double elapsedHours = (DateTime.Now - startTime).TotalHours;
 | 
			
		||||
            if (elapsedHours <= 0) { elapsedHours = 1; }  // prevent divide by zero
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            long assetRequestsTodayPerHour = (long)Math.Round(AssetRequestsToday / elapsedHours);
 | 
			
		||||
            long assetRequestsYesterdayPerHour = (long)Math.Round(AssetRequestsYesterday / 24.0);
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            return string.Format(
 | 
			
		||||
@"Asset requests today     : {0}  ({1} per hour)  of which {2} were not found
 | 
			
		||||
Asset requests yesterday : {3}  ({4} per hour)  of which {5} were not found",
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -26,7 +26,7 @@
 | 
			
		|||
 */
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Framework.Statistics
 | 
			
		||||
{    
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// Implemented by classes which collect up non-viewer statistical information
 | 
			
		||||
    /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -36,6 +36,6 @@ namespace OpenSim.Framework.Statistics
 | 
			
		|||
        /// Report back collected statistical information.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        string Report();        
 | 
			
		||||
        string Report();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -32,20 +32,20 @@ using libsecondlife;
 | 
			
		|||
using OpenSim.Framework.Statistics.Interfaces;
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Framework.Statistics
 | 
			
		||||
{  
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// Collects sim statistics which aren't already being collected for the linden viewer's statistics pane
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    public class SimExtraStatsCollector : IStatsCollector
 | 
			
		||||
    {        
 | 
			
		||||
    {
 | 
			
		||||
        private long assetsInCache;
 | 
			
		||||
        private long texturesInCache;        
 | 
			
		||||
        private long texturesInCache;
 | 
			
		||||
        private long assetCacheMemoryUsage;
 | 
			
		||||
        private long textureCacheMemoryUsage;
 | 
			
		||||
        private long blockedMissingTextureRequests;
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        private long inventoryServiceRetrievalFailures;
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        public long AssetsInCache { get { return assetsInCache; } }
 | 
			
		||||
        public long TexturesInCache { get { return texturesInCache; } }
 | 
			
		||||
        public long AssetCacheMemoryUsage { get { return assetCacheMemoryUsage; } }
 | 
			
		||||
| 
						 | 
				
			
			@ -58,47 +58,47 @@ namespace OpenSim.Framework.Statistics
 | 
			
		|||
        /// driver bugs on clients (though this seems less likely).
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public long BlockedMissingTextureRequests { get { return blockedMissingTextureRequests; } }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Number of known failures to retrieve avatar inventory from the inventory service.  This does not
 | 
			
		||||
        /// cover situations where the inventory service accepts the request but never returns any data, since
 | 
			
		||||
        /// we do not yet timeout this situation.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public long InventoryServiceRetrievalFailures { get { return inventoryServiceRetrievalFailures; } }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Retain a dictionary of all packet queues stats reporters
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        private IDictionary<LLUUID, PacketQueueStatsCollector> packetQueueStatsCollectors
 | 
			
		||||
            = new Dictionary<LLUUID, PacketQueueStatsCollector>();
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        public void AddAsset(AssetBase asset)
 | 
			
		||||
        {
 | 
			
		||||
            assetsInCache++;
 | 
			
		||||
            assetCacheMemoryUsage += asset.Data.Length;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        public void AddTexture(AssetBase image)
 | 
			
		||||
        {
 | 
			
		||||
            if (image.Data != null)
 | 
			
		||||
            {
 | 
			
		||||
                texturesInCache++;
 | 
			
		||||
                
 | 
			
		||||
 | 
			
		||||
                // This could have been a pull stat, though there was originally a nebulous idea to measure flow rates
 | 
			
		||||
                textureCacheMemoryUsage += image.Data.Length;
 | 
			
		||||
            }
 | 
			
		||||
        }  
 | 
			
		||||
        
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void AddBlockedMissingTextureRequest()
 | 
			
		||||
        {
 | 
			
		||||
            blockedMissingTextureRequests++;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        public void AddInventoryServiceRetrievalFailure()
 | 
			
		||||
        {
 | 
			
		||||
            inventoryServiceRetrievalFailures++;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Register as a packet queue stats provider
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -111,7 +111,7 @@ namespace OpenSim.Framework.Statistics
 | 
			
		|||
                packetQueueStatsCollectors[uuid] = new PacketQueueStatsCollector(provider);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Deregister a packet queue stats provider
 | 
			
		||||
        /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -129,25 +129,25 @@ namespace OpenSim.Framework.Statistics
 | 
			
		|||
        /// </summary>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        public string Report()
 | 
			
		||||
        {    
 | 
			
		||||
        {
 | 
			
		||||
            StringBuilder sb = new StringBuilder(Environment.NewLine);
 | 
			
		||||
            sb.Append("ASSET STATISTICS");
 | 
			
		||||
            sb.Append(Environment.NewLine);            
 | 
			
		||||
            sb.Append(Environment.NewLine);
 | 
			
		||||
            sb.Append(
 | 
			
		||||
                string.Format(
 | 
			
		||||
@"Asset   cache contains {0,6} assets   using {1,10:0.000}K" + Environment.NewLine,
 | 
			
		||||
                    AssetsInCache, AssetCacheMemoryUsage / 1024.0));
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            sb.Append(Environment.NewLine);
 | 
			
		||||
            sb.Append("TEXTURE STATISTICS");
 | 
			
		||||
            sb.Append(Environment.NewLine);            
 | 
			
		||||
            sb.Append(Environment.NewLine);
 | 
			
		||||
            sb.Append(
 | 
			
		||||
                string.Format(
 | 
			
		||||
@"Texture cache contains {0,6} textures using {1,10:0.000}K
 | 
			
		||||
Blocked requests for missing textures: {2}" + Environment.NewLine,
 | 
			
		||||
                    TexturesInCache, TextureCacheMemoryUsage / 1024.0,
 | 
			
		||||
                    BlockedMissingTextureRequests));            
 | 
			
		||||
            
 | 
			
		||||
                    BlockedMissingTextureRequests));
 | 
			
		||||
 | 
			
		||||
            sb.Append(Environment.NewLine);
 | 
			
		||||
            sb.Append("INVENTORY STATISTICS");
 | 
			
		||||
            sb.Append(Environment.NewLine);
 | 
			
		||||
| 
						 | 
				
			
			@ -155,26 +155,26 @@ Blocked requests for missing textures: {2}" + Environment.NewLine,
 | 
			
		|||
                string.Format(
 | 
			
		||||
                    "Initial inventory caching failures: {0}" + Environment.NewLine,
 | 
			
		||||
                    InventoryServiceRetrievalFailures));
 | 
			
		||||
                                    
 | 
			
		||||
 | 
			
		||||
            sb.Append(Environment.NewLine);
 | 
			
		||||
            sb.Append("PACKET QUEUE STATISTICS");
 | 
			
		||||
            sb.Append(Environment.NewLine);
 | 
			
		||||
            sb.Append("Agent UUID                          ");
 | 
			
		||||
            sb.Append(
 | 
			
		||||
                string.Format(
 | 
			
		||||
                    "  {0,7}  {1,7}  {2,7}  {3,7}  {4,7}  {5,7}  {6,7}  {7,7}  {8,7}  {9,7}", 
 | 
			
		||||
                    "  {0,7}  {1,7}  {2,7}  {3,7}  {4,7}  {5,7}  {6,7}  {7,7}  {8,7}  {9,7}",
 | 
			
		||||
                    "Send", "In", "Out", "Resend", "Land", "Wind", "Cloud", "Task", "Texture", "Asset"));
 | 
			
		||||
            sb.Append(Environment.NewLine);            
 | 
			
		||||
                
 | 
			
		||||
            sb.Append(Environment.NewLine);
 | 
			
		||||
 | 
			
		||||
            foreach (LLUUID key in packetQueueStatsCollectors.Keys)
 | 
			
		||||
            {
 | 
			
		||||
                sb.Append(string.Format("{0}: ", key));
 | 
			
		||||
                sb.Append(packetQueueStatsCollectors[key].Report());
 | 
			
		||||
                sb.Append(Environment.NewLine);
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            return sb.ToString();
 | 
			
		||||
        }        
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// <summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -183,16 +183,16 @@ Blocked requests for missing textures: {2}" + Environment.NewLine,
 | 
			
		|||
    public class PacketQueueStatsCollector : IStatsCollector
 | 
			
		||||
    {
 | 
			
		||||
        private IPullStatsProvider m_statsProvider;
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        public PacketQueueStatsCollector(IPullStatsProvider provider)
 | 
			
		||||
        {
 | 
			
		||||
            m_statsProvider = provider;    
 | 
			
		||||
            m_statsProvider = provider;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Report back collected statistical information.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <returns></returns>        
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        public string Report()
 | 
			
		||||
        {
 | 
			
		||||
            return m_statsProvider.GetStats();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -26,7 +26,7 @@
 | 
			
		|||
 */
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Framework.Statistics
 | 
			
		||||
{    
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// Singleton used to provide access to statistics reporters
 | 
			
		||||
    /// </summary>
 | 
			
		||||
| 
						 | 
				
			
			@ -34,44 +34,44 @@ namespace OpenSim.Framework.Statistics
 | 
			
		|||
    {
 | 
			
		||||
        private static AssetStatsCollector assetStats;
 | 
			
		||||
        private static UserStatsCollector userStats;
 | 
			
		||||
        private static SimExtraStatsCollector simExtraStats;                
 | 
			
		||||
        
 | 
			
		||||
        private static SimExtraStatsCollector simExtraStats;
 | 
			
		||||
 | 
			
		||||
        public static AssetStatsCollector AssetStats { get { return assetStats; } }
 | 
			
		||||
        public static UserStatsCollector UserStats { get { return userStats; } }
 | 
			
		||||
        public static SimExtraStatsCollector SimExtraStats { get { return simExtraStats; } }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        private StatsManager() {}
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Start collecting statistics related to assets.
 | 
			
		||||
        /// Should only be called once.
 | 
			
		||||
        /// </summary>        
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public static AssetStatsCollector StartCollectingAssetStats()
 | 
			
		||||
        {
 | 
			
		||||
            assetStats = new AssetStatsCollector();
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            return assetStats;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Start collecting statistics related to users.
 | 
			
		||||
        /// Should only be called once.
 | 
			
		||||
        /// </summary>        
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public static UserStatsCollector StartCollectingUserStats()
 | 
			
		||||
        {
 | 
			
		||||
            userStats = new UserStatsCollector();
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            return userStats;
 | 
			
		||||
        }        
 | 
			
		||||
        
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Start collecting extra sim statistics apart from those collected for the client.  
 | 
			
		||||
        /// Start collecting extra sim statistics apart from those collected for the client.
 | 
			
		||||
        /// Should only be called once.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public static SimExtraStatsCollector StartCollectingSimExtraStats()
 | 
			
		||||
        {
 | 
			
		||||
            simExtraStats = new SimExtraStatsCollector();
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            return simExtraStats;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -35,43 +35,43 @@ namespace OpenSim.Framework.Statistics
 | 
			
		|||
    public class UserStatsCollector : IStatsCollector
 | 
			
		||||
    {
 | 
			
		||||
        private Timer ageStatsTimer = new Timer(24 * 60 * 60 * 1000);
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        private int successfulLoginsToday;
 | 
			
		||||
        public int SuccessfulLoginsToday { get { return successfulLoginsToday; } }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        private int successfulLoginsYesterday;
 | 
			
		||||
        public int SuccessfulLoginsYesterday { get { return successfulLoginsYesterday; } }    
 | 
			
		||||
        
 | 
			
		||||
        public int SuccessfulLoginsYesterday { get { return successfulLoginsYesterday; } }
 | 
			
		||||
 | 
			
		||||
        private int successfulLogins;
 | 
			
		||||
        public int SuccessfulLogins { get { return successfulLogins; } }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        private int logouts;
 | 
			
		||||
        public int Logouts { get { return logouts; } }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        public UserStatsCollector()
 | 
			
		||||
        {
 | 
			
		||||
            ageStatsTimer.Elapsed += new ElapsedEventHandler(OnAgeing);
 | 
			
		||||
            ageStatsTimer.Enabled = true;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        private void OnAgeing(object source, ElapsedEventArgs e)
 | 
			
		||||
        {
 | 
			
		||||
            successfulLoginsYesterday = successfulLoginsToday;
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            // There is a possibility that an asset request could occur between the execution of these
 | 
			
		||||
            // two statements.  But we're better off without the synchronization overhead.
 | 
			
		||||
            successfulLoginsToday = 0;            
 | 
			
		||||
            successfulLoginsToday = 0;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Record a successful login
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        public void AddSuccessfulLogin()
 | 
			
		||||
        {
 | 
			
		||||
            successfulLogins++;            
 | 
			
		||||
            successfulLogins++;
 | 
			
		||||
            successfulLoginsToday++;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
 | 
			
		||||
        public void AddLogout()
 | 
			
		||||
        {
 | 
			
		||||
            logouts++;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -38,7 +38,7 @@ namespace OpenSim.Framework
 | 
			
		|||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// A dictionary for task inventory.
 | 
			
		||||
    /// 
 | 
			
		||||
    ///
 | 
			
		||||
    /// This class is not thread safe.  Callers must synchronize on Dictionary methods.
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    public class TaskInventoryDictionary : Dictionary<LLUUID, TaskInventoryItem>,
 | 
			
		||||
| 
						 | 
				
			
			@ -72,10 +72,10 @@ namespace OpenSim.Framework
 | 
			
		|||
        //
 | 
			
		||||
        // System.TypeInitializationException: An exception was thrown by the type initializer for OpenSim.Framework.TaskInventoryDictionary ---> System.ArgumentOutOfRangeException: < 0
 | 
			
		||||
        // Parameter name: length
 | 
			
		||||
        //   at System.String.Substring (Int32 startIndex, Int32 length) [0x00088] in /build/buildd/mono-1.2.4/mcs/class/corlib/System/String.cs:381 
 | 
			
		||||
        //   at System.Xml.Serialization.TypeTranslator.GetTypeData (System.Type runtimeType, System.String xmlDataType) [0x001f6] in /build/buildd/mono-1.2.4/mcs/class/System.XML/System.Xml.Serialization/TypeTranslator.cs:217        
 | 
			
		||||
        //   at System.String.Substring (Int32 startIndex, Int32 length) [0x00088] in /build/buildd/mono-1.2.4/mcs/class/corlib/System/String.cs:381
 | 
			
		||||
        //   at System.Xml.Serialization.TypeTranslator.GetTypeData (System.Type runtimeType, System.String xmlDataType) [0x001f6] in /build/buildd/mono-1.2.4/mcs/class/System.XML/System.Xml.Serialization/TypeTranslator.cs:217
 | 
			
		||||
        // ...
 | 
			
		||||
//        private static XmlSerializer tiiSerializer 
 | 
			
		||||
//        private static XmlSerializer tiiSerializer
 | 
			
		||||
//            = new XmlSerializer(typeof(Dictionary<LLUUID, TaskInventoryItem>.ValueCollection));
 | 
			
		||||
 | 
			
		||||
        // see IXmlSerializable
 | 
			
		||||
| 
						 | 
				
			
			@ -110,7 +110,7 @@ namespace OpenSim.Framework
 | 
			
		|||
                m_log.DebugFormat("[TASK INVENTORY]: Skipping empty element {0}", reader.Name);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // For some .net implementations, this last read is necessary so that we advance beyond the end tag 
 | 
			
		||||
            // For some .net implementations, this last read is necessary so that we advance beyond the end tag
 | 
			
		||||
            // of the element wrapping this object so that the rest of the serialization can complete normally.
 | 
			
		||||
            reader.Read();
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -221,7 +221,7 @@ namespace OpenSim.Framework
 | 
			
		|||
        public uint NextOwnerMask = FULL_MASK_PERMISSIONS_GENERAL;
 | 
			
		||||
        public LLUUID OwnerID = LLUUID.Zero;
 | 
			
		||||
        public uint OwnerMask = FULL_MASK_PERMISSIONS_GENERAL;
 | 
			
		||||
        public LLUUID ParentID = LLUUID.Zero; //parent folder id 
 | 
			
		||||
        public LLUUID ParentID = LLUUID.Zero; //parent folder id
 | 
			
		||||
        public LLUUID ParentPartID = LLUUID.Zero;
 | 
			
		||||
        public LLUUID PermsGranter;
 | 
			
		||||
        public int PermsMask;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
Some files were not shown because too many files have changed in this diff Show More
		Loading…
	
		Reference in New Issue