kom-types.h 18.8 KB
Newer Older
Linus Tolke's avatar
Linus Tolke committed
1
/*
2
 * $Id: kom-types.h,v 0.64 2003/08/29 10:39:48 ceder Exp $
3
 * Copyright (C) 1990-1999, 2001-2003  Lysator Academic Computer Association.
Linus Tolke's avatar
Linus Tolke committed
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 *
 * This file is part of the LysKOM server.
 * 
 * LysKOM is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License as published by 
 * the Free Software Foundation; either version 1, or (at your option) 
 * any later version.
 * 
 * LysKOM is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with LysKOM; see the file COPYING.  If not, write to
 * Lysator, c/o ISY, Linkoping University, S-581 83 Linkoping, SWEDEN,
 * or the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, 
 * MA 02139, USA.
 *
Per Cederqvist's avatar
Per Cederqvist committed
23
 * Please report bugs at http://bugzilla.lysator.liu.se/. 
Linus Tolke's avatar
Linus Tolke committed
24
 */
Per Cederqvist's avatar
.    
Per Cederqvist committed
25
26
27
28
/*
 *  KOM-types.h  --  Types used by both server and client of LysKOM
 *
 *
29
 *  Copyright (C) 1990-1999, 2001-2003	Lysator Computer Club,
Per Cederqvist's avatar
.    
Per Cederqvist committed
30
31
32
33
34
35
 *			Linkoping University,  Sweden
 *
 *  Everyone is granted permission to copy, modify and redistribute
 *  this code, provided the people they give it to can.
 *
 *
36
37
38
39
 *  Filecreator: Thomas Bellman
 *		  Lysator Computer Club
 *		  Linkoping University
 *		  Sweden
Per Cederqvist's avatar
.    
Per Cederqvist committed
40
 *
41
 *  email:	  Bellman@Lysator.LiU.SE
Per Cederqvist's avatar
.    
Per Cederqvist committed
42
43
44
45
 */



46
47
#ifndef  KOM_TYPES_H_ALREADY_INCLUDED
#define  KOM_TYPES_H_ALREADY_INCLUDED
Per Cederqvist's avatar
.    
Per Cederqvist committed
48

inge's avatar
inge committed
49
50
51
52
53
54

#include <sys/types.h>
#include <time.h>
#include "s-string.h"


David Byers's avatar
David Byers committed
55
56
57
/* Some objects in LysKOM need a type field.
   These are the valid values */

58
59
60
61
62
63
enum object_type
{
    NO_OBJECT_TYPE,		/* No object at all             */
    TEXT_OBJECT_TYPE,		/* Text object                  */
    CONF_OBJECT_TYPE,		/* Conference object            */
    INFO_OBJECT_TYPE,		/* System info object           */
64
};
David Byers's avatar
David Byers committed
65
66
67
68




Per Cederqvist's avatar
Per Cederqvist committed
69
70
71
72
73
typedef unsigned short Pers_no;
typedef unsigned short Conf_no;
typedef unsigned long  Text_no;
typedef unsigned long  Local_text_no;
typedef unsigned long  Session_no;
Per Cederqvist's avatar
.    
Per Cederqvist committed
74

75

Per Cederqvist's avatar
.    
Per Cederqvist committed
76
77
78
79
80
81
#define	MAX_PERS_NO		((Pers_no) USHRT_MAX)
#define MAX_CONF_NO		((Conf_no) USHRT_MAX)
#define MAX_TEXT_NO		((Text_no) ULONG_MAX)
#define	MAX_LOCAL_TEXT_NO	((Local_text_no) ULONG_MAX)


82
83
84
85
#define PASSWD_LEN 64
typedef char   Password[PASSWD_LEN];
typedef off_t  Text_index;
typedef time_t Time;
Per Cederqvist's avatar
.    
Per Cederqvist committed
86
87
88
89
90


/*
 * The privilige bits:  says what priviliges a person has.  E g
 *  if he is allowed to read texts he normally shouldn't be allowed
Per Cederqvist's avatar
Per Cederqvist committed
91
 *  to read. See file doc/Protocol-A.texi.
Per Cederqvist's avatar
.    
Per Cederqvist committed
92
93
 */
