From 30c5be370489f9620e0f199526c80f5c34f16faa Mon Sep 17 00:00:00 2001 From: lbsa71 Date: Thu, 29 Mar 2007 19:22:01 +0000 Subject: [PATCH] * Now the rest handlers try to match path as close as possibly, so it's possible to add handlers for just a beginning of a path. --- OpenSim.RegionServer/CAPS/AdminWebFront.cs | 14 +++++++------- Servers/BaseHttpServer.cs | 20 ++++++++++++++++---- Servers/IRestHandler.cs | 2 +- 3 files changed, 24 insertions(+), 12 deletions(-) diff --git a/OpenSim.RegionServer/CAPS/AdminWebFront.cs b/OpenSim.RegionServer/CAPS/AdminWebFront.cs index 3596ffa3fc..6473878729 100644 --- a/OpenSim.RegionServer/CAPS/AdminWebFront.cs +++ b/OpenSim.RegionServer/CAPS/AdminWebFront.cs @@ -35,8 +35,8 @@ namespace OpenSim.CAPS server.AddRestHandler("POST", "/Admin/NewAccount", PostNewAccount ); server.AddRestHandler("POST", "/Admin/Login", PostLogin ); } - - private string GetWelcomePage( string request ) + + private string GetWelcomePage(string request, string path) { string responseString; responseString = "Welcome to the OpenSim Admin Page"; @@ -44,7 +44,7 @@ namespace OpenSim.CAPS return responseString; } - private string PostLogin(string requestBody) + private string PostLogin(string requestBody, string path) { string responseString; // Console.WriteLine(requestBody); @@ -61,7 +61,7 @@ namespace OpenSim.CAPS return responseString; } - private string PostNewAccount(string requestBody) + private string PostNewAccount(string requestBody, string path) { string responseString; string firstName = ""; @@ -110,7 +110,7 @@ namespace OpenSim.CAPS return responseString; } - private string GetConnectedClientsPage( string request ) + private string GetConnectedClientsPage(string request, string path) { string responseString; responseString = "

Listing connected Clients

"; @@ -128,7 +128,7 @@ namespace OpenSim.CAPS return responseString; } - private string GetAccountsPage( string request ) + private string GetAccountsPage(string request, string path) { string responseString; responseString = "

Account management

"; @@ -138,7 +138,7 @@ namespace OpenSim.CAPS return responseString; } - private string GetAdminPage( string request ) + private string GetAdminPage(string request, string path) { return AdminPage; } diff --git a/Servers/BaseHttpServer.cs b/Servers/BaseHttpServer.cs index 7c2a1950a7..174402a97c 100644 --- a/Servers/BaseHttpServer.cs +++ b/Servers/BaseHttpServer.cs @@ -76,11 +76,23 @@ namespace OpenSim.Servers string response; RestMethod handler; - string methodKey = String.Format("{0}: {1}", method, path); - - if (m_restHandlers.TryGetValue(methodKey, out handler)) + string requestKey = String.Format("{0}: {1}", method, path); + + string bestMatch = String.Empty; + foreach( string currentKey in m_restHandlers.Keys ) { - response = handler(request); + if( requestKey.StartsWith( currentKey )) + { + if(currentKey.Length > bestMatch.Length ) + { + bestMatch = currentKey; + } + } + } + + if (m_restHandlers.TryGetValue(bestMatch, out handler)) + { + response = handler(request, path); } else diff --git a/Servers/IRestHandler.cs b/Servers/IRestHandler.cs index deb77d8d76..46459ffd96 100644 --- a/Servers/IRestHandler.cs +++ b/Servers/IRestHandler.cs @@ -4,5 +4,5 @@ using System.Text; namespace OpenSim.CAPS { - public delegate string RestMethod( string request ); + public delegate string RestMethod( string request, string path ); }