From d83fd84d98c3c8fea53fbb84205ba0d422e1eaf3 Mon Sep 17 00:00:00 2001 From: James Booth Date: Tue, 12 May 2015 21:50:14 +0100 Subject: [PATCH] Added listen_for_xmlstart --- src/server/parser.c | 9 --------- src/server/server.c | 39 ++++++++++++++++++++++++++++++++++++++- 2 files changed, 38 insertions(+), 10 deletions(-) diff --git a/src/server/parser.c b/src/server/parser.c index 08f34c9..9db75c4 100644 --- a/src/server/parser.c +++ b/src/server/parser.c @@ -28,15 +28,6 @@ start_element(void *data, const char *element, const char **attribute) static void end_element(void *data, const char *element) { -// int i; -// for (i = 0; i < depth; i++) { -// printf(" "); -// } - -// if (last_content) { -// printf("%s Contents: \"%s\"\n", element, last_content); -// } -// if (text) { printf(" TEXT: %s\n", text->str); g_string_free(text, TRUE); diff --git a/src/server/server.c b/src/server/server.c index 372137a..bbf120b 100644 --- a/src/server/server.c +++ b/src/server/server.c @@ -16,6 +16,43 @@ #define AUTH_RESP "" #define END_STREAM "" +int +listen_for_xmlstart(XMPPClient *client) +{ + int read_size; + char buf[2]; + memset(buf, 0, sizeof(buf)); + + GString *stream = g_string_new(""); + errno = 0; + while ((read_size = recv(client->sock, buf, 1, 0)) > 0) { + g_string_append_len(stream, buf, read_size); + memset(buf, 0, sizeof(buf)); + if (g_strcmp0(stream->str, XML_START) == 0) { + break; + } + } + + // error + if (read_size == -1) { + perror("Error receiving on connection"); + xmppclient_end_session(client); + g_string_free(stream, TRUE); + return -1; + + // client closed + } else if (read_size == 0) { + printf("\n%s:%d - Client disconnected.\n", client->ip, client->port); + xmppclient_end_session(client); + g_string_free(stream, TRUE); + return -1; + } + + printf("RECV: %s\n", XML_START); + fflush(stdout); + return 0; +} + int listen_for(XMPPClient *client, const char * const stanza) { @@ -107,7 +144,7 @@ debug_client(XMPPClient *client) void connection_handler(XMPPClient *client) { - int res = listen_for(client, XML_START); + int res = listen_for_xmlstart(client); if (res == -1) { return; }