Team E1

Fork of HTTPServer by Sam Kirsch

Revision:
5:dc88012caef1
Child:
9:c2a1462b9b71
diff -r d065642c32cc -r dc88012caef1 Handler/RpcHandler.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Handler/RpcHandler.cpp	Sat Jun 01 06:24:43 2013 +0000
@@ -0,0 +1,85 @@
+/* FsHandler.cpp */
+#include "mbed.h"
+#include "RpcHandler.h"
+#include "mbed_rpc.h"
+
+
+#define _DEBUG 1
+
+#if (_DEBUG && !defined(TARGET_LPC11U24))
+#define INFO(x, ...) std::printf("[HTTPRpcHandler : DBG]"x"\r\n", ##__VA_ARGS__);
+#define WARN(x, ...) std::printf("[HTTPRpcHandler : DBG]"x"\r\n", ##__VA_ARGS__);
+#define ERR(x, ...) std::printf("[HTTPRpcHandler : DBG]"x"\r\n", ##__VA_ARGS__);
+#else
+#define INFO(x, ...)
+#define WARN(x, ...)
+#define ERR(x, ...)
+#endif
+
+RPC rpc("rpc");
+
+
+HTTPRpcRequestHandler::HTTPRpcRequestHandler(const char* rootPath, const char* localPath, HTTPConnection::HTTPMessage& Msg, TCPSocketConnection& Tcp)
+    : HTTPRequestHandler(Msg, Tcp)
+{
+    m_rootPath = rootPath;
+    m_localPath = localPath;
+    
+    handleRequest();
+}
+
+
+HTTPRpcRequestHandler::~HTTPRpcRequestHandler()
+{
+}
+
+
+int HTTPRpcRequestHandler::handleGetRequest()
+{
+    char outBuf[256] = {};
+    bool retval = false;
+    int err = 404;
+    string rpc_args("");
+    
+    INFO("Handling RPC Get Requesst.");
+    // This version of the RPC handler does only accept native RPC commands in the format
+    //  /<class>/<method> <argument1> [<argument2> [<argument3> ...]]
+    // So we can simply pass our local pathg to our rpc
+
+    //  Append missing slash if needed
+    if (m_localPath.c_str()[0] != '/') {
+        rpc_args = "/";
+    }
+    // replace the HTTP strings with ascii strings
+    for (int i = 0 ; i < m_localPath.length() ; i++) {
+        if (m_localPath.substr(i,3) == "%20") {
+            rpc_args += " ";
+            i+=2;
+        }
+        else {
+            rpc_args += m_localPath.substr(i,1);
+        }
+    }
+    INFO("RPC to %s", rpc_args.c_str());
+    retval = rpc.call(rpc_args.c_str(),outBuf);
+    INFO("RPC Request returned %d with args : %s", retval==true ? 1 : 0, outBuf);
+    if (retval) {
+        //  No error
+        startResponse(retval, strlen(outBuf));
+        processResponse(strlen(outBuf), outBuf);
+        endResponse();
+        err = 0;
+    }
+    
+    return err;
+}
+
+int HTTPRpcRequestHandler::handlePutRequest()
+{
+    return 404;
+}
+
+int HTTPRpcRequestHandler::handlePostRequest()
+{
+    return 404;
+}
\ No newline at end of file