Lines Matching refs:wsi
31 lws_issue_raw(struct lws *wsi, unsigned char *buf, size_t len) in lws_issue_raw() argument
33 struct lws_context *context = lws_get_context(wsi); in lws_issue_raw()
48 if (lwsi_state(wsi) == LRS_FLUSHING_BEFORE_CLOSE && in lws_issue_raw()
49 !lws_has_buffered_out(wsi) in lws_issue_raw()
51 && !wsi->http.comp_ctx.may_have_more in lws_issue_raw()
56 if (buf && lws_has_buffered_out(wsi)) { in lws_issue_raw()
57 lwsl_wsi_info(wsi, "** prot: %s, incr buflist_out by %lu", in lws_issue_raw()
58 wsi->a.protocol->name, (unsigned long)len); in lws_issue_raw()
66 if (lws_buflist_append_segment(&wsi->buflist_out, buf, len)) in lws_issue_raw()
73 if (wsi->buflist_out) { in lws_issue_raw()
76 len = lws_buflist_next_segment_len(&wsi->buflist_out, &buf); in lws_issue_raw()
79 lwsl_wsi_debug(wsi, "draining %d", (int)len); in lws_issue_raw()
85 if (!wsi->mux_substream && !lws_socket_is_valid(wsi->desc.sockfd)) in lws_issue_raw()
86 lwsl_wsi_err(wsi, "invalid sock"); in lws_issue_raw()
89 if (wsi->a.protocol->tx_packet_size) in lws_issue_raw()
90 n = (unsigned int)wsi->a.protocol->tx_packet_size; in lws_issue_raw()
92 n = (unsigned int)wsi->a.protocol->rx_buffer_size; in lws_issue_raw()
102 if (lws_fi(&wsi->fic, "sendfail")) in lws_issue_raw()
105 m = (unsigned int)lws_ssl_capable_write(wsi, buf, n); in lws_issue_raw()
107 lwsl_wsi_info(wsi, "ssl_capable_write (%d) says %d", n, m); in lws_issue_raw()
110 wsi->could_have_pending = 1; in lws_issue_raw()
115 wsi->socket_is_permanently_unusable = 1; in lws_issue_raw()
135 if (lws_has_buffered_out(wsi)) { in lws_issue_raw()
137 lwsl_wsi_info(wsi, "partial adv %d (vs %ld)", in lws_issue_raw()
139 lws_buflist_use_segment(&wsi->buflist_out, m); in lws_issue_raw()
142 if (!lws_has_buffered_out(wsi)) { in lws_issue_raw()
143 lwsl_wsi_info(wsi, "buflist_out flushed"); in lws_issue_raw()
146 if (lwsi_state(wsi) == LRS_FLUSHING_BEFORE_CLOSE) { in lws_issue_raw()
147 lwsl_wsi_info(wsi, "*signalling to close now"); in lws_issue_raw()
151 if (wsi->close_when_buffered_out_drained) { in lws_issue_raw()
152 wsi->close_when_buffered_out_drained = 0; in lws_issue_raw()
158 if (wsi->http.deferred_transaction_completed) { in lws_issue_raw()
159 lwsl_wsi_notice(wsi, "partial completed, doing " in lws_issue_raw()
161 wsi->http.deferred_transaction_completed = 0; in lws_issue_raw()
162 return lws_http_transaction_completed(wsi) ? in lws_issue_raw()
169 if (wsi->ws) in lws_issue_raw()
170 wsi->ws->inside_frame = 0; in lws_issue_raw()
174 lws_callback_on_writable(wsi); in lws_issue_raw()
180 if (wsi->http.comp_ctx.may_have_more) in lws_issue_raw()
181 lws_callback_on_writable(wsi); in lws_issue_raw()
194 lwsl_wsi_debug(wsi, "new partial sent %d from %lu total", in lws_issue_raw()
197 if (lws_buflist_append_segment(&wsi->buflist_out, buf + m, in lws_issue_raw()
202 if (lws_wsi_is_udp(wsi)) in lws_issue_raw()
204 wsi->udp->sa46_pending = wsi->udp->sa46; in lws_issue_raw()
208 lws_callback_on_writable(wsi); in lws_issue_raw()
214 lws_write(struct lws *wsi, unsigned char *buf, size_t len, in lws_write() argument
220 lwsl_wsi_err(wsi, "suspicious len int %d, ulong %lu", in lws_write()
226 wsi->http.access_log.sent += len; in lws_write()
229 assert(wsi->role_ops); in lws_write()
231 if (!lws_rops_fidx(wsi->role_ops, LWS_ROPS_write_role_protocol)) in lws_write()
232 m = lws_issue_raw(wsi, buf, len); in lws_write()
234 m = lws_rops_func_fidx(wsi->role_ops, LWS_ROPS_write_role_protocol). in lws_write()
235 write_role_protocol(wsi, buf, len, &wp); in lws_write()
238 if (wsi->a.vhost) in lws_write()
239 lws_metric_event(wsi->a.vhost->mt_traffic_tx, (char) in lws_write()
247 lws_ssl_capable_read_no_ssl(struct lws *wsi, unsigned char *buf, size_t len) in lws_ssl_capable_read_no_ssl() argument
253 if (lws_wsi_is_udp(wsi)) { in lws_ssl_capable_read_no_ssl()
254 socklen_t slt = sizeof(wsi->udp->sa46); in lws_ssl_capable_read_no_ssl()
256 n = (int)recvfrom(wsi->desc.sockfd, (char *)buf, in lws_ssl_capable_read_no_ssl()
261 sa46_sockaddr(&wsi->udp->sa46), &slt); in lws_ssl_capable_read_no_ssl()
264 n = (int)recv(wsi->desc.sockfd, (char *)buf, in lws_ssl_capable_read_no_ssl()
272 if (!n && wsi->unix_skt) in lws_ssl_capable_read_no_ssl()
279 if (!n && !wsi->unix_skt) in lws_ssl_capable_read_no_ssl()
283 if (wsi->a.vhost) in lws_ssl_capable_read_no_ssl()
284 lws_metric_event(wsi->a.vhost->mt_traffic_rx, in lws_ssl_capable_read_no_ssl()
298 if (wsi->a.vhost) in lws_ssl_capable_read_no_ssl()
299 lws_metric_event(wsi->a.vhost->mt_traffic_rx, METRES_NOGO, 0u); in lws_ssl_capable_read_no_ssl()
302 lwsl_wsi_info(wsi, "error on reading from skt : %d, errno %d", n, en); in lws_ssl_capable_read_no_ssl()
308 lws_ssl_capable_write_no_ssl(struct lws *wsi, unsigned char *buf, size_t len) in lws_ssl_capable_write_no_ssl() argument
316 if (lws_wsi_is_udp(wsi)) { in lws_ssl_capable_write_no_ssl()
318 if (lws_fi(&wsi->fic, "udp_tx_loss")) { in lws_ssl_capable_write_no_ssl()
324 if (lws_has_buffered_out(wsi)) in lws_ssl_capable_write_no_ssl()
325 n = (int)sendto(wsi->desc.sockfd, (const char *)buf, in lws_ssl_capable_write_no_ssl()
329 len, 0, sa46_sockaddr(&wsi->udp->sa46_pending), in lws_ssl_capable_write_no_ssl()
330 sa46_socklen(&wsi->udp->sa46_pending)); in lws_ssl_capable_write_no_ssl()
332 n = (int)sendto(wsi->desc.sockfd, (const char *)buf, in lws_ssl_capable_write_no_ssl()
336 len, 0, sa46_sockaddr(&wsi->udp->sa46), in lws_ssl_capable_write_no_ssl()
337 sa46_socklen(&wsi->udp->sa46)); in lws_ssl_capable_write_no_ssl()
340 if (wsi->role_ops->file_handle) in lws_ssl_capable_write_no_ssl()
341 n = (int)write((int)(lws_intptr_t)wsi->desc.filefd, buf, in lws_ssl_capable_write_no_ssl()
347 n = (int)send(wsi->desc.sockfd, (char *)buf, in lws_ssl_capable_write_no_ssl()
364 lws_set_blocking_send(wsi); in lws_ssl_capable_write_no_ssl()
370 lwsl_wsi_debug(wsi, "ERROR writing len %d to skt fd %d err %d / errno %d", in lws_ssl_capable_write_no_ssl()
371 (int)(ssize_t)len, wsi->desc.sockfd, n, LWS_ERRNO); in lws_ssl_capable_write_no_ssl()
377 lws_ssl_pending_no_ssl(struct lws *wsi) in lws_ssl_pending_no_ssl() argument
379 (void)wsi; in lws_ssl_pending_no_ssl()