4 * Functions which manage policy for rooms (such as message expiry)
18 #if TIME_WITH_SYS_TIME
19 # include <sys/time.h>
23 # include <sys/time.h>
33 #include "dynloader.h"
36 #include "sysdep_decls.h"
40 #include "citserver.h"
45 * Retrieve the applicable expire policy for a specific room
47 void GetExpirePolicy(struct ExpirePolicy *epbuf, struct quickroom *qrbuf) {
50 /* If the room has its own policy, return it */
51 if (qrbuf->QRep.expire_mode != 0) {
52 memcpy(epbuf, &qrbuf->QRep, sizeof(struct ExpirePolicy));
56 /* Otherwise, if the floor has its own policy, return it */
57 fl = cgetfloor(qrbuf->QRfloor);
58 if (fl->f_ep.expire_mode != 0) {
59 memcpy(epbuf, &fl->f_ep, sizeof(struct ExpirePolicy));
63 /* Otherwise, fall back on the system default */
64 memcpy(epbuf, &config.c_ep, sizeof(struct ExpirePolicy));
71 void cmd_gpex(char *argbuf) {
72 struct ExpirePolicy exp;
76 extract(which, argbuf, 0);
77 if (!strcasecmp(which, "room")) {
78 memcpy(&exp, &CC->quickroom.QRep, sizeof(struct ExpirePolicy));
80 else if (!strcasecmp(which, "floor")) {
81 fl = cgetfloor(CC->quickroom.QRfloor);
82 memcpy(&exp, &fl->f_ep, sizeof(struct ExpirePolicy));
84 else if (!strcasecmp(which, "site")) {
85 memcpy(&exp, &config.c_ep, sizeof(struct ExpirePolicy));
88 cprintf("%d Invalid keyword.\n", ERROR);
92 cprintf("%d %d|%d\n", CIT_OK, exp.expire_mode, exp.expire_value);
99 void cmd_spex(char *argbuf) {
100 struct ExpirePolicy exp;
104 memset(&exp, 0, sizeof(struct ExpirePolicy));
105 extract(which, argbuf, 0);
106 exp.expire_mode = extract_int(argbuf, 1);
107 exp.expire_value = extract_int(argbuf, 2);
109 if ((exp.expire_mode < 0) || (exp.expire_mode > 3)) {
110 cprintf("%d Invalid policy.\n", ERROR);
114 if (!strcasecmp(which, "room")) {
115 if (!is_room_aide()) {
116 cprintf("%d Higher access required.\n",
117 ERROR+HIGHER_ACCESS_REQUIRED);
120 lgetroom(&CC->quickroom, CC->quickroom.QRname);
121 memcpy(&CC->quickroom.QRep, &exp, sizeof(struct ExpirePolicy));
122 lputroom(&CC->quickroom);
123 cprintf("%d Room expire policy set.\n", CIT_OK);
127 if (CC->usersupp.axlevel < 6) {
128 cprintf("%d Higher access required.\n",
129 ERROR+HIGHER_ACCESS_REQUIRED);
133 if (!strcasecmp(which, "floor")) {
134 lgetfloor(&flbuf, CC->quickroom.QRfloor);
135 memcpy(&flbuf.f_ep, &exp, sizeof(struct ExpirePolicy));
136 lputfloor(&flbuf, CC->quickroom.QRfloor);
137 cprintf("%d Floor expire policy set.\n", CIT_OK);
141 else if (!strcasecmp(which, "site")) {
142 if (exp.expire_mode == EXPIRE_NEXTLEVEL) {
143 cprintf("%d Invalid policy (no higher level)\n",
147 memcpy(&config.c_ep, &exp, sizeof(struct ExpirePolicy));
149 cprintf("%d Site expire policy set.\n", CIT_OK);
154 cprintf("%d Invalid keyword.\n", ERROR);