static int net_multicastJoinLeave( lua_State *L, int join) { size_t il; ip_addr_t multicast_addr; ip_addr_t if_addr; const char *multicast_ip; const char *if_ip; NODE_DBG("net_multicastJoin is called.\n"); if(! lua_isstring(L,1) ) return luaL_error( L, "wrong arg type" ); if_ip = luaL_checklstring( L, 1, &il ); if (if_ip != NULL) if ( if_ip[0] == '\0' || stricmp(if_ip,"any") == 0) { if_ip = "0.0.0.0"; il = 7; } if (if_ip == NULL || il > 15 || il < 7) return luaL_error( L, "invalid if ip" ); if_addr.addr = ipaddr_addr(if_ip); if(! lua_isstring(L,2) ) return luaL_error( L, "wrong arg type" ); multicast_ip = luaL_checklstring( L, 2, &il ); if (multicast_ip == NULL || il > 15 || il < 7) return luaL_error( L, "invalid multicast ip" ); multicast_addr.addr = ipaddr_addr(multicast_ip); if (join) { espconn_igmp_join(&if_addr, &multicast_addr); } else { espconn_igmp_leave(&if_addr, &multicast_addr); } return 0; }
int ICACHE_FLASH_ATTR JoinGropMDNS() { uint32_t ip = GetCurrentIP(); if( ip ) { struct ip_addr grpip; grpip.addr = MDNS_BRD; printf( "IGMP Joining: %08x %08x\n", ip, grpip.addr ); ets_memcpy( igmp_bound, &grpip.addr, 4 ); espconn_igmp_join( (ip_addr_t *)&ip, &grpip); return 0; } return 1; }