MCPcopy Create free account
hub / github.com/apache/qpid-proton / handle_sender

Function handle_sender

c/benchmarks/connection-driver.cpp:261–350  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

259}
260
261static 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;

Callers 2

BM_EstablishConnectionFunction · 0.85
BM_SendReceiveMessagesFunction · 0.85

Calls 15

pn_event_typeFunction · 0.85
pn_event_connectionFunction · 0.85
pn_connection_openFunction · 0.85
pn_sessionFunction · 0.85
pn_session_openFunction · 0.85
pn_link_targetFunction · 0.85
pn_link_openFunction · 0.85
pn_event_linkFunction · 0.85
pn_link_creditFunction · 0.85
pn_dtagFunction · 0.85

Tested by

no test coverage detected