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.
Diff: main.cpp
- Revision:
- 6:bcf3fe4d0ba1
- Parent:
- 5:00daa91538bc
- Child:
- 7:8d030ae8ddc3
--- a/main.cpp Thu May 16 16:07:17 2013 +0000 +++ b/main.cpp Thu May 16 16:11:48 2013 +0000 @@ -1,118 +1,47 @@ #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; - } -}; - + + + +/** + * MiMic RemoteMCU httpd.<br/> + * <p>Service list</p> + * <pre> + * /rom/ - romfs + * /setup/ - MiMic configulation REST API. + * /local/ - mbed LocalFileSystem + * /mvm/ - MiMicVM REST API + * </pre> + */ + 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]; + char url[32]; 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); + if(this->modurl.execute(i_connection,url,32,&method)){ + //send 200 OK and requested URL + i_connection.sendHeader(200,"text/html",NULL); + i_connection.sendBodyF("<html><body>Your Request path is %s.</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; } + \ No newline at end of file