aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorJustin Clark-Casey (justincc)2012-05-04 19:21:43 +0100
committerJustin Clark-Casey (justincc)2012-05-04 19:21:43 +0100
commitcccef2e56dc8b02ccd83fb1c832e4ce026cdcaf9 (patch)
tree20f26f179ac1af19c7bfcbbc076aaebc2bc3535d
parentminor: Tweak BaseHttpServer message to make it clear that this relates to slo... (diff)
downloadopensim-SC-cccef2e56dc8b02ccd83fb1c832e4ce026cdcaf9.zip
opensim-SC-cccef2e56dc8b02ccd83fb1c832e4ce026cdcaf9.tar.gz
opensim-SC-cccef2e56dc8b02ccd83fb1c832e4ce026cdcaf9.tar.bz2
opensim-SC-cccef2e56dc8b02ccd83fb1c832e4ce026cdcaf9.tar.xz
Calculate the Daylight Savings Time information sent to the viewer based on US Pacific Standard Time rather than whatever timezone the login server is set to.
This is because the viewer doesn't receive a timezone from the server but bases its displays on Pacific Standard Time. However, it still expects to receive notification from the server as to whether or not Daylight Savings Time for PST is in operation. This commit introduces a new DSTZone setting in the [LoginService] config setting that accepts a list of timezone names valid across different platforms to calculate Pacific DST. If you need the old behaviour of calculating DST based on the local timezone of the server running the login service, then please override DSTZone with "local". A mailing list announcement will be made later. Thanks to Olivier Van Helden and Gudule Lapointe for determining this behaviour and providing this patch. From http://opensimulator.org/mantis/view.php?id=5972
-rw-r--r--OpenSim/Services/LLLoginService/LLLoginResponse.cs43
-rw-r--r--OpenSim/Services/LLLoginService/LLLoginService.cs17
-rw-r--r--bin/Robust.HG.ini.example12
-rw-r--r--bin/Robust.ini.example21
-rw-r--r--bin/config-include/Standalone.ini12
5 files changed, 100 insertions, 5 deletions
diff --git a/OpenSim/Services/LLLoginService/LLLoginResponse.cs b/OpenSim/Services/LLLoginService/LLLoginResponse.cs
index 01de159..6b3bc84 100644
--- a/OpenSim/Services/LLLoginService/LLLoginResponse.cs
+++ b/OpenSim/Services/LLLoginService/LLLoginResponse.cs
@@ -226,7 +226,8 @@ namespace OpenSim.Services.LLLoginService
226 public LLLoginResponse(UserAccount account, AgentCircuitData aCircuit, GridUserInfo pinfo, 226 public LLLoginResponse(UserAccount account, AgentCircuitData aCircuit, GridUserInfo pinfo,
227 GridRegion destination, List<InventoryFolderBase> invSkel, FriendInfo[] friendsList, ILibraryService libService, 227 GridRegion destination, List<InventoryFolderBase> invSkel, FriendInfo[] friendsList, ILibraryService libService,
228 string where, string startlocation, Vector3 position, Vector3 lookAt, List<InventoryItemBase> gestures, string message, 228 string where, string startlocation, Vector3 position, Vector3 lookAt, List<InventoryItemBase> gestures, string message,
229 GridRegion home, IPEndPoint clientIP, string mapTileURL, string profileURL, string openIDURL, string searchURL, string currency) 229 GridRegion home, IPEndPoint clientIP, string mapTileURL, string profileURL, string openIDURL, string searchURL, string currency,
230 string DSTZone)
230 : this() 231 : this()
231 { 232 {
232 FillOutInventoryData(invSkel, libService); 233 FillOutInventoryData(invSkel, libService);
@@ -255,7 +256,45 @@ namespace OpenSim.Services.LLLoginService
255 FillOutRegionData(destination); 256 FillOutRegionData(destination);
256 257
257 FillOutSeedCap(aCircuit, destination, clientIP); 258 FillOutSeedCap(aCircuit, destination, clientIP);
258 259
260 switch (DSTZone)
261 {
262 case "none":
263 DST = "N";
264 break;
265 case "local":
266 DST = TimeZone.CurrentTimeZone.IsDaylightSavingTime(DateTime.Now) ? "Y" : "N";
267 break;
268 default:
269 TimeZoneInfo dstTimeZone = null;
270 string[] tzList = DSTZone.Split(';');
271
272 foreach (string tzName in tzList)
273 {
274 try
275 {
276 dstTimeZone = TimeZoneInfo.FindSystemTimeZoneById(tzName);
277 }
278 catch (Exception e)
279 {
280 continue;
281 }
282 break;
283 }
284
285 if (dstTimeZone == null)
286 {
287 m_log.WarnFormat(
288 "[LLOGIN RESPONSE]: No valid timezone found for DST in {0}, falling back to system time.", tzList);
289 DST = TimeZone.CurrentTimeZone.IsDaylightSavingTime(DateTime.Now) ? "Y" : "N";
290 }
291 else
292 {
293 DST = dstTimeZone.IsDaylightSavingTime(DateTime.Now) ? "Y" : "N";
294 }
295
296 break;
297 }
259 } 298 }
260 299
261 private void FillOutInventoryData(List<InventoryFolderBase> invSkel, ILibraryService libService) 300 private void FillOutInventoryData(List<InventoryFolderBase> invSkel, ILibraryService libService)
diff --git a/OpenSim/Services/LLLoginService/LLLoginService.cs b/OpenSim/Services/LLLoginService/LLLoginService.cs
index db8a9cb..9acba11 100644
--- a/OpenSim/Services/LLLoginService/LLLoginService.cs
+++ b/OpenSim/Services/LLLoginService/LLLoginService.cs
@@ -82,6 +82,8 @@ namespace OpenSim.Services.LLLoginService
82 protected string m_AllowedClients; 82 protected string m_AllowedClients;
83 protected string m_DeniedClients; 83 protected string m_DeniedClients;
84 84
85 protected string m_DSTZone;
86
85 IConfig m_LoginServerConfig; 87 IConfig m_LoginServerConfig;
86// IConfig m_ClientsConfig; 88// IConfig m_ClientsConfig;
87 89
@@ -118,6 +120,8 @@ namespace OpenSim.Services.LLLoginService
118 m_AllowedClients = m_LoginServerConfig.GetString("AllowedClients", string.Empty); 120 m_AllowedClients = m_LoginServerConfig.GetString("AllowedClients", string.Empty);
119 m_DeniedClients = m_LoginServerConfig.GetString("DeniedClients", string.Empty); 121 m_DeniedClients = m_LoginServerConfig.GetString("DeniedClients", string.Empty);
120 122
123 m_DSTZone = m_LoginServerConfig.GetString("DSTZone", "America/Los_Angeles;Pacific Standard Time");
124
121 // Clean up some of these vars 125 // Clean up some of these vars
122 if (m_MapTileURL != String.Empty) 126 if (m_MapTileURL != String.Empty)
123 { 127 {
@@ -240,6 +244,7 @@ namespace OpenSim.Services.LLLoginService
240 244
241 m_log.InfoFormat("[LLOGIN SERVICE]: Login request for {0} {1} at {2} using viewer {3}, channel {4}, IP {5}, Mac {6}, Id0 {7}", 245 m_log.InfoFormat("[LLOGIN SERVICE]: Login request for {0} {1} at {2} using viewer {3}, channel {4}, IP {5}, Mac {6}, Id0 {7}",
242 firstName, lastName, startLocation, clientVersion, channel, clientIP.Address.ToString(), mac, id0); 246 firstName, lastName, startLocation, clientVersion, channel, clientIP.Address.ToString(), mac, id0);
247
243 try 248 try
244 { 249 {
245 // 250 //
@@ -416,8 +421,11 @@ namespace OpenSim.Services.LLLoginService
416 // 421 //
417 // Finally, fill out the response and return it 422 // Finally, fill out the response and return it
418 // 423 //
419 LLLoginResponse response = new LLLoginResponse(account, aCircuit, guinfo, destination, inventorySkel, friendsList, m_LibraryService, 424 LLLoginResponse response
420 where, startLocation, position, lookAt, gestures, m_WelcomeMessage, home, clientIP, m_MapTileURL, m_ProfileURL, m_OpenIDURL, m_SearchURL, m_Currency); 425 = new LLLoginResponse(
426 account, aCircuit, guinfo, destination, inventorySkel, friendsList, m_LibraryService,
427 where, startLocation, position, lookAt, gestures, m_WelcomeMessage, home, clientIP,
428 m_MapTileURL, m_ProfileURL, m_OpenIDURL, m_SearchURL, m_Currency, m_DSTZone);
421 429
422 m_log.DebugFormat("[LLOGIN SERVICE]: All clear. Sending login response to client."); 430 m_log.DebugFormat("[LLOGIN SERVICE]: All clear. Sending login response to client.");
423 return response; 431 return response;
@@ -431,7 +439,10 @@ namespace OpenSim.Services.LLLoginService
431 } 439 }
432 } 440 }
433 441
434 protected GridRegion FindDestination(UserAccount account, UUID scopeID, GridUserInfo pinfo, UUID sessionID, string startLocation, GridRegion home, out GridRegion gatekeeper, out string where, out Vector3 position, out Vector3 lookAt, out TeleportFlags flags) 442 protected GridRegion FindDestination(
443 UserAccount account, UUID scopeID, GridUserInfo pinfo, UUID sessionID, string startLocation,
444 GridRegion home, out GridRegion gatekeeper,
445 out string where, out Vector3 position, out Vector3 lookAt, out TeleportFlags flags)
435 { 446 {
436 flags = TeleportFlags.ViaLogin; 447 flags = TeleportFlags.ViaLogin;
437 448
diff --git a/bin/Robust.HG.ini.example b/bin/Robust.HG.ini.example
index be75407..00e2fd7 100644
--- a/bin/Robust.HG.ini.example
+++ b/bin/Robust.HG.ini.example
@@ -275,6 +275,18 @@ ServiceConnectors = "8003/OpenSim.Server.Handlers.dll:AssetServiceConnector,8003
275 ;AllowedClients = "" 275 ;AllowedClients = ""
276 ;DeniedClients = "" 276 ;DeniedClients = ""
277 277
278 ;# {DSTZone} {} {Override Daylight Saving Time rules} {* none local} "America/Los_Angeles;Pacific Standard Time"
279 ;; Viewers do not receive timezone information from the server - almost all (?) default to Pacific Standard Time
280 ;; However, they do rely on the server to tell them whether it's Daylight Saving Time or not.
281 ;; Hence, calculating DST based on a different timezone can result in a misleading viewer display and inconsistencies between grids.
282 ;; By default, this setting uses various timezone names to calculate DST with regards to the viewer's standard PST.
283 ;; Options are
284 ;; "none" no DST
285 ;; "local" use the server's only timezone to calculate DST. This is previous OpenSimulator behaviour.
286 ;; "America/Los_Angeles;Pacific Standard Time" use these timezone names to look up Daylight savings.
287 ;; 'America/Los_Angeles' is used on Linux/Mac systems whilst 'Pacific Standard Time' is used on Windows
288 DSTZone = "America/Los_Angeles;Pacific Standard Time"
289
278[MapImageService] 290[MapImageService]
279 LocalServiceModule = "OpenSim.Services.MapImageService.dll:MapImageService" 291 LocalServiceModule = "OpenSim.Services.MapImageService.dll:MapImageService"
280 ; Set this if you want to change the default 292 ; Set this if you want to change the default
diff --git a/bin/Robust.ini.example b/bin/Robust.ini.example
index 582af27..1c04ab5 100644
--- a/bin/Robust.ini.example
+++ b/bin/Robust.ini.example
@@ -250,6 +250,27 @@ ServiceConnectors = "8003/OpenSim.Server.Handlers.dll:AssetServiceConnector,8003
250 ;AllowedClients = "" 250 ;AllowedClients = ""
251 ;DeniedClients = "" 251 ;DeniedClients = ""
252 252
253 ;# {DSTZone} {} {Override Daylight Saving Time rules} {* none local} "America/Los_Angeles;Pacific Standard Time"
254 ;; Viewers do not listen to timezone sent by the server. They use Pacific Standard Time instead,
255 ;; but rely on the server to calculate Daylight Saving Time. Sending another DST than US Pacific
256 ;; would result in time inconsistencies between grids (during summer and around DST transition period)
257 ;; default let OpenSim calculate US Pacific DST
258 ;; "none" disable DST (equivallent to "local" with system set to GMT)
259 ;; "local" force legacy behaviour (using local system time to calculate DST)
260 ; DSTZone = "America/Los_Angeles;Pacific Standard Time"
261
262 ;# {DSTZone} {} {Override Daylight Saving Time rules} {* none local} "America/Los_Angeles;Pacific Standard Time"
263 ;; Viewers do not receive timezone information from the server - almost all (?) default to Pacific Standard Time
264 ;; However, they do rely on the server to tell them whether it's Daylight Saving Time or not.
265 ;; Hence, calculating DST based on a different timezone can result in a misleading viewer display and inconsistencies between grids.
266 ;; By default, this setting uses various timezone names to calculate DST with regards to the viewer's standard PST.
267 ;; Options are
268 ;; "none" no DST
269 ;; "local" use the server's only timezone to calculate DST. This is previous OpenSimulator behaviour.
270 ;; "America/Los_Angeles;Pacific Standard Time" use these timezone names to look up Daylight savings.
271 ;; 'America/Los_Angeles' is used on Linux/Mac systems whilst 'Pacific Standard Time' is used on Windows
272 DSTZone = "America/Los_Angeles;Pacific Standard Time"
273
253[MapImageService] 274[MapImageService]
254 LocalServiceModule = "OpenSim.Services.MapImageService.dll:MapImageService" 275 LocalServiceModule = "OpenSim.Services.MapImageService.dll:MapImageService"
255 ; Set this if you want to change the default 276 ; Set this if you want to change the default
diff --git a/bin/config-include/Standalone.ini b/bin/config-include/Standalone.ini
index d307387..74d9d2e 100644
--- a/bin/config-include/Standalone.ini
+++ b/bin/config-include/Standalone.ini
@@ -95,6 +95,18 @@
95 95
96 WelcomeMessage = "Welcome, Avatar!" 96 WelcomeMessage = "Welcome, Avatar!"
97 97
98 ;# {DSTZone} {} {Override Daylight Saving Time rules} {* none local} "America/Los_Angeles;Pacific Standard Time"
99 ;; Viewers do not receive timezone information from the server - almost all (?) default to Pacific Standard Time
100 ;; However, they do rely on the server to tell them whether it's Daylight Saving Time or not.
101 ;; Hence, calculating DST based on a different timezone can result in a misleading viewer display and inconsistencies between grids.
102 ;; By default, this setting uses various timezone names to calculate DST with regards to the viewer's standard PST.
103 ;; Options are
104 ;; "none" no DST
105 ;; "local" use the server's only timezone to calculate DST. This is previous OpenSimulator behaviour.
106 ;; "America/Los_Angeles;Pacific Standard Time" use these timezone names to look up Daylight savings.
107 ;; 'America/Los_Angeles' is used on Linux/Mac systems whilst 'Pacific Standard Time' is used on Windows
108 DSTZone = "America/Los_Angeles;Pacific Standard Time"
109
98[MapImageService] 110[MapImageService]
99 LocalServiceModule = "OpenSim.Services.MapImageService.dll:MapImageService" 111 LocalServiceModule = "OpenSim.Services.MapImageService.dll:MapImageService"
100 ; in minutes 112 ; in minutes