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.h */
leihen 3:d6224049b3bf 2 /*
leihen 3:d6224049b3bf 3 Copyright (c) 2013 Henry Leinen (henry[dot]leinen [at] online [dot] de)
leihen 3:d6224049b3bf 4
leihen 3:d6224049b3bf 5 Permission is hereby granted, free of charge, to any person obtaining a copy
leihen 3:d6224049b3bf 6 of this software and associated documentation files (the "Software"), to deal
leihen 3:d6224049b3bf 7 in the Software without restriction, including without limitation the rights
leihen 3:d6224049b3bf 8 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
leihen 3:d6224049b3bf 9 copies of the Software, and to permit persons to whom the Software is
leihen 3:d6224049b3bf 10 furnished to do so, subject to the following conditions:
leihen 3:d6224049b3bf 11
leihen 3:d6224049b3bf 12 The above copyright notice and this permission notice shall be included in
leihen 3:d6224049b3bf 13 all copies or substantial portions of the Software.
leihen 3:d6224049b3bf 14
leihen 3:d6224049b3bf 15 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
leihen 3:d6224049b3bf 16 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
leihen 3:d6224049b3bf 17 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
leihen 3:d6224049b3bf 18 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
leihen 3:d6224049b3bf 19 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
leihen 3:d6224049b3bf 20 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
leihen 3:d6224049b3bf 21 THE SOFTWARE.
leihen 3:d6224049b3bf 22 */
leihen 5:dc88012caef1 23 #ifndef __FSHANDLER_H__
leihen 5:dc88012caef1 24 #define __FSHANDLER_H__
leihen 3:d6224049b3bf 25
leihen 3:d6224049b3bf 26 #include "mbed.h"
leihen 3:d6224049b3bf 27 #include "HTTPRequestHandler.h"
leihen 3:d6224049b3bf 28
leihen 3:d6224049b3bf 29 #include <map>
leihen 3:d6224049b3bf 30 #include <string>
leihen 3:d6224049b3bf 31
leihen 4:d065642c32cc 32 /** class HTTPFsRequestHandler serves requests with file-system objects
leihen 4:d065642c32cc 33 */
leihen 3:d6224049b3bf 34 class HTTPFsRequestHandler : public HTTPRequestHandler
leihen 3:d6224049b3bf 35 {
leihen 3:d6224049b3bf 36 std::string m_rootPath;
leihen 3:d6224049b3bf 37 std::string m_localPath;
leihen 3:d6224049b3bf 38
leihen 3:d6224049b3bf 39 public:
leihen 4:d065642c32cc 40 /** constructor for HTTPFsRequestHandler object and stores the request related data locally.
leihen 4:d065642c32cc 41 * the request handling will be initiated from within the constructor.
leihen 4:d065642c32cc 42 * @param rootPath : The path under which the handler was registered.
leihen 4:d065642c32cc 43 * @param localPath : The path which is relative to the registered file system root.
leihen 4:d065642c32cc 44 * @param Msg : Message request information that comes with the request.
leihen 4:d065642c32cc 45 * @param Tcp : The socket connection for communicating with the client.
leihen 4:d065642c32cc 46 */
leihen 13:93ff322420b0 47 HTTPFsRequestHandler(const char* rootPath, const char* localPath, HTTPConnection::HTTPMessage& Msg);
leihen 4:d065642c32cc 48
leihen 4:d065642c32cc 49 /** Destructor
leihen 4:d065642c32cc 50 */
leihen 3:d6224049b3bf 51 virtual ~HTTPFsRequestHandler();
leihen 3:d6224049b3bf 52
leihen 4:d065642c32cc 53 /** static creation function for this object.
leihen 4:d065642c32cc 54 */
leihen 13:93ff322420b0 55 static inline HTTPRequestHandler* create(const char* rootPath, const char* localPath, HTTPConnection::HTTPMessage& msg) { return new HTTPFsRequestHandler(rootPath, localPath, msg); }
leihen 3:d6224049b3bf 56
leihen 3:d6224049b3bf 57 /** Handler function to serve GET requests
leihen 3:d6224049b3bf 58 */
leihen 3:d6224049b3bf 59 virtual int handleGetRequest();
leihen 4:d065642c32cc 60
leihen 4:d065642c32cc 61 /** Handler function to serve PUT requests
leihen 4:d065642c32cc 62 */
leihen 4:d065642c32cc 63 virtual int handlePutRequest();
leihen 4:d065642c32cc 64
leihen 4:d065642c32cc 65 /** Handler function to serve POST requests
leihen 4:d065642c32cc 66 */
leihen 4:d065642c32cc 67 virtual int handlePostRequest();
leihen 3:d6224049b3bf 68
leihen 4:d065642c32cc 69 /** Map to register different file system types and associate them with different root paths
leihen 4:d065642c32cc 70 */
leihen 3:d6224049b3bf 71 static std::map<const char*, const char*> m_fsMap;
leihen 4:d065642c32cc 72
leihen 4:d065642c32cc 73 /** static function to register a new file system type with a logical root path
leihen 4:d065642c32cc 74 */
leihen 3:d6224049b3bf 75 static void mount(const char* requestPath, const char* localPath) { m_fsMap[requestPath] = localPath; }
leihen 4:d065642c32cc 76
leihen 4:d065642c32cc 77 /** Parse a uri string for uri file name and argument:value pairs
leihen 4:d065642c32cc 78 */
leihen 4:d065642c32cc 79 int parseUriArgs(string uri, map<string, string>& args);
leihen 3:d6224049b3bf 80 };
leihen 5:dc88012caef1 81 #endif // __FSHANDLER_H__