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 21:20:58 2013 +0000
Revision:
4:d065642c32cc
Parent:
HTTPFsRequestHandler.cpp@3:d6224049b3bf
Added parameter parsing from uri in http webrequest.
; Documentation updated.

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