typedef	struct {
94
95
96
97
98
99
	unsigned int	wheel	: 1;
	unsigned int	admin	: 1;
	unsigned int	statistic : 1;
	unsigned int	create_pers: 1;
	unsigned int	create_conf: 1;
	unsigned int	change_name: 1;
100
101
	unsigned int	flg7    : 1;	/* For future use. */
        unsigned int	flg8	: 1;
102
103
104
105
106
107
108
109
	unsigned int	flg9    : 1;
	unsigned int	flg10   : 1;
	unsigned int	flg11   : 1;
	unsigned int	flg12	: 1;
	unsigned int	flg13	: 1;
	unsigned int	flg14	: 1;
	unsigned int	flg15	: 1;
	unsigned int	flg16	: 1;
Per Cederqvist's avatar
.    
Per Cederqvist committed
110
111
112
113
114
115
} Priv_bits;

/*
 * Flags in the Person struct.
 */
typedef struct {
Per Cederqvist's avatar
Per Cederqvist committed
116
117
    unsigned int  unread_is_secret : 1;/* FALSE if everyone is allowed to ask
					  how many unread texts you have. */
118
119
120
121
122
123
124
    unsigned int  flg2	: 1;
    unsigned int  flg3	: 1;
    unsigned int  flg4	: 1;
    unsigned int  flg5	: 1;
    unsigned int  flg6	: 1;
    unsigned int  flg7	: 1;
    unsigned int  flg8	: 1;
Per Cederqvist's avatar
.    
Per Cederqvist committed
125
126
127
} Personal_flags;


Per Cederqvist's avatar
Per Cederqvist committed
128
/* See file doc/Protocol-A.texi */
129
enum info_type {
130
131
132
133
134
135
136
137
138
    recpt     = 0,	/* 0 Recipient (conference) */
    cc_recpt  = 1,	/* 1 Carbon Copy recipient (extra kopia) */
    comm_to   = 2,	/* 2 Comment to (text) */
    comm_in   = 3,	/* 3 Commented in (text) */
    footn_to  = 4,	/* 4 This is a footnote to (text) */
    footn_in  = 5,	/* 5 Footnote to this text in (text) */
    loc_no    = 6,	/* 6 Sequence number within conference */
    rec_time  = 7,	/* 7 Received at (time) */
    sent_by   = 8,	/* 8 Sent by (person) */
139
    sent_at   = 9,	/* 9 Sent at (time) */
David Byers's avatar
David Byers committed
140
141
142
    bcc_recpt = 15,	/* 15 BCC recipient (for kannedom) */

    unknown_info = 4711 /* Internal use only. Unknown misc item encountered */
143
};
Per Cederqvist's avatar
.    
Per Cederqvist committed
144

145
union info_datum {
146
147
148
149
150
151
    Conf_no       recipient;    /* recpt, cc_recpt, bcc_recpt */
    Text_no	  text_link;    /* comm_to, comm_in, footn_to, footn_in */
    Local_text_no local_no;	/* loc_no */
    Time	  received_at;  /* rec_time */
    Pers_no	  sender;	/* sent_by */
    Time	  sent_at;	/* sent_at */
152
    enum info_type unknown_type; /* unknown_info */
153
};
Per Cederqvist's avatar
.    
Per Cederqvist committed
154
155
156
157


/*  This struct contains miscellaneous information about a text.  */
typedef	struct {
158
159
	enum  info_type	 type;
	union info_datum datum;
Per Cederqvist's avatar
.    
Per Cederqvist committed
160
161
162
} Misc_info;


David Byers's avatar
David Byers committed
163
164
165
166
167
168
typedef struct {
    unsigned short      no_of_misc;
    Misc_info         * misc;
} Misc_info_list;


