For a question in forum this is a working example, there will be the example that is not working

Dependencies:   mbed

Fork of eth_v13 by Heiko Greiner

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?

UserRevisionLine numberNew 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 }