This is Webservice SDK for mbed. LPCXpresso1769/LPC1768/FRDM-K64F/LPC4088
Fork of libMiMic by
mbed/NetConfig.cpp@49:d4334acc3ec3, 2013-08-07 (annotated)
- Committer:
- nyatla
- Date:
- Wed Aug 07 16:43:32 2013 +0000
- Revision:
- 49:d4334acc3ec3
- Parent:
- 48:00d211aac2ec
- Child:
- 50:35e765380772
backup; fix uuid writer overflow; ?????; Notify??????Net?????????????modUPnP??????????
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
nyatla | 3:0a94993be1f6 | 1 | #include "NetConfig.h" |
nyatla | 11:c82a7b2899b0 | 2 | #include "NyLPC_uip.h" |
nyatla | 27:eb66b517efe6 | 3 | #include "NyLPC_flash.h" |
nyatla | 11:c82a7b2899b0 | 4 | #include "NyLPC_uip_ethernet.h" |
nyatla | 29:e19aab0c4156 | 5 | #include "utils/PlatformInfo.h" |
nyatla | 13:a71705c5e6fd | 6 | #include <stdio.h> |
nyatla | 13:a71705c5e6fd | 7 | #include <stdlib.h> |
nyatla | 13:a71705c5e6fd | 8 | #include "mbed.h" |
nyatla | 27:eb66b517efe6 | 9 | |
nyatla | 48:00d211aac2ec | 10 | /** |
nyatla | 48:00d211aac2ec | 11 | * Default UPnP Description |
nyatla | 48:00d211aac2ec | 12 | */ |
nyatla | 48:00d211aac2ec | 13 | const static char* UPNP_DEVICE_TYPE ="urn:schemas-upnp-org:device:Basic:1"; |
nyatla | 48:00d211aac2ec | 14 | const static char* UPNP_DEFAULT_FRENDLY_NAME="MiMic Device(LPC176x)"; |
nyatla | 48:00d211aac2ec | 15 | const static char* UPNP_DEFAULT_MANUFACTUR_NAME="MiMicProject@nyatla.jp"; |
nyatla | 48:00d211aac2ec | 16 | const static char* UPNP_DEFAULT_MANUFACTUR_URL="http://nyatla.jp/"; |
nyatla | 48:00d211aac2ec | 17 | const static char* UPNP_DEFAULT_MODEL_NAME="MiMic UPnP device."; |
nyatla | 48:00d211aac2ec | 18 | const static char* STR_EMPTY=""; |
nyatla | 48:00d211aac2ec | 19 | const static char* UPNP_DEFAULT_PRESENTATION_URL="/"; |
nyatla | 48:00d211aac2ec | 20 | |
nyatla | 48:00d211aac2ec | 21 | |
nyatla | 48:00d211aac2ec | 22 | /* |
nyatla | 48:00d211aac2ec | 23 | setUPnPFriendlyName |
nyatla | 48:00d211aac2ec | 24 | setUPnPManufactur(name,url,description) |
nyatla | 48:00d211aac2ec | 25 | setUPnPModel(name,number,url) |
nyatla | 48:00d211aac2ec | 26 | setUPnPPresentationUrl(name,number,url) |
nyatla | 48:00d211aac2ec | 27 | */ |
nyatla | 48:00d211aac2ec | 28 | |
nyatla | 48:00d211aac2ec | 29 | |
nyatla | 37:fc4b4fd6a649 | 30 | //default mdns records |
nyatla | 37:fc4b4fd6a649 | 31 | const static char* MDNS_SRV_HTTP="_http._tcp\0"; |
nyatla | 48:00d211aac2ec | 32 | //const static char* MDNS_NAME="LPC176x(MiMic)\0"; |
nyatla | 37:fc4b4fd6a649 | 33 | |
nyatla | 27:eb66b517efe6 | 34 | extern "C" void mbed_mac_address(char *s); |
nyatla | 37:fc4b4fd6a649 | 35 | |
nyatla | 37:fc4b4fd6a649 | 36 | |
nyatla | 37:fc4b4fd6a649 | 37 | static void overrideMacAddrIfmbed(NyLPC_TcNetConfig& v) |
nyatla | 27:eb66b517efe6 | 38 | { |
nyatla | 37:fc4b4fd6a649 | 39 | mbed_mac_address((char*)(v.super.eth_mac.addr)); |
nyatla | 37:fc4b4fd6a649 | 40 | //update default hostname |
nyatla | 37:fc4b4fd6a649 | 41 | strcpy(v.hostname,"MiMic"); |
nyatla | 48:00d211aac2ec | 42 | NyLPC_uitoa2(NyLPC_TcIPv4Config_getEtherMac000120203(&(v.super)),v.hostname+ 5,16,8); |
nyatla | 48:00d211aac2ec | 43 | NyLPC_uitoa2((NyLPC_TcIPv4Config_getEtherMac0405xxxx(&(v.super))>>16)&0xffff,v.hostname+13,16,4); |
nyatla | 37:fc4b4fd6a649 | 44 | v.services.flags=NyLPC_TcNetConfig_SERVICE_FLAG_MDNS; |
nyatla | 37:fc4b4fd6a649 | 45 | } |
nyatla | 37:fc4b4fd6a649 | 46 | |
nyatla | 37:fc4b4fd6a649 | 47 | static void updateOnchipConfig(NyLPC_TcNetConfig& v) |
nyatla | 48:00d211aac2ec | 48 | { |
nyatla | 48:00d211aac2ec | 49 | struct NyLPC_TMiMicConfigulation cfg_image; |
nyatla | 27:eb66b517efe6 | 50 | //パラメータ→ROMイメージ変換 |
nyatla | 27:eb66b517efe6 | 51 | cfg_image.fast_boot=0xffffffff; |
nyatla | 37:fc4b4fd6a649 | 52 | cfg_image.mac_00_01_02_03=NyLPC_TcIPv4Config_getEtherMac000120203(&(v.super)); |
nyatla | 37:fc4b4fd6a649 | 53 | cfg_image.mac_04_05_xx_xx=NyLPC_TcIPv4Config_getEtherMac0405xxxx(&(v.super)); |
nyatla | 37:fc4b4fd6a649 | 54 | cfg_image.ipv4_addr_net =NyLPC_ntohl(v.super.ip_addr.v); |
nyatla | 37:fc4b4fd6a649 | 55 | cfg_image.ipv4_mask_net =NyLPC_ntohl(v.super.netmask.v); |
nyatla | 37:fc4b4fd6a649 | 56 | cfg_image.ipv4_drut_net =NyLPC_ntohl(v.super.dr_addr.v); |
nyatla | 37:fc4b4fd6a649 | 57 | //additional information |
nyatla | 37:fc4b4fd6a649 | 58 | cfg_image.ipv4_flags=v.tcp_mode; |
nyatla | 37:fc4b4fd6a649 | 59 | cfg_image.http_port=v.services.http_port; |
nyatla | 37:fc4b4fd6a649 | 60 | cfg_image.srv_flags=v.services.flags; |
nyatla | 37:fc4b4fd6a649 | 61 | strcpy(cfg_image.hostname,v.hostname); |
nyatla | 27:eb66b517efe6 | 62 | //FreeRTOSの停止 |
nyatla | 27:eb66b517efe6 | 63 | NyLPC_cIsr_enterCritical(); |
nyatla | 27:eb66b517efe6 | 64 | //Flashへの書き込み |
nyatla | 27:eb66b517efe6 | 65 | NyLPC_cMiMicConfiglation_updateConfigulation(&cfg_image); |
nyatla | 27:eb66b517efe6 | 66 | //FreeRTOSの復帰 |
nyatla | 27:eb66b517efe6 | 67 | NyLPC_cIsr_exitCritical(); |
nyatla | 27:eb66b517efe6 | 68 | } |
nyatla | 37:fc4b4fd6a649 | 69 | |
nyatla | 37:fc4b4fd6a649 | 70 | |
nyatla | 3:0a94993be1f6 | 71 | namespace MiMic |
nyatla | 3:0a94993be1f6 | 72 | { |
nyatla | 48:00d211aac2ec | 73 | NetConfig::NetConfig(bool i_is_factory_default) |
nyatla | 48:00d211aac2ec | 74 | { |
nyatla | 48:00d211aac2ec | 75 | NyLPC_cNetConfig_initialize(&(this->_inst),i_is_factory_default); |
nyatla | 48:00d211aac2ec | 76 | this->_ref_custom_dns_record=NULL; |
nyatla | 48:00d211aac2ec | 77 | this->_ref_custom_upnp_desc=NULL; |
nyatla | 27:eb66b517efe6 | 78 | |
nyatla | 48:00d211aac2ec | 79 | //check mbed |
nyatla | 48:00d211aac2ec | 80 | if(PlatformInfo::getPlatformType()!=PlatformInfo::PF_MBED) { |
nyatla | 48:00d211aac2ec | 81 | return; |
nyatla | 3:0a94993be1f6 | 82 | } |
nyatla | 37:fc4b4fd6a649 | 83 | |
nyatla | 48:00d211aac2ec | 84 | if(!NyLPC_cMiMicConfiglation_hasUserConfigulation()) { |
nyatla | 48:00d211aac2ec | 85 | //is 1st read? |
nyatla | 48:00d211aac2ec | 86 | //mbed override |
nyatla | 48:00d211aac2ec | 87 | overrideMacAddrIfmbed((this->_inst)); |
nyatla | 48:00d211aac2ec | 88 | //save |
nyatla | 48:00d211aac2ec | 89 | updateOnchipConfig((this->_inst)); |
nyatla | 48:00d211aac2ec | 90 | } else { |
nyatla | 48:00d211aac2ec | 91 | //2nd read |
nyatla | 48:00d211aac2ec | 92 | if(i_is_factory_default) { |
nyatla | 48:00d211aac2ec | 93 | //mbed override |
nyatla | 48:00d211aac2ec | 94 | overrideMacAddrIfmbed((this->_inst)); |
nyatla | 48:00d211aac2ec | 95 | } else { |
nyatla | 48:00d211aac2ec | 96 | //nothing to do |
nyatla | 37:fc4b4fd6a649 | 97 | } |
nyatla | 37:fc4b4fd6a649 | 98 | } |
nyatla | 48:00d211aac2ec | 99 | //updateUUID |
nyatla | 48:00d211aac2ec | 100 | this->setUPnPUdn(0,0,0,0); |
nyatla | 48:00d211aac2ec | 101 | //update mdns informations |
nyatla | 48:00d211aac2ec | 102 | this->_syncServiceInfo(); |
nyatla | 48:00d211aac2ec | 103 | //update UPnP informations |
nyatla | 48:00d211aac2ec | 104 | } |
nyatla | 48:00d211aac2ec | 105 | void NetConfig::_syncServiceInfo() |
nyatla | 48:00d211aac2ec | 106 | { |
nyatla | 48:00d211aac2ec | 107 | //update DNS record |
nyatla | 48:00d211aac2ec | 108 | this->_dns_record.name=UPNP_DEFAULT_FRENDLY_NAME; |
nyatla | 48:00d211aac2ec | 109 | this->_dns_record.a=this->_inst.hostname; |
nyatla | 48:00d211aac2ec | 110 | this->_dns_record.num_of_srv=1; |
nyatla | 48:00d211aac2ec | 111 | this->_srv_record.protocol=MDNS_SRV_HTTP; |
nyatla | 48:00d211aac2ec | 112 | this->_srv_record.port=this->_inst.services.http_port; |
nyatla | 48:00d211aac2ec | 113 | this->_dns_record.srv=&(this->_srv_record); |
nyatla | 48:00d211aac2ec | 114 | |
nyatla | 48:00d211aac2ec | 115 | //update UPnP record |
nyatla | 48:00d211aac2ec | 116 | this->_upnp_desc.device_type=UPNP_DEVICE_TYPE; |
nyatla | 48:00d211aac2ec | 117 | this->_upnp_desc.frendly_name=UPNP_DEFAULT_FRENDLY_NAME; |
nyatla | 48:00d211aac2ec | 118 | this->_upnp_desc.manufacturer=UPNP_DEFAULT_MANUFACTUR_NAME; |
nyatla | 48:00d211aac2ec | 119 | this->_upnp_desc.manufacturer_url=UPNP_DEFAULT_MANUFACTUR_URL; |
nyatla | 48:00d211aac2ec | 120 | this->_upnp_desc.model_descriprion=STR_EMPTY; |
nyatla | 48:00d211aac2ec | 121 | this->_upnp_desc.model_name=UPNP_DEFAULT_MODEL_NAME; |
nyatla | 48:00d211aac2ec | 122 | this->_upnp_desc.model_number=NULL; |
nyatla | 48:00d211aac2ec | 123 | this->_upnp_desc.model_url=NULL; |
nyatla | 48:00d211aac2ec | 124 | this->_upnp_desc.serial_number=STR_EMPTY; |
nyatla | 48:00d211aac2ec | 125 | this->_upnp_desc.udn=this->_udn;//AUTO GENERATE |
nyatla | 48:00d211aac2ec | 126 | this->_upnp_desc.upc=NULL; |
nyatla | 48:00d211aac2ec | 127 | this->_upnp_desc.presentation_url=UPNP_DEFAULT_PRESENTATION_URL; |
nyatla | 48:00d211aac2ec | 128 | this->_upnp_desc.number_of_devices=0; |
nyatla | 48:00d211aac2ec | 129 | this->_upnp_desc.number_of_service=0; |
nyatla | 48:00d211aac2ec | 130 | this->_upnp_desc.number_of_icon=0; |
nyatla | 48:00d211aac2ec | 131 | this->_upnp_desc.devices=NULL; |
nyatla | 48:00d211aac2ec | 132 | this->_upnp_desc.services=NULL; |
nyatla | 48:00d211aac2ec | 133 | this->_upnp_desc.icons=NULL; |
nyatla | 48:00d211aac2ec | 134 | } |
nyatla | 48:00d211aac2ec | 135 | |
nyatla | 48:00d211aac2ec | 136 | NetConfig::~NetConfig() |
nyatla | 48:00d211aac2ec | 137 | { |
nyatla | 48:00d211aac2ec | 138 | NyLPC_cNetConfig_finalize(&(this->_inst)); |
nyatla | 48:00d211aac2ec | 139 | } |
nyatla | 48:00d211aac2ec | 140 | |
nyatla | 48:00d211aac2ec | 141 | const struct NyLPC_TUPnPDevDescDevice* NetConfig::refUPnPDevDesc()const |
nyatla | 48:00d211aac2ec | 142 | { |
nyatla | 48:00d211aac2ec | 143 | return this->_ref_custom_upnp_desc!=NULL?this->_ref_custom_upnp_desc:&this->_upnp_desc; |
nyatla | 48:00d211aac2ec | 144 | } |
nyatla | 48:00d211aac2ec | 145 | /** internal dns record*/ |
nyatla | 48:00d211aac2ec | 146 | const struct NyLPC_TDnsRecord* NetConfig::refMdnsRecord()const |
nyatla | 48:00d211aac2ec | 147 | { |
nyatla | 48:00d211aac2ec | 148 | return this->_ref_custom_dns_record!=NULL?this->_ref_custom_dns_record:&this->_dns_record; |
nyatla | 48:00d211aac2ec | 149 | } |
nyatla | 48:00d211aac2ec | 150 | |
nyatla | 48:00d211aac2ec | 151 | |
nyatla | 48:00d211aac2ec | 152 | void NetConfig::setZeroconf(bool v) |
nyatla | 48:00d211aac2ec | 153 | { |
nyatla | 48:00d211aac2ec | 154 | this->_inst.tcp_mode=(v?NyLPC_TcNetConfig_IPV4_FLAG_MODE_APIPA:NyLPC_TcNetConfig_IPV4_FLAG_MODE_MANUAL); |
nyatla | 48:00d211aac2ec | 155 | } |
nyatla | 48:00d211aac2ec | 156 | /** |
nyatla | 48:00d211aac2ec | 157 | * Set IPv4 ip address to instance. |
nyatla | 48:00d211aac2ec | 158 | */ |
nyatla | 48:00d211aac2ec | 159 | void NetConfig::setIpAddr(unsigned char ip1,unsigned char ip2,unsigned char ip3,unsigned char ip4) |
nyatla | 48:00d211aac2ec | 160 | { |
nyatla | 48:00d211aac2ec | 161 | NyLPC_TIPv4Addr_set(&(this->_inst.super.ip_addr),ip1,ip2,ip3,ip4); |
nyatla | 48:00d211aac2ec | 162 | } |
nyatla | 48:00d211aac2ec | 163 | /** |
nyatla | 48:00d211aac2ec | 164 | * Set IPv4 network mask value to instance. |
nyatla | 48:00d211aac2ec | 165 | */ |
nyatla | 48:00d211aac2ec | 166 | void NetConfig::setNetMask(unsigned char ip1,unsigned char ip2,unsigned char ip3,unsigned char ip4) |
nyatla | 48:00d211aac2ec | 167 | { |
nyatla | 48:00d211aac2ec | 168 | NyLPC_TIPv4Addr_set(&(this->_inst.super.netmask),ip1,ip2,ip3,ip4); |
nyatla | 48:00d211aac2ec | 169 | } |
nyatla | 48:00d211aac2ec | 170 | /** |
nyatla | 48:00d211aac2ec | 171 | * Set IPv4 default gateway address to instance. |
nyatla | 48:00d211aac2ec | 172 | */ |
nyatla | 48:00d211aac2ec | 173 | void NetConfig::setGateway(unsigned char ip1,unsigned char ip2,unsigned char ip3,unsigned char ip4) |
nyatla | 48:00d211aac2ec | 174 | { |
nyatla | 48:00d211aac2ec | 175 | NyLPC_TIPv4Addr_set(&(this->_inst.super.dr_addr),ip1,ip2,ip3,ip4); |
nyatla | 48:00d211aac2ec | 176 | } |
nyatla | 48:00d211aac2ec | 177 | /** |
nyatla | 48:00d211aac2ec | 178 | * Set ethernet mac address to instance. |
nyatla | 48:00d211aac2ec | 179 | */ |
nyatla | 48:00d211aac2ec | 180 | void NetConfig::setEmac(unsigned char a1,unsigned char a2,unsigned char a3,unsigned char a4,unsigned char a5,unsigned char a6) |
nyatla | 48:00d211aac2ec | 181 | { |
nyatla | 48:00d211aac2ec | 182 | NyLPC_TEthAddr_set(&(this->_inst.super.eth_mac),a1,a2,a3,a4,a5,a6); |
nyatla | 48:00d211aac2ec | 183 | //update only node field |
nyatla | 48:00d211aac2ec | 184 | for(NyLPC_TInt16 i=0;i<6;i++){ |
nyatla | 48:00d211aac2ec | 185 | NyLPC_uitoa2(this->_inst.super.eth_mac.addr[i],&this->_udn[5+24+i*2],16,2); |
nyatla | 37:fc4b4fd6a649 | 186 | } |
nyatla | 37:fc4b4fd6a649 | 187 | |
nyatla | 48:00d211aac2ec | 188 | } |
nyatla | 48:00d211aac2ec | 189 | void NetConfig::setSrvHttpPort(unsigned short port) |
nyatla | 48:00d211aac2ec | 190 | { |
nyatla | 48:00d211aac2ec | 191 | this->_inst.services.http_port=port; |
nyatla | 48:00d211aac2ec | 192 | } |
nyatla | 48:00d211aac2ec | 193 | void NetConfig::setSrvMdns(bool i_enable) |
nyatla | 48:00d211aac2ec | 194 | { |
nyatla | 48:00d211aac2ec | 195 | if(i_enable) { |
nyatla | 48:00d211aac2ec | 196 | this->_inst.services.flags|=NyLPC_TcNetConfig_SERVICE_FLAG_MDNS; |
nyatla | 48:00d211aac2ec | 197 | } else { |
nyatla | 48:00d211aac2ec | 198 | this->_inst.services.flags&=(~NyLPC_TcNetConfig_SERVICE_FLAG_MDNS); |
nyatla | 48:00d211aac2ec | 199 | } |
nyatla | 48:00d211aac2ec | 200 | } |
nyatla | 48:00d211aac2ec | 201 | void NetConfig::setSrvUPnP(bool i_enable) |
nyatla | 48:00d211aac2ec | 202 | { |
nyatla | 48:00d211aac2ec | 203 | if(i_enable) { |
nyatla | 48:00d211aac2ec | 204 | this->_inst.services.flags|=NyLPC_TcNetConfig_SERVICE_FLAG_UPNP; |
nyatla | 48:00d211aac2ec | 205 | } else { |
nyatla | 48:00d211aac2ec | 206 | this->_inst.services.flags&=(~NyLPC_TcNetConfig_SERVICE_FLAG_UPNP); |
nyatla | 48:00d211aac2ec | 207 | } |
nyatla | 48:00d211aac2ec | 208 | } |
nyatla | 48:00d211aac2ec | 209 | |
nyatla | 48:00d211aac2ec | 210 | void NetConfig::setHostName(const char* i_hostname) |
nyatla | 48:00d211aac2ec | 211 | { |
nyatla | 48:00d211aac2ec | 212 | this->setHostName(i_hostname,strlen(i_hostname)); |
nyatla | 48:00d211aac2ec | 213 | } |
nyatla | 48:00d211aac2ec | 214 | void NetConfig::setHostName(const char* i_hostname,int len) |
nyatla | 48:00d211aac2ec | 215 | { |
nyatla | 48:00d211aac2ec | 216 | int l=(len>(NyLPC_TcNetConfig_HOSTNAME_LEN-1))?NyLPC_TcNetConfig_HOSTNAME_LEN-1:len; |
nyatla | 48:00d211aac2ec | 217 | memcpy(this->_inst.hostname,i_hostname,l); |
nyatla | 48:00d211aac2ec | 218 | *(this->_inst.hostname+l)='\0'; |
nyatla | 48:00d211aac2ec | 219 | } |
nyatla | 48:00d211aac2ec | 220 | void NetConfig::setFriendlyName(const char* i_name) |
nyatla | 48:00d211aac2ec | 221 | { |
nyatla | 48:00d211aac2ec | 222 | this->_dns_record.name=this->_upnp_desc.frendly_name=(i_name==NULL?STR_EMPTY:i_name); |
nyatla | 48:00d211aac2ec | 223 | } |
nyatla | 48:00d211aac2ec | 224 | void NetConfig::setUPnPManufactur(const char* i_name,const char* i_url) |
nyatla | 48:00d211aac2ec | 225 | { |
nyatla | 48:00d211aac2ec | 226 | this->_upnp_desc.manufacturer=i_name==NULL?STR_EMPTY:i_name; |
nyatla | 48:00d211aac2ec | 227 | this->_upnp_desc.manufacturer_url=i_name==NULL?STR_EMPTY:i_url; |
nyatla | 48:00d211aac2ec | 228 | } |
nyatla | 48:00d211aac2ec | 229 | void NetConfig::setUPnPModel(const char* i_name,const char* i_number,const char* i_url,const char* i_description) |
nyatla | 48:00d211aac2ec | 230 | { |
nyatla | 48:00d211aac2ec | 231 | this->_upnp_desc.model_descriprion=i_description==NULL?STR_EMPTY:i_description; |
nyatla | 48:00d211aac2ec | 232 | this->_upnp_desc.model_name=i_name==NULL?STR_EMPTY:i_name; |
nyatla | 48:00d211aac2ec | 233 | this->_upnp_desc.model_number=i_number; |
nyatla | 48:00d211aac2ec | 234 | this->_upnp_desc.model_url=i_url; |
nyatla | 48:00d211aac2ec | 235 | } |
nyatla | 48:00d211aac2ec | 236 | void NetConfig::setUPnPSerialNumber(const char* i_number) |
nyatla | 48:00d211aac2ec | 237 | { |
nyatla | 48:00d211aac2ec | 238 | this->_upnp_desc.serial_number=i_number; |
nyatla | 48:00d211aac2ec | 239 | } |
nyatla | 48:00d211aac2ec | 240 | void NetConfig::setUPnPUdn(unsigned long i_time_l,unsigned short i_time_m,unsigned short i_time_h,unsigned short i_sq) |
nyatla | 48:00d211aac2ec | 241 | { |
nyatla | 48:00d211aac2ec | 242 | NyLPC_TcUuid_t uuid; |
nyatla | 48:00d211aac2ec | 243 | NyLPC_cUuid_initialize(&uuid); |
nyatla | 48:00d211aac2ec | 244 | NyLPC_cUuid_setTimeBase(&uuid,i_time_l,(i_time_h<<16)|i_time_m,i_sq,&(this->_inst.super.eth_mac)); |
nyatla | 48:00d211aac2ec | 245 | strcpy(this->_udn,"uuid:"); |
nyatla | 48:00d211aac2ec | 246 | NyLPC_cUuid_toString(&uuid,this->_udn+5); |
nyatla | 49:d4334acc3ec3 | 247 | NyLPC_cUuid_finalize(&uuid); |
nyatla | 48:00d211aac2ec | 248 | } |
nyatla | 48:00d211aac2ec | 249 | |
nyatla | 48:00d211aac2ec | 250 | void NetConfig::setUPnPPresentationURL(const char* i_url) |
nyatla | 48:00d211aac2ec | 251 | { |
nyatla | 48:00d211aac2ec | 252 | this->_upnp_desc.presentation_url=i_url; |
nyatla | 48:00d211aac2ec | 253 | } |
nyatla | 48:00d211aac2ec | 254 | void NetConfig::setCustomUPnPDescription(const struct NyLPC_TUPnPDevDescDevice* i_ref_description) |
nyatla | 48:00d211aac2ec | 255 | { |
nyatla | 48:00d211aac2ec | 256 | this->_ref_custom_upnp_desc=i_ref_description; |
nyatla | 48:00d211aac2ec | 257 | } |
nyatla | 48:00d211aac2ec | 258 | void NetConfig::setCustomMdnsRecord(const struct NyLPC_TDnsRecord* i_ref_record) |
nyatla | 48:00d211aac2ec | 259 | { |
nyatla | 48:00d211aac2ec | 260 | this->_ref_custom_dns_record=i_ref_record; |
nyatla | 48:00d211aac2ec | 261 | } |
nyatla | 48:00d211aac2ec | 262 | |
nyatla | 48:00d211aac2ec | 263 | bool NetConfig::loadFromFile(const char* i_file) |
nyatla | 48:00d211aac2ec | 264 | { |
nyatla | 48:00d211aac2ec | 265 | const static char* tbl[]= { |
nyatla | 48:00d211aac2ec | 266 | "macaddr", //0 |
nyatla | 48:00d211aac2ec | 267 | "ipaddr", //1 |
nyatla | 48:00d211aac2ec | 268 | "netmask", //2 |
nyatla | 48:00d211aac2ec | 269 | "gateway", //3 |
nyatla | 48:00d211aac2ec | 270 | "srv_http_port",//4 |
nyatla | 48:00d211aac2ec | 271 | "srv_mdns",//5 |
nyatla | 48:00d211aac2ec | 272 | "host",//6 |
nyatla | 48:00d211aac2ec | 273 | }; |
nyatla | 48:00d211aac2ec | 274 | char tmp[32]; |
nyatla | 48:00d211aac2ec | 275 | union { |
nyatla | 48:00d211aac2ec | 276 | unsigned char u8[6]; |
nyatla | 48:00d211aac2ec | 277 | NyLPC_TUInt32 u32; |
nyatla | 48:00d211aac2ec | 278 | } v; |
nyatla | 48:00d211aac2ec | 279 | const char* p;//pointer to read |
nyatla | 48:00d211aac2ec | 280 | const char* key; |
nyatla | 48:00d211aac2ec | 281 | const char* t; |
nyatla | 48:00d211aac2ec | 282 | int l; |
nyatla | 48:00d211aac2ec | 283 | FILE* fp = fopen(i_file,"r"); |
nyatla | 48:00d211aac2ec | 284 | if(fp==NULL) { |
nyatla | 48:00d211aac2ec | 285 | return false; |
nyatla | 48:00d211aac2ec | 286 | } |
nyatla | 48:00d211aac2ec | 287 | //read from values |
nyatla | 48:00d211aac2ec | 288 | while(fgets(tmp,31,fp)) { |
nyatla | 48:00d211aac2ec | 289 | p=NyLPC_cFormatTextReader_seekSpace(tmp)+tmp;//skip space |
nyatla | 48:00d211aac2ec | 290 | l=NyLPC_cFormatTextReader_readWord(p,&key); |
nyatla | 48:00d211aac2ec | 291 | for(int i=0; i<7; i++) { |
nyatla | 48:00d211aac2ec | 292 | if(l>=0 && NyLPC_strnicmp(key,tbl[i],l)==0) { |
nyatla | 48:00d211aac2ec | 293 | p+=l;//skip keyname |
nyatla | 48:00d211aac2ec | 294 | p=NyLPC_cFormatTextReader_seekSpace(p)+p;//skip space |
nyatla | 48:00d211aac2ec | 295 | if(*p!='=') { |
nyatla | 48:00d211aac2ec | 296 | break;//check equal |
nyatla | 48:00d211aac2ec | 297 | } |
nyatla | 48:00d211aac2ec | 298 | p++; |
nyatla | 48:00d211aac2ec | 299 | //skip space |
nyatla | 48:00d211aac2ec | 300 | p=NyLPC_cFormatTextReader_seekSpace(p)+p;//skip space |
nyatla | 48:00d211aac2ec | 301 | switch(i) { |
nyatla | 37:fc4b4fd6a649 | 302 | case 0://macaddr |
nyatla | 48:00d211aac2ec | 303 | if(NyLPC_cFormatTextReader_readMacAddr(p,v.u8)!=0) { |
nyatla | 37:fc4b4fd6a649 | 304 | this->setEmac(v.u8[0],v.u8[1],v.u8[2],v.u8[3],v.u8[4],v.u8[5]); |
nyatla | 13:a71705c5e6fd | 305 | } |
nyatla | 13:a71705c5e6fd | 306 | break; |
nyatla | 37:fc4b4fd6a649 | 307 | case 1://ipaddr |
nyatla | 48:00d211aac2ec | 308 | if(NyLPC_cFormatTextReader_readIpAddr(p,v.u8)!=0) { |
nyatla | 37:fc4b4fd6a649 | 309 | this->setIpAddr(v.u8[0],v.u8[1],v.u8[2],v.u8[3]); |
nyatla | 37:fc4b4fd6a649 | 310 | this->setZeroconf(false); |
nyatla | 48:00d211aac2ec | 311 | } else { |
nyatla | 48:00d211aac2ec | 312 | if(NyLPC_cFormatTextReader_readWord(p,&t)==4) { |
nyatla | 48:00d211aac2ec | 313 | if(NyLPC_strnicmp(t,"auto",4)==0) { |
nyatla | 37:fc4b4fd6a649 | 314 | this->setZeroconf(true); |
nyatla | 37:fc4b4fd6a649 | 315 | } |
nyatla | 37:fc4b4fd6a649 | 316 | } |
nyatla | 13:a71705c5e6fd | 317 | } |
nyatla | 13:a71705c5e6fd | 318 | break; |
nyatla | 13:a71705c5e6fd | 319 | case 2: |
nyatla | 48:00d211aac2ec | 320 | if(NyLPC_cFormatTextReader_readIpAddr(p,v.u8)!=0) { |
nyatla | 37:fc4b4fd6a649 | 321 | this->setNetMask(v.u8[0],v.u8[1],v.u8[2],v.u8[3]); |
nyatla | 13:a71705c5e6fd | 322 | } |
nyatla | 13:a71705c5e6fd | 323 | break; |
nyatla | 13:a71705c5e6fd | 324 | case 3: |
nyatla | 48:00d211aac2ec | 325 | if(NyLPC_cFormatTextReader_readIpAddr(p,v.u8)!=0) { |
nyatla | 37:fc4b4fd6a649 | 326 | this->setGateway(v.u8[0],v.u8[1],v.u8[2],v.u8[3]); |
nyatla | 37:fc4b4fd6a649 | 327 | } |
nyatla | 37:fc4b4fd6a649 | 328 | break; |
nyatla | 37:fc4b4fd6a649 | 329 | case 4: |
nyatla | 48:00d211aac2ec | 330 | if(NyLPC_cFormatTextReader_readUInt(p,&(v.u32))!=0) { |
nyatla | 37:fc4b4fd6a649 | 331 | this->setSrvHttpPort((unsigned short)v.u32); |
nyatla | 37:fc4b4fd6a649 | 332 | } |
nyatla | 37:fc4b4fd6a649 | 333 | break; |
nyatla | 37:fc4b4fd6a649 | 334 | case 5: |
nyatla | 37:fc4b4fd6a649 | 335 | l=NyLPC_cFormatTextReader_readWord(p,&t); |
nyatla | 48:00d211aac2ec | 336 | if((*t=='y' || *t=='Y')) { |
nyatla | 37:fc4b4fd6a649 | 337 | this->setSrvMdns(true); |
nyatla | 48:00d211aac2ec | 338 | } else if((*t=='n' || *t=='N')) { |
nyatla | 37:fc4b4fd6a649 | 339 | this->setSrvMdns(false); |
nyatla | 37:fc4b4fd6a649 | 340 | } |
nyatla | 37:fc4b4fd6a649 | 341 | break; |
nyatla | 37:fc4b4fd6a649 | 342 | case 6: |
nyatla | 37:fc4b4fd6a649 | 343 | l=NyLPC_cFormatTextReader_readWord(p,&t); |
nyatla | 48:00d211aac2ec | 344 | if(l>1) { |
nyatla | 37:fc4b4fd6a649 | 345 | this->setHostName(t,l); |
nyatla | 13:a71705c5e6fd | 346 | } |
nyatla | 13:a71705c5e6fd | 347 | break; |
nyatla | 13:a71705c5e6fd | 348 | default: |
nyatla | 13:a71705c5e6fd | 349 | break; |
nyatla | 13:a71705c5e6fd | 350 | } |
nyatla | 13:a71705c5e6fd | 351 | } |
nyatla | 13:a71705c5e6fd | 352 | } |
nyatla | 37:fc4b4fd6a649 | 353 | } |
nyatla | 48:00d211aac2ec | 354 | fclose(fp); |
nyatla | 48:00d211aac2ec | 355 | this->_syncServiceInfo(); |
nyatla | 48:00d211aac2ec | 356 | return true; |
nyatla | 48:00d211aac2ec | 357 | } |
nyatla | 3:0a94993be1f6 | 358 | }; |