summaryrefslogtreecommitdiff
path: root/indra/llmessage/llsdhttpserver.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/llmessage/llsdhttpserver.cpp')
-rw-r--r--indra/llmessage/llsdhttpserver.cpp132
1 files changed, 132 insertions, 0 deletions
diff --git a/indra/llmessage/llsdhttpserver.cpp b/indra/llmessage/llsdhttpserver.cpp
new file mode 100644
index 0000000000..0eda0e69cb
--- /dev/null
+++ b/indra/llmessage/llsdhttpserver.cpp
@@ -0,0 +1,132 @@
+/**
+ * @file llsdhttpserver.cpp
+ * @brief Standard LLSD services
+ *
+ * Copyright (c) 2006-$CurrentYear$, Linden Research, Inc.
+ * $License$
+ */
+
+#include "linden_common.h"
+#include "llsdhttpserver.h"
+
+#include "llhttpnode.h"
+
+/**
+ * This module implements common services that should be included
+ * in all server URL trees. These services facilitate debugging and
+ * introsepction.
+ */
+
+void LLHTTPStandardServices::useServices()
+{
+ /*
+ Having this function body here, causes the classes and globals in this
+ file to be linked into any program that uses the llmessage library.
+ */
+}
+
+
+
+class LLHTTPHelloService : public LLHTTPNode
+{
+public:
+ virtual void describe(Description& desc) const
+ {
+ desc.shortInfo("says hello");
+ desc.getAPI();
+ desc.output("\"hello\"");
+ desc.source(__FILE__, __LINE__);
+ }
+
+ virtual LLSD get() const
+ {
+ LLSD result = "hello";
+ return result;
+ }
+};
+
+LLHTTPRegistration<LLHTTPHelloService>
+ gHTTPRegistrationWebHello("/web/hello");
+
+
+
+class LLHTTPEchoService : public LLHTTPNode
+{
+public:
+ virtual void describe(Description& desc) const
+ {
+ desc.shortInfo("echo input");
+ desc.postAPI();
+ desc.input("<any>");
+ desc.output("<the input>");
+ desc.source(__FILE__, __LINE__);
+ }
+
+ virtual LLSD post(const LLSD& params) const
+ {
+ return params;
+ }
+};
+
+LLHTTPRegistration<LLHTTPEchoService>
+ gHTTPRegistrationWebEcho("/web/echo");
+
+
+
+class LLAPIService : public LLHTTPNode
+{
+public:
+ virtual void describe(Description& desc) const
+ {
+ desc.shortInfo("information about the URLs this server supports");
+ desc.getAPI();
+ desc.output("a list of URLs supported");
+ desc.source(__FILE__, __LINE__);
+ }
+
+ virtual bool handles(const LLSD& remainder, LLSD& context) const
+ {
+ return followRemainder(remainder) != NULL;
+ }
+
+ virtual void get(ResponsePtr response, const LLSD& context) const
+ {
+ const LLSD& remainder = context["request"]["remainder"];
+
+ if (remainder.size() > 0)
+ {
+ const LLHTTPNode* node = followRemainder(remainder);
+ if (!node)
+ {
+ response->notFound();
+ return;
+ }
+
+ Description desc;
+ node->describe(desc);
+ response->result(desc.getInfo());
+ return;
+ }
+
+ response->result(rootNode()->allNodePaths());
+ }
+
+private:
+ const LLHTTPNode* followRemainder(const LLSD& remainder) const
+ {
+ const LLHTTPNode* node = rootNode();
+
+ LLSD::array_const_iterator i = remainder.beginArray();
+ LLSD::array_const_iterator end = remainder.endArray();
+ for (; node && i != end; ++i)
+ {
+ node = node->findNode(*i);
+ }
+
+ return node;
+ }
+};
+
+LLHTTPRegistration<LLAPIService>
+ gHTTPRegistrationWebServerApi("/web/server/api");
+