| 791 | complete() {} |
| 792 | |
| 793 | bool handle(pn_event_t *e) { |
| 794 | switch (pn_event_type(e)) { |
| 795 | case PN_CONNECTION_BOUND: |
| 796 | pn_transport_set_max_frame(pn_event_transport(e), FRAME); |
| 797 | return false; |
| 798 | |
| 799 | case PN_SESSION_INIT: |
| 800 | pn_session_set_incoming_capacity(pn_event_session(e), |
| 801 | FRAME); /* Single frame incoming */ |
| 802 | pn_session_set_outgoing_window(pn_event_session(e), |
| 803 | 1); /* Single frame outgoing */ |
| 804 | return false; |
| 805 | |
| 806 | case PN_LINK_REMOTE_OPEN: |
| 807 | common_handler::handle(e); |
| 808 | if (pn_link_is_receiver(pn_event_link(e))) { |
| 809 | pn_link_flow(pn_event_link(e), 1); |
| 810 | } else { |
| 811 | sender = pn_event_link(e); |
| 812 | } |
| 813 | return false; |
| 814 | |
| 815 | case PN_LINK_FLOW: /* Start a delivery */ |
| 816 | if (pn_link_is_sender(pn_event_link(e)) && !dlv) { |
| 817 | dlv = pn_delivery(pn_event_link(e), pn_dtag("x", 1)); |
| 818 | } |
| 819 | return false; |
| 820 | |
| 821 | case PN_CONNECTION_WAKE: { /* Send a chunk */ |
| 822 | ssize_t remains = size - sent; |
| 823 | ssize_t n = (CHUNK < remains) ? CHUNK : remains; |
| 824 | CHECK(n == pn_link_send(sender, send_buf.start + sent, n)); |
| 825 | sent += n; |
| 826 | if (sent == size) { |
| 827 | CHECK(pn_link_advance(sender)); |
| 828 | } |
| 829 | return false; |
| 830 | } |
| 831 | |
| 832 | case PN_DELIVERY: { /* Receive a delivery - smaller than a |
| 833 | chunk? */ |
| 834 | pn_delivery_t *dlv = pn_event_delivery(e); |
| 835 | if (pn_delivery_readable(dlv)) { |
| 836 | ssize_t n = pn_delivery_pending(dlv); |
| 837 | rwbytes_ensure(&recv_buf, received + n); |
| 838 | REQUIRE(n == |
| 839 | pn_link_recv(pn_event_link(e), recv_buf.start + received, n)); |
| 840 | received += n; |
| 841 | } |
| 842 | complete = !pn_delivery_partial(dlv); |
| 843 | return true; |
| 844 | } |
| 845 | default: |
| 846 | return common_handler::handle(e); |
| 847 | } |
| 848 | } |
| 849 | }; |
| 850 |
nothing calls this directly
no test coverage detected