summaryrefslogtreecommitdiff
path: root/apps/examples/xmlrpc/calls.c
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2012-09-14 14:07:21 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2012-09-14 14:07:21 +0000
commitb12d1dada94cd7083c2a5a023ec2e7a9a51c192a (patch)
tree78375ed0dfcfed58f45bf266c76a1f9230df01c9 /apps/examples/xmlrpc/calls.c
parentbf8d0c68312793631ed4ade1541ec36168b3722b (diff)
downloadnuttx-b12d1dada94cd7083c2a5a023ec2e7a9a51c192a.tar.gz
nuttx-b12d1dada94cd7083c2a5a023ec2e7a9a51c192a.tar.bz2
nuttx-b12d1dada94cd7083c2a5a023ec2e7a9a51c192a.zip
Add XML RPC server plus NXWM build fixes from Max Holtzberg
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@5150 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'apps/examples/xmlrpc/calls.c')
-rw-r--r--apps/examples/xmlrpc/calls.c122
1 files changed, 122 insertions, 0 deletions
diff --git a/apps/examples/xmlrpc/calls.c b/apps/examples/xmlrpc/calls.c
new file mode 100644
index 000000000..bda164f4d
--- /dev/null
+++ b/apps/examples/xmlrpc/calls.c
@@ -0,0 +1,122 @@
+/****************************************************************************
+ * apps/examples/xmlrpc/calls.c
+ *
+ * Copyright (C) 2012 Max Holtzberg. All rights reserved.
+ * Author: Max Holtzberg <mh@uvc.de>
+ *
+ * Based on the embeddable lightweight XML-RPC server code discussed
+ * in the article at: http://www.drdobbs.com/web-development/\
+ * an-embeddable-lightweight-xml-rpc-server/184405364
+ *
+ * Copyright (c) 2002 Cogito LLC. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or
+ * without modification, is hereby granted without fee provided
+ * that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above
+ * copyright notice, this list of conditions and the
+ * following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the
+ * following disclaimer in the documentation and/or other
+ * materials provided with the distribution.
+ * 3. Neither the name of Cogito LLC nor the names of its
+ * contributors may be used to endorse or promote products
+ * derived from this software without specific prior
+ * written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY COGITO LLC AND CONTRIBUTERS 'AS IS'
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL COGITO LLC
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARAY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <string.h>
+#include <apps/netutils/xmlrpc.h>
+
+/****************************************************************************
+ * Private Function Prototypes
+ ****************************************************************************/
+
+static int calls_get_device_stats(struct xmlrpc_s *xmlcall);
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+struct xmlrpc_entry_s get_device_stats =
+{
+ .name = "get_device_stats",
+ .func = calls_get_device_stats
+};
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+static int calls_get_device_stats(struct xmlrpc_s *xmlcall)
+{
+ char username[80], password[80];
+ char lastCommand[80], curState[80];
+ int request = 0, status, ret;
+
+ do
+ {
+ ret = xmlrpc_getstring(xmlcall, username);
+ if (ret != XMLRPC_NO_ERROR)
+ {
+ break;
+ }
+
+ ret = xmlrpc_getstring(xmlcall, password);
+ if (ret != XMLRPC_NO_ERROR)
+ {
+ break;
+ }
+
+ ret = xmlrpc_getinteger(xmlcall, &request);
+ if (ret != XMLRPC_NO_ERROR)
+ {
+ break;
+ }
+ }
+ while (0);
+
+ if (ret == XMLRPC_NO_ERROR)
+ {
+ /* Dummy up some data... */
+
+ status = 1;
+ strcpy(lastCommand, "reboot");
+ strcpy(curState, "Normal Operation");
+
+ ret = xmlrpc_buildresponse(xmlcall, "{iss}",
+ "status", status,
+ "lastCommand", lastCommand,
+ "currentState", curState);
+ }
+
+ return ret;
+}
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+void calls_register(void)
+{
+ xmlrpc_register(&get_device_stats);
+}