aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs18
-rw-r--r--OpenSim/Region/CoreModules/World/Estate/XEstateConnector.cs56
-rw-r--r--OpenSim/Region/CoreModules/World/Estate/XEstateModule.cs36
-rw-r--r--OpenSim/Region/CoreModules/World/Estate/XEstateRequestHandler.cs13
-rw-r--r--OpenSim/Region/Framework/Interfaces/IEstateModule.cs2
5 files changed, 78 insertions, 47 deletions
diff --git a/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs b/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs
index 8eb2b1e..efd4ca6 100644
--- a/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs
+++ b/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs
@@ -71,6 +71,8 @@ namespace OpenSim.Region.CoreModules.World.Estate
71 public event ChangeDelegate OnRegionInfoChange; 71 public event ChangeDelegate OnRegionInfoChange;
72 public event ChangeDelegate OnEstateInfoChange; 72 public event ChangeDelegate OnEstateInfoChange;
73 public event MessageDelegate OnEstateMessage; 73 public event MessageDelegate OnEstateMessage;
74 public event EstateTeleportOneUserHomeRequest OnEstateTeleportOneUserHomeRequest;
75 public event EstateTeleportAllUsersHomeRequest OnEstateTeleportAllUsersHomeRequest;
74 76
75 private int m_delayCount = 0; 77 private int m_delayCount = 0;
76 78
@@ -1193,13 +1195,20 @@ namespace OpenSim.Region.CoreModules.World.Estate
1193 1195
1194 private void handleEstateTeleportOneUserHomeRequest(IClientAPI remover_client, UUID invoice, UUID senderID, UUID prey) 1196 private void handleEstateTeleportOneUserHomeRequest(IClientAPI remover_client, UUID invoice, UUID senderID, UUID prey)
1195 { 1197 {
1198 EstateTeleportOneUserHomeRequest evOverride = OnEstateTeleportOneUserHomeRequest;
1199 if(evOverride != null)
1200 {
1201 evOverride(remover_client, invoice, senderID, prey);
1202 return;
1203 }
1204
1196 if (!Scene.Permissions.CanIssueEstateCommand(remover_client.AgentId, false)) 1205 if (!Scene.Permissions.CanIssueEstateCommand(remover_client.AgentId, false))
1197 return; 1206 return;
1198 1207
1199 if (prey != UUID.Zero) 1208 if (prey != UUID.Zero)
1200 { 1209 {
1201 ScenePresence s = Scene.GetScenePresence(prey); 1210 ScenePresence s = Scene.GetScenePresence(prey);
1202 if (s != null) 1211 if (s != null && !s.IsDeleted && !s.IsInTransit)
1203 { 1212 {
1204 if (!Scene.TeleportClientHome(prey, s.ControllingClient)) 1213 if (!Scene.TeleportClientHome(prey, s.ControllingClient))
1205 { 1214 {
@@ -1212,6 +1221,13 @@ namespace OpenSim.Region.CoreModules.World.Estate
1212 1221
1213 private void handleEstateTeleportAllUsersHomeRequest(IClientAPI remover_client, UUID invoice, UUID senderID) 1222 private void handleEstateTeleportAllUsersHomeRequest(IClientAPI remover_client, UUID invoice, UUID senderID)
1214 { 1223 {
1224 EstateTeleportAllUsersHomeRequest evOverride = OnEstateTeleportAllUsersHomeRequest;
1225 if(evOverride != null)
1226 {
1227 evOverride(remover_client, invoice, senderID);
1228 return;
1229 }
1230
1215 if (!Scene.Permissions.CanIssueEstateCommand(remover_client.AgentId, false)) 1231 if (!Scene.Permissions.CanIssueEstateCommand(remover_client.AgentId, false))
1216 return; 1232 return;
1217 1233
diff --git a/OpenSim/Region/CoreModules/World/Estate/XEstateConnector.cs b/OpenSim/Region/CoreModules/World/Estate/XEstateConnector.cs
index 73e706c..2c0c882 100644
--- a/OpenSim/Region/CoreModules/World/Estate/XEstateConnector.cs
+++ b/OpenSim/Region/CoreModules/World/Estate/XEstateConnector.cs
@@ -46,16 +46,19 @@ namespace OpenSim.Region.CoreModules.World.Estate
46 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 46 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
47 47
48 protected XEstateModule m_EstateModule; 48 protected XEstateModule m_EstateModule;
49 private string token;
49 50
50 public EstateConnector(XEstateModule module) 51 public EstateConnector(XEstateModule module, string _token)
51 { 52 {
52 m_EstateModule = module; 53 m_EstateModule = module;
54 token = _token;
53 } 55 }
54 56
55 public void SendTeleportHomeOneUser(uint EstateID, UUID PreyID) 57 public void SendTeleportHomeOneUser(uint EstateID, UUID PreyID)
56 { 58 {
57 Dictionary<string, object> sendData = new Dictionary<string, object>(); 59 Dictionary<string, object> sendData = new Dictionary<string, object>();
58 sendData["METHOD"] = "teleport_home_one_user"; 60 sendData["METHOD"] = "teleport_home_one_user";
61 sendData["TOKEN"] = token;
59 62
60 sendData["EstateID"] = EstateID.ToString(); 63 sendData["EstateID"] = EstateID.ToString();
61 sendData["PreyID"] = PreyID.ToString(); 64 sendData["PreyID"] = PreyID.ToString();
@@ -67,6 +70,7 @@ namespace OpenSim.Region.CoreModules.World.Estate
67 { 70 {
68 Dictionary<string, object> sendData = new Dictionary<string, object>(); 71 Dictionary<string, object> sendData = new Dictionary<string, object>();
69 sendData["METHOD"] = "teleport_home_all_users"; 72 sendData["METHOD"] = "teleport_home_all_users";
73 sendData["TOKEN"] = token;
70 74
71 sendData["EstateID"] = EstateID.ToString(); 75 sendData["EstateID"] = EstateID.ToString();
72 76
@@ -77,6 +81,7 @@ namespace OpenSim.Region.CoreModules.World.Estate
77 { 81 {
78 Dictionary<string, object> sendData = new Dictionary<string, object>(); 82 Dictionary<string, object> sendData = new Dictionary<string, object>();
79 sendData["METHOD"] = "update_covenant"; 83 sendData["METHOD"] = "update_covenant";
84 sendData["TOKEN"] = token;
80 85
81 sendData["CovenantID"] = CovenantID.ToString(); 86 sendData["CovenantID"] = CovenantID.ToString();
82 sendData["EstateID"] = EstateID.ToString(); 87 sendData["EstateID"] = EstateID.ToString();
@@ -99,6 +104,7 @@ namespace OpenSim.Region.CoreModules.World.Estate
99 { 104 {
100 Dictionary<string, object> sendData = new Dictionary<string, object>(); 105 Dictionary<string, object> sendData = new Dictionary<string, object>();
101 sendData["METHOD"] = "update_estate"; 106 sendData["METHOD"] = "update_estate";
107 sendData["TOKEN"] = token;
102 108
103 sendData["EstateID"] = EstateID.ToString(); 109 sendData["EstateID"] = EstateID.ToString();
104 110
@@ -119,6 +125,7 @@ namespace OpenSim.Region.CoreModules.World.Estate
119 { 125 {
120 Dictionary<string, object> sendData = new Dictionary<string, object>(); 126 Dictionary<string, object> sendData = new Dictionary<string, object>();
121 sendData["METHOD"] = "estate_message"; 127 sendData["METHOD"] = "estate_message";
128 sendData["TOKEN"] = token;
122 129
123 sendData["EstateID"] = EstateID.ToString(); 130 sendData["EstateID"] = EstateID.ToString();
124 sendData["FromID"] = FromID.ToString(); 131 sendData["FromID"] = FromID.ToString();
@@ -132,47 +139,43 @@ namespace OpenSim.Region.CoreModules.World.Estate
132 { 139 {
133 List<UUID> regions = m_EstateModule.Scenes[0].GetEstateRegions((int)EstateID); 140 List<UUID> regions = m_EstateModule.Scenes[0].GetEstateRegions((int)EstateID);
134 141
135 UUID ScopeID = UUID.Zero; 142 // Don't send to the same instance twice
143 List<string> done = new List<string>();
136 144
137 // Handle local regions locally 145 // Handle local regions locally
138 //
139 lock (m_EstateModule.Scenes) 146 lock (m_EstateModule.Scenes)
140 { 147 {
141 foreach (Scene s in m_EstateModule.Scenes) 148 foreach (Scene s in m_EstateModule.Scenes)
142 { 149 {
143 if (regions.Contains(s.RegionInfo.RegionID)) 150 RegionInfo sreg = s.RegionInfo;
151 if (regions.Contains(sreg.RegionID))
144 { 152 {
145 // All regions in one estate are in the same scope. 153 string url = sreg.ExternalHostName + ":" + sreg.HttpPort;
146 // Use that scope. 154 regions.Remove(sreg.RegionID);
147 // 155 if(!done.Contains(url)) // we may have older regs with same url lost in dbs
148 ScopeID = s.RegionInfo.ScopeID; 156 done.Add(url);
149 regions.Remove(s.RegionInfo.RegionID);
150 } 157 }
151 } 158 }
152 } 159 }
153 160
154 // Our own region should always be in the above list. 161 if(regions.Count == 0)
155 // In a standalone this would not be true. But then, 162 return;
156 // Scope ID is not relevat there. Use first scope.
157 //
158 if (ScopeID == UUID.Zero)
159 ScopeID = m_EstateModule.Scenes[0].RegionInfo.ScopeID;
160 163
161 // Don't send to the same instance twice 164 Scene baseScene = m_EstateModule.Scenes[0];
162 // 165 UUID ScopeID = baseScene.RegionInfo.ScopeID;
163 List<string> done = new List<string>(); 166 IGridService gridService = baseScene.GridService;
167 if(gridService == null)
168 return;
164 169
165 // Send to remote regions 170 // Send to remote regions
166 //
167 foreach (UUID regionID in regions) 171 foreach (UUID regionID in regions)
168 { 172 {
169 GridRegion region = m_EstateModule.Scenes[0].GridService.GetRegionByUUID(ScopeID, regionID); 173 GridRegion region = gridService.GetRegionByUUID(ScopeID, regionID);
170 if (region != null) 174 if (region != null)
171 { 175 {
172 string url = "http://" + region.ExternalHostName + ":" + region.HttpPort; 176 string url = region.ExternalHostName + ":" + region.HttpPort;
173 if (done.Contains(url)) 177 if(done.Contains(url))
174 continue; 178 continue;
175
176 Call(region, sendData); 179 Call(region, sendData);
177 done.Add(url); 180 done.Add(url);
178 } 181 }
@@ -185,7 +188,12 @@ namespace OpenSim.Region.CoreModules.World.Estate
185 // m_log.DebugFormat("[XESTATE CONNECTOR]: queryString = {0}", reqString); 188 // m_log.DebugFormat("[XESTATE CONNECTOR]: queryString = {0}", reqString);
186 try 189 try
187 { 190 {
188 string url = "http://" + region.ExternalHostName + ":" + region.HttpPort; 191 string url = "";
192 if(string.IsNullOrEmpty(region.ServerURI))
193 url = "http://" + region.ExternalHostName + ":" + region.HttpPort;
194 else
195 url = region.ServerURI;
196
189 string reply = SynchronousRestFormsRequester.MakeRequest("POST", 197 string reply = SynchronousRestFormsRequester.MakeRequest("POST",
190 url + "/estate", 198 url + "/estate",
191 reqString); 199 reqString);
diff --git a/OpenSim/Region/CoreModules/World/Estate/XEstateModule.cs b/OpenSim/Region/CoreModules/World/Estate/XEstateModule.cs
index 4bb3799..a7195af 100644
--- a/OpenSim/Region/CoreModules/World/Estate/XEstateModule.cs
+++ b/OpenSim/Region/CoreModules/World/Estate/XEstateModule.cs
@@ -51,6 +51,7 @@ namespace OpenSim.Region.CoreModules.World.Estate
51 51
52 protected List<Scene> m_Scenes = new List<Scene>(); 52 protected List<Scene> m_Scenes = new List<Scene>();
53 protected bool m_InInfoUpdate = false; 53 protected bool m_InInfoUpdate = false;
54 private string token = "7db8eh2gvgg45jj";
54 55
55 public bool InInfoUpdate 56 public bool InInfoUpdate
56 { 57 {
@@ -69,17 +70,19 @@ namespace OpenSim.Region.CoreModules.World.Estate
69 { 70 {
70 int port = 0; 71 int port = 0;
71 72
72 IConfig estateConfig = config.Configs["Estate"]; 73 IConfig estateConfig = config.Configs["Estates"];
73 if (estateConfig != null) 74 if (estateConfig != null)
74 { 75 {
75 port = estateConfig.GetInt("Port", 0); 76 port = estateConfig.GetInt("Port", 0);
77 // this will need to came from somewhere else
78 token = estateConfig.GetString("Token", token);
76 } 79 }
77 80
78 m_EstateConnector = new EstateConnector(this); 81 m_EstateConnector = new EstateConnector(this, token);
79 82
80 // Instantiate the request handler 83 // Instantiate the request handler
81 IHttpServer server = MainServer.GetHttpServer((uint)port); 84 IHttpServer server = MainServer.GetHttpServer((uint)port);
82 server.AddStreamHandler(new EstateRequestHandler(this)); 85 server.AddStreamHandler(new EstateRequestHandler(this, token));
83 } 86 }
84 87
85 public void PostInitialise() 88 public void PostInitialise()
@@ -94,8 +97,6 @@ namespace OpenSim.Region.CoreModules.World.Estate
94 { 97 {
95 lock (m_Scenes) 98 lock (m_Scenes)
96 m_Scenes.Add(scene); 99 m_Scenes.Add(scene);
97
98 scene.EventManager.OnNewClient += OnNewClient;
99 } 100 }
100 101
101 public void RegionLoaded(Scene scene) 102 public void RegionLoaded(Scene scene)
@@ -105,12 +106,12 @@ namespace OpenSim.Region.CoreModules.World.Estate
105 em.OnRegionInfoChange += OnRegionInfoChange; 106 em.OnRegionInfoChange += OnRegionInfoChange;
106 em.OnEstateInfoChange += OnEstateInfoChange; 107 em.OnEstateInfoChange += OnEstateInfoChange;
107 em.OnEstateMessage += OnEstateMessage; 108 em.OnEstateMessage += OnEstateMessage;
109 em.OnEstateTeleportOneUserHomeRequest += OnEstateTeleportOneUserHomeRequest;
110 em.OnEstateTeleportAllUsersHomeRequest += OnEstateTeleportAllUsersHomeRequest;
108 } 111 }
109 112
110 public void RemoveRegion(Scene scene) 113 public void RemoveRegion(Scene scene)
111 { 114 {
112 scene.EventManager.OnNewClient -= OnNewClient;
113
114 lock (m_Scenes) 115 lock (m_Scenes)
115 m_Scenes.Remove(scene); 116 m_Scenes.Remove(scene);
116 } 117 }
@@ -181,13 +182,6 @@ namespace OpenSim.Region.CoreModules.World.Estate
181 m_EstateConnector.SendEstateMessage(estateID, FromID, FromName, Message); 182 m_EstateConnector.SendEstateMessage(estateID, FromID, FromName, Message);
182 } 183 }
183 184
184 private void OnNewClient(IClientAPI client)
185 {
186 client.OnEstateTeleportOneUserHomeRequest += OnEstateTeleportOneUserHomeRequest;
187 client.OnEstateTeleportAllUsersHomeRequest += OnEstateTeleportAllUsersHomeRequest;
188
189 }
190
191 private void OnEstateTeleportOneUserHomeRequest(IClientAPI client, UUID invoice, UUID senderID, UUID prey) 185 private void OnEstateTeleportOneUserHomeRequest(IClientAPI client, UUID invoice, UUID senderID, UUID prey)
192 { 186 {
193 if (prey == UUID.Zero) 187 if (prey == UUID.Zero)
@@ -205,16 +199,18 @@ namespace OpenSim.Region.CoreModules.World.Estate
205 199
206 foreach (Scene s in Scenes) 200 foreach (Scene s in Scenes)
207 { 201 {
208 if (s == scene)
209 continue; // Already handles by estate module
210 if (s.RegionInfo.EstateSettings.EstateID != estateID) 202 if (s.RegionInfo.EstateSettings.EstateID != estateID)
211 continue; 203 continue;
212 204
213 ScenePresence p = scene.GetScenePresence(prey); 205 ScenePresence p = scene.GetScenePresence(prey);
214 if (p != null && !p.IsChildAgent) 206 if (p != null && !p.IsChildAgent )
215 { 207 {
216 p.ControllingClient.SendTeleportStart(16); 208 if(!p.IsDeleted && !p.IsInTransit)
217 scene.TeleportClientHome(prey, p.ControllingClient); 209 {
210 p.ControllingClient.SendTeleportStart(16);
211 scene.TeleportClientHome(prey, p.ControllingClient);
212 }
213 return;
218 } 214 }
219 } 215 }
220 216
@@ -235,8 +231,6 @@ namespace OpenSim.Region.CoreModules.World.Estate
235 231
236 foreach (Scene s in Scenes) 232 foreach (Scene s in Scenes)
237 { 233 {
238 if (s == scene)
239 continue; // Already handles by estate module
240 if (s.RegionInfo.EstateSettings.EstateID != estateID) 234 if (s.RegionInfo.EstateSettings.EstateID != estateID)
241 continue; 235 continue;
242 236
diff --git a/OpenSim/Region/CoreModules/World/Estate/XEstateRequestHandler.cs b/OpenSim/Region/CoreModules/World/Estate/XEstateRequestHandler.cs
index 1dcaed3..756b54d 100644
--- a/OpenSim/Region/CoreModules/World/Estate/XEstateRequestHandler.cs
+++ b/OpenSim/Region/CoreModules/World/Estate/XEstateRequestHandler.cs
@@ -48,11 +48,13 @@ namespace OpenSim.Region.CoreModules.World.Estate
48 48
49 protected XEstateModule m_EstateModule; 49 protected XEstateModule m_EstateModule;
50 protected Object m_RequestLock = new Object(); 50 protected Object m_RequestLock = new Object();
51 private string token;
51 52
52 public EstateRequestHandler(XEstateModule fmodule) 53 public EstateRequestHandler(XEstateModule fmodule, string _token)
53 : base("POST", "/estate") 54 : base("POST", "/estate")
54 { 55 {
55 m_EstateModule = fmodule; 56 m_EstateModule = fmodule;
57 token = _token;
56 } 58 }
57 59
58 protected override byte[] ProcessRequest(string path, Stream requestData, 60 protected override byte[] ProcessRequest(string path, Stream requestData,
@@ -75,6 +77,15 @@ namespace OpenSim.Region.CoreModules.World.Estate
75 if (!request.ContainsKey("METHOD")) 77 if (!request.ContainsKey("METHOD"))
76 return FailureResult(); 78 return FailureResult();
77 79
80 if (!request.ContainsKey("TOKEN"))
81 return FailureResult();
82
83 string reqToken = request["TOKEN"].ToString();
84 request.Remove("TOKEN");
85
86 if(token != reqToken)
87 return FailureResult();
88
78 string method = request["METHOD"].ToString(); 89 string method = request["METHOD"].ToString();
79 request.Remove("METHOD"); 90 request.Remove("METHOD");
80 91
diff --git a/OpenSim/Region/Framework/Interfaces/IEstateModule.cs b/OpenSim/Region/Framework/Interfaces/IEstateModule.cs
index 461c880..6b8b999 100644
--- a/OpenSim/Region/Framework/Interfaces/IEstateModule.cs
+++ b/OpenSim/Region/Framework/Interfaces/IEstateModule.cs
@@ -39,6 +39,8 @@ namespace OpenSim.Region.Framework.Interfaces
39 event ChangeDelegate OnRegionInfoChange; 39 event ChangeDelegate OnRegionInfoChange;
40 event ChangeDelegate OnEstateInfoChange; 40 event ChangeDelegate OnEstateInfoChange;
41 event MessageDelegate OnEstateMessage; 41 event MessageDelegate OnEstateMessage;
42 event EstateTeleportOneUserHomeRequest OnEstateTeleportOneUserHomeRequest;
43 event EstateTeleportAllUsersHomeRequest OnEstateTeleportAllUsersHomeRequest;
42 44
43 uint GetRegionFlags(); 45 uint GetRegionFlags();
44 bool IsManager(UUID avatarID); 46 bool IsManager(UUID avatarID);