#include "iksemel_extra.h"
#include "xmpp.h"
#include "sasl.h"
+#include "bind.h"
+#include "disco.h"
-int
+static void write_stream (hc_xmpp_t *);
+
+static void
+send_message_test (hc_xmpp_t *xmpp)
+{
+ hc_xmpp_send_disco_info (xmpp, hc_xmpp_server (xmpp));
+}
+
+static int
myhook (void *data, int type, iks *stanza)
{
- if (!iks_strcmp (iks_name (stanza), "stream:features"))
+ if (!iks_strcmp (iks_name (stanza), "iq"))
+ {
+ char *ns = iks_find_attrib (iks_child (stanza), "xmlns");
+ if (!iks_strcmp (ns, HC_XMPP_NS_BIND))
+ {
+ hc_xmpp_bind_result (data, stanza);
+ if (hc_xmpp_status (data) == HC_XMPP_BOUND &&
+ hc_xmpp_is_session_supported (data))
+ hc_xmpp_session (data);
+ }
+ else if (!iks_strcmp (ns, HC_XMPP_NS_SESSION))
+ {
+ hc_xmpp_session_result (data, stanza);
+ if (hc_xmpp_status (data) == HC_XMPP_SESSION)
+ send_message_test (data);
+ }
+ else if (!iks_strcmp (ns, HC_XMPP_NS_DISCO_INFO))
+ {
+ hc_xmpp_recv_disco (data, stanza);
+ }
+ }
+ else if (!iks_strcmp (iks_name (stanza), "stream:features"))
{
hc_xmpp_features (data, stanza);
- if (hc_xmpp_is_sasl_supported (data))
+ if (hc_xmpp_is_sasl_supported (data) & !hc_xmpp_is_sasl_enabled (data))
{
hc_xmpp_sasl_authenticate (data);
}
+ if (hc_xmpp_is_bind_supported (data))
+ {
+ hc_xmpp_bind (data);
+ }
}
else if (!iks_strcmp (iks_find_attrib (stanza, "xmlns"), HC_XMPP_NS_SASL))
{
hc_xmpp_sasl_iterate (data, stanza);
if (hc_xmpp_status (data) == HC_XMPP_AUTHENTICATED)
- fprintf (stdout, "Authenticated\n");
+ {
+ write_stream (data);
+ fprintf (stdout, "Authenticated\n");
+ }
}
else
{
return IKS_OK;
}
-void
+static void
write_stream (hc_xmpp_t *xmpp)
{
char *buffer = NULL;
free (buffer);
}
-void
+static void
loop (hc_xmpp_t *xmpp)
{
while (1)