169
170
171
172
173
typedef struct {
    unsigned int        deleted : 1; /* This item has been deleted */
    unsigned int        inherit : 1; /* Copy to comments */
    unsigned int        secret : 1; /* Don't show anyone */
    unsigned int        hide_creator : 1; /* Don't show the creator */
174
    unsigned int        dont_garb : 1; /* Don't garb object */
175
176
177
178
179
180
    unsigned int        reserved3 : 1;
    unsigned int        reserved4 : 1;
    unsigned int        reserved5 : 1;
} Aux_item_flags;
   

David Byers's avatar
David Byers committed
181
typedef struct {
182
183
    enum object_type target_type;
    unsigned long    target_item;
David Byers's avatar
David Byers committed
184
185
186
187
188
189
190
    union {
        Conf_no     conf;
        Text_no     text;
    } target_object;
} Aux_item_link;


191
192
193
194
195
196
197
198
typedef struct {
    unsigned long       aux_no;
    Pers_no             creator;
    Time                sent_at;
    Aux_item_flags      flags;
    unsigned long       inherit_limit;
    unsigned long       tag;
    String              data;
David Byers's avatar
David Byers committed
199
    Aux_item_link       linked_item;
200
201
202
203
204
205
206
207
} Aux_item;

typedef struct {
    unsigned short      length;
    Aux_item          * items;
} Aux_item_list;


Per Cederqvist's avatar
.    
Per Cederqvist committed
208
209
210
/*  Fields of this type is supposed to tell the garbage collector
 *  which texts it should remove first.
 */
211
typedef unsigned long	Garb_nice;
Per Cederqvist's avatar
.    
Per Cederqvist committed
212
213
214
215
216


/*  Struct for text status  */
typedef struct {
	Time		  creation_time;
217
218
        long              generation;
        long              reclamation;
Per Cederqvist's avatar
.    
Per Cederqvist committed
219
220
        long              file_pos; /* Start of the text in the text file. */
	Pers_no		  author;
221
	unsigned short	  no_of_lines;
Per Cederqvist's avatar
.    
Per Cederqvist committed
222
	String_size	  no_of_chars;
223
	unsigned short	  no_of_marks;	/* Including syntetic marks. */
224
225
	unsigned short	  no_of_misc;	/* Recipients, times, comments, ... */
        unsigned long     highest_aux;
Per Cederqvist's avatar
.    
Per Cederqvist committed
226
	Misc_info	* misc_items;	/* List of miscellaneous info. */
227
        Aux_item_list     aux_item_list;
Per Cederqvist's avatar
.    
Per Cederqvist committed
228
229
230
231
} Text_stat;


typedef	struct {
Per Cederqvist's avatar
Per Cederqvist committed
232
233
234
235
236
237
238
239
240
241
242
	unsigned int	rd_prot	: 1;	/* !(Can anyone become a member?) */
	unsigned int	original : 1;	/* Comments forbidden? */
	unsigned int	secret : 1;	/* Secret conference? */
				/* Note: if a letterbox is secret it
				 * will be very hard for that person
				 * to log in, since he can't map his
				 * name to a pers_no. He must either
				 * know his pers_no, or have another
				 * identity which is his supervisor.
				 */
	unsigned int	letter_box : 1;	/* Is this a letter box? */
243
	unsigned int    allow_anon : 1; /* do we accept anonymous messages */
David Byers's avatar
David Byers committed
244
        unsigned int	forbid_secret : 1; /* do we allow secret members */
245
246
	unsigned int	reserved2 : 1;
	unsigned int	reserved3 : 1;
Per Cederqvist's avatar
.    
Per Cederqvist committed
247
248
249
250
} Conf_type;


typedef struct {
251
252
253
    unsigned int invitation : 1;
    unsigned int passive : 1;
    unsigned int secret : 1;
254
    unsigned int passive_message_invert : 1;
255
256
257
258
    unsigned int reserved2 : 1;
    unsigned int reserved3 : 1;
    unsigned int reserved4 : 1;
    unsigned int reserved5 : 1;
259
260
261
262
263
264
265
266
} Membership_type;


