When sending JSON-RPC calls (for UserProfile), use WebUtil instead of constructing the HTTP requests manually. This allows the calls to be logged when using "debug http all 6".

This commit is contained in:
Oren Hurvitz
2014-04-24 14:19:03 +03:00
parent 6efc203ce8
commit d15a3b10a3
5 changed files with 92 additions and 124 deletions

View File

@@ -634,8 +634,6 @@ namespace OpenSim.Data.MySQL
{
if(reader.HasRows)
{
m_log.DebugFormat("[PROFILES_DATA]" +
": Getting data for {0}.", props.UserId);
reader.Read();
props.WebUrl = (string)reader["profileURL"];
UUID.TryParse((string)reader["profileImage"], out props.ImageId);
@@ -651,9 +649,6 @@ namespace OpenSim.Data.MySQL
}
else
{
m_log.DebugFormat("[PROFILES_DATA]" +
": No data for {0}", props.UserId);
props.WebUrl = string.Empty;
props.ImageId = UUID.Zero;
props.AboutText = string.Empty;

View File

@@ -584,9 +584,6 @@ namespace OpenSim.Data.SQLite
}
if(reader != null && reader.Read())
{
m_log.DebugFormat("[PROFILES_DATA]" +
": Getting data for {0}.", props.UserId);
props.WebUrl = (string)reader["profileURL"];
UUID.TryParse((string)reader["profileImage"], out props.ImageId);
props.AboutText = (string)reader["profileAboutText"];
@@ -601,9 +598,6 @@ namespace OpenSim.Data.SQLite
}
else
{
m_log.DebugFormat("[PROFILES_DATA]" +
": No data for {0}", props.UserId);
props.WebUrl = string.Empty;
props.ImageId = UUID.Zero;
props.AboutText = string.Empty;

View File

@@ -48,7 +48,6 @@ namespace OpenSim.Framework.Servers.HttpServer
{
}
#region Web Util
/// <summary>
/// Sends json-rpc request with a serializable type.
/// </summary>
@@ -70,64 +69,62 @@ namespace OpenSim.Framework.Servers.HttpServer
public bool JsonRpcRequest(ref object parameters, string method, string uri, string jsonId)
{
if (jsonId == null)
throw new ArgumentNullException ("jsonId");
throw new ArgumentNullException("jsonId");
if (uri == null)
throw new ArgumentNullException ("uri");
throw new ArgumentNullException("uri");
if (method == null)
throw new ArgumentNullException ("method");
throw new ArgumentNullException("method");
if (parameters == null)
throw new ArgumentNullException ("parameters");
// Prep our payload
OSDMap json = new OSDMap();
json.Add("jsonrpc", OSD.FromString("2.0"));
json.Add("id", OSD.FromString(jsonId));
json.Add("method", OSD.FromString(method));
json.Add("params", OSD.SerializeMembers(parameters));
string jsonRequestData = OSDParser.SerializeJsonString(json);
byte[] content = Encoding.UTF8.GetBytes(jsonRequestData);
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(uri);
webRequest.ContentType = "application/json-rpc";
webRequest.Method = "POST";
//Stream dataStream = webRequest.GetRequestStream();
//dataStream.Write(content, 0, content.Length);
//dataStream.Close();
throw new ArgumentNullException("parameters");
using (Stream dataStream = webRequest.GetRequestStream())
dataStream.Write(content, 0, content.Length);
WebResponse webResponse = null;
OSDMap request = new OSDMap();
request.Add("jsonrpc", OSD.FromString("2.0"));
request.Add("id", OSD.FromString(jsonId));
request.Add("method", OSD.FromString(method));
request.Add("params", OSD.SerializeMembers(parameters));
OSDMap response;
try
{
webResponse = webRequest.GetResponse();
response = WebUtil.PostToService(uri, request, 10000, true);
}
catch (WebException e)
catch (Exception e)
{
Console.WriteLine("Web Error" + e.Message);
Console.WriteLine ("Please check input");
m_log.Debug(string.Format("JsonRpc request '{0}' failed", method), e);
return false;
}
using (webResponse)
using (Stream rstream = webResponse.GetResponseStream())
if (!response.ContainsKey("_Result"))
{
OSDMap mret = (OSDMap)OSDParser.DeserializeJson(rstream);
if (mret.ContainsKey("error"))
return false;
// get params...
OSD.DeserializeMembers(ref parameters, (OSDMap)mret["result"]);
return true;
m_log.DebugFormat("JsonRpc request '{0}' returned an invalid response: {1}",
method, OSDParser.SerializeJsonString(response));
return false;
}
response = (OSDMap)response["_Result"];
OSD data;
if (response.ContainsKey("error"))
{
data = response["error"];
m_log.DebugFormat("JsonRpc request '{0}' returned an error: {1}",
method, OSDParser.SerializeJsonString(data));
return false;
}
if (!response.ContainsKey("result"))
{
m_log.DebugFormat("JsonRpc request '{0}' returned an invalid response: {1}",
method, OSDParser.SerializeJsonString(response));
return false;
}
data = response["result"];
OSD.DeserializeMembers(ref parameters, (OSDMap)data);
return true;
}
/// <summary>
/// Sends json-rpc request with OSD parameter.
/// </summary>
@@ -135,7 +132,7 @@ namespace OpenSim.Framework.Servers.HttpServer
/// The rpc request.
/// </returns>
/// <param name='data'>
/// data - incoming as parameters, outgong as result/error
/// data - incoming as parameters, outgoing as result/error
/// </param>
/// <param name='method'>
/// Json-rpc method to call.
@@ -148,64 +145,46 @@ namespace OpenSim.Framework.Servers.HttpServer
/// </param>
public bool JsonRpcRequest(ref OSD data, string method, string uri, string jsonId)
{
OSDMap map = new OSDMap();
map["jsonrpc"] = "2.0";
if(string.IsNullOrEmpty(jsonId))
map["id"] = UUID.Random().ToString();
else
map["id"] = jsonId;
map["method"] = method;
map["params"] = data;
string jsonRequestData = OSDParser.SerializeJsonString(map);
byte[] content = Encoding.UTF8.GetBytes(jsonRequestData);
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(uri);
webRequest.ContentType = "application/json-rpc";
webRequest.Method = "POST";
using (Stream dataStream = webRequest.GetRequestStream())
dataStream.Write(content, 0, content.Length);
if (string.IsNullOrEmpty(jsonId))
jsonId = UUID.Random().ToString();
WebResponse webResponse = null;
OSDMap request = new OSDMap();
request.Add("jsonrpc", OSD.FromString("2.0"));
request.Add("id", OSD.FromString(jsonId));
request.Add("method", OSD.FromString(method));
request.Add("params", data);
OSDMap response;
try
{
webResponse = webRequest.GetResponse();
response = WebUtil.PostToService(uri, request, 10000, true);
}
catch (WebException e)
catch (Exception e)
{
Console.WriteLine("Web Error" + e.Message);
Console.WriteLine ("Please check input");
m_log.Debug(string.Format("JsonRpc request '{0}' failed", method), e);
return false;
}
using (webResponse)
using (Stream rstream = webResponse.GetResponseStream())
if (!response.ContainsKey("_Result"))
{
OSDMap response = new OSDMap();
try
{
response = (OSDMap)OSDParser.DeserializeJson(rstream);
}
catch (Exception e)
{
m_log.DebugFormat("[JSONRPC]: JsonRpcRequest Error {0}", e.Message);
return false;
}
if (response.ContainsKey("error"))
{
data = response["error"];
return false;
}
data = response;
return true;
m_log.DebugFormat("JsonRpc request '{0}' returned an invalid response: {1}",
method, OSDParser.SerializeJsonString(response));
return false;
}
response = (OSDMap)response["_Result"];
if (response.ContainsKey("error"))
{
data = response["error"];
m_log.DebugFormat("JsonRpc request '{0}' returned an error: {1}",
method, OSDParser.SerializeJsonString(data));
return false;
}
data = response;
return true;
}
#endregion Web Util
}
}

View File

@@ -127,41 +127,41 @@ namespace OpenSim.Framework
/// </summary>
public static OSDMap PutToServiceCompressed(string url, OSDMap data, int timeout)
{
return ServiceOSDRequest(url,data, "PUT", timeout, true);
return ServiceOSDRequest(url,data, "PUT", timeout, true, false);
}
public static OSDMap PutToService(string url, OSDMap data, int timeout)
{
return ServiceOSDRequest(url,data, "PUT", timeout, false);
return ServiceOSDRequest(url,data, "PUT", timeout, false, false);
}
public static OSDMap PostToService(string url, OSDMap data, int timeout)
public static OSDMap PostToService(string url, OSDMap data, int timeout, bool rpc)
{
return ServiceOSDRequest(url, data, "POST", timeout, false);
return ServiceOSDRequest(url, data, "POST", timeout, false, rpc);
}
public static OSDMap PostToServiceCompressed(string url, OSDMap data, int timeout)
{
return ServiceOSDRequest(url, data, "POST", timeout, true);
return ServiceOSDRequest(url, data, "POST", timeout, true, false);
}
public static OSDMap GetFromService(string url, int timeout)
{
return ServiceOSDRequest(url, null, "GET", timeout, false);
return ServiceOSDRequest(url, null, "GET", timeout, false, false);
}
public static OSDMap ServiceOSDRequest(string url, OSDMap data, string method, int timeout, bool compressed)
public static OSDMap ServiceOSDRequest(string url, OSDMap data, string method, int timeout, bool compressed, bool rpc)
{
if (SerializeOSDRequestsPerEndpoint)
{
lock (EndPointLock(url))
{
return ServiceOSDRequestWorker(url, data, method, timeout, compressed);
return ServiceOSDRequestWorker(url, data, method, timeout, compressed, rpc);
}
}
else
{
return ServiceOSDRequestWorker(url, data, method, timeout, compressed);
return ServiceOSDRequestWorker(url, data, method, timeout, compressed, rpc);
}
}
@@ -217,7 +217,7 @@ namespace OpenSim.Framework
LogOutgoingDetail("RESPONSE: ", input);
}
private static OSDMap ServiceOSDRequestWorker(string url, OSDMap data, string method, int timeout, bool compressed)
private static OSDMap ServiceOSDRequestWorker(string url, OSDMap data, string method, int timeout, bool compressed, bool rpc)
{
int reqnum = RequestNumber++;
@@ -251,7 +251,7 @@ namespace OpenSim.Framework
byte[] buffer = System.Text.Encoding.UTF8.GetBytes(strBuffer);
request.ContentType = "application/json";
request.ContentType = rpc ? "application/json-rpc" : "application/json";
if (compressed)
{

View File

@@ -136,7 +136,7 @@ namespace OpenSim.Services.Connectors.Simulation
}
// Try the old version, uncompressed
result = WebUtil.PostToService(uri, args, 30000);
result = WebUtil.PostToService(uri, args, 30000, false);
if (result["Success"].AsBoolean())
{
@@ -302,7 +302,7 @@ namespace OpenSim.Services.Connectors.Simulation
try
{
OSDMap result = WebUtil.ServiceOSDRequest(uri, request, "QUERYACCESS", 30000, false);
OSDMap result = WebUtil.ServiceOSDRequest(uri, request, "QUERYACCESS", 30000, false, false);
bool success = result["success"].AsBoolean();
if (result.ContainsKey("_Result"))
{
@@ -365,7 +365,7 @@ namespace OpenSim.Services.Connectors.Simulation
try
{
WebUtil.ServiceOSDRequest(uri, null, "DELETE", 10000, false);
WebUtil.ServiceOSDRequest(uri, null, "DELETE", 10000, false, false);
}
catch (Exception e)
{
@@ -384,7 +384,7 @@ namespace OpenSim.Services.Connectors.Simulation
try
{
WebUtil.ServiceOSDRequest(uri, null, "DELETE", 10000, false);
WebUtil.ServiceOSDRequest(uri, null, "DELETE", 10000, false, false);
}
catch (Exception e)
{
@@ -431,7 +431,7 @@ namespace OpenSim.Services.Connectors.Simulation
args["destination_name"] = OSD.FromString(destination.RegionName);
args["destination_uuid"] = OSD.FromString(destination.RegionID.ToString());
OSDMap result = WebUtil.PostToService(uri, args, 40000);
OSDMap result = WebUtil.PostToService(uri, args, 40000, false);
if (result == null)
return false;