This is a simplest HTTP server made ​​of libMiMic. It will echo back a request path.

Dependencies:   libMiMic mbed-rtos mbed NySDFileSystem

最も簡単なhttpdです。 クライアントから送信されてきたURLをHtmlにして返します。

ModUrlモジュールのサンプルでもあります。

This program is simple httpserver.

This is tutorial for ModUrl module.

Committer:
nyatla
Date:
Thu May 16 16:07:17 2013 +0000
Revision:
5:00daa91538bc
Parent:
2:28fd59d6be76
Child:
6:bcf3fe4d0ba1
initial version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nyatla 0:ec1e45489427 1 #include "mimic.h"
nyatla 5:00daa91538bc 2 #include "mbed.h"
nyatla 5:00daa91538bc 3 #include "InOut.h"
nyatla 5:00daa91538bc 4 LocalFileSystem2 lf("local");
nyatla 0:ec1e45489427 5
nyatla 0:ec1e45489427 6
nyatla 5:00daa91538bc 7 class RedIoPin: public InOut
nyatla 5:00daa91538bc 8 {
nyatla 5:00daa91538bc 9 private:
nyatla 5:00daa91538bc 10 int _v;
nyatla 5:00daa91538bc 11 public:
nyatla 5:00daa91538bc 12 RedIoPin(char pin):InOut(pin,0)
nyatla 5:00daa91538bc 13 {
nyatla 5:00daa91538bc 14 //pull down
nyatla 5:00daa91538bc 15 this->mode(1);//pull down
nyatla 5:00daa91538bc 16 this->_v=0;
nyatla 5:00daa91538bc 17 this->write(0);
nyatla 5:00daa91538bc 18 }
nyatla 5:00daa91538bc 19 /**
nyatla 5:00daa91538bc 20 * set RedStoneValue RedStone value
nyatla 5:00daa91538bc 21 * @return
nyatla 5:00daa91538bc 22 * red stone value.
nyatla 5:00daa91538bc 23 */
nyatla 5:00daa91538bc 24 bool setRedValue(int v)
nyatla 5:00daa91538bc 25 {
nyatla 5:00daa91538bc 26 //read real pin status,direction=in
nyatla 5:00daa91538bc 27 this->setDirection(false);
nyatla 5:00daa91538bc 28 if(this->read()!=0)
nyatla 5:00daa91538bc 29 { //real pin==1:out=1,in=0
nyatla 5:00daa91538bc 30 this->_v=1;
nyatla 5:00daa91538bc 31 this->write(0);
nyatla 5:00daa91538bc 32 }else{
nyatla 5:00daa91538bc 33 //real pin==0: direction=out,out=redstone value
nyatla 5:00daa91538bc 34 this->setDirection(true);
nyatla 5:00daa91538bc 35 int vt=v!=0?1:0;
nyatla 5:00daa91538bc 36 this->write(vt);
nyatla 5:00daa91538bc 37 this->_v=vt;
nyatla 5:00daa91538bc 38 }
nyatla 5:00daa91538bc 39 return this->_v;
nyatla 5:00daa91538bc 40 }
nyatla 5:00daa91538bc 41 };
nyatla 5:00daa91538bc 42 class RedIo
nyatla 5:00daa91538bc 43 {
nyatla 5:00daa91538bc 44 public:
nyatla 5:00daa91538bc 45 RedIoPin* io[30];
nyatla 5:00daa91538bc 46 RedIo()
nyatla 5:00daa91538bc 47 {
nyatla 5:00daa91538bc 48 const char d[]={LED1,LED2,LED3,LED4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30};
nyatla 5:00daa91538bc 49 for(int i=0;i<30;i++){
nyatla 5:00daa91538bc 50 this->io[i]=new RedIoPin(d[i]);
nyatla 5:00daa91538bc 51 }
nyatla 5:00daa91538bc 52 }
nyatla 5:00daa91538bc 53 virtual ~RedIo()
nyatla 5:00daa91538bc 54 {
nyatla 5:00daa91538bc 55 for(int i=0;i<30;i++){
nyatla 5:00daa91538bc 56 delete this->io[i];
nyatla 5:00daa91538bc 57 }
nyatla 5:00daa91538bc 58 }
nyatla 5:00daa91538bc 59 unsigned int update(unsigned int v)
nyatla 5:00daa91538bc 60 {
nyatla 5:00daa91538bc 61 unsigned int ret=0;
nyatla 5:00daa91538bc 62 for(int i=0;i<30;i++){
nyatla 5:00daa91538bc 63 ret=ret<<1;
nyatla 5:00daa91538bc 64 ret=ret | (this->io[29-i]->setRedValue((v>>(29-i))&0x00000001)?1:0);
nyatla 5:00daa91538bc 65 }
nyatla 5:00daa91538bc 66 return ret;
nyatla 5:00daa91538bc 67 }
nyatla 5:00daa91538bc 68 };
nyatla 0:ec1e45489427 69
nyatla 0:ec1e45489427 70 class MiMicRemoteMcu:public MiMic::Httpd
nyatla 0:ec1e45489427 71 {
nyatla 0:ec1e45489427 72 private:
nyatla 0:ec1e45489427 73 ModUrl modurl; //basic URL parser
nyatla 5:00daa91538bc 74 RedIo rsio;
nyatla 0:ec1e45489427 75 public:
nyatla 0:ec1e45489427 76 MiMicRemoteMcu():Httpd(80)
nyatla 0:ec1e45489427 77 {
nyatla 0:ec1e45489427 78 }
nyatla 0:ec1e45489427 79 virtual void onRequest(HttpdConnection& i_connection)
nyatla 0:ec1e45489427 80 {
nyatla 5:00daa91538bc 81 char url[64];
nyatla 0:ec1e45489427 82 int method;
nyatla 5:00daa91538bc 83
nyatla 2:28fd59d6be76 84 //call ModUrl module.
nyatla 5:00daa91538bc 85 if(!this->modurl.execute(i_connection,url,64,&method)){
nyatla 5:00daa91538bc 86 i_connection.sendHeader(400,"text/html",NULL);
nyatla 5:00daa91538bc 87 i_connection.sendBodyF("<html><body>Bad Request.</body></html>",url);
nyatla 0:ec1e45489427 88 return;
nyatla 0:ec1e45489427 89 }
nyatla 5:00daa91538bc 90 UrlReader r(url);
nyatla 5:00daa91538bc 91 if(!r.isPathEqual("/rsb/")){
nyatla 5:00daa91538bc 92 i_connection.sendHeader(403,"text/html",NULL);
nyatla 5:00daa91538bc 93 i_connection.sendBodyF("<html><body>Path must be '/rsb/?p=[:unsigned int:]'</body></html>",url);
nyatla 5:00daa91538bc 94 return;
nyatla 5:00daa91538bc 95 }
nyatla 5:00daa91538bc 96 unsigned int rsv;
nyatla 5:00daa91538bc 97 if(!r.getQueryUInt("p",rsv)){
nyatla 5:00daa91538bc 98 i_connection.sendHeader(400,"text/html",NULL);
nyatla 5:00daa91538bc 99 i_connection.sendBodyF("<html><body>p val must be unsigned int</body></html>",url);
nyatla 5:00daa91538bc 100 return;
nyatla 5:00daa91538bc 101 }
nyatla 5:00daa91538bc 102 i_connection.sendHeader(200,"text/html",NULL);
nyatla 5:00daa91538bc 103 i_connection.sendBodyF("%u",rsio.update(rsv));
nyatla 0:ec1e45489427 104 return;
nyatla 0:ec1e45489427 105 }
nyatla 0:ec1e45489427 106 };
nyatla 0:ec1e45489427 107
nyatla 0:ec1e45489427 108 int main()
nyatla 0:ec1e45489427 109 {
nyatla 0:ec1e45489427 110 NetConfig cfg; //create network configulation
nyatla 5:00daa91538bc 111 //try to override setting by local file.
nyatla 5:00daa91538bc 112 cfg.loadFromFile("/local/mimic.cfg");
nyatla 5:00daa91538bc 113
nyatla 0:ec1e45489427 114 Net net(cfg); //create a net instance.
nyatla 0:ec1e45489427 115 MiMicRemoteMcu httpd; //create a httpd instance.
nyatla 0:ec1e45489427 116 httpd.loop(); //start httpd loop.
nyatla 0:ec1e45489427 117 return 0;
nyatla 0:ec1e45489427 118 }