4 * Functions which manage policy for rooms (such as message expiry)
14 #if TIME_WITH_SYS_TIME
15 # include <sys/time.h>
19 # include <sys/time.h>
31 #include "sysdep_decls.h"
35 #include "citserver.h"
40 * Retrieve the applicable expire policy for a specific room
42 void GetExpirePolicy(struct ExpirePolicy *epbuf, struct quickroom *qrbuf) {
45 /* If the room has its own policy, return it */
46 if (qrbuf->QRep.expire_mode != 0) {
47 memcpy(epbuf, &qrbuf->QRep, sizeof(struct ExpirePolicy));
51 /* Otherwise, if the floor has its own policy, return it */
52 fl = cgetfloor(qrbuf->QRfloor);
53 if (fl->f_ep.expire_mode != 0) {
54 memcpy(epbuf, &fl->f_ep, sizeof(struct ExpirePolicy));
58 /* Otherwise, fall back on the system default */
59 memcpy(epbuf, &config.c_ep, sizeof(struct ExpirePolicy));
66 void cmd_gpex(char *argbuf) {
67 struct ExpirePolicy exp;
71 extract(which, argbuf, 0);
72 if (!strcasecmp(which, "room")) {
73 memcpy(&exp, &CC->quickroom.QRep, sizeof(struct ExpirePolicy));
75 else if (!strcasecmp(which, "floor")) {
76 fl = cgetfloor(CC->quickroom.QRfloor);
77 memcpy(&exp, &fl->f_ep, sizeof(struct ExpirePolicy));
79 else if (!strcasecmp(which, "site")) {
80 memcpy(&exp, &config.c_ep, sizeof(struct ExpirePolicy));
83 cprintf("%d Invalid keyword.\n", ERROR);
87 cprintf("%d %d|%d\n", OK, exp.expire_mode, exp.expire_value);
94 void cmd_spex(char *argbuf) {
95 struct ExpirePolicy exp;
99 memset(&exp, 0, sizeof(struct ExpirePolicy));
100 extract(which, argbuf, 0);
101 exp.expire_mode = extract_int(argbuf, 1);
102 exp.expire_value = extract_int(argbuf, 2);
104 if ((exp.expire_mode < 0) || (exp.expire_mode > 3)) {
105 cprintf("%d Invalid policy.\n", ERROR);
109 if (!strcasecmp(which, "room")) {
110 if (!is_room_aide()) {
111 cprintf("%d Higher access required.\n",
112 ERROR+HIGHER_ACCESS_REQUIRED);
115 lgetroom(&CC->quickroom, CC->quickroom.QRname);
116 memcpy(&CC->quickroom.QRep, &exp, sizeof(struct ExpirePolicy));
117 lputroom(&CC->quickroom);
118 cprintf("%d Room expire policy set.\n", OK);
122 if (CC->usersupp.axlevel < 6) {
123 cprintf("%d Higher access required.\n",
124 ERROR+HIGHER_ACCESS_REQUIRED);
128 if (!strcasecmp(which, "floor")) {
129 lgetfloor(&flbuf, CC->quickroom.QRfloor);
130 memcpy(&flbuf.f_ep, &exp, sizeof(struct ExpirePolicy));
131 lputfloor(&flbuf, CC->quickroom.QRfloor);
132 cprintf("%d Floor expire policy set.\n", OK);
136 else if (!strcasecmp(which, "site")) {
137 if (exp.expire_mode == EXPIRE_NEXTLEVEL) {
138 cprintf("%d Invalid policy (no higher level)\n",
142 memcpy(&config.c_ep, &exp, sizeof(struct ExpirePolicy));
144 cprintf("%d Site expire policy set.\n", OK);
149 cprintf("%d Invalid keyword.\n", ERROR);