示例#1
0
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;
}
示例#2
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;
}