Author: rhs Date: Thu Sep 18 20:45:18 2014 New Revision: 1626084 URL: http://svn.apache.org/r1626084 Log: PROTON-671: patch for settlement modes from dominic
Modified: qpid/proton/trunk/proton-c/include/proton/messenger.h qpid/proton/trunk/proton-c/src/messenger/messenger.c Modified: qpid/proton/trunk/proton-c/include/proton/messenger.h URL: http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/include/proton/messenger.h?rev=1626084&r1=1626083&r2=1626084&view=diff ============================================================================== --- qpid/proton/trunk/proton-c/include/proton/messenger.h (original) +++ qpid/proton/trunk/proton-c/include/proton/messenger.h Thu Sep 18 20:45:18 2014 @@ -25,6 +25,9 @@ #include <proton/import_export.h> #include <proton/message.h> #include <proton/selectable.h> +#include <proton/condition.h> +#include <proton/terminus.h> +#include <proton/link.h> #ifdef __cplusplus extern "C" { @@ -932,6 +935,24 @@ PN_EXTERN int pn_messenger_set_flags(pn_ */ PN_EXTERN int pn_messenger_get_flags(pn_messenger_t *messenger); +/** + * Set the local sender settle mode for the underlying link. + * + * @param[in] messenger the messenger + * @param[in] mode the sender settle mode + */ +PN_EXTERN int pn_messenger_set_snd_settle_mode(pn_messenger_t *messenger, + const pn_snd_settle_mode_t mode); + +/** + * Set the local receiver settle mode for the underlying link. + * + * @param[in] messenger the messenger + * @param[in] mode the receiver settle mode + */ +PN_EXTERN int pn_messenger_set_rcv_settle_mode(pn_messenger_t *messenger, + const pn_rcv_settle_mode_t mode); + #ifdef __cplusplus } #endif Modified: qpid/proton/trunk/proton-c/src/messenger/messenger.c URL: http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/messenger/messenger.c?rev=1626084&r1=1626083&r2=1626084&view=diff ============================================================================== --- qpid/proton/trunk/proton-c/src/messenger/messenger.c (original) +++ qpid/proton/trunk/proton-c/src/messenger/messenger.c Thu Sep 18 20:45:18 2014 @@ -101,6 +101,8 @@ struct pn_messenger_t { int draining; // # links in drain state int connection_error; int flags; + pn_snd_settle_mode_t snd_settle_mode; + pn_rcv_settle_mode_t rcv_settle_mode; bool blocking; bool passive; bool interrupted; @@ -645,6 +647,8 @@ pn_messenger_t *pn_messenger(const char m->domain = pn_string(NULL); m->connection_error = 0; m->flags = 0; + m->snd_settle_mode = PN_SND_SETTLED; + m->rcv_settle_mode = PN_RCV_FIRST; } return m; @@ -1681,9 +1685,9 @@ pn_link_t *pn_messenger_link(pn_messenge if ((sender && pn_messenger_get_outgoing_window(messenger)) || (!sender && pn_messenger_get_incoming_window(messenger))) { - // use explicit settlement via dispositions (not pre-settled) - pn_link_set_snd_settle_mode( link, PN_SND_UNSETTLED ); - pn_link_set_rcv_settle_mode( link, PN_RCV_SECOND ); + // use required settlement (defaults to sending pre-settled messages) + pn_link_set_snd_settle_mode(link, messenger->snd_settle_mode); + pn_link_set_rcv_settle_mode(link, messenger->rcv_settle_mode); } // XXX if (pn_streq(name, "#")) { @@ -2263,3 +2267,21 @@ PN_EXTERN int pn_messenger_get_flags(pn_ { return messenger ? messenger->flags : 0; } + +int pn_messenger_set_snd_settle_mode(pn_messenger_t *messenger, + const pn_snd_settle_mode_t mode) +{ + if (!messenger) + return PN_ARG_ERR; + messenger->snd_settle_mode = mode; + return 0; +} + +int pn_messenger_set_rcv_settle_mode(pn_messenger_t *messenger, + const pn_rcv_settle_mode_t mode) +{ + if (!messenger) + return PN_ARG_ERR; + messenger->rcv_settle_mode = mode; + return 0; +} --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org