Modified to run on Renesas GR Peach board

Dependents:   GR-PeachAHRSWeb

Fork of HTTP-Server by Francois Berder

Committer:
webOnBoard
Date:
Wed Oct 07 20:35:31 2015 +0000
Revision:
11:d03f12a19999
Parent:
10:8b4c3d605bf0
Modified for GRPeach

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