src/server/safs/common.c

changeset 157
a0c8e752490d
parent 154
6394ce09889a
child 160
389bd0e1ffa9
equal deleted inserted replaced
155:36cd2e280386 157:a0c8e752490d
36 #include "../../ucx/map.h" 36 #include "../../ucx/map.h"
37 37
38 static UcxMap *var_names; 38 static UcxMap *var_names;
39 39
40 enum SAFVarNames { 40 enum SAFVarNames {
41 COMMONSAF_INSERT_CLIENT = 0, 41 COMMONSAF_INSERT_CLIENT = 1,
42 COMMONSAF_INSERT_VARS, 42 COMMONSAF_INSERT_VARS,
43 COMMONSAF_INSERT_REQPB, 43 COMMONSAF_INSERT_REQPB,
44 COMMONSAF_INSERT_HEADERS, 44 COMMONSAF_INSERT_HEADERS,
45 COMMONSAF_INSERT_SRVHDRS, 45 COMMONSAF_INSERT_SRVHDRS,
46 COMMONSAF_SET_CLIENT, 46 COMMONSAF_SET_CLIENT,
72 #define COMMONSAF_RET_STOP 2 72 #define COMMONSAF_RET_STOP 2
73 #define COMMONSAF_REQ_ABORTED -1 73 #define COMMONSAF_REQ_ABORTED -1
74 #define COMMONSAF_RET_ERROR -2 74 #define COMMONSAF_RET_ERROR -2
75 75
76 void common_saf_init() { 76 void common_saf_init() {
77 var_names = ucx_map_new(12); 77 var_names = ucx_map_new(32);
78 78
79 ucx_map_cstr_put(var_names, "insert-client", (intptr_t)COMMONSAF_INSERT_CLIENT); 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); 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); 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); 82 ucx_map_cstr_put(var_names, "insert-headers", (intptr_t)COMMONSAF_INSERT_HEADERS);
112 } 112 }
113 113
114 return REQ_NOACTION; 114 return REQ_NOACTION;
115 } 115 }
116 116
117 static void var_set(char *value, pblock *pb, WSBool insert) {
118 sstr_t n;
119 sstr_t v;
120 v.ptr = NULL;
121
122 n.ptr = value;
123 int i;
124 int len = strlen(value);
125 for(i=1;i<len;i++) {
126 if(value[i] == '=') {
127 n.length = i;
128 v = sstrsubs(sstrn(value, len), i + 1);
129 break;
130 }
131 }
132 if(!v.ptr || v.length == 0) {
133 log_ereport(
134 LOG_MISCONFIG,
135 "set-variable: string '%s' has not name=value format",
136 value);
137 return;
138 }
139
140 if(!insert) {
141 // TODO
142 }
143 pblock_nvlinsert(n.ptr, n.length, v.ptr, v.length, pb);
144 }
117 145
118 static int set_var(Session *sn, Request *rq, char *var, char *value) { 146 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); 147 intptr_t v = (intptr_t)ucx_map_cstr_get(var_names, var);
120 switch(v) { 148 switch(v) {
121 default: break; 149 default: break;
122 case COMMONSAF_INSERT_CLIENT: break; 150 case COMMONSAF_INSERT_CLIENT: var_set(value, sn->client, TRUE); break;
123 case COMMONSAF_INSERT_VARS: break; 151 case COMMONSAF_INSERT_VARS: var_set(value, rq->vars, TRUE); break;
124 case COMMONSAF_INSERT_REQPB: break; 152 case COMMONSAF_INSERT_REQPB: var_set(value, rq->reqpb, TRUE); break;
125 case COMMONSAF_INSERT_HEADERS: break; 153 case COMMONSAF_INSERT_HEADERS: var_set(value, rq->headers, TRUE); break;
126 case COMMONSAF_INSERT_SRVHDRS: break; 154 case COMMONSAF_INSERT_SRVHDRS: var_set(value, rq->srvhdrs, TRUE); break;
127 case COMMONSAF_SET_CLIENT: break; 155 case COMMONSAF_SET_CLIENT: var_set(value, sn->client, FALSE); break;
128 case COMMONSAF_SET_VARS: break; 156 case COMMONSAF_SET_VARS: var_set(value, rq->vars, FALSE); break;
129 case COMMONSAF_SET_REQPB: break; 157 case COMMONSAF_SET_REQPB: var_set(value, rq->reqpb, FALSE); break;
130 case COMMONSAF_SET_HEADERS: break; 158 case COMMONSAF_SET_HEADERS: var_set(value, rq->headers, FALSE); break;
131 case COMMONSAF_SET_SRVHDRS: break; 159 case COMMONSAF_SET_SRVHDRS: var_set(value, rq->srvhdrs, FALSE); break;
132 case COMMONSAF_REMOVE_CLIENT: break; 160 case COMMONSAF_REMOVE_CLIENT: pblock_remove(value, sn->client); break;
133 case COMMONSAF_REMOVE_VARS: break; 161 case COMMONSAF_REMOVE_VARS: pblock_remove(value, rq->vars); break;
134 case COMMONSAF_REMOVE_HEADERS: break; 162 case COMMONSAF_REMOVE_HEADERS: pblock_remove(value, rq->headers);break;
135 case COMMONSAF_REMOVE_SRVHDRS: break; 163 case COMMONSAF_REMOVE_SRVHDRS: pblock_remove(value, rq->srvhdrs); break;
136 case COMMONSAF_ABORT: return COMMONSAF_REQ_ABORTED; 164 case COMMONSAF_ABORT: return COMMONSAF_REQ_ABORTED;
137 case COMMONSAF_ERROR: { 165 case COMMONSAF_ERROR: {
138 return COMMONSAF_REQ_ABORTED; 166 return COMMONSAF_REQ_ABORTED;
139 } 167 }
140 case COMMONSAF_ESCAPE: break; 168 case COMMONSAF_ESCAPE: break;

mercurial