diff options
Diffstat (limited to 'OpenSim/Framework/Servers')
-rw-r--r-- | OpenSim/Framework/Servers/BaseHttpServer.cs | 54 |
1 files changed, 41 insertions, 13 deletions
diff --git a/OpenSim/Framework/Servers/BaseHttpServer.cs b/OpenSim/Framework/Servers/BaseHttpServer.cs index 5bd0fa5..18b53b1 100644 --- a/OpenSim/Framework/Servers/BaseHttpServer.cs +++ b/OpenSim/Framework/Servers/BaseHttpServer.cs | |||
@@ -168,13 +168,41 @@ namespace OpenSim.Framework.Servers | |||
168 | } | 168 | } |
169 | } | 169 | } |
170 | 170 | ||
171 | public bool AddHTTPHandler(string method, GenericHTTPMethod handler) | 171 | /// <summary> |
172 | /// Add a handler for an HTTP request | ||
173 | /// </summary> | ||
174 | /// | ||
175 | /// This handler can actually be invoked either as | ||
176 | /// | ||
177 | /// http://<hostname>:<port>/?method=<methodName> | ||
178 | /// | ||
179 | /// or | ||
180 | /// | ||
181 | /// http://<hostname>:<port><method> | ||
182 | /// | ||
183 | /// if the method starts with a slash. For example, AddHTTPHandler("/object/", ...) on a standalone region | ||
184 | /// server will register a handler that can be invoked with either | ||
185 | /// | ||
186 | /// http://localhost:9000/?method=/object/ | ||
187 | /// | ||
188 | /// or | ||
189 | /// | ||
190 | /// http://localhost:9000/object/ | ||
191 | /// | ||
192 | /// <param name="methodName"></param> | ||
193 | /// <param name="handler"></param> | ||
194 | /// <returns> | ||
195 | /// true if the handler was successfully registered, false if a handler with the same name already existed. | ||
196 | /// </returns> | ||
197 | public bool AddHTTPHandler(string methodName, GenericHTTPMethod handler) | ||
172 | { | 198 | { |
199 | //m_log.DebugFormat("[BASE HTTP SERVER]: Registering {0}", methodName); | ||
200 | |||
173 | lock (m_HTTPHandlers) | 201 | lock (m_HTTPHandlers) |
174 | { | 202 | { |
175 | if (!m_HTTPHandlers.ContainsKey(method)) | 203 | if (!m_HTTPHandlers.ContainsKey(methodName)) |
176 | { | 204 | { |
177 | m_HTTPHandlers.Add(method, handler); | 205 | m_HTTPHandlers.Add(methodName, handler); |
178 | return true; | 206 | return true; |
179 | } | 207 | } |
180 | } | 208 | } |
@@ -517,6 +545,8 @@ namespace OpenSim.Framework.Servers | |||
517 | 545 | ||
518 | private bool TryGetHTTPHandler(string handlerKey, out GenericHTTPMethod HTTPHandler) | 546 | private bool TryGetHTTPHandler(string handlerKey, out GenericHTTPMethod HTTPHandler) |
519 | { | 547 | { |
548 | //m_log.DebugFormat("[BASE HTTP HANDLER]: Looking for HTTP handler for {0}", handlerKey); | ||
549 | |||
520 | string bestMatch = null; | 550 | string bestMatch = null; |
521 | 551 | ||
522 | foreach (string pattern in m_HTTPHandlers.Keys) | 552 | foreach (string pattern in m_HTTPHandlers.Keys) |
@@ -878,7 +908,6 @@ namespace OpenSim.Framework.Servers | |||
878 | /// <returns>true if we have one, false if not</returns> | 908 | /// <returns>true if we have one, false if not</returns> |
879 | private bool DoWeHaveAHTTPHandler(string path) | 909 | private bool DoWeHaveAHTTPHandler(string path) |
880 | { | 910 | { |
881 | |||
882 | string[] pathbase = path.Split('/'); | 911 | string[] pathbase = path.Split('/'); |
883 | string searchquery = "/"; | 912 | string searchquery = "/"; |
884 | 913 | ||
@@ -894,14 +923,13 @@ namespace OpenSim.Framework.Servers | |||
894 | 923 | ||
895 | string bestMatch = null; | 924 | string bestMatch = null; |
896 | 925 | ||
926 | //m_log.DebugFormat("[BASE HTTP HANDLER]: Checking if we have an HTTP handler for {0}", searchquery); | ||
927 | |||
897 | foreach (string pattern in m_HTTPHandlers.Keys) | 928 | foreach (string pattern in m_HTTPHandlers.Keys) |
898 | { | 929 | { |
899 | |||
900 | if (searchquery.StartsWith(pattern) && searchquery.Length >= pattern.Length) | 930 | if (searchquery.StartsWith(pattern) && searchquery.Length >= pattern.Length) |
901 | { | 931 | { |
902 | |||
903 | bestMatch = pattern; | 932 | bestMatch = pattern; |
904 | |||
905 | } | 933 | } |
906 | } | 934 | } |
907 | 935 | ||
@@ -911,12 +939,10 @@ namespace OpenSim.Framework.Servers | |||
911 | 939 | ||
912 | if (String.IsNullOrEmpty(bestMatch)) | 940 | if (String.IsNullOrEmpty(bestMatch)) |
913 | { | 941 | { |
914 | |||
915 | return false; | 942 | return false; |
916 | } | 943 | } |
917 | else | 944 | else |
918 | { | 945 | { |
919 | |||
920 | return true; | 946 | return true; |
921 | } | 947 | } |
922 | } | 948 | } |
@@ -1024,7 +1050,8 @@ namespace OpenSim.Framework.Servers | |||
1024 | catch (SocketException f) | 1050 | catch (SocketException f) |
1025 | { | 1051 | { |
1026 | // This has to be here to prevent a Linux/Mono crash | 1052 | // This has to be here to prevent a Linux/Mono crash |
1027 | m_log.WarnFormat("[BASE HTTP SERVER] XmlRpcRequest issue {0}.\nNOTE: this may be spurious on Linux.", f); | 1053 | m_log.WarnFormat( |
1054 | "[BASE HTTP SERVER]: XmlRpcRequest issue {0}.\nNOTE: this may be spurious on Linux.", f); | ||
1028 | } | 1055 | } |
1029 | } | 1056 | } |
1030 | catch(Exception) | 1057 | catch(Exception) |
@@ -1184,6 +1211,9 @@ namespace OpenSim.Framework.Servers | |||
1184 | 1211 | ||
1185 | string bestMatch = null; | 1212 | string bestMatch = null; |
1186 | 1213 | ||
1214 | // m_log.DebugFormat( | ||
1215 | // "[BASE HTTP HANDLER]: TryGetHTTPHandlerPathBased() looking for HTTP handler to match {0}", searchquery); | ||
1216 | |||
1187 | foreach (string pattern in m_HTTPHandlers.Keys) | 1217 | foreach (string pattern in m_HTTPHandlers.Keys) |
1188 | { | 1218 | { |
1189 | if (searchquery.ToLower().StartsWith(pattern.ToLower())) | 1219 | if (searchquery.ToLower().StartsWith(pattern.ToLower())) |
@@ -1196,9 +1226,7 @@ namespace OpenSim.Framework.Servers | |||
1196 | bestMatch = pattern; | 1226 | bestMatch = pattern; |
1197 | } | 1227 | } |
1198 | } | 1228 | } |
1199 | } | 1229 | } |
1200 | |||
1201 | |||
1202 | 1230 | ||
1203 | if (String.IsNullOrEmpty(bestMatch)) | 1231 | if (String.IsNullOrEmpty(bestMatch)) |
1204 | { | 1232 | { |