Henry Leinen / WiFlyHTTPServer

Dependents:   WiFlyHTTPServerSample MultiThreadingHTTPServer

Committer:
leihen
Date:
Wed Jun 26 21:12:42 2013 +0000
Revision:
13:93ff322420b0
Parent:
9:c2a1462b9b71
Working Multithreaded HTTP Server.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
leihen 5:dc88012caef1 1 /* FsHandler.cpp */
leihen 5:dc88012caef1 2 #include "mbed.h"
leihen 5:dc88012caef1 3 #include "RpcHandler.h"
leihen 5:dc88012caef1 4 #include "mbed_rpc.h"
leihen 5:dc88012caef1 5
leihen 5:dc88012caef1 6
leihen 13:93ff322420b0 7 #define DEBUG
leihen 13:93ff322420b0 8 #include "debug.h"
leihen 5:dc88012caef1 9
leihen 5:dc88012caef1 10
leihen 5:dc88012caef1 11 RPC rpc("rpc");
leihen 5:dc88012caef1 12
leihen 5:dc88012caef1 13
leihen 13:93ff322420b0 14 HTTPRpcRequestHandler::HTTPRpcRequestHandler(const char* rootPath, const char* localPath, HTTPConnection::HTTPMessage& Msg)
leihen 13:93ff322420b0 15 : HTTPRequestHandler(Msg)
leihen 5:dc88012caef1 16 {
leihen 5:dc88012caef1 17 m_rootPath = rootPath;
leihen 5:dc88012caef1 18 m_localPath = localPath;
leihen 5:dc88012caef1 19
leihen 5:dc88012caef1 20 handleRequest();
leihen 5:dc88012caef1 21 }
leihen 5:dc88012caef1 22
leihen 5:dc88012caef1 23
leihen 5:dc88012caef1 24 HTTPRpcRequestHandler::~HTTPRpcRequestHandler()
leihen 5:dc88012caef1 25 {
leihen 5:dc88012caef1 26 }
leihen 5:dc88012caef1 27
leihen 5:dc88012caef1 28
leihen 5:dc88012caef1 29 int HTTPRpcRequestHandler::handleGetRequest()
leihen 5:dc88012caef1 30 {
leihen 5:dc88012caef1 31 char outBuf[256] = {};
leihen 5:dc88012caef1 32 bool retval = false;
leihen 5:dc88012caef1 33 int err = 404;
leihen 5:dc88012caef1 34 string rpc_args("");
leihen 5:dc88012caef1 35
leihen 5:dc88012caef1 36 INFO("Handling RPC Get Requesst.");
leihen 5:dc88012caef1 37 // This version of the RPC handler does only accept native RPC commands in the format
leihen 5:dc88012caef1 38 // /<class>/<method> <argument1> [<argument2> [<argument3> ...]]
leihen 5:dc88012caef1 39 // So we can simply pass our local pathg to our rpc
leihen 5:dc88012caef1 40
leihen 5:dc88012caef1 41 // Append missing slash if needed
leihen 5:dc88012caef1 42 if (m_localPath.c_str()[0] != '/') {
leihen 5:dc88012caef1 43 rpc_args = "/";
leihen 5:dc88012caef1 44 }
leihen 5:dc88012caef1 45 // replace the HTTP strings with ascii strings
leihen 5:dc88012caef1 46 for (int i = 0 ; i < m_localPath.length() ; i++) {
leihen 5:dc88012caef1 47 if (m_localPath.substr(i,3) == "%20") {
leihen 5:dc88012caef1 48 rpc_args += " ";
leihen 5:dc88012caef1 49 i+=2;
leihen 5:dc88012caef1 50 }
leihen 5:dc88012caef1 51 else {
leihen 5:dc88012caef1 52 rpc_args += m_localPath.substr(i,1);
leihen 5:dc88012caef1 53 }
leihen 5:dc88012caef1 54 }
leihen 5:dc88012caef1 55 INFO("RPC to %s", rpc_args.c_str());
leihen 5:dc88012caef1 56 retval = rpc.call(rpc_args.c_str(),outBuf);
leihen 5:dc88012caef1 57 INFO("RPC Request returned %d with args : %s", retval==true ? 1 : 0, outBuf);
leihen 5:dc88012caef1 58 if (retval) {
leihen 5:dc88012caef1 59 // No error
leihen 5:dc88012caef1 60 startResponse(retval, strlen(outBuf));
leihen 5:dc88012caef1 61 processResponse(strlen(outBuf), outBuf);
leihen 5:dc88012caef1 62 endResponse();
leihen 5:dc88012caef1 63 err = 0;
leihen 5:dc88012caef1 64 }
leihen 5:dc88012caef1 65
leihen 5:dc88012caef1 66 return err;
leihen 5:dc88012caef1 67 }
leihen 5:dc88012caef1 68
leihen 5:dc88012caef1 69 int HTTPRpcRequestHandler::handlePutRequest()
leihen 5:dc88012caef1 70 {
leihen 5:dc88012caef1 71 return 404;
leihen 5:dc88012caef1 72 }
leihen 5:dc88012caef1 73
leihen 5:dc88012caef1 74 int HTTPRpcRequestHandler::handlePostRequest()
leihen 5:dc88012caef1 75 {
leihen 5:dc88012caef1 76 return 404;
leihen 5:dc88012caef1 77 }