aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim')
-rw-r--r--OpenSim/Data/SQLite/Resources/RegionStore.migrations24
-rw-r--r--OpenSim/Data/SQLite/SQLiteSimulationData.cs105
-rw-r--r--OpenSim/Region/CoreModules/World/Land/LandObject.cs3
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.cs34
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectPart.cs6
-rw-r--r--OpenSim/Services/HypergridService/GatekeeperService.cs8
-rw-r--r--OpenSim/Services/LLLoginService/LLLoginService.cs2
7 files changed, 171 insertions, 11 deletions
diff --git a/OpenSim/Data/SQLite/Resources/RegionStore.migrations b/OpenSim/Data/SQLite/Resources/RegionStore.migrations
index 0f40cdc..1ceddf9 100644
--- a/OpenSim/Data/SQLite/Resources/RegionStore.migrations
+++ b/OpenSim/Data/SQLite/Resources/RegionStore.migrations
@@ -541,4 +541,26 @@ CREATE TABLE regionwindlight (
541 cloud_scroll_y_lock INTEGER NOT NULL DEFAULT '0', 541 cloud_scroll_y_lock INTEGER NOT NULL DEFAULT '0',
542 draw_classic_clouds INTEGER NOT NULL DEFAULT '1'); 542 draw_classic_clouds INTEGER NOT NULL DEFAULT '1');
543 543
544COMMIT; \ No newline at end of file 544COMMIT;
545
546
547:VERSION 24
548
549BEGIN;
550
551CREATE TABLE IF NOT EXISTS `spawn_points` (
552 `RegionID` varchar(36) NOT NULL DEFAULT '000000-0000-0000-0000-000000000000',
553 `Yaw` float NOT NULL,
554 `Pitch` float NOT NULL,
555 `Distance` float NOT NULL
556);
557
558ALTER TABLE `regionsettings` ADD COLUMN `TelehubObject` varchar(36) NOT NULL DEFAULT '00000000-0000-0000-0000-000000000000';
559
560COMMIT;
561
562:VERSION 25
563
564BEGIN;
565ALTER TABLE `regionsettings` ADD COLUMN `parcel_tile_ID` char(36) NOT NULL DEFAULT '00000000-0000-0000-0000-000000000000';
566COMMIT;
diff --git a/OpenSim/Data/SQLite/SQLiteSimulationData.cs b/OpenSim/Data/SQLite/SQLiteSimulationData.cs
index ce1b7b4..6295113 100644
--- a/OpenSim/Data/SQLite/SQLiteSimulationData.cs
+++ b/OpenSim/Data/SQLite/SQLiteSimulationData.cs
@@ -61,6 +61,7 @@ namespace OpenSim.Data.SQLite
61 private const string regionbanListSelect = "select * from regionban"; 61 private const string regionbanListSelect = "select * from regionban";
62 private const string regionSettingsSelect = "select * from regionsettings"; 62 private const string regionSettingsSelect = "select * from regionsettings";
63 private const string regionWindlightSelect = "select * from regionwindlight"; 63 private const string regionWindlightSelect = "select * from regionwindlight";
64 private const string regionSpawnPointsSelect = "select * from spawn_points";
64 65
65 private DataSet ds; 66 private DataSet ds;
66 private SqliteDataAdapter primDa; 67 private SqliteDataAdapter primDa;
@@ -71,6 +72,7 @@ namespace OpenSim.Data.SQLite
71 private SqliteDataAdapter landAccessListDa; 72 private SqliteDataAdapter landAccessListDa;
72 private SqliteDataAdapter regionSettingsDa; 73 private SqliteDataAdapter regionSettingsDa;
73 private SqliteDataAdapter regionWindlightDa; 74 private SqliteDataAdapter regionWindlightDa;
75 private SqliteDataAdapter regionSpawnPointsDa;
74 76
75 private SqliteConnection m_conn; 77 private SqliteConnection m_conn;
76 private String m_connectionString; 78 private String m_connectionString;
@@ -140,6 +142,10 @@ namespace OpenSim.Data.SQLite
140 142
141 SqliteCommand regionWindlightSelectCmd = new SqliteCommand(regionWindlightSelect, m_conn); 143 SqliteCommand regionWindlightSelectCmd = new SqliteCommand(regionWindlightSelect, m_conn);
142 regionWindlightDa = new SqliteDataAdapter(regionWindlightSelectCmd); 144 regionWindlightDa = new SqliteDataAdapter(regionWindlightSelectCmd);
145
146 SqliteCommand regionSpawnPointsSelectCmd = new SqliteCommand(regionSpawnPointsSelect, m_conn);
147 regionSpawnPointsDa = new SqliteDataAdapter(regionSpawnPointsSelectCmd);
148
143 // This actually does the roll forward assembly stuff 149 // This actually does the roll forward assembly stuff
144 Migration m = new Migration(m_conn, Assembly, "RegionStore"); 150 Migration m = new Migration(m_conn, Assembly, "RegionStore");
145 m.Update(); 151 m.Update();
@@ -170,6 +176,9 @@ namespace OpenSim.Data.SQLite
170 ds.Tables.Add(createRegionWindlightTable()); 176 ds.Tables.Add(createRegionWindlightTable());
171 setupRegionWindlightCommands(regionWindlightDa, m_conn); 177 setupRegionWindlightCommands(regionWindlightDa, m_conn);
172 178
179 ds.Tables.Add(createRegionSpawnPointsTable());
180 setupRegionSpawnPointsCommands(regionSpawnPointsDa, m_conn);
181
173 // WORKAROUND: This is a work around for sqlite on 182 // WORKAROUND: This is a work around for sqlite on
174 // windows, which gets really unhappy with blob columns 183 // windows, which gets really unhappy with blob columns
175 // that have no sample data in them. At some point we 184 // that have no sample data in them. At some point we
@@ -246,6 +255,15 @@ namespace OpenSim.Data.SQLite
246 m_log.ErrorFormat("[SQLITE REGION DB]: Caught fill error on regionwindlight table :{0}", e.Message); 255 m_log.ErrorFormat("[SQLITE REGION DB]: Caught fill error on regionwindlight table :{0}", e.Message);
247 } 256 }
248 257
258 try
259 {
260 regionSpawnPointsDa.Fill(ds.Tables["spawn_points"]);
261 }
262 catch (Exception e)
263 {
264 m_log.ErrorFormat("[SQLITE REGION DB]: Caught fill error on spawn_points table :{0}", e.Message);
265 }
266
249 // We have to create a data set mapping for every table, otherwise the IDataAdaptor.Update() will not populate rows with values! 267 // We have to create a data set mapping for every table, otherwise the IDataAdaptor.Update() will not populate rows with values!
250 // Not sure exactly why this is - this kind of thing was not necessary before - justincc 20100409 268 // Not sure exactly why this is - this kind of thing was not necessary before - justincc 20100409
251 // Possibly because we manually set up our own DataTables before connecting to the database 269 // Possibly because we manually set up our own DataTables before connecting to the database
@@ -257,6 +275,7 @@ namespace OpenSim.Data.SQLite
257 CreateDataSetMapping(landAccessListDa, "landaccesslist"); 275 CreateDataSetMapping(landAccessListDa, "landaccesslist");
258 CreateDataSetMapping(regionSettingsDa, "regionsettings"); 276 CreateDataSetMapping(regionSettingsDa, "regionsettings");
259 CreateDataSetMapping(regionWindlightDa, "regionwindlight"); 277 CreateDataSetMapping(regionWindlightDa, "regionwindlight");
278 CreateDataSetMapping(regionSpawnPointsDa, "spawn_points");
260 } 279 }
261 } 280 }
262 catch (Exception e) 281 catch (Exception e)
@@ -319,6 +338,11 @@ namespace OpenSim.Data.SQLite
319 regionWindlightDa.Dispose(); 338 regionWindlightDa.Dispose();
320 regionWindlightDa = null; 339 regionWindlightDa = null;
321 } 340 }
341 if (regionSpawnPointsDa != null)
342 {
343 regionSpawnPointsDa.Dispose();
344 regionWindlightDa = null;
345 }
322 } 346 }
323 347
324 public void StoreRegionSettings(RegionSettings rs) 348 public void StoreRegionSettings(RegionSettings rs)
@@ -339,8 +363,43 @@ namespace OpenSim.Data.SQLite
339 fillRegionSettingsRow(settingsRow, rs); 363 fillRegionSettingsRow(settingsRow, rs);
340 } 364 }
341 365
366 StoreSpawnPoints(rs);
367
342 Commit(); 368 Commit();
343 } 369 }
370
371 }
372
373 public void StoreSpawnPoints(RegionSettings rs)
374 {
375 lock (ds)
376 {
377 // DataTable spawnpoints = ds.Tables["spawn_points"];
378
379 // remove region's spawnpoints
380 using (
381 SqliteCommand cmd =
382 new SqliteCommand("delete from spawn_points where RegionID=:RegionID",
383 m_conn))
384 {
385
386 cmd.Parameters.Add(new SqliteParameter(":RegionID", rs.RegionUUID.ToString()));
387 cmd.ExecuteNonQuery();
388 }
389 }
390
391 foreach (SpawnPoint sp in rs.SpawnPoints())
392 {
393 using (SqliteCommand cmd = new SqliteCommand("insert into spawn_points(RegionID, Yaw, Pitch, Distance)" +
394 "values ( :RegionID, :Yaw, :Pitch, :Distance)", m_conn))
395 {
396 cmd.Parameters.Add(new SqliteParameter(":RegionID", rs.RegionUUID.ToString()));
397 cmd.Parameters.Add(new SqliteParameter(":Yaw", sp.Yaw));
398 cmd.Parameters.Add(new SqliteParameter(":Pitch", sp.Pitch));
399 cmd.Parameters.Add(new SqliteParameter(":Distance", sp.Distance));
400 cmd.ExecuteNonQuery();
401 }
402 }
344 } 403 }
345 404
346 /// <summary> 405 /// <summary>
@@ -435,10 +494,31 @@ namespace OpenSim.Data.SQLite
435 RegionSettings newSettings = buildRegionSettings(row); 494 RegionSettings newSettings = buildRegionSettings(row);
436 newSettings.OnSave += StoreRegionSettings; 495 newSettings.OnSave += StoreRegionSettings;
437 496
497 LoadSpawnPoints(newSettings);
498
438 return newSettings; 499 return newSettings;
439 } 500 }
440 } 501 }
441 502
503 private void LoadSpawnPoints(RegionSettings rs)
504 {
505 rs.ClearSpawnPoints();
506
507 DataTable spawnpoints = ds.Tables["spawn_points"];
508 string byRegion = "RegionID = '" + rs.RegionUUID + "'";
509 DataRow[] spForRegion = spawnpoints.Select(byRegion);
510
511 foreach (DataRow spRow in spForRegion)
512 {
513 SpawnPoint sp = new SpawnPoint();
514 sp.Pitch = (float)spRow["Pitch"];
515 sp.Yaw = (float)spRow["Yaw"];
516 sp.Distance = (float)spRow["Distance"];
517
518 rs.AddSpawnPoint(sp);
519 }
520 }
521
442 /// <summary> 522 /// <summary>
443 /// Adds an object into region storage 523 /// Adds an object into region storage
444 /// </summary> 524 /// </summary>
@@ -1265,6 +1345,8 @@ namespace OpenSim.Data.SQLite
1265 createCol(regionsettings, "covenant", typeof(String)); 1345 createCol(regionsettings, "covenant", typeof(String));
1266 createCol(regionsettings, "covenant_datetime", typeof(Int32)); 1346 createCol(regionsettings, "covenant_datetime", typeof(Int32));
1267 createCol(regionsettings, "map_tile_ID", typeof(String)); 1347 createCol(regionsettings, "map_tile_ID", typeof(String));
1348 createCol(regionsettings, "TelehubObject", typeof(String));
1349 createCol(regionsettings, "parcel_tile_ID", typeof(String));
1268 regionsettings.PrimaryKey = new DataColumn[] { regionsettings.Columns["regionUUID"] }; 1350 regionsettings.PrimaryKey = new DataColumn[] { regionsettings.Columns["regionUUID"] };
1269 return regionsettings; 1351 return regionsettings;
1270 } 1352 }
@@ -1345,6 +1427,17 @@ namespace OpenSim.Data.SQLite
1345 return regionwindlight; 1427 return regionwindlight;
1346 } 1428 }
1347 1429
1430 private static DataTable createRegionSpawnPointsTable()
1431 {
1432 DataTable spawn_points = new DataTable("spawn_points");
1433 createCol(spawn_points, "regionID", typeof(String));
1434 createCol(spawn_points, "Yaw", typeof(float));
1435 createCol(spawn_points, "Pitch", typeof(float));
1436 createCol(spawn_points, "Distance", typeof(float));
1437
1438 return spawn_points;
1439 }
1440
1348 /*********************************************************************** 1441 /***********************************************************************
1349 * 1442 *
1350 * Convert between ADO.NET <=> OpenSim Objects 1443 * Convert between ADO.NET <=> OpenSim Objects
@@ -1666,6 +1759,8 @@ namespace OpenSim.Data.SQLite
1666 newSettings.Covenant = new UUID((String)row["covenant"]); 1759 newSettings.Covenant = new UUID((String)row["covenant"]);
1667 newSettings.CovenantChangedDateTime = Convert.ToInt32(row["covenant_datetime"]); 1760 newSettings.CovenantChangedDateTime = Convert.ToInt32(row["covenant_datetime"]);
1668 newSettings.TerrainImageID = new UUID((String)row["map_tile_ID"]); 1761 newSettings.TerrainImageID = new UUID((String)row["map_tile_ID"]);
1762 newSettings.TelehubObject = new UUID((String)row["TelehubObject"]);
1763 newSettings.ParcelImageID = new UUID((String)row["parcel_tile_ID"]);
1669 1764
1670 return newSettings; 1765 return newSettings;
1671 } 1766 }
@@ -2068,6 +2163,8 @@ namespace OpenSim.Data.SQLite
2068 row["covenant"] = settings.Covenant.ToString(); 2163 row["covenant"] = settings.Covenant.ToString();
2069 row["covenant_datetime"] = settings.CovenantChangedDateTime; 2164 row["covenant_datetime"] = settings.CovenantChangedDateTime;
2070 row["map_tile_ID"] = settings.TerrainImageID.ToString(); 2165 row["map_tile_ID"] = settings.TerrainImageID.ToString();
2166 row["TelehubObject"] = settings.TelehubObject.ToString();
2167 row["parcel_tile_ID"] = settings.ParcelImageID.ToString();
2071 } 2168 }
2072 2169
2073 /// <summary> 2170 /// <summary>
@@ -2591,6 +2688,14 @@ namespace OpenSim.Data.SQLite
2591 da.UpdateCommand.Connection = conn; 2688 da.UpdateCommand.Connection = conn;
2592 } 2689 }
2593 2690
2691 private void setupRegionSpawnPointsCommands(SqliteDataAdapter da, SqliteConnection conn)
2692 {
2693 da.InsertCommand = createInsertCommand("spawn_points", ds.Tables["spawn_points"]);
2694 da.InsertCommand.Connection = conn;
2695 da.UpdateCommand = createUpdateCommand("spawn_points", "RegionID=:RegionID", ds.Tables["spawn_points"]);
2696 da.UpdateCommand.Connection = conn;
2697 }
2698
2594 /// <summary> 2699 /// <summary>
2595 /// 2700 ///
2596 /// </summary> 2701 /// </summary>
diff --git a/OpenSim/Region/CoreModules/World/Land/LandObject.cs b/OpenSim/Region/CoreModules/World/Land/LandObject.cs
index d146901..cc42f7f 100644
--- a/OpenSim/Region/CoreModules/World/Land/LandObject.cs
+++ b/OpenSim/Region/CoreModules/World/Land/LandObject.cs
@@ -272,7 +272,8 @@ namespace OpenSim.Region.CoreModules.World.Land
272 ParcelFlags.AllowGroupScripts | 272 ParcelFlags.AllowGroupScripts |
273 ParcelFlags.CreateGroupObjects | 273 ParcelFlags.CreateGroupObjects |
274 ParcelFlags.AllowAPrimitiveEntry | 274 ParcelFlags.AllowAPrimitiveEntry |
275 ParcelFlags.AllowGroupObjectEntry); 275 ParcelFlags.AllowGroupObjectEntry |
276 ParcelFlags.AllowFly);
276 } 277 }
277 278
278 if (m_scene.Permissions.CanEditParcelProperties(remote_client.AgentId, this, GroupPowers.LandSetSale)) 279 if (m_scene.Permissions.CanEditParcelProperties(remote_client.AgentId, this, GroupPowers.LandSetSale))
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index 4c8e2d2..d2a8ad0 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -3259,8 +3259,11 @@ namespace OpenSim.Region.Framework.Scenes
3259 /// also return a reason.</returns> 3259 /// also return a reason.</returns>
3260 public bool NewUserConnection(AgentCircuitData agent, uint teleportFlags, out string reason, bool requirePresenceLookup) 3260 public bool NewUserConnection(AgentCircuitData agent, uint teleportFlags, out string reason, bool requirePresenceLookup)
3261 { 3261 {
3262 bool vialogin = ((teleportFlags & (uint)Constants.TeleportFlags.ViaLogin) != 0 || 3262 bool vialogin = ((teleportFlags & (uint)TPFlags.ViaLogin) != 0 ||
3263 (teleportFlags & (uint)Constants.TeleportFlags.ViaHGLogin) != 0); 3263 (teleportFlags & (uint)TPFlags.ViaHGLogin) != 0);
3264 bool viahome = ((teleportFlags & (uint)TPFlags.ViaHome) != 0);
3265 bool godlike = ((teleportFlags & (uint)TPFlags.Godlike) != 0);
3266
3264 reason = String.Empty; 3267 reason = String.Empty;
3265 3268
3266 //Teleport flags: 3269 //Teleport flags:
@@ -3272,9 +3275,9 @@ namespace OpenSim.Region.Framework.Scenes
3272 3275
3273 // Don't disable this log message - it's too helpful 3276 // Don't disable this log message - it's too helpful
3274 m_log.DebugFormat( 3277 m_log.DebugFormat(
3275 "[SCENE]: Region {0} told of incoming {1} agent {2} {3} {4} (circuit code {5}, IP {6}, viewer {7}, teleportflags {8}, position {9})", 3278 "[SCENE]: Region {0} told of incoming {1} agent {2} {3} {4} (circuit code {5}, IP {6}, viewer {7}, teleportflags ({8}), position {9})",
3276 RegionInfo.RegionName, (agent.child ? "child" : "root"),agent.firstname, agent.lastname, 3279 RegionInfo.RegionName, (agent.child ? "child" : "root"),agent.firstname, agent.lastname,
3277 agent.AgentID, agent.circuitcode, agent.IPAddress, agent.Viewer, teleportFlags, agent.startpos); 3280 agent.AgentID, agent.circuitcode, agent.IPAddress, agent.Viewer, ((TPFlags)teleportFlags).ToString(), agent.startpos);
3278 3281
3279 if (LoginsDisabled) 3282 if (LoginsDisabled)
3280 { 3283 {
@@ -3427,6 +3430,29 @@ namespace OpenSim.Region.Framework.Scenes
3427 agent.startpos.Z = 720; 3430 agent.startpos.Z = 720;
3428 } 3431 }
3429 } 3432 }
3433
3434 // Honor Estate teleport routing via Telehubs excluding ViaHome and GodLike TeleportFlags
3435 if (RegionInfo.RegionSettings.TelehubObject != UUID.Zero &&
3436 RegionInfo.EstateSettings.AllowDirectTeleport == false &&
3437 !viahome && !godlike)
3438 {
3439 SceneObjectGroup telehub = GetSceneObjectGroup(RegionInfo.RegionSettings.TelehubObject);
3440 // Can have multiple SpawnPoints
3441 List<SpawnPoint> spawnpoints = RegionInfo.RegionSettings.SpawnPoints();
3442 if ( spawnpoints.Count > 1)
3443 {
3444 // We have multiple SpawnPoints, Route the agent to a random one
3445 agent.startpos = spawnpoints[Util.RandomClass.Next(spawnpoints.Count)].GetLocation(telehub.AbsolutePosition, telehub.GroupRotation);
3446 }
3447 else
3448 {
3449 // We have a single SpawnPoint and will route the agent to it
3450 agent.startpos = spawnpoints[0].GetLocation(telehub.AbsolutePosition, telehub.GroupRotation);
3451 }
3452
3453 return true;
3454 }
3455
3430 // Honor parcel landing type and position. 3456 // Honor parcel landing type and position.
3431 if (land != null) 3457 if (land != null)
3432 { 3458 {
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index b130bf7..65905a0 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -1556,9 +1556,9 @@ namespace OpenSim.Region.Framework.Scenes
1556 dupe.GroupPosition = GroupPosition; 1556 dupe.GroupPosition = GroupPosition;
1557 dupe.OffsetPosition = OffsetPosition; 1557 dupe.OffsetPosition = OffsetPosition;
1558 dupe.RotationOffset = RotationOffset; 1558 dupe.RotationOffset = RotationOffset;
1559 dupe.Velocity = new Vector3(0, 0, 0); 1559 dupe.Velocity = Velocity;
1560 dupe.Acceleration = new Vector3(0, 0, 0); 1560 dupe.Acceleration = Acceleration;
1561 dupe.AngularVelocity = new Vector3(0, 0, 0); 1561 dupe.AngularVelocity = AngularVelocity;
1562 dupe.Flags = Flags; 1562 dupe.Flags = Flags;
1563 1563
1564 dupe.OwnershipCost = OwnershipCost; 1564 dupe.OwnershipCost = OwnershipCost;
diff --git a/OpenSim/Services/HypergridService/GatekeeperService.cs b/OpenSim/Services/HypergridService/GatekeeperService.cs
index 5d99c79..0a59f86 100644
--- a/OpenSim/Services/HypergridService/GatekeeperService.cs
+++ b/OpenSim/Services/HypergridService/GatekeeperService.cs
@@ -188,9 +188,9 @@ namespace OpenSim.Services.HypergridService
188 string authURL = string.Empty; 188 string authURL = string.Empty;
189 if (aCircuit.ServiceURLs.ContainsKey("HomeURI")) 189 if (aCircuit.ServiceURLs.ContainsKey("HomeURI"))
190 authURL = aCircuit.ServiceURLs["HomeURI"].ToString(); 190 authURL = aCircuit.ServiceURLs["HomeURI"].ToString();
191 m_log.InfoFormat("[GATEKEEPER SERVICE]: Login request for {0} {1} @ {2} ({3}) at {4} using viewer {5}, channel {6}, IP {7}, Mac {8}, Id0 {9}", 191 m_log.InfoFormat("[GATEKEEPER SERVICE]: Login request for {0} {1} @ {2} ({3}) at {4} using viewer {5}, channel {6}, IP {7}, Mac {8}, Id0 {9} Teleport Flags {10}",
192 aCircuit.firstname, aCircuit.lastname, authURL, aCircuit.AgentID, destination.RegionName, 192 aCircuit.firstname, aCircuit.lastname, authURL, aCircuit.AgentID, destination.RegionName,
193 aCircuit.Viewer, aCircuit.Channel, aCircuit.IPAddress, aCircuit.Mac, aCircuit.Id0); 193 aCircuit.Viewer, aCircuit.Channel, aCircuit.IPAddress, aCircuit.Mac, aCircuit.Id0, aCircuit.teleportFlags.ToString());
194 194
195 // 195 //
196 // Check client 196 // Check client
@@ -315,6 +315,10 @@ namespace OpenSim.Services.HypergridService
315 // Finally launch the agent at the destination 315 // Finally launch the agent at the destination
316 // 316 //
317 Constants.TeleportFlags loginFlag = isFirstLogin ? Constants.TeleportFlags.ViaLogin : Constants.TeleportFlags.ViaHGLogin; 317 Constants.TeleportFlags loginFlag = isFirstLogin ? Constants.TeleportFlags.ViaLogin : Constants.TeleportFlags.ViaHGLogin;
318
319 // Preserve our TeleportFlags we have gathered so-far
320 loginFlag |= (Constants.TeleportFlags) aCircuit.teleportFlags;
321
318 m_log.DebugFormat("[GATEKEEPER SERVICE]: launching agent {0}", loginFlag); 322 m_log.DebugFormat("[GATEKEEPER SERVICE]: launching agent {0}", loginFlag);
319 return m_SimulationService.CreateAgent(destination, aCircuit, (uint)loginFlag, out reason); 323 return m_SimulationService.CreateAgent(destination, aCircuit, (uint)loginFlag, out reason);
320 } 324 }
diff --git a/OpenSim/Services/LLLoginService/LLLoginService.cs b/OpenSim/Services/LLLoginService/LLLoginService.cs
index 02b5cc1..5dff512 100644
--- a/OpenSim/Services/LLLoginService/LLLoginService.cs
+++ b/OpenSim/Services/LLLoginService/LLLoginService.cs
@@ -465,6 +465,7 @@ namespace OpenSim.Services.LLLoginService
465 465
466 position = pinfo.HomePosition; 466 position = pinfo.HomePosition;
467 lookAt = pinfo.HomeLookAt; 467 lookAt = pinfo.HomeLookAt;
468 flags |= TeleportFlags.ViaHome;
468 } 469 }
469 470
470 if (tryDefaults) 471 if (tryDefaults)
@@ -753,6 +754,7 @@ namespace OpenSim.Services.LLLoginService
753 { 754 {
754 circuitCode = (uint)Util.RandomClass.Next(); ; 755 circuitCode = (uint)Util.RandomClass.Next(); ;
755 aCircuit = MakeAgent(destination, account, avatar, session, secureSession, circuitCode, position, clientIP.Address.ToString(), viewer, channel, mac, id0); 756 aCircuit = MakeAgent(destination, account, avatar, session, secureSession, circuitCode, position, clientIP.Address.ToString(), viewer, channel, mac, id0);
757 aCircuit.teleportFlags |= (uint)flags;
756 success = LaunchAgentIndirectly(gatekeeper, destination, aCircuit, clientIP, out reason); 758 success = LaunchAgentIndirectly(gatekeeper, destination, aCircuit, clientIP, out reason);
757 if (!success && m_GridService != null) 759 if (!success && m_GridService != null)
758 { 760 {