Upper Version Add PUT method Delete POST method

Dependencies:   Adafruit_GFX MbedJSONValue_v102 WIZnetInterface mbed

Fork of WIZwiki-REST-io_v102 by Lawrence Lee

Committer:
joon874
Date:
Mon Sep 05 06:29:55 2016 +0000
Revision:
8:60d99da6eeb2
Parent:
6:2974bbc94e7a
Add PUT method

Who changed what in which revision?

UserRevisionLine numberNew contents of line
joon874 0:5886f525a4ad 1 #include <stdio.h>
joon874 0:5886f525a4ad 2 #include <stdlib.h>
joon874 0:5886f525a4ad 3 #include <string.h>
joon874 0:5886f525a4ad 4 #include "RequestHandler.h"
joon874 0:5886f525a4ad 5 #include "MbedJSONValue.h"
joon874 0:5886f525a4ad 6
joon874 0:5886f525a4ad 7 extern MbedJSONValue WIZwikiREST;
joon874 0:5886f525a4ad 8
joon874 4:0b5a199e91f3 9 MbedJSONValue* pDataJson = 0;
joon874 4:0b5a199e91f3 10
joon874 4:0b5a199e91f3 11 void GetRequestHandler::handle(char* rest_uri, char* request_data, char *reply)
joon874 0:5886f525a4ad 12 {
joon874 0:5886f525a4ad 13 MbedJSONValue* tmpJson;
joon874 0:5886f525a4ad 14
joon874 0:5886f525a4ad 15 char* tok;
joon874 0:5886f525a4ad 16 char* last;
joon874 2:ca36ecca24c2 17 const char * pchar = 0;
joon874 2:ca36ecca24c2 18 #ifdef DEBUG_HTTPREQ
joon874 0:5886f525a4ad 19 printf("GetRequestHandler():%s\r\n",rest_uri);
joon874 2:ca36ecca24c2 20 #endif
joon874 4:0b5a199e91f3 21 if(!strcmp(rest_uri, "/")){
joon874 2:ca36ecca24c2 22 tmpJson = &WIZwikiREST;
joon874 0:5886f525a4ad 23 }
joon874 4:0b5a199e91f3 24 else{
joon874 4:0b5a199e91f3 25 tok = strtok_r(rest_uri+1, "/", &last);
joon874 0:5886f525a4ad 26 tmpJson = &WIZwikiREST;
joon874 2:ca36ecca24c2 27
joon874 2:ca36ecca24c2 28 char* name = 0;
joon874 2:ca36ecca24c2 29 while(tok)
joon874 2:ca36ecca24c2 30 {
joon874 2:ca36ecca24c2 31 #ifdef DEBUG_HTTPREQ
joon874 4:0b5a199e91f3 32 printf("tok = %s \r\n", tok);
joon874 2:ca36ecca24c2 33 #endif
joon874 4:0b5a199e91f3 34 if(tmpJson->hasMember(tok)){
joon874 2:ca36ecca24c2 35 tmpJson = &((*tmpJson)[tok]);
joon874 6:2974bbc94e7a 36 //if(!tmpJson->accessible) tmpJson->cb_action(tmpJson);
joon874 2:ca36ecca24c2 37 name = tok;
joon874 2:ca36ecca24c2 38 tok = strtok_r(0, "/", &last);
joon874 2:ca36ecca24c2 39 }
joon874 4:0b5a199e91f3 40 else{
joon874 6:2974bbc94e7a 41 #ifndef DEBUG_HTTPREQ
joon874 2:ca36ecca24c2 42 printf("No Member\r\n");
joon874 2:ca36ecca24c2 43 #endif
joon874 2:ca36ecca24c2 44 break;
joon874 2:ca36ecca24c2 45 }
joon874 2:ca36ecca24c2 46 }
joon874 4:0b5a199e91f3 47 if(name){
joon874 6:2974bbc94e7a 48 if(tok)
joon874 6:2974bbc94e7a 49 {
joon874 4:0b5a199e91f3 50 if(tmpJson->accessible){
joon874 2:ca36ecca24c2 51 #ifdef DEBUG_HTTPREQ
joon874 2:ca36ecca24c2 52 printf("accessible : tmpJson->size()=%d\r\n",tmpJson->size());
joon874 2:ca36ecca24c2 53 #endif
joon874 2:ca36ecca24c2 54
joon874 4:0b5a199e91f3 55 if(tmpJson->size() > 0){
joon874 2:ca36ecca24c2 56 *tmpJson = std::string(tok);
joon874 2:ca36ecca24c2 57 tmpJson->cb_action((void*)tok);
joon874 2:ca36ecca24c2 58 #ifdef DEBUG_HTTPREQ
joon874 2:ca36ecca24c2 59 printf("set string:%s\r\n",tok);
joon874 2:ca36ecca24c2 60 #endif
joon874 2:ca36ecca24c2 61 }
joon874 4:0b5a199e91f3 62 else{
joon874 2:ca36ecca24c2 63 *tmpJson = atoi(tok);
joon874 2:ca36ecca24c2 64 tmpJson->cb_action(&tmpJson->_value);
joon874 2:ca36ecca24c2 65 #ifdef DEBUG_HTTPREQ
joon874 2:ca36ecca24c2 66 printf("set int:%d\r\n",atoi(tok));
joon874 2:ca36ecca24c2 67 #endif
joon874 2:ca36ecca24c2 68 }
joon874 2:ca36ecca24c2 69 }
joon874 4:0b5a199e91f3 70 else{
joon874 2:ca36ecca24c2 71 strcpy (reply, "HTTP/1.1 403 OK\r\n");
joon874 2:ca36ecca24c2 72 strcat (reply, "Sever: WIZwiki-REST\r\n");
joon874 2:ca36ecca24c2 73 strcat (reply, "content-Type: text/json\r\n");
joon874 2:ca36ecca24c2 74 sprintf(reply + strlen(reply), "Content-Length: %d\r\n\r\n", 26+4);
joon874 2:ca36ecca24c2 75 strcat(reply, "{\"Result : No Accessible\"}");
joon874 2:ca36ecca24c2 76 strcat (reply, "\r\n\r\n");
joon874 2:ca36ecca24c2 77 return;
joon874 2:ca36ecca24c2 78 }
joon874 2:ca36ecca24c2 79 }
MidnightCow 1:728e5b5c8dae 80 }
joon874 4:0b5a199e91f3 81 else{
joon874 2:ca36ecca24c2 82 strcpy (reply, "HTTP/1.1 404 OK\r\n");
joon874 2:ca36ecca24c2 83 strcat (reply, "Sever: WIZwiki-REST\r\n");
joon874 2:ca36ecca24c2 84 strcat (reply, "content-Type: text/json\r\n");
joon874 2:ca36ecca24c2 85 sprintf(reply + strlen(reply), "Content-Length: %d\r\n\r\n", 33+4);
joon874 2:ca36ecca24c2 86 strcat(reply, "{\"Result\" : \"No defined Resource\"}");
joon874 2:ca36ecca24c2 87 strcat (reply, "\r\n\r\n");
joon874 2:ca36ecca24c2 88 return;
joon874 0:5886f525a4ad 89 }
MidnightCow 1:728e5b5c8dae 90 }
joon874 2:ca36ecca24c2 91 pchar = (*tmpJson).serialize().c_str();
joon874 2:ca36ecca24c2 92 strcpy (reply, "HTTP/1.1 200 OK\r\n");
joon874 2:ca36ecca24c2 93 strcat (reply, "Sever: WIZwiki-REST\r\n");
joon874 2:ca36ecca24c2 94 strcat (reply, "content-Type: text/json\r\n");
joon874 2:ca36ecca24c2 95 sprintf(reply + strlen(reply), "Content-Length: %d\r\n\r\n", strlen(pchar)+4);
joon874 2:ca36ecca24c2 96 strcat (reply, pchar);
joon874 2:ca36ecca24c2 97 strcat (reply, "\r\n\r\n");
joon874 2:ca36ecca24c2 98
MidnightCow 1:728e5b5c8dae 99 return;
joon874 0:5886f525a4ad 100 }
joon874 0:5886f525a4ad 101
joon874 8:60d99da6eeb2 102 #ifdef HTTP_POST
joon874 4:0b5a199e91f3 103 void PostRequestHandler::handle(char* rest_uri, char* request_data, char *reply)
joon874 4:0b5a199e91f3 104 {
joon874 4:0b5a199e91f3 105 MbedJSONValue* tmpJson;
joon874 4:0b5a199e91f3 106 char* tok;
joon874 4:0b5a199e91f3 107 char* last;
joon874 4:0b5a199e91f3 108 int errnum = 200;
joon874 4:0b5a199e91f3 109
joon874 4:0b5a199e91f3 110 #ifdef DEBUG_HTTPREQ
joon874 4:0b5a199e91f3 111 printf("PostRequestHandler():%s\r\n",request_data+4);
joon874 4:0b5a199e91f3 112 #endif
joon874 4:0b5a199e91f3 113 if(!pDataJson){
joon874 4:0b5a199e91f3 114 pDataJson = new MbedJSONValue();
joon874 4:0b5a199e91f3 115 }
joon874 4:0b5a199e91f3 116 #ifdef DEBUG_HTTPREQ
joon874 4:0b5a199e91f3 117 printf("Before Parse\r\n");
joon874 4:0b5a199e91f3 118 debug_info();
joon874 4:0b5a199e91f3 119 #endif
joon874 4:0b5a199e91f3 120 parse(*pDataJson,(const char*)request_data);
joon874 4:0b5a199e91f3 121 #ifdef DEBUG_HTTPREQ
joon874 4:0b5a199e91f3 122 printf("After Parse\r\n");
joon874 4:0b5a199e91f3 123 debug_info();
joon874 4:0b5a199e91f3 124 printf("DataJson._type=%d\r\n",pDataJson->_type);
joon874 4:0b5a199e91f3 125 printf("DataJson=%s\r\n",pDataJson->serialize().c_str());
joon874 4:0b5a199e91f3 126 printf("DataJson.size()=%d\r\n",pDataJson->size());
joon874 4:0b5a199e91f3 127 printf("DataJason.type=%d\r\n",pDataJson->_type);
joon874 4:0b5a199e91f3 128 #endif
joon874 4:0b5a199e91f3 129
joon874 4:0b5a199e91f3 130 if(!strcmp(rest_uri, "/")){
joon874 4:0b5a199e91f3 131 tmpJson = &WIZwikiREST;
joon874 4:0b5a199e91f3 132 }
joon874 4:0b5a199e91f3 133 else{
joon874 4:0b5a199e91f3 134 tok = strtok_r(rest_uri+1, "/", &last);
joon874 4:0b5a199e91f3 135 tmpJson = &WIZwikiREST;
joon874 4:0b5a199e91f3 136
joon874 4:0b5a199e91f3 137 char* name = 0;
joon874 4:0b5a199e91f3 138 while(tok)
joon874 4:0b5a199e91f3 139 {
joon874 4:0b5a199e91f3 140 #ifdef DEBUG_HTTPREQ
joon874 4:0b5a199e91f3 141 printf("tok = %s \r\n", tok);
joon874 4:0b5a199e91f3 142 #endif
joon874 4:0b5a199e91f3 143 if(tmpJson->hasMember(tok)){
joon874 4:0b5a199e91f3 144 tmpJson = &((*tmpJson)[tok]);
joon874 4:0b5a199e91f3 145 name = tok;
joon874 4:0b5a199e91f3 146 tok = strtok_r(0, "/", &last);
joon874 4:0b5a199e91f3 147 }
joon874 4:0b5a199e91f3 148 else{
joon874 4:0b5a199e91f3 149 #ifdef DEBUG_HTTPREQ
joon874 4:0b5a199e91f3 150 printf("No Member\r\n");
joon874 4:0b5a199e91f3 151 #endif
joon874 4:0b5a199e91f3 152 break;
joon874 4:0b5a199e91f3 153 }
joon874 4:0b5a199e91f3 154 }
joon874 4:0b5a199e91f3 155 if(name){
joon874 4:0b5a199e91f3 156 #ifdef DEBUG_HTTPREQ
joon874 4:0b5a199e91f3 157 printf("Token_name=%s\r\n",name);
joon874 4:0b5a199e91f3 158 #endif
joon874 4:0b5a199e91f3 159 if(tok){
joon874 4:0b5a199e91f3 160 #ifdef DEBUG_HTTPREQ
joon874 4:0b5a199e91f3 161 printf("It should be no parameters : tok=%s\r\n",tok);
joon874 4:0b5a199e91f3 162 #endif
joon874 4:0b5a199e91f3 163 errnum = 403;
joon874 4:0b5a199e91f3 164 }
joon874 4:0b5a199e91f3 165 }
joon874 4:0b5a199e91f3 166 else{
joon874 4:0b5a199e91f3 167 errnum = 404;
joon874 4:0b5a199e91f3 168 }
joon874 4:0b5a199e91f3 169 }
joon874 4:0b5a199e91f3 170 if(errnum != 0){
joon874 4:0b5a199e91f3 171 switch(pDataJson->_type)
joon874 4:0b5a199e91f3 172 {
joon874 4:0b5a199e91f3 173 case MbedJSONValue::TypeInt:
joon874 4:0b5a199e91f3 174 if(tmpJson->accessible){
joon874 4:0b5a199e91f3 175 *tmpJson = pDataJson->_value.asInt;
joon874 4:0b5a199e91f3 176 tmpJson->cb_action(&tmpJson->_value);
joon874 4:0b5a199e91f3 177 #ifdef DEBUG_HTTPREQ
joon874 4:0b5a199e91f3 178 printf("set int:%d\r\n",atoi(tok));
joon874 4:0b5a199e91f3 179 #endif
joon874 4:0b5a199e91f3 180 }
joon874 4:0b5a199e91f3 181 else{
joon874 4:0b5a199e91f3 182 errnum = 403;
joon874 4:0b5a199e91f3 183 }
joon874 4:0b5a199e91f3 184 break;
joon874 4:0b5a199e91f3 185
joon874 4:0b5a199e91f3 186 case MbedJSONValue::TypeString:
joon874 4:0b5a199e91f3 187 if(tmpJson->accessible){
joon874 4:0b5a199e91f3 188 *tmpJson = pDataJson->_value.asString;
joon874 5:473a66ae9596 189 tmpJson->cb_action((void*)tmpJson->_value.asString->c_str());
joon874 4:0b5a199e91f3 190 }
joon874 4:0b5a199e91f3 191 else{
joon874 4:0b5a199e91f3 192 errnum = 403;
joon874 4:0b5a199e91f3 193 }
joon874 4:0b5a199e91f3 194 break;
joon874 4:0b5a199e91f3 195
joon874 4:0b5a199e91f3 196 case MbedJSONValue::TypeObject:
joon874 4:0b5a199e91f3 197 for(int i = 0; i < pDataJson->index_token; i++)
joon874 4:0b5a199e91f3 198 {
joon874 4:0b5a199e91f3 199 tok = (char*)pDataJson->token_name[i]->c_str();
joon874 4:0b5a199e91f3 200 #ifdef DEBUG_HTTPREQ
joon874 4:0b5a199e91f3 201 printf("pDataJson.token_name[%d]->c_str()=%s\r\n",i,tok);
joon874 4:0b5a199e91f3 202 #endif
joon874 4:0b5a199e91f3 203 if(tmpJson->hasMember(tok)){
joon874 4:0b5a199e91f3 204 if((*tmpJson)[tok].accessible){
joon874 4:0b5a199e91f3 205 errnum = 200;
joon874 4:0b5a199e91f3 206 if((*pDataJson)[i].size() > 0){
joon874 8:60d99da6eeb2 207 /*
joon874 8:60d99da6eeb2 208 (*tmpJson)[tok] = (*pDataJson)[i]._value.asString;
joon874 8:60d99da6eeb2 209 (*tmpJson)[tok].cb_action((void*)&((*pDataJson)[i]._value.asInt));
joon874 8:60d99da6eeb2 210 */
joon874 8:60d99da6eeb2 211 (*tmpJson)[tok] = (*pDataJson)[i]._value.asString->c_str();
joon874 8:60d99da6eeb2 212 (*tmpJson)[tok].cb_action((void*)((*pDataJson)[i]._value.asString->c_str()));
joon874 8:60d99da6eeb2 213 #ifdef DEBUG_HTTPREQ
joon874 8:60d99da6eeb2 214 printf("String Updated: %s : %s\r\n", tok,(*tmpJson)[tok].get<std::string>().c_str());
joon874 8:60d99da6eeb2 215 #endif
joon874 8:60d99da6eeb2 216 }
joon874 8:60d99da6eeb2 217 else{
joon874 8:60d99da6eeb2 218 (*tmpJson)[tok] = (*pDataJson)[i]._value.asInt;
joon874 8:60d99da6eeb2 219 (*tmpJson)[tok].cb_action((void*)&((*pDataJson)[i]._value.asInt));
joon874 8:60d99da6eeb2 220 #ifdef DEBUG_HTTPREQ
joon874 8:60d99da6eeb2 221 printf("Int Updated: %s : %d\r\n", tok,(*tmpJson)[tok].get<int>());
joon874 8:60d99da6eeb2 222 #endif
joon874 8:60d99da6eeb2 223 }
joon874 8:60d99da6eeb2 224 }
joon874 8:60d99da6eeb2 225 else{
joon874 8:60d99da6eeb2 226 errnum = 403; break;
joon874 8:60d99da6eeb2 227 }
joon874 8:60d99da6eeb2 228 }
joon874 8:60d99da6eeb2 229 else{
joon874 8:60d99da6eeb2 230 errnum = 404; break;
joon874 8:60d99da6eeb2 231 }
joon874 8:60d99da6eeb2 232 }
joon874 8:60d99da6eeb2 233 break;
joon874 8:60d99da6eeb2 234
joon874 8:60d99da6eeb2 235 default:
joon874 8:60d99da6eeb2 236 errnum = 403; break;
joon874 8:60d99da6eeb2 237 }
joon874 8:60d99da6eeb2 238 }
joon874 8:60d99da6eeb2 239
joon874 8:60d99da6eeb2 240 switch(errnum)
joon874 8:60d99da6eeb2 241 {
joon874 8:60d99da6eeb2 242 case 403:
joon874 8:60d99da6eeb2 243 strcpy (reply, "HTTP/1.1 403 OK\r\n");
joon874 8:60d99da6eeb2 244 strcat (reply, "Sever: WIZwiki-REST\r\n");
joon874 8:60d99da6eeb2 245 strcat (reply, "content-Type: text/json\r\n");
joon874 8:60d99da6eeb2 246 sprintf(reply + strlen(reply), "Content-Length: %d\r\n\r\n", 26+4);
joon874 8:60d99da6eeb2 247 strcat(reply, "{\"Result : No Accessible\"}");
joon874 8:60d99da6eeb2 248 strcat (reply, "\r\n\r\n");
joon874 8:60d99da6eeb2 249 break;
joon874 8:60d99da6eeb2 250
joon874 8:60d99da6eeb2 251 case 404:
joon874 8:60d99da6eeb2 252 strcpy (reply, "HTTP/1.1 404 OK\r\n");
joon874 8:60d99da6eeb2 253 strcat (reply, "Sever: WIZwiki-REST\r\n");
joon874 8:60d99da6eeb2 254 strcat (reply, "content-Type: text/json\r\n");
joon874 8:60d99da6eeb2 255 sprintf(reply + strlen(reply), "Content-Length: %d\r\n\r\n", 33+4);
joon874 8:60d99da6eeb2 256 strcat(reply, "{\"Result\" : \"No defined Resource\"}");
joon874 8:60d99da6eeb2 257 strcat (reply, "\r\n\r\n");
joon874 8:60d99da6eeb2 258 break;
joon874 8:60d99da6eeb2 259
joon874 8:60d99da6eeb2 260 case 200:
joon874 8:60d99da6eeb2 261 strcpy (reply, "HTTP/1.1 200 OK\r\n");
joon874 8:60d99da6eeb2 262 strcat (reply, "Sever: WIZwiki-REST\r\n");
joon874 8:60d99da6eeb2 263 strcat (reply, "content-Type: text/json\r\n");
joon874 8:60d99da6eeb2 264 sprintf(reply + strlen(reply), "Content-Length: %d\r\n\r\n", 15+4);
joon874 8:60d99da6eeb2 265 strcat (reply, "{\"Result\":\"OK\"}");
joon874 8:60d99da6eeb2 266 strcat (reply, "\r\n\r\n");
joon874 8:60d99da6eeb2 267 break;
joon874 8:60d99da6eeb2 268 }
joon874 8:60d99da6eeb2 269
joon874 8:60d99da6eeb2 270 #ifdef DEBUG_HTTPREQ
joon874 8:60d99da6eeb2 271 printf("Before Delete\r\n");
joon874 8:60d99da6eeb2 272 debug_info();
joon874 8:60d99da6eeb2 273 #endif
joon874 8:60d99da6eeb2 274 if(pDataJson){
joon874 8:60d99da6eeb2 275 #ifdef DEBUG_HTTPREQ
joon874 8:60d99da6eeb2 276 printf("type;%d, pDataJson->index_token=%d\r\n",pDataJson->_type,pDataJson->index_token);
joon874 8:60d99da6eeb2 277 #endif
joon874 8:60d99da6eeb2 278 delete pDataJson;
joon874 8:60d99da6eeb2 279 pDataJson = 0;
joon874 8:60d99da6eeb2 280 }
joon874 8:60d99da6eeb2 281 #ifdef DEBUG_HTTPREQ
joon874 8:60d99da6eeb2 282 printf("After Delete\r\n");
joon874 8:60d99da6eeb2 283 debug_info();
joon874 8:60d99da6eeb2 284 #endif
joon874 8:60d99da6eeb2 285 }
joon874 8:60d99da6eeb2 286 #endif
joon874 8:60d99da6eeb2 287
joon874 8:60d99da6eeb2 288 void PutRequestHandler::handle(char* rest_uri, char* request_data, char *reply)
joon874 8:60d99da6eeb2 289 {
joon874 8:60d99da6eeb2 290 MbedJSONValue* tmpJson;
joon874 8:60d99da6eeb2 291 char* tok;
joon874 8:60d99da6eeb2 292 char* last;
joon874 8:60d99da6eeb2 293 int errnum = 200;
joon874 8:60d99da6eeb2 294
joon874 8:60d99da6eeb2 295 #ifdef DEBUG_HTTPREQ
joon874 8:60d99da6eeb2 296 printf("PutRequestHandler():%s\r\n",request_data+4);
joon874 8:60d99da6eeb2 297 #endif
joon874 8:60d99da6eeb2 298 if(!pDataJson){
joon874 8:60d99da6eeb2 299 pDataJson = new MbedJSONValue();
joon874 8:60d99da6eeb2 300 }
joon874 8:60d99da6eeb2 301 #ifdef DEBUG_HTTPREQ
joon874 8:60d99da6eeb2 302 printf("Before Parse\r\n");
joon874 8:60d99da6eeb2 303 debug_info();
joon874 8:60d99da6eeb2 304 #endif
joon874 8:60d99da6eeb2 305 parse(*pDataJson,(const char*)request_data);
joon874 8:60d99da6eeb2 306 #ifdef DEBUG_HTTPREQ
joon874 8:60d99da6eeb2 307 printf("After Parse\r\n");
joon874 8:60d99da6eeb2 308 debug_info();
joon874 8:60d99da6eeb2 309 printf("DataJson._type=%d\r\n",pDataJson->_type);
joon874 8:60d99da6eeb2 310 printf("DataJson=%s\r\n",pDataJson->serialize().c_str());
joon874 8:60d99da6eeb2 311 printf("DataJson.size()=%d\r\n",pDataJson->size());
joon874 8:60d99da6eeb2 312 printf("DataJason.type=%d\r\n",pDataJson->_type);
joon874 8:60d99da6eeb2 313 #endif
joon874 8:60d99da6eeb2 314
joon874 8:60d99da6eeb2 315 if(!strcmp(rest_uri, "/")){
joon874 8:60d99da6eeb2 316 tmpJson = &WIZwikiREST;
joon874 8:60d99da6eeb2 317 }
joon874 8:60d99da6eeb2 318 else{
joon874 8:60d99da6eeb2 319 tok = strtok_r(rest_uri+1, "/", &last);
joon874 8:60d99da6eeb2 320 tmpJson = &WIZwikiREST;
joon874 8:60d99da6eeb2 321
joon874 8:60d99da6eeb2 322 char* name = 0;
joon874 8:60d99da6eeb2 323 while(tok)
joon874 8:60d99da6eeb2 324 {
joon874 8:60d99da6eeb2 325 #ifdef DEBUG_HTTPREQ
joon874 8:60d99da6eeb2 326 printf("tok = %s \r\n", tok);
joon874 8:60d99da6eeb2 327 #endif
joon874 8:60d99da6eeb2 328 if(tmpJson->hasMember(tok)){
joon874 8:60d99da6eeb2 329 tmpJson = &((*tmpJson)[tok]);
joon874 8:60d99da6eeb2 330 name = tok;
joon874 8:60d99da6eeb2 331 tok = strtok_r(0, "/", &last);
joon874 8:60d99da6eeb2 332 }
joon874 8:60d99da6eeb2 333 else{
joon874 8:60d99da6eeb2 334 #ifdef DEBUG_HTTPREQ
joon874 8:60d99da6eeb2 335 printf("No Member\r\n");
joon874 8:60d99da6eeb2 336 #endif
joon874 8:60d99da6eeb2 337 break;
joon874 8:60d99da6eeb2 338 }
joon874 8:60d99da6eeb2 339 }
joon874 8:60d99da6eeb2 340 if(name){
joon874 8:60d99da6eeb2 341 #ifdef DEBUG_HTTPREQ
joon874 8:60d99da6eeb2 342 printf("Token_name=%s\r\n",name);
joon874 8:60d99da6eeb2 343 #endif
joon874 8:60d99da6eeb2 344 if(tok){
joon874 8:60d99da6eeb2 345 #ifdef DEBUG_HTTPREQ
joon874 8:60d99da6eeb2 346 printf("It should be no parameters : tok=%s\r\n",tok);
joon874 8:60d99da6eeb2 347 #endif
joon874 8:60d99da6eeb2 348 errnum = 403;
joon874 8:60d99da6eeb2 349 }
joon874 8:60d99da6eeb2 350 }
joon874 8:60d99da6eeb2 351 else{
joon874 8:60d99da6eeb2 352 errnum = 404;
joon874 8:60d99da6eeb2 353 }
joon874 8:60d99da6eeb2 354 }
joon874 8:60d99da6eeb2 355 if(errnum != 0){
joon874 8:60d99da6eeb2 356 switch(pDataJson->_type)
joon874 8:60d99da6eeb2 357 {
joon874 8:60d99da6eeb2 358 case MbedJSONValue::TypeInt:
joon874 8:60d99da6eeb2 359 if(tmpJson->accessible){
joon874 8:60d99da6eeb2 360 *tmpJson = pDataJson->_value.asInt;
joon874 8:60d99da6eeb2 361 tmpJson->cb_action(&tmpJson->_value);
joon874 8:60d99da6eeb2 362 #ifdef DEBUG_HTTPREQ
joon874 8:60d99da6eeb2 363 printf("set int:%d\r\n",atoi(tok));
joon874 8:60d99da6eeb2 364 #endif
joon874 8:60d99da6eeb2 365 }
joon874 8:60d99da6eeb2 366 else{
joon874 8:60d99da6eeb2 367 errnum = 403;
joon874 8:60d99da6eeb2 368 }
joon874 8:60d99da6eeb2 369 break;
joon874 8:60d99da6eeb2 370
joon874 8:60d99da6eeb2 371 case MbedJSONValue::TypeString:
joon874 8:60d99da6eeb2 372 if(tmpJson->accessible){
joon874 8:60d99da6eeb2 373 *tmpJson = pDataJson->_value.asString;
joon874 8:60d99da6eeb2 374 tmpJson->cb_action((void*)tmpJson->_value.asString->c_str());
joon874 8:60d99da6eeb2 375 }
joon874 8:60d99da6eeb2 376 else{
joon874 8:60d99da6eeb2 377 errnum = 403;
joon874 8:60d99da6eeb2 378 }
joon874 8:60d99da6eeb2 379 break;
joon874 8:60d99da6eeb2 380
joon874 8:60d99da6eeb2 381 case MbedJSONValue::TypeObject:
joon874 8:60d99da6eeb2 382 for(int i = 0; i < pDataJson->index_token; i++)
joon874 8:60d99da6eeb2 383 {
joon874 8:60d99da6eeb2 384 tok = (char*)pDataJson->token_name[i]->c_str();
joon874 8:60d99da6eeb2 385 #ifdef DEBUG_HTTPREQ
joon874 8:60d99da6eeb2 386 printf("pDataJson.token_name[%d]->c_str()=%s\r\n",i,tok);
joon874 8:60d99da6eeb2 387 #endif
joon874 8:60d99da6eeb2 388 if(tmpJson->hasMember(tok)){
joon874 8:60d99da6eeb2 389 if((*tmpJson)[tok].accessible){
joon874 8:60d99da6eeb2 390 errnum = 200;
joon874 8:60d99da6eeb2 391 if((*pDataJson)[i].size() > 0){
joon874 5:473a66ae9596 392 //(*tmpJson)[tok] = (*pDataJson)[i]._value.asString;
joon874 5:473a66ae9596 393 (*tmpJson)[tok] = (*pDataJson)[i]._value.asString->c_str();
joon874 5:473a66ae9596 394
joon874 5:473a66ae9596 395 //(*tmpJson)[tok].cb_action((void*)&((*pDataJson)[i]._value.asInt));
joon874 5:473a66ae9596 396 (*tmpJson)[tok].cb_action((void*)((*pDataJson)[i]._value.asString->c_str()));
joon874 4:0b5a199e91f3 397 #ifdef DEBUG_HTTPREQ
joon874 4:0b5a199e91f3 398 printf("String Updated: %s : %s\r\n", tok,(*tmpJson)[tok].get<std::string>().c_str());
joon874 4:0b5a199e91f3 399 #endif
joon874 4:0b5a199e91f3 400 }
joon874 4:0b5a199e91f3 401 else{
joon874 4:0b5a199e91f3 402 (*tmpJson)[tok] = (*pDataJson)[i]._value.asInt;
joon874 4:0b5a199e91f3 403 (*tmpJson)[tok].cb_action((void*)&((*pDataJson)[i]._value.asInt));
joon874 4:0b5a199e91f3 404 #ifdef DEBUG_HTTPREQ
joon874 4:0b5a199e91f3 405 printf("Int Updated: %s : %d\r\n", tok,(*tmpJson)[tok].get<int>());
joon874 4:0b5a199e91f3 406 #endif
joon874 4:0b5a199e91f3 407 }
joon874 4:0b5a199e91f3 408 }
joon874 4:0b5a199e91f3 409 else{
joon874 4:0b5a199e91f3 410 errnum = 403; break;
joon874 4:0b5a199e91f3 411 }
joon874 4:0b5a199e91f3 412 }
joon874 4:0b5a199e91f3 413 else{
joon874 4:0b5a199e91f3 414 errnum = 404; break;
joon874 4:0b5a199e91f3 415 }
joon874 4:0b5a199e91f3 416 }
joon874 4:0b5a199e91f3 417 break;
joon874 4:0b5a199e91f3 418
joon874 4:0b5a199e91f3 419 default:
joon874 4:0b5a199e91f3 420 errnum = 403; break;
joon874 4:0b5a199e91f3 421 }
joon874 4:0b5a199e91f3 422 }
joon874 4:0b5a199e91f3 423
joon874 4:0b5a199e91f3 424 switch(errnum)
joon874 4:0b5a199e91f3 425 {
joon874 4:0b5a199e91f3 426 case 403:
joon874 4:0b5a199e91f3 427 strcpy (reply, "HTTP/1.1 403 OK\r\n");
joon874 4:0b5a199e91f3 428 strcat (reply, "Sever: WIZwiki-REST\r\n");
joon874 4:0b5a199e91f3 429 strcat (reply, "content-Type: text/json\r\n");
joon874 4:0b5a199e91f3 430 sprintf(reply + strlen(reply), "Content-Length: %d\r\n\r\n", 26+4);
joon874 4:0b5a199e91f3 431 strcat(reply, "{\"Result : No Accessible\"}");
joon874 4:0b5a199e91f3 432 strcat (reply, "\r\n\r\n");
joon874 4:0b5a199e91f3 433 break;
joon874 4:0b5a199e91f3 434
joon874 4:0b5a199e91f3 435 case 404:
joon874 4:0b5a199e91f3 436 strcpy (reply, "HTTP/1.1 404 OK\r\n");
joon874 4:0b5a199e91f3 437 strcat (reply, "Sever: WIZwiki-REST\r\n");
joon874 4:0b5a199e91f3 438 strcat (reply, "content-Type: text/json\r\n");
joon874 4:0b5a199e91f3 439 sprintf(reply + strlen(reply), "Content-Length: %d\r\n\r\n", 33+4);
joon874 4:0b5a199e91f3 440 strcat(reply, "{\"Result\" : \"No defined Resource\"}");
joon874 4:0b5a199e91f3 441 strcat (reply, "\r\n\r\n");
joon874 4:0b5a199e91f3 442 break;
joon874 4:0b5a199e91f3 443
joon874 4:0b5a199e91f3 444 case 200:
joon874 4:0b5a199e91f3 445 strcpy (reply, "HTTP/1.1 200 OK\r\n");
joon874 4:0b5a199e91f3 446 strcat (reply, "Sever: WIZwiki-REST\r\n");
joon874 4:0b5a199e91f3 447 strcat (reply, "content-Type: text/json\r\n");
joon874 4:0b5a199e91f3 448 sprintf(reply + strlen(reply), "Content-Length: %d\r\n\r\n", 15+4);
joon874 4:0b5a199e91f3 449 strcat (reply, "{\"Result\":\"OK\"}");
joon874 4:0b5a199e91f3 450 strcat (reply, "\r\n\r\n");
joon874 4:0b5a199e91f3 451 break;
joon874 4:0b5a199e91f3 452 }
joon874 4:0b5a199e91f3 453
joon874 4:0b5a199e91f3 454 #ifdef DEBUG_HTTPREQ
joon874 4:0b5a199e91f3 455 printf("Before Delete\r\n");
joon874 4:0b5a199e91f3 456 debug_info();
joon874 4:0b5a199e91f3 457 #endif
joon874 4:0b5a199e91f3 458 if(pDataJson){
joon874 4:0b5a199e91f3 459 #ifdef DEBUG_HTTPREQ
joon874 4:0b5a199e91f3 460 printf("type;%d, pDataJson->index_token=%d\r\n",pDataJson->_type,pDataJson->index_token);
joon874 4:0b5a199e91f3 461 #endif
joon874 4:0b5a199e91f3 462 delete pDataJson;
joon874 4:0b5a199e91f3 463 pDataJson = 0;
joon874 4:0b5a199e91f3 464 }
joon874 4:0b5a199e91f3 465 #ifdef DEBUG_HTTPREQ
joon874 4:0b5a199e91f3 466 printf("After Delete\r\n");
joon874 4:0b5a199e91f3 467 debug_info();
joon874 4:0b5a199e91f3 468 #endif
joon874 4:0b5a199e91f3 469 }
joon874 4:0b5a199e91f3 470
joon874 4:0b5a199e91f3 471 /*
joon874 4:0b5a199e91f3 472 void DeleteRequestHandler::handle(char* rest_uri, char* request_data, char *reply)
joon874 0:5886f525a4ad 473 {
joon874 0:5886f525a4ad 474 }
joon874 4:0b5a199e91f3 475 */