Lines Matching full:wsi

47 			    struct lws *wsi)  in lws_create_client_ws_object()  argument
51 /* allocate the ws struct for the wsi */ in lws_create_client_ws_object()
52 wsi->ws = lws_zalloc(sizeof(*wsi->ws), "client ws struct"); in lws_create_client_ws_object()
53 if (!wsi->ws) { in lws_create_client_ws_object()
54 lwsl_wsi_notice(wsi, "OOM"); in lws_create_client_ws_object()
63 wsi->ws->ietf_spec_revision = (uint8_t)v; in lws_create_client_ws_object()
70 lws_ws_handshake_client(struct lws *wsi, unsigned char **buf, size_t len) in lws_ws_handshake_client() argument
74 if ((lwsi_state(wsi) != LRS_WAITING_PROXY_REPLY) && in lws_ws_handshake_client()
75 (lwsi_state(wsi) != LRS_H1C_ISSUE_HANDSHAKE) && in lws_ws_handshake_client()
76 (lwsi_state(wsi) != LRS_WAITING_SERVER_REPLY) && in lws_ws_handshake_client()
77 !lwsi_role_client(wsi)) in lws_ws_handshake_client()
80 lwsl_wsi_debug(wsi, "hs client feels it has %d in", (int)len); in lws_ws_handshake_client()
86 if (lws_is_flowcontrolled(wsi)) { in lws_ws_handshake_client()
87 lwsl_wsi_debug(wsi, "caching %ld", (long)len); in lws_ws_handshake_client()
97 if (lws_rxflow_cache(wsi, *buf, 0, len) == in lws_ws_handshake_client()
106 lwsl_wsi_info(wsi, "trimming inside rxflow cache"); in lws_ws_handshake_client()
114 if (wsi->ws->rx_draining_ext) { in lws_ws_handshake_client()
117 lwsl_wsi_info(wsi, "draining ext"); in lws_ws_handshake_client()
118 if (lwsi_role_client(wsi)) in lws_ws_handshake_client()
119 m = lws_ws_client_rx_sm(wsi, 0); in lws_ws_handshake_client()
121 m = lws_ws_rx_sm(wsi, 0, 0); in lws_ws_handshake_client()
132 if (lws_ws_client_rx_sm(wsi, *(*buf)++)) { in lws_ws_handshake_client()
133 lwsl_wsi_info(wsi, "client_rx_sm exited, DROPPING %d", in lws_ws_handshake_client()
139 // lwsl_wsi_notice(wsi, "finished with %ld", (long)len); in lws_ws_handshake_client()
146 lws_generate_client_ws_handshake(struct lws *wsi, char *p, const char *conn1) in lws_generate_client_ws_handshake() argument
158 if (lws_get_random(wsi->a.context, hash, 16) != 16) { in lws_generate_client_ws_handshake()
159 lwsl_wsi_err(wsi, "Unable to read from random dev %s", in lws_generate_client_ws_handshake()
173 if (lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_SENT_PROTOCOLS)) in lws_generate_client_ws_handshake()
175 lws_hdr_simple_ptr(wsi, in lws_generate_client_ws_handshake()
181 ext = wsi->a.vhost->ws.extensions; in lws_generate_client_ws_handshake()
184 n = wsi->a.vhost->protocols[0].callback(wsi, in lws_generate_client_ws_handshake()
186 wsi->user_space, (char *)ext->name, 0); in lws_generate_client_ws_handshake()
214 if (wsi->ws->ietf_spec_revision) in lws_generate_client_ws_handshake()
216 wsi->ws->ietf_spec_revision); in lws_generate_client_ws_handshake()
227 wsi->http.ah->initial_handshake_hash_base64, in lws_generate_client_ws_handshake()
228 sizeof(wsi->http.ah->initial_handshake_hash_base64)); in lws_generate_client_ws_handshake()
234 lws_client_ws_upgrade(struct lws *wsi, const char **cce) in lws_client_ws_upgrade() argument
236 struct lws_context *context = wsi->a.context; in lws_client_ws_upgrade()
243 struct lws_context_per_thread *pt = &wsi->a.context->pt[(int)wsi->tsi]; in lws_client_ws_upgrade()
253 if (wsi->client_mux_substream) {/* !!! client ws-over-h2 not there yet */ in lws_client_ws_upgrade()
254 lwsl_wsi_warn(wsi, "client ws-over-h2 upgrade not supported yet"); in lws_client_ws_upgrade()
259 if (wsi->http.ah->http_response == 401) { in lws_client_ws_upgrade()
260 lwsl_wsi_warn(wsi, "got bad HTTP response '%d'", in lws_client_ws_upgrade()
261 wsi->http.ah->http_response); in lws_client_ws_upgrade()
266 if (wsi->http.ah->http_response != 101) { in lws_client_ws_upgrade()
267 lwsl_wsi_warn(wsi, "got bad HTTP response '%d'", in lws_client_ws_upgrade()
268 wsi->http.ah->http_response); in lws_client_ws_upgrade()
273 if (lws_hdr_total_length(wsi, WSI_TOKEN_ACCEPT) == 0) { in lws_client_ws_upgrade()
274 lwsl_wsi_info(wsi, "no ACCEPT"); in lws_client_ws_upgrade()
279 p = lws_hdr_simple_ptr(wsi, WSI_TOKEN_UPGRADE); in lws_client_ws_upgrade()
281 lwsl_wsi_info(wsi, "no UPGRADE"); in lws_client_ws_upgrade()
287 lwsl_wsi_warn(wsi, "got bad Upgrade header '%s'", p); in lws_client_ws_upgrade()
296 n = lws_hdr_copy(wsi, buf, sizeof(buf) - 1, WSI_TOKEN_CONNECTION); in lws_client_ws_upgrade()
314 lwsl_wsi_info(wsi, "malformed connection '%s'", buf); in lws_client_ws_upgrade()
320 pc = lws_hdr_simple_ptr(wsi, _WSI_TOKEN_CLIENT_SENT_PROTOCOLS); in lws_client_ws_upgrade()
323 lwsl_wsi_parser(wsi, "lws_client_int_s_hs: no protocol list"); in lws_client_ws_upgrade()
325 lwsl_wsi_parser(wsi, "lws_client_int_s_hs: protocol list '%s'", pc); in lws_client_ws_upgrade()
333 len = lws_hdr_total_length(wsi, WSI_TOKEN_PROTOCOL); in lws_client_ws_upgrade()
335 lwsl_wsi_info(wsi, "WSI_TOKEN_PROTOCOL is null"); in lws_client_ws_upgrade()
341 if (wsi->a.protocol) { in lws_client_ws_upgrade()
342 p = (char *)wsi->a.protocol->name; in lws_client_ws_upgrade()
349 wsi->a.protocol = &wsi->a.vhost->protocols[0]; in lws_client_ws_upgrade()
353 p = lws_hdr_simple_ptr(wsi, WSI_TOKEN_PROTOCOL); in lws_client_ws_upgrade()
369 lwsl_wsi_info(wsi, "got bad protocol %s", p); in lws_client_ws_upgrade()
377 lws_strncpy(wsi->ws->actual_protocol, p, in lws_client_ws_upgrade()
378 sizeof(wsi->ws->actual_protocol)); in lws_client_ws_upgrade()
386 if (!lwsi_role_client(wsi)) in lws_client_ws_upgrade()
387 wsi->a.protocol = NULL; in lws_client_ws_upgrade()
389 while (n < wsi->a.vhost->count_protocols) { in lws_client_ws_upgrade()
390 if (!wsi->a.protocol && in lws_client_ws_upgrade()
391 strcmp(p, wsi->a.vhost->protocols[n].name) == 0) { in lws_client_ws_upgrade()
392 wsi->a.protocol = &wsi->a.vhost->protocols[n]; in lws_client_ws_upgrade()
398 if (n == wsi->a.vhost->count_protocols) { /* no match */ in lws_client_ws_upgrade()
400 if (!lwsi_role_client(wsi)) { in lws_client_ws_upgrade()
401 lwsl_wsi_info(wsi, "fail protocol %s", p); in lws_client_ws_upgrade()
409 while (wsi->a.vhost->protocols[n].callback) { in lws_client_ws_upgrade()
410 if (wsi->a.protocol && strcmp(wsi->a.protocol->name, in lws_client_ws_upgrade()
411 wsi->a.vhost->protocols[n].name) == 0) { in lws_client_ws_upgrade()
412 wsi->a.protocol = &wsi->a.vhost->protocols[n]; in lws_client_ws_upgrade()
418 if (!wsi->a.vhost->protocols[n].callback) { in lws_client_ws_upgrade()
419 if (wsi->a.protocol) in lws_client_ws_upgrade()
420 lwsl_wsi_err(wsi, "Failed to match protocol %s", in lws_client_ws_upgrade()
421 wsi->a.protocol->name); in lws_client_ws_upgrade()
423 lwsl_wsi_err(wsi, "No protocol on client"); in lws_client_ws_upgrade()
429 lwsl_wsi_debug(wsi, "Selected protocol %s", wsi->a.protocol ? in lws_client_ws_upgrade()
430 wsi->a.protocol->name : "no pcol"); in lws_client_ws_upgrade()
441 lws_same_vh_protocol_insert(wsi, n); in lws_client_ws_upgrade()
446 if (!lws_hdr_total_length(wsi, WSI_TOKEN_EXTENSIONS)) { in lws_client_ws_upgrade()
447 lwsl_wsi_ext(wsi, "no client extensions allowed by server"); in lws_client_ws_upgrade()
456 if (lws_hdr_copy(wsi, sb, (int)context->pt_serv_buf_size, in lws_client_ws_upgrade()
458 lwsl_wsi_warn(wsi, "ext list from server failed to copy"); in lws_client_ws_upgrade()
497 lwsl_wsi_notice(wsi, "checking client ext %s", ext_name); in lws_client_ws_upgrade()
500 ext = wsi->a.vhost->ws.extensions; in lws_client_ws_upgrade()
508 lwsl_wsi_notice(wsi, "instantiating client ext %s", ext_name); in lws_client_ws_upgrade()
512 wsi->ws->active_extensions[wsi->ws->count_act_ext] = ext; in lws_client_ws_upgrade()
516 if (ext->callback(lws_get_context(wsi), ext, wsi, in lws_client_ws_upgrade()
518 (void *)&wsi->ws->act_ext_user[ in lws_client_ws_upgrade()
519 wsi->ws->count_act_ext], in lws_client_ws_upgrade()
521 lwsl_wsi_info(wsi, " ext %s failed construction", in lws_client_ws_upgrade()
532 if (user_callback_handle_rxflow(wsi->a.protocol->callback, in lws_client_ws_upgrade()
533 wsi, LWS_CALLBACK_WS_EXT_DEFAULTS, in lws_client_ws_upgrade()
541 lws_ext_parse_options(ext, wsi, in lws_client_ws_upgrade()
542 wsi->ws->act_ext_user[ in lws_client_ws_upgrade()
543 wsi->ws->count_act_ext], in lws_client_ws_upgrade()
546 lwsl_wsi_err(wsi, "unable to parse user defaults '%s'", in lws_client_ws_upgrade()
555 if (a && lws_ext_parse_options(ext, wsi, in lws_client_ws_upgrade()
556 wsi->ws->act_ext_user[ in lws_client_ws_upgrade()
557 wsi->ws->count_act_ext], in lws_client_ws_upgrade()
559 lwsl_wsi_err(wsi, "unable to parse remote def '%s'", a); in lws_client_ws_upgrade()
564 if (ext->callback(lws_get_context(wsi), ext, wsi, in lws_client_ws_upgrade()
566 wsi->ws->act_ext_user[wsi->ws->count_act_ext], in lws_client_ws_upgrade()
568 lwsl_wsi_err(wsi, "ext %s rejects server options %s", in lws_client_ws_upgrade()
574 wsi->ws->count_act_ext++; in lws_client_ws_upgrade()
580 lwsl_wsi_warn(wsi, "Unknown ext '%s'!", ext_name); in lws_client_ws_upgrade()
596 p = lws_hdr_simple_ptr(wsi, WSI_TOKEN_ACCEPT); in lws_client_ws_upgrade()
597 if (strcmp(p, wsi->http.ah->initial_handshake_hash_base64)) { in lws_client_ws_upgrade()
598 lwsl_wsi_warn(wsi, "lws_client_int_s_hs: accept '%s' wrong vs '%s'", p, in lws_client_ws_upgrade()
599 wsi->http.ah->initial_handshake_hash_base64); in lws_client_ws_upgrade()
605 if (lws_ensure_user_space(wsi)) { in lws_client_ws_upgrade()
606 lwsl_wsi_err(wsi, "Problem allocating wsi user mem"); in lws_client_ws_upgrade()
615 if (wsi->a.protocol->callback(wsi, in lws_client_ws_upgrade()
617 wsi->user_space, NULL, 0)) { in lws_client_ws_upgrade()
623 lws_set_timeout(wsi, NO_PENDING_TIMEOUT, 0); in lws_client_ws_upgrade()
626 lws_header_table_detach(wsi, 0); in lws_client_ws_upgrade()
628 lws_role_transition(wsi, LWSIFR_CLIENT, LRS_ESTABLISHED, &role_ops_ws); in lws_client_ws_upgrade()
629 lws_validity_confirmed(wsi); in lws_client_ws_upgrade()
631 wsi->rxflow_change_to = LWS_RXFLOW_ALLOW; in lws_client_ws_upgrade()
638 n = (int)wsi->a.protocol->rx_buffer_size; in lws_client_ws_upgrade()
642 wsi->ws->rx_ubuf = lws_malloc((unsigned int)n + 4 /* 0x0000ffff zlib */, in lws_client_ws_upgrade()
644 if (!wsi->ws->rx_ubuf) { in lws_client_ws_upgrade()
645 lwsl_wsi_err(wsi, "OOM allocating rx buffer %d", n); in lws_client_ws_upgrade()
649 wsi->ws->rx_ubuf_alloc = (unsigned int)n; in lws_client_ws_upgrade()
651 lwsl_wsi_debug(wsi, "handshake OK for protocol %s", wsi->a.protocol->name); in lws_client_ws_upgrade()
655 if (wsi->a.protocol->callback(wsi, LWS_CALLBACK_CLIENT_ESTABLISHED, in lws_client_ws_upgrade()
656 wsi->user_space, NULL, 0)) { in lws_client_ws_upgrade()