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