00001 #ifndef PROTON_LINK_H
00002 #define PROTON_LINK_H 1
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include <proton/import_export.h>
00026 #include <proton/type_compat.h>
00027 #include <proton/condition.h>
00028 #include <proton/terminus.h>
00029 #include <proton/types.h>
00030 #include <proton/object.h>
00031 #include <stddef.h>
00032
00033 #ifdef __cplusplus
00034 extern "C" {
00035 #endif
00036
00058 PN_EXTERN pn_link_t *pn_sender(pn_session_t *session, const char *name);
00059
00072 PN_EXTERN pn_link_t *pn_receiver(pn_session_t *session, const char *name);
00073
00083 PN_EXTERN void pn_link_free(pn_link_t *link);
00084
00094 PN_EXTERN void *pn_link_get_context(pn_link_t *link);
00095
00105 PN_EXTERN void pn_link_set_context(pn_link_t *link, void *context);
00106
00113 PN_EXTERN pn_record_t *pn_link_attachments(pn_link_t *link);
00114
00121 PN_EXTERN const char *pn_link_name(pn_link_t *link);
00122
00129 PN_EXTERN bool pn_link_is_sender(pn_link_t *link);
00130
00137 PN_EXTERN bool pn_link_is_receiver(pn_link_t *link);
00138
00145 PN_EXTERN pn_state_t pn_link_state(pn_link_t *link);
00146
00163
00164 PN_EXTERN pn_error_t *pn_link_error(pn_link_t *link);
00165
00182 PN_EXTERN pn_condition_t *pn_link_condition(pn_link_t *link);
00183
00198 PN_EXTERN pn_condition_t *pn_link_remote_condition(pn_link_t *link);
00199
00209 PN_EXTERN pn_session_t *pn_link_session(pn_link_t *link);
00210
00226 PN_EXTERN pn_link_t *pn_link_head(pn_connection_t *connection, pn_state_t state);
00227
00241 PN_EXTERN pn_link_t *pn_link_next(pn_link_t *link, pn_state_t state);
00242
00251 PN_EXTERN void pn_link_open(pn_link_t *link);
00252
00263 PN_EXTERN void pn_link_close(pn_link_t *link);
00264
00270 PN_EXTERN void pn_link_detach(pn_link_t *link);
00271
00281 PN_EXTERN pn_terminus_t *pn_link_source(pn_link_t *link);
00282
00292 PN_EXTERN pn_terminus_t *pn_link_target(pn_link_t *link);
00293
00305 PN_EXTERN pn_terminus_t *pn_link_remote_source(pn_link_t *link);
00306
00318 PN_EXTERN pn_terminus_t *pn_link_remote_target(pn_link_t *link);
00319
00335 PN_EXTERN pn_delivery_t *pn_link_current(pn_link_t *link);
00336
00361 PN_EXTERN bool pn_link_advance(pn_link_t *link);
00362
00386 PN_EXTERN int pn_link_credit(pn_link_t *link);
00387
00400 PN_EXTERN int pn_link_queued(pn_link_t *link);
00401
00413 PN_EXTERN int pn_link_remote_credit(pn_link_t *link);
00414
00427 PN_EXTERN bool pn_link_get_drain(pn_link_t *link);
00428
00448 PN_EXTERN int pn_link_drained(pn_link_t *link);
00449
00461 PN_EXTERN int pn_link_available(pn_link_t *link);
00462
00471 typedef enum {
00472 PN_SND_UNSETTLED = 0,
00474 PN_SND_SETTLED = 1,
00476 PN_SND_MIXED = 2
00478 } pn_snd_settle_mode_t;
00479
00488 typedef enum {
00489 PN_RCV_FIRST = 0,
00491 PN_RCV_SECOND = 1
00493 } pn_rcv_settle_mode_t;
00494
00501 PN_EXTERN pn_snd_settle_mode_t pn_link_snd_settle_mode(pn_link_t *link);
00502
00509 PN_EXTERN pn_rcv_settle_mode_t pn_link_rcv_settle_mode(pn_link_t *link);
00510
00517 PN_EXTERN void pn_link_set_snd_settle_mode(pn_link_t *link, pn_snd_settle_mode_t mode);
00518
00525 PN_EXTERN void pn_link_set_rcv_settle_mode(pn_link_t *link, pn_rcv_settle_mode_t mode);
00526
00533 PN_EXTERN pn_snd_settle_mode_t pn_link_remote_snd_settle_mode(pn_link_t *link);
00534
00541 PN_EXTERN pn_rcv_settle_mode_t pn_link_remote_rcv_settle_mode(pn_link_t *link);
00542
00549 PN_EXTERN int pn_link_unsettled(pn_link_t *link);
00550
00557 PN_EXTERN pn_delivery_t *pn_unsettled_head(pn_link_t *link);
00558
00565 PN_EXTERN pn_delivery_t *pn_unsettled_next(pn_delivery_t *delivery);
00566
00574 PN_EXTERN void pn_link_offered(pn_link_t *sender, int credit);
00575
00584 PN_EXTERN ssize_t pn_link_send(pn_link_t *sender, const char *bytes, size_t n);
00585
00592 PN_EXTERN void pn_link_flow(pn_link_t *receiver, int credit);
00593
00603 PN_EXTERN void pn_link_drain(pn_link_t *receiver, int credit);
00604
00611 PN_EXTERN void pn_link_set_drain(pn_link_t *receiver, bool drain);
00612
00637 PN_EXTERN ssize_t pn_link_recv(pn_link_t *receiver, char *bytes, size_t n);
00638
00648 PN_EXTERN bool pn_link_draining(pn_link_t *receiver);
00649
00658 PN_EXTERN uint64_t pn_link_max_message_size(pn_link_t *link);
00659
00668 PN_EXTERN void pn_link_set_max_message_size(pn_link_t *link, uint64_t size);
00669
00678 PN_EXTERN uint64_t pn_link_remote_max_message_size(pn_link_t *link);
00679
00684 #ifdef __cplusplus
00685 }
00686 #endif
00687
00688 #endif
00689