Changed RPC sucessful execution code from 1 to 200. Included RpcHandler.h in main header file. Effectively allows RPC through HTTP.

Dependents:   RPC_HTTP RPC_HTTP_WIZnetInterface RPC_HTTP rpc_over_http_TL_interrupter_gatePJ

Fork of HTTPServer by Henry Leinen

Committer:
leihen
Date:
Tue May 28 01:56:14 2013 +0000
Revision:
3:d6224049b3bf
First beta version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
leihen 3:d6224049b3bf 1 /* HTTPFsRequestHandler.cpp */
leihen 3:d6224049b3bf 2 #include "mbed.h"
leihen 3:d6224049b3bf 3 #include "HTTPFsRequestHandler.h"
leihen 3:d6224049b3bf 4
leihen 3:d6224049b3bf 5
leihen 3:d6224049b3bf 6
leihen 3:d6224049b3bf 7 #if (1 && !defined(TARGET_LPC11U24))
leihen 3:d6224049b3bf 8 #define INFO(x, ...) std::printf("[HTTPFsRequestHandler : DBG]"x"\r\n", ##__VA_ARGS__);
leihen 3:d6224049b3bf 9 #define WARN(x, ...) std::printf("[HTTPFsRequestHandler : DBG]"x"\r\n", ##__VA_ARGS__);
leihen 3:d6224049b3bf 10 #define ERR(x, ...) std::printf("[HTTPFsRequestHandler : DBG]"x"\r\n", ##__VA_ARGS__);
leihen 3:d6224049b3bf 11 #else
leihen 3:d6224049b3bf 12 #define INFO(x, ...)
leihen 3:d6224049b3bf 13 #define WARN(x, ...)
leihen 3:d6224049b3bf 14 #define ERR(x, ...)
leihen 3:d6224049b3bf 15 #endif
leihen 3:d6224049b3bf 16
leihen 3:d6224049b3bf 17
leihen 3:d6224049b3bf 18 #define MAX_BUFFERSIZE 128
leihen 3:d6224049b3bf 19 static char buffer[MAX_BUFFERSIZE];
leihen 3:d6224049b3bf 20
leihen 3:d6224049b3bf 21
leihen 3:d6224049b3bf 22 std::map<const char*, const char*> HTTPFsRequestHandler::m_fsMap;
leihen 3:d6224049b3bf 23
leihen 3:d6224049b3bf 24 HTTPFsRequestHandler::HTTPFsRequestHandler(const char* rootPath, const char* localPath, HTTPConnection::HTTPMessage& Msg, TCPSocketConnection& Tcp)
leihen 3:d6224049b3bf 25 : HTTPRequestHandler(Msg, Tcp)
leihen 3:d6224049b3bf 26 {
leihen 3:d6224049b3bf 27 m_rootPath = rootPath;
leihen 3:d6224049b3bf 28 m_localPath = localPath;
leihen 3:d6224049b3bf 29
leihen 3:d6224049b3bf 30 // Now replace the virtual root path with a mounted device path
leihen 3:d6224049b3bf 31 std::map<const char*, const char*>::iterator it;
leihen 3:d6224049b3bf 32 for (it = m_fsMap.begin() ; it != m_fsMap.end() ; it++) {
leihen 3:d6224049b3bf 33 // find best match (if the given logical path is containted in the root
leihen 3:d6224049b3bf 34 if (m_rootPath.find( it->second ) == 0) {
leihen 3:d6224049b3bf 35 m_rootPath = it->first;
leihen 3:d6224049b3bf 36 break;
leihen 3:d6224049b3bf 37 }
leihen 3:d6224049b3bf 38 }
leihen 3:d6224049b3bf 39
leihen 3:d6224049b3bf 40 handleRequest();
leihen 3:d6224049b3bf 41 }
leihen 3:d6224049b3bf 42
leihen 3:d6224049b3bf 43 HTTPFsRequestHandler::~HTTPFsRequestHandler()
leihen 3:d6224049b3bf 44 {
leihen 3:d6224049b3bf 45 }
leihen 3:d6224049b3bf 46
leihen 3:d6224049b3bf 47 int HTTPFsRequestHandler::handleGetRequest()
leihen 3:d6224049b3bf 48 {
leihen 3:d6224049b3bf 49 INFO("Handling Get Request.");
leihen 3:d6224049b3bf 50 int retval = 200; //success
leihen 3:d6224049b3bf 51 std::string reqPath;
leihen 3:d6224049b3bf 52
leihen 3:d6224049b3bf 53 // Check if we received a directory with the local bath
leihen 3:d6224049b3bf 54 if ((m_localPath.length() == 0) || (m_localPath.substr( m_localPath.length()-1, 1) == "/")) {
leihen 3:d6224049b3bf 55 // yes, we shall append the default page name
leihen 3:d6224049b3bf 56 m_localPath += "index.html";
leihen 3:d6224049b3bf 57 }
leihen 3:d6224049b3bf 58
leihen 3:d6224049b3bf 59 reqPath = m_rootPath + m_localPath;
leihen 3:d6224049b3bf 60
leihen 3:d6224049b3bf 61 INFO("Mapping \"%s\" to \"%s\"", msg.uri.c_str(), reqPath.c_str());
leihen 3:d6224049b3bf 62
leihen 3:d6224049b3bf 63 FILE *fp = fopen(reqPath.c_str(), "r");
leihen 3:d6224049b3bf 64 if (fp != NULL) {
leihen 3:d6224049b3bf 65 // File was found and can be returned
leihen 3:d6224049b3bf 66
leihen 3:d6224049b3bf 67 // first determine the size
leihen 3:d6224049b3bf 68 fseek(fp, 0, SEEK_END);
leihen 3:d6224049b3bf 69 long size = ftell(fp);
leihen 3:d6224049b3bf 70 fseek(fp, 0, SEEK_SET);
leihen 3:d6224049b3bf 71
leihen 3:d6224049b3bf 72 startResponse(200, size);
leihen 3:d6224049b3bf 73 while(!feof(fp) && !ferror(fp)) {
leihen 3:d6224049b3bf 74 int cnt = fread(buffer, 1, MAX_BUFFERSIZE , fp);
leihen 3:d6224049b3bf 75 processResponse(cnt, buffer);
leihen 3:d6224049b3bf 76 }
leihen 3:d6224049b3bf 77 endResponse();
leihen 3:d6224049b3bf 78 fclose(fp);
leihen 3:d6224049b3bf 79 }
leihen 3:d6224049b3bf 80 else {
leihen 3:d6224049b3bf 81 retval = 404;
leihen 3:d6224049b3bf 82 ERR("Requested file was not found !");
leihen 3:d6224049b3bf 83 }
leihen 3:d6224049b3bf 84
leihen 3:d6224049b3bf 85 return retval;
leihen 3:d6224049b3bf 86 }