diff options
Diffstat (limited to 'OpenSim/ApplicationPlugins/Rest/RestPlugin.cs')
-rw-r--r-- | OpenSim/ApplicationPlugins/Rest/RestPlugin.cs | 74 |
1 files changed, 61 insertions, 13 deletions
diff --git a/OpenSim/ApplicationPlugins/Rest/RestPlugin.cs b/OpenSim/ApplicationPlugins/Rest/RestPlugin.cs index 05ea956..199bff8 100644 --- a/OpenSim/ApplicationPlugins/Rest/RestPlugin.cs +++ b/OpenSim/ApplicationPlugins/Rest/RestPlugin.cs | |||
@@ -23,16 +23,18 @@ | |||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | 24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
26 | * | 26 | * |
27 | */ | 27 | */ |
28 | 28 | ||
29 | using System; | 29 | using System; |
30 | using System.Threading; | 30 | using System.Threading; |
31 | using System.Collections; | 31 | using System.Collections; |
32 | using System.Collections.Generic; | 32 | using System.Collections.Generic; |
33 | using System.IO; | ||
33 | using System.Net; | 34 | using System.Net; |
34 | using System.Reflection; | 35 | using System.Reflection; |
35 | using System.Timers; | 36 | using System.Timers; |
37 | using System.Xml; | ||
36 | using libsecondlife; | 38 | using libsecondlife; |
37 | using Mono.Addins; | 39 | using Mono.Addins; |
38 | using Nwc.XmlRpc; | 40 | using Nwc.XmlRpc; |
@@ -54,14 +56,18 @@ namespace OpenSim.ApplicationPlugins.Rest | |||
54 | { | 56 | { |
55 | #region properties | 57 | #region properties |
56 | 58 | ||
57 | protected static readonly log4net.ILog m_log = | 59 | protected static readonly log4net.ILog m_log = |
58 | log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 60 | log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
59 | 61 | ||
60 | private IConfig _config; // Configuration source: Rest Plugins | 62 | private IConfig _config; // Configuration source: Rest Plugins |
61 | private IConfig _pluginConfig; // Configuration source: Plugin specific | 63 | private IConfig _pluginConfig; // Configuration source: Plugin specific |
62 | private OpenSimMain _app; // The 'server' | 64 | private OpenSimMain _app; // The 'server' |
63 | private BaseHttpServer _httpd; // The server's RPC interface | 65 | private BaseHttpServer _httpd; // The server's RPC interface |
64 | private string _prefix; // URL prefix below which all REST URLs are living | 66 | private string _prefix; // URL prefix below |
67 | // which all REST URLs | ||
68 | // are living | ||
69 | private StringWriter _sw = null; | ||
70 | private XmlTextWriter _xw = null; | ||
65 | 71 | ||
66 | private string _godkey; | 72 | private string _godkey; |
67 | private int _reqk; | 73 | private int _reqk; |
@@ -100,8 +106,8 @@ namespace OpenSim.ApplicationPlugins.Rest | |||
100 | /// </summary> | 106 | /// </summary> |
101 | public bool IsEnabled | 107 | public bool IsEnabled |
102 | { | 108 | { |
103 | get | 109 | get |
104 | { | 110 | { |
105 | return (null != _pluginConfig) && _pluginConfig.GetBoolean("enabled", false); | 111 | return (null != _pluginConfig) && _pluginConfig.GetBoolean("enabled", false); |
106 | } | 112 | } |
107 | } | 113 | } |
@@ -109,7 +115,7 @@ namespace OpenSim.ApplicationPlugins.Rest | |||
109 | /// <summary> | 115 | /// <summary> |
110 | /// OpenSimMain application | 116 | /// OpenSimMain application |
111 | /// </summary> | 117 | /// </summary> |
112 | public OpenSimMain App | 118 | public OpenSimMain App |
113 | { | 119 | { |
114 | get { return _app; } | 120 | get { return _app; } |
115 | } | 121 | } |
@@ -117,7 +123,7 @@ namespace OpenSim.ApplicationPlugins.Rest | |||
117 | /// <summary> | 123 | /// <summary> |
118 | /// RPC server | 124 | /// RPC server |
119 | /// </summary> | 125 | /// </summary> |
120 | public BaseHttpServer HttpServer | 126 | public BaseHttpServer HttpServer |
121 | { | 127 | { |
122 | get { return _httpd; } | 128 | get { return _httpd; } |
123 | } | 129 | } |
@@ -147,6 +153,29 @@ namespace OpenSim.ApplicationPlugins.Rest | |||
147 | /// Return the config section name | 153 | /// Return the config section name |
148 | /// </summary> | 154 | /// </summary> |
149 | public abstract string ConfigName { get; } | 155 | public abstract string ConfigName { get; } |
156 | |||
157 | public XmlTextWriter XmlWriter | ||
158 | { | ||
159 | get { | ||
160 | if (null == _xw) | ||
161 | { | ||
162 | _sw = new StringWriter(); | ||
163 | _xw = new XmlTextWriter(_sw); | ||
164 | _xw.Formatting = Formatting.Indented; | ||
165 | } | ||
166 | return _xw; } | ||
167 | } | ||
168 | |||
169 | public string XmlWriterResult | ||
170 | { | ||
171 | get | ||
172 | { | ||
173 | _xw.Flush(); | ||
174 | _xw = null; | ||
175 | |||
176 | return _sw.ToString(); | ||
177 | } | ||
178 | } | ||
150 | #endregion properties | 179 | #endregion properties |
151 | 180 | ||
152 | 181 | ||
@@ -171,7 +200,7 @@ namespace OpenSim.ApplicationPlugins.Rest | |||
171 | return; | 200 | return; |
172 | } | 201 | } |
173 | 202 | ||
174 | if (!_config.GetBoolean("enabled", false)) | 203 | if (!_config.GetBoolean("enabled", false)) |
175 | { | 204 | { |
176 | m_log.WarnFormat("{0} Rest Plugins are disabled", MsgID); | 205 | m_log.WarnFormat("{0} Rest Plugins are disabled", MsgID); |
177 | return; | 206 | return; |
@@ -184,10 +213,11 @@ namespace OpenSim.ApplicationPlugins.Rest | |||
184 | _godkey = _config.GetString("god_key", String.Empty); | 213 | _godkey = _config.GetString("god_key", String.Empty); |
185 | // Retrive prefix if any. | 214 | // Retrive prefix if any. |
186 | _prefix = _config.GetString("prefix", "/admin"); | 215 | _prefix = _config.GetString("prefix", "/admin"); |
187 | 216 | ||
188 | // Get plugin specific config | 217 | // Get plugin specific config |
189 | _pluginConfig = openSim.ConfigSource.Configs[ConfigName]; | 218 | _pluginConfig = openSim.ConfigSource.Configs[ConfigName]; |
190 | 219 | ||
220 | |||
191 | m_log.InfoFormat("{0} Rest Plugins Enabled", MsgID); | 221 | m_log.InfoFormat("{0} Rest Plugins Enabled", MsgID); |
192 | } | 222 | } |
193 | catch (Exception e) | 223 | catch (Exception e) |
@@ -200,7 +230,7 @@ namespace OpenSim.ApplicationPlugins.Rest | |||
200 | // not possible for the openSim pointer to be null. However | 230 | // not possible for the openSim pointer to be null. However |
201 | // were the implementation to be changed, this could | 231 | // were the implementation to be changed, this could |
202 | // result in a silent initialization failure. Harmless | 232 | // result in a silent initialization failure. Harmless |
203 | // except for lack of function and lack of any | 233 | // except for lack of function and lack of any |
204 | // diagnostic indication as to why. The same is true if | 234 | // diagnostic indication as to why. The same is true if |
205 | // the HTTP server reference is bad. | 235 | // the HTTP server reference is bad. |
206 | // We should at least issue a message... | 236 | // We should at least issue a message... |
@@ -214,7 +244,9 @@ namespace OpenSim.ApplicationPlugins.Rest | |||
214 | 244 | ||
215 | public void AddRestStreamHandler(string httpMethod, string path, RestMethod method) | 245 | public void AddRestStreamHandler(string httpMethod, string path, RestMethod method) |
216 | { | 246 | { |
217 | if (!path.StartsWith(_prefix)) | 247 | if (!IsEnabled) return; |
248 | |||
249 | if (!path.StartsWith(_prefix)) | ||
218 | { | 250 | { |
219 | path = String.Format("{0}{1}", _prefix, path); | 251 | path = String.Format("{0}{1}", _prefix, path); |
220 | } | 252 | } |
@@ -226,10 +258,12 @@ namespace OpenSim.ApplicationPlugins.Rest | |||
226 | m_log.DebugFormat("{0} Added REST handler {1} {2}", MsgID, httpMethod, path); | 258 | m_log.DebugFormat("{0} Added REST handler {1} {2}", MsgID, httpMethod, path); |
227 | } | 259 | } |
228 | 260 | ||
229 | 261 | ||
230 | public bool VerifyGod(string key) | 262 | protected bool VerifyGod(string key) |
231 | { | 263 | { |
232 | if (String.IsNullOrEmpty(key)) return false; | 264 | if (String.IsNullOrEmpty(key)) return false; |
265 | if (!IsEnabled) return false; | ||
266 | |||
233 | return key == _godkey; | 267 | return key == _godkey; |
234 | } | 268 | } |
235 | 269 | ||
@@ -241,6 +275,20 @@ namespace OpenSim.ApplicationPlugins.Rest | |||
241 | } | 275 | } |
242 | _handlers = null; | 276 | _handlers = null; |
243 | } | 277 | } |
278 | |||
279 | protected string Failure(string method, string message) | ||
280 | { | ||
281 | m_log.ErrorFormat("{0} {1} failed: {2}", MsgID, method, message); | ||
282 | return String.Format("<error>{0}</error>", message); | ||
283 | } | ||
284 | |||
285 | public string Failure(string method, Exception e) | ||
286 | { | ||
287 | m_log.DebugFormat("{0} {1} failed: {2}", MsgID, method, e.ToString()); | ||
288 | m_log.ErrorFormat("{0} {1} failed: {2}", MsgID, method, e.Message); | ||
289 | |||
290 | return String.Format("<error>{0}</error>", e.Message); | ||
291 | } | ||
244 | #endregion methods | 292 | #endregion methods |
245 | } | 293 | } |
246 | } | 294 | } |