lm_message.c
changeset 6 90073cbb535d
parent 4 5770be2d5f3f
child 7 5db1448eb857
--- a/lm_message.c	Mon Feb 16 01:32:12 2009 +0200
+++ b/lm_message.c	Fri Feb 20 23:07:43 2009 +0200
@@ -3,6 +3,7 @@
 #include <lauxlib.h>
 #include <loudmouth/loudmouth.h>
 
+#include "config.h"
 #include "util.h"
 #include "lm_types.h"
 
@@ -31,6 +32,8 @@
 	{ "stream:stream",   LM_MESSAGE_TYPE_STREAM          },
 	{ "stream:error",    LM_MESSAGE_TYPE_STREAM_ERROR    },
 	{ "stream:features", LM_MESSAGE_TYPE_STREAM_FEATURES },
+	{ "stream_error",    LM_MESSAGE_TYPE_STREAM_ERROR    },
+	{ "stream_features", LM_MESSAGE_TYPE_STREAM_FEATURES },
 	{ NULL,              0                               },
 };
 
@@ -67,15 +70,14 @@
 	const char *to   = luaL_checkstring (L, 1);
 	int         type = luaL_checkenum (L, 2, llm_message_type);
 	LmMessage *message;
-	if (lua_gettop (L) > 2) {
+	if (lua_gettop (L) > 2)
 		message = lm_message_new_with_sub_type (to, type,
 						luaL_checkenum (L, 3, llm_message_sub_type));
-		lua_pop (L, 1);
-	} else
+	else
 		message = lm_message_new (to, type);
-	lua_pop (L, 2);
 	llm_message_bless (L, message);
 	lm_message_unref (message);
+	D ("Message %X created", (int) message);
 	return 1;
 }
 
@@ -87,7 +89,6 @@
 {
 	luaL_argcheck (L, lua_islightuserdata (L, 1), 1, "lm message lightuserdata expected");
 	llm_message_bless (L, lua_touserdata (L, 1));
-	lua_remove (L, -2);
 	return 1;
 }
 
@@ -100,10 +101,12 @@
 	LmMessageNode *node = lm_message_get_node (object->message);
 	llm_message_node_bless (L, node);
 	// XXX lm_message_node_unref (node);
-	lua_remove (L, -2);
 	return 1;
 }
 
+// XXX: add node methods here to allow omitting of :node(): element
+// BTW, we can jus adapt node methods to work on messages too and register them here also
+
 /// message:type
 /// Returns two strings: message type and message sub type.
 /// R: message type, message sub type
@@ -112,7 +115,6 @@
 	llm_message_t *object = luaL_checklm_message (L, 1);
 	luaL_pushenum (L, lm_message_get_type (object->message), llm_message_type);
 	luaL_pushenum (L, lm_message_get_sub_type (object->message), llm_message_sub_type);
-	lua_remove (L, -3);
 	return 2;
 }
 
@@ -123,15 +125,14 @@
 {
 	llm_message_t *object = luaL_checklm_message (L, 1);
 	lua_pushlightuserdata (L, object->message);
-	lua_remove (L, -2);
 	return 1;
 }
 
 static int llm_message_gc (lua_State *L)
 {
-	llm_message_t *object = luaL_checklm_message (L, 1);
-	lm_message_unref (object->message);
-	lua_pop (L, 1);
+	llm_message_t *message = luaL_checklm_message (L, 1);
+	D ("Message %X gc called", (int) message);
+	lm_message_unref (message->message);
 	return 0;
 }