# HG changeset patch # User Mikael Berthe # Date 1142273900 -3600 # Node ID 53a0004115874e37fc708477b0379fedbb10889a # Parent 9875bc774ddfb274b628cc6831ba08bc6885feef Add /event command diff -r 9875bc774ddf -r 53a000411587 mcabber/src/commands.c --- 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(); diff -r 9875bc774ddf -r 53a000411587 mcabber/src/events.h --- 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__ */