Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: EthernetInterface mbed-rpc mbed-rtos mbed
Fork of HTTP-Server by
Diff: Formatter.cpp
- Revision:
- 0:9e4bcb10b3e3
- Child:
- 4:624527ebc0fa
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Formatter.cpp Wed Jul 17 10:15:05 2013 +0000
@@ -0,0 +1,181 @@
+#include "Formatter.h"
+#include "mbed.h"
+#include "RPCObjectManager.h"
+#include "EthernetInterface.h"
+
+const char *SIMPLE_HTML_CODE = "\
+<!DOCTYPE html>\
+<html>\
+ <head>\
+ <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\
+ <title>TCP Server</title>\
+ </head>\
+ <body>";
+
+
+const char* INTERACTIVE_HTML_CODE_1 = "\
+<!DOCTYPE html>\
+<html>\
+ <head>\
+ <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\
+ <title>TCP Server</title>\
+ <script type=\"text/javascript\">\
+ var ip = \"%s\";\
+ function submitCreateForm()\
+ {\
+ var list = document.getElementById(\"type\");\
+ var type = list.options[list.selectedIndex].value;\
+ var name = document.getElementById(\"name\").value;\
+ var arg = document.getElementById(\"arg\").value;\
+ var url;\
+ if(arg === \"\")\
+ url = \"http://\" + ip + type + \"new?name=\" + name;\
+ else\
+ url = \"http://\" + ip + type + \"new?arg=\" + arg + \"&name=\" + name;\
+ location.href= url;\
+ }\
+ function submitCallFuncForm()\
+ {\
+ var command = document.getElementById(\"command\").value;\
+ var tmp = command.split(\' \');\
+ var url = tmp[0];\
+ if(tmp.length > 1)\
+ url += \"?\";\
+ for(var i = 1; i < tmp.length; ++i)\
+ {\
+ url += \"arg\" + i + \"=\" + tmp[i];\
+ if(i+1 < tmp.length)\
+ url += \"&\";\
+ }\
+ location.href = url;\
+ }\
+ </script>\
+ </head> \
+<body>";
+
+const char* INTERACTIVE_HTML_CODE_2 = "<h3>Create Object :</h3>\
+ <form id=\"create\" method=\"get\">\
+ Type: <select id=\"type\">\
+ <option value=\"/DigitalOut/\">DigitalOut</option>\
+ <option value=\"/DigitalIn/\">DigitalIn</option>\
+ <option value=\"/DigitalInOut/\">DigitalInOut</option>\
+ <option value=\"/PwmOut/\">PwmOut</option>\
+ <option value=\"/Timer/\">Timer</option>\
+ </select><br>\
+ name: <input type=\"text\" id=\"name\"><br>\
+ arg(optional): <input type=\"text\" id=\"arg\">\
+ <p><input type=\"button\" value=\"Create\" onclick=\"javascript:submitCreateForm();\"></p>\
+ </form> \
+ \
+ <h3>Call a function :</h3>\
+ <p>Enter an RPC command.</p>\
+ <form method=\"get\">\
+ Command: <input type= \"text\" id=\"command\"><br>\
+ <input type=\"button\" value=\"Send\" onclick=\"javascript:submitCallFuncForm();\"><br>\
+ </form>\
+ </body> \
+</html>";
+
+static char chunk[1024];
+
+Formatter::Formatter(int nb):
+currentChunk(0),
+nbChunk(nb)
+{
+}
+
+char* Formatter::get_page(char *reply)
+{
+ chunk[0] = '\0';
+
+ if(currentChunk < nbChunk)
+ {
+ get_chunk(currentChunk, reply);
+ currentChunk++;
+ }
+ else
+ currentChunk = 0;
+
+ return chunk;
+}
+
+void Formatter::get_chunk(const int c, char *reply)
+{
+ strcat(chunk, reply);
+}
+
+SimpleHTMLFormatter::SimpleHTMLFormatter():
+Formatter()
+{
+}
+
+void SimpleHTMLFormatter::get_chunk(const int c, char* reply)
+{
+ strcat(chunk, SIMPLE_HTML_CODE);
+
+ if(reply != NULL && strlen(reply) != 0)
+ {
+ strcat(chunk, "RPC reply : ");
+ strcat(chunk, reply);
+ }
+
+ if(!RPCObjectManager::instance().is_empty())
+ {
+ strcat(chunk, "<ul>");
+ for(std::list<char*>::iterator itor = RPCObjectManager::instance().begin();
+ itor != RPCObjectManager::instance().end();
+ ++itor)
+ {
+ strcat(chunk, "<li>");
+ strcat(chunk, *itor);
+ strcat(chunk, "</li>");
+ }
+ strcat(chunk, "</ul>");
+ }
+
+ strcat(chunk, "</body></html>");
+}
+
+InteractiveHTMLFormatter::InteractiveHTMLFormatter():
+Formatter(3)
+{
+}
+
+void InteractiveHTMLFormatter::get_chunk(const int c, char *reply)
+{
+ if(c == 0)
+ sprintf(chunk, INTERACTIVE_HTML_CODE_1, EthernetInterface::getIPAddress());
+ else if(c == 1)
+ {
+ if(reply != NULL && strlen(reply) != 0)
+ {
+ strcat(chunk, "RPC reply : ");
+ strcat(chunk, reply);
+ }
+ if(!RPCObjectManager::instance().is_empty())
+ {
+ strcat(chunk, "<p>Objects created :</p>");
+
+ strcat(chunk, "<ul>");
+ for(std::list<char*>::iterator itor = RPCObjectManager::instance().begin();
+ itor != RPCObjectManager::instance().end();
+ ++itor)
+ {
+ strcat(chunk, "<li>");
+ strcat(chunk, *itor);
+ strcat(chunk, " (<a href=\"http://");
+ strcat(chunk, EthernetInterface::getIPAddress());
+ strcat(chunk, "/");
+ strcat(chunk, *itor);
+ strcat(chunk, "/delete\">delete</a>)");
+ strcat(chunk, "</li>");
+ }
+ strcat(chunk, "</ul>");
+ }
+ strcat(chunk, " ");
+ }
+ else if(c == 2)
+ strcat(chunk, INTERACTIVE_HTML_CODE_2);
+}
+
+
