* Add a session concurrency option per key. Allows developer/config to specify number of concurrent requests on a service.

This commit is contained in:
teravus
2013-10-09 22:21:25 -05:00
parent e7ea053c4a
commit 75f63ecfcd
4 changed files with 102 additions and 23 deletions

View File

@@ -55,12 +55,14 @@ namespace OpenSim.Framework.Servers.HttpServer
{
byte[] result;
RequestsReceived++;
if (_dosProtector.Process(GetClientString(httpRequest), GetRemoteAddr(httpRequest)))
string clientstring = GetClientString(httpRequest);
string endpoint = GetRemoteAddr(httpRequest);
if (_dosProtector.Process(clientstring, endpoint))
result = ProcessRequest(path, request, httpRequest, httpResponse);
else
result = ThrottledRequest(path, request, httpRequest, httpResponse);
if (_options.MaxConcurrentSessions > 0)
_dosProtector.ProcessEnd(clientstring, endpoint);
RequestsHandled++;

View File

@@ -47,10 +47,18 @@ namespace OpenSim.Framework.Servers.HttpServer
}
public Hashtable Process(Hashtable request)
{
if (_dosProtector.Process(GetClientString(request), GetRemoteAddr(request)))
return _normalMethod(request);
Hashtable process = null;
string clientstring= GetClientString(request);
string endpoint = GetRemoteAddr(request);
if (_dosProtector.Process(clientstring, endpoint))
process = _normalMethod(request);
else
return _throttledMethod(request);
process = _throttledMethod(request);
if (_options.MaxConcurrentSessions>0)
_dosProtector.ProcessEnd(clientstring, endpoint);
return process;
}
private string GetRemoteAddr(Hashtable request)

View File

@@ -53,11 +53,14 @@ namespace OpenSim.Framework.Servers.HttpServer
{
XmlRpcResponse resp = null;
if (_dosProtector.Process(GetClientString(request, client), GetEndPoint(request, client)))
string clientstring = GetClientString(request, client);
string endpoint = GetEndPoint(request, client);
if (_dosProtector.Process(clientstring, endpoint))
resp = _normalMethod(request, client);
else
resp = _throttledMethod(request, client);
if (_options.MaxConcurrentSessions > 0)
_dosProtector.ProcessEnd(clientstring, endpoint);
return resp;
}