lm_types.c
changeset 7 5db1448eb857
parent 6 90073cbb535d
child 11 a8c6460d612b
--- 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