15 #include "sysdep_decls.h"
19 #include "citserver.h"
24 * Retrieve the applicable expire policy for a specific room
26 void GetExpirePolicy(struct ExpirePolicy *epbuf, struct quickroom *qrbuf) {
29 /* If the room has its own policy, return it */
30 if (qrbuf->QRep.expire_mode != 0) {
31 memcpy(epbuf, &qrbuf->QRep, sizeof(struct ExpirePolicy));
35 /* Otherwise, if the floor has its own policy, return it */
36 getfloor(&flbuf, qrbuf->QRfloor);
37 if (flbuf.f_ep.expire_mode != 0) {
38 memcpy(epbuf, &flbuf.f_ep, sizeof(struct ExpirePolicy));
42 /* Otherwise, fall back on the system default */
43 memcpy(epbuf, &config.c_ep, sizeof(struct ExpirePolicy));
50 void cmd_gpex(char *argbuf) {
51 struct ExpirePolicy exp;
55 extract(which, argbuf, 0);
56 if (!strcasecmp(which, "room")) {
57 memcpy(&exp, &CC->quickroom.QRep, sizeof(struct ExpirePolicy));
59 else if (!strcasecmp(which, "floor")) {
60 getfloor(&flbuf, CC->quickroom.QRfloor);
61 memcpy(&exp, &flbuf.f_ep, sizeof(struct ExpirePolicy));
63 else if (!strcasecmp(which, "site")) {
64 memcpy(&exp, &config.c_ep, sizeof(struct ExpirePolicy));
67 cprintf("%d Invalid keyword.\n", ERROR);
71 cprintf("%d %d|%d\n", OK, exp.expire_mode, exp.expire_value);
78 void cmd_spex(char *argbuf) {
79 struct ExpirePolicy exp;
83 memset(&exp, 0, sizeof(struct ExpirePolicy));
84 extract(which, argbuf, 0);
85 exp.expire_mode = extract_int(argbuf, 1);
86 exp.expire_value = extract_int(argbuf, 2);
88 if ((exp.expire_mode < 0) || (exp.expire_mode > 3)) {
89 cprintf("%d Invalid policy.\n", ERROR);
93 if (!strcasecmp(which, "room")) {
94 if (!is_room_aide()) {
95 cprintf("%d Higher access required.\n",
96 ERROR+HIGHER_ACCESS_REQUIRED);
99 lgetroom(&CC->quickroom, CC->quickroom.QRname);
100 memcpy(&CC->quickroom.QRep, &exp, sizeof(struct ExpirePolicy));
101 lputroom(&CC->quickroom);
102 cprintf("%d ok\n", OK);
106 if (CC->usersupp.axlevel < 6) {
107 cprintf("%d Higher access required.\n",
108 ERROR+HIGHER_ACCESS_REQUIRED);
112 if (!strcasecmp(which, "floor")) {
113 lgetfloor(&flbuf, CC->quickroom.QRfloor);
114 memcpy(&flbuf.f_ep, &exp, sizeof(struct ExpirePolicy));
115 lputfloor(&flbuf, CC->quickroom.QRfloor);
116 cprintf("%d ok\n", OK);
120 else if (!strcasecmp(which, "site")) {
121 if (exp.expire_mode == EXPIRE_NEXTLEVEL) {
122 cprintf("%d Invalid policy (no higher level)\n",
126 memcpy(&config.c_ep, &exp, sizeof(struct ExpirePolicy));
128 cprintf("%d ok\n", OK);
133 cprintf("%d Invalid keyword.\n", ERROR);