aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region
diff options
context:
space:
mode:
authorMelanie Thielker2016-07-04 03:37:45 +0100
committerMelanie Thielker2016-07-04 03:37:45 +0100
commit4468aa0dcfebb045bc54df1f67f021f85f9bc4b6 (patch)
treef52b7cf28acfe4bdbdff7ed7dfd112c6dd6b16fb /OpenSim/Region
parentFinally remove the requirement for an InventoryItem/FolderBase object to (diff)
parentNew config var: DisableObjectTransfer. If set to True, objects never cross; i... (diff)
downloadopensim-SC-4468aa0dcfebb045bc54df1f67f021f85f9bc4b6.zip
opensim-SC-4468aa0dcfebb045bc54df1f67f021f85f9bc4b6.tar.gz
opensim-SC-4468aa0dcfebb045bc54df1f67f021f85f9bc4b6.tar.bz2
opensim-SC-4468aa0dcfebb045bc54df1f67f021f85f9bc4b6.tar.xz
Merge branch 'master' of opensimulator.org:/var/git/opensim
Diffstat (limited to 'OpenSim/Region')
-rw-r--r--OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs6
-rw-r--r--OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueHelper.cs34
-rw-r--r--OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs252
-rw-r--r--OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs6
-rw-r--r--OpenSim/Region/Framework/Interfaces/IEventQueue.cs1
-rwxr-xr-xOpenSim/Region/Framework/Scenes/Scene.cs20
-rwxr-xr-xOpenSim/Region/Framework/Scenes/SceneGraph.cs19
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs1
-rw-r--r--OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs16
-rw-r--r--OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs15
-rw-r--r--OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/IGroupsServicesConnector.cs3
-rw-r--r--OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/XmlRpcGroupsServicesConnectorModule.cs30
-rw-r--r--OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs12
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs2
14 files changed, 227 insertions, 190 deletions
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs b/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs
index 9a1cef4..cc614f3 100644
--- a/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs
+++ b/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs
@@ -579,12 +579,6 @@ namespace OpenSim.Region.ClientStack.Linden
579 Enqueue(item, avatarID); 579 Enqueue(item, avatarID);
580 } 580 }
581 581
582 public void GroupMembership(AgentGroupDataUpdatePacket groupUpdate, UUID avatarID)
583 {
584 OSD item = EventQueueHelper.GroupMembership(groupUpdate);
585 Enqueue(item, avatarID);
586 }
587
588 public void GroupMembershipData(UUID receiverAgent, GroupMembershipData[] data) 582 public void GroupMembershipData(UUID receiverAgent, GroupMembershipData[] data)
589 { 583 {
590 OSD item = EventQueueHelper.GroupMembershipData(receiverAgent, data); 584 OSD item = EventQueueHelper.GroupMembershipData(receiverAgent, data);
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueHelper.cs b/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueHelper.cs
index 29d8b85..8beeb95 100644
--- a/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueHelper.cs
+++ b/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueHelper.cs
@@ -333,40 +333,6 @@ namespace OpenSim.Region.ClientStack.Linden
333 return chatterBoxSessionAgentListUpdates; 333 return chatterBoxSessionAgentListUpdates;
334 } 334 }
335 335
336 public static OSD GroupMembership(AgentGroupDataUpdatePacket groupUpdatePacket)
337 {
338 OSDMap groupUpdate = new OSDMap();
339 groupUpdate.Add("message", OSD.FromString("AgentGroupDataUpdate"));
340
341 OSDMap body = new OSDMap();
342 OSDArray agentData = new OSDArray();
343 OSDMap agentDataMap = new OSDMap();
344 agentDataMap.Add("AgentID", OSD.FromUUID(groupUpdatePacket.AgentData.AgentID));
345 agentData.Add(agentDataMap);
346 body.Add("AgentData", agentData);
347
348 OSDArray groupData = new OSDArray();
349
350 foreach (AgentGroupDataUpdatePacket.GroupDataBlock groupDataBlock in groupUpdatePacket.GroupData)
351 {
352 OSDMap groupDataMap = new OSDMap();
353 groupDataMap.Add("ListInProfile", OSD.FromBoolean(false));
354 groupDataMap.Add("GroupID", OSD.FromUUID(groupDataBlock.GroupID));
355 groupDataMap.Add("GroupInsigniaID", OSD.FromUUID(groupDataBlock.GroupInsigniaID));
356 groupDataMap.Add("Contribution", OSD.FromInteger(groupDataBlock.Contribution));
357 groupDataMap.Add("GroupPowers", OSD.FromBinary(ulongToByteArray(groupDataBlock.GroupPowers)));
358 groupDataMap.Add("GroupName", OSD.FromString(Utils.BytesToString(groupDataBlock.GroupName)));
359 groupDataMap.Add("AcceptNotices", OSD.FromBoolean(groupDataBlock.AcceptNotices));
360
361 groupData.Add(groupDataMap);
362
363 }
364 body.Add("GroupData", groupData);
365 groupUpdate.Add("body", body);
366
367 return groupUpdate;
368 }
369
370 public static OSD GroupMembershipData(UUID receiverAgent, GroupMembershipData[] data) 336 public static OSD GroupMembershipData(UUID receiverAgent, GroupMembershipData[] data)
371 { 337 {
372 OSDArray AgentData = new OSDArray(1); 338 OSDArray AgentData = new OSDArray(1);
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
index cc2d1e2..4a48a80 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
@@ -2755,44 +2755,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
2755 2755
2756 public void SendGroupMembership(GroupMembershipData[] GroupMembership) 2756 public void SendGroupMembership(GroupMembershipData[] GroupMembership)
2757 { 2757 {
2758 m_groupPowers.Clear();
2759 2758
2760 AgentGroupDataUpdatePacket Groupupdate = new AgentGroupDataUpdatePacket(); 2759 UpdateGroupMembership(GroupMembership);
2761 AgentGroupDataUpdatePacket.GroupDataBlock[] Groups = new AgentGroupDataUpdatePacket.GroupDataBlock[GroupMembership.Length]; 2760 SendAgentGroupDataUpdate(AgentId,GroupMembership);
2762 for (int i = 0; i < GroupMembership.Length; i++)
2763 {
2764 m_groupPowers[GroupMembership[i].GroupID] = GroupMembership[i].GroupPowers;
2765
2766 AgentGroupDataUpdatePacket.GroupDataBlock Group = new AgentGroupDataUpdatePacket.GroupDataBlock();
2767 Group.AcceptNotices = GroupMembership[i].AcceptNotices;
2768 Group.Contribution = GroupMembership[i].Contribution;
2769 Group.GroupID = GroupMembership[i].GroupID;
2770 Group.GroupInsigniaID = GroupMembership[i].GroupPicture;
2771 Group.GroupName = Util.StringToBytes256(GroupMembership[i].GroupName);
2772 Group.GroupPowers = GroupMembership[i].GroupPowers;
2773 Groups[i] = Group;
2774
2775
2776 }
2777 Groupupdate.GroupData = Groups;
2778 Groupupdate.AgentData = new AgentGroupDataUpdatePacket.AgentDataBlock();
2779 Groupupdate.AgentData.AgentID = AgentId;
2780 //OutPacket(Groupupdate, ThrottleOutPacketType.Task);
2781
2782 try
2783 {
2784 IEventQueue eq = Scene.RequestModuleInterface<IEventQueue>();
2785 if (eq != null)
2786 {
2787 eq.GroupMembership(Groupupdate, this.AgentId);
2788 }
2789 }
2790 catch (Exception ex)
2791 {
2792 m_log.Error("Unable to send group membership data via eventqueue - exception: " + ex.ToString());
2793 m_log.Warn("sending group membership data via UDP");
2794 OutPacket(Groupupdate, ThrottleOutPacketType.Task);
2795 }
2796 } 2761 }
2797 2762
2798 public void SendPartPhysicsProprieties(ISceneEntity entity) 2763 public void SendPartPhysicsProprieties(ISceneEntity entity)
@@ -3423,41 +3388,35 @@ namespace OpenSim.Region.ClientStack.LindenUDP
3423 3388
3424 public void SendAgentGroupDataUpdate(UUID avatarID, GroupMembershipData[] data) 3389 public void SendAgentGroupDataUpdate(UUID avatarID, GroupMembershipData[] data)
3425 { 3390 {
3391 if(avatarID != AgentId)
3392 m_log.Debug("[CLIENT]: SendAgentGroupDataUpdate avatarID != AgentId");
3393
3426 IEventQueue eq = this.Scene.RequestModuleInterface<IEventQueue>(); 3394 IEventQueue eq = this.Scene.RequestModuleInterface<IEventQueue>();
3427 3395 if(eq != null)
3428 // use UDP if no caps
3429 if (eq == null)
3430 { 3396 {
3431 SendGroupMembership(data); 3397 eq.GroupMembershipData(avatarID,data);
3432 } 3398 }
3433 3399 else
3434 OSDMap llsd = new OSDMap(3);
3435 OSDArray AgentData = new OSDArray(1);
3436 OSDMap AgentDataMap = new OSDMap(1);
3437 AgentDataMap.Add("AgentID", OSD.FromUUID(this.AgentId));
3438 AgentDataMap.Add("AvatarID", OSD.FromUUID(avatarID));
3439 AgentData.Add(AgentDataMap);
3440 llsd.Add("AgentData", AgentData);
3441 OSDArray GroupData = new OSDArray(data.Length);
3442 OSDArray NewGroupData = new OSDArray(data.Length);
3443 foreach (GroupMembershipData m in data)
3444 { 3400 {
3445 OSDMap GroupDataMap = new OSDMap(6); 3401 // use UDP if no caps
3446 OSDMap NewGroupDataMap = new OSDMap(1); 3402 AgentGroupDataUpdatePacket Groupupdate = new AgentGroupDataUpdatePacket();
3447 GroupDataMap.Add("GroupPowers", OSD.FromULong(m.GroupPowers)); 3403 AgentGroupDataUpdatePacket.GroupDataBlock[] Groups = new AgentGroupDataUpdatePacket.GroupDataBlock[data.Length];
3448 GroupDataMap.Add("AcceptNotices", OSD.FromBoolean(m.AcceptNotices)); 3404 for (int i = 0; i < data.Length; i++)
3449 GroupDataMap.Add("GroupTitle", OSD.FromString(m.GroupTitle)); 3405 {
3450 GroupDataMap.Add("GroupID", OSD.FromUUID(m.GroupID)); 3406 AgentGroupDataUpdatePacket.GroupDataBlock Group = new AgentGroupDataUpdatePacket.GroupDataBlock();
3451 GroupDataMap.Add("GroupName", OSD.FromString(m.GroupName)); 3407 Group.AcceptNotices = data[i].AcceptNotices;
3452 GroupDataMap.Add("GroupInsigniaID", OSD.FromUUID(m.GroupPicture)); 3408 Group.Contribution = data[i].Contribution;
3453 NewGroupDataMap.Add("ListInProfile", OSD.FromBoolean(m.ListInProfile)); 3409 Group.GroupID = data[i].GroupID;
3454 GroupData.Add(GroupDataMap); 3410 Group.GroupInsigniaID = data[i].GroupPicture;
3455 NewGroupData.Add(NewGroupDataMap); 3411 Group.GroupName = Util.StringToBytes256(data[i].GroupName);
3412 Group.GroupPowers = data[i].GroupPowers;
3413 Groups[i] = Group;
3414 }
3415 Groupupdate.GroupData = Groups;
3416 Groupupdate.AgentData = new AgentGroupDataUpdatePacket.AgentDataBlock();
3417 Groupupdate.AgentData.AgentID = avatarID;
3418 OutPacket(Groupupdate, ThrottleOutPacketType.Task);
3456 } 3419 }
3457 llsd.Add("GroupData", GroupData);
3458 llsd.Add("NewGroupData", NewGroupData);
3459
3460 eq.Enqueue(BuildEvent("AgentGroupDataUpdate", llsd), this.AgentId);
3461 } 3420 }
3462 3421
3463 public void SendJoinGroupReply(UUID groupID, bool success) 3422 public void SendJoinGroupReply(UUID groupID, bool success)
@@ -5642,9 +5601,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP
5642 if (groupID == ActiveGroupId) 5601 if (groupID == ActiveGroupId)
5643 return ActiveGroupPowers; 5602 return ActiveGroupPowers;
5644 5603
5645 if (m_groupPowers.ContainsKey(groupID)) 5604 lock(m_groupPowers)
5646 return m_groupPowers[groupID]; 5605 {
5647 5606 if (m_groupPowers.ContainsKey(groupID))
5607 return m_groupPowers[groupID];
5608 }
5648 return 0; 5609 return 0;
5649 } 5610 }
5650 5611
@@ -11011,7 +10972,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
11011 if (m_GroupsModule != null) 10972 if (m_GroupsModule != null)
11012 { 10973 {
11013 m_GroupsModule.ActivateGroup(this, activateGroupPacket.AgentData.GroupID); 10974 m_GroupsModule.ActivateGroup(this, activateGroupPacket.AgentData.GroupID);
11014 m_GroupsModule.SendAgentGroupDataUpdate(this);
11015 } 10975 }
11016 return true; 10976 return true;
11017 10977
@@ -11136,11 +11096,19 @@ namespace OpenSim.Region.ClientStack.LindenUDP
11136 } 11096 }
11137 return true; 11097 return true;
11138 } 11098 }
11099
11100 UUID lastGroupProfileRequestID = UUID.Zero;
11101 double lastGroupProfileRequestTS = Util.GetTimeStampMS();
11102
11139 private bool HandleGroupProfileRequest(IClientAPI sender, Packet Pack) 11103 private bool HandleGroupProfileRequest(IClientAPI sender, Packet Pack)
11140 { 11104 {
11105 if(m_GroupsModule == null)
11106 return true;
11107
11141 GroupProfileRequestPacket groupProfileRequest = 11108 GroupProfileRequestPacket groupProfileRequest =
11142 (GroupProfileRequestPacket)Pack; 11109 (GroupProfileRequestPacket)Pack;
11143 11110
11111
11144 #region Packet Session and User Check 11112 #region Packet Session and User Check
11145 if (m_checkPackets) 11113 if (m_checkPackets)
11146 { 11114 {
@@ -11150,50 +11118,62 @@ namespace OpenSim.Region.ClientStack.LindenUDP
11150 } 11118 }
11151 #endregion 11119 #endregion
11152 11120
11153 if (m_GroupsModule != null) 11121 UUID grpID = groupProfileRequest.GroupData.GroupID;
11154 { 11122 double ts = Util.GetTimeStampMS();
11155 GroupProfileReplyPacket groupProfileReply = (GroupProfileReplyPacket)PacketPool.Instance.GetPacket(PacketType.GroupProfileReply); 11123 if(grpID == lastGroupProfileRequestID && ts - lastGroupProfileRequestTS < 10000)
11156 11124 return true;
11157 groupProfileReply.AgentData = new GroupProfileReplyPacket.AgentDataBlock(); 11125
11158 groupProfileReply.GroupData = new GroupProfileReplyPacket.GroupDataBlock(); 11126 lastGroupProfileRequestID = grpID;
11159 groupProfileReply.AgentData.AgentID = AgentId; 11127 lastGroupProfileRequestTS = ts;
11160 11128
11161 GroupProfileData d = m_GroupsModule.GroupProfileRequest(this, 11129 GroupProfileReplyPacket groupProfileReply = (GroupProfileReplyPacket)PacketPool.Instance.GetPacket(PacketType.GroupProfileReply);
11162 groupProfileRequest.GroupData.GroupID); 11130
11163 11131 groupProfileReply.AgentData = new GroupProfileReplyPacket.AgentDataBlock();
11164 groupProfileReply.GroupData.GroupID = d.GroupID; 11132 groupProfileReply.GroupData = new GroupProfileReplyPacket.GroupDataBlock();
11165 groupProfileReply.GroupData.Name = Util.StringToBytes256(d.Name); 11133 groupProfileReply.AgentData.AgentID = AgentId;
11166 groupProfileReply.GroupData.Charter = Util.StringToBytes1024(d.Charter); 11134
11167 groupProfileReply.GroupData.ShowInList = d.ShowInList; 11135 GroupProfileData d = m_GroupsModule.GroupProfileRequest(this,
11168 groupProfileReply.GroupData.MemberTitle = Util.StringToBytes256(d.MemberTitle); 11136 groupProfileRequest.GroupData.GroupID);
11169 groupProfileReply.GroupData.PowersMask = d.PowersMask; 11137
11170 groupProfileReply.GroupData.InsigniaID = d.InsigniaID; 11138 if(d.GroupID == UUID.Zero) // don't send broken data
11171 groupProfileReply.GroupData.FounderID = d.FounderID; 11139 return true;
11172 groupProfileReply.GroupData.MembershipFee = d.MembershipFee; 11140
11173 groupProfileReply.GroupData.OpenEnrollment = d.OpenEnrollment; 11141 groupProfileReply.GroupData.GroupID = d.GroupID;
11174 groupProfileReply.GroupData.Money = d.Money; 11142 groupProfileReply.GroupData.Name = Util.StringToBytes256(d.Name);
11175 groupProfileReply.GroupData.GroupMembershipCount = d.GroupMembershipCount; 11143 groupProfileReply.GroupData.Charter = Util.StringToBytes1024(d.Charter);
11176 groupProfileReply.GroupData.GroupRolesCount = d.GroupRolesCount; 11144 groupProfileReply.GroupData.ShowInList = d.ShowInList;
11177 groupProfileReply.GroupData.AllowPublish = d.AllowPublish; 11145 groupProfileReply.GroupData.MemberTitle = Util.StringToBytes256(d.MemberTitle);
11178 groupProfileReply.GroupData.MaturePublish = d.MaturePublish; 11146 groupProfileReply.GroupData.PowersMask = d.PowersMask;
11179 groupProfileReply.GroupData.OwnerRole = d.OwnerRole; 11147 groupProfileReply.GroupData.InsigniaID = d.InsigniaID;
11180 11148 groupProfileReply.GroupData.FounderID = d.FounderID;
11181 Scene scene = (Scene)m_scene; 11149 groupProfileReply.GroupData.MembershipFee = d.MembershipFee;
11182 if (scene.Permissions.IsGod(sender.AgentId) && (!sender.IsGroupMember(groupProfileRequest.GroupData.GroupID))) 11150 groupProfileReply.GroupData.OpenEnrollment = d.OpenEnrollment;
11183 { 11151 groupProfileReply.GroupData.Money = d.Money;
11184 ScenePresence p; 11152 groupProfileReply.GroupData.GroupMembershipCount = d.GroupMembershipCount;
11185 if (scene.TryGetScenePresence(sender.AgentId, out p)) 11153 groupProfileReply.GroupData.GroupRolesCount = d.GroupRolesCount;
11154 groupProfileReply.GroupData.AllowPublish = d.AllowPublish;
11155 groupProfileReply.GroupData.MaturePublish = d.MaturePublish;
11156 groupProfileReply.GroupData.OwnerRole = d.OwnerRole;
11157
11158 Scene scene = (Scene)m_scene;
11159 if (scene.Permissions.IsGod(sender.AgentId) && (!sender.IsGroupMember(groupProfileRequest.GroupData.GroupID)))
11160 {
11161 ScenePresence p;
11162 if (scene.TryGetScenePresence(sender.AgentId, out p))
11163 {
11164 if (p.GodLevel >= 200)
11186 { 11165 {
11187 if (p.GodLevel >= 200) 11166 groupProfileReply.GroupData.OpenEnrollment = true;
11188 { 11167 groupProfileReply.GroupData.MembershipFee = 0;
11189 groupProfileReply.GroupData.OpenEnrollment = true;
11190 groupProfileReply.GroupData.MembershipFee = 0;
11191 }
11192 } 11168 }
11193 } 11169 }
11194
11195 OutPacket(groupProfileReply, ThrottleOutPacketType.Task);
11196 } 11170 }
11171
11172 OutPacket(groupProfileReply, ThrottleOutPacketType.Task);
11173
11174 if(grpID == lastGroupProfileRequestID)
11175 lastGroupProfileRequestTS = Util.GetTimeStampMS() - 7000;
11176
11197 return true; 11177 return true;
11198 } 11178 }
11199 private bool HandleGroupMembersRequest(IClientAPI sender, Packet Pack) 11179 private bool HandleGroupMembersRequest(IClientAPI sender, Packet Pack)
@@ -12955,23 +12935,57 @@ namespace OpenSim.Region.ClientStack.LindenUDP
12955 12935
12956 public void RefreshGroupMembership() 12936 public void RefreshGroupMembership()
12957 { 12937 {
12958 if (m_GroupsModule != null) 12938 lock(m_groupPowers)
12959 { 12939 {
12960 GroupMembershipData[] GroupMembership = 12940 if (m_GroupsModule != null)
12941 {
12942 GroupMembershipData[] GroupMembership =
12961 m_GroupsModule.GetMembershipData(AgentId); 12943 m_GroupsModule.GetMembershipData(AgentId);
12962 12944
12963 m_groupPowers.Clear(); 12945 m_groupPowers.Clear();
12964 12946
12965 if (GroupMembership != null) 12947 if (GroupMembership != null)
12966 {
12967 for (int i = 0; i < GroupMembership.Length; i++)
12968 { 12948 {
12969 m_groupPowers[GroupMembership[i].GroupID] = GroupMembership[i].GroupPowers; 12949 for (int i = 0; i < GroupMembership.Length; i++)
12950 {
12951 m_groupPowers[GroupMembership[i].GroupID] = GroupMembership[i].GroupPowers;
12952 }
12970 } 12953 }
12971 } 12954 }
12972 } 12955 }
12973 } 12956 }
12974 12957
12958 public void UpdateGroupMembership(GroupMembershipData[] data)
12959 {
12960 lock(m_groupPowers)
12961 {
12962 m_groupPowers.Clear();
12963
12964 if (data != null)
12965 {
12966 for (int i = 0; i < data.Length; i++)
12967 m_groupPowers[data[i].GroupID] = data[i].GroupPowers;
12968 }
12969 }
12970 }
12971
12972 public void GroupMembershipRemove(UUID GroupID)
12973 {
12974 lock(m_groupPowers)
12975 {
12976 if(m_groupPowers.ContainsKey(GroupID))
12977 m_groupPowers.Remove(GroupID);
12978 }
12979 }
12980
12981 public void GroupMembershipAddReplace(UUID GroupID,ulong GroupPowers)
12982 {
12983 lock(m_groupPowers)
12984 {
12985 m_groupPowers[GroupID] = GroupPowers;
12986 }
12987 }
12988
12975 public string Report() 12989 public string Report()
12976 { 12990 {
12977 return m_udpClient.GetStats(); 12991 return m_udpClient.GetStats();
diff --git a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs
index 8c1a628..06900f0 100644
--- a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs
+++ b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs
@@ -1302,7 +1302,11 @@ namespace OpenSim.Region.CoreModules.World.Permissions
1302 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); 1302 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
1303 if (m_bypassPermissions) return m_bypassPermissionsValue; 1303 if (m_bypassPermissions) return m_bypassPermissionsValue;
1304 1304
1305 if ((newPoint.X > 257f || newPoint.X < -1f || newPoint.Y > 257f || newPoint.Y < -1f)) 1305
1306 // allow outide region??
1307 if (newPoint.X < -1f || newPoint.Y < -1f)
1308 return true;
1309 if (newPoint.X > scene.RegionInfo.RegionSizeX + 1.0f || newPoint.Y > scene.RegionInfo.RegionSizeY + 1.0f)
1306 { 1310 {
1307 return true; 1311 return true;
1308 } 1312 }
diff --git a/OpenSim/Region/Framework/Interfaces/IEventQueue.cs b/OpenSim/Region/Framework/Interfaces/IEventQueue.cs
index f4014db..4361310 100644
--- a/OpenSim/Region/Framework/Interfaces/IEventQueue.cs
+++ b/OpenSim/Region/Framework/Interfaces/IEventQueue.cs
@@ -58,7 +58,6 @@ namespace OpenSim.Region.Framework.Interfaces
58 void ChatterBoxSessionAgentListUpdates(UUID sessionID, UUID fromAgent, UUID anotherAgent, bool canVoiceChat, 58 void ChatterBoxSessionAgentListUpdates(UUID sessionID, UUID fromAgent, UUID anotherAgent, bool canVoiceChat,
59 bool isModerator, bool textMute); 59 bool isModerator, bool textMute);
60 void ParcelProperties(ParcelPropertiesMessage parcelPropertiesMessage, UUID avatarID); 60 void ParcelProperties(ParcelPropertiesMessage parcelPropertiesMessage, UUID avatarID);
61 void GroupMembership(AgentGroupDataUpdatePacket groupUpdate, UUID avatarID);
62 void GroupMembershipData(UUID receiverAgent, GroupMembershipData[] data); 61 void GroupMembershipData(UUID receiverAgent, GroupMembershipData[] data);
63 OSD ScriptRunningEvent(UUID objectID, UUID itemID, bool running, bool mono); 62 OSD ScriptRunningEvent(UUID objectID, UUID itemID, bool running, bool mono);
64 OSD BuildEvent(string eventName, OSD eventBody); 63 OSD BuildEvent(string eventName, OSD eventBody);
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index a75b460..0d19e94 100755
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -250,6 +250,12 @@ namespace OpenSim.Region.Framework.Scenes
250 /// 250 ///
251 public int m_linksetPhysCapacity = 0; 251 public int m_linksetPhysCapacity = 0;
252 252
253 /// <summary>
254 /// When placed outside the region's border, do we transfer the objects or
255 /// do we keep simulating them here?
256 /// </summary>
257 public bool DisableObjectTransfer { get; set; }
258
253 public bool m_useFlySlow; 259 public bool m_useFlySlow;
254 public bool m_useTrashOnDelete = true; 260 public bool m_useTrashOnDelete = true;
255 261
@@ -1155,6 +1161,7 @@ namespace OpenSim.Region.Framework.Scenes
1155 if (entityTransferConfig != null) 1161 if (entityTransferConfig != null)
1156 { 1162 {
1157 AllowAvatarCrossing = entityTransferConfig.GetBoolean("AllowAvatarCrossing", AllowAvatarCrossing); 1163 AllowAvatarCrossing = entityTransferConfig.GetBoolean("AllowAvatarCrossing", AllowAvatarCrossing);
1164 DisableObjectTransfer = entityTransferConfig.GetBoolean("DisableObjectTransfer", false);
1158 } 1165 }
1159 1166
1160 #region Interest Management 1167 #region Interest Management
@@ -4309,14 +4316,14 @@ namespace OpenSim.Region.Framework.Scenes
4309 if (banned || restricted) 4316 if (banned || restricted)
4310 { 4317 {
4311 ILandObject nearestParcel = GetNearestAllowedParcel(agentID, posX, posY); 4318 ILandObject nearestParcel = GetNearestAllowedParcel(agentID, posX, posY);
4319 Vector2? newPosition = null;
4312 if (nearestParcel != null) 4320 if (nearestParcel != null)
4313 { 4321 {
4314 //Move agent to nearest allowed 4322 //Move agent to nearest allowed
4315 Vector2 newPosition = GetParcelSafeCorner(nearestParcel); 4323// Vector2 newPosition = GetParcelSafeCorner(nearestParcel);
4316 posX = newPosition.X; 4324 newPosition = nearestParcel.GetNearestPoint(new Vector3(posX, posY,0));
4317 posY = newPosition.Y;
4318 } 4325 }
4319 else 4326 if(newPosition == null)
4320 { 4327 {
4321 if (banned) 4328 if (banned)
4322 { 4329 {
@@ -4329,6 +4336,11 @@ namespace OpenSim.Region.Framework.Scenes
4329 } 4336 }
4330 return false; 4337 return false;
4331 } 4338 }
4339 else
4340 {
4341 posX = newPosition.Value.X;
4342 posY = newPosition.Value.Y;
4343 }
4332 } 4344 }
4333 reason = ""; 4345 reason = "";
4334 return true; 4346 return true;
diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs
index f9f795f..90ee1d1 100755
--- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs
@@ -242,6 +242,19 @@ namespace OpenSim.Region.Framework.Scenes
242 coarseLocations = new List<Vector3>(); 242 coarseLocations = new List<Vector3>();
243 avatarUUIDs = new List<UUID>(); 243 avatarUUIDs = new List<UUID>();
244 244
245 // coarse locations are sent as BYTE, so limited to the 255m max of normal regions
246 // try to work around that scale down X and Y acording to region size, so reducing the resolution
247 //
248 // viewers need to scale up
249 float scaleX = m_parentScene.RegionInfo.RegionSizeX / Constants.RegionSize;
250 if (scaleX == 0)
251 scaleX = 1.0f;
252 scaleX = 1.0f / scaleX;
253 float scaleY = m_parentScene.RegionInfo.RegionSizeY / Constants.RegionSize;
254 if (scaleY == 0)
255 scaleY = 1.0f;
256 scaleY = 1.0f / scaleY;
257
245 List<ScenePresence> presences = GetScenePresences(); 258 List<ScenePresence> presences = GetScenePresences();
246 for (int i = 0; i < Math.Min(presences.Count, maxLocations); ++i) 259 for (int i = 0; i < Math.Min(presences.Count, maxLocations); ++i)
247 { 260 {
@@ -250,9 +263,11 @@ namespace OpenSim.Region.Framework.Scenes
250 // If this presence is a child agent, we don't want its coarse locations 263 // If this presence is a child agent, we don't want its coarse locations
251 if (sp.IsChildAgent) 264 if (sp.IsChildAgent)
252 continue; 265 continue;
266 Vector3 pos = sp.AbsolutePosition;
267 pos.X *= scaleX;
268 pos.Y *= scaleY;
253 269
254 coarseLocations.Add(sp.AbsolutePosition); 270 coarseLocations.Add(pos);
255
256 avatarUUIDs.Add(sp.UUID); 271 avatarUUIDs.Add(sp.UUID);
257 } 272 }
258 } 273 }
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
index e226196..cb1bf55 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
@@ -556,6 +556,7 @@ namespace OpenSim.Region.Framework.Scenes
556 && !Scene.PositionIsInCurrentRegion(val) 556 && !Scene.PositionIsInCurrentRegion(val)
557 && !IsAttachmentCheckFull() 557 && !IsAttachmentCheckFull()
558 && !Scene.LoadingPrims 558 && !Scene.LoadingPrims
559 && !Scene.DisableObjectTransfer
559 ) 560 )
560 { 561 {
561 if (!inTransit) 562 if (!inTransit)
diff --git a/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs b/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs
index f19cd47..f34dbe8 100644
--- a/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs
+++ b/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs
@@ -1626,6 +1626,22 @@ namespace OpenSim.Region.OptionalModules.Agent.InternetRelayClientView.Server
1626 1626
1627 } 1627 }
1628 1628
1629 public void UpdateGroupMembership(GroupMembershipData[] data)
1630 {
1631
1632 }
1633
1634 public void GroupMembershipRemove(UUID GroupID)
1635 {
1636
1637 }
1638
1639 public void GroupMembershipAddReplace(UUID GroupID,ulong GroupPowers)
1640 {
1641
1642 }
1643
1644
1629 public void SendAvatarNotesReply(UUID targetID, string text) 1645 public void SendAvatarNotesReply(UUID targetID, string text)
1630 { 1646 {
1631 1647
diff --git a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs
index ec34e39..ddeac66 100644
--- a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs
+++ b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs
@@ -786,7 +786,6 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
786 786
787 GroupProfileData profile = new GroupProfileData(); 787 GroupProfileData profile = new GroupProfileData();
788 788
789
790 GroupRecord groupInfo = m_groupData.GetGroupRecord(GetRequestingAgentID(remoteClient), groupID, null); 789 GroupRecord groupInfo = m_groupData.GetGroupRecord(GetRequestingAgentID(remoteClient), groupID, null);
791 if (groupInfo != null) 790 if (groupInfo != null)
792 { 791 {
@@ -812,7 +811,11 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
812 profile.MemberTitle = memberInfo.GroupTitle; 811 profile.MemberTitle = memberInfo.GroupTitle;
813 profile.PowersMask = memberInfo.GroupPowers; 812 profile.PowersMask = memberInfo.GroupPowers;
814 } 813 }
815 814/*
815 this should save xmlrpc calls, but seems to return wrong GroupMembershipCount and GroupRolesCount
816 UUID agent = GetRequestingAgentID(remoteClient);
817 GroupProfileData profile = m_groupData.GetMemberGroupProfile(agent, groupID, agent);
818*/
816 return profile; 819 return profile;
817 } 820 }
818 821
@@ -1407,13 +1410,9 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
1407 SendDataUpdate(remoteClient, tellOthers); 1410 SendDataUpdate(remoteClient, tellOthers);
1408 1411
1409 GroupMembershipData[] membershipArray = GetProfileListedGroupMemberships(remoteClient, agentID); 1412 GroupMembershipData[] membershipArray = GetProfileListedGroupMemberships(remoteClient, agentID);
1410 IEventQueue eq = remoteClient.Scene.RequestModuleInterface<IEventQueue>(); 1413 remoteClient.UpdateGroupMembership(membershipArray);
1411 if (eq != null)
1412 eq.GroupMembershipData(agentID, membershipArray);
1413 else
1414 remoteClient.SendGroupMembership(membershipArray);
1415 1414
1416 remoteClient.RefreshGroupMembership(); 1415 remoteClient.SendAgentGroupDataUpdate(agentID, membershipArray);
1417 } 1416 }
1418 1417
1419 /// <summary> 1418 /// <summary>
diff --git a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/IGroupsServicesConnector.cs b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/IGroupsServicesConnector.cs
index 6b5b40a..cff3212 100644
--- a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/IGroupsServicesConnector.cs
+++ b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/IGroupsServicesConnector.cs
@@ -51,7 +51,8 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
51 /// GroupID may be specified instead, in which case this parmeter will be null. 51 /// GroupID may be specified instead, in which case this parmeter will be null.
52 /// </param> 52 /// </param>
53 GroupRecord GetGroupRecord(UUID RequestingAgentID, UUID GroupID, string GroupName); 53 GroupRecord GetGroupRecord(UUID RequestingAgentID, UUID GroupID, string GroupName);
54 54 GroupProfileData GetMemberGroupProfile(UUID requestingAgentID, UUID GroupID, UUID AgentID);
55
55 List<DirGroupsReplyData> FindGroups(UUID RequestingAgentID, string search); 56 List<DirGroupsReplyData> FindGroups(UUID RequestingAgentID, string search);
56 List<GroupMembersData> GetGroupMembers(UUID RequestingAgentID, UUID GroupID); 57 List<GroupMembersData> GetGroupMembers(UUID RequestingAgentID, UUID GroupID);
57 58
diff --git a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/XmlRpcGroupsServicesConnectorModule.cs b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/XmlRpcGroupsServicesConnectorModule.cs
index acb37f6..2dda3a1 100644
--- a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/XmlRpcGroupsServicesConnectorModule.cs
+++ b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/XmlRpcGroupsServicesConnectorModule.cs
@@ -181,9 +181,6 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
181 181
182 m_cacheTimeout = groupsConfig.GetInt("GroupsCacheTimeout", 30); 182 m_cacheTimeout = groupsConfig.GetInt("GroupsCacheTimeout", 30);
183 183
184 // disable cache until it is fixed
185 m_cacheTimeout = 0;
186
187 if (m_cacheTimeout == 0) 184 if (m_cacheTimeout == 0)
188 { 185 {
189 m_log.WarnFormat("[XMLRPC-GROUPS-CONNECTOR]: Groups Cache Disabled."); 186 m_log.WarnFormat("[XMLRPC-GROUPS-CONNECTOR]: Groups Cache Disabled.");
@@ -385,10 +382,11 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
385 382
386 GroupMembershipData MemberInfo = GetAgentGroupMembership(requestingAgentID, AgentID, GroupID); 383 GroupMembershipData MemberInfo = GetAgentGroupMembership(requestingAgentID, AgentID, GroupID);
387 GroupProfileData MemberGroupProfile = GroupProfileHashtableToGroupProfileData(respData); 384 GroupProfileData MemberGroupProfile = GroupProfileHashtableToGroupProfileData(respData);
388 385 if(MemberInfo != null)
389 MemberGroupProfile.MemberTitle = MemberInfo.GroupTitle; 386 {
390 MemberGroupProfile.PowersMask = MemberInfo.GroupPowers; 387 MemberGroupProfile.MemberTitle = MemberInfo.GroupTitle;
391 388 MemberGroupProfile.PowersMask = MemberInfo.GroupPowers;
389 }
392 return MemberGroupProfile; 390 return MemberGroupProfile;
393 } 391 }
394 392
@@ -977,12 +975,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
977 975
978 try 976 try
979 { 977 {
980 resp = req.Send(m_groupsServerURI, 30000); 978 resp = req.Send(m_groupsServerURI);
981
982 if ((m_cacheTimeout > 0) && (CacheKey != null))
983 {
984 m_memoryCache.AddOrUpdate(CacheKey, resp, TimeSpan.FromSeconds(m_cacheTimeout));
985 }
986 } 979 }
987 catch (Exception e) 980 catch (Exception e)
988 { 981 {
@@ -1004,12 +997,22 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
1004 m_log.WarnFormat("[XMLRPC-GROUPS-CONNECTOR]: {0} :: {1}", key, param[key].ToString()); 997 m_log.WarnFormat("[XMLRPC-GROUPS-CONNECTOR]: {0} :: {1}", key, param[key].ToString());
1005 } 998 }
1006 } 999 }
1000
1001 if ((m_cacheTimeout > 0) && (CacheKey != null))
1002 {
1003 m_memoryCache.AddOrUpdate(CacheKey, resp, 10.0);
1004 }
1007 Hashtable respData = new Hashtable(); 1005 Hashtable respData = new Hashtable();
1008 respData.Add("error", e.ToString()); 1006 respData.Add("error", e.ToString());
1009 return respData; 1007 return respData;
1010 } 1008 }
1011 } 1009 }
1012 1010
1011 if ((m_cacheTimeout > 0) && (CacheKey != null))
1012 {
1013 m_memoryCache.AddOrUpdate(CacheKey, resp, TimeSpan.FromSeconds(m_cacheTimeout));
1014 }
1015
1013 if (resp.Value is Hashtable) 1016 if (resp.Value is Hashtable)
1014 { 1017 {
1015 Hashtable respData = (Hashtable)resp.Value; 1018 Hashtable respData = (Hashtable)resp.Value;
@@ -1138,6 +1141,7 @@ namespace Nwc.XmlRpc
1138 request.ContentType = "text/xml"; 1141 request.ContentType = "text/xml";
1139 request.AllowWriteStreamBuffering = true; 1142 request.AllowWriteStreamBuffering = true;
1140 request.KeepAlive = !_disableKeepAlive; 1143 request.KeepAlive = !_disableKeepAlive;
1144 request.Timeout = 30000;
1141 1145
1142 using (Stream stream = request.GetRequestStream()) 1146 using (Stream stream = request.GetRequestStream())
1143 { 1147 {
diff --git a/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs b/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs
index 43b4e02..bdac6aa 100644
--- a/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs
+++ b/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs
@@ -1255,6 +1255,18 @@ namespace OpenSim.Region.OptionalModules.World.NPC
1255 { 1255 {
1256 } 1256 }
1257 1257
1258 public void UpdateGroupMembership(GroupMembershipData[] data)
1259 {
1260 }
1261
1262 public void GroupMembershipRemove(UUID GroupID)
1263 {
1264 }
1265
1266 public void GroupMembershipAddReplace(UUID GroupID,ulong GroupPowers)
1267 {
1268 }
1269
1258 public void SendUseCachedMuteList() 1270 public void SendUseCachedMuteList()
1259 { 1271 {
1260 } 1272 }
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
index 32b3bb7..064eb0a 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
@@ -2680,7 +2680,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
2680 if (part.ParentGroup.RootPart == part) 2680 if (part.ParentGroup.RootPart == part)
2681 { 2681 {
2682 SceneObjectGroup parent = part.ParentGroup; 2682 SceneObjectGroup parent = part.ParentGroup;
2683 if (!World.Permissions.CanObjectEntry(parent.UUID, false, (Vector3)toPos)) 2683 if (!parent.IsAttachment && !World.Permissions.CanObjectEntry(parent.UUID, false, (Vector3)toPos))
2684 return; 2684 return;
2685 parent.UpdateGroupPosition((Vector3)toPos); 2685 parent.UpdateGroupPosition((Vector3)toPos);
2686 } 2686 }