From 2c8d25a11029429aa7b146e3c2be57093046dd15 Mon Sep 17 00:00:00 2001
From: unknown
Date: Fri, 14 May 2010 15:06:13 -0700
Subject: * Allows both old and new OpenSim.ini params for the XmlRpc Groups
 Service Connector

* Fix problem with RequestingAgentID not being sent correctly to server resulting in failed xmlrpc calls

* Improved debug output
---
 .../Avatar/XmlRpcGroups/GroupsModule.cs            | 24 +++++-
 .../XmlRpcGroupsServicesConnectorModule.cs         | 87 +++++++++++++++-------
 2 files changed, 80 insertions(+), 31 deletions(-)

(limited to 'OpenSim/Region/OptionalModules')

diff --git a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs
index edd5af7..3e05732 100644
--- a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs
+++ b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs
@@ -342,7 +342,13 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
 
         private void OnInstantMessage(IClientAPI remoteClient, GridInstantMessage im)
         {
-            if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name);
+            if (m_debugEnabled)
+            {
+                m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name);
+                m_log.DebugFormat("[GROUPS]: remoteClient ({0}) im ({1})", remoteClient, im);
+
+            }
+
 
             // Group invitations
             if ((im.dialog == (byte)InstantMessageDialog.GroupInvitationAccept) || (im.dialog == (byte)InstantMessageDialog.GroupInvitationDecline))
@@ -481,7 +487,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
                        if (member.AcceptNotices)
                         {
                             // Build notice IIM
-                            GridInstantMessage msg = CreateGroupNoticeIM(UUID.Zero, NoticeID, (byte)OpenMetaverse.InstantMessageDialog.GroupNotice);
+                            GridInstantMessage msg = CreateGroupNoticeIM(GetRequestingAgentID(remoteClient), NoticeID, (byte)OpenMetaverse.InstantMessageDialog.GroupNotice);
 
                             msg.toAgentID = member.AgentID.Guid;
                             OutgoingInstantMessage(msg, member.AgentID);
@@ -1024,12 +1030,22 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
 
         public void InviteGroupRequest(IClientAPI remoteClient, UUID groupID, UUID invitedAgentID, UUID roleID)
         {
-            if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name);
+            if (m_debugEnabled)
+            {
+                m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name);
+                m_log.DebugFormat("[GROUPS]: remoteClient({0}) groupID({0}) invitedAgentID({0}) roleID({0})", remoteClient, groupID, invitedAgentID, roleID);
+            }
+
 
             // Todo: Security check, probably also want to send some kind of notification
             UUID InviteID = UUID.Random();
 
-            m_groupData.AddAgentToGroupInvite(GetRequestingAgentID(remoteClient), InviteID, groupID, roleID, invitedAgentID);
+            UUID requestingAgentID = GetRequestingAgentID(remoteClient);
+            if (requestingAgentID == UUID.Zero)
+            {
+                m_log.Error("[GROUPS] Group Invite Requires a valid requesting agent to be specified");
+            }
+            m_groupData.AddAgentToGroupInvite(requestingAgentID, InviteID, groupID, roleID, invitedAgentID);
 
             // Check to see if the invite went through, if it did not then it's possible
             // the remoteClient did not validate or did not have permission to invite.
diff --git a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/XmlRpcGroupsServicesConnectorModule.cs b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/XmlRpcGroupsServicesConnectorModule.cs
index 2a60b00..861731c 100644
--- a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/XmlRpcGroupsServicesConnectorModule.cs
+++ b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/XmlRpcGroupsServicesConnectorModule.cs
@@ -40,6 +40,7 @@ using OpenMetaverse;
 using OpenMetaverse.StructuredData;
 
 using OpenSim.Framework;
+using OpenSim.Framework.Communications;
 using OpenSim.Region.Framework.Interfaces;
 
 namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
@@ -66,6 +67,11 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
         private string m_groupReadKey  = string.Empty;
         private string m_groupWriteKey = string.Empty;
 
+        private IUserService m_userService = null;
+        private CommunicationsManager m_commManager = null;
+
+        private bool m_debugEnabled = false;
+
 
         // Used to track which agents are have dropped from a group chat session
         // Should be reset per agent, on logon
