For a question in forum this is a working example, there will be the example that is not working
Fork of eth_v13 by
httpServer.cpp@4:a10e3d1bdb17, 2014-03-27 (annotated)
- Committer:
- hggerdd
- Date:
- Thu Mar 27 21:55:57 2014 +0000
- Revision:
- 4:a10e3d1bdb17
- Parent:
- 3:79dc3337d9da
working with wiznet w5100
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
hggerdd | 3:79dc3337d9da | 1 | #include "httpServer.h" |
hggerdd | 3:79dc3337d9da | 2 | #include <cstring> |
hggerdd | 3:79dc3337d9da | 3 | |
hggerdd | 3:79dc3337d9da | 4 | extern Serial pc; |
hggerdd | 3:79dc3337d9da | 5 | |
hggerdd | 3:79dc3337d9da | 6 | httpServer::httpServer(int socket) |
hggerdd | 3:79dc3337d9da | 7 | { |
hggerdd | 3:79dc3337d9da | 8 | tcpSocket.setSocket(socket); |
hggerdd | 3:79dc3337d9da | 9 | } |
hggerdd | 3:79dc3337d9da | 10 | |
hggerdd | 3:79dc3337d9da | 11 | void httpServer::start(int port) |
hggerdd | 3:79dc3337d9da | 12 | { |
hggerdd | 3:79dc3337d9da | 13 | _port = port; |
hggerdd | 3:79dc3337d9da | 14 | tcpSocket.attach(this, &httpServer::httpApp); |
hggerdd | 3:79dc3337d9da | 15 | tcpSocket.bind(port); |
hggerdd | 3:79dc3337d9da | 16 | timeout.start(); |
hggerdd | 3:79dc3337d9da | 17 | counter = 0; |
hggerdd | 3:79dc3337d9da | 18 | } |
hggerdd | 3:79dc3337d9da | 19 | |
hggerdd | 3:79dc3337d9da | 20 | void httpServer::close() |
hggerdd | 3:79dc3337d9da | 21 | { |
hggerdd | 3:79dc3337d9da | 22 | } |
hggerdd | 3:79dc3337d9da | 23 | |
hggerdd | 3:79dc3337d9da | 24 | // zyklisch aufzurufende Funktion, die das System handled |
hggerdd | 3:79dc3337d9da | 25 | void httpServer::poll() |
hggerdd | 3:79dc3337d9da | 26 | { |
hggerdd | 3:79dc3337d9da | 27 | tcpSocket.poll(); |
hggerdd | 3:79dc3337d9da | 28 | } |
hggerdd | 3:79dc3337d9da | 29 | |
hggerdd | 3:79dc3337d9da | 30 | // Programm um den Datenstrom zu handeln |
hggerdd | 3:79dc3337d9da | 31 | void httpServer::httpApp() |
hggerdd | 3:79dc3337d9da | 32 | { |
hggerdd | 3:79dc3337d9da | 33 | char buf[2048]; |
hggerdd | 3:79dc3337d9da | 34 | char * ptrToken; |
hggerdd | 3:79dc3337d9da | 35 | |
hggerdd | 3:79dc3337d9da | 36 | // Größe des Empfangspuffers einlesen |
hggerdd | 3:79dc3337d9da | 37 | int size = tcpSocket.getRxSize(); |
hggerdd | 3:79dc3337d9da | 38 | |
hggerdd | 4:a10e3d1bdb17 | 39 | counter++; |
hggerdd | 3:79dc3337d9da | 40 | |
hggerdd | 3:79dc3337d9da | 41 | pc.printf("\n\n!! Was empfangen (%d)(%d)\n\n", _port, size); |
hggerdd | 3:79dc3337d9da | 42 | |
hggerdd | 3:79dc3337d9da | 43 | if (size > 0) { |
hggerdd | 3:79dc3337d9da | 44 | // Daten in den buffer buf lesen |
hggerdd | 3:79dc3337d9da | 45 | size = tcpSocket.recv(buf, sizeof(buf)); |
hggerdd | 3:79dc3337d9da | 46 | timeout.reset(); // wenn aktivität ist den timer zurück setzen |
hggerdd | 3:79dc3337d9da | 47 | |
hggerdd | 3:79dc3337d9da | 48 | // Abfragetyp erkennen (GET oder POST) |
hggerdd | 3:79dc3337d9da | 49 | ptrToken = strtok(buf, " /&\r\n"); |
hggerdd | 3:79dc3337d9da | 50 | |
hggerdd | 3:79dc3337d9da | 51 | if (strncmp(ptrToken, "GET", strlen("GET")) == 0) { |
hggerdd | 3:79dc3337d9da | 52 | pc.printf("GET\n", _port, size); |
hggerdd | 3:79dc3337d9da | 53 | |
hggerdd | 3:79dc3337d9da | 54 | // Erkenne die Anfrage |
hggerdd | 3:79dc3337d9da | 55 | ptrToken = strtok(NULL, " /&\r\n"); |
hggerdd | 3:79dc3337d9da | 56 | |
hggerdd | 4:a10e3d1bdb17 | 57 | if (strncmp(ptrToken, "test", strlen("test")) == 0) { |
hggerdd | 3:79dc3337d9da | 58 | tcpSocket.send(c_HTTP_200_OK, strlen(c_HTTP_200_OK)); |
hggerdd | 3:79dc3337d9da | 59 | tcpSocket.send(c_HTTP_CacheControl_NoCache, strlen(c_HTTP_CacheControl_NoCache)); |
hggerdd | 3:79dc3337d9da | 60 | tcpSocket.send(c_HTTP_Content_HTML, strlen(c_HTTP_Content_HTML)); |
hggerdd | 3:79dc3337d9da | 61 | |
hggerdd | 3:79dc3337d9da | 62 | tcpSocket.send(c_HTTP_EmptyLine, strlen(c_HTTP_EmptyLine)); |
hggerdd | 3:79dc3337d9da | 63 | tcpSocket.send(html_head, strlen(html_head)); |
hggerdd | 3:79dc3337d9da | 64 | |
hggerdd | 3:79dc3337d9da | 65 | } else if (strncmp(ptrToken, "zeit", strlen("zeit")) == 0) { |
hggerdd | 3:79dc3337d9da | 66 | tcpSocket.send(c_HTTP_200_OK, strlen(c_HTTP_200_OK)); |
hggerdd | 3:79dc3337d9da | 67 | tcpSocket.send(c_HTTP_CacheControl_NoCache, strlen(c_HTTP_CacheControl_NoCache)); |
hggerdd | 4:a10e3d1bdb17 | 68 | tcpSocket.send(http_refresh, strlen(http_refresh)); |
hggerdd | 4:a10e3d1bdb17 | 69 | |
hggerdd | 3:79dc3337d9da | 70 | tcpSocket.send(c_HTTP_Content_HTML, strlen(c_HTTP_Content_HTML)); |
hggerdd | 3:79dc3337d9da | 71 | |
hggerdd | 3:79dc3337d9da | 72 | tcpSocket.send(c_HTTP_EmptyLine, strlen(c_HTTP_EmptyLine)); |
hggerdd | 3:79dc3337d9da | 73 | tcpSocket.send(html_head, strlen(html_head)); |
hggerdd | 4:a10e3d1bdb17 | 74 | |
hggerdd | 4:a10e3d1bdb17 | 75 | //sprintf(buf, "Zaehler : %d \r\n\r\n", counter); |
hggerdd | 4:a10e3d1bdb17 | 76 | |
hggerdd | 4:a10e3d1bdb17 | 77 | tcpSocket.send(html_table_head, strlen(html_table_head)); |
hggerdd | 3:79dc3337d9da | 78 | |
hggerdd | 4:a10e3d1bdb17 | 79 | for (int i=0; i<10; i++) { |
hggerdd | 4:a10e3d1bdb17 | 80 | //sprintf(buf, "Zaehler : %d, %d \r\n\r\n", counter, i); |
hggerdd | 4:a10e3d1bdb17 | 81 | sprintf(buf, "<tr><th>%d</th><th>%d</th><th>%d</th></tr>", counter, i, counter*counter); |
hggerdd | 4:a10e3d1bdb17 | 82 | tcpSocket.send(buf, strlen(buf)); |
hggerdd | 4:a10e3d1bdb17 | 83 | } |
hggerdd | 4:a10e3d1bdb17 | 84 | |
hggerdd | 4:a10e3d1bdb17 | 85 | tcpSocket.send(html_table_foot, strlen(html_table_foot)); |
hggerdd | 3:79dc3337d9da | 86 | tcpSocket.send(html_foot, strlen(html_foot)); |
hggerdd | 4:a10e3d1bdb17 | 87 | |
hggerdd | 4:a10e3d1bdb17 | 88 | |
hggerdd | 3:79dc3337d9da | 89 | } else { |
hggerdd | 3:79dc3337d9da | 90 | tcpSocket.send(c_HTTP_404_NotFound, strlen(c_HTTP_404_NotFound)); |
hggerdd | 3:79dc3337d9da | 91 | tcpSocket.send(c_HTTP_CacheControl_NoCache, strlen(c_HTTP_CacheControl_NoCache)); |
hggerdd | 3:79dc3337d9da | 92 | tcpSocket.send(c_HTTP_Content_HTML, strlen(c_HTTP_Content_HTML)); |
hggerdd | 3:79dc3337d9da | 93 | tcpSocket.send(c_HTTP_EmptyLine, strlen(c_HTTP_EmptyLine)); |
hggerdd | 3:79dc3337d9da | 94 | tcpSocket.send(c_HTTP_Page_404, strlen(c_HTTP_Page_404)); |
hggerdd | 3:79dc3337d9da | 95 | } |
hggerdd | 3:79dc3337d9da | 96 | |
hggerdd | 3:79dc3337d9da | 97 | } else { |
hggerdd | 3:79dc3337d9da | 98 | pc.printf("POST\n"); |
hggerdd | 3:79dc3337d9da | 99 | } |
hggerdd | 3:79dc3337d9da | 100 | |
hggerdd | 3:79dc3337d9da | 101 | |
hggerdd | 3:79dc3337d9da | 102 | } else { |
hggerdd | 3:79dc3337d9da | 103 | if (timeout.read_ms() > 500) { |
hggerdd | 3:79dc3337d9da | 104 | pc.printf("Socket schließen.\n"); |
hggerdd | 3:79dc3337d9da | 105 | tcpSocket.close(); |
hggerdd | 3:79dc3337d9da | 106 | timeout.reset(); |
hggerdd | 3:79dc3337d9da | 107 | } |
hggerdd | 3:79dc3337d9da | 108 | } |
hggerdd | 3:79dc3337d9da | 109 | } |