au wot hackathon0314 test program
Dependencies: NySNICInterface mbed-rtos mbed
Fork of RESTServer_team4 by
HTTPServer.cpp
00001 #include "HTTPServer.h" 00002 #include "mbed.h" 00003 00004 #include "control_motors.h" 00005 00006 00007 bool cmp(char* a, char* b) 00008 { 00009 return strcmp(a,b) < 0; 00010 } 00011 00012 00013 HTTPServer::HTTPServer(): 00014 reply() 00015 { 00016 } 00017 00018 00019 HTTPServer::~HTTPServer() 00020 { 00021 } 00022 00023 00024 bool HTTPServer::init(int port) 00025 { 00026 DigitalOut led4(LED4); 00027 00028 socketserver.set_blocking(true); 00029 if(socketserver.bind(port)) 00030 { 00031 printf("Could not bind on port %d.\n", port); 00032 return false; 00033 } 00034 00035 if(socketserver.listen()) 00036 { 00037 printf("Could not listen %d.\n", port); 00038 return false; 00039 } 00040 00041 led4 = 1; // server is ready 00042 00043 return true; 00044 } 00045 00046 00047 void HTTPServer::run() 00048 { 00049 char buffer[1024]; 00050 TCPSocketConnection c; 00051 00052 while(true) 00053 { 00054 while(socketserver.accept(&c)); 00055 c.set_blocking(false, 1000); 00056 00057 while(c.is_connected()) 00058 { 00059 int n = c.receive(buffer, sizeof(buffer)-1); 00060 00061 if(n == 0) 00062 { 00063 c.close(); 00064 break; 00065 } 00066 else if(n != -1) 00067 { 00068 buffer[n] = '\0'; 00069 //printf("Received data -- %s --. \r\n", buffer); 00070 handle_request(buffer); 00071 create_response(buffer); 00072 //printf("Sending data -- %s --. \r\n", buffer); 00073 c.send_all(buffer, strlen(buffer)); 00074 //printf("done. \r\n"); 00075 c.close(); 00076 break; 00077 } 00078 else { 00079 printf("Error while receiving data. \r\n"); 00080 c.close(); 00081 break; 00082 } 00083 } 00084 } 00085 } 00086 00087 00088 void HTTPServer::handle_request(char *buffer) 00089 { 00090 char* request_type = strtok(buffer, " "); 00091 char* request = strtok(NULL, " "); 00092 00093 // リクエストされたURLをパースし、モーターを制御 00094 bool ret = parse_request(request); 00095 if(ret){ 00096 response_code = HTTP_200_OK; 00097 }else{ 00098 response_code = HTTP_404_NOTFOUND; 00099 } 00100 00101 reply[0] = '\0'; 00102 } 00103 00104 void HTTPServer::create_response(char *buffer) 00105 { 00106 char content_length[30] = ""; 00107 buffer[0] = '\0'; 00108 00109 /* HTTP Status Code */ 00110 strcat(buffer, "HTTP/1.1 "); 00111 switch(response_code){ 00112 case HTTP_200_OK: 00113 strcat(buffer, "200 OK\r\n"); 00114 break; 00115 case HTTP_404_NOTFOUND: 00116 strcat(buffer, "404 Not Found\r\n"); 00117 break; 00118 default: 00119 strcat(buffer, "500 Internal Server Error\r\n"); 00120 break; 00121 } 00122 00123 /* add header */ 00124 strcat(buffer, "Access-Control-Allow-Origin: *\r\n"); 00125 sprintf(content_length, "Content-Length: %d\r\n", strlen(reply)); 00126 strncat(buffer, content_length, strlen(content_length)); 00127 strcat(buffer, "Content-Type: text/plain\r\n\r\n"); 00128 00129 /* add content */ 00130 strcat(buffer, reply); 00131 }
Generated on Fri Jul 15 2022 05:24:06 by 1.7.2