Lines Matching refs:wsi
56 lws_wsi_is_h2(struct lws *wsi)
58 return wsi->upgraded_to_http2 ||
59 wsi->mux_substream ||
61 wsi->client_mux_substream ||
63 lwsi_role_h2(wsi) ||
64 lwsi_role_h2_ENCAPSULATION(wsi);
69 lws_add_http_header_by_name(struct lws *wsi, const unsigned char *name,
74 if (lws_wsi_is_h2(wsi))
75 return lws_add_http2_header_by_name(wsi, name,
78 (void)wsi;
104 int lws_finalize_http_header(struct lws *wsi, unsigned char **p,
108 if (lws_wsi_is_h2(wsi))
111 (void)wsi;
122 lws_finalize_write_http_header(struct lws *wsi, unsigned char *start,
128 if (lws_finalize_http_header(wsi, pp, end))
134 if (lws_write(wsi, start, (unsigned int)len, LWS_WRITE_HTTP_HEADERS) != len)
141 lws_add_http_header_by_token(struct lws *wsi, enum lws_token_indexes token,
147 if (lws_wsi_is_h2(wsi))
148 return lws_add_http2_header_by_token(wsi, token, value,
155 return lws_add_http_header_by_name(wsi, name, value, length, p, end);
159 lws_add_http_header_content_length(struct lws *wsi,
167 if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_CONTENT_LENGTH,
170 wsi->http.tx_content_length = content_length;
171 wsi->http.tx_content_remain = content_length;
174 lws_wsi_tag(wsi), (unsigned long long)content_length);
182 lws_add_http_common_headers(struct lws *wsi, unsigned int code,
190 if (lws_add_http_header_status(wsi, code, p, end))
194 lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_CONTENT_TYPE,
200 if (!wsi->http.lcs && content_type &&
204 lws_http_compression_apply(wsi, NULL, p, end, 0);
213 !wsi->http.lcs &&
216 if (lws_add_http_header_content_length(wsi, content_len,
223 if (!wsi->mux_substream && wsi->http.lcs) {
231 wsi->http.comp_ctx.chunking = 1;
232 if (lws_add_http_header_by_token(wsi,
240 if (wsi->http.lcs &&
241 wsi->http.conn_type == HTTP_CONNECTION_KEEP_ALIVE)
245 if (!wsi->mux_substream) {
246 if (lws_add_http_header_by_token(wsi,
252 wsi->http.conn_type = (enum http_conn_type)types[t];
310 lws_add_http_header_status(struct lws *wsi, unsigned int _code,
322 wsi->http.response_code = code;
324 wsi->http.access_log.response = (int)code;
328 if (lws_wsi_is_h2(wsi)) {
329 n = lws_add_http2_header_status(wsi, code, p, end);
350 if (wsi->http.request_version < LWS_ARRAY_SIZE(hver))
351 p1 = hver[wsi->http.request_version];
359 if (lws_add_http_header_by_name(wsi, NULL, code_and_desc, n, p,
364 headers = wsi->a.vhost->headers;
366 if (lws_add_http_header_by_name(wsi,
375 if (wsi->a.vhost->options &
379 if (lws_add_http_header_by_name(wsi,
389 if (wsi->a.context->server_string &&
391 assert(wsi->a.context->server_string_len > 0);
392 if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_SERVER,
393 (unsigned char *)wsi->a.context->server_string,
394 wsi->a.context->server_string_len, p, end))
398 if (wsi->a.vhost->options & LWS_SERVER_OPTION_STS)
399 if (lws_add_http_header_by_name(wsi, (unsigned char *)
415 lws_return_http_status(struct lws *wsi, unsigned int code,
418 struct lws_context *context = lws_get_context(wsi);
419 struct lws_context_per_thread *pt = &context->pt[(int)wsi->tsi];
427 if (!wsi->a.vhost) {
428 lwsl_err("%s: wsi not bound to vhost\n", __func__);
433 if (!wsi->handling_404 &&
434 wsi->a.vhost->http.error_document_404 &&
437 if (lws_http_redirect(wsi, HTTP_STATUS_FOUND,
438 (uint8_t *)wsi->a.vhost->http.error_document_404,
439 (int)strlen(wsi->a.vhost->http.error_document_404),
450 if (lws_add_http_header_status(wsi, code, &p, end))
453 if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_CONTENT_TYPE,
467 if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_CONTENT_LENGTH,
471 if (lws_finalize_http_header(wsi, &p, end))
475 if (wsi->mux_substream) {
489 m = lws_write(wsi, start, lws_ptr_diff_size_t(p, start),
498 wsi->http.tx_content_length = (unsigned int)len;
499 wsi->http.tx_content_remain = (unsigned int)len;
501 wsi->h2.pending_status_body = lws_malloc((unsigned int)len + LWS_PRE + 1,
503 if (!wsi->h2.pending_status_body)
506 strcpy(wsi->h2.pending_status_body + LWS_PRE, body);
507 lws_callback_on_writable(wsi);
520 m = lws_write(wsi, start, (unsigned int)n, LWS_WRITE_HTTP);
529 lws_http_redirect(struct lws *wsi, int code, const unsigned char *loc, int len,
534 if (lws_add_http_header_status(wsi, (unsigned int)code, p, end))
537 if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_LOCATION, loc, len,
545 if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_CONTENT_TYPE,
549 if (lws_add_http_header_by_token(wsi, WSI_TOKEN_HTTP_CONTENT_LENGTH,
553 if (lws_finalize_http_header(wsi, p, end))
556 return lws_write(wsi, start, lws_ptr_diff_size_t(*p, start),
563 lws_http_compression_apply(struct lws *wsi, const char *name,
566 (void)wsi;
577 lws_http_headers_detach(struct lws *wsi)
579 return lws_header_table_detach(wsi, 0);
590 struct lws *wsi;
604 if (!ah->in_use || !ah->wsi || !ah->assigned ||
605 (ah->wsi->a.vhost &&
607 ah->wsi->a.vhost->timeout_secs_ah_idle + 360)) {
618 wsi = ah->wsi;
621 lws_get_peer_simple(wsi, buf, sizeof(buf));
625 lwsl_notice("%s: ah excessive hold: wsi %p\n"
627 " ah pos %lu\n", __func__, lws_wsi_tag(wsi),
638 len = lws_hdr_total_length(wsi, (enum lws_token_indexes)m);
644 if (lws_hdr_copy(wsi, buf, sizeof buf, (enum lws_token_indexes)m) > 0) {
654 lws_header_table_detach(wsi, 0);
658 __lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS,