--- 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