From: Thadeu Lima de Souza Cascardo Date: Sun, 2 Nov 2008 03:15:55 +0000 (-0200) Subject: Detect if PLAIN SASL mechanism is supported X-Git-Url: http://git.cascardo.info/?p=cascardo%2Fchat.git;a=commitdiff_plain;h=f0208965b5b575e8f3c929663c1f797a1f3cdfbc Detect if PLAIN SASL mechanism is supported --- diff --git a/tictactoe.c b/tictactoe.c index 5c7e599..19b4891 100644 --- a/tictactoe.c +++ b/tictactoe.c @@ -26,11 +26,55 @@ #include "tcp_connect.h" #include "iksemel_extra.h" +void +plain (void *data) +{ + iks *mplain; + char *str; + mplain = iks_new ("auth"); + iks_insert_attrib (mplain, "xmlns", "urn:ietf:params:xml:ns:xmpp-sasl"); + iks_insert_attrib (mplain, "mechanism", "PLAIN"); + str = iks_string (iks_stack (mplain), mplain); + write ((int) data, str, strlen (str)); + iks_delete (mplain); +} + +void +sasl (void *data, iks *s) +{ + iks *m; + for (m = iks_child (s); m != NULL; m = iks_next (m)) + { + if (!iks_strcmp (iks_name (m), "mechanism") && + !iks_strcmp (iks_cdata (iks_child (m)), "PLAIN")) + plain (data); + } +} + +void +features (void *data, iks *s) +{ + iks *f; + for (f = iks_child (s); f != NULL; f = iks_next (f)) + { + if (!iks_strcmp (iks_name (f), "mechanisms") && + !iks_strcmp (iks_find_attrib (f, "xmlns"), + "urn:ietf:params:xml:ns:xmpp-sasl")) + sasl (data, f); + } +} + int myhook (void *data, int type, iks *stanza) { - char *s = iks_string (iks_stack (stanza), stanza); - write (1, s, strlen (s)); + if (!iks_strcmp (iks_name (stanza), "stream:features")) + { + features (data, stanza); + } + else + { + fprintf (stderr, "Other: %s\n", iks_string (iks_stack (stanza), stanza)); + } return IKS_OK; } @@ -62,7 +106,7 @@ main (int argc, char **argv) iksparser *parser; dns_init (NULL, 1); fd = hc_tcp_connect (server, "xmpp-client"); - parser = iks_extra_stream_new (NULL, myhook); + parser = iks_extra_stream_new ((void *) fd, myhook); write_stream (fd, server); loop (parser, fd); return 0;