| 259 | } |
| 260 | |
| 261 | static void handle_sender(app_data_t *app, pn_event_t *event) { |
| 262 | switch (pn_event_type(event)) { |
| 263 | |
| 264 | case PN_CONNECTION_INIT: { |
| 265 | pn_connection_t *c = pn_event_connection(event); |
| 266 | pn_connection_set_container(c, "sendercid"); |
| 267 | pn_connection_open(c); |
| 268 | pn_session_t *s = pn_session(c); |
| 269 | pn_session_open(s); |
| 270 | |
| 271 | pn_link_t *l = pn_sender(s, "my_sender"); |
| 272 | pn_terminus_set_address(pn_link_target(l), "example"); |
| 273 | pn_link_set_snd_settle_mode(l, PN_SND_UNSETTLED); |
| 274 | pn_link_set_rcv_settle_mode(l, PN_RCV_FIRST); |
| 275 | pn_link_open(l); |
| 276 | } break; |
| 277 | |
| 278 | case PN_LINK_FLOW: { |
| 279 | if (VERBOSE) |
| 280 | printf("BEGIN handle_sender: PN_LINK_FLOW\n"); |
| 281 | /* The peer has given us some credit, now we can send messages */ |
| 282 | pn_link_t *sender = pn_event_link(event); |
| 283 | while (pn_link_credit(sender) > 0 && app->sent != app->message_count) { |
| 284 | ++app->sent; |
| 285 | /* Use sent counter as unique delivery tag. */ |
| 286 | pn_delivery(sender, pn_dtag((const char *)&app->sent, sizeof(app->sent))); |
| 287 | send_message(app, sender); |
| 288 | } |
| 289 | break; |
| 290 | } |
| 291 | |
| 292 | case PN_DELIVERY: { |
| 293 | /* We received acknowledgement from the peer that a message was delivered. */ |
| 294 | pn_delivery_t *d = pn_event_delivery(event); |
| 295 | if (pn_delivery_remote_state(d) == PN_ACCEPTED) { |
| 296 | if (VERBOSE) |
| 297 | printf("got PN_ACCEPTED\n"); |
| 298 | if (++app->acknowledged == app->message_count) { |
| 299 | if (VERBOSE) |
| 300 | printf("%d messages sent and acknowledged\n", app->acknowledged); |
| 301 | pn_connection_close(pn_event_connection(event)); |
| 302 | /* Continue handling events till we receive TRANSPORT_CLOSED */ |
| 303 | } |
| 304 | } else { |
| 305 | fprintf(stderr, "unexpected delivery state %d\n", (int) pn_delivery_remote_state(d)); |
| 306 | pn_connection_close(pn_event_connection(event)); |
| 307 | exit(EXIT_FAILURE); |
| 308 | } |
| 309 | break; |
| 310 | } |
| 311 | |
| 312 | case PN_CONNECTION_REMOTE_OPEN: |
| 313 | pn_connection_open(pn_event_connection(event)); /* Complete the open */ |
| 314 | break; |
| 315 | |
| 316 | case PN_SESSION_REMOTE_OPEN: |
| 317 | pn_session_open(pn_event_session(event)); |
| 318 | break; |
no test coverage detected