An example HTTP Server library using new Ethernet Interface

Dependents:   HTMLServer_Sample

Committer:
mkilivan
Date:
Tue Dec 23 18:49:25 2014 +0000
Revision:
0:8e1971a883be
forked from http://developer.mbed.org/users/yueee_yt/code/giken9_HTMLServer_Sample/

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mkilivan 0:8e1971a883be 1 /*
mkilivan 0:8e1971a883be 2 Permission is hereby granted, free of charge, to any person obtaining a copy
mkilivan 0:8e1971a883be 3 of this software and associated documentation files (the "Software"), to deal
mkilivan 0:8e1971a883be 4 in the Software without restriction, including without limitation the rights
mkilivan 0:8e1971a883be 5 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
mkilivan 0:8e1971a883be 6 copies of the Software, and to permit persons to whom the Software is
mkilivan 0:8e1971a883be 7 furnished to do so, subject to the following conditions:
mkilivan 0:8e1971a883be 8
mkilivan 0:8e1971a883be 9 The above copyright notice and this permission notice shall be included in
mkilivan 0:8e1971a883be 10 all copies or substantial portions of the Software.
mkilivan 0:8e1971a883be 11
mkilivan 0:8e1971a883be 12 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
mkilivan 0:8e1971a883be 13 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
mkilivan 0:8e1971a883be 14 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
mkilivan 0:8e1971a883be 15 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
mkilivan 0:8e1971a883be 16 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
mkilivan 0:8e1971a883be 17 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
mkilivan 0:8e1971a883be 18 THE SOFTWARE.
mkilivan 0:8e1971a883be 19 */
mkilivan 0:8e1971a883be 20
mkilivan 0:8e1971a883be 21 //#define _DEBUG_RPC_HANDLER
mkilivan 0:8e1971a883be 22
mkilivan 0:8e1971a883be 23 #include "RPCHandler.h"
mkilivan 0:8e1971a883be 24 #include "mbed_rpc.h"
mkilivan 0:8e1971a883be 25
mkilivan 0:8e1971a883be 26 #define RPC_DATA_LEN 64
mkilivan 0:8e1971a883be 27
mkilivan 0:8e1971a883be 28 RPCHandler::RPCHandler(const char* rootPath, const char* path, TCPSocketConnection* pTCPSocketConnection) : HTTPRequestHandler(rootPath, path, pTCPSocketConnection)
mkilivan 0:8e1971a883be 29 {}
mkilivan 0:8e1971a883be 30
mkilivan 0:8e1971a883be 31 RPCHandler::~RPCHandler()
mkilivan 0:8e1971a883be 32 {
mkilivan 0:8e1971a883be 33 #ifdef _DEBUG_RPC_HANDLER
mkilivan 0:8e1971a883be 34 printf("++++(RPC Handler)Handler destroyed\r\n");
mkilivan 0:8e1971a883be 35 #endif
mkilivan 0:8e1971a883be 36 }
mkilivan 0:8e1971a883be 37
mkilivan 0:8e1971a883be 38 void RPCHandler::doGet()
mkilivan 0:8e1971a883be 39 {
mkilivan 0:8e1971a883be 40 #ifdef _DEBUG_RPC_HANDLER
mkilivan 0:8e1971a883be 41 printf("++++(RPC Handler)doGet\r\n");
mkilivan 0:8e1971a883be 42 #endif
mkilivan 0:8e1971a883be 43 char resp[RPC_DATA_LEN] = {0};
mkilivan 0:8e1971a883be 44 char req[RPC_DATA_LEN] = {0};
mkilivan 0:8e1971a883be 45
mkilivan 0:8e1971a883be 46 #ifdef _DEBUG_RPC_HANDLER
mkilivan 0:8e1971a883be 47 printf("++++(RPC Handler)Path : %s\r\n", path().c_str());
mkilivan 0:8e1971a883be 48 printf("++++(RPC Handler)Root Path : %s\r\n", rootPath().c_str());
mkilivan 0:8e1971a883be 49 #endif
mkilivan 0:8e1971a883be 50 //Remove path
mkilivan 0:8e1971a883be 51 strncpy(req, path().c_str(), RPC_DATA_LEN-1);
mkilivan 0:8e1971a883be 52 #ifdef _DEBUG_RPC_HANDLER
mkilivan 0:8e1971a883be 53 printf("++++(RPC Handler)RPC req(before) : %s\r\n", req);
mkilivan 0:8e1971a883be 54 #endif
mkilivan 0:8e1971a883be 55 //Remove "%20", "+", "," from req
mkilivan 0:8e1971a883be 56 cleanReq(req);
mkilivan 0:8e1971a883be 57 #ifdef _DEBUG_RPC_HANDLER
mkilivan 0:8e1971a883be 58 printf("++++(RPC Handler)RPC req(after) : %s\r\n", req);
mkilivan 0:8e1971a883be 59 #endif
mkilivan 0:8e1971a883be 60 //Do RPC Call
mkilivan 0:8e1971a883be 61 RPC::call(req, resp); //FIXME: Use bool result
mkilivan 0:8e1971a883be 62 #ifdef _DEBUG_RPC_HANDLER
mkilivan 0:8e1971a883be 63 printf("++++(RPC Handler)Response %s \r\n",resp);
mkilivan 0:8e1971a883be 64 #endif
mkilivan 0:8e1971a883be 65 //Response
mkilivan 0:8e1971a883be 66 setContentLen( strlen(resp) );
mkilivan 0:8e1971a883be 67
mkilivan 0:8e1971a883be 68 //Make sure that the browser won't cache this request
mkilivan 0:8e1971a883be 69 // respHeaders()["Cache-control"]="no-cache;no-store";
mkilivan 0:8e1971a883be 70 // respHeaders()["Pragma"]="no-cache";
mkilivan 0:8e1971a883be 71 // respHeaders()["Expires"]="0";
mkilivan 0:8e1971a883be 72 addRespHeaders("Cache-control","no-cache;no-store");
mkilivan 0:8e1971a883be 73 addRespHeaders("Pragma","no-cache");
mkilivan 0:8e1971a883be 74 addRespHeaders("Expires","0");
mkilivan 0:8e1971a883be 75
mkilivan 0:8e1971a883be 76 //Write data
mkilivan 0:8e1971a883be 77 // respHeaders()["Connection"] = "close";
mkilivan 0:8e1971a883be 78 addRespHeaders("Connection", "close");
mkilivan 0:8e1971a883be 79 writeData(resp, strlen(resp));
mkilivan 0:8e1971a883be 80 #ifdef _DEBUG_RPC_HANDLER
mkilivan 0:8e1971a883be 81 printf("++++(RPC Handler)Exit RPCHandler::doGet()\r\n");
mkilivan 0:8e1971a883be 82 #endif
mkilivan 0:8e1971a883be 83 }
mkilivan 0:8e1971a883be 84
mkilivan 0:8e1971a883be 85 void RPCHandler::doPost()
mkilivan 0:8e1971a883be 86 {
mkilivan 0:8e1971a883be 87
mkilivan 0:8e1971a883be 88 }
mkilivan 0:8e1971a883be 89
mkilivan 0:8e1971a883be 90 void RPCHandler::doHead()
mkilivan 0:8e1971a883be 91 {
mkilivan 0:8e1971a883be 92
mkilivan 0:8e1971a883be 93 }
mkilivan 0:8e1971a883be 94
mkilivan 0:8e1971a883be 95
mkilivan 0:8e1971a883be 96 void RPCHandler::onReadable() //Data has been read
mkilivan 0:8e1971a883be 97 {
mkilivan 0:8e1971a883be 98
mkilivan 0:8e1971a883be 99 }
mkilivan 0:8e1971a883be 100
mkilivan 0:8e1971a883be 101 void RPCHandler::onWriteable() //Data has been written & buf is free
mkilivan 0:8e1971a883be 102 {
mkilivan 0:8e1971a883be 103 #ifdef _DEBUG_RPC_HANDLER
mkilivan 0:8e1971a883be 104 printf("++++(RPC Handler)onWriteable event\r\n");
mkilivan 0:8e1971a883be 105 #endif
mkilivan 0:8e1971a883be 106 // close(); //Data written, we can close the connection
mkilivan 0:8e1971a883be 107 }
mkilivan 0:8e1971a883be 108
mkilivan 0:8e1971a883be 109 void RPCHandler::onClose() //Connection is closing
mkilivan 0:8e1971a883be 110 {
mkilivan 0:8e1971a883be 111 //Nothing to do
mkilivan 0:8e1971a883be 112 }
mkilivan 0:8e1971a883be 113
mkilivan 0:8e1971a883be 114 void RPCHandler::cleanReq(char* data)
mkilivan 0:8e1971a883be 115 {
mkilivan 0:8e1971a883be 116 char* p;
mkilivan 0:8e1971a883be 117 if((p = strstr(data, "+"))!=NULL)memset((void*) p, ' ', 1);
mkilivan 0:8e1971a883be 118 else if((p = strstr(data, ","))!=NULL)memset((void*) p, ' ', 1);
mkilivan 0:8e1971a883be 119 else if((p = strstr(data, "%20"))!=NULL) {
mkilivan 0:8e1971a883be 120 memset((void*) p, ' ', 1);
mkilivan 0:8e1971a883be 121 while(*(p+2)!=NULL) {
mkilivan 0:8e1971a883be 122 p++;
mkilivan 0:8e1971a883be 123 memset((void*) p,*(p+2),1);
mkilivan 0:8e1971a883be 124 }
mkilivan 0:8e1971a883be 125 }
mkilivan 0:8e1971a883be 126
mkilivan 0:8e1971a883be 127 if((p = strstr(data, "+"))!=NULL)memset((void*) p, ' ', 1);
mkilivan 0:8e1971a883be 128 else if((p = strstr(data, ","))!=NULL)memset((void*) p, ' ', 1);
mkilivan 0:8e1971a883be 129 else if((p = strstr(data, "%20"))!=NULL) {
mkilivan 0:8e1971a883be 130 memset((void*) p, ' ', 1);
mkilivan 0:8e1971a883be 131 while(*(p+2)!=NULL) {
mkilivan 0:8e1971a883be 132 p++;
mkilivan 0:8e1971a883be 133 memset((void*) p,*(p+2),1);
mkilivan 0:8e1971a883be 134 }
mkilivan 0:8e1971a883be 135 }
mkilivan 0:8e1971a883be 136 }
mkilivan 0:8e1971a883be 137
mkilivan 0:8e1971a883be 138
mkilivan 0:8e1971a883be 139
mkilivan 0:8e1971a883be 140