From: Thadeu Lima de Souza Cascardo Date: Mon, 24 Nov 2008 23:29:52 +0000 (-0200) Subject: Added support for a message hook and simple message sending X-Git-Url: http://git.cascardo.info/?p=cascardo%2Fchat.git;a=commitdiff_plain;h=8a0e2834ab01c824196aab0e81c713f6b88110cd Added support for a message hook and simple message sending --- diff --git a/Makefile b/Makefile index de2d9c2..2b9dd43 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ OBJECTS = sort_udns.o tcp_connect.o iksemel_extra.o \ - xmpp.o features.o sasl.o bind.o disco.o hook.o + xmpp.o features.o sasl.o bind.o disco.o hook.o message.o CC = gcc CFLAGS = -g -Wall `pkg-config --cflags iksemel libgsasl glib-2.0` LIBS = -ludns `pkg-config --libs iksemel libgsasl glib-2.0` diff --git a/hook.c b/hook.c index 43eeef2..e91e9fb 100644 --- a/hook.c +++ b/hook.c @@ -54,7 +54,11 @@ int 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), "iq")) { char *ns = iks_find_attrib (iks_child (stanza), "xmlns"); hc_xmpp_hook_t hook; diff --git a/message.c b/message.c new file mode 100644 index 0000000..be28d5d --- /dev/null +++ b/message.c @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2008 Thadeu Lima de Souza Cascardo + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include "xmpp.h" + +void +hc_xmpp_send_message (hc_xmpp_t *xmpp, char *to, char *body) +{ + iks *msg; + iks *bd; + msg = iks_new ("message"); + iks_insert_attrib (msg, "to", to); + bd = iks_insert (msg, "body"); + iks_insert_cdata (bd, body, 0); + hc_xmpp_send_iks (xmpp, msg); + iks_delete (msg); +} diff --git a/message.h b/message.h new file mode 100644 index 0000000..a9bde84 --- /dev/null +++ b/message.h @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2008 Thadeu Lima de Souza Cascardo + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef HC_XMPP_MESSAGE_H +#define HC_XMPP_MESSAGE_H + +void hc_xmpp_send_message (hc_xmpp_t *, char *, char *); + +#endif diff --git a/xmpp.c b/xmpp.c index e5eed9d..94cd9ab 100644 --- a/xmpp.c +++ b/xmpp.c @@ -38,6 +38,7 @@ hc_xmpp_new (iksStreamHook *hook, char *server, char *user, char *pass) xmpp->tls = NONE; xmpp->sasl = NONE; xmpp->status = HC_XMPP_NONE; + xmpp->msghook = NULL; xmpp->nshooks = g_hash_table_new (g_str_hash, g_str_equal); g_hash_table_insert (xmpp->nshooks, HC_XMPP_NS_BIND, hc_xmpp_hook_bind); g_hash_table_insert (xmpp->nshooks, HC_XMPP_NS_SESSION, hc_xmpp_hook_session); @@ -160,3 +161,16 @@ hc_xmpp_register_ns_hook (hc_xmpp_t *xmpp, char *ns, hc_xmpp_hook_t hook) { g_hash_table_insert (xmpp->nshooks, ns, hook); } + +void +hc_xmpp_set_msg_hook (hc_xmpp_t *xmpp, hc_xmpp_hook_t hook) +{ + xmpp->msghook = hook; +} + +void +hc_xmpp_recv_message (hc_xmpp_t *xmpp, iks *stanza) +{ + if (xmpp->msghook) + xmpp->msghook (xmpp, stanza); +} diff --git a/xmpp.h b/xmpp.h index 66c64d2..c45d7ac 100644 --- a/xmpp.h +++ b/xmpp.h @@ -62,5 +62,6 @@ int hc_xmpp_status (hc_xmpp_t *); int hc_xmpp_hook (void *, int, iks *); void hc_xmpp_send_stream (hc_xmpp_t *); void hc_xmpp_register_ns_hook (hc_xmpp_t *, char *, hc_xmpp_hook_t); +void hc_xmpp_recv_message (hc_xmpp_t *, iks *); #endif diff --git a/xmpp_internal.h b/xmpp_internal.h index 2a120e0..1196cf8 100644 --- a/xmpp_internal.h +++ b/xmpp_internal.h @@ -42,6 +42,7 @@ struct _hc_xmpp_t iksparser *parser; Gsasl *sasl_ctx; Gsasl_session *sasl_session; + hc_xmpp_hook_t msghook; GHashTable *nshooks; int fd; int tls;