@@ -110,7 +116,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
 
                 m_log.InfoFormat("[GROUPS-CONNECTOR]: Initializing {0}", this.Name);
 
-                m_groupsServerURI = groupsConfig.GetString("GroupsServerURI", string.Empty);
+                m_groupsServerURI = groupsConfig.GetString("GroupsServerURI", groupsConfig.GetString("XmlRpcServiceURL", string.Empty));
                 if ((m_groupsServerURI == null) ||
                     (m_groupsServerURI == string.Empty))
                 {
@@ -124,7 +130,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
                 m_groupReadKey = groupsConfig.GetString("XmlRpcServiceReadKey", string.Empty);
                 m_groupWriteKey = groupsConfig.GetString("XmlRpcServiceWriteKey", string.Empty);
 
-                
+                m_debugEnabled = groupsConfig.GetBoolean("DebugEnabled", true);
 
 
                 // If we got all the config options we need, lets start'er'up
@@ -142,6 +148,12 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
             if (m_connectorEnabled)
             {
                 scene.RegisterModuleInterface<IGroupsServicesConnector>(this);
+
+                if (m_userService == null)
+                {
+                    m_userService = scene.CommsManager.UserService;
+                    m_commManager = scene.CommsManager;
+                }
             }
         }
 
@@ -912,7 +924,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
             string UserService;
             UUID SessionID;
             GetClientGroupRequestID(requestingAgentID, out UserService, out SessionID);
-            param.Add("requestingAgentID", requestingAgentID.ToString());
+            param.Add("RequestingAgentID", requestingAgentID.ToString());
             param.Add("RequestingAgentUserService", UserService);
             param.Add("RequestingSessionID", SessionID.ToString());
             
@@ -920,6 +932,14 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
             param.Add("ReadKey", m_groupReadKey);
             param.Add("WriteKey", m_groupWriteKey);
 
+            if (m_debugEnabled)
+            {
+                m_log.Debug("[XMLRPCGROUPDATA] XmlRpcCall Params:");
+                foreach (string key in param.Keys)
+                {
+                    m_log.DebugFormat("[XMLRPCGROUPDATA] {0} : {1}", key, param[key]);
+                }
+            }
 
             IList parameters = new ArrayList();
             parameters.Add(param);
@@ -940,10 +960,13 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
                 m_log.ErrorFormat("[XMLRPCGROUPDATA]: An error has occured while attempting to access the XmlRpcGroups server method: {0}", function);
                 m_log.ErrorFormat("[XMLRPCGROUPDATA]: {0} ", e.ToString());
 
-                foreach (string ResponseLine in req.RequestResponse.Split(new string[] { Environment.NewLine },StringSplitOptions.None))
+                if ((req != null) && (req.RequestResponse != null))
+                {
+                    foreach (string ResponseLine in req.RequestResponse.Split(new string[] { Environment.NewLine }, StringSplitOptions.None))
                 {
                     m_log.ErrorFormat("[XMLRPCGROUPDATA]: {0} ", ResponseLine);
                 }
+                }
 
                 foreach (string key in param.Keys)
                 {
@@ -955,12 +978,13 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
                 return respData;
             }
 
+
             if (resp.Value is Hashtable)
             {
                 Hashtable respData = (Hashtable)resp.Value;
                 if (respData.Contains("error") && !respData.Contains("succeed"))
                 {
-                    LogRespDataToConsoleError(respData);
+                    LogRespDataToConsoleError(function, respData);
                 }
 
                 return respData;
@@ -988,18 +1012,26 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
             return error;
         }
 
