diff options
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Capabilities/Caps.cs | 102 |
1 files changed, 93 insertions, 9 deletions
diff --git a/OpenSim/Capabilities/Caps.cs b/OpenSim/Capabilities/Caps.cs index bc6f6f9..049afab 100644 --- a/OpenSim/Capabilities/Caps.cs +++ b/OpenSim/Capabilities/Caps.cs | |||
@@ -50,8 +50,7 @@ namespace OpenSim.Framework.Capabilities | |||
50 | 50 | ||
51 | public class Caps | 51 | public class Caps |
52 | { | 52 | { |
53 | // private static readonly ILog m_log = | 53 | // private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
54 | // LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | ||
55 | 54 | ||
56 | private string m_httpListenerHostName; | 55 | private string m_httpListenerHostName; |
57 | private uint m_httpListenPort; | 56 | private uint m_httpListenPort; |
@@ -63,7 +62,11 @@ namespace OpenSim.Framework.Capabilities | |||
63 | public string CapsObjectPath { get { return m_capsObjectPath; } } | 62 | public string CapsObjectPath { get { return m_capsObjectPath; } } |
64 | 63 | ||
65 | private CapsHandlers m_capsHandlers; | 64 | private CapsHandlers m_capsHandlers; |
66 | private Dictionary<string, string> m_externalCapsHandlers; | 65 | |
66 | private Dictionary<string, PollServiceEventArgs> m_pollServiceHandlers | ||
67 | = new Dictionary<string, PollServiceEventArgs>(); | ||
68 | |||
69 | private Dictionary<string, string> m_externalCapsHandlers = new Dictionary<string, string>(); | ||
67 | 70 | ||
68 | private IHttpServer m_httpListener; | 71 | private IHttpServer m_httpListener; |
69 | private UUID m_agentID; | 72 | private UUID m_agentID; |
@@ -132,7 +135,6 @@ namespace OpenSim.Framework.Capabilities | |||
132 | 135 | ||
133 | m_agentID = agent; | 136 | m_agentID = agent; |
134 | m_capsHandlers = new CapsHandlers(httpServer, httpListen, httpPort, (httpServer == null) ? false : httpServer.UseSSL); | 137 | m_capsHandlers = new CapsHandlers(httpServer, httpListen, httpPort, (httpServer == null) ? false : httpServer.UseSSL); |
135 | m_externalCapsHandlers = new Dictionary<string, string>(); | ||
136 | m_regionName = regionName; | 138 | m_regionName = regionName; |
137 | } | 139 | } |
138 | 140 | ||
@@ -143,8 +145,33 @@ namespace OpenSim.Framework.Capabilities | |||
143 | /// <param name="handler"></param> | 145 | /// <param name="handler"></param> |
144 | public void RegisterHandler(string capName, IRequestHandler handler) | 146 | public void RegisterHandler(string capName, IRequestHandler handler) |
145 | { | 147 | { |
146 | m_capsHandlers[capName] = handler; | ||
147 | //m_log.DebugFormat("[CAPS]: Registering handler for \"{0}\": path {1}", capName, handler.Path); | 148 | //m_log.DebugFormat("[CAPS]: Registering handler for \"{0}\": path {1}", capName, handler.Path); |
149 | m_capsHandlers[capName] = handler; | ||
150 | } | ||
151 | |||
152 | public void RegisterPollHandler(string capName, PollServiceEventArgs pollServiceHandler) | ||
153 | { | ||
154 | // m_log.DebugFormat( | ||
155 | // "[CAPS]: Registering handler with name {0}, url {1} for {2}", | ||
156 | // capName, pollServiceHandler.Url, m_agentID, m_regionName); | ||
157 | |||
158 | m_pollServiceHandlers.Add(capName, pollServiceHandler); | ||
159 | |||
160 | m_httpListener.AddPollServiceHTTPHandler(pollServiceHandler.Url, pollServiceHandler); | ||
161 | |||
162 | // uint port = (MainServer.Instance == null) ? 0 : MainServer.Instance.Port; | ||
163 | // string protocol = "http"; | ||
164 | // string hostName = m_httpListenerHostName; | ||
165 | // | ||
166 | // if (MainServer.Instance.UseSSL) | ||
167 | // { | ||
168 | // hostName = MainServer.Instance.SSLCommonName; | ||
169 | // port = MainServer.Instance.SSLPort; | ||
170 | // protocol = "https"; | ||
171 | // } | ||
172 | |||
173 | // RegisterHandler( | ||
174 | // capName, String.Format("{0}://{1}:{2}{3}", protocol, hostName, port, pollServiceHandler.Url)); | ||
148 | } | 175 | } |
149 | 176 | ||
150 | /// <summary> | 177 | /// <summary> |
@@ -163,13 +190,70 @@ namespace OpenSim.Framework.Capabilities | |||
163 | /// </summary> | 190 | /// </summary> |
164 | public void DeregisterHandlers() | 191 | public void DeregisterHandlers() |
165 | { | 192 | { |
166 | if (m_capsHandlers != null) | 193 | foreach (string capsName in m_capsHandlers.Caps) |
194 | { | ||
195 | m_capsHandlers.Remove(capsName); | ||
196 | } | ||
197 | |||
198 | foreach (PollServiceEventArgs handler in m_pollServiceHandlers.Values) | ||
167 | { | 199 | { |
168 | foreach (string capsName in m_capsHandlers.Caps) | 200 | m_httpListener.RemovePollServiceHTTPHandler("", handler.Url); |
201 | } | ||
202 | } | ||
203 | |||
204 | public bool TryGetPollHandler(string name, out PollServiceEventArgs pollHandler) | ||
205 | { | ||
206 | return m_pollServiceHandlers.TryGetValue(name, out pollHandler); | ||
207 | } | ||
208 | |||
209 | public Dictionary<string, PollServiceEventArgs> GetPollHandlers() | ||
210 | { | ||
211 | return new Dictionary<string, PollServiceEventArgs>(m_pollServiceHandlers); | ||
212 | } | ||
213 | |||
214 | /// <summary> | ||
215 | /// Return an LLSD-serializable Hashtable describing the | ||
216 | /// capabilities and their handler details. | ||
217 | /// </summary> | ||
218 | /// <param name="excludeSeed">If true, then exclude the seed cap.</param> | ||
219 | public Hashtable GetCapsDetails(bool excludeSeed, List<string> requestedCaps) | ||
220 | { | ||
221 | Hashtable caps = CapsHandlers.GetCapsDetails(excludeSeed, requestedCaps); | ||
222 | |||
223 | lock (m_pollServiceHandlers) | ||
224 | { | ||
225 | foreach (KeyValuePair <string, PollServiceEventArgs> kvp in m_pollServiceHandlers) | ||
169 | { | 226 | { |
170 | m_capsHandlers.Remove(capsName); | 227 | if (!requestedCaps.Contains(kvp.Key)) |
228 | continue; | ||
229 | |||
230 | string hostName = m_httpListenerHostName; | ||
231 | uint port = (MainServer.Instance == null) ? 0 : MainServer.Instance.Port; | ||
232 | string protocol = "http"; | ||
233 | |||
234 | if (MainServer.Instance.UseSSL) | ||
235 | { | ||
236 | hostName = MainServer.Instance.SSLCommonName; | ||
237 | port = MainServer.Instance.SSLPort; | ||
238 | protocol = "https"; | ||
239 | } | ||
240 | // | ||
241 | // caps.RegisterHandler("FetchInventoryDescendents2", String.Format("{0}://{1}:{2}{3}", protocol, hostName, port, capUrl)); | ||
242 | |||
243 | caps[kvp.Key] = string.Format("{0}://{1}:{2}{3}", protocol, hostName, port, kvp.Value.Url); | ||
171 | } | 244 | } |
172 | } | 245 | } |
246 | |||
247 | // Add the external too | ||
248 | foreach (KeyValuePair<string, string> kvp in ExternalCapsHandlers) | ||
249 | { | ||
250 | if (!requestedCaps.Contains(kvp.Key)) | ||
251 | continue; | ||
252 | |||
253 | caps[kvp.Key] = kvp.Value; | ||
254 | } | ||
255 | |||
256 | return caps; | ||
173 | } | 257 | } |
174 | } | 258 | } |
175 | } | 259 | } \ No newline at end of file |