--- a/mcabber/src/commands.c Mon Mar 13 19:13:37 2006 +0100
+++ b/mcabber/src/commands.c Mon Mar 13 19:18:20 2006 +0100
@@ -30,6 +30,7 @@
#include "hbuf.h"
#include "utils.h"
#include "settings.h"
+#include "events.h"
// Commands callbacks
static void do_roster(char *arg);
@@ -56,6 +57,7 @@
static void do_authorization(char *arg);
static void do_version(char *arg);
static void do_request(char *arg);
+static void do_event(char *arg);
// Global variable for the commands list
static GSList *Commands;
@@ -92,6 +94,7 @@
cmd_add("connect", "Connect to the server", 0, 0, &do_connect);
cmd_add("del", "Delete the current buddy", 0, 0, &do_del);
cmd_add("disconnect", "Disconnect from server", 0, 0, &do_disconnect);
+ cmd_add("event", "Process an event", 0, 0, &do_event);
cmd_add("group", "Change group display settings", COMPL_GROUP, 0, &do_group);
//cmd_add("help", "Display some help", COMPL_CMD, 0, NULL);
cmd_add("info", "Show basic info on current buddy", 0, 0, &do_info);
@@ -1942,6 +1945,43 @@
free_arg_lst(paramlst);
}
+static void do_event(char *arg)
+{
+ char **paramlst;
+ char *evid, *subcmd;
+ int action = -1;
+
+ paramlst = split_arg(arg, 2, 0); // id, subcmd
+ evid = *paramlst;
+ subcmd = *(paramlst+1);
+
+ if (!evid || !subcmd) {
+ // Special case: /event list
+ if (evid && !strcasecmp(evid, "list"))
+ evs_display_list();
+ else
+ scr_LogPrint(LPRINT_NORMAL,
+ "Missing parameter. Usage: /event num action");
+ free_arg_lst(paramlst);
+ return;
+ }
+
+ if (!strcasecmp(subcmd, "reject"))
+ action = 0;
+ else if (!strcasecmp(subcmd, "accept"))
+ action = 1;
+
+ if (action == -1) {
+ scr_LogPrint(LPRINT_NORMAL, "Wrong action parameter.");
+ } else if (action == 0 || action == 1) {
+ if (evs_callback(evid, EVS_CONTEXT_USER + action) == -1) {
+ scr_LogPrint(LPRINT_NORMAL, "Event %s not found.", evid);
+ }
+ }
+
+ free_arg_lst(paramlst);
+}
+
static void do_connect(char *arg)
{
mcabber_connect();
--- a/mcabber/src/events.h Mon Mar 13 19:13:37 2006 +0100
+++ b/mcabber/src/events.h Mon Mar 13 19:18:20 2006 +0100
@@ -7,8 +7,9 @@
#define EVS_DEFAULT_TIMEOUT 90
#define EVS_MAX_TIMEOUT 432000
-#define EVS_CONTEXT_USER 0
-#define EVS_CONTEXT_TIMEOUT 1
+#define EVS_CONTEXT_TIMEOUT 0
+#define EVS_CONTEXT_CANCEL 1
+#define EVS_CONTEXT_USER 2
/* Common structure for events (evs) and IQ requests (iqs) */
typedef struct {
@@ -21,6 +22,11 @@
xmlnode xmldata;
} eviqs;
+eviqs *evs_new(guint8 type, time_t timeout);
+int evs_del(const char *evid);
+int evs_callback(const char *evid, guint evcontext);
+void evs_check_timeout(time_t now_t);
+void evs_display_list(void);
#endif /* __EVENTS_H__ */