-        private void LogRespDataToConsoleError(Hashtable respData)
+        private void LogRespDataToConsoleError(string function, Hashtable respData)
         {
+            m_log.ErrorFormat("[XMLRPCGROUPDATA]: Error data from XmlRpcGroups server method: {0}", function);
             m_log.Error("[XMLRPCGROUPDATA]: Error:");
 
             foreach (string key in respData.Keys)
             {
                 m_log.ErrorFormat("[XMLRPCGROUPDATA]: Key: {0}", key);
 
-                string[] lines = respData[key].ToString().Split(new char[] { '\n' });
-                foreach (string line in lines)
+                if ((respData != null) && (respData.ContainsKey(key)) && (respData[key]!=null))
+                {
+                    string[] lines = respData[key].ToString().Split(new char[] { '\n' });
+                    foreach (string line in lines)
+                    {
+                        m_log.ErrorFormat("[XMLRPCGROUPDATA]: {0}", line);
+                    }
+                }
+                else
                 {
-                    m_log.ErrorFormat("[XMLRPCGROUPDATA]: {0}", line);
+                    m_log.ErrorFormat("[XMLRPCGROUPDATA]: {0} : Empty/NULL", key);
                 }
 
             }
@@ -1015,23 +1047,17 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
         /// <returns></returns>
         private void GetClientGroupRequestID(UUID AgentID, out string UserServiceURL, out UUID SessionID)
         {
-            UserServiceURL = "";
-            SessionID = UUID.Zero;
-
+            // Default to local grid user service
+            UserServiceURL = m_commManager.NetworkServersInfo.UserURL; ;
 
-            // Need to rework this based on changes to User Services
-            /*
-            UserAccount userAccount = m_accountService.GetUserAccount(UUID.Zero,AgentID);
-            if (userAccount == null)
-            {
-                // This should be impossible.  If I've been passed a reference to a client
-                // that client should be registered with the UserService.  So something
-                // is horribly wrong somewhere.
+            // if AgentID == UUID, there will be no SessionID.  This will be true when
+            // the region is requesting information for region use (object permissions for example)
+            SessionID = UUID.Zero;
 
-                m_log.WarnFormat("[GROUPS]: Could not find a UserServiceURL for {0}", AgentID);
+            // Attempt to get User Profile, for  SessionID
+            UserProfileData userProfile = m_userService.GetUserProfile(AgentID);
 
-            }
-            else if (userProfile is ForeignUserProfileData)
+            if ((userProfile != null) && (userProfile is ForeignUserProfileData))
             {
                 // They aren't from around here
                 ForeignUserProfileData fupd = (ForeignUserProfileData)userProfile;
@@ -1039,13 +1065,20 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
                 SessionID = fupd.CurrentAgent.SessionID;
 
             }
-            else
+            else if (userProfile != null)
             {
-                // They're a local user, use this:
-                UserServiceURL = m_commManager.NetworkServersInfo.UserURL;
+                // Local, just use the local SessionID
                 SessionID = userProfile.CurrentAgent.SessionID;
             }
-            */
+            else if (AgentID != UUID.Zero)
+            {
+                // This should be impossible.  If I've been passed a reference to a client
+                // that client should be registered with the UserService.  So something
+                // is horribly wrong somewhere.
+
+                // m_log.WarnFormat("[XMLRPCGROUPDATA]: Could not find a UserServiceURL for {0}", AgentID);
+
+            }
         }
         
     }
-- 
cgit v1.1


From 992efdc28325fb87776c9bac777342a0379ebe8d Mon Sep 17 00:00:00 2001
From: Melanie Thielker
Date: Mon, 31 May 2010 01:02:04 +0200
Subject: Fix a nullref in EventManager caused by RegionReady not setting the
 scene

---
 .../OptionalModules/Scripting/RegionReadyModule/RegionReadyModule.cs     | 1 +
 1 file changed, 1 insertion(+)

(limited to 'OpenSim/Region/OptionalModules')

diff --git a/OpenSim/Region/OptionalModules/Scripting/RegionReadyModule/RegionReadyModule.cs b/OpenSim/Region/OptionalModules/Scripting/RegionReadyModule/RegionReadyModule.cs
index c653e98..672109b 100644
--- a/OpenSim/Region/OptionalModules/Scripting/RegionReadyModule/RegionReadyModule.cs
+++ b/OpenSim/Region/OptionalModules/Scripting/RegionReadyModule/RegionReadyModule.cs
@@ -146,6 +146,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.RegionReady
                 c.Position = new Vector3(((int)Constants.RegionSize * 0.5f), ((int)Constants.RegionSize * 0.5f), 30);
                 c.Sender = null;
                 c.SenderUUID = UUID.Zero;
+                c.Scene = m_scene;
 
                 m_log.InfoFormat("[RegionReady]: Region \"{0}\" is ready: \"{1}\" on channel {2}",
                                  m_scene.RegionInfo.RegionName, c.Message, m_channelNotify);
-- 
cgit v1.1