aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs102
-rw-r--r--OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/XmlRpcGroupsServicesConnectorModule.cs42
2 files changed, 44 insertions, 100 deletions
diff --git a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs
index d5cbfd4..37e1ed4 100644
--- a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs
+++ b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs
@@ -281,10 +281,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
281 281
282 private void OnRequestAvatarProperties(IClientAPI remoteClient, UUID avatarID) 282 private void OnRequestAvatarProperties(IClientAPI remoteClient, UUID avatarID)
283 { 283 {
284 if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); 284 GroupMembershipData[] avatarGroups = m_groupData.GetAgentGroupMemberships(GetClientGroupRequestID(remoteClient), avatarID).ToArray();
285
286 //GroupMembershipData[] avatarGroups = m_groupData.GetAgentGroupMemberships(GetClientGroupRequestID(remoteClient), avatarID).ToArray();
287 GroupMembershipData[] avatarGroups = GetProfileListedGroupMemberships(remoteClient, avatarID);
288 remoteClient.SendAvatarGroupsReply(avatarID, avatarGroups); 285 remoteClient.SendAvatarGroupsReply(avatarID, avatarGroups);
289 } 286 }
290 287
@@ -488,7 +485,6 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
488 bucket[18] = 0; //dunno 485 bucket[18] = 0; //dunno
489 } 486 }
490 487
491
492 m_groupData.AddGroupNotice(GetClientGroupRequestID(remoteClient), GroupID, NoticeID, im.fromAgentName, Subject, Message, bucket); 488 m_groupData.AddGroupNotice(GetClientGroupRequestID(remoteClient), GroupID, NoticeID, im.fromAgentName, Subject, Message, bucket);
493 if (OnNewGroupNotice != null) 489 if (OnNewGroupNotice != null)
494 { 490 {
@@ -498,20 +494,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
498 // Send notice out to everyone that wants notices 494 // Send notice out to everyone that wants notices
499 foreach (GroupMembersData member in m_groupData.GetGroupMembers(GetClientGroupRequestID(remoteClient), GroupID)) 495 foreach (GroupMembersData member in m_groupData.GetGroupMembers(GetClientGroupRequestID(remoteClient), GroupID))
500 { 496 {
501 if (m_debugEnabled) 497 if (member.AcceptNotices)
502 {
503 UserProfileData targetUserProfile = m_sceneList[0].CommsManager.UserService.GetUserProfile(member.AgentID);
504 if (targetUserProfile != null)
505 {
506 m_log.DebugFormat("[GROUPS]: Prepping group notice {0} for agent: {1} who Accepts Notices ({2})", NoticeID, targetUserProfile.Name, member.AcceptNotices);
507 }
508 else
509 {
510 m_log.DebugFormat("[GROUPS]: Prepping group notice {0} for agent: {1} who Accepts Notices ({2})", NoticeID, member.AgentID, member.AcceptNotices);
511 }
512 }
513
514 if (member.AcceptNotices)
515 { 498 {
516 // Build notice IIM 499 // Build notice IIM
517 GridInstantMessage msg = CreateGroupNoticeIM(UUID.Zero, NoticeID, (byte)OpenMetaverse.InstantMessageDialog.GroupNotice); 500 GridInstantMessage msg = CreateGroupNoticeIM(UUID.Zero, NoticeID, (byte)OpenMetaverse.InstantMessageDialog.GroupNotice);
@@ -631,6 +614,13 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
631 if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); 614 if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name);
632 615
633 List<GroupMembersData> data = m_groupData.GetGroupMembers(GetClientGroupRequestID(remoteClient), groupID); 616 List<GroupMembersData> data = m_groupData.GetGroupMembers(GetClientGroupRequestID(remoteClient), groupID);
617 if (m_debugEnabled)
618 {
619 foreach (GroupMembersData member in data)
620 {
621 m_log.DebugFormat("[GROUPS]: {0} {1}", member.AgentID, member.Title);
622 }
623 }
634 624
635 return data; 625 return data;
636 626
@@ -642,6 +632,14 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
642 632
643 List<GroupRolesData> data = m_groupData.GetGroupRoles(GetClientGroupRequestID(remoteClient), groupID); 633 List<GroupRolesData> data = m_groupData.GetGroupRoles(GetClientGroupRequestID(remoteClient), groupID);
644 634
635 if (m_debugEnabled)
636 {
637 foreach (GroupRolesData member in data)
638 {
639 m_log.DebugFormat("[GROUPS]: {0} {1}", member.Title, member.Members);
640 }
641 }
642
645 return data; 643 return data;
646 644
647 } 645 }
@@ -652,6 +650,14 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
652 650
653 List<GroupRoleMembersData> data = m_groupData.GetGroupRoleMembers(GetClientGroupRequestID(remoteClient), groupID); 651 List<GroupRoleMembersData> data = m_groupData.GetGroupRoleMembers(GetClientGroupRequestID(remoteClient), groupID);
654 652
653 if (m_debugEnabled)
654 {
655 foreach (GroupRoleMembersData member in data)
656 {
657 m_log.DebugFormat("[GROUPS]: Av: {0} Role: {1}", member.MemberID, member.RoleID);
658 }
659 }
660
655 return data; 661 return data;
656 662
657 663
@@ -802,7 +808,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
802 { 808 {
803 if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); 809 if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name);
804 810
805 // Security Checks are handled in the Groups Service. 811 // TODO: Security Checks?
806 812
807 GroupRequestID grID = GetClientGroupRequestID(remoteClient); 813 GroupRequestID grID = GetClientGroupRequestID(remoteClient);
808 814
@@ -819,11 +825,6 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
819 case OpenMetaverse.GroupRoleUpdate.UpdateAll: 825 case OpenMetaverse.GroupRoleUpdate.UpdateAll:
820 case OpenMetaverse.GroupRoleUpdate.UpdateData: 826 case OpenMetaverse.GroupRoleUpdate.UpdateData:
821 case OpenMetaverse.GroupRoleUpdate.UpdatePowers: 827 case OpenMetaverse.GroupRoleUpdate.UpdatePowers:
822 if (m_debugEnabled)
823 {
824 GroupPowers gp = (GroupPowers)powers;
825 m_log.DebugFormat("[GROUPS]: Role ({0}) updated with Powers ({1}) ({2})", name, powers.ToString(), gp.ToString());
826 }
827 m_groupData.UpdateGroupRole(grID, groupID, roleID, name, description, title, powers); 828 m_groupData.UpdateGroupRole(grID, groupID, roleID, name, description, title, powers);
828 break; 829 break;
829 830
@@ -1194,16 +1195,6 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
1194 1195
1195 foreach (GroupMembershipData membership in data) 1196 foreach (GroupMembershipData membership in data)
1196 { 1197 {
1197 if (remoteClient.AgentId != dataForAgentID)
1198 {
1199 if (!membership.ListInProfile)
1200 {
1201 // If we're sending group info to remoteclient about another agent,
1202 // filter out groups the other agent doesn't want to share.
1203 continue;
1204 }
1205 }
1206
1207 OSDMap GroupDataMap = new OSDMap(6); 1198 OSDMap GroupDataMap = new OSDMap(6);
1208 OSDMap NewGroupDataMap = new OSDMap(1); 1199 OSDMap NewGroupDataMap = new OSDMap(1);
1209 1200
@@ -1290,46 +1281,11 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
1290 // to the core Groups Stub 1281 // to the core Groups Stub
1291 remoteClient.SendGroupMembership(new GroupMembershipData[0]); 1282 remoteClient.SendGroupMembership(new GroupMembershipData[0]);
1292 1283
1293 GroupMembershipData[] membershipArray = GetProfileListedGroupMemberships(remoteClient, dataForAgentID); 1284 GroupMembershipData[] membershipData = m_groupData.GetAgentGroupMemberships(GetClientGroupRequestID(remoteClient), dataForAgentID).ToArray();
1294 SendGroupMembershipInfoViaCaps(remoteClient, dataForAgentID, membershipArray);
1295 remoteClient.SendAvatarGroupsReply(dataForAgentID, membershipArray);
1296 1285
1297 } 1286 SendGroupMembershipInfoViaCaps(remoteClient, dataForAgentID, membershipData);
1298 1287 remoteClient.SendAvatarGroupsReply(dataForAgentID, membershipData);
1299 /// <summary>
1300 /// Get a list of groups memberships for the agent that are marked "ListInProfile"
1301 /// </summary>
1302 /// <param name="dataForAgentID"></param>
1303 /// <returns></returns>
1304 private GroupMembershipData[] GetProfileListedGroupMemberships(IClientAPI requestingClient, UUID dataForAgentID)
1305 {
1306 List<GroupMembershipData> membershipData = m_groupData.GetAgentGroupMemberships(GetClientGroupRequestID(requestingClient), dataForAgentID);
1307 GroupMembershipData[] membershipArray;
1308
1309 if (requestingClient.AgentId != dataForAgentID)
1310 {
1311 Predicate<GroupMembershipData> showInProfile = delegate(GroupMembershipData membership)
1312 {
1313 return membership.ListInProfile;
1314 };
1315
1316 membershipArray = membershipData.FindAll(showInProfile).ToArray();
1317 }
1318 else
1319 {
1320 membershipArray = membershipData.ToArray();
1321 }
1322
1323 if (m_debugEnabled)
1324 {
1325 m_log.InfoFormat("[GROUPS]: Get group membership information for {0} requested by {1}", dataForAgentID, requestingClient.AgentId);
1326 foreach (GroupMembershipData membership in membershipArray)
1327 {
1328 m_log.InfoFormat("[GROUPS]: {0} :: {1} - {2}", dataForAgentID, membership.GroupName, membership.GroupTitle);
1329 }
1330 }
1331 1288
1332 return membershipArray;
1333 } 1289 }
1334 1290
1335 private void SendAgentDataUpdate(IClientAPI remoteClient, UUID dataForAgentID, UUID activeGroupID, string activeGroupName, ulong activeGroupPowers, string activeGroupTitle) 1291 private void SendAgentDataUpdate(IClientAPI remoteClient, UUID dataForAgentID, UUID activeGroupID, string activeGroupName, ulong activeGroupPowers, string activeGroupTitle)
diff --git a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/XmlRpcGroupsServicesConnectorModule.cs b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/XmlRpcGroupsServicesConnectorModule.cs
index 805c3d4..b3eaa37 100644
--- a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/XmlRpcGroupsServicesConnectorModule.cs
+++ b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/XmlRpcGroupsServicesConnectorModule.cs
@@ -855,8 +855,16 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
855 IList parameters = new ArrayList(); 855 IList parameters = new ArrayList();
856 parameters.Add(param); 856 parameters.Add(param);
857 857
858 ConfigurableKeepAliveXmlRpcRequest req; 858 XmlRpcRequest req;
859 req = new ConfigurableKeepAliveXmlRpcRequest(function, parameters, m_disableKeepAlive); 859 if (!m_disableKeepAlive)
860 {
861 req = new XmlRpcRequest(function, parameters);
862 }
863 else
864 {
865 // This seems to solve a major problem on some windows servers
866 req = new NoKeepAliveXmlRpcRequest(function, parameters);
867 }
860 868
861 XmlRpcResponse resp = null; 869 XmlRpcResponse resp = null;
862 870
@@ -866,16 +874,10 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
866 } 874 }
867 catch (Exception e) 875 catch (Exception e)
868 { 876 {
869
870
871 m_log.ErrorFormat("[XMLRPCGROUPDATA]: An error has occured while attempting to access the XmlRpcGroups server method: {0}", function); 877 m_log.ErrorFormat("[XMLRPCGROUPDATA]: An error has occured while attempting to access the XmlRpcGroups server method: {0}", function);
872 m_log.ErrorFormat("[XMLRPCGROUPDATA]: {0} ", e.ToString()); 878 m_log.ErrorFormat("[XMLRPCGROUPDATA]: {0} ", e.ToString());
873 879
874 foreach( string ResponseLine in req.RequestResponse.Split(new string[] { Environment.NewLine },StringSplitOptions.None)) 880
875 {
876 m_log.ErrorFormat("[XMLRPCGROUPDATA]: {0} ", ResponseLine);
877 }
878
879 foreach (string key in param.Keys) 881 foreach (string key in param.Keys)
880 { 882 {
881 m_log.WarnFormat("[XMLRPCGROUPDATA]: {0} :: {1}", key, param[key].ToString()); 883 m_log.WarnFormat("[XMLRPCGROUPDATA]: {0} :: {1}", key, param[key].ToString());
@@ -959,24 +961,20 @@ namespace Nwc.XmlRpc
959 using System.Reflection; 961 using System.Reflection;
960 962
961 /// <summary>Class supporting the request side of an XML-RPC transaction.</summary> 963 /// <summary>Class supporting the request side of an XML-RPC transaction.</summary>
962 public class ConfigurableKeepAliveXmlRpcRequest : XmlRpcRequest 964 public class NoKeepAliveXmlRpcRequest : XmlRpcRequest
963 { 965 {
964 private Encoding _encoding = new ASCIIEncoding(); 966 private Encoding _encoding = new ASCIIEncoding();
965 private XmlRpcRequestSerializer _serializer = new XmlRpcRequestSerializer(); 967 private XmlRpcRequestSerializer _serializer = new XmlRpcRequestSerializer();
966 private XmlRpcResponseDeserializer _deserializer = new XmlRpcResponseDeserializer(); 968 private XmlRpcResponseDeserializer _deserializer = new XmlRpcResponseDeserializer();
967 private bool _disableKeepAlive = true;
968
969 public string RequestResponse = String.Empty;
970 969
971 /// <summary>Instantiate an <c>XmlRpcRequest</c> for a specified method and parameters.</summary> 970 /// <summary>Instantiate an <c>XmlRpcRequest</c> for a specified method and parameters.</summary>
972 /// <param name="methodName"><c>String</c> designating the <i>object.method</i> on the server the request 971 /// <param name="methodName"><c>String</c> designating the <i>object.method</i> on the server the request
973 /// should be directed to.</param> 972 /// should be directed to.</param>
974 /// <param name="parameters"><c>ArrayList</c> of XML-RPC type parameters to invoke the request with.</param> 973 /// <param name="parameters"><c>ArrayList</c> of XML-RPC type parameters to invoke the request with.</param>
975 public ConfigurableKeepAliveXmlRpcRequest(String methodName, IList parameters, bool disableKeepAlive) 974 public NoKeepAliveXmlRpcRequest(String methodName, IList parameters)
976 { 975 {
977 MethodName = methodName; 976 MethodName = methodName;
978 _params = parameters; 977 _params = parameters;
979 _disableKeepAlive = disableKeepAlive;
980 } 978 }
981 979
982 /// <summary>Send the request to the server.</summary> 980 /// <summary>Send the request to the server.</summary>
@@ -991,7 +989,7 @@ namespace Nwc.XmlRpc
991 request.Method = "POST"; 989 request.Method = "POST";
992 request.ContentType = "text/xml"; 990 request.ContentType = "text/xml";
993 request.AllowWriteStreamBuffering = true; 991 request.AllowWriteStreamBuffering = true;
994 request.KeepAlive = !_disableKeepAlive; 992 request.KeepAlive = false;
995 993
996 Stream stream = request.GetRequestStream(); 994 Stream stream = request.GetRequestStream();
997 XmlTextWriter xml = new XmlTextWriter(stream, _encoding); 995 XmlTextWriter xml = new XmlTextWriter(stream, _encoding);
@@ -1002,17 +1000,7 @@ namespace Nwc.XmlRpc
1002 HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 1000 HttpWebResponse response = (HttpWebResponse)request.GetResponse();
1003 StreamReader input = new StreamReader(response.GetResponseStream()); 1001 StreamReader input = new StreamReader(response.GetResponseStream());
1004 1002
1005 string inputXml = input.ReadToEnd(); 1003 XmlRpcResponse resp = (XmlRpcResponse)_deserializer.Deserialize(input);
1006 XmlRpcResponse resp;
1007 try
1008 {
1009 resp = (XmlRpcResponse)_deserializer.Deserialize(inputXml);
1010 }
1011 catch (Exception e)
1012 {
1013 RequestResponse = inputXml;
1014 throw e;
1015 }
1016 input.Close(); 1004 input.Close();
1017 response.Close(); 1005 response.Close();
1018 return resp; 1006 return resp;