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.
main.cpp
- Committer:
- nyatla
- Date:
- 2013-05-16
- Revision:
- 5:00daa91538bc
- Parent:
- 2:28fd59d6be76
- Child:
- 6:bcf3fe4d0ba1
File content as of revision 5:00daa91538bc:
#include "mimic.h" #include "mbed.h" #include "InOut.h" LocalFileSystem2 lf("local"); class RedIoPin: public InOut { private: int _v; public: RedIoPin(char pin):InOut(pin,0) { //pull down this->mode(1);//pull down this->_v=0; this->write(0); } /** * set RedStoneValue RedStone value * @return * red stone value. */ bool setRedValue(int v) { //read real pin status,direction=in this->setDirection(false); if(this->read()!=0) { //real pin==1:out=1,in=0 this->_v=1; this->write(0); }else{ //real pin==0: direction=out,out=redstone value this->setDirection(true); int vt=v!=0?1:0; this->write(vt); this->_v=vt; } return this->_v; } }; class RedIo { public: RedIoPin* io[30]; RedIo() { 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}; for(int i=0;i<30;i++){ this->io[i]=new RedIoPin(d[i]); } } virtual ~RedIo() { for(int i=0;i<30;i++){ delete this->io[i]; } } unsigned int update(unsigned int v) { unsigned int ret=0; for(int i=0;i<30;i++){ ret=ret<<1; ret=ret | (this->io[29-i]->setRedValue((v>>(29-i))&0x00000001)?1:0); } return ret; } }; class MiMicRemoteMcu:public MiMic::Httpd { private: ModUrl modurl; //basic URL parser RedIo rsio; public: MiMicRemoteMcu():Httpd(80) { } virtual void onRequest(HttpdConnection& i_connection) { char url[64]; int method; //call ModUrl module. if(!this->modurl.execute(i_connection,url,64,&method)){ i_connection.sendHeader(400,"text/html",NULL); i_connection.sendBodyF("<html><body>Bad Request.</body></html>",url); return; } UrlReader r(url); if(!r.isPathEqual("/rsb/")){ i_connection.sendHeader(403,"text/html",NULL); i_connection.sendBodyF("<html><body>Path must be '/rsb/?p=[:unsigned int:]'</body></html>",url); return; } unsigned int rsv; if(!r.getQueryUInt("p",rsv)){ i_connection.sendHeader(400,"text/html",NULL); i_connection.sendBodyF("<html><body>p val must be unsigned int</body></html>",url); return; } i_connection.sendHeader(200,"text/html",NULL); i_connection.sendBodyF("%u",rsio.update(rsv)); return; } }; int main() { NetConfig cfg; //create network configulation //try to override setting by local file. cfg.loadFromFile("/local/mimic.cfg"); Net net(cfg); //create a net instance. MiMicRemoteMcu httpd; //create a httpd instance. httpd.loop(); //start httpd loop. return 0; }