Lines Matching refs:wsi

32 proxy_header(struct lws *wsi, struct lws *par, unsigned char *temp,
38 lwsl_wsi_debug(wsi, "no index %d:", index);
44 lwsl_wsi_notice(wsi, "unable to copy par hdr idx %d (len %d)",
49 lwsl_wsi_debug(wsi, "index %d: %s", index, (char *)temp);
51 if (lws_add_http_header_by_token(wsi, (enum lws_token_indexes)index, temp, n, p, end)) {
52 lwsl_wsi_notice(wsi, "unable to append par hdr idx %d (len %d)",
61 stream_close(struct lws *wsi)
65 if (wsi->http.did_stream_close)
68 wsi->http.did_stream_close = 1;
70 if (wsi->mux_substream) {
71 if (lws_write(wsi, (unsigned char *)buf + LWS_PRE, 0,
84 if (lws_write(wsi, (unsigned char *)buf + LWS_PRE, 5,
91 lwsl_wsi_info(wsi, "h2 fin wr failed");
110 lws_callback_ws_proxy(struct lws *wsi, enum lws_callback_reasons reason,
121 if (!wsi->h1_ws_proxied || !wsi->parent)
124 if (lws_process_ws_upgrade2(wsi->parent))
128 if (wsi->parent->mux_substream)
129 lwsl_wsi_info(wsi, "proxied h2 -> h1 ws established");
138 lwsl_wsi_info(wsi, "client closed: parent %s",
139 lws_wsi_tag(wsi->parent));
140 if (wsi->parent)
141 lws_set_timeout(wsi->parent, 1, LWS_TO_KILL_ASYNC);
149 proxy_header(wsi, wsi->parent, tmp, sizeof(tmp),
152 proxy_header(wsi, wsi->parent, tmp, sizeof(tmp),
155 proxy_header(wsi, wsi->parent, tmp, sizeof(tmp),
161 wsi->parent->ws->proxy_buffered += len;
162 if (wsi->parent->ws->proxy_buffered > 10 * 1024 * 1024) {
163 lwsl_wsi_err(wsi, "proxied ws connection "
172 pkt->first = (char)lws_is_first_fragment(wsi);
173 pkt->final = (char)lws_is_final_fragment(wsi);
174 pkt->binary = (char)lws_frame_is_binary(wsi);
178 lws_dll2_add_tail(&pkt->pkt_list, &wsi->parent->ws->proxy_owner);
179 lws_callback_on_writable(wsi->parent);
183 dll = lws_dll2_get_head(&wsi->ws->proxy_owner);
188 if (lws_write(wsi, ((unsigned char *)&pkt[1]) +
197 if (lws_dll2_get_head(&wsi->ws->proxy_owner))
198 lws_callback_on_writable(wsi);
207 lwsl_wsi_info(wsi, "closed");
216 pkt->first = (char)lws_is_first_fragment(wsi);
217 pkt->final = (char)lws_is_final_fragment(wsi);
218 pkt->binary = (char)lws_frame_is_binary(wsi);
222 lws_dll2_add_tail(&pkt->pkt_list, &wsi->child_list->ws->proxy_owner);
223 lws_callback_on_writable(wsi->child_list);
227 dll = lws_dll2_get_head(&wsi->ws->proxy_owner);
232 if (lws_write(wsi, ((unsigned char *)&pkt[1]) +
238 wsi->ws->proxy_buffered -= pkt->len;
243 if (lws_dll2_get_head(&wsi->ws->proxy_owner))
244 lws_callback_on_writable(wsi);
266 lws_callback_http_dummy(struct lws *wsi, enum lws_callback_reasons reason,
286 if (lws_return_http_status(wsi, HTTP_STATUS_NOT_FOUND, NULL))
289 if (lws_http_transaction_completed(wsi))
296 if (wsi->child_list) {
297 lwsl_wsi_info(wsi, "HTTP_BODY_COMPLETION: %d",
299 lws_callback_on_writable(wsi->child_list);
303 if (lws_return_http_status(wsi, 200, NULL))
309 if (lws_http_transaction_completed(wsi))
316 if (wsi->child_list) {
317 lwsl_wsi_info(wsi, "HTTP_BODY: stashing %d", (int)len);
319 &wsi->http.buflist_post_body, in, len) < 0)
321 lws_client_http_body_pending(wsi->child_list, 1);
322 lws_callback_on_writable(wsi->child_list);
330 if (wsi->reason_bf & (LWS_CB_REASON_AUX_BF__CGI_HEADERS |
332 n = lws_cgi_write_split_stdout_headers(wsi);
334 lwsl_wsi_debug(wsi, "AUX_BF__CGI forcing close");
337 if (!n && wsi->http.cgi && wsi->http.cgi->lsp &&
338 wsi->http.cgi->lsp->stdwsi[LWS_STDOUT])
340 wsi->http.cgi->lsp->stdwsi[LWS_STDOUT], 1);
342 if (wsi->reason_bf & LWS_CB_REASON_AUX_BF__CGI_HEADERS)
343 wsi->reason_bf &=
346 wsi->reason_bf &= (char)~LWS_CB_REASON_AUX_BF__CGI;
348 if (wsi->http.cgi && wsi->http.cgi->cgi_transaction_over) {
349 lwsl_wsi_info(wsi, "txn over");
356 if ((wsi->http.cgi && wsi->http.cgi->cgi_transaction_over) ||
357 (wsi->reason_bf & LWS_CB_REASON_AUX_BF__CGI_CHUNK_END)) {
358 if (!wsi->mux_substream) {
360 lwsl_wsi_debug(wsi, "wr chunk term and exiting");
361 lws_write(wsi, (unsigned char *)buf +
364 lws_write(wsi, (unsigned char *)buf +
369 if (lws_http_transaction_completed(wsi))
376 if (wsi->reason_bf & LWS_CB_REASON_AUX_BF__PROXY_HEADERS) {
378 wsi->reason_bf &=
382 if (!wsi->http.prh_content_length)
385 lwsl_wsi_debug(wsi, "issuing proxy headers: clen %d",
386 (int)wsi->http.prh_content_length);
387 n = lws_write(wsi, wsi->http.pending_return_headers +
389 wsi->http.pending_return_headers_len,
392 lws_free_set_NULL(wsi->http.pending_return_headers);
395 lwsl_wsi_err(wsi, "EST_CLIENT_HTTP: wr failed");
400 lws_callback_on_writable(wsi);
404 if (wsi->reason_bf & LWS_CB_REASON_AUX_BF__PROXY) {
414 wsi->reason_bf &= (char)~LWS_CB_REASON_AUX_BF__PROXY;
415 if (!lws_get_child(wsi))
419 if (lws_http_client_read(lws_get_child(wsi), &px,
421 lwsl_wsi_info(wsi, "LWS_CB_REASON_AUX_BF__PROXY: "
424 stream_close(wsi);
431 if (wsi->reason_bf & LWS_CB_REASON_AUX_BF__PROXY_TRANS_END) {
432 lwsl_wsi_info(wsi, "PROXY_TRANS_END");
434 wsi->reason_bf &= (char)~LWS_CB_REASON_AUX_BF__PROXY_TRANS_END;
436 if (stream_close(wsi))
439 if (lws_http_transaction_completed(wsi))
447 assert(lws_get_parent(wsi));
448 if (!lws_get_parent(wsi))
450 lws_get_parent(wsi)->reason_bf |= LWS_CB_REASON_AUX_BF__PROXY;
451 lws_callback_on_writable(lws_get_parent(wsi));
457 assert(lws_get_parent(wsi));
459 if (wsi->http.proxy_parent_chunked) {
462 lwsl_wsi_err(wsi, "oversize buf %d %d", (int)len,
478 n = lws_write(lws_get_parent(wsi),
482 n = lws_write(lws_get_parent(wsi), (unsigned char *)in,
504 parent = lws_get_parent(wsi);
512 if (lws_add_http_header_status(lws_get_parent(wsi),
513 lws_http_client_http_response(wsi), &p, end))
520 proxy_header(parent, wsi, end, MAXHDRVAL,
522 proxy_header(parent, wsi, end, MAXHDRVAL,
524 proxy_header(parent, wsi, end, MAXHDRVAL,
526 proxy_header(parent, wsi, end, MAXHDRVAL,
528 proxy_header(parent, wsi, end, MAXHDRVAL,
530 proxy_header(parent, wsi, end, MAXHDRVAL,
532 proxy_header(parent, wsi, end, MAXHDRVAL,
534 proxy_header(parent, wsi, end, MAXHDRVAL,
552 !lws_hdr_total_length(wsi, WSI_TOKEN_HTTP_CONTENT_LENGTH)) {
553 lwsl_wsi_debug(wsi, "downstream parent chunked");
559 wsi->http.proxy_parent_chunked = 1;
566 if (lws_hdr_simple_ptr(wsi, WSI_TOKEN_HTTP_CONTENT_LENGTH))
568 lws_hdr_simple_ptr(wsi,
583 lwsl_wsi_debug(wsi, "ESTABLISHED_CLIENT_HTTP: "
585 lws_http_client_http_response(wsi),
599 lwsl_wsi_info(wsi, "COMPLETED_CLIENT_HTTP: (parent %s)",
600 lws_wsi_tag(lws_get_parent(wsi)));
601 if (!lws_get_parent(wsi))
603 lws_get_parent(wsi)->reason_bf |=
605 lws_callback_on_writable(lws_get_parent(wsi));
609 if (!lws_get_parent(wsi))
612 lws_set_timeout(lws_get_parent(wsi),
618 parent = lws_get_parent(wsi);
630 proxy_header(wsi, parent, (unsigned char *)buf, sizeof(buf),
632 proxy_header(wsi, parent, (unsigned char *)buf, sizeof(buf),
634 proxy_header(wsi, parent, (unsigned char *)buf, sizeof(buf),
636 proxy_header(wsi, parent, (unsigned char *)buf, sizeof(buf),
638 proxy_header(wsi, parent, (unsigned char *)buf, sizeof(buf),
640 proxy_header(wsi, parent, (unsigned char *)buf, sizeof(buf),
645 if (lws_add_http_header_by_token(wsi, WSI_TOKEN_X_FORWARDED_FOR,
669 wsi->reason_bf |= LWS_CB_REASON_AUX_BF__CGI;
671 lws_callback_on_writable(wsi);
682 lwsl_wsi_notice(wsi, "CGI-stderr: %s", buf);
689 if (wsi->http.cgi) {
690 lwsl_wsi_debug(wsi, "CGI_TERMINATED: %d %" PRIu64,
691 wsi->http.cgi->explicitly_chunked,
692 (uint64_t)wsi->http.cgi->content_length);
693 if (!(wsi->http.cgi->explicitly_chunked && wsi->mux_substream) &&
694 !wsi->http.cgi->content_length) {
696 lwsl_wsi_debug(wsi, "LWS_CALLBACK_CGI_TERMINATED: ending");
697 wsi->reason_bf |= LWS_CB_REASON_AUX_BF__CGI_CHUNK_END;
698 lws_callback_on_writable(wsi);
699 lws_set_timeout(wsi, PENDING_TIMEOUT_CGI, 3);
702 if (wsi->mux_substream && !wsi->cgi_stdout_zero_length)
703 lws_write(wsi, (unsigned char *)buf + LWS_PRE, 0,
707 if (lws_http_transaction_completed(wsi))
722 if (wsi->http.cgi->gzip_inflate) {
725 if (!wsi->http.cgi->gzip_init) {
726 lwsl_wsi_info(wsi, "inflating gzip");
728 memset(&wsi->http.cgi->inflate, 0,
729 sizeof(wsi->http.cgi->inflate));
731 if (inflateInit2(&wsi->http.cgi->inflate,
733 lwsl_wsi_err(wsi, "iniflateInit fail");
737 wsi->http.cgi->gzip_init = 1;
740 wsi->http.cgi->inflate.next_in = args->data;
741 wsi->http.cgi->inflate.avail_in = (unsigned int)args->len;
745 wsi->http.cgi->inflate.next_out =
746 wsi->http.cgi->inflate_buf;
747 wsi->http.cgi->inflate.avail_out =
748 sizeof(wsi->http.cgi->inflate_buf);
750 n = inflate(&wsi->http.cgi->inflate,
758 inflateEnd(&wsi->http.cgi->inflate);
759 wsi->http.cgi->gzip_init = 0;
760 lwsl_wsi_err(wsi, "zlib err inflate %d", n);
764 if (wsi->http.cgi->inflate.avail_out !=
765 sizeof(wsi->http.cgi->inflate_buf)) {
769 wsi->http.cgi->inflate_buf,
770 sizeof(wsi->http.cgi->inflate_buf) -
771 wsi->http.cgi->inflate.avail_out);
774 sizeof(wsi->http.cgi->inflate_buf) -
775 wsi->http.cgi->inflate.avail_out)) {
776 lwsl_wsi_notice(wsi,
783 lwsl_wsi_err(wsi,
785 inflateEnd(&wsi->http.cgi->inflate);
786 wsi->http.cgi->gzip_init = 0;
793 if (wsi->http.cgi->inflate.avail_out)
805 lwsl_wsi_notice(wsi, "CGI_STDIN_DATA: "
808 lwsl_wsi_info(wsi, "proxied %d bytes", n);
810 if (wsi->http.cgi->post_in_expected && args->stdwsi[LWS_STDIN] &&
812 wsi->http.cgi->post_in_expected -= (unsigned int)n;
814 if (!wsi->http.cgi->post_in_expected) {
837 wsi->http.cgi->lsp->stdwsi[LWS_STDIN] = NULL;
838 lws_spawn_stdwsi_closed(wsi->http.cgi->lsp, siwsi);
849 lwsl_wsi_notice(wsi, "SSL_INFO: where: 0x%x, ret: 0x%x",