aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Services
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 /OpenSim/Services
parentminor: Tweak BaseHttpServer message to make it clear that this relates to slo... (diff)
downloadopensim-SC_OLD-cccef2e56dc8b02ccd83fb1c832e4ce026cdcaf9.zip
opensim-SC_OLD-cccef2e56dc8b02ccd83fb1c832e4ce026cdcaf9.tar.gz
opensim-SC_OLD-cccef2e56dc8b02ccd83fb1c832e4ce026cdcaf9.tar.bz2
opensim-SC_OLD-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 'OpenSim/Services')
-rw-r--r--OpenSim/Services/LLLoginService/LLLoginResponse.cs43
-rw-r--r--OpenSim/Services/LLLoginService/LLLoginService.cs17
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