summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorxengineering <me@xengineering.eu>2022-12-04 13:31:33 +0100
committerxengineering <me@xengineering.eu>2022-12-04 13:31:33 +0100
commitd84ad1e1d7dc8dde2a0731c639d0ef3dd56cb72d (patch)
treebf78df896c9440fcca5af536f7694675febc02d8
parenta985fb91e9d559f2520633f962028b856631c020 (diff)
downloadlimox-d84ad1e1d7dc8dde2a0731c639d0ef3dd56cb72d.tar
limox-d84ad1e1d7dc8dde2a0731c639d0ef3dd56cb72d.tar.zst
limox-d84ad1e1d7dc8dde2a0731c639d0ef3dd56cb72d.zip
Implement client stream header sending
This starts the XML stream via the XMPP connection.
-rw-r--r--xmpp.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/xmpp.c b/xmpp.c
index 240dfc1..1546cdc 100644
--- a/xmpp.c
+++ b/xmpp.c
@@ -17,6 +17,7 @@
*/
+#define _GNU_SOURCE
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
@@ -100,6 +101,38 @@ struct addrinfo *get_addrinfo(char *domain)
}
/*
+ * Start XMPP stream via the given socket filedescriptor
+ *
+ * Returns 0 in case of success and -1 otherwise.
+ */
+int xmpp_start_stream(int sock_fd, char *jid, char *domainpart)
+{
+ const char *tmpl = "<stream:stream\
+ from='%s'\
+ to='%s'\
+ version='1.0'\
+ xml:lang='en'\
+ xmlns='jabber:client'\
+ xmlns:stream='http://etherx.jabber.org/streams'>";
+
+ char *msg;
+ asprintf(&msg, tmpl, jid, domainpart);
+ int len = strlen(msg);
+
+ int sent = send(sock_fd, msg, len, 0);
+ if (sent == len) {
+ printf(">>> %s\n", msg);
+ return 0;
+ } else if (sent == 0) {
+ printf("Failed to send any bytes to server!\n");
+ return -1;
+ } else {
+ printf("Could just send %d bytes of %d bytes to server!\n", sent, len);
+ return -1;
+ }
+}
+
+/*
* Initialize the network connection to the XMPP server
*
* TODO: Error handling is missing.
@@ -131,4 +164,10 @@ void xmpp_connect(void)
} else {
printf("Successfully connected.\n");
}
+
+ if (xmpp_start_stream(sock, jid, domain) == -1) {
+ printf("Failed to init stream!\n");
+ return;
+ }
+ printf("Stream init sent.\n");
}