aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Capabilities/Caps.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Capabilities/Caps.cs')
-rw-r--r--OpenSim/Capabilities/Caps.cs93
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