diff options
author | UbitUmarov | 2016-08-17 06:00:42 +0100 |
---|---|---|
committer | UbitUmarov | 2016-08-17 06:00:42 +0100 |
commit | 04ea34f379a1839e618ef1a7ba05a1be19f8e43c (patch) | |
tree | 9b0e7fad4f2b50b5dcfdcb1c261dacbeec7d7ffc | |
parent | drasticly reduce HG inventory caches Expire times, Remove them all onClientC... (diff) | |
download | opensim-SC-04ea34f379a1839e618ef1a7ba05a1be19f8e43c.zip opensim-SC-04ea34f379a1839e618ef1a7ba05a1be19f8e43c.tar.gz opensim-SC-04ea34f379a1839e618ef1a7ba05a1be19f8e43c.tar.bz2 opensim-SC-04ea34f379a1839e618ef1a7ba05a1be19f8e43c.tar.xz |
add GetUsersNames(string[] ids) to UserManagement. Make GetDisplayNames cap use it so several IDs are handle on a single call. Since there is no grid side suport, no much gain still
5 files changed, 143 insertions, 36 deletions
diff --git a/OpenSim/Capabilities/Handlers/GetDisplayNames/GetDisplayNamesHandler.cs b/OpenSim/Capabilities/Handlers/GetDisplayNames/GetDisplayNamesHandler.cs index 155196c..3e01bbb 100644 --- a/OpenSim/Capabilities/Handlers/GetDisplayNames/GetDisplayNamesHandler.cs +++ b/OpenSim/Capabilities/Handlers/GetDisplayNames/GetDisplayNamesHandler.cs | |||
@@ -29,8 +29,6 @@ using System; | |||
29 | using System.Collections; | 29 | using System.Collections; |
30 | using System.Collections.Generic; | 30 | using System.Collections.Generic; |
31 | using System.Collections.Specialized; | 31 | using System.Collections.Specialized; |
32 | using System.Drawing; | ||
33 | using System.Drawing.Imaging; | ||
34 | using System.Reflection; | 32 | using System.Reflection; |
35 | using System.IO; | 33 | using System.IO; |
36 | using System.Web; | 34 | using System.Web; |
@@ -38,12 +36,7 @@ using log4net; | |||
38 | using Nini.Config; | 36 | using Nini.Config; |
39 | using OpenMetaverse; | 37 | using OpenMetaverse; |
40 | using OpenMetaverse.StructuredData; | 38 | using OpenMetaverse.StructuredData; |
41 | using OpenMetaverse.Imaging; | ||
42 | using OpenSim.Framework; | ||
43 | using OpenSim.Framework.Capabilities; | ||
44 | using OpenSim.Framework.Servers; | ||
45 | using OpenSim.Framework.Servers.HttpServer; | 39 | using OpenSim.Framework.Servers.HttpServer; |
46 | using OpenSim.Region.Framework.Interfaces; | ||
47 | using OpenSim.Services.Interfaces; | 40 | using OpenSim.Services.Interfaces; |
48 | using Caps = OpenSim.Framework.Capabilities.Caps; | 41 | using Caps = OpenSim.Framework.Capabilities.Caps; |
49 | using OSDMap = OpenMetaverse.StructuredData.OSDMap; | 42 | using OSDMap = OpenMetaverse.StructuredData.OSDMap; |
@@ -70,7 +63,6 @@ namespace OpenSim.Capabilities.Handlers | |||
70 | NameValueCollection query = HttpUtility.ParseQueryString(httpRequest.Url.Query); | 63 | NameValueCollection query = HttpUtility.ParseQueryString(httpRequest.Url.Query); |
71 | string[] ids = query.GetValues("ids"); | 64 | string[] ids = query.GetValues("ids"); |
72 | 65 | ||
73 | |||
74 | if (m_UserManagement == null) | 66 | if (m_UserManagement == null) |
75 | { | 67 | { |
76 | m_log.Error("[GET_DISPLAY_NAMES]: Cannot fetch display names without a user management component"); | 68 | m_log.Error("[GET_DISPLAY_NAMES]: Cannot fetch display names without a user management component"); |
@@ -78,35 +70,39 @@ namespace OpenSim.Capabilities.Handlers | |||
78 | return new byte[0]; | 70 | return new byte[0]; |
79 | } | 71 | } |
80 | 72 | ||
73 | Dictionary<UUID,string> names = m_UserManagement.GetUsersNames(ids); | ||
74 | |||
81 | OSDMap osdReply = new OSDMap(); | 75 | OSDMap osdReply = new OSDMap(); |
82 | OSDArray agents = new OSDArray(); | 76 | OSDArray agents = new OSDArray(); |
83 | 77 | ||
84 | osdReply["agents"] = agents; | 78 | osdReply["agents"] = agents; |
85 | foreach (string id in ids) | 79 | foreach (KeyValuePair<UUID,string> kvp in names) |
86 | { | 80 | { |
87 | UUID uuid = UUID.Zero; | 81 | if (string.IsNullOrEmpty(kvp.Value)) |
88 | if (UUID.TryParse(id, out uuid)) | 82 | continue; |
89 | { | 83 | if(kvp.Key == UUID.Zero) |
90 | string name = m_UserManagement.GetUserName(uuid); | 84 | continue; |
91 | if (!string.IsNullOrEmpty(name)) | ||
92 | { | ||
93 | string[] parts = name.Split(new char[] {' '}); | ||
94 | OSDMap osdname = new OSDMap(); | ||
95 | // a date that is valid | ||
96 | // osdname["display_name_next_update"] = OSD.FromDate(new DateTime(1970,1,1)); | ||
97 | // but send one that blocks edition, since we actually don't suport this | ||
98 | osdname["display_name_next_update"] = OSD.FromDate(DateTime.UtcNow.AddDays(8)); | ||
99 | osdname["display_name_expires"] = OSD.FromDate(DateTime.UtcNow.AddMonths(1)); | ||
100 | osdname["display_name"] = OSD.FromString(name); | ||
101 | osdname["legacy_first_name"] = parts[0]; | ||
102 | osdname["legacy_last_name"] = parts[1]; | ||
103 | osdname["username"] = OSD.FromString(name); | ||
104 | osdname["id"] = OSD.FromUUID(uuid); | ||
105 | osdname["is_display_name_default"] = OSD.FromBoolean(true); | ||
106 | 85 | ||
107 | agents.Add(osdname); | 86 | string[] parts = kvp.Value.Split(new char[] {' '}); |
108 | } | 87 | OSDMap osdname = new OSDMap(); |
88 | if(parts[0] == "Unknown") | ||
89 | { | ||
90 | osdname["display_name_next_update"] = OSD.FromDate(DateTime.UtcNow.AddHours(1)); | ||
91 | osdname["display_name_expires"] = OSD.FromDate(DateTime.UtcNow.AddHours(2)); | ||
109 | } | 92 | } |
93 | else | ||
94 | { | ||
95 | osdname["display_name_next_update"] = OSD.FromDate(DateTime.UtcNow.AddDays(8)); | ||
96 | osdname["display_name_expires"] = OSD.FromDate(DateTime.UtcNow.AddMonths(1)); | ||
97 | } | ||
98 | osdname["display_name"] = OSD.FromString(kvp.Value); | ||
99 | osdname["legacy_first_name"] = parts[0]; | ||
100 | osdname["legacy_last_name"] = parts[1]; | ||
101 | osdname["username"] = OSD.FromString(kvp.Value); | ||
102 | osdname["id"] = OSD.FromUUID(kvp.Key); | ||
103 | osdname["is_display_name_default"] = OSD.FromBoolean(true); | ||
104 | |||
105 | agents.Add(osdname); | ||
110 | } | 106 | } |
111 | 107 | ||
112 | // Full content request | 108 | // Full content request |
@@ -116,8 +112,6 @@ namespace OpenSim.Capabilities.Handlers | |||
116 | 112 | ||
117 | string reply = OSDParser.SerializeLLSDXmlString(osdReply); | 113 | string reply = OSDParser.SerializeLLSDXmlString(osdReply); |
118 | return System.Text.Encoding.UTF8.GetBytes(reply); | 114 | return System.Text.Encoding.UTF8.GetBytes(reply); |
119 | |||
120 | } | 115 | } |
121 | |||
122 | } | 116 | } |
123 | } | 117 | } |
diff --git a/OpenSim/Capabilities/Handlers/GetDisplayNames/GetDisplayNamesServerConnector.cs b/OpenSim/Capabilities/Handlers/GetDisplayNames/GetDisplayNamesServerConnector.cs index d42de56..8f70c97 100644 --- a/OpenSim/Capabilities/Handlers/GetDisplayNames/GetDisplayNamesServerConnector.cs +++ b/OpenSim/Capabilities/Handlers/GetDisplayNames/GetDisplayNamesServerConnector.cs | |||
@@ -61,8 +61,6 @@ namespace OpenSim.Capabilities.Handlers | |||
61 | 61 | ||
62 | if (m_UserManagement == null) | 62 | if (m_UserManagement == null) |
63 | throw new Exception(String.Format("Failed to load UserManagement from {0}; config is {1}", umService, m_ConfigName)); | 63 | throw new Exception(String.Format("Failed to load UserManagement from {0}; config is {1}", umService, m_ConfigName)); |
64 | |||
65 | string rurl = serverConfig.GetString("GetTextureRedirectURL"); | ||
66 | 64 | ||
67 | server.AddStreamHandler( | 65 | server.AddStreamHandler( |
68 | new GetDisplayNamesHandler("/CAPS/agents/", m_UserManagement, "GetDisplayNames", null)); | 66 | new GetDisplayNamesHandler("/CAPS/agents/", m_UserManagement, "GetDisplayNames", null)); |
diff --git a/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs b/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs index b72593c..2fd9183 100644 --- a/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs +++ b/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs | |||
@@ -481,6 +481,121 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement | |||
481 | return user.FirstName + " " + user.LastName; | 481 | return user.FirstName + " " + user.LastName; |
482 | } | 482 | } |
483 | 483 | ||
484 | public virtual Dictionary<UUID,string> GetUsersNames(string[] ids) | ||
485 | { | ||
486 | Dictionary<UUID,string> ret = new Dictionary<UUID,string>(); | ||
487 | if(m_Scenes.Count <= 0) | ||
488 | return ret; | ||
489 | |||
490 | List<string> missing = new List<string>(); | ||
491 | |||
492 | // look in cache | ||
493 | UserData userdata = new UserData(); | ||
494 | UUID uuid = UUID.Zero; | ||
495 | foreach(string id in ids) | ||
496 | { | ||
497 | if(UUID.TryParse(id, out uuid)) | ||
498 | { | ||
499 | lock (m_UserCache) | ||
500 | { | ||
501 | if (m_UserCache.TryGetValue(uuid, out userdata) && | ||
502 | userdata.HasGridUserTried && | ||
503 | userdata.FirstName != "Unknown") | ||
504 | { | ||
505 | string name = userdata.FirstName + " " + userdata.LastName; | ||
506 | ret[uuid] = name; | ||
507 | } | ||
508 | else | ||
509 | missing.Add(id); | ||
510 | } | ||
511 | } | ||
512 | } | ||
513 | |||
514 | if(missing.Count == 0) | ||
515 | return ret; | ||
516 | |||
517 | // try user account service | ||
518 | List<UserAccount> accounts = m_Scenes[0].UserAccountService.GetUserAccounts( | ||
519 | m_Scenes[0].RegionInfo.ScopeID, missing); | ||
520 | |||
521 | if(accounts.Count != 0) | ||
522 | { | ||
523 | foreach(UserAccount uac in accounts) | ||
524 | { | ||
525 | if(uac != null) | ||
526 | { | ||
527 | string name = uac.FirstName + " " + uac.LastName; | ||
528 | ret[uac.PrincipalID] = name; | ||
529 | missing.Remove(uac.PrincipalID.ToString()); // slowww | ||
530 | |||
531 | userdata = new UserData(); | ||
532 | userdata.Id = uac.PrincipalID; | ||
533 | userdata.FirstName = uac.FirstName; | ||
534 | userdata.LastName = uac.LastName; | ||
535 | userdata.HomeURL = string.Empty; | ||
536 | userdata.IsUnknownUser = false; | ||
537 | userdata.HasGridUserTried = true; | ||
538 | lock (m_UserCache) | ||
539 | m_UserCache[uac.PrincipalID] = userdata; | ||
540 | } | ||
541 | } | ||
542 | } | ||
543 | |||
544 | if (missing.Count == 0 || m_Scenes[0].GridUserService == null) | ||
545 | return ret; | ||
546 | |||
547 | // try grid user service | ||
548 | |||
549 | GridUserInfo[] pinfos = m_Scenes[0].GridUserService.GetGridUserInfo(missing.ToArray()); | ||
550 | if(pinfos.Length > 0) | ||
551 | { | ||
552 | foreach(GridUserInfo uInfo in pinfos) | ||
553 | { | ||
554 | if (uInfo != null) | ||
555 | { | ||
556 | string url, first, last, tmp; | ||
557 | UUID u; | ||
558 | if(uInfo.UserID.Length <= 36) | ||
559 | continue; | ||
560 | |||
561 | if (Util.ParseUniversalUserIdentifier(uInfo.UserID, out u, out url, out first, out last, out tmp)) | ||
562 | { | ||
563 | if (url != string.Empty) | ||
564 | { | ||
565 | try | ||
566 | { | ||
567 | string name = first.Replace(" ", ".") + "." + last.Replace(" ", ".") + " @" + new Uri(url).Authority; | ||
568 | ret[u] = name; | ||
569 | missing.Remove(u.ToString()); | ||
570 | } | ||
571 | catch | ||
572 | { | ||
573 | } | ||
574 | } | ||
575 | } | ||
576 | } | ||
577 | } | ||
578 | } | ||
579 | |||
580 | // add the UMMthings ( not sure we should) | ||
581 | if(missing.Count > 0) | ||
582 | { | ||
583 | foreach(string id in missing) | ||
584 | { | ||
585 | if(UUID.TryParse(id, out uuid) && uuid != UUID.Zero) | ||
586 | { | ||
587 | if (m_Scenes[0].LibraryService != null && | ||
588 | (m_Scenes[0].LibraryService.LibraryRootFolder.Owner == uuid)) | ||
589 | ret[uuid] = "Mr OpenSim"; | ||
590 | else | ||
591 | ret[uuid] = "Unknown UserUMMAU43"; | ||
592 | } | ||
593 | } | ||
594 | } | ||
595 | |||
596 | return ret; | ||
597 | } | ||
598 | |||
484 | public virtual string GetUserHomeURL(UUID userID) | 599 | public virtual string GetUserHomeURL(UUID userID) |
485 | { | 600 | { |
486 | UserData user; | 601 | UserData user; |
@@ -584,7 +699,6 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement | |||
584 | else | 699 | else |
585 | { | 700 | { |
586 | userdata = new UserData(); | 701 | userdata = new UserData(); |
587 | userdata.HasGridUserTried = false; | ||
588 | userdata.Id = uuid; | 702 | userdata.Id = uuid; |
589 | userdata.FirstName = "Unknown"; | 703 | userdata.FirstName = "Unknown"; |
590 | userdata.LastName = "UserUMMAU42"; | 704 | userdata.LastName = "UserUMMAU42"; |
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/UserAccounts/RemoteUserAccountServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/UserAccounts/RemoteUserAccountServiceConnector.cs index ce1754f..90c90d6 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/UserAccounts/RemoteUserAccountServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/UserAccounts/RemoteUserAccountServiceConnector.cs | |||
@@ -165,7 +165,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.UserAccounts | |||
165 | List<UserAccount> accs = new List<UserAccount>(); | 165 | List<UserAccount> accs = new List<UserAccount>(); |
166 | List<string> missing = new List<string>(); | 166 | List<string> missing = new List<string>(); |
167 | 167 | ||
168 | UUID uuid = UUID.Zero;; | 168 | UUID uuid = UUID.Zero; |
169 | UserAccount account; | 169 | UserAccount account; |
170 | bool inCache = false; | 170 | bool inCache = false; |
171 | 171 | ||
diff --git a/OpenSim/Services/Interfaces/IUserManagement.cs b/OpenSim/Services/Interfaces/IUserManagement.cs index 9e560d5..225560e 100644 --- a/OpenSim/Services/Interfaces/IUserManagement.cs +++ b/OpenSim/Services/Interfaces/IUserManagement.cs | |||
@@ -42,6 +42,7 @@ namespace OpenSim.Services.Interfaces | |||
42 | string GetUserUUI(UUID uuid); | 42 | string GetUserUUI(UUID uuid); |
43 | bool GetUserUUI(UUID userID, out string uui); | 43 | bool GetUserUUI(UUID userID, out string uui); |
44 | string GetUserServerURL(UUID uuid, string serverType); | 44 | string GetUserServerURL(UUID uuid, string serverType); |
45 | Dictionary<UUID,string> GetUsersNames(string[] ids); | ||
45 | 46 | ||
46 | /// <summary> | 47 | /// <summary> |
47 | /// Get user ID by the given name. | 48 | /// Get user ID by the given name. |