hc_xmpp_hook (void *data, int type, iks *stanza)
{
hc_xmpp_t *xmpp = (hc_xmpp_t *) data;
- if (!iks_strcmp (iks_name (stanza), "iq"))
+ if (!iks_strcmp (iks_name (stanza), "message"))
+ {
+ hc_xmpp_recv_message (xmpp, stanza);
+ }
+ else if (!iks_strcmp (iks_name (stanza), "presence"))
+ {
+ hc_xmpp_recv_presence (xmpp, stanza);
+ }
+ else if (!iks_strcmp (iks_name (stanza), "iq"))
{
char *ns = iks_find_attrib (iks_child (stanza), "xmlns");
hc_xmpp_hook_t hook;
- if (g_hash_table_lookup_extended (xmpp->nshooks, ns,
- NULL, (gpointer *) &hook))
+ if (ns != NULL && g_hash_table_lookup_extended (xmpp->nshooks, ns,
+ NULL, (gpointer *) &hook))
hook (xmpp, stanza);
}
else if (!iks_strcmp (iks_name (stanza), "stream:features"))