4 * Functions which manage policy for rooms (such as message expiry)
20 #include "sysdep_decls.h"
24 #include "citserver.h"
29 * Retrieve the applicable expire policy for a specific room
31 void GetExpirePolicy(struct ExpirePolicy *epbuf, struct quickroom *qrbuf) {
34 /* If the room has its own policy, return it */
35 if (qrbuf->QRep.expire_mode != 0) {
36 memcpy(epbuf, &qrbuf->QRep, sizeof(struct ExpirePolicy));
40 /* Otherwise, if the floor has its own policy, return it */
41 getfloor(&flbuf, qrbuf->QRfloor);
42 if (flbuf.f_ep.expire_mode != 0) {
43 memcpy(epbuf, &flbuf.f_ep, sizeof(struct ExpirePolicy));
47 /* Otherwise, fall back on the system default */
48 memcpy(epbuf, &config.c_ep, sizeof(struct ExpirePolicy));
55 void cmd_gpex(char *argbuf) {
56 struct ExpirePolicy exp;
60 extract(which, argbuf, 0);
61 if (!strcasecmp(which, "room")) {
62 memcpy(&exp, &CC->quickroom.QRep, sizeof(struct ExpirePolicy));
64 else if (!strcasecmp(which, "floor")) {
65 getfloor(&flbuf, CC->quickroom.QRfloor);
66 memcpy(&exp, &flbuf.f_ep, sizeof(struct ExpirePolicy));
68 else if (!strcasecmp(which, "site")) {
69 memcpy(&exp, &config.c_ep, sizeof(struct ExpirePolicy));
72 cprintf("%d Invalid keyword.\n", ERROR);
76 cprintf("%d %d|%d\n", OK, exp.expire_mode, exp.expire_value);
83 void cmd_spex(char *argbuf) {
84 struct ExpirePolicy exp;
88 memset(&exp, 0, sizeof(struct ExpirePolicy));
89 extract(which, argbuf, 0);
90 exp.expire_mode = extract_int(argbuf, 1);
91 exp.expire_value = extract_int(argbuf, 2);
93 if ((exp.expire_mode < 0) || (exp.expire_mode > 3)) {
94 cprintf("%d Invalid policy.\n", ERROR);
98 if (!strcasecmp(which, "room")) {
99 if (!is_room_aide()) {
100 cprintf("%d Higher access required.\n",
101 ERROR+HIGHER_ACCESS_REQUIRED);
104 lgetroom(&CC->quickroom, CC->quickroom.QRname);
105 memcpy(&CC->quickroom.QRep, &exp, sizeof(struct ExpirePolicy));
106 lputroom(&CC->quickroom);
107 cprintf("%d ok\n", OK);
111 if (CC->usersupp.axlevel < 6) {
112 cprintf("%d Higher access required.\n",
113 ERROR+HIGHER_ACCESS_REQUIRED);
117 if (!strcasecmp(which, "floor")) {
118 lgetfloor(&flbuf, CC->quickroom.QRfloor);
119 memcpy(&flbuf.f_ep, &exp, sizeof(struct ExpirePolicy));
120 lputfloor(&flbuf, CC->quickroom.QRfloor);
121 cprintf("%d ok\n", OK);
125 else if (!strcasecmp(which, "site")) {
126 if (exp.expire_mode == EXPIRE_NEXTLEVEL) {
127 cprintf("%d Invalid policy (no higher level)\n",
131 memcpy(&config.c_ep, &exp, sizeof(struct ExpirePolicy));
133 cprintf("%d ok\n", OK);
138 cprintf("%d Invalid keyword.\n", ERROR);