ekg2
|
00001 #ifndef __EKG_QUERIES 00002 #define __EKG_QUERIES 00003 00004 #ifdef __cplusplus 00005 extern "C" { 00006 #endif 00007 00008 #define QUERY_ARGS_MAX 12 00009 00010 enum query_arg_type { 00011 QUERY_ARG_END = 0, /* MUSTBE LAST ELEMENT OF `query_arg_type` */ 00012 00013 QUERY_ARG_CHARP, /* char * */ 00014 QUERY_ARG_CHARPP, /* char ** */ 00015 QUERY_ARG_INT, /* int */ 00016 QUERY_ARG_UINT, /* unsgined int */ /* -> time_t, uint32_t */ 00017 00018 QUERY_ARG_WINDOW = 100, /* window_t */ 00019 QUERY_ARG_FSTRING, /* fstring_t */ 00020 QUERY_ARG_USERLIST, /* userlist_t */ 00021 QUERY_ARG_SESSION /* session_t */ 00022 }; 00023 00024 struct query_def { 00025 int id; 00026 char *name; 00027 enum query_arg_type params[QUERY_ARGS_MAX]; /* scripts will use it */ 00028 }; 00029 00030 /* uniq id of known queries..., add new just before QUERY_EXTERNAL */ 00031 enum queries_id { 00032 MAIL_COUNT = 0, DAY_CHANGED, STATUS_SHOW, PLUGIN_PRINT_VERSION, 00033 SET_VARS_DEFAULT, VARIABLE_CHANGED, 00034 00035 BINDING_COMMAND, BINDING_DEFAULT, BINDING_SET, /* bindings */ 00036 EVENT_ADDED, EVENT_REMOVED, /* event events */ 00037 MESSAGE_ENCRYPT, MESSAGE_DECRYPT, /* encryption */ 00038 METACONTACT_ADDED, METACONTACT_ITEM_ADDED, METACONTACT_ITEM_REMOVED, METACONTACT_REMOVED,/* metacontact */ 00039 PROTOCOL_MESSAGE_SENT, PROTOCOL_MESSAGE_RECEIVED, PROTOCOL_MESSAGE_POST, /* proto-message-events */ 00040 EVENT_AWAY, EVENT_AVAIL, EVENT_DESCR, EVENT_ONLINE, EVENT_NA, /* status-events */ 00041 USERLIST_ADDED, USERLIST_CHANGED, USERLIST_REMOVED, USERLIST_RENAMED, USERLIST_INFO, /* userlist */ 00042 USERLIST_PRIVHANDLE, 00043 SESSION_ADDED, SESSION_CHANGED, SESSION_REMOVED, SESSION_RENAMED, SESSION_STATUS, /* session */ 00044 EKG_SIGUSR1, EKG_SIGUSR2, /* signals */ 00045 CONFIG_POSTINIT, QUITTING, /* ekg-events */ 00046 00047 IRC_TOPIC, IRC_PROTOCOL_MESSAGE, IRC_KICK, /* irc-events */ 00048 RSS_MESSAGE, /* rss-events */ 00049 00050 PROTOCOL_CONNECTED, PROTOCOL_DISCONNECTED, PROTOCOL_MESSAGE, PROTOCOL_MESSAGE_ACK, PROTOCOL_STATUS, 00051 PROTOCOL_VALIDATE_UID, PROTOCOL_XSTATE, 00052 00053 ADD_NOTIFY, REMOVE_NOTIFY, 00054 PROTOCOL_IGNORE, PROTOCOL_UNIGNORE, 00055 00056 CONFERENCE_RENAMED, 00057 00058 UI_BEEP, UI_IS_INITIALIZED, UI_KEYPRESS, UI_LOOP, UI_WINDOW_ACT_CHANGED, 00059 UI_WINDOW_CLEAR, UI_WINDOW_KILL, UI_WINDOW_NEW, UI_WINDOW_PRINT, UI_WINDOW_REFRESH, 00060 UI_WINDOW_SWITCH, UI_WINDOW_TARGET_CHANGED, 00061 00062 GPG_MESSAGE_ENCRYPT, GPG_MESSAGE_DECRYPT, GPG_SIGN, GPG_VERIFY, 00063 00064 UI_WINDOW_UPDATE_LASTLOG, 00065 SESSION_EVENT, 00066 UI_REFRESH, 00067 PROTOCOL_TYPING_OUT, 00068 UI_PASSWORD_INPUT, 00069 PROTOCOL_DISCONNECTING, 00070 00071 USERLIST_REFRESH, 00072 00073 EVENT_OFFLINE, 00074 00075 QUERY_EXTERNAL, 00076 }; 00077 00078 #ifdef __DECLARE_QUERIES_STUFF 00079 #undef __DECLARE_QUERIES_STUFF 00080 00081 /* list of known queries. keep it sorted with enum. */ 00082 00083 const struct query_def query_list[] = { 00084 { MAIL_COUNT, "mail-count", { 00085 QUERY_ARG_INT, /* mail count */ 00086 QUERY_ARG_END } }, 00087 00088 { DAY_CHANGED, "day-changed", { 00089 /* XXX: struct tm *, struct tm * */ 00090 QUERY_ARG_END } }, 00091 00092 { STATUS_SHOW, "status-show", { 00093 QUERY_ARG_CHARP, /* session uid */ 00094 QUERY_ARG_END } }, 00095 00096 { PLUGIN_PRINT_VERSION, "plugin-print-version", { 00097 QUERY_ARG_END } }, /* no params */ 00098 00099 { SET_VARS_DEFAULT, "set-vars-default", { 00100 QUERY_ARG_END } }, /* no params */ 00101 00102 { VARIABLE_CHANGED, "variable-changed", { 00103 QUERY_ARG_CHARP, /* variable */ 00104 QUERY_ARG_END } }, 00105 00106 { BINDING_COMMAND, "binding-command", { 00107 /* XXX */ 00108 QUERY_ARG_END } }, 00109 00110 { BINDING_DEFAULT, "binding-default", { 00111 /* XXX */ 00112 QUERY_ARG_END } }, 00113 00114 { BINDING_SET, "binding-set", { 00115 /* XXX */ 00116 QUERY_ARG_END } }, 00117 00118 { EVENT_ADDED, "event-added", { 00119 QUERY_ARG_CHARP, /* event name */ 00120 QUERY_ARG_END } }, 00121 00122 { EVENT_REMOVED, "event-removed", { 00123 /* XXX, never used */ 00124 QUERY_ARG_END } }, 00125 00126 { MESSAGE_ENCRYPT, "message-encrypt", { 00127 /* XXX */ 00128 QUERY_ARG_END } }, 00129 00130 { MESSAGE_DECRYPT, "message-decrypt", { 00131 /* XXX */ 00132 QUERY_ARG_END } }, 00133 00134 { METACONTACT_ADDED, "metacontact-added", { 00135 QUERY_ARG_CHARP, /* metacontact name */ 00136 QUERY_ARG_END } }, 00137 00138 { METACONTACT_ITEM_ADDED, "metacontact-item-added", { 00139 /* XXX */ 00140 QUERY_ARG_END } }, 00141 00142 { METACONTACT_ITEM_REMOVED, "metacontact-item-removed", { 00143 /* XXX */ 00144 QUERY_ARG_END } }, 00145 00146 { METACONTACT_REMOVED, "metacontact-removed", { 00147 QUERY_ARG_CHARP, /* metacontact name */ 00148 QUERY_ARG_END } }, 00149 00150 { PROTOCOL_MESSAGE_SENT, "protocol-message-sent", { 00151 QUERY_ARG_CHARP, /* session */ 00152 QUERY_ARG_CHARP, /* uid */ 00153 QUERY_ARG_CHARP, /* text */ 00154 QUERY_ARG_END } }, 00155 00156 { PROTOCOL_MESSAGE_RECEIVED, "protocol-message-received", { 00157 QUERY_ARG_CHARP, /* session uid */ 00158 QUERY_ARG_CHARP, /* uid */ 00159 QUERY_ARG_CHARPP, /* rcpts */ 00160 QUERY_ARG_CHARP, /* text */ 00161 QUERY_ARG_UINT, /* uint32_t */ /* format */ 00162 QUERY_ARG_UINT, /* time_t */ /* sent */ 00163 QUERY_ARG_INT, /* mclass */ 00164 QUERY_ARG_CHARP, /* seq */ 00165 QUERY_ARG_INT, /* secure */ 00166 QUERY_ARG_END } }, 00167 00168 { PROTOCOL_MESSAGE_POST, "protocol-message-post", { 00169 QUERY_ARG_CHARP, /* session uid */ 00170 QUERY_ARG_CHARP, /* uid */ 00171 QUERY_ARG_CHARPP, /* rcpts */ 00172 QUERY_ARG_UINT, /* uint32_t */ /* format */ 00173 QUERY_ARG_UINT, /* time_t */ /* sent */ 00174 QUERY_ARG_INT, /* mclass */ 00175 QUERY_ARG_CHARP, /* seq */ 00176 QUERY_ARG_INT, /* secure */ 00177 QUERY_ARG_END } }, 00178 00179 { EVENT_AWAY, "event_away", { 00180 QUERY_ARG_CHARP, /* session uid */ 00181 QUERY_ARG_CHARP, /* uid */ 00182 QUERY_ARG_END } }, 00183 00184 { EVENT_AVAIL, "event_avail", { 00185 /* XXX, emited, but noone connect to this. */ 00186 QUERY_ARG_CHARP, /* session uid */ 00187 QUERY_ARG_CHARP, /* uid */ 00188 QUERY_ARG_END } }, 00189 00190 { EVENT_DESCR, "event_descr", { 00191 QUERY_ARG_CHARP, /* session uid */ 00192 QUERY_ARG_CHARP, /* uid */ 00193 QUERY_ARG_CHARP, /* descr */ 00194 QUERY_ARG_END } }, 00195 00196 { EVENT_ONLINE, "event_online", { 00197 QUERY_ARG_CHARP, /* session uid */ 00198 QUERY_ARG_CHARP, /* uid */ 00199 QUERY_ARG_END } }, 00200 00201 { EVENT_NA, "event_na", { 00202 QUERY_ARG_CHARP, /* session uid */ 00203 QUERY_ARG_CHARP, /* uid */ 00204 QUERY_ARG_END } }, 00205 00206 { USERLIST_ADDED, "userlist-added", { 00207 /* XXX, we need here a session->uid too (?) */ 00208 00209 QUERY_ARG_CHARP, /* uid */ 00210 QUERY_ARG_CHARP, /* nickname */ 00211 QUERY_ARG_INT, /* quiet */ 00212 QUERY_ARG_END } }, 00213 00214 { USERLIST_CHANGED, "userlist-changed", { 00215 QUERY_ARG_CHARP, /* session uid */ 00216 QUERY_ARG_CHARP, /* uid */ 00217 QUERY_ARG_END } }, 00218 00219 { USERLIST_REMOVED, "userlist-removed", { 00220 /* XXX, we need here a session->uid too (?) */ 00221 00222 QUERY_ARG_CHARP, /* nickname or uid */ 00223 QUERY_ARG_CHARP, /* uid */ 00224 QUERY_ARG_END } }, 00225 00226 { USERLIST_RENAMED, "userlist-renamed", { 00227 /* XXX */ 00228 QUERY_ARG_END } }, 00229 00230 { USERLIST_INFO, "userlist-info", { 00231 /* XXX */ 00232 QUERY_ARG_END } }, 00233 00234 { USERLIST_PRIVHANDLE, "userlist-privhandle", { 00235 QUERY_ARG_USERLIST, /* userlist_t */ 00236 QUERY_ARG_INT, /* function */ 00237 /* optional things? */ 00238 QUERY_ARG_END } }, 00239 00240 { SESSION_ADDED, "session-added", { 00241 QUERY_ARG_CHARP, /* session uid */ 00242 QUERY_ARG_END } }, 00243 00244 { SESSION_CHANGED, "session-changed", { 00245 QUERY_ARG_END } }, /* no params */ 00246 00247 { SESSION_REMOVED, "session-removed", { 00248 QUERY_ARG_CHARP, /* session uid */ 00249 QUERY_ARG_END } }, 00250 00251 { SESSION_RENAMED, "session-renamed", { 00252 QUERY_ARG_CHARP, /* new session alias */ 00253 QUERY_ARG_END } }, 00254 00255 { SESSION_STATUS, "session-status", { 00256 /* XXX */ 00257 QUERY_ARG_END } }, 00258 00259 { EKG_SIGUSR1, "sigusr1", { 00260 QUERY_ARG_END } }, /* no params */ 00261 00262 { EKG_SIGUSR2, "sigusr2", { 00263 QUERY_ARG_END } }, /* no params */ 00264 00265 { CONFIG_POSTINIT, "config-postinit", { 00266 QUERY_ARG_END } }, /* no params */ 00267 00268 { QUITTING, "quitting", { 00269 /* XXX, emited, but never used */ 00270 QUERY_ARG_CHARP, /* reason */ 00271 QUERY_ARG_END } }, 00272 00273 { IRC_TOPIC, "irc-topic", { 00274 QUERY_ARG_CHARP, /* if CHANNEL -> topic; if USER -> ident@host */ 00275 QUERY_ARG_CHARP, /* if CHANNEL -> topicby; if USER -> realname */ 00276 QUERY_ARG_CHARP, /* if CHANNEL -> chanmodes; if USER -> undefined */ 00277 QUERY_ARG_END } }, 00278 00279 { IRC_PROTOCOL_MESSAGE, "irc-protocol-message", { 00280 QUERY_ARG_CHARP, /* session uid */ 00281 QUERY_ARG_CHARP, /* uid */ 00282 QUERY_ARG_CHARP, /* text */ 00283 QUERY_ARG_INT, /* isour */ 00284 QUERY_ARG_INT, /* foryou */ 00285 QUERY_ARG_INT, /* private */ 00286 QUERY_ARG_CHARP, /* channame */ 00287 QUERY_ARG_END } }, 00288 00289 { IRC_KICK, "irc-kick", { 00290 QUERY_ARG_CHARP, /* session uid */ 00291 QUERY_ARG_CHARP, /* nick */ 00292 QUERY_ARG_CHARP, /* channel */ 00293 QUERY_ARG_CHARP, /* kickedby */ 00294 QUERY_ARG_END } }, 00295 00296 { RSS_MESSAGE, "rss-message", { 00297 QUERY_ARG_CHARP, /* session uid */ 00298 QUERY_ARG_CHARP, /* uid */ 00299 QUERY_ARG_CHARP, /* proto headers */ 00300 QUERY_ARG_CHARP, /* headers */ 00301 QUERY_ARG_CHARP, /* title */ 00302 QUERY_ARG_CHARP, /* url */ 00303 QUERY_ARG_CHARP, /* descr */ 00304 QUERY_ARG_INT, /* new */ 00305 QUERY_ARG_INT, /* modify */ 00306 QUERY_ARG_END } }, 00307 00308 { PROTOCOL_CONNECTED, "protocol-connected", { 00309 QUERY_ARG_CHARP, /* session */ 00310 QUERY_ARG_END } }, 00311 00312 { PROTOCOL_DISCONNECTED, "protocol-disconnected", { 00313 QUERY_ARG_CHARP, /* session */ 00314 QUERY_ARG_CHARP, /* reason */ 00315 QUERY_ARG_INT, /* type */ 00316 QUERY_ARG_END } }, 00317 00318 { PROTOCOL_MESSAGE, "protocol-message", { 00319 QUERY_ARG_CHARP, /* session uid */ 00320 QUERY_ARG_CHARP, /* uid */ 00321 QUERY_ARG_CHARPP, /* rcpts */ 00322 QUERY_ARG_CHARP, /* text */ 00323 QUERY_ARG_UINT, /* uint32 */ /* format */ 00324 QUERY_ARG_UINT, /* time_t */ /* sent */ 00325 QUERY_ARG_INT, /* mclass */ 00326 QUERY_ARG_CHARP, /* seq */ 00327 QUERY_ARG_INT, /* dobeep */ 00328 QUERY_ARG_INT, /* secure */ 00329 QUERY_ARG_END } }, 00330 00331 { PROTOCOL_MESSAGE_ACK, "protocol-message-ack", { 00332 QUERY_ARG_CHARP, /* session uid */ 00333 QUERY_ARG_CHARP, /* uid */ 00334 QUERY_ARG_CHARP, /* seq */ 00335 QUERY_ARG_INT, /* status */ 00336 QUERY_ARG_END } }, 00337 00338 { PROTOCOL_STATUS, "protocol-status", { 00339 QUERY_ARG_CHARP, /* session uid */ 00340 QUERY_ARG_CHARP, /* uid */ 00341 QUERY_ARG_INT, /* status */ 00342 QUERY_ARG_CHARP, /* descr */ 00343 QUERY_ARG_UINT, /* time_t */ /* when */ 00344 QUERY_ARG_END } }, 00345 00346 { PROTOCOL_VALIDATE_UID, "protocol-validate-uid", { 00347 QUERY_ARG_CHARP, /* uid */ 00348 QUERY_ARG_INT, /* valid */ 00349 QUERY_ARG_END } }, 00350 00351 { PROTOCOL_XSTATE, "protocol-xstate", { 00352 QUERY_ARG_CHARP, /* session */ 00353 QUERY_ARG_CHARP, /* uid */ 00354 QUERY_ARG_INT, /* state - bits on */ 00355 QUERY_ARG_INT, /* offstate - bits off */ 00356 QUERY_ARG_END } }, 00357 00358 { ADD_NOTIFY, "add-notify", { 00359 /* XXX */ 00360 QUERY_ARG_END } }, 00361 00362 { REMOVE_NOTIFY, "remove-notify", { 00363 /* XXX */ 00364 QUERY_ARG_END } }, 00365 00366 { PROTOCOL_IGNORE, "protocol-ignore", { 00367 QUERY_ARG_CHARP, /* session uid */ 00368 QUERY_ARG_CHARP, /* uid */ 00369 QUERY_ARG_INT, /* oldlevel */ 00370 QUERY_ARG_INT, /* newlevel */ 00371 QUERY_ARG_END } }, 00372 00373 { PROTOCOL_UNIGNORE, "protocol-unignore", { 00374 /* XXX */ 00375 QUERY_ARG_END } }, 00376 00377 { CONFERENCE_RENAMED, "conference-renamed", { 00378 /* XXX */ 00379 QUERY_ARG_END } }, 00380 00381 { UI_BEEP, "ui-beep", { 00382 QUERY_ARG_END } }, /* no params */ 00383 00384 { UI_IS_INITIALIZED, "ui-is-initialized", { 00385 QUERY_ARG_INT, /* is_ui */ 00386 QUERY_ARG_END } }, 00387 00388 { UI_KEYPRESS, "ui-keypress", { 00389 QUERY_ARG_INT, /* XXX uint? *//* key */ 00390 QUERY_ARG_END } }, 00391 00392 { UI_LOOP, "ui-loop", { 00393 QUERY_ARG_END } }, /* no params */ 00394 00395 { UI_WINDOW_ACT_CHANGED, "ui-window-act-changed", { 00396 QUERY_ARG_WINDOW, /* window */ 00397 QUERY_ARG_END } }, 00398 00399 { UI_WINDOW_CLEAR, "ui-window-clear", { 00400 QUERY_ARG_WINDOW, /* window */ 00401 QUERY_ARG_END } }, 00402 00403 { UI_WINDOW_KILL, "ui-window-kill", { 00404 QUERY_ARG_WINDOW, /* window */ 00405 QUERY_ARG_END } }, 00406 00407 { UI_WINDOW_NEW, "ui-window-new", { 00408 QUERY_ARG_WINDOW, /* window */ 00409 QUERY_ARG_END } }, 00410 00411 { UI_WINDOW_PRINT, "ui-window-print", { 00412 QUERY_ARG_WINDOW, /* window */ 00413 QUERY_ARG_FSTRING, /* fstring_t */ 00414 QUERY_ARG_END } }, 00415 00416 { UI_WINDOW_REFRESH, "ui-window-refresh", { 00417 QUERY_ARG_END } }, /* no params */ 00418 00419 { UI_WINDOW_SWITCH, "ui-window-switch", { 00420 QUERY_ARG_WINDOW, /* window */ 00421 QUERY_ARG_END } }, 00422 00423 { UI_WINDOW_TARGET_CHANGED , "ui-window-target-changed", { 00424 QUERY_ARG_WINDOW, /* window */ 00425 QUERY_ARG_END } }, 00426 00427 /* GPG: PARAMS XXX */ 00428 { GPG_MESSAGE_ENCRYPT, "gpg-message-encrypt", { 00429 QUERY_ARG_END } }, 00430 00431 { GPG_MESSAGE_DECRYPT, "gpg-message-decrypt", { 00432 QUERY_ARG_END } }, 00433 00434 { GPG_SIGN, "gpg-sign", { 00435 QUERY_ARG_END } }, 00436 00437 { GPG_VERIFY, "gpg-verify", { 00438 QUERY_ARG_END } }, 00439 00440 { UI_WINDOW_UPDATE_LASTLOG, "ui-window-update-lastlog", { 00441 QUERY_ARG_END } }, 00442 00443 { SESSION_EVENT, "session-event", { 00444 QUERY_ARG_SESSION, /* session */ 00445 QUERY_ARG_INT, /* event type, [not used] */ 00446 QUERY_ARG_END } }, 00447 00448 { UI_REFRESH, "ui-refresh", { 00449 QUERY_ARG_END } }, 00450 00451 { PROTOCOL_TYPING_OUT, "protocol-typing-out", { 00452 QUERY_ARG_CHARP, /* session uid */ 00453 QUERY_ARG_CHARP, /* uid */ 00454 QUERY_ARG_INT, /* typed-in data length */ 00455 QUERY_ARG_INT, /* whether this is first typing notification in order 00456 or only length change */ 00457 QUERY_ARG_END } }, 00458 00459 { UI_PASSWORD_INPUT, "ui-password-input", { 00460 QUERY_ARG_CHARP, /* password pointer storage */ 00461 QUERY_ARG_CHARP, /* alternate input prompt (&NULL = default) */ 00462 QUERY_ARG_CHARP, /* alternate repeat prompt (&NULL = default, NULL = no) */ 00463 QUERY_ARG_END } }, 00464 00465 { PROTOCOL_DISCONNECTING, "protocol-disconnecting", { /* meant to be send before user-initiated disconnect, 00466 when we can still send some data, e.g. <gone/> chatstate */ 00467 QUERY_ARG_CHARP, /* session uid */ 00468 QUERY_ARG_END } }, 00469 00470 { USERLIST_REFRESH, "userlist-refresh", { 00471 QUERY_ARG_END } }, 00472 00473 { EVENT_OFFLINE, "event_offline", { 00474 QUERY_ARG_CHARP, /* session uid */ 00475 QUERY_ARG_CHARP, /* uid */ 00476 QUERY_ARG_END } }, 00477 }; 00478 00479 /* other, not listed above here queries, for example plugin which use internally his own query, 00480 * and if devel of that plugin doesn't want share with us info about that plugin.. 00481 * can use query_connect() query_emit() and it will work... however, binding that query from scripts/events (/on) won't work.. untill devel fill query_arg_type... 00482 */ 00483 00484 static list_t queries_external; 00485 static int queries_count = QUERY_EXTERNAL; /* list_count(queries_other)+QUERY_EXTERNAL */ 00486 #else 00487 00488 extern struct query_def query_list[]; /* for: events.h scripts.h */ 00489 00490 #endif 00491 00492 #ifdef __cplusplus 00493 } 00494 #endif 00495 00496 #endif 00497