diff options
author | Justin Clark-Casey (justincc) | 2012-05-04 19:21:43 +0100 |
---|---|---|
committer | Justin Clark-Casey (justincc) | 2012-05-04 19:21:43 +0100 |
commit | cccef2e56dc8b02ccd83fb1c832e4ce026cdcaf9 (patch) | |
tree | 20f26f179ac1af19c7bfcbbc076aaebc2bc3535d | |
parent | minor: Tweak BaseHttpServer message to make it clear that this relates to slo... (diff) | |
download | opensim-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.cs | 43 | ||||
-rw-r--r-- | OpenSim/Services/LLLoginService/LLLoginService.cs | 17 | ||||
-rw-r--r-- | bin/Robust.HG.ini.example | 12 | ||||
-rw-r--r-- | bin/Robust.ini.example | 21 | ||||
-rw-r--r-- | bin/config-include/Standalone.ini | 12 |
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 |