/* ARISA - scripting engine defines */ /* Copyright (C) 2003,2004 Carl Ritson */ #define _ARISA_SCRIPT_ENG_H /** Type definitions **/ typedef struct se_msg_t se_msg_t; typedef struct se_save_data_t se_save_data_t; typedef enum se_msg_type_t se_msg_type_t; /** Enumerations **/ enum se_msg_type_t { SE_UNKNOWN = 0, SE_LOAD = 1, SE_UNLOAD = 2, SE_RELOAD = 3, SE_SHUTDOWN = 4, SE_IRC_MSG = 5, SE_SEND_NOTIFICATION = 6, SE_RECV_NOTIFICATION = 7, SE_QUEUE_ENQUEUE = 8, SE_QUEUE_DEQUEUE = 9, SE_PACK_ADD = 10, SE_PACK_DEL = 11, SE_PACK_HASHED = 12, SE_PACKLIST_ADD = 13, SE_UI_CALL = 14, SE_SIGNAL = 15, SE_INTERFACE_ADD = 16, SE_POOL_ADD = 17, SE_QUEUE_ADD = 18, SE_NETWORK_ADD = 19, SE_CHANNEL_ADD = 20, SE_USER_ADD = 21, SE_ADMIN_LOGON = 22, SE_ADMIN_LOGOFF = 23, SE_SAVE_DATA = 24, SE_LOAD_DATA = 25 }; enum se_flags_t { SE_F_LOAD_SAVE = 0x1 }; /** Structures **/ struct se_msg_t { lock_t lock; se_msg_type_t type; time_t occured; int ref_count; union { struct { char *name; } script; struct { network_t *network; char **data; int no_data; } irc; struct { interface_t *interface; pool_t *pool; queue_t *queue; send_t *send; int aux; // errno for send, pos for queue } notification; struct { packlist_t *list; pack_t *pack; } pack; struct { void *data; } ui; struct { char *name; } signal; struct { interface_t *interface; pool_t *pool; } interface; struct { queue_t *queue; } queue; struct { network_t *network; channel_t *channel; } network; struct { user_t *user; } user; struct { chat_t *admin; user_t *user; } admin; struct { lock_t lock; pthread_cond_t cond; uint8_t *data; size_t size; } save; struct { uint8_t *data; size_t size; } load; }; }; struct se_save_data_t { char *name; uint8_t *data; size_t size; }; /** Functions **/ void free_msg(se_msg_t *m); int se_register_interpreter(interpreter_t *inp); se_save_data_t **se_save_data(int *no_data); int se_load_data(const char *name, uint8_t *data, size_t size);