typedef struct {
    Pers_no		member;
    Pers_no             added_by; 
    Time                added_at;
   Membership_type     type;
Per Cederqvist's avatar
.    
Per Cederqvist committed
267
268
269
270
271
272
} Member;


/* Struct for marks */
typedef struct {
	Text_no		text_no;
Per Cederqvist's avatar
Per Cederqvist committed
273
	unsigned char	mark_type;	/* It's up to the clients to decide the
Per Cederqvist's avatar
.    
Per Cederqvist committed
274
275
276
277
278
279
					   meaning of this field. */
} Mark;



/*  Information about a person's membership in a conference  */
280

281
282
283
284
struct read_range {
    Local_text_no  first_read;
    Local_text_no  last_read;
};
285
286
287
288
289
290

struct read_range_list {
    unsigned short     length;
    struct read_range *ranges;
};

Per Cederqvist's avatar
.    
Per Cederqvist committed
291
typedef struct {
292
293
294
295
    unsigned long   position;
    Conf_no		conf_no;
    unsigned char	priority;	/* Interrupt priority */
    Time		last_time_read;	/* Updated every time a text in this
296
297
298
299
					   conference is marked as read.  */
    unsigned int	no_of_read_ranges;
    struct read_range * read_ranges;    /* Sorted in ascending order. */
    Pers_no             added_by;
300
301
    Time                added_at;
    Membership_type type;
302
303
304
305
306
307
308
309

    /* read_ranges is cleared before it reaches the Protocol A output
       layer in certain situations, even though that layer wants to
       emit the last-text-read element.  This happens for example when
       get-membership [99] is called with want-read-texts == 0.  This
       variable maintains the last-text-read value. */
    Bool skip_read_texts;

Per Cederqvist's avatar
.    
Per Cederqvist committed
310
311
312
313
314
315
} Membership;


/* Some structs to handle variable-sized arrays. */

typedef struct {
316
	unsigned short	  no_of_marks;
Per Cederqvist's avatar
.    
Per Cederqvist committed
317
318
319
320
321
	Mark	* marks;		/* Pointer to an array of marks. */
} Mark_list;


typedef struct {
322
    unsigned short no_of_confs;
Per Cederqvist's avatar
.    
Per Cederqvist committed
323
324
325
326
327
    Conf_no  *conf_nos;
} Conf_no_list;


typedef struct {
328
	unsigned short	  no_of_members;
Per Cederqvist's avatar
.    
Per Cederqvist committed
329
330
331
332
333
334
335
336
	Member	* members;
} Member_list;


/*  A list of conference numbers, also telling if it is a
 *  mailbox (i e a person) or an ordinary conference.	*/
/* Delete this ugly variant as soon as possible! */
typedef struct {
337
	unsigned long		  no_of_conf_nos;
Per Cederqvist's avatar
.    
Per Cederqvist committed
338
339
340
341
342
343
344
345
346
347
	Conf_no		* conf_nos;
	Conf_type	* type_of_conf;
} Conf_list_old;
/* This is the way it should look! */
typedef struct {
	Conf_no   conf_no;
	Conf_type type;
} Micro_conf;

typedef struct {
348
	unsigned long       no_of_confs;
Per Cederqvist's avatar
.    
Per Cederqvist committed
349
350
351
352
353
354
	Micro_conf * confs;
} Conf_list;


/*  A list of person numbers  */
typedef struct {
355
	unsigned long		  no_of_persons;
Per Cederqvist's avatar
.    
Per Cederqvist committed
356
357
358
359
	Pers_no		* persons;
} Pers_list;

typedef struct {
360
	unsigned short	      no_of_confs;
Per Cederqvist's avatar
.    
Per Cederqvist committed
361
362
363
	Membership  * confs;
} Membership_list;

David Byers's avatar
David Byers committed
364
typedef struct {
365
	int		       length;
David Byers's avatar
David Byers committed
366
367
368
        long                  *data;
} Number_list;

Per Cederqvist's avatar
.    
Per Cederqvist committed
369
370
371
372
373
374
375
376
377

