1 typedef pthread_t THREAD;
4 struct ExpressMessage {
5 struct ExpressMessage *next;
10 * Here's the big one... the Citadel context structure.
12 * This structure keeps track of all information relating to a running
13 * session on the server. We keep one of these for each session thread.
15 * Note that the first element is "*next" so that it may be used without
16 * modification in a linked list.
19 struct CitContext *next; /* Link to next session in the list */
21 struct usersupp usersupp; /* Database record buffers */
22 struct quickroom quickroom;
27 char curr_user[32]; /* name of current user */
28 int logged_in; /* logged in */
29 int internal_pgm; /* authenticated as internal program */
30 char temp[32]; /* temp file name */
31 int nologin; /* not allowed to log in */
36 struct ExpressMessage *FirstExpressMessage;
37 int cs_pid; /* session ID */
38 char cs_room[20]; /* current room */
39 time_t cs_lastupdt; /* time of last update */
40 time_t lastcmd; /* time of last command executed */
41 time_t lastidle; /* For computing idle time */
42 char lastcmdname[5]; /* name of last command executed */
43 unsigned cs_flags; /* miscellaneous flags */
45 /* feeping creaturisms... */
46 int cs_clientdev; /* client developer ID */
47 int cs_clienttyp; /* client type code */
48 int cs_clientver; /* client version number */
49 char cs_clientname[32]; /* name of client software */
50 char cs_host[25]; /* host logged in from */
52 FILE *download_fp; /* Fields relating to file transfer */
56 char upl_comment[256];
57 char upl_filedir[256];
58 char chat_room[20]; /* The chat room */
62 char ucache_name[32]; /* For a performance boost, we cache */
63 long ucache_pos; /* the position of the last user rec */
64 char fake_username[32]; /* Fake username <bc> */
65 char fake_postname[32]; /* Fake postname <bc> */
66 char fake_hostname[25]; /* Name of the fake hostname <bc> */
67 char fake_roomname[20]; /* Name of the fake room <bc> */
68 char last_pager[32]; /* The username of the last pager */
70 int FloorBeingSearched; /* This is used by cmd_lrms() etc. */
72 int CtdlErrno; /* Error return for CitadelAPI calls */
75 typedef struct CitContext t_context;
77 #define CS_STEALTH 1 /* stealth mode */
78 #define CS_CHAT 2 /* chat mode */
79 #define CS_POSTING 4 /* Posting */
81 struct CitContext *MyContext(void);
82 #define CC ((struct CitContext *)MyContext())
84 extern struct CitContext *ContextList;
85 extern int ScheduledShutdown;
86 extern struct CitControl CitControl;
89 struct ChatLine *next;
94 char chat_username[32];
98 * Various things we need to lock and unlock
101 #define S_USER_TRANS 1
102 #define S_QUICKROOM 2
105 #define S_SESSION_TABLE 5
107 #define S_CHATQUEUE 7
109 #define S_HOUSEKEEPING 9
110 #define MAX_SEMAPHORES 10
123 * Citadel DataBases (define one for each cdb we need to open)
125 #define CDB_MSGMAIN 0 /* message base */
126 #define CDB_USERSUPP 1 /* user file */
127 #define CDB_QUICKROOM 2 /* room index */
128 #define CDB_FLOORTAB 3 /* floor index */
129 #define CDB_MSGLISTS 4 /* room message lists */
130 #define CDB_VISIT 5 /* user/room relationships */
131 #define MAXCDB 6 /* total number of CDB's defined */
139 /* Structures and declarations for function hooks of various types */
141 struct CleanupFunctionHook {
142 struct CleanupFunctionHook *next;
143 void (*h_function_pointer) (void);
145 extern struct CleanupFunctionHook *CleanupHookTable;
149 * SessionFunctionHook extensions are used for any type of hook for which
150 * the context in which it's being called (which is determined by the event
151 * type) will make it obvious for the hook function to know where to look for
154 struct SessionFunctionHook {
155 struct SessionFunctionHook *next;
156 void (*h_function_pointer) (void);
159 extern struct SessionFunctionHook *SessionHookTable;
161 #define EVT_STOP 0 /* Session is terminating */
162 #define EVT_START 1 /* Session is starting */
163 #define EVT_LOGIN 2 /* A user is logging in */
164 #define EVT_NEWROOM 3 /* Changing rooms */
165 #define EVT_LOGOUT 4 /* A user is logging out */
166 #define EVT_SETPASS 5 /* Setting or changing password */
170 * UserFunctionHook extensions are used for any type of hook which implements
171 * an operation on a user or username (potentially) other than the one
172 * operating the current session.
174 struct UserFunctionHook {
175 struct UserFunctionHook *next;
176 void (*h_function_pointer) (char *username, long usernum);
179 extern struct UserFunctionHook *UserHookTable;
181 #define EVT_PURGEUSER 100 /* Deleting a user */
182 #define EVT_OUTPUTMSG 101 /* Outputting a message */