Simple HTTP example
Dependencies: LWIPInterface NetworkSocketAPI events funcptr mbed-rtos mbed
main.cpp@0:9dd004b6a8b7, 2016-04-21 (annotated)
- Committer:
- Christopher Haster
- Date:
- Thu Apr 21 18:36:07 2016 -0500
- Revision:
- 0:9dd004b6a8b7
- Child:
- 1:ca2041d3a4a6
Initial commit of simple HTTP server
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Christopher Haster |
0:9dd004b6a8b7 | 1 | #include "Event.h" |
Christopher Haster |
0:9dd004b6a8b7 | 2 | |
Christopher Haster |
0:9dd004b6a8b7 | 3 | #include "LWIPInterface.h" |
Christopher Haster |
0:9dd004b6a8b7 | 4 | #include "TCPServer.h" |
Christopher Haster |
0:9dd004b6a8b7 | 5 | #include "SimpleHTTP.h" |
Christopher Haster |
0:9dd004b6a8b7 | 6 | |
Christopher Haster |
0:9dd004b6a8b7 | 7 | DigitalOut led_red (LED_RED , true); |
Christopher Haster |
0:9dd004b6a8b7 | 8 | DigitalOut led_green(LED_GREEN, true); |
Christopher Haster |
0:9dd004b6a8b7 | 9 | DigitalOut led_blue (LED_BLUE , true); |
Christopher Haster |
0:9dd004b6a8b7 | 10 | unsigned count_red = 0; |
Christopher Haster |
0:9dd004b6a8b7 | 11 | unsigned count_green = 0; |
Christopher Haster |
0:9dd004b6a8b7 | 12 | unsigned count_blue = 0; |
Christopher Haster |
0:9dd004b6a8b7 | 13 | |
Christopher Haster |
0:9dd004b6a8b7 | 14 | LWIPInterface lwip; |
Christopher Haster |
0:9dd004b6a8b7 | 15 | EventQueue queue; |
Christopher Haster |
0:9dd004b6a8b7 | 16 | SimpleHTTP http(&queue, &lwip); |
Christopher Haster |
0:9dd004b6a8b7 | 17 | |
Christopher Haster |
0:9dd004b6a8b7 | 18 | #define IMAGE_URL ( \ |
Christopher Haster |
0:9dd004b6a8b7 | 19 | "https://developer.mbed.org/media/cache/platforms/" \ |
Christopher Haster |
0:9dd004b6a8b7 | 20 | "FRDM-K64F_400x300_WO6GnVU.png.250x250_q85.jpg" ) |
Christopher Haster |
0:9dd004b6a8b7 | 21 | |
Christopher Haster |
0:9dd004b6a8b7 | 22 | #define PROJECT_URL ( \ |
Christopher Haster |
0:9dd004b6a8b7 | 23 | "https://developer.mbed.org/users/geky/code/SimpleHTTPExample" ) |
Christopher Haster |
0:9dd004b6a8b7 | 24 | |
Christopher Haster |
0:9dd004b6a8b7 | 25 | int page(char *buffer, unsigned size) { |
Christopher Haster |
0:9dd004b6a8b7 | 26 | printf("%s\r\n", strtok(buffer, "\r\n")); |
Christopher Haster |
0:9dd004b6a8b7 | 27 | |
Christopher Haster |
0:9dd004b6a8b7 | 28 | return snprintf(buffer, size, |
Christopher Haster |
0:9dd004b6a8b7 | 29 | "<html>\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 30 | "<head>\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 31 | "<title>k64f</title>\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 32 | "<style>\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 33 | "body { " |
Christopher Haster |
0:9dd004b6a8b7 | 34 | "text-align: center; " |
Christopher Haster |
0:9dd004b6a8b7 | 35 | "margin: auto; " |
Christopher Haster |
0:9dd004b6a8b7 | 36 | "width: 250px; }\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 37 | "h3 { margin: 10px 0 0; }\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 38 | ".led { " |
Christopher Haster |
0:9dd004b6a8b7 | 39 | "width: 50px; " |
Christopher Haster |
0:9dd004b6a8b7 | 40 | "height: 50px; " |
Christopher Haster |
0:9dd004b6a8b7 | 41 | "border: 1px; " |
Christopher Haster |
0:9dd004b6a8b7 | 42 | "cursor: pointer; }\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 43 | ".stats { text-align: left; }\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 44 | ".left { float: left; }\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 45 | ".right { float: right; }\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 46 | ".red_on { background-color: #f00; }\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 47 | ".green_on { background-color: #0f0; }\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 48 | ".blue_on { background-color: #00f; }\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 49 | ".red_off { background-color: #800; }\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 50 | ".green_off { background-color: #080; }\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 51 | ".blue_off { background-color: #008; }\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 52 | "</style>\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 53 | "</head>\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 54 | "<body>\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 55 | "<p>\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 56 | "<h3>k64f says hello!</h3>\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 57 | "<a href=%s>source code</a>\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 58 | "</p>\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 59 | "<img src=%s>\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 60 | "<p>\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 61 | "<form>\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 62 | "<input type=submit name=toggle value=red class=\"led red_%s\" ></input>\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 63 | "<input type=submit name=toggle value=green class=\"led green_%s\"></input>\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 64 | "<input type=submit name=toggle value=blue class=\"led blue_%s\" ></input>\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 65 | "</form>\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 66 | "</p>\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 67 | "<p class=\"stats left\">\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 68 | "red: %d<br>\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 69 | "green: %d<br>\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 70 | "blue: %d<br>\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 71 | "</p>\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 72 | "<p class=\"stats right\">\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 73 | "errors: %d<br>\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 74 | "accepts: %d<br>\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 75 | "sent: %d<br>\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 76 | "recv: %d<br>\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 77 | "</p>\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 78 | "</body>\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 79 | "</html>\r\n" |
Christopher Haster |
0:9dd004b6a8b7 | 80 | , PROJECT_URL |
Christopher Haster |
0:9dd004b6a8b7 | 81 | , IMAGE_URL |
Christopher Haster |
0:9dd004b6a8b7 | 82 | , led_red ? "off" : "on" |
Christopher Haster |
0:9dd004b6a8b7 | 83 | , led_green ? "off" : "on" |
Christopher Haster |
0:9dd004b6a8b7 | 84 | , led_blue ? "off" : "on" |
Christopher Haster |
0:9dd004b6a8b7 | 85 | , count_red |
Christopher Haster |
0:9dd004b6a8b7 | 86 | , count_green |
Christopher Haster |
0:9dd004b6a8b7 | 87 | , count_blue |
Christopher Haster |
0:9dd004b6a8b7 | 88 | , http.get_errors() |
Christopher Haster |
0:9dd004b6a8b7 | 89 | , http.get_accepts() |
Christopher Haster |
0:9dd004b6a8b7 | 90 | , http.get_sent() |
Christopher Haster |
0:9dd004b6a8b7 | 91 | , http.get_recv()); |
Christopher Haster |
0:9dd004b6a8b7 | 92 | } |
Christopher Haster |
0:9dd004b6a8b7 | 93 | |
Christopher Haster |
0:9dd004b6a8b7 | 94 | int page_toggle(DigitalOut *led, unsigned *count, char *buffer, unsigned size) { |
Christopher Haster |
0:9dd004b6a8b7 | 95 | *led = !*led; |
Christopher Haster |
0:9dd004b6a8b7 | 96 | (*count)++; |
Christopher Haster |
0:9dd004b6a8b7 | 97 | return page(buffer, size); |
Christopher Haster |
0:9dd004b6a8b7 | 98 | } |
Christopher Haster |
0:9dd004b6a8b7 | 99 | |
Christopher Haster |
0:9dd004b6a8b7 | 100 | Binder<int(DigitalOut*, unsigned*, char*, unsigned), DigitalOut*, unsigned*> |
Christopher Haster |
0:9dd004b6a8b7 | 101 | toggle_red (page_toggle, &led_red, &count_red ), |
Christopher Haster |
0:9dd004b6a8b7 | 102 | toggle_green(page_toggle, &led_green, &count_green), |
Christopher Haster |
0:9dd004b6a8b7 | 103 | toggle_blue (page_toggle, &led_blue, &count_blue ); |
Christopher Haster |
0:9dd004b6a8b7 | 104 | |
Christopher Haster |
0:9dd004b6a8b7 | 105 | int main() { |
Christopher Haster |
0:9dd004b6a8b7 | 106 | lwip.connect(); |
Christopher Haster |
0:9dd004b6a8b7 | 107 | |
Christopher Haster |
0:9dd004b6a8b7 | 108 | http.get("/", page); |
Christopher Haster |
0:9dd004b6a8b7 | 109 | http.get("/?toggle=red", &toggle_red); |
Christopher Haster |
0:9dd004b6a8b7 | 110 | http.get("/?toggle=green", &toggle_green); |
Christopher Haster |
0:9dd004b6a8b7 | 111 | http.get("/?toggle=blue", &toggle_blue); |
Christopher Haster |
0:9dd004b6a8b7 | 112 | http.start(); |
Christopher Haster |
0:9dd004b6a8b7 | 113 | |
Christopher Haster |
0:9dd004b6a8b7 | 114 | printf("Hi! I'm at %s\r\n", lwip.get_ip_address()); |
Christopher Haster |
0:9dd004b6a8b7 | 115 | |
Christopher Haster |
0:9dd004b6a8b7 | 116 | queue.dispatch(); |
Christopher Haster |
0:9dd004b6a8b7 | 117 | } |
Christopher Haster |
0:9dd004b6a8b7 | 118 |