This is Webservice SDK for mbed. LPCXpresso1769/LPC1768/FRDM-K64F/LPC4088

Dependents:   MbedFileServer_1768MiniDK2 RedWireBridge IssueDebug_gcc MiMicRemoteMCU-for-Mbed ... more

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers Net.cpp Source File

Net.cpp

00001 ////////////////////////////////////////////////////////////////////////////////
00002 // Net.h
00003 ////////////////////////////////////////////////////////////////////////////////
00004 #include "Net.h"
00005 #include "NetConfig.h"
00006 #include "mbed.h"
00007 
00008 namespace MiMic
00009 {
00010 
00011     const char* Net::UPNP_ROOT_PATH="upnp";
00012 
00013     Net::Net(INetif& i_netif)
00014     {
00015         NyLPC_cNet_initialize(i_netif.getInterface());
00016         this->_mdns=NULL;
00017         this->_upnp=NULL;
00018     }
00019     Net::~Net()
00020     {
00021         NyLPC_cNet_finalize();
00022     }
00023     void Net::start(NetConfig& i_cfg)
00024     {
00025         NyLPC_TcNetConfig_t* base_cfg=i_cfg.refBaseInstance();
00026         //DHCP & autoIP request
00027         if((base_cfg->tcp_mode & NyLPC_TcNetConfig_IPV4_FLAG_MODE_MASK)!=0){
00028             for(;;){
00029                 //DHCP
00030                 if((base_cfg->tcp_mode & NyLPC_TcNetConfig_IPV4_FLAG_MODE_DHCP)!=0){
00031                     if(NyLPC_cNet_requestAddrDhcp(&(base_cfg->super),3)){
00032                         break;
00033                     }
00034                 }
00035                 //AUTOIP
00036                 if((base_cfg->tcp_mode & NyLPC_TcNetConfig_IPV4_FLAG_MODE_AUTOIP)!=0){
00037                     if(NyLPC_cNet_requestAddrApipa(&(base_cfg->super),3)){
00038                         break;
00039                     }
00040                 }
00041             }
00042         }
00043         //start mDNS
00044         if((base_cfg->services.flags & NyLPC_TcNetConfig_SERVICE_FLAG_MDNS) !=0){
00045             this->_mdns=(NyLPC_TcMDnsServer_t*)malloc(sizeof(NyLPC_TcMDnsServer_t));
00046             NyLPC_cMDnsServer_initialize(this->_mdns,i_cfg.refMdnsRecord());        
00047         }
00048         //start UPnP
00049         if((base_cfg->services.flags & NyLPC_TcNetConfig_SERVICE_FLAG_UPNP) !=0){
00050             this->_upnp=(NyLPC_TcUPnP_t*)malloc(sizeof(NyLPC_TcUPnP_t));
00051             NyLPC_cUPnP_initialize(this->_upnp,i_cfg.getHttpPort(),UPNP_ROOT_PATH,i_cfg.refUPnPDevDesc());        
00052 
00053         }
00054         NyLPC_cNet_start(&(base_cfg->super));
00055         if(this->_upnp!=NULL){
00056             NyLPC_cUPnP_start(this->_upnp);
00057         }        
00058     }
00059     void Net::stop()
00060     {
00061         NyLPC_cNet_stop();
00062         //stop mDNS
00063         if(this->_mdns!=NULL){
00064             NyLPC_cMDnsServer_finalize(this->_mdns);        
00065             free(this->_mdns);
00066             this->_mdns=NULL;
00067         }
00068     }
00069     
00070 }