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 /OpenSim/Services | |
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
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Services/LLLoginService/LLLoginResponse.cs | 43 | ||||
-rw-r--r-- | OpenSim/Services/LLLoginService/LLLoginService.cs | 17 |
2 files changed, 55 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 | ||