diff -r 90073cbb535d -r 5db1448eb857 lm_types.c --- a/lm_types.c Fri Feb 20 23:07:43 2009 +0200 +++ b/lm_types.c Sat Feb 21 12:43:51 2009 +0200 @@ -62,5 +62,23 @@ LLM_DEFINE (proxy, LmProxy) LLM_DEFINE (ssl, LmSSL) +LmMessageNode *luaL_checkLmMessageNode (lua_State *L, int index) +{ + void *object; + luaL_argcheck (L, lua_type (L, index) == LUA_TUSERDATA, index, "loudmouth message or message node expected"); + object = lua_touserdata (L, index); + lua_getmetatable (L, index); + luaL_getmetatable (L, "loudmouth.message"); + luaL_getmetatable (L, "loudmouth.message_node"); + if (lua_rawequal (L, -2, -3)) // Message + object = (void *) lm_message_get_node (((llm_message_t *) object)->message); + else if (lua_rawequal (L, -1, -3)) // Node + object = (void *) (((llm_message_node_t *) object)->message_node); + else + luaL_argerror (L, index, "loudmouth message or message node expected"); + lua_pop (L, 3); + return (LmMessageNode *) object; +} + #undef LLM_DEFINE