--- a/loudmouth/lm-connection.c Wed Oct 01 10:39:20 2003 +0000
+++ b/loudmouth/lm-connection.c Wed Oct 01 13:07:01 2003 +0000
@@ -42,6 +42,7 @@
#include "lm-internals.h"
#include "lm-parser.h"
#include "lm-sha.h"
+#include "lm-queue.h"
#include "lm-connection.h"
#define IN_BUFFER_SIZE 1024
@@ -90,7 +91,7 @@
LmCallback *disconnect_cb;
- GQueue *incoming_messages;
+ LmQueue *incoming_messages;
GSource *incoming_source;
gint ref_count;
@@ -232,7 +233,7 @@
_lm_message_type_to_string (lm_message_get_type (m)),
lm_message_node_get_attribute (m->node, "from"));
- g_queue_push_tail (connection->incoming_messages, m);
+ lm_queue_push_tail (connection->incoming_messages, m);
}
static gboolean
@@ -739,7 +740,7 @@
connection = ((LmIncomingSource *)source)->connection;
- return !g_queue_is_empty (connection->incoming_messages);
+ return !lm_queue_is_empty (connection->incoming_messages);
}
static gboolean
@@ -758,7 +759,7 @@
connection = ((LmIncomingSource *) source)->connection;
- m = (LmMessage *) g_queue_pop_head (connection->incoming_messages);
+ m = (LmMessage *) lm_queue_pop_head (connection->incoming_messages);
if (m) {
connection_handle_message (connection, m);
@@ -820,7 +821,7 @@
connection->port = LM_CONNECTION_DEFAULT_PORT;
connection->use_ssl = FALSE;
connection->disconnect_cb = NULL;
- connection->incoming_messages = g_queue_new ();
+ connection->incoming_messages = lm_queue_new ();
connection->incoming_source = connection_create_source (connection);
connection->id_handlers = g_hash_table_new_full (g_str_hash,
@@ -920,7 +921,6 @@
gboolean result;
gboolean finished = FALSE;
gboolean ret_val = FALSE;
- gint last_len = 0;
g_return_val_if_fail (connection != NULL, FALSE);
@@ -962,23 +962,25 @@
g_source_unref (connection->incoming_source);
while (!finished) {
- gint len;
+ gint n;
g_main_context_iteration (NULL, TRUE);
- len = connection->incoming_messages->length;
-
- if (len > last_len) {
+ if (lm_queue_is_empty (connection->incoming_messages)) {
+ continue;
+ }
+
+ for (n = 0; n < connection->incoming_messages->length; n++) {
LmMessage *m;
-
- last_len = len;
- m = (LmMessage *) g_queue_peek_tail (connection->incoming_messages);
+
+ m = lm_queue_peek_nth (connection->incoming_messages, n);
if (lm_message_get_type (m) == LM_MESSAGE_TYPE_STREAM) {
connection->stream_id =
g_strdup (lm_message_node_get_attribute (m->node, "id"));
ret_val = TRUE;
finished = TRUE;
- g_queue_pop_tail (connection->incoming_messages);
+ lm_queue_remove_nth (connection->incoming_messages, n);
+ break;
}
}
}
@@ -1399,7 +1401,6 @@
{
gchar *id;
LmMessage *reply = NULL;
- gint last_len = 0;
if (lm_message_node_get_attribute (message->node, "id")) {
id = g_strdup (lm_message_node_get_attribute (message->node,
@@ -1415,24 +1416,27 @@
lm_connection_send (connection, message, error);
while (!reply) {
- gint len;
const gchar *m_id;
-
+ gint n;
+
g_main_context_iteration (NULL, TRUE);
-
- len = connection->incoming_messages->length;
-
- if (len > last_len) {
+
+ if (lm_queue_is_empty (connection->incoming_messages)) {
+ continue;
+ }
+
+ for (n = 0; n < connection->incoming_messages->length; n++) {
LmMessage *m;
- last_len = len;
- m = (LmMessage *) g_queue_peek_tail (connection->incoming_messages);
+
+ m = lm_queue_peek_nth (connection->incoming_messages, n);
+
m_id = lm_message_node_get_attribute (m->node, "id");
if (m_id && strcmp (m_id, id) == 0) {
reply = m;
+ lm_queue_remove_nth (connection->incoming_messages, n);
+ break;
}
-
- g_queue_pop_tail (connection->incoming_messages);
}
}