MCPcopy Create free account
hub / github.com/apache/trafficserver / processRequest

Function processRequest

plugins/esi/serverIntercept.cc:209–280  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

207}
208
209static bool
210processRequest(SContData *cont_data)
211{
212 string reply_header("HTTP/1.1 200 OK\r\n");
213
214 TSMLoc field_loc = TSMimeHdrFieldGet(cont_data->req_hdr_bufp, cont_data->req_hdr_loc, 0);
215 while (field_loc) {
216 TSMLoc next_field_loc;
217 const char *name;
218 int name_len;
219 name = TSMimeHdrFieldNameGet(cont_data->req_hdr_bufp, cont_data->req_hdr_loc, field_loc, &name_len);
220 if (name) {
221 bool echo_header = false;
222 if ((name_len > ECHO_HEADER_PREFIX_LEN) && (strncasecmp(name, ECHO_HEADER_PREFIX, ECHO_HEADER_PREFIX_LEN) == 0)) {
223 echo_header = true;
224 reply_header.append(name + ECHO_HEADER_PREFIX_LEN, name_len - ECHO_HEADER_PREFIX_LEN);
225 } else if ((name_len == SERVER_INTERCEPT_HEADER_LEN) && (strncasecmp(name, SERVER_INTERCEPT_HEADER, name_len) == 0)) {
226 echo_header = true;
227 reply_header.append(name, name_len);
228 }
229 if (echo_header) {
230 reply_header.append(": ");
231 int n_field_values = TSMimeHdrFieldValuesCount(cont_data->req_hdr_bufp, cont_data->req_hdr_loc, field_loc);
232 for (int i = 0; i < n_field_values; ++i) {
233 const char *value;
234 int value_len;
235 value = TSMimeHdrFieldValueStringGet(cont_data->req_hdr_bufp, cont_data->req_hdr_loc, field_loc, i, &value_len);
236 if (!value_len) {
237 Dbg(dbg_ctl, "[%s] Error while getting value #%d of header [%.*s]", __FUNCTION__, i, name_len, name);
238 } else {
239 if (reply_header[reply_header.size() - 2] != ':') {
240 reply_header.append(", ");
241 }
242 reply_header.append(value, value_len);
243 }
244 }
245 reply_header.append("\r\n");
246 }
247 }
248 next_field_loc = TSMimeHdrFieldNext(cont_data->req_hdr_bufp, cont_data->req_hdr_loc, field_loc);
249 TSHandleMLocRelease(cont_data->req_hdr_bufp, cont_data->req_hdr_loc, field_loc);
250 field_loc = next_field_loc;
251 }
252
253 int body_size = static_cast<int>(cont_data->body.size());
254 if (cont_data->req_content_len != body_size) {
255 TSError("[server_intercept][%s] Read only %d bytes of body; expecting %d bytes", __FUNCTION__, body_size,
256 cont_data->req_content_len);
257 }
258
259 char buf[64];
260 snprintf(buf, 64, "%s: %d\r\n\r\n", TS_MIME_FIELD_CONTENT_LENGTH, body_size);
261 reply_header.append(buf);
262
263 // TSError("[%s] reply header: \n%s", __FUNCTION__, reply_header.data());
264
265 cont_data->setupWrite();
266 if (TSIOBufferWrite(cont_data->output.buffer, reply_header.data(), reply_header.size()) == TS_ERROR) {

Callers 1

serverInterceptFunction · 0.85

Calls 14

TSMimeHdrFieldGetFunction · 0.85
TSMimeHdrFieldNameGetFunction · 0.85
TSMimeHdrFieldNextFunction · 0.85
TSHandleMLocReleaseFunction · 0.85
TSIOBufferWriteFunction · 0.85
TSVIONBytesSetFunction · 0.85
TSVIOReenableFunction · 0.85
TSErrorFunction · 0.50
appendMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected