18 #include "sysdep_decls.h"
22 #include "serv_chat.h"
23 #include "citserver.h"
28 * Retrieve the applicable expire policy for a specific room
30 void GetExpirePolicy(struct ExpirePolicy *epbuf, struct quickroom *qrbuf) {
33 /* If the room has its own policy, return it */
34 if (qrbuf->QRep.expire_mode != 0) {
35 memcpy(epbuf, &qrbuf->QRep, sizeof(struct ExpirePolicy));
39 /* Otherwise, if the floor has its own policy, return it */
40 getfloor(&flbuf, qrbuf->QRfloor);
41 if (flbuf.f_ep.expire_mode != 0) {
42 memcpy(epbuf, &flbuf.f_ep, sizeof(struct ExpirePolicy));
46 /* Otherwise, fall back on the system default */
47 memcpy(epbuf, &config.c_ep, sizeof(struct ExpirePolicy));
54 void cmd_gpex(char *argbuf) {
55 struct ExpirePolicy exp;
59 extract(which, argbuf, 0);
60 if (!strcasecmp(which, "room")) {
61 memcpy(&exp, &CC->quickroom.QRep, sizeof(struct ExpirePolicy));
63 else if (!strcasecmp(which, "floor")) {
64 getfloor(&flbuf, CC->quickroom.QRfloor);
65 memcpy(&exp, &flbuf.f_ep, sizeof(struct ExpirePolicy));
67 else if (!strcasecmp(which, "site")) {
68 memcpy(&exp, &config.c_ep, sizeof(struct ExpirePolicy));
71 cprintf("%d Invalid keyword.\n", ERROR);
75 cprintf("%d %d|%d\n", OK, exp.expire_mode, exp.expire_value);
82 void cmd_spex(char *argbuf) {
83 struct ExpirePolicy exp;
87 memset(&exp, 0, sizeof(struct ExpirePolicy));
88 extract(which, argbuf, 0);
89 exp.expire_mode = extract_int(argbuf, 1);
90 exp.expire_value = extract_int(argbuf, 2);
92 if ((exp.expire_mode < 0) || (exp.expire_mode > 3)) {
93 cprintf("%d Invalid policy.\n", ERROR);
97 if (!strcasecmp(which, "room")) {
98 if (!is_room_aide()) {
99 cprintf("%d Higher access required.\n",
100 ERROR+HIGHER_ACCESS_REQUIRED);
103 lgetroom(&CC->quickroom, CC->quickroom.QRname);
104 memcpy(&CC->quickroom.QRep, &exp, sizeof(struct ExpirePolicy));
105 lputroom(&CC->quickroom, CC->quickroom.QRname);
106 cprintf("%d ok\n", OK);
110 if (CC->usersupp.axlevel < 6) {
111 cprintf("%d Higher access required.\n",
112 ERROR+HIGHER_ACCESS_REQUIRED);
116 if (!strcasecmp(which, "floor")) {
117 lgetfloor(&flbuf, CC->quickroom.QRfloor);
118 memcpy(&flbuf.f_ep, &exp, sizeof(struct ExpirePolicy));
119 lputfloor(&flbuf, CC->quickroom.QRfloor);
120 cprintf("%d ok\n", OK);
124 else if (!strcasecmp(which, "site")) {
125 if (exp.expire_mode == EXPIRE_NEXTLEVEL) {
126 cprintf("%d Invalid policy (no higher level)\n",
130 memcpy(&config.c_ep, &exp, sizeof(struct ExpirePolicy));
132 cprintf("%d ok\n", OK);
137 cprintf("%d Invalid keyword.\n", ERROR);