/****************************************************************************** * FunctionName : user_check_ip * Description : check whether get ip addr or not * Parameters : none * Returns : none *******************************************************************************/ void ICACHE_FLASH_ATTR user_check_ip(void) { struct ip_info ipconfig; //disarm timer first os_timer_disarm(&test_timer); //get ip info of ESP8266 station wifi_get_ip_info(STATION_IF, &ipconfig); if (wifi_station_get_connect_status() == STATION_GOT_IP && ipconfig.ip.addr != 0) { //os_printf("got ip !!! \r\n"); wifi_set_broadcast_if(STATIONAP_MODE); // send UDP broadcast from both station and soft-AP interface user_udp_espconn.type = ESPCONN_UDP; user_udp_espconn.proto.udp = (esp_udp *)os_zalloc(sizeof(esp_udp)); user_udp_espconn.proto.udp->local_port = 1112; // set a available port const char udp_remote_ip[4] = {255, 255, 255, 255}; os_memcpy(user_udp_espconn.proto.udp->remote_ip, udp_remote_ip, 4); // ESP8266 udp remote IP user_udp_espconn.proto.udp->remote_port = 5556; // ESP8266 udp remote port espconn_regist_recvcb(&user_udp_espconn, user_udp_recv_cb); // register a udp packet receiving callback espconn_regist_sentcb(&user_udp_espconn, user_udp_sent_cb); // register a udp packet sent callback espconn_create(&user_udp_espconn); // create udp user_udp_send(); // send udp data os_timer_arm(&send_timer, 40, 0); } else { if ((wifi_station_get_connect_status() == STATION_WRONG_PASSWORD || wifi_station_get_connect_status() == STATION_NO_AP_FOUND || wifi_station_get_connect_status() == STATION_CONNECT_FAIL)) { //os_printf("connect fail !!! \r\n"); } else { //os_printf("still waiting...\n"); //re-arm timer to check ip os_timer_setfn(&test_timer, (os_timer_func_t *)user_check_ip, NULL); os_timer_arm(&test_timer, 500, 0); } } }
/****************************************************************************** * FunctionName : initSyslog * Description : Initialize the syslog library * Parameters : syslog_host -- the syslog host (host:port) * host: IP-Addr | hostname * Returns : none *******************************************************************************/ void ICACHE_FLASH_ATTR syslog_init(char *syslog_host) { if (!*syslog_host) { syslogState = SYSLOG_HALTED; return; } char host[32], *port = &host[0]; syslog_task = register_usr_task(syslog_udp_send_event); syslogHost.min_heap_size = flashConfig.syslog_minheap; syslogHost.port = 514; syslogState = SYSLOG_WAIT; os_strncpy(host, syslog_host, 32); while (*port && *port != ':') // find port delimiter port++; if (*port) { *port++ = '\0'; syslogHost.port = atoi(port); } wifi_set_broadcast_if(STATIONAP_MODE); // send UDP broadcast from both station and soft-AP interface syslog_espconn.type = ESPCONN_UDP; syslog_espconn.proto.udp = (esp_udp *)os_zalloc(sizeof(esp_udp)); syslog_espconn.proto.udp->local_port = espconn_port(); // set a available port #ifdef SYSLOG_UDP_RECV espconn_regist_recvcb(&syslog_espconn, syslog_udp_recv_cb); // register a udp packet receiving callback #endif espconn_regist_sentcb(&syslog_espconn, syslog_udp_sent_cb); // register a udp packet sent callback espconn_create(&syslog_espconn); // create udp if (UTILS_StrToIP((const char *)host, (void*)&syslogHost.addr)) { syslogState = SYSLOG_SENDING; syslog_send_udp(); } else { static struct espconn espconn_ghbn; espconn_gethostbyname(&espconn_ghbn, host, &syslogHost.addr, syslog_gethostbyname_cb); // syslog_send_udp is called by syslog_gethostbyname_cb() } #ifdef SYSLOG_UDP_RECV DBG("syslog_init: host: %s, port: %d, lport: %d, recvcb: %p, sentcb: %p, state: %d\n", host, syslogHost.port, syslog_espconn.proto.udp->local_port, syslog_udp_recv_cb, syslog_udp_sent_cb, syslogState ); #else DBG("syslog_init: host: %s, port: %d, lport: %d, rsentcb: %p, state: %d\n", host, syslogHost.port, syslog_espconn.proto.udp->local_port, syslog_udp_sent_cb, syslogState ); #endif }
void ICACHE_FLASH_ATTR init_dns() { //set softAP DHCP server router info uint8_t mode = 1; wifi_softap_set_dhcps_offer_option(OFFER_ROUTER, &mode); //1:station; 2:soft-AP, 3:station+soft-AP wifi_set_broadcast_if(3); // espconn_disconnect(&dnsConn); espconn_delete(&dnsConn); dnsConn.type=ESPCONN_UDP; dnsConn.state=ESPCONN_NONE; dnsUdp.local_port= 53; dnsConn.proto.udp=&dnsUdp; espconn_regist_recvcb(&dnsConn, dnsQueryReceived); int res = espconn_create(&dnsConn); NODE_DBG("DNS server init, conn=%p , status=%d", &dnsConn,res); }