src/server/safs/common.c

changeset 154
6394ce09889a
parent 60
feb2f1e115c6
child 157
a0c8e752490d
equal deleted inserted replaced
152:8b85c5face66 154:6394ce09889a
29 #include "common.h" 29 #include "common.h"
30 30
31 #include "../daemon/httprequest.h" 31 #include "../daemon/httprequest.h"
32 #include "../daemon/log.h" 32 #include "../daemon/log.h"
33 33
34 #include "../util/pblock.h"
35 #include "../util/util.h"
36 #include "../../ucx/map.h"
37
38 static UcxMap *var_names;
39
40 enum SAFVarNames {
41 COMMONSAF_INSERT_CLIENT = 0,
42 COMMONSAF_INSERT_VARS,
43 COMMONSAF_INSERT_REQPB,
44 COMMONSAF_INSERT_HEADERS,
45 COMMONSAF_INSERT_SRVHDRS,
46 COMMONSAF_SET_CLIENT,
47 COMMONSAF_SET_VARS,
48 COMMONSAF_SET_REQPB,
49 COMMONSAF_SET_HEADERS,
50 COMMONSAF_SET_SRVHDRS,
51 COMMONSAF_REMOVE_CLIENT,
52 COMMONSAF_REMOVE_VARS,
53 COMMONSAF_REMOVE_REQPB,
54 COMMONSAF_REMOVE_HEADERS,
55 COMMONSAF_REMOVE_SRVHDRS,
56 COMMONSAF_ABORT,
57 COMMONSAF_NOACTION,
58 COMMONSAF_ERROR,
59 COMMONSAF_ESCAPE,
60 COMMONSAF_FIND_PATHINFO_FORWARD,
61 COMMONSAF_HTTP_DOWNGRADE,
62 COMMONSAF_HTTP_UPGRADE,
63 COMMONSAF_KEEP_ALIVE,
64 COMMONSAF_NAME,
65 COMMONSAF_SENTHDRS,
66 COMMONSAF_STOP,
67 COMMONSAF_URL
68 };
69
70 #define COMMONSAF_RET_DEF 0
71 #define COMMONSAF_RET_NOACTION 1
72 #define COMMONSAF_RET_STOP 2
73 #define COMMONSAF_REQ_ABORTED -1
74 #define COMMONSAF_RET_ERROR -2
75
76 void common_saf_init() {
77 var_names = ucx_map_new(12);
78
79 ucx_map_cstr_put(var_names, "insert-client", (intptr_t)COMMONSAF_INSERT_CLIENT);
80 ucx_map_cstr_put(var_names, "insert-vars", (intptr_t)COMMONSAF_INSERT_VARS);
81 ucx_map_cstr_put(var_names, "insert-reqpb", (intptr_t)COMMONSAF_INSERT_REQPB);
82 ucx_map_cstr_put(var_names, "insert-headers", (intptr_t)COMMONSAF_INSERT_HEADERS);
83 ucx_map_cstr_put(var_names, "insert-srvhdrs", (intptr_t)COMMONSAF_INSERT_SRVHDRS);
84
85 ucx_map_cstr_put(var_names, "set-client", (intptr_t)COMMONSAF_SET_CLIENT);
86 ucx_map_cstr_put(var_names, "set-vars", (intptr_t)COMMONSAF_SET_VARS);
87 ucx_map_cstr_put(var_names, "set-reqpb", (intptr_t)COMMONSAF_SET_REQPB);
88 ucx_map_cstr_put(var_names, "set-headers", (intptr_t)COMMONSAF_SET_HEADERS);
89 ucx_map_cstr_put(var_names, "set-srvhdrs", (intptr_t)COMMONSAF_SET_SRVHDRS);
90
91 ucx_map_cstr_put(var_names, "remove-client", (intptr_t)COMMONSAF_REMOVE_CLIENT);
92 ucx_map_cstr_put(var_names, "remove-vars", (intptr_t)COMMONSAF_REMOVE_VARS);
93 ucx_map_cstr_put(var_names, "remove-reqpb", (intptr_t)COMMONSAF_REMOVE_REQPB);
94 ucx_map_cstr_put(var_names, "remove-headers", (intptr_t)COMMONSAF_REMOVE_HEADERS);
95 ucx_map_cstr_put(var_names, "remove-srvhdrs", (intptr_t)COMMONSAF_REMOVE_SRVHDRS);
96
97 ucx_map_cstr_put(var_names, "abort", (intptr_t)COMMONSAF_ABORT);
98 ucx_map_cstr_put(var_names, "noaction", (intptr_t)COMMONSAF_NOACTION);
99 ucx_map_cstr_put(var_names, "error", (intptr_t)COMMONSAF_ERROR);
100 ucx_map_cstr_put(var_names, "escape", (intptr_t)COMMONSAF_ESCAPE);
101 ucx_map_cstr_put(var_names, "find-pathinfo-forward", (intptr_t)COMMONSAF_FIND_PATHINFO_FORWARD);
102 ucx_map_cstr_put(var_names, "http-downgrade", (intptr_t)COMMONSAF_HTTP_DOWNGRADE);
103 ucx_map_cstr_put(var_names, "http-upgrade", (intptr_t)COMMONSAF_HTTP_UPGRADE);
104 ucx_map_cstr_put(var_names, "keep-alive", (intptr_t)COMMONSAF_KEEP_ALIVE);
105 ucx_map_cstr_put(var_names, "name", (intptr_t)COMMONSAF_NAME);
106 }
107
34 int print_message(pblock *pb, Session *sn, Request *rq) { 108 int print_message(pblock *pb, Session *sn, Request *rq) {
35 char *msg = pblock_findval("msg", pb); 109 char *msg = pblock_findval("msg", pb);
36 if(msg) { 110 if(msg) {
37 printf("%s\n", msg);
38 log_ereport(LOG_INFORM, "%s", msg); 111 log_ereport(LOG_INFORM, "%s", msg);
39 } 112 }
40 113
41 return REQ_NOACTION; 114 return REQ_NOACTION;
42 } 115 }
116
117
118 static int set_var(Session *sn, Request *rq, char *var, char *value) {
119 intptr_t v = (intptr_t)ucx_map_cstr_get(var_names, var);
120 switch(v) {
121 default: break;
122 case COMMONSAF_INSERT_CLIENT: break;
123 case COMMONSAF_INSERT_VARS: break;
124 case COMMONSAF_INSERT_REQPB: break;
125 case COMMONSAF_INSERT_HEADERS: break;
126 case COMMONSAF_INSERT_SRVHDRS: break;
127 case COMMONSAF_SET_CLIENT: break;
128 case COMMONSAF_SET_VARS: break;
129 case COMMONSAF_SET_REQPB: break;
130 case COMMONSAF_SET_HEADERS: break;
131 case COMMONSAF_SET_SRVHDRS: break;
132 case COMMONSAF_REMOVE_CLIENT: break;
133 case COMMONSAF_REMOVE_VARS: break;
134 case COMMONSAF_REMOVE_HEADERS: break;
135 case COMMONSAF_REMOVE_SRVHDRS: break;
136 case COMMONSAF_ABORT: return COMMONSAF_REQ_ABORTED;
137 case COMMONSAF_ERROR: {
138 return COMMONSAF_REQ_ABORTED;
139 }
140 case COMMONSAF_ESCAPE: break;
141 case COMMONSAF_FIND_PATHINFO_FORWARD: break;
142 case COMMONSAF_HTTP_DOWNGRADE: break;
143 case COMMONSAF_HTTP_UPGRADE: break;
144 case COMMONSAF_KEEP_ALIVE: {
145 rq->rq_attr.keep_alive = util_getboolean(var, 0);
146 break;
147 }
148 case COMMONSAF_NAME: break;
149 case COMMONSAF_SENTHDRS: break;
150 case COMMONSAF_STOP: return COMMONSAF_RET_STOP;
151 case COMMONSAF_URL: break;
152 }
153 return COMMONSAF_RET_DEF;
154 }
155
156 int set_variable(pblock *pb, Session *sn, Request *rq) {
157 int ret = REQ_NOACTION;
158 int set = 0;
159
160 for(int i=0;i<pb->hsize;i++) {
161 pb_entry *entry = pb->ht[i];
162 while(entry) {
163 int r = set_var(sn, rq, entry->param->name, entry->param->value);
164 switch(r) {
165 default:
166 case COMMONSAF_RET_DEF: break;
167 case COMMONSAF_RET_NOACTION: set = 1; ret = REQ_NOACTION; break;
168 case COMMONSAF_RET_STOP: set = 1; ret = REQ_PROCEED; break;
169 case COMMONSAF_REQ_ABORTED: ret = set ? ret : REQ_ABORTED; break;
170 case COMMONSAF_RET_ERROR: return REQ_ABORTED;
171 }
172 entry = entry->next;
173 }
174 }
175
176 return ret;
177 }

mercurial