15 #include "sysdep_decls.h"
19 #include "serv_chat.h"
20 #include "citserver.h"
25 * Retrieve the applicable expire policy for a specific room
27 void GetExpirePolicy(struct ExpirePolicy *epbuf, struct quickroom *qrbuf) {
30 /* If the room has its own policy, return it */
31 if (qrbuf->QRep.expire_mode != 0) {
32 memcpy(epbuf, &qrbuf->QRep, sizeof(struct ExpirePolicy));
36 /* Otherwise, if the floor has its own policy, return it */
37 getfloor(&flbuf, qrbuf->QRfloor);
38 if (flbuf.f_ep.expire_mode != 0) {
39 memcpy(epbuf, &flbuf.f_ep, sizeof(struct ExpirePolicy));
43 /* Otherwise, fall back on the system default */
44 memcpy(epbuf, &config.c_ep, sizeof(struct ExpirePolicy));
51 void cmd_gpex(char *argbuf) {
52 struct ExpirePolicy exp;
56 extract(which, argbuf, 0);
57 if (!strcasecmp(which, "room")) {
58 memcpy(&exp, &CC->quickroom.QRep, sizeof(struct ExpirePolicy));
60 else if (!strcasecmp(which, "floor")) {
61 getfloor(&flbuf, CC->quickroom.QRfloor);
62 memcpy(&exp, &flbuf.f_ep, sizeof(struct ExpirePolicy));
64 else if (!strcasecmp(which, "site")) {
65 memcpy(&exp, &config.c_ep, sizeof(struct ExpirePolicy));
68 cprintf("%d Invalid keyword.\n", ERROR);
72 cprintf("%d %d|%d\n", OK, exp.expire_mode, exp.expire_value);
79 void cmd_spex(char *argbuf) {
80 struct ExpirePolicy exp;
84 memset(&exp, 0, sizeof(struct ExpirePolicy));
85 extract(which, argbuf, 0);
86 exp.expire_mode = extract_int(argbuf, 1);
87 exp.expire_value = extract_int(argbuf, 2);
89 if ((exp.expire_mode < 0) || (exp.expire_mode > 3)) {
90 cprintf("%d Invalid policy.\n", ERROR);
94 if (!strcasecmp(which, "room")) {
95 if (!is_room_aide()) {
96 cprintf("%d Higher access required.\n",
97 ERROR+HIGHER_ACCESS_REQUIRED);
100 lgetroom(&CC->quickroom, CC->quickroom.QRname);
101 memcpy(&CC->quickroom.QRep, &exp, sizeof(struct ExpirePolicy));
102 lputroom(&CC->quickroom);
103 cprintf("%d ok\n", OK);
107 if (CC->usersupp.axlevel < 6) {
108 cprintf("%d Higher access required.\n",
109 ERROR+HIGHER_ACCESS_REQUIRED);
113 if (!strcasecmp(which, "floor")) {
114 lgetfloor(&flbuf, CC->quickroom.QRfloor);
115 memcpy(&flbuf.f_ep, &exp, sizeof(struct ExpirePolicy));
116 lputfloor(&flbuf, CC->quickroom.QRfloor);
117 cprintf("%d ok\n", OK);
121 else if (!strcasecmp(which, "site")) {
122 if (exp.expire_mode == EXPIRE_NEXTLEVEL) {
123 cprintf("%d Invalid policy (no higher level)\n",
127 memcpy(&config.c_ep, &exp, sizeof(struct ExpirePolicy));
129 cprintf("%d ok\n", OK);
134 cprintf("%d Invalid keyword.\n", ERROR);