HTTP Server with WebSocket Server for GSwifiInterface library Please see: https://mbed.org/users/gsfan/notebook/gswifiinterface_httpd/

Dependencies:   GSwifiInterface SDFileSystem mbed

Committer:
gsfan
Date:
Thu Jan 30 15:13:18 2014 +0000
Revision:
0:93f689e0a0d9
1st build

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gsfan 0:93f689e0a0d9 1 /*
gsfan 0:93f689e0a0d9 2 * Please modify "GSwifi_conf.h"
gsfan 0:93f689e0a0d9 3 * ----------
gsfan 0:93f689e0a0d9 4 * //#define CFG_ENABLE_RTOS
gsfan 0:93f689e0a0d9 5 * #define CFG_ENABLE_HTTPD
gsfan 0:93f689e0a0d9 6 * #define CFG_ENABLE_WEBSOCKET
gsfan 0:93f689e0a0d9 7 * //#define CFG_ENABLE_SMTP
gsfan 0:93f689e0a0d9 8 * ----------
gsfan 0:93f689e0a0d9 9 */
gsfan 0:93f689e0a0d9 10
gsfan 0:93f689e0a0d9 11 #include "mbed.h"
gsfan 0:93f689e0a0d9 12 #include "SDFileSystem.h"
gsfan 0:93f689e0a0d9 13 #include "GSwifi.h"
gsfan 0:93f689e0a0d9 14
gsfan 0:93f689e0a0d9 15 #define SEC GSwifi::SEC_WPA_PSK
gsfan 0:93f689e0a0d9 16 #define SSID "SSPD"
gsfan 0:93f689e0a0d9 17 #define PASS "PASSPHRASE"
gsfan 0:93f689e0a0d9 18
gsfan 0:93f689e0a0d9 19 Serial pc(USBTX, USBRX);
gsfan 0:93f689e0a0d9 20 DigitalOut led1(LED1), led2(LED2), led3(LED3), led4(LED4);
gsfan 0:93f689e0a0d9 21 LocalFileSystem local("local");
gsfan 0:93f689e0a0d9 22 SDFileSystem sd(p5, p6, p7, p8, "sd");
gsfan 0:93f689e0a0d9 23
gsfan 0:93f689e0a0d9 24 GSwifi gs(p13, p14, p12, P0_22, p20, NC, 115200); // mbed LPC1768
gsfan 0:93f689e0a0d9 25 //GSwifi gs(PTD3, PTD2, NC, PTD5, PTA13); // FRDM KL25Z
gsfan 0:93f689e0a0d9 26
gsfan 0:93f689e0a0d9 27
gsfan 0:93f689e0a0d9 28 void cgi (int cid) {
gsfan 0:93f689e0a0d9 29 int i;
gsfan 0:93f689e0a0d9 30 char buf[100];
gsfan 0:93f689e0a0d9 31
gsfan 0:93f689e0a0d9 32 led2 = 1;
gsfan 0:93f689e0a0d9 33 i = gs.recv(cid, buf, sizeof(buf));
gsfan 0:93f689e0a0d9 34 if (i < 0) return;
gsfan 0:93f689e0a0d9 35 buf[i] = 0;
gsfan 0:93f689e0a0d9 36 // pc.printf("CGI %d: %s ? %s '%s' %d\r\n", cid, gs.httpdGetFilename(cid), gs.httpdGetQuerystring(cid), buf, i);
gsfan 0:93f689e0a0d9 37
gsfan 0:93f689e0a0d9 38 gs.send(cid, "HTTP/1.1 200 OK\r\n", 17);
gsfan 0:93f689e0a0d9 39 gs.send(cid, "Content-type: text/plain\r\n", 26);
gsfan 0:93f689e0a0d9 40 gs.send(cid, "\r\n", 2);
gsfan 0:93f689e0a0d9 41
gsfan 0:93f689e0a0d9 42 gs.send(cid, "BODY: ", 6);
gsfan 0:93f689e0a0d9 43 gs.send(cid, buf, strlen(buf));
gsfan 0:93f689e0a0d9 44 gs.send(cid, "\r\n", 2);
gsfan 0:93f689e0a0d9 45 gs.close(cid);
gsfan 0:93f689e0a0d9 46 }
gsfan 0:93f689e0a0d9 47
gsfan 0:93f689e0a0d9 48 void ws_server (int cid) {
gsfan 0:93f689e0a0d9 49 int i;
gsfan 0:93f689e0a0d9 50 char buf[100];
gsfan 0:93f689e0a0d9 51
gsfan 0:93f689e0a0d9 52 led2 = 1;
gsfan 0:93f689e0a0d9 53 i = gs.recv(cid, buf, sizeof(buf));
gsfan 0:93f689e0a0d9 54 if (i < 0) return;
gsfan 0:93f689e0a0d9 55 buf[i] = 0;
gsfan 0:93f689e0a0d9 56 pc.printf("WS %d: '%s' %d\r\n", cid, buf, i);
gsfan 0:93f689e0a0d9 57
gsfan 0:93f689e0a0d9 58 gs.wsSend(cid, buf, i);
gsfan 0:93f689e0a0d9 59 }
gsfan 0:93f689e0a0d9 60
gsfan 0:93f689e0a0d9 61 int main () {
gsfan 0:93f689e0a0d9 62 char ip[16], netmask[16], gateway[16];
gsfan 0:93f689e0a0d9 63
gsfan 0:93f689e0a0d9 64 pc.baud(115200);
gsfan 0:93f689e0a0d9 65 // pc.baud(921600);
gsfan 0:93f689e0a0d9 66 printf("HTTP Server...\r\n");
gsfan 0:93f689e0a0d9 67 led1 = 1;
gsfan 0:93f689e0a0d9 68 gs.setAddress(); //Use DHCP
gsfan 0:93f689e0a0d9 69 // gs.setAddress("192.168.1.50", "255.255.255.0", "192.168.1.1", "192.168.1.1");
gsfan 0:93f689e0a0d9 70 gs.setSsid(SEC, SSID, PASS);
gsfan 0:93f689e0a0d9 71 if (gs.join()) return -1; // join the network
gsfan 0:93f689e0a0d9 72 // if (gs.limitedap()) return -1; // access point
gsfan 0:93f689e0a0d9 73 gs.getAddress(ip, netmask, gateway);
gsfan 0:93f689e0a0d9 74 printf("IP Address is %s\r\n", ip);
gsfan 0:93f689e0a0d9 75
gsfan 0:93f689e0a0d9 76 printf("ready\r\n");
gsfan 0:93f689e0a0d9 77 gs.httpd();
gsfan 0:93f689e0a0d9 78 gs.httpdAttach("/cgi-bin/", &cgi);
gsfan 0:93f689e0a0d9 79 gs.httpdAttach("/ws/", &ws_server, 1);
gsfan 0:93f689e0a0d9 80 gs.httpdAttach("/test/", "/sd/www/");
gsfan 0:93f689e0a0d9 81 gs.httpdAttach("/", "/local/");
gsfan 0:93f689e0a0d9 82
gsfan 0:93f689e0a0d9 83 for (;;) {
gsfan 0:93f689e0a0d9 84 gs.poll();
gsfan 0:93f689e0a0d9 85 if (pc.readable()) {
gsfan 0:93f689e0a0d9 86 if (pc.getc() == 'q') break;
gsfan 0:93f689e0a0d9 87 }
gsfan 0:93f689e0a0d9 88
gsfan 0:93f689e0a0d9 89 wait_ms(50);
gsfan 0:93f689e0a0d9 90 led1 = !led1;
gsfan 0:93f689e0a0d9 91 led2 = 0;
gsfan 0:93f689e0a0d9 92 }
gsfan 0:93f689e0a0d9 93 gs.dissociate();
gsfan 0:93f689e0a0d9 94 return 0;
gsfan 0:93f689e0a0d9 95 }