diff --git a/src/client/stabber.c b/src/client/stabber.c index 311f2de..7d0f73b 100644 --- a/src/client/stabber.c +++ b/src/client/stabber.c @@ -36,6 +36,12 @@ stbbr_for(char *id, char *stream) return 1; } +void +stbbr_wait_for(char *id) +{ + server_wait_for(id); +} + int stbbr_last_received(char *stanza) { diff --git a/src/server/server.c b/src/server/server.c index 5db028b..77204fe 100644 --- a/src/server/server.c +++ b/src/server/server.c @@ -177,6 +177,20 @@ id_callback(const char *id) } } +void +server_wait_for(char *id) +{ + log_println("WAIT for stanza with id: %s", id); + while (TRUE) { + int res = stanzas_contains_id(id); + if (res) { + log_println("WAIT complete for id: %s", id); + return; + } + usleep(1000 * 50); + } +} + void* _start_server_cb(void* userdata) { @@ -321,6 +335,7 @@ server_stop(void) static void _shutdown(void) { + log_println("SHUTDOWN"); // stanza_show_all(); xmppclient_end_session(client); client = NULL; diff --git a/src/server/server.h b/src/server/server.h index ca24310..72c1e60 100644 --- a/src/server/server.h +++ b/src/server/server.h @@ -4,6 +4,8 @@ int server_run(int port); void server_stop(void); +void server_wait_for(char *id); + void server_send(char *stream); #endif diff --git a/src/server/stanza.c b/src/server/stanza.c index a2e7705..40ae367 100644 --- a/src/server/stanza.c +++ b/src/server/stanza.c @@ -74,6 +74,29 @@ stanza_show_all(void) pthread_mutex_unlock(&stanzas_lock); } +int +stanzas_contains_id(char *id) +{ + pthread_mutex_lock(&stanzas_lock); + GList *curr = stanzas; + while (curr) { + XMPPStanza *stanza = curr->data; + GList *curr_attr = stanza->attrs; + while (curr_attr) { + XMPPAttr *attr = curr_attr->data; + if (g_strcmp0(attr->name, "id") == 0 && g_strcmp0(attr->value, id) == 0) { + pthread_mutex_unlock(&stanzas_lock); + return 1; + } + curr_attr = g_list_next(curr_attr); + } + curr = g_list_next(curr); + } + pthread_mutex_unlock(&stanzas_lock); + + return 0; +} + void stanza_add(XMPPStanza *stanza) { diff --git a/src/server/stanza.h b/src/server/stanza.h index 3c1f2cb..61d488f 100644 --- a/src/server/stanza.h +++ b/src/server/stanza.h @@ -29,6 +29,8 @@ XMPPStanza* stanza_get_child_by_name(XMPPStanza *stanza, char *name); int stanza_verify_any(XMPPStanza *stanza); int stanza_verify_last(XMPPStanza *stanza); +int stanzas_contains_id(char *id); + void stanza_free(XMPPStanza *stanza); void stanza_free_all(void); diff --git a/stabber.h b/stabber.h index 9280edc..bf45bf4 100644 --- a/stabber.h +++ b/stabber.h @@ -9,6 +9,8 @@ void stbbr_set_timeout(int seconds); int stbbr_auth_passwd(char *password); void stbbr_for(char *id, char *stream); +void stbbr_wait_for(char *id); + int stbbr_received(char *stanza); int stbbr_last_received(char *stanza);