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