/* The Info struct */
typedef struct {
	long		version;
	Conf_no		conf_pres_conf; /* Presentation of new confs */
	Conf_no		pers_pres_conf;	/* Presentation of new persons */
	Conf_no		motd_conf; 	/* Conf that receive motds */
	Conf_no		kom_news_conf;  /* News about kom */
	Text_no		motd_of_lyskom; /* To be displayed after login */
378
        unsigned long   highest_aux_no; /* Last aux-item number */
379
        Aux_item_list   aux_item_list;  /* System aux items */
Per Cederqvist's avatar
.    
Per Cederqvist committed
380
381
	/* and maybe more... */
} Info;
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
 
struct l2g_block_info;

/* Nothing outside local-to-global.c should access the contents of a
   Local_to_global directly.  Use the accessor functions declared in
   local-to-global.h instead.  */
typedef struct {
    int num_blocks;
    Local_text_no first_unused;
    struct l2g_block_info * blocks;
} Local_to_global;

typedef struct {
    const Local_to_global *l2g;
    const struct l2g_block_info *binfo;
    int                arrindex;
    Local_text_no      beginval;       /* First index in the search */
    Local_text_no      endval;	       /* Last index in the search + 1 */

    int                search_ended;   /* 1 if finished, 0 otherwise */
    Local_text_no      lno;	       /* The Local_text_no to use */
    Text_no            tno;	       /* The Text_no to use */
} L2g_iterator;

406
407
408
409
410
411
412
413
414
415
416
417
typedef struct {
    const Local_to_global *l2g;
    const struct l2g_block_info *binfo;
    int                arrindex;
    Local_text_no      beginval;       /* First index in the search */
    Local_text_no      endval;	       /* Last index in the search + 1 */

    int                search_ended;   /* 1 if finished, 0 otherwise */
    Local_text_no      lno;	       /* The Local_text_no to use */
    Text_no            tno;	       /* The Text_no to use */
} L2g_reverse_iterator;

Per Cederqvist's avatar
Per Cederqvist committed
418
419
420
421
/* This struct holds the information that is needed to output a
   Text-Mapping.  Please note that the protocol A Text-Mapping data
   type looks very different from this structure.  */
typedef struct {
422
423
424
    Local_text_no          first;
    unsigned long          no_of_texts;
    const Local_to_global *l2g;
Per Cederqvist's avatar
Per Cederqvist committed
425
426
} Text_mapping;

427
428
429
430
431
432
433
434
435
436
/* This struct holds the information that is needed to output a
   Text-Mapping in the reverse order.  Please note that the protocol A
   Text-Mapping data type looks very different from this
   structure.  */
typedef struct {
    Local_text_no          ceiling;
    unsigned long          no_of_texts;
    const Local_to_global *l2g;
} Text_mapping_reverse;

437
438
439
/* For performance reasons, sort the fields in increasing size.
  The comments about number of bits are true on a Sun Sparc-2, not
  necessarily anything else.  The code should work anyhow. */
Per Cederqvist's avatar
.    
Per Cederqvist committed
440
typedef	struct {
441
442
443
444
        /* 8-bit quantities */
	Conf_type	type;		/* secret, rd_prot etc */

	/* 16-bit quantities */
Per Cederqvist's avatar
.    
Per Cederqvist committed
445
	Pers_no		creator;
446
	Conf_no		supervisor;	/* Supervisor conference. */
Per Cederqvist's avatar
.    
Per Cederqvist committed
447
448
449
450
451
452
	Conf_no		permitted_submitters;	/* People who are allowed
					   to submit texts to this conf. 
					   0 -> anyone may submit. */
	Conf_no		super_conf;	/* Send unallowed submissions to
					   the super_conf. 
					   0 -> unallowed submissions bounce */
453
454
455
456

	/* 32-bit quantities */
	Time		creation_time;
	Text_no		presentation;
Per Cederqvist's avatar
.    
Per Cederqvist committed
457
458
459
460
461
	Time		last_written;	/* Time of latest text in this conf. */
	Text_no		msg_of_day;	/* Message to be displayed when this
					   conf is referenced by the user. */
	Garb_nice	nice;		/* How long do texts in this
					   conf live? */
462
        Garb_nice       keep_commented; /* New comments protect texts */
463
        Garb_nice       expire;         /* When do we auto-kill this */
Per Cederqvist's avatar
.    
Per Cederqvist committed
464
	String		name;		/* Name of conference */
465
466
        unsigned long   highest_aux;
        Aux_item_list   aux_item_list;
Per Cederqvist's avatar
.    
Per Cederqvist committed
467
	Member_list	members;	/* List of members in conf */
468
	Local_to_global texts;		/* List of texts */
Per Cederqvist's avatar
.    
Per Cederqvist committed
469
470
471
472
473
474
475
} Conference;



