Changed how UserProfile performs a fallback call using the OpenProfile API, because now JsonRpcRequest() returns an error result instead of throwing an exception
parent
d62f0bc35d
commit
e8a2eff2e8
|
@ -65,6 +65,8 @@ namespace OpenSim.Region.CoreModules.Avatar.UserProfiles
|
||||||
Dictionary<UUID, UUID> m_classifiedCache = new Dictionary<UUID, UUID>();
|
Dictionary<UUID, UUID> m_classifiedCache = new Dictionary<UUID, UUID>();
|
||||||
Dictionary<UUID, int> m_classifiedInterest = new Dictionary<UUID, int>();
|
Dictionary<UUID, int> m_classifiedInterest = new Dictionary<UUID, int>();
|
||||||
|
|
||||||
|
private JsonRpcRequestManager rpc = new JsonRpcRequestManager();
|
||||||
|
|
||||||
public Scene Scene
|
public Scene Scene
|
||||||
{
|
{
|
||||||
get; private set;
|
get; private set;
|
||||||
|
@ -114,7 +116,6 @@ namespace OpenSim.Region.CoreModules.Avatar.UserProfiles
|
||||||
set;
|
set;
|
||||||
}
|
}
|
||||||
|
|
||||||
JsonRpcRequestManager rpc = new JsonRpcRequestManager();
|
|
||||||
|
|
||||||
#region IRegionModuleBase implementation
|
#region IRegionModuleBase implementation
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -920,7 +921,7 @@ namespace OpenSim.Region.CoreModules.Avatar.UserProfiles
|
||||||
|
|
||||||
public void RequestAvatarProperties(IClientAPI remoteClient, UUID avatarID)
|
public void RequestAvatarProperties(IClientAPI remoteClient, UUID avatarID)
|
||||||
{
|
{
|
||||||
if ( String.IsNullOrEmpty(avatarID.ToString()) || String.IsNullOrEmpty(remoteClient.AgentId.ToString()))
|
if (String.IsNullOrEmpty(avatarID.ToString()) || String.IsNullOrEmpty(remoteClient.AgentId.ToString()))
|
||||||
{
|
{
|
||||||
// Looking for a reason that some viewers are sending null Id's
|
// Looking for a reason that some viewers are sending null Id's
|
||||||
m_log.DebugFormat("[PROFILES]: This should not happen remoteClient.AgentId {0} - avatarID {1}", remoteClient.AgentId, avatarID);
|
m_log.DebugFormat("[PROFILES]: This should not happen remoteClient.AgentId {0} - avatarID {1}", remoteClient.AgentId, avatarID);
|
||||||
|
@ -998,29 +999,10 @@ namespace OpenSim.Region.CoreModules.Avatar.UserProfiles
|
||||||
|
|
||||||
props.UserId = avatarID;
|
props.UserId = avatarID;
|
||||||
|
|
||||||
try
|
if (!GetProfileData(ref props, foreign, out result))
|
||||||
{
|
{
|
||||||
GetProfileData(ref props, out result);
|
m_log.DebugFormat("Error getting profile for {0}: {1}", avatarID, result);
|
||||||
}
|
return;
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
if (foreign)
|
|
||||||
{
|
|
||||||
// Check if the foreign grid is using OpenProfile.
|
|
||||||
// If any error occurs then discard it, and report the original error.
|
|
||||||
try
|
|
||||||
{
|
|
||||||
OpenProfileClient client = new OpenProfileClient(serverURI);
|
|
||||||
if (!client.RequestAvatarPropertiesUsingOpenProfile(ref props))
|
|
||||||
throw e;
|
|
||||||
}
|
|
||||||
catch (Exception)
|
|
||||||
{
|
|
||||||
throw e;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
throw;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
remoteClient.SendAvatarProperties(props.UserId, props.AboutText, born, charterMember , props.FirstLifeText, flags,
|
remoteClient.SendAvatarProperties(props.UserId, props.AboutText, born, charterMember , props.FirstLifeText, flags,
|
||||||
|
@ -1074,10 +1056,7 @@ namespace OpenSim.Region.CoreModules.Avatar.UserProfiles
|
||||||
/// <returns>
|
/// <returns>
|
||||||
/// The profile data.
|
/// The profile data.
|
||||||
/// </returns>
|
/// </returns>
|
||||||
/// <param name='userID'>
|
bool GetProfileData(ref UserProfileProperties properties, bool foreign, out string message)
|
||||||
/// User I.
|
|
||||||
/// </param>
|
|
||||||
bool GetProfileData(ref UserProfileProperties properties, out string message)
|
|
||||||
{
|
{
|
||||||
// Can't handle NPC yet...
|
// Can't handle NPC yet...
|
||||||
ScenePresence p = FindPresence(properties.UserId);
|
ScenePresence p = FindPresence(properties.UserId);
|
||||||
|
@ -1096,14 +1075,42 @@ namespace OpenSim.Region.CoreModules.Avatar.UserProfiles
|
||||||
|
|
||||||
// This is checking a friend on the home grid
|
// This is checking a friend on the home grid
|
||||||
// Not HG friend
|
// Not HG friend
|
||||||
if ( String.IsNullOrEmpty(serverURI))
|
if (String.IsNullOrEmpty(serverURI))
|
||||||
{
|
{
|
||||||
message = "No Presence - foreign friend";
|
message = "No Presence - foreign friend";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
object Prop = (object)properties;
|
object Prop = (object)properties;
|
||||||
rpc.JsonRpcRequest(ref Prop, "avatar_properties_request", serverURI, UUID.Random().ToString());
|
if (!rpc.JsonRpcRequest(ref Prop, "avatar_properties_request", serverURI, UUID.Random().ToString()))
|
||||||
|
{
|
||||||
|
// If it's a foreign user then try again using OpenProfile, in case that's what the grid is using
|
||||||
|
bool secondChanceSuccess = false;
|
||||||
|
if (foreign)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
OpenProfileClient client = new OpenProfileClient(serverURI);
|
||||||
|
if (client.RequestAvatarPropertiesUsingOpenProfile(ref properties))
|
||||||
|
secondChanceSuccess = true;
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
m_log.Debug(string.Format("Request using the OpenProfile API to {0} failed", serverURI), e);
|
||||||
|
// Allow the return 'message' to say "JsonRpcRequest" and not "OpenProfile", because
|
||||||
|
// the most likely reason that OpenProfile failed is that the remote server
|
||||||
|
// doesn't support OpenProfile, and that's not very interesting.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!secondChanceSuccess)
|
||||||
|
{
|
||||||
|
message = string.Format("JsonRpcRequest to {0} failed", serverURI);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// else, continue below
|
||||||
|
}
|
||||||
|
|
||||||
properties = (UserProfileProperties)Prop;
|
properties = (UserProfileProperties)Prop;
|
||||||
|
|
||||||
message = "Success";
|
message = "Success";
|
||||||
|
|
Loading…
Reference in New Issue