diff --git a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs
index 23c04322a6..1b06a2b596 100644
--- a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs
+++ b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs
@@ -1104,7 +1104,7 @@ namespace OpenSim.Framework.Servers.HttpServer
///
public void HandleXmlRpcRequests(OSHttpRequest request, OSHttpResponse response)
{
- String requestBody;
+ String requestBody = null;
Stream requestStream = request.InputStream;
Stream innerStream = null;
@@ -1119,6 +1119,10 @@ namespace OpenSim.Framework.Servers.HttpServer
using (StreamReader reader = new StreamReader(requestStream, Encoding.UTF8))
requestBody = reader.ReadToEnd();
}
+ catch
+ {
+ requestBody = null;
+ }
finally
{
if (innerStream != null && innerStream.CanRead)
@@ -1127,6 +1131,13 @@ namespace OpenSim.Framework.Servers.HttpServer
requestStream.Dispose();
}
+ if (string.IsNullOrWhiteSpace(requestBody))
+ {
+ response.StatusCode = (int)HttpStatusCode.NotFound;
+ response.KeepAlive = false;
+ return;
+ }
+
//m_log.Debug(requestBody);
requestBody = requestBody.Replace("", "");
@@ -1274,9 +1285,9 @@ namespace OpenSim.Framework.Servers.HttpServer
response.StatusCode = (int)HttpStatusCode.OK;
}
- public void HandleXmlRpcRequests(OSHttpRequest request, OSHttpResponse response, Dictionary rpchandlers)
+ public void HandleXmlRpcRequests(OSHttpRequest request, OSHttpResponse response, Dictionary rpcHandlers)
{
- String requestBody;
+ String requestBody = null;
Stream requestStream = request.InputStream;
Stream innerStream = null;
@@ -1291,6 +1302,10 @@ namespace OpenSim.Framework.Servers.HttpServer
using (StreamReader reader = new StreamReader(requestStream, Encoding.UTF8))
requestBody = reader.ReadToEnd();
}
+ catch
+ {
+ requestBody = null;
+ }
finally
{
if (innerStream != null && innerStream.CanRead)
@@ -1299,6 +1314,13 @@ namespace OpenSim.Framework.Servers.HttpServer
requestStream.Dispose();
}
+ if (string.IsNullOrWhiteSpace(requestBody))
+ {
+ response.StatusCode = (int)HttpStatusCode.NotFound;
+ response.KeepAlive = false;
+ return;
+ }
+
//m_log.Debug(requestBody);
requestBody = requestBody.Replace("", "");
@@ -1357,7 +1379,7 @@ namespace OpenSim.Framework.Servers.HttpServer
XmlRpcMethod method;
bool methodWasFound;
- methodWasFound = rpchandlers.TryGetValue(methodName, out method);
+ methodWasFound = rpcHandlers.TryGetValue(methodName, out method);
XmlRpcResponse xmlRpcResponse;
if (methodWasFound)
diff --git a/OpenSim/Region/OptionalModules/World/MoneyModule/SampleMoneyModule.cs b/OpenSim/Region/OptionalModules/World/MoneyModule/SampleMoneyModule.cs
index 6677ed193c..b93c7585a1 100644
--- a/OpenSim/Region/OptionalModules/World/MoneyModule/SampleMoneyModule.cs
+++ b/OpenSim/Region/OptionalModules/World/MoneyModule/SampleMoneyModule.cs
@@ -65,6 +65,8 @@ namespace OpenSim.Region.OptionalModules.World.MoneyModule
///
// private UUID EconomyBaseAccount = UUID.Zero;
+ private Dictionary m_rpcHandlers;
+
private float EnergyEfficiency = 1f;
// private ObjectPaid handerOnObjectPaid;
private bool m_enabled = true;
@@ -145,12 +147,12 @@ namespace OpenSim.Region.OptionalModules.World.MoneyModule
// to the command line parameters you use to start up your client
// This commonly looks like -helperuri http://127.0.0.1:9000/
+ m_rpcHandlers = new Dictionary();
- // Local Server.. enables functionality only.
- httpServer.AddXmlRPCHandler("getCurrencyQuote", quote_func);
- httpServer.AddXmlRPCHandler("buyCurrency", buy_func);
- httpServer.AddXmlRPCHandler("preflightBuyLandPrep", preflightBuyLandPrep_func);
- httpServer.AddXmlRPCHandler("buyLandPrep", landBuy_func);
+ m_rpcHandlers.Add("getCurrencyQuote", quote_func);
+ m_rpcHandlers.Add("buyCurrency", buy_func);
+ m_rpcHandlers.Add("preflightBuyLandPrep", preflightBuyLandPrep_func);
+ m_rpcHandlers.Add("buyLandPrep", landBuy_func);
// add php
MainServer.Instance.AddSimpleStreamHandler(new SimpleStreamHandler("/currency.php", processPHP));
@@ -188,7 +190,7 @@ namespace OpenSim.Region.OptionalModules.World.MoneyModule
public void processPHP(IOSHttpRequest request, IOSHttpResponse response)
{
- MainServer.Instance.HandleXmlRpcRequests((OSHttpRequest)request, (OSHttpResponse)response);
+ MainServer.Instance.HandleXmlRpcRequests((OSHttpRequest)request, (OSHttpResponse)response, m_rpcHandlers);
}
// Please do not refactor these to be just one method