Lines Matching refs:wsi
28 rops_handle_POLLIN_mqtt(struct lws_context_per_thread *pt, struct lws *wsi,
37 (unsigned int)wsi->wsistate, wsi->a.protocol->name,
43 * nwsi no longer has a wsi->mqtt of its own.
55 if (lwsi_state(wsi) != LRS_ESTABLISHED) {
58 if (lwsi_state(wsi) == LRS_WAITING_SSL &&
60 lws_change_pollfd(wsi, LWS_POLLOUT, 0)) {
66 lws_handle_POLLOUT_event(wsi, pollfd)) {
71 n = lws_mqtt_client_socket_service(wsi, pollfd, NULL);
81 lwsi_state_can_handle_POLLOUT(wsi) &&
82 lws_handle_POLLOUT_event(wsi, pollfd)) {
83 if (lwsi_state(wsi) == LRS_RETURNED_CLOSE)
84 lwsi_set_state(wsi, LRS_FLUSHING_BEFORE_CLOSE);
92 // lws_buflist_describe(&wsi->buflist, wsi, __func__);
93 ebuf.len = (int)lws_buflist_next_segment_len(&wsi->buflist, &ebuf.token);
103 /* if (lws_is_flowcontrolled(wsi)) { */
105 /* __func__, wsi, wsi->rxflow_bitmap); */
109 if (!(lwsi_role_client(wsi) && lwsi_state(wsi) != LRS_ESTABLISHED)) {
122 ebuf.len = (int)wsi->a.context->pt_serv_buf_size;
124 if ((unsigned int)ebuf.len > wsi->a.context->pt_serv_buf_size)
125 ebuf.len = (int)wsi->a.context->pt_serv_buf_size;
130 ebuf.len = lws_ssl_capable_read(wsi, ebuf.token,
156 //lws_buflist_describe(&wsi->buflist, wsi, __func__);
158 n = lws_read_mqtt(wsi, ebuf.token, (unsigned int)ebuf.len);
162 /* we closed wsi */
165 // lws_buflist_describe(&wsi->buflist, wsi, __func__);
167 if (lws_buflist_aware_finished_consuming(wsi, &ebuf, ebuf.len,
175 pending = (unsigned int)lws_ssl_pending(wsi);
177 pending = pending > wsi->a.context->pt_serv_buf_size ?
178 wsi->a.context->pt_serv_buf_size : pending;
183 !lws_buflist_next_segment_len(&wsi->buflist, NULL)) {
184 lwsl_info("%s: %s flow buf: drained\n", __func__, lws_wsi_tag(wsi));
189 __lws_rx_flow_control(wsi);
198 lws_close_free_wsi(wsi, LWS_CLOSE_STATUS_NOSTATUS, "mqtt svc fail");
206 rops_adoption_bind_mqtt(struct lws *wsi, int type, const char *vh_prot_name)
213 lws_role_transition(wsi, 0, (type & LWS_ADOPT_ALLOW_SSL) ? LRS_SSL_INIT :
217 lws_bind_protocol(wsi, wsi->a.protocol, __func__);
220 lws_bind_protocol(wsi,
221 &wsi->a.vhost->protocols[wsi->a.vhost->mqtt_protocol_index],
229 rops_client_bind_mqtt(struct lws *wsi, const struct lws_client_connect_info *i)
236 if (!wsi->user_space && wsi->stash->cis[CIS_METHOD])
237 if (lws_ensure_user_space(wsi))
240 if (!wsi->stash->cis[CIS_METHOD] && !wsi->stash->cis[CIS_ALPN])
241 wsi->stash->cis[CIS_ALPN] = "x-amzn-mqtt-ca";
250 if (lws_header_table_attach(wsi, 0) < 0)
257 if (lws_header_table_attach(wsi, 0))
267 if (lws_create_client_mqtt_object(i, wsi))
270 lws_role_transition(wsi, LWSIFR_CLIENT, LRS_UNCONNECTED,
276 rops_handle_POLLOUT_mqtt(struct lws *wsi)
283 if (wsi->mqtt && wsi->mqtt->send_pingreq && !wsi->mqtt->inside_payload) {
291 wsi->mqtt->send_pingreq = 0;
298 if (lws_write(wsi, (uint8_t *)&buf[LWS_PRE], 2,
305 if (wsi->mqtt && !wsi->mqtt->inside_payload &&
306 (wsi->mqtt->send_pubrec || wsi->mqtt->send_pubrel ||
307 wsi->mqtt->send_pubcomp)) {
311 if (wsi->mqtt->send_pubrec) {
313 __func__, wsi->mqtt->peer_ack_pkt_id);
317 wsi->mqtt->peer_ack_pkt_id);
318 wsi->mqtt->send_pubrec = 0;
319 } else if (wsi->mqtt->send_pubrel) {
321 __func__, wsi->mqtt->ack_pkt_id);
324 wsi->mqtt->ack_pkt_id);
325 wsi->mqtt->send_pubrel = 0;
328 __func__, wsi->mqtt->peer_ack_pkt_id);
331 wsi->mqtt->peer_ack_pkt_id);
332 wsi->mqtt->send_pubcomp = 0;
334 if (lws_write(wsi, (uint8_t *)&buf[LWS_PRE], 4,
340 wsi = lws_get_network_wsi(wsi);
342 wsi->mux.requested_POLLOUT = 0;
344 wsi2 = &wsi->mux.child_list;
350 if (!wsi->mqtt)
353 lws_wsi_mux_dump_waiting_children(wsi);
362 if (!lwsi_state_can_handle_POLLOUT(wsi))
370 if (wsi->mqtt->inside_payload && !(*wsi2)->mqtt->inside_payload)
379 wa = &wsi->mux.child_list;
386 if (lwsi_state(wsi) == LRS_ESTABLISHED &&
387 !wsi->mqtt->inside_payload &&
388 wsi->mqtt->send_puback) {
391 __func__, wsi->mqtt->ack_pkt_id);
398 lws_ser_wu16be(&buf[LWS_PRE + 2], wsi->mqtt->peer_ack_pkt_id);
400 if (lws_write(wsi, (uint8_t *)&buf[LWS_PRE], 4,
404 wsi->mqtt->send_puback = 0;
407 wa = &wsi->mux.child_list;
415 wa = &wsi->mux.child_list;
420 } while (wsi2 && *wsi2 && !lws_send_pipe_choked(wsi));
422 // lws_wsi_mux_dump_waiting_children(wsi);
424 if (lws_wsi_mux_action_pending_writeable_reqs(wsi))
432 rops_issue_keepalive_mqtt(struct lws *wsi, int isvalid)
434 struct lws *nwsi = lws_get_network_wsi(wsi);
450 rops_close_role_mqtt(struct lws_context_per_thread *pt, struct lws *wsi)
452 struct lws *nwsi = lws_get_network_wsi(wsi);
456 if (!wsi->mqtt)
459 c = &wsi->mqtt->client;
461 lws_sul_cancel(&wsi->mqtt->sul_qos_puback_pubrec_wait);
471 s = wsi->mqtt->subs_head;
472 wsi->mqtt->subs_head = NULL;
490 wsi->mqtt->rx_cpkt_param;
495 lws_free_set_NULL(wsi->mqtt->rx_cpkt_param);
497 lws_free_set_NULL(wsi->mqtt);
503 rops_callback_on_writable_mqtt(struct lws *wsi)
510 lwsl_debug("%s: %s (wsistate 0x%x)\n", __func__, lws_wsi_tag(wsi),
511 (unsigned int)wsi->wsistate);
513 if (wsi->mux.requested_POLLOUT
515 && !wsi->client_h2_alpn
523 if (wsi->upgraded_to_http2 && !wsi->h2.h2n->pps &&
524 !lws_h2_tx_cr_get(wsi)) {
533 lwsl_notice("%s: %p: skint (%d)\n", __func__, wsi,
534 wsi->h2.tx_cr);
535 wsi->h2.skint = 1;
539 wsi->h2.skint = 0;
542 network_wsi = lws_get_network_wsi(wsi);
544 already = lws_wsi_mux_mark_parents_needing_writeable(wsi);
546 /* for network action, act only on the network wsi */
559 rops_close_kill_connection_mqtt(struct lws *wsi, enum lws_close_status reason)
562 lws_wsi_tag(wsi),
563 lws_wsi_tag(wsi->mux.parent_wsi), wsi->mux.child_list);
564 //lws_wsi_mux_dump_children(wsi);
566 if (wsi->mux_substream
568 || wsi->client_mux_substream
572 lws_wsi_tag(wsi),
573 lws_wsi_tag(wsi->mux.parent_wsi),
574 wsi->mux.child_list);
576 if (wsi->mux.child_list && lwsl_visible(LLL_INFO)) {
577 lwsl_info(" parent %s: closing children: list:\n", lws_wsi_tag(wsi));
578 lws_wsi_mux_dump_children(wsi);
581 lws_wsi_mux_close_children(wsi, (int)reason);
586 wsi->client_mux_substream ||
588 wsi->mux_substream) &&
589 wsi->mux.parent_wsi) {
590 lws_wsi_mux_sibling_disconnect(wsi);