1 /* entity.h - entity tracking 2 * Copyright (C) 2010 Atheme Development Group 3 */ 4 5 #ifndef ENTITY_H 6 #define ENTITY_H 7 8 typedef enum { 9 ENT_ANY = 0, 10 ENT_USER, 11 ENT_GROUP, 12 ENT_EXTTARGET, 13 } myentity_type_t; 14 15 typedef struct entity_chanacs_validation_vtable entity_chanacs_validation_vtable_t; 16 17 typedef struct { 18 object_t parent; 19 myentity_type_t type; 20 21 stringref name; 22 char id[IDLEN]; 23 24 mowgli_list_t chanacs; 25 entity_chanacs_validation_vtable_t *chanacs_validate; 26 } myentity_t; 27 28 #define entity(x) ((myentity_t *)(x)) 29 #define user(x) (isuser(x) ? (myuser_t *)(x) : NULL) 30 #define group(x) (isgroup(x) ? (mygroup_t *)(x) : NULL) 31 #define isuser(x) (x != NULL && entity(x)->type == ENT_USER) 32 #define isgroup(x) (x != NULL && entity(x)->type == ENT_GROUP) 33 #define isdynamic(x) (x != NULL && (entity(x)->type == ENT_EXTTARGET)) 34 35 void init_entities(void); 36 void myentity_set_last_uid(const char *last_uid); 37 const char *myentity_get_last_uid(void); 38 const char *myentity_alloc_uid(void); 39 40 void myentity_put(myentity_t *me); 41 void myentity_del(myentity_t *me); 42 myentity_t *myentity_find(const char *name); 43 myentity_t *myentity_find_ext(const char *name); 44 myentity_t *myentity_find_uid(const char *uid); 45 46 typedef struct { 47 mowgli_patricia_iteration_state_t st; 48 myentity_type_t type; 49 } myentity_iteration_state_t; 50 51 E void myentity_foreach(int (*cb)(myentity_t *me, void *privdata), void *privdata); 52 E void myentity_foreach_t(myentity_type_t type, int (*cb)(myentity_t *me, void *privdata), void *privdata); 53 E void myentity_foreach_start(myentity_iteration_state_t *state, myentity_type_t type); 54 E void myentity_foreach_next(myentity_iteration_state_t *state); 55 E myentity_t *myentity_foreach_cur(myentity_iteration_state_t *state); 56 57 #define MYENTITY_FOREACH_T(elem, state, type) for (myentity_foreach_start(state, type); (elem = myentity_foreach_cur(state)); myentity_foreach_next(state)) 58 #define MYENTITY_FOREACH(elem, state) MYENTITY_FOREACH_T(elem, state, 0) 59 60 E void myentity_stats(void (*cb)(const char *line, void *privdata), void *privdata); 61 62 /* chanacs */ 63 E unsigned int myentity_count_channels_with_flagset(myentity_t *mt, unsigned int flagset); 64 E bool myentity_can_register_channel(myentity_t *mt); 65 E bool myentity_allow_foundership(myentity_t *mt); 66 67 typedef struct { 68 myentity_t *entity; 69 const char *name; 70 71 bool approval; 72 } hook_myentity_req_t; 73 74 #endif /* !ENTITY_H */ 75