Single instance HTTP Server using WiFly Interface.

Dependents:   WiFlyHTTPServerSample MultiThreadingHTTPServer

This is my implementation for a HTTP Server using the WiFly Interface. Please note that this is still under development.

It may still contain several bugs. I have tested it using a 1768 on an application board plus RN-XV board.

Currently there is only a FileSystem implemented. Also it is limited to GET request.

I try to extend it further so it will be more useful.

Btw, it does NOT work with RTOS, which seems not to be the Problem of my library.

Do not Forget to Import the WiFly Interface into your Project when using this library.

Change History:

REV5: - added support for basic RPC GET request functionality.

REV4: - added argument parsing from the request uri. - documentation extended and updated.

Committer:
leihen
Date:
Wed Jun 26 22:41:05 2013 +0000
Revision:
14:7f9fbfc18623
Parent:
13:93ff322420b0
Moved the HttpServer module inside this library.

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 }