Modified to run on Renesas GR Peach board

Dependents:   GR-PeachAHRSWeb

Fork of HTTP-Server by Francois Berder

Committer:
feb11
Date:
Wed Jul 17 10:15:05 2013 +0000
Revision:
0:9e4bcb10b3e3
Child:
4:624527ebc0fa
Initial import

Who changed what in which revision?

UserRevisionLine numberNew contents of line
feb11 0:9e4bcb10b3e3 1 #include "Formatter.h"
feb11 0:9e4bcb10b3e3 2 #include "mbed.h"
feb11 0:9e4bcb10b3e3 3 #include "RPCObjectManager.h"
feb11 0:9e4bcb10b3e3 4 #include "EthernetInterface.h"
feb11 0:9e4bcb10b3e3 5
feb11 0:9e4bcb10b3e3 6 const char *SIMPLE_HTML_CODE = "\
feb11 0:9e4bcb10b3e3 7 <!DOCTYPE html>\
feb11 0:9e4bcb10b3e3 8 <html>\
feb11 0:9e4bcb10b3e3 9 <head>\
feb11 0:9e4bcb10b3e3 10 <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\
feb11 0:9e4bcb10b3e3 11 <title>TCP Server</title>\
feb11 0:9e4bcb10b3e3 12 </head>\
feb11 0:9e4bcb10b3e3 13 <body>";
feb11 0:9e4bcb10b3e3 14
feb11 0:9e4bcb10b3e3 15
feb11 0:9e4bcb10b3e3 16 const char* INTERACTIVE_HTML_CODE_1 = "\
feb11 0:9e4bcb10b3e3 17 <!DOCTYPE html>\
feb11 0:9e4bcb10b3e3 18 <html>\
feb11 0:9e4bcb10b3e3 19 <head>\
feb11 0:9e4bcb10b3e3 20 <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\
feb11 0:9e4bcb10b3e3 21 <title>TCP Server</title>\
feb11 0:9e4bcb10b3e3 22 <script type=\"text/javascript\">\
feb11 0:9e4bcb10b3e3 23 var ip = \"%s\";\
feb11 0:9e4bcb10b3e3 24 function submitCreateForm()\
feb11 0:9e4bcb10b3e3 25 {\
feb11 0:9e4bcb10b3e3 26 var list = document.getElementById(\"type\");\
feb11 0:9e4bcb10b3e3 27 var type = list.options[list.selectedIndex].value;\
feb11 0:9e4bcb10b3e3 28 var name = document.getElementById(\"name\").value;\
feb11 0:9e4bcb10b3e3 29 var arg = document.getElementById(\"arg\").value;\
feb11 0:9e4bcb10b3e3 30 var url;\
feb11 0:9e4bcb10b3e3 31 if(arg === \"\")\
feb11 0:9e4bcb10b3e3 32 url = \"http://\" + ip + type + \"new?name=\" + name;\
feb11 0:9e4bcb10b3e3 33 else\
feb11 0:9e4bcb10b3e3 34 url = \"http://\" + ip + type + \"new?arg=\" + arg + \"&name=\" + name;\
feb11 0:9e4bcb10b3e3 35 location.href= url;\
feb11 0:9e4bcb10b3e3 36 }\
feb11 0:9e4bcb10b3e3 37 function submitCallFuncForm()\
feb11 0:9e4bcb10b3e3 38 {\
feb11 0:9e4bcb10b3e3 39 var command = document.getElementById(\"command\").value;\
feb11 0:9e4bcb10b3e3 40 var tmp = command.split(\' \');\
feb11 0:9e4bcb10b3e3 41 var url = tmp[0];\
feb11 0:9e4bcb10b3e3 42 if(tmp.length > 1)\
feb11 0:9e4bcb10b3e3 43 url += \"?\";\
feb11 0:9e4bcb10b3e3 44 for(var i = 1; i < tmp.length; ++i)\
feb11 0:9e4bcb10b3e3 45 {\
feb11 0:9e4bcb10b3e3 46 url += \"arg\" + i + \"=\" + tmp[i];\
feb11 0:9e4bcb10b3e3 47 if(i+1 < tmp.length)\
feb11 0:9e4bcb10b3e3 48 url += \"&\";\
feb11 0:9e4bcb10b3e3 49 }\
feb11 0:9e4bcb10b3e3 50 location.href = url;\
feb11 0:9e4bcb10b3e3 51 }\
feb11 0:9e4bcb10b3e3 52 </script>\
feb11 0:9e4bcb10b3e3 53 </head> \
feb11 0:9e4bcb10b3e3 54 <body>";
feb11 0:9e4bcb10b3e3 55
feb11 0:9e4bcb10b3e3 56 const char* INTERACTIVE_HTML_CODE_2 = "<h3>Create Object :</h3>\
feb11 0:9e4bcb10b3e3 57 <form id=\"create\" method=\"get\">\
feb11 0:9e4bcb10b3e3 58 Type: <select id=\"type\">\
feb11 0:9e4bcb10b3e3 59 <option value=\"/DigitalOut/\">DigitalOut</option>\
feb11 0:9e4bcb10b3e3 60 <option value=\"/DigitalIn/\">DigitalIn</option>\
feb11 0:9e4bcb10b3e3 61 <option value=\"/DigitalInOut/\">DigitalInOut</option>\
feb11 0:9e4bcb10b3e3 62 <option value=\"/PwmOut/\">PwmOut</option>\
feb11 0:9e4bcb10b3e3 63 <option value=\"/Timer/\">Timer</option>\
feb11 0:9e4bcb10b3e3 64 </select><br>\
feb11 0:9e4bcb10b3e3 65 name: <input type=\"text\" id=\"name\"><br>\
feb11 0:9e4bcb10b3e3 66 arg(optional): <input type=\"text\" id=\"arg\">\
feb11 0:9e4bcb10b3e3 67 <p><input type=\"button\" value=\"Create\" onclick=\"javascript:submitCreateForm();\"></p>\
feb11 0:9e4bcb10b3e3 68 </form> \
feb11 0:9e4bcb10b3e3 69 \
feb11 0:9e4bcb10b3e3 70 <h3>Call a function :</h3>\
feb11 0:9e4bcb10b3e3 71 <p>Enter an RPC command.</p>\
feb11 0:9e4bcb10b3e3 72 <form method=\"get\">\
feb11 0:9e4bcb10b3e3 73 Command: <input type= \"text\" id=\"command\"><br>\
feb11 0:9e4bcb10b3e3 74 <input type=\"button\" value=\"Send\" onclick=\"javascript:submitCallFuncForm();\"><br>\
feb11 0:9e4bcb10b3e3 75 </form>\
feb11 0:9e4bcb10b3e3 76 </body> \
feb11 0:9e4bcb10b3e3 77 </html>";
feb11 0:9e4bcb10b3e3 78
feb11 0:9e4bcb10b3e3 79 static char chunk[1024];
feb11 0:9e4bcb10b3e3 80
feb11 0:9e4bcb10b3e3 81 Formatter::Formatter(int nb):
feb11 0:9e4bcb10b3e3 82 currentChunk(0),
feb11 0:9e4bcb10b3e3 83 nbChunk(nb)
feb11 0:9e4bcb10b3e3 84 {
feb11 0:9e4bcb10b3e3 85 }
feb11 0:9e4bcb10b3e3 86
feb11 0:9e4bcb10b3e3 87 char* Formatter::get_page(char *reply)
feb11 0:9e4bcb10b3e3 88 {
feb11 0:9e4bcb10b3e3 89 chunk[0] = '\0';
feb11 0:9e4bcb10b3e3 90
feb11 0:9e4bcb10b3e3 91 if(currentChunk < nbChunk)
feb11 0:9e4bcb10b3e3 92 {
feb11 0:9e4bcb10b3e3 93 get_chunk(currentChunk, reply);
feb11 0:9e4bcb10b3e3 94 currentChunk++;
feb11 0:9e4bcb10b3e3 95 }
feb11 0:9e4bcb10b3e3 96 else
feb11 0:9e4bcb10b3e3 97 currentChunk = 0;
feb11 0:9e4bcb10b3e3 98
feb11 0:9e4bcb10b3e3 99 return chunk;
feb11 0:9e4bcb10b3e3 100 }
feb11 0:9e4bcb10b3e3 101
feb11 0:9e4bcb10b3e3 102 void Formatter::get_chunk(const int c, char *reply)
feb11 0:9e4bcb10b3e3 103 {
feb11 0:9e4bcb10b3e3 104 strcat(chunk, reply);
feb11 0:9e4bcb10b3e3 105 }
feb11 0:9e4bcb10b3e3 106
feb11 0:9e4bcb10b3e3 107 SimpleHTMLFormatter::SimpleHTMLFormatter():
feb11 0:9e4bcb10b3e3 108 Formatter()
feb11 0:9e4bcb10b3e3 109 {
feb11 0:9e4bcb10b3e3 110 }
feb11 0:9e4bcb10b3e3 111
feb11 0:9e4bcb10b3e3 112 void SimpleHTMLFormatter::get_chunk(const int c, char* reply)
feb11 0:9e4bcb10b3e3 113 {
feb11 0:9e4bcb10b3e3 114 strcat(chunk, SIMPLE_HTML_CODE);
feb11 0:9e4bcb10b3e3 115
feb11 0:9e4bcb10b3e3 116 if(reply != NULL && strlen(reply) != 0)
feb11 0:9e4bcb10b3e3 117 {
feb11 0:9e4bcb10b3e3 118 strcat(chunk, "RPC reply : ");
feb11 0:9e4bcb10b3e3 119 strcat(chunk, reply);
feb11 0:9e4bcb10b3e3 120 }
feb11 0:9e4bcb10b3e3 121
feb11 0:9e4bcb10b3e3 122 if(!RPCObjectManager::instance().is_empty())
feb11 0:9e4bcb10b3e3 123 {
feb11 0:9e4bcb10b3e3 124 strcat(chunk, "<ul>");
feb11 0:9e4bcb10b3e3 125 for(std::list<char*>::iterator itor = RPCObjectManager::instance().begin();
feb11 0:9e4bcb10b3e3 126 itor != RPCObjectManager::instance().end();
feb11 0:9e4bcb10b3e3 127 ++itor)
feb11 0:9e4bcb10b3e3 128 {
feb11 0:9e4bcb10b3e3 129 strcat(chunk, "<li>");
feb11 0:9e4bcb10b3e3 130 strcat(chunk, *itor);
feb11 0:9e4bcb10b3e3 131 strcat(chunk, "</li>");
feb11 0:9e4bcb10b3e3 132 }
feb11 0:9e4bcb10b3e3 133 strcat(chunk, "</ul>");
feb11 0:9e4bcb10b3e3 134 }
feb11 0:9e4bcb10b3e3 135
feb11 0:9e4bcb10b3e3 136 strcat(chunk, "</body></html>");
feb11 0:9e4bcb10b3e3 137 }
feb11 0:9e4bcb10b3e3 138
feb11 0:9e4bcb10b3e3 139 InteractiveHTMLFormatter::InteractiveHTMLFormatter():
feb11 0:9e4bcb10b3e3 140 Formatter(3)
feb11 0:9e4bcb10b3e3 141 {
feb11 0:9e4bcb10b3e3 142 }
feb11 0:9e4bcb10b3e3 143
feb11 0:9e4bcb10b3e3 144 void InteractiveHTMLFormatter::get_chunk(const int c, char *reply)
feb11 0:9e4bcb10b3e3 145 {
feb11 0:9e4bcb10b3e3 146 if(c == 0)
feb11 0:9e4bcb10b3e3 147 sprintf(chunk, INTERACTIVE_HTML_CODE_1, EthernetInterface::getIPAddress());
feb11 0:9e4bcb10b3e3 148 else if(c == 1)
feb11 0:9e4bcb10b3e3 149 {
feb11 0:9e4bcb10b3e3 150 if(reply != NULL && strlen(reply) != 0)
feb11 0:9e4bcb10b3e3 151 {
feb11 0:9e4bcb10b3e3 152 strcat(chunk, "RPC reply : ");
feb11 0:9e4bcb10b3e3 153 strcat(chunk, reply);
feb11 0:9e4bcb10b3e3 154 }
feb11 0:9e4bcb10b3e3 155 if(!RPCObjectManager::instance().is_empty())
feb11 0:9e4bcb10b3e3 156 {
feb11 0:9e4bcb10b3e3 157 strcat(chunk, "<p>Objects created :</p>");
feb11 0:9e4bcb10b3e3 158
feb11 0:9e4bcb10b3e3 159 strcat(chunk, "<ul>");
feb11 0:9e4bcb10b3e3 160 for(std::list<char*>::iterator itor = RPCObjectManager::instance().begin();
feb11 0:9e4bcb10b3e3 161 itor != RPCObjectManager::instance().end();
feb11 0:9e4bcb10b3e3 162 ++itor)
feb11 0:9e4bcb10b3e3 163 {
feb11 0:9e4bcb10b3e3 164 strcat(chunk, "<li>");
feb11 0:9e4bcb10b3e3 165 strcat(chunk, *itor);
feb11 0:9e4bcb10b3e3 166 strcat(chunk, " (<a href=\"http://");
feb11 0:9e4bcb10b3e3 167 strcat(chunk, EthernetInterface::getIPAddress());
feb11 0:9e4bcb10b3e3 168 strcat(chunk, "/");
feb11 0:9e4bcb10b3e3 169 strcat(chunk, *itor);
feb11 0:9e4bcb10b3e3 170 strcat(chunk, "/delete\">delete</a>)");
feb11 0:9e4bcb10b3e3 171 strcat(chunk, "</li>");
feb11 0:9e4bcb10b3e3 172 }
feb11 0:9e4bcb10b3e3 173 strcat(chunk, "</ul>");
feb11 0:9e4bcb10b3e3 174 }
feb11 0:9e4bcb10b3e3 175 strcat(chunk, " ");
feb11 0:9e4bcb10b3e3 176 }
feb11 0:9e4bcb10b3e3 177 else if(c == 2)
feb11 0:9e4bcb10b3e3 178 strcat(chunk, INTERACTIVE_HTML_CODE_2);
feb11 0:9e4bcb10b3e3 179 }
feb11 0:9e4bcb10b3e3 180
feb11 0:9e4bcb10b3e3 181