typedef struct {
	String		name;		/* Name of conference */
	Conf_type	type;		/* secret, rd_prot etc */
476
        Conf_no         supervisor;     /* Supervisor conference */
Per Cederqvist's avatar
.    
Per Cederqvist committed
477
478
	Local_text_no	highest_local_no; /* highest local text no */
	Garb_nice	nice;	        /* Number of days to live */
479
	Garb_nice	keep_commented; /* New comments protect texts */
Per Cederqvist's avatar
.    
Per Cederqvist committed
480
481
} Small_conf;

482
483
484
485
486
487
488
489
490
491
typedef struct {
	String      name;
	Conf_type   type;
	Conf_no     conf_no;
} Conf_z_info;

typedef struct {
	unsigned short    no_of_confs;
	Conf_z_info     * confs;
} Conf_z_info_list;
Per Cederqvist's avatar
.    
Per Cederqvist committed
492
493
494
495
496
497
498
499

/*  Struct for persons  */
typedef struct {
	Text_no		user_area;	/* Misc info the clients might want to
					   store. 0 = not used. */
	Priv_bits	privileges;
	Personal_flags	flags;
	Time		last_login; 	/* Or logout */
500
501
502
503
504
505
506
507
508
	unsigned long	total_time_present; /* Number of seconds. */
	unsigned long	sessions;	/* Number of sessions */
	unsigned long	created_lines;	/* No. of created lines (statistics) */
	unsigned long	created_bytes;	/* No. of created bytes (statistics) */
	unsigned long	read_texts;	/* No. of read texts (statistics) */
	unsigned long	no_of_text_fetches; /* (statistics) */
	unsigned short	created_persons; /* (statistics) */
	unsigned short	created_confs;	/* (statistics) */
	String          username;	/* User-name & hostname */
509
	Local_to_global created_texts;
Per Cederqvist's avatar
.    
Per Cederqvist committed
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
	Mark_list	marks;		/* List of marked texts */
	Membership_list conferences;	/* List of conferences the person is
					 * a member in. */
	Password	pwd;		/* Encrypted password */
} Person;


/*
 * This struct is returned from the 'who_is_on' call.
 */
typedef struct {
	Pers_no		person;
	String		what_am_i_doing;
	Conf_no		working_conference;
} Who_info_old;

typedef struct {
	Pers_no		person;
	String		what_am_i_doing;
	String		username;           /* Userid and hostname. */
	Conf_no		working_conference;
	Session_no	session_no;         /* Serial number of connection. */
} Who_info;

534
535
536
537
538
539
540
541
542
543
typedef struct {
	Pers_no		person;
	String		what_am_i_doing;
	String		username;           /* Userid and hostname. */
	String		ident_user;	     /* According to Ident protocol. */
	String		hostname; 	     /* According to TCP/IP. */
	Conf_no		working_conference;
	Session_no	session_no;         /* Serial number of connection. */
} Who_info_ident;

Per Cederqvist's avatar
.    
Per Cederqvist committed
544
545
546
547
548
549
550
typedef struct {
	Pers_no		person;
	String		what_am_i_doing;
	String		username;            /* Userid and hostname. */
	Conf_no		working_conference;
	Session_no	session;             /* Serial number of connection. */
	Time		connection_time;     /* Not logintime. */
551
	unsigned long		idle_time; 	     /* Seconds. */
Per Cederqvist's avatar
.    
Per Cederqvist committed
552
553
} Session_info;

Per Cederqvist's avatar
Per Cederqvist committed
554
555
556
557
558
559
560
561
562
563
564
typedef struct {
    unsigned int  invisible : 1;
    unsigned int  user_active_used : 1;
    unsigned int  user_absent : 1;
    unsigned int  reserved3 : 1;
    unsigned int  reserved4 : 1;
    unsigned int  reserved5 : 1;
    unsigned int  reserved6 : 1;
    unsigned int  reserved7 : 1;
} Session_flags;
    
565
566
567
568
569
typedef struct {
	Session_no     session;
	Pers_no        person;
	Conf_no        working_conference;
	unsigned long  idle_time;
Per Cederqvist's avatar
Per Cederqvist committed
570
	Session_flags  flags;
571
572
573
574
575
576
577
578
579
580
581
582
583
584
	String         what_am_i_doing;
} Dynamic_session_info;

typedef struct {
	long		          no_of_sessions;
    	Dynamic_session_info	* sessions;
} Dynamic_session_info_list;	

typedef struct {
	String  username;
	String  hostname;
	String  ident_user;
	Time    connection_time;
} Static_session_info;
Per Cederqvist's avatar
.    
Per Cederqvist committed
585

586
587
588
589
590
591
592
593
594
595
typedef struct {
	Pers_no		person;
	String		what_am_i_doing;
	String		username;            /* Userid and hostname,
						according to the client. */
	String		ident_user;	     /* According to Ident protocol. */
	String		hostname; 	     /* According to TCP/IP. */
	Conf_no		working_conference;
	Session_no	session;             /* Serial number of connection. */
	Time		connection_time;     /* Not logintime. */
596
	unsigned long   idle_time; 	     /* Seconds. */
597
598
} Session_info_ident;

599
600
601
602
typedef struct {
	unsigned short priority;
    	unsigned short weight;
} Scheduling_info;
Per Cederqvist's avatar
.    
Per Cederqvist committed
603
604
605
606
607
608
609
610
611
612
613
614
615

typedef struct {
	int		  no_of_persons;
    	Who_info_old	* info;
} Who_info_list_old;	


typedef struct {
	int		  no_of_persons;
    	Who_info	* info;
} Who_info_list;	


616
617
618
619
620
typedef struct {
	int		  no_of_persons;
    	Who_info_ident	* info;
} Who_info_ident_list;

621
622
623
624
625
626
typedef struct {
        unsigned long protocol_version;
        String        server_name;
        String        server_version;
} Version_info;

Per Cederqvist's avatar
Per Cederqvist committed
627
628
629
630
631
632
633
634
635
636
637
typedef struct {
    float   average;
    float   ascent_rate;
    float   descent_rate;
} Stats;

typedef struct {
    int    no_of_stats;
    Stats *stats;
} Stats_list;

638
639
640
641
642
643
typedef struct {
    int     no_of_stats;
    String *stat_names;
    Number_list intervals;
} Stats_description;

644
645
646
647
648
649
650
651
652
653
654
typedef struct {
    time_t  boot_time;
    time_t  save_time;
    String  db_status;
    Text_no existing_texts;
    Text_no highest_text_no;
    Conf_no existing_confs;
    Conf_no existing_persons;
    Conf_no highest_conf_no;
} Static_server_info;

655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
#ifdef DEBUG_CALLS
typedef struct {
    int arena;
    int ordblks;
    int smblks;
    int hblks;
    int hblkhd;
    int usmblks;
    int fsmblks;
    int uordblks;
    int fordblks;
    int keepcost;
} Memory_info;
#endif

670
671
typedef struct {
        unsigned long protocol_version;
672
673
        const char *server_name;
        const char *server_version;
674
675
} Version_info_internal;

Per Cederqvist's avatar
.    
Per Cederqvist committed
676
#endif	/*  ifndef  KOM_TYPES_H_ALREADY_INCLUDED__  */