int inject_message(lua_State* lua) { static const char* default_type = "txt"; static const char* default_name = ""; void* luserdata = lua_touserdata(lua, lua_upvalueindex(1)); if (NULL == luserdata) { lua_pushstring(lua, "inject_message() invalid lightuserdata"); lua_error(lua); } lua_sandbox* lsb = (lua_sandbox*)luserdata; int n = lua_gettop(lua); if (n > 2) { lua_pushstring(lua, "inject_message() takes a maximum of 2 arguments"); lua_error(lua); } const char* type = default_type; const char* name = default_name; switch (n) { case 2: name = luaL_checkstring(lua, 2); // fall thru case 1: type = luaL_checkstring(lua, 1); break; } if (lsb->m_output.m_pos != 0) { int result = go_lua_inject_message(lsb->m_go, lsb->m_output.m_data, (char*)type, (char*)name); lsb->m_output.m_pos = 0; if (result != 0) { lua_pushstring(lua, "inject_message() exceeded MaxMsgLoops"); lua_error(lua); } } return 0; }
int inject_message(lua_State* lua) { void* luserdata = lua_touserdata(lua, lua_upvalueindex(1)); if (NULL == luserdata) { lua_pushstring(lua, "inject_message() invalid lightuserdata"); lua_error(lua); } if (lua_gettop(lua) != 0) { lua_pushstring(lua, "inject_message() takes no arguments"); lua_error(lua); } lua_sandbox* lsb = (lua_sandbox*)luserdata; if (lsb->m_output.m_pos != 0) { int result = go_lua_inject_message(lsb->m_go, lsb->m_output.m_data); lsb->m_output.m_pos = 0; if (result != 0) { lua_pushstring(lua, "inject_message() exceeded MaxMsgLoops"); lua_error(lua); } } return 0; }
int inject_message(lua_State* lua) { static const char* default_type = "txt"; static const char* default_name = ""; void* luserdata = lua_touserdata(lua, lua_upvalueindex(1)); if (NULL == luserdata) { luaL_error(lua, "inject_message() invalid lightuserdata"); } lua_sandbox* lsb = (lua_sandbox*)luserdata; void* ud = NULL; const char* type = default_type; const char* name = default_name; switch (lua_gettop(lua)) { case 0: break; case 2: name = luaL_checkstring(lua, 2); // fallthru case 1: switch (lua_type(lua, 1)) { case LUA_TSTRING: type = lua_tostring(lua, 1); if (strlen(type) == 0) type = default_type; break; case LUA_TTABLE: type = ""; if (serialize_table_as_pb(lsb) != 0) { luaL_error(lua, "inject_message() cound not encode protobuf - %s", lsb->m_error_message); } break; case LUA_TUSERDATA: ud = lua_touserdata(lua, 1); if (heka_circular_buffer == userdata_type(lua, ud, 1)) { circular_buffer* cb = (circular_buffer*)ud; type = get_output_format(cb); lsb->m_output.m_pos = 0; if (output_circular_buffer(lua, cb, &lsb->m_output)) { luaL_error(lua, lsb->m_error_message); } } else { luaL_typerror(lua, 1, "circular_buffer"); } break; default: luaL_typerror(lua, 1, "string, table, or circular_buffer"); break; } break; default: luaL_error(lua, "inject_message() takes a maximum of 2 arguments"); break; } if (lsb->m_output.m_pos != 0) { update_output_stats(lsb); if (lsb->m_usage[USAGE_TYPE_OUTPUT][USAGE_STAT_CURRENT] > lsb->m_usage[USAGE_TYPE_OUTPUT][USAGE_STAT_LIMIT]) { if (lsb->m_error_message[0] == 0) { luaL_error(lua, "output_limit exceeded"); } luaL_error(lua, lsb->m_error_message); } int result = go_lua_inject_message(lsb->m_go, lsb->m_output.m_data, (int)(lsb->m_output.m_pos), (char*)type, (char*)name); lsb->m_output.m_pos = 0; if (result != 0) { luaL_error(lua, "inject_message() exceeded MaxMsgLoops"); } } return 0; }