aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Framework
diff options
context:
space:
mode:
authorOren Hurvitz2014-04-24 14:19:03 +0300
committerOren Hurvitz2014-04-24 15:58:41 +0100
commitd15a3b10a3031b9552d67d2e2d435a689b448e2f (patch)
tree647c987c479a475ab247784cedef12779e92e7ff /OpenSim/Framework
parentFixed: hypergrid-linking stopped accepting the following format: "http://grid... (diff)
downloadopensim-SC_OLD-d15a3b10a3031b9552d67d2e2d435a689b448e2f.zip
opensim-SC_OLD-d15a3b10a3031b9552d67d2e2d435a689b448e2f.tar.gz
opensim-SC_OLD-d15a3b10a3031b9552d67d2e2d435a689b448e2f.tar.bz2
opensim-SC_OLD-d15a3b10a3031b9552d67d2e2d435a689b448e2f.tar.xz
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".
Diffstat (limited to 'OpenSim/Framework')
-rw-r--r--OpenSim/Framework/Servers/HttpServer/JsonRpcRequestManager.cs175
-rw-r--r--OpenSim/Framework/WebUtil.cs24
2 files changed, 89 insertions, 110 deletions
diff --git a/OpenSim/Framework/Servers/HttpServer/JsonRpcRequestManager.cs b/OpenSim/Framework/Servers/HttpServer/JsonRpcRequestManager.cs
index a44f471..ed6a14c 100644
--- a/OpenSim/Framework/Servers/HttpServer/JsonRpcRequestManager.cs
+++ b/OpenSim/Framework/Servers/HttpServer/JsonRpcRequestManager.cs
@@ -48,7 +48,6 @@ namespace OpenSim.Framework.Servers.HttpServer
48 { 48 {
49 } 49 }
50 50
51 #region Web Util
52 /// <summary> 51 /// <summary>
53 /// Sends json-rpc request with a serializable type. 52 /// Sends json-rpc request with a serializable type.
54 /// </summary> 53 /// </summary>
@@ -70,64 +69,62 @@ namespace OpenSim.Framework.Servers.HttpServer
70 public bool JsonRpcRequest(ref object parameters, string method, string uri, string jsonId) 69 public bool JsonRpcRequest(ref object parameters, string method, string uri, string jsonId)
71 { 70 {
72 if (jsonId == null) 71 if (jsonId == null)
73 throw new ArgumentNullException ("jsonId"); 72 throw new ArgumentNullException("jsonId");
74 if (uri == null) 73 if (uri == null)
75 throw new ArgumentNullException ("uri"); 74 throw new ArgumentNullException("uri");
76 if (method == null) 75 if (method == null)
77 throw new ArgumentNullException ("method"); 76 throw new ArgumentNullException("method");
78 if (parameters == null) 77 if (parameters == null)
79 throw new ArgumentNullException ("parameters"); 78 throw new ArgumentNullException("parameters");
80 79
81 // Prep our payload 80 OSDMap request = new OSDMap();
82 OSDMap json = new OSDMap(); 81 request.Add("jsonrpc", OSD.FromString("2.0"));
83 82 request.Add("id", OSD.FromString(jsonId));
84 json.Add("jsonrpc", OSD.FromString("2.0")); 83 request.Add("method", OSD.FromString(method));
85 json.Add("id", OSD.FromString(jsonId)); 84 request.Add("params", OSD.SerializeMembers(parameters));
86 json.Add("method", OSD.FromString(method)); 85
87 86 OSDMap response;
88 json.Add("params", OSD.SerializeMembers(parameters));
89
90 string jsonRequestData = OSDParser.SerializeJsonString(json);
91 byte[] content = Encoding.UTF8.GetBytes(jsonRequestData);
92
93 HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(uri);
94
95 webRequest.ContentType = "application/json-rpc";
96 webRequest.Method = "POST";
97
98 //Stream dataStream = webRequest.GetRequestStream();
99 //dataStream.Write(content, 0, content.Length);
100 //dataStream.Close();
101
102 using (Stream dataStream = webRequest.GetRequestStream())
103 dataStream.Write(content, 0, content.Length);
104
105 WebResponse webResponse = null;
106 try 87 try
107 { 88 {
108 webResponse = webRequest.GetResponse(); 89 response = WebUtil.PostToService(uri, request, 10000, true);
90 }
91 catch (Exception e)
92 {
93 m_log.Debug(string.Format("JsonRpc request '{0}' failed", method), e);
94 return false;
95 }
96
97 if (!response.ContainsKey("_Result"))
98 {
99 m_log.DebugFormat("JsonRpc request '{0}' returned an invalid response: {1}",
100 method, OSDParser.SerializeJsonString(response));
101 return false;
109 } 102 }
110 catch (WebException e) 103 response = (OSDMap)response["_Result"];
104
105 OSD data;
106
107 if (response.ContainsKey("error"))
111 { 108 {
112 Console.WriteLine("Web Error" + e.Message); 109 data = response["error"];
113 Console.WriteLine ("Please check input"); 110 m_log.DebugFormat("JsonRpc request '{0}' returned an error: {1}",
111 method, OSDParser.SerializeJsonString(data));
114 return false; 112 return false;
115 } 113 }
116 114
117 using (webResponse) 115 if (!response.ContainsKey("result"))
118 using (Stream rstream = webResponse.GetResponseStream())
119 { 116 {
120 OSDMap mret = (OSDMap)OSDParser.DeserializeJson(rstream); 117 m_log.DebugFormat("JsonRpc request '{0}' returned an invalid response: {1}",
121 118 method, OSDParser.SerializeJsonString(response));
122 if (mret.ContainsKey("error")) 119 return false;
123 return false;
124
125 // get params...
126 OSD.DeserializeMembers(ref parameters, (OSDMap)mret["result"]);
127 return true;
128 } 120 }
121
122 data = response["result"];
123 OSD.DeserializeMembers(ref parameters, (OSDMap)data);
124
125 return true;
129 } 126 }
130 127
131 /// <summary> 128 /// <summary>
132 /// Sends json-rpc request with OSD parameter. 129 /// Sends json-rpc request with OSD parameter.
133 /// </summary> 130 /// </summary>
@@ -135,7 +132,7 @@ namespace OpenSim.Framework.Servers.HttpServer
135 /// The rpc request. 132 /// The rpc request.
136 /// </returns> 133 /// </returns>
137 /// <param name='data'> 134 /// <param name='data'>
138 /// data - incoming as parameters, outgong as result/error 135 /// data - incoming as parameters, outgoing as result/error
139 /// </param> 136 /// </param>
140 /// <param name='method'> 137 /// <param name='method'>
141 /// Json-rpc method to call. 138 /// Json-rpc method to call.
@@ -148,64 +145,46 @@ namespace OpenSim.Framework.Servers.HttpServer
148 /// </param> 145 /// </param>
149 public bool JsonRpcRequest(ref OSD data, string method, string uri, string jsonId) 146 public bool JsonRpcRequest(ref OSD data, string method, string uri, string jsonId)
150 { 147 {
151 OSDMap map = new OSDMap(); 148 if (string.IsNullOrEmpty(jsonId))
152 149 jsonId = UUID.Random().ToString();
153 map["jsonrpc"] = "2.0"; 150
154 if(string.IsNullOrEmpty(jsonId)) 151 OSDMap request = new OSDMap();
155 map["id"] = UUID.Random().ToString(); 152 request.Add("jsonrpc", OSD.FromString("2.0"));
156 else 153 request.Add("id", OSD.FromString(jsonId));
157 map["id"] = jsonId; 154 request.Add("method", OSD.FromString(method));
158 155 request.Add("params", data);
159 map["method"] = method; 156
160 map["params"] = data; 157 OSDMap response;
161
162 string jsonRequestData = OSDParser.SerializeJsonString(map);
163 byte[] content = Encoding.UTF8.GetBytes(jsonRequestData);
164
165 HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(uri);
166 webRequest.ContentType = "application/json-rpc";
167 webRequest.Method = "POST";
168
169 using (Stream dataStream = webRequest.GetRequestStream())
170 dataStream.Write(content, 0, content.Length);
171
172 WebResponse webResponse = null;
173 try 158 try
174 { 159 {
175 webResponse = webRequest.GetResponse(); 160 response = WebUtil.PostToService(uri, request, 10000, true);
176 } 161 }
177 catch (WebException e) 162 catch (Exception e)
178 { 163 {
179 Console.WriteLine("Web Error" + e.Message); 164 m_log.Debug(string.Format("JsonRpc request '{0}' failed", method), e);
180 Console.WriteLine ("Please check input");
181 return false; 165 return false;
182 } 166 }
183 167
184 using (webResponse) 168 if (!response.ContainsKey("_Result"))
185 using (Stream rstream = webResponse.GetResponseStream())
186 { 169 {
187 OSDMap response = new OSDMap(); 170 m_log.DebugFormat("JsonRpc request '{0}' returned an invalid response: {1}",
188 try 171 method, OSDParser.SerializeJsonString(response));
189 { 172 return false;
190 response = (OSDMap)OSDParser.DeserializeJson(rstream);
191 }
192 catch (Exception e)
193 {
194 m_log.DebugFormat("[JSONRPC]: JsonRpcRequest Error {0}", e.Message);
195 return false;
196 }
197
198 if (response.ContainsKey("error"))
199 {
200 data = response["error"];
201 return false;
202 }
203
204 data = response;
205
206 return true;
207 } 173 }
174 response = (OSDMap)response["_Result"];
175
176 if (response.ContainsKey("error"))
177 {
178 data = response["error"];
179 m_log.DebugFormat("JsonRpc request '{0}' returned an error: {1}",
180 method, OSDParser.SerializeJsonString(data));
181 return false;
182 }
183
184 data = response;
185
186 return true;
208 } 187 }
209 #endregion Web Util 188
210 } 189 }
211} 190}
diff --git a/OpenSim/Framework/WebUtil.cs b/OpenSim/Framework/WebUtil.cs
index 768ff16..8f5bc0c 100644
--- a/OpenSim/Framework/WebUtil.cs
+++ b/OpenSim/Framework/WebUtil.cs
@@ -127,41 +127,41 @@ namespace OpenSim.Framework
127 /// </summary> 127 /// </summary>
128 public static OSDMap PutToServiceCompressed(string url, OSDMap data, int timeout) 128 public static OSDMap PutToServiceCompressed(string url, OSDMap data, int timeout)
129 { 129 {
130 return ServiceOSDRequest(url,data, "PUT", timeout, true); 130 return ServiceOSDRequest(url,data, "PUT", timeout, true, false);
131 } 131 }
132 132
133 public static OSDMap PutToService(string url, OSDMap data, int timeout) 133 public static OSDMap PutToService(string url, OSDMap data, int timeout)
134 { 134 {
135 return ServiceOSDRequest(url,data, "PUT", timeout, false); 135 return ServiceOSDRequest(url,data, "PUT", timeout, false, false);
136 } 136 }
137 137
138 public static OSDMap PostToService(string url, OSDMap data, int timeout) 138 public static OSDMap PostToService(string url, OSDMap data, int timeout, bool rpc)
139 { 139 {
140 return ServiceOSDRequest(url, data, "POST", timeout, false); 140 return ServiceOSDRequest(url, data, "POST", timeout, false, rpc);
141 } 141 }
142 142
143 public static OSDMap PostToServiceCompressed(string url, OSDMap data, int timeout) 143 public static OSDMap PostToServiceCompressed(string url, OSDMap data, int timeout)
144 { 144 {
145 return ServiceOSDRequest(url, data, "POST", timeout, true); 145 return ServiceOSDRequest(url, data, "POST", timeout, true, false);
146 } 146 }
147 147
148 public static OSDMap GetFromService(string url, int timeout) 148 public static OSDMap GetFromService(string url, int timeout)
149 { 149 {
150 return ServiceOSDRequest(url, null, "GET", timeout, false); 150 return ServiceOSDRequest(url, null, "GET", timeout, false, false);
151 } 151 }
152 152
153 public static OSDMap ServiceOSDRequest(string url, OSDMap data, string method, int timeout, bool compressed) 153 public static OSDMap ServiceOSDRequest(string url, OSDMap data, string method, int timeout, bool compressed, bool rpc)
154 { 154 {
155 if (SerializeOSDRequestsPerEndpoint) 155 if (SerializeOSDRequestsPerEndpoint)
156 { 156 {
157 lock (EndPointLock(url)) 157 lock (EndPointLock(url))
158 { 158 {
159 return ServiceOSDRequestWorker(url, data, method, timeout, compressed); 159 return ServiceOSDRequestWorker(url, data, method, timeout, compressed, rpc);
160 } 160 }
161 } 161 }
162 else 162 else
163 { 163 {
164 return ServiceOSDRequestWorker(url, data, method, timeout, compressed); 164 return ServiceOSDRequestWorker(url, data, method, timeout, compressed, rpc);
165 } 165 }
166 } 166 }
167 167
@@ -217,7 +217,7 @@ namespace OpenSim.Framework
217 LogOutgoingDetail("RESPONSE: ", input); 217 LogOutgoingDetail("RESPONSE: ", input);
218 } 218 }
219 219
220 private static OSDMap ServiceOSDRequestWorker(string url, OSDMap data, string method, int timeout, bool compressed) 220 private static OSDMap ServiceOSDRequestWorker(string url, OSDMap data, string method, int timeout, bool compressed, bool rpc)
221 { 221 {
222 int reqnum = RequestNumber++; 222 int reqnum = RequestNumber++;
223 223
@@ -251,7 +251,7 @@ namespace OpenSim.Framework
251 251
252 byte[] buffer = System.Text.Encoding.UTF8.GetBytes(strBuffer); 252 byte[] buffer = System.Text.Encoding.UTF8.GetBytes(strBuffer);
253 253
254 request.ContentType = "application/json"; 254 request.ContentType = rpc ? "application/json-rpc" : "application/json";
255 255
256 if (compressed) 256 if (compressed)
257 { 257 {