Lines Matching refs:pr

102 		lws_smd_peer_t *pr = lws_container_of(p, lws_smd_peer_t, list);
105 n++, pr, pr->tail, pr->_class_filter);
111 _lws_smd_msg_peer_interested_in_msg(lws_smd_peer_t *pr, lws_smd_msg_t *msg)
113 return !!(msg->_class & pr->_class_filter);
128 lws_smd_peer_t *pr = lws_container_of(p, lws_smd_peer_t, list);
130 if (pr != exc && _lws_smd_msg_peer_interested_in_msg(pr, msg))
148 lws_smd_peer_t *pr = lws_container_of(p, lws_smd_peer_t, list);
150 mask |= pr->_class_filter;
241 lws_smd_peer_t *pr = lws_container_of(p, lws_smd_peer_t, list);
243 if (pr != exc &&
244 !pr->tail && _lws_smd_msg_peer_interested_in_msg(pr, msg)) {
245 pr->tail = msg;
247 assert(!pr->tail || (pr->tail->_class & pr->_class_filter));
371 struct lws_smd_peer *pr, const uint8_t *buf, size_t len)
415 if (_lws_smd_msg_send(ctx, p, pr)) {
459 _lws_smd_peer_destroy(lws_smd_peer_t *pr)
461 lws_smd_t *smd = lws_container_of(pr->list.owner, lws_smd_t,
467 lws_dll2_remove(&pr->list);
474 while (pr->tail) {
476 lws_smd_msg_t *m1 = lws_container_of(pr->tail->list.next,
479 if (_lws_smd_msg_peer_interested_in_msg(pr, pr->tail)) {
480 if (!--pr->tail->refcount)
481 _lws_smd_msg_destroy(pr->ctx, smd, pr->tail);
484 pr->tail = m1;
487 lws_free(pr);
493 _lws_smd_msg_next_matching_filter(lws_smd_peer_t *pr)
495 lws_dll2_t *tail = &pr->tail->list;
504 if (msg->exc != pr &&
505 _lws_smd_msg_peer_interested_in_msg(pr, msg))
527 _lws_smd_msg_deliver_peer(struct lws_context *ctx, lws_smd_peer_t *pr)
531 if (!pr->tail)
534 msg = lws_container_of(pr->tail, lws_smd_msg_t, list);
539 (int)msg->refcount, pr);
541 pr->cb(pr->opaque, msg->_class, msg->timestamp,
551 pr->tail = _lws_smd_msg_next_matching_filter(pr);
554 assert(!pr->tail || (pr->tail->_class & pr->_class_filter));
563 return !!pr->tail;
590 lws_smd_peer_t *pr = lws_container_of(p, lws_smd_peer_t, list);
592 more = (char)(more | !!_lws_smd_msg_deliver_peer(ctx, pr));
608 lws_smd_peer_t *pr = lws_zalloc(sizeof(*pr), __func__);
610 if (!pr)
613 pr->cb = cb;
614 pr->opaque = opaque;
615 pr->_class_filter = _class_filter;
616 pr->ctx = ctx;
620 lws_free(pr);
629 lws_free(pr);
630 pr = NULL;
634 lws_dll2_add_tail(&pr->list, &ctx->smd.owner_peers);
650 if (_lws_smd_msg_peer_interested_in_msg(pr, msg))
659 lwsl_cx_info(ctx, "peer %p (count %u) registered", pr,
666 return pr;
670 lws_smd_unregister(struct lws_smd_peer *pr)
672 lws_smd_t *smd = lws_container_of(pr->list.owner, lws_smd_t, owner_peers);
677 lwsl_cx_notice(pr->ctx, "destroying peer %p", pr);
678 _lws_smd_peer_destroy(pr);
724 lws_smd_peer_t *pr = lws_container_of(pp,
727 if (pr->tail == msg)
728 pr->tail = _lws_smd_msg_next_matching_filter(pr);
748 lws_smd_peer_t *pr = lws_container_of(p, lws_smd_peer_t, list);
750 if (pr->tail)
793 lws_smd_peer_t *pr = lws_container_of(p, lws_smd_peer_t, list);
795 pr->tail = NULL; /* we just nuked all the messages, ignore */
796 _lws_smd_peer_destroy(pr);