Lines Matching refs:conn
62 struct conn {
78 struct conn *conn;
102 struct conn *conn = pss->conn;
104 if (conn->r[ACC])
105 lws_ring_destroy(conn->r[ACC]);
106 if (conn->r[ONW])
107 lws_ring_destroy(conn->r[ONW]);
109 pss->conn = NULL;
111 free(conn);
126 i.context = lws_get_context(pss->conn->wsi[ACC]);
132 i.vhost = lws_get_vhost(pss->conn->wsi[ACC]);
137 * The "onward" client wsi has its own pss but shares the "conn"
139 * the address of the shared conn and apply it to the client psss
142 i.opaque_user_data = pss->conn;
143 i.pwsi = &pss->conn->wsi[ONW];
155 flow_control(struct conn *conn, int side, int enable)
157 if (conn->closed[side] ||
158 enable == conn->rx_enabled[side] ||
159 !conn->established[side])
162 if (lws_rx_flow_control(conn->wsi[side], enable))
165 conn->rx_enabled[side] = (char)enable;
180 struct conn *conn = NULL;
188 conn = pss->conn;
262 if (conn || !pss)
264 conn = pss->conn = lws_get_opaque_user_data(wsi);
265 if (!conn)
267 conn->established[ONW] = 1;
269 conn->rx_enabled[ACC] = 1;
270 conn->rx_enabled[ONW] = 1;
273 flow_control(conn, ACC, 1);
281 if (!conn)
284 conn->closed[ONW] = 1;
286 if (conn->closed[ACC])
294 if (!conn)
297 if (!pss || !conn->wsi[ACC] || conn->closed[ACC]) {
299 pss, conn->wsi[ACC], conn->closed[ACC]);
308 pkt.ticket = conn->ticket_next++;
311 if (!lws_ring_insert(conn->r[ONW], &pkt, 1)) {
318 (int)lws_ring_get_count_free_elements(conn->r[ONW]));
320 if (conn->rx_enabled[ONW] &&
321 lws_ring_get_count_free_elements(conn->r[ONW]) < 2)
322 flow_control(conn, ONW, 0);
324 if (!conn->closed[ACC])
325 lws_callback_on_writable(conn->wsi[ACC]);
331 if (!conn)
334 ppkt = lws_ring_get_element(conn->r[ACC], &conn->t[ACC]);
341 if (ppkt->ticket != conn->ticket_retired + 1) {
343 ppkt->ticket, conn->ticket_retired + 1);
344 lws_callback_on_writable(conn->wsi[ACC]);
355 conn->ticket_retired = ppkt->ticket;
356 lws_ring_consume(conn->r[ACC], &conn->t[ACC], NULL, 1);
357 lws_ring_update_oldest_tail(conn->r[ACC], conn->t[ACC]);
360 (int)lws_ring_get_count_free_elements(conn->r[ACC]));
362 if (!conn->rx_enabled[ACC] &&
363 lws_ring_get_count_free_elements(conn->r[ACC]) > 2)
364 flow_control(conn, ACC, 1);
366 ppkt = lws_ring_get_element(conn->r[ACC], &conn->t[ACC]);
369 conn->ticket_retired + 1);
371 if (ppkt && ppkt->ticket == conn->ticket_retired + 1)
378 if (conn->closed[ACC])
386 if (lws_ring_get_element(conn->r[ONW], &conn->t[ONW]))
387 lws_callback_on_writable(conn->wsi[ACC]);
397 conn = pss->conn = malloc(sizeof(struct conn));
398 if (!pss->conn)
400 memset(conn, 0, sizeof(*conn));
402 conn->wsi[ACC] = wsi;
403 conn->ticket_next = 1;
405 conn->r[ACC] = lws_ring_create(sizeof(struct packet),
407 if (!conn->r[ACC]) {
411 conn->r[ONW] = lws_ring_create(sizeof(struct packet),
413 if (!conn->r[ONW]) {
414 lws_ring_destroy(conn->r[ACC]);
415 conn->r[ACC] = NULL;
421 conn->established[ACC] = 1;
424 flow_control(conn, ACC, 0);
435 if (!conn)
438 conn->closed[ACC] = 1;
439 if (conn->closed[ONW])
446 if (!conn || !conn->wsi[ONW]) {
448 "conn->wsi[ONW] NULL\n", __func__);
451 if (conn->closed[ONW]) {
452 lwsl_info(" closed[ONW] %d\n", conn->closed[ONW]);
465 pkt.ticket = conn->ticket_next++;
468 if (!lws_ring_insert(conn->r[ACC], &pkt, 1)) {
475 (int)lws_ring_get_count_free_elements(conn->r[ACC]));
477 if (conn->rx_enabled[ACC] &&
478 lws_ring_get_count_free_elements(conn->r[ACC]) <= 2)
479 flow_control(conn, ACC, 0);
481 if (conn->established[ONW] && !conn->closed[ONW])
482 lws_callback_on_writable(conn->wsi[ONW]);
488 if (!conn || !conn->established[ONW] || conn->closed[ONW])
491 ppkt = lws_ring_get_element(conn->r[ONW], &conn->t[ONW]);
498 if (ppkt->ticket != conn->ticket_retired + 1) {
500 ppkt->ticket, conn->ticket_retired + 1);
501 lws_callback_on_writable(conn->wsi[ONW]);
512 conn->ticket_retired = ppkt->ticket;
513 lws_ring_consume(conn->r[ONW], &conn->t[ONW], NULL, 1);
514 lws_ring_update_oldest_tail(conn->r[ONW], conn->t[ONW]);
517 (int)lws_ring_get_count_free_elements(conn->r[ONW]),
518 (int)lws_ring_get_count_waiting_elements(conn->r[ONW],
519 &conn->t[ONW]));
521 if (!conn->rx_enabled[ONW] &&
522 lws_ring_get_count_free_elements(conn->r[ONW]) > 2)
523 flow_control(conn, ONW, 1);
525 ppkt = lws_ring_get_element(conn->r[ONW], &conn->t[ONW]);
528 conn->ticket_retired + 1);
530 if (ppkt && ppkt->ticket == conn->ticket_retired + 1)
537 if (conn->closed[ONW])
545 if (lws_ring_get_element(conn->r[ACC], &conn->t[ACC]))
546 lws_callback_on_writable(conn->wsi[ONW]);