You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ac...@apache.org on 2018/07/04 15:58:08 UTC
[36/41] qpid-proton git commit: PROTON-1866: provide method to
determine whether expiry policy was set explicitly or not
PROTON-1866: provide method to determine whether expiry policy was set explicitly or not
Project: http://git-wip-us.apache.org/repos/asf/qpid-proton/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-proton/commit/ccb9e5a3
Tree: http://git-wip-us.apache.org/repos/asf/qpid-proton/tree/ccb9e5a3
Diff: http://git-wip-us.apache.org/repos/asf/qpid-proton/diff/ccb9e5a3
Branch: refs/heads/go1
Commit: ccb9e5a388022e529502dcc547b7862b2185d6bc
Parents: b1b8322
Author: Gordon Sim <gs...@redhat.com>
Authored: Mon Jun 25 17:52:19 2018 +0100
Committer: Gordon Sim <gs...@redhat.com>
Committed: Mon Jun 25 17:52:40 2018 +0100
----------------------------------------------------------------------
c/include/proton/terminus.h | 11 ++++++++++
c/src/core/engine-internal.h | 1 +
c/src/core/engine.c | 8 ++++++++
c/src/core/transport.c | 43 +++++++++++++++++++--------------------
4 files changed, 41 insertions(+), 22 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/ccb9e5a3/c/include/proton/terminus.h
----------------------------------------------------------------------
diff --git a/c/include/proton/terminus.h b/c/include/proton/terminus.h
index b2344c0..096ab17 100644
--- a/c/include/proton/terminus.h
+++ b/c/include/proton/terminus.h
@@ -191,6 +191,15 @@ PN_EXTERN int pn_terminus_set_durability(pn_terminus_t *terminus,
PN_EXTERN pn_expiry_policy_t pn_terminus_get_expiry_policy(pn_terminus_t *terminus);
/**
+ * Return true if the terminus has an explicit expiry policy set,
+ * false if it does not.
+ *
+ * @param[in] terminus a terminus object
+ * @return whether the terminus has an explicit expiry-policy
+ */
+PN_EXTERN bool pn_terminus_has_expiry_policy(const pn_terminus_t *terminus);
+
+/**
* Set the expiry policy of a terminus object.
*
* @param[in] terminus a terminus object
@@ -199,6 +208,8 @@ PN_EXTERN pn_expiry_policy_t pn_terminus_get_expiry_policy(pn_terminus_t *termin
*/
PN_EXTERN int pn_terminus_set_expiry_policy(pn_terminus_t *terminus, pn_expiry_policy_t policy);
+
+
/**
* Get the timeout of a terminus object.
*
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/ccb9e5a3/c/src/core/engine-internal.h
----------------------------------------------------------------------
diff --git a/c/src/core/engine-internal.h b/c/src/core/engine-internal.h
index b1c6123..66a892d 100644
--- a/c/src/core/engine-internal.h
+++ b/c/src/core/engine-internal.h
@@ -274,6 +274,7 @@ struct pn_terminus_t {
pn_data_t *filter;
pn_durability_t durability;
pn_expiry_policy_t expiry_policy;
+ bool has_expiry_policy;
pn_seconds_t timeout;
pn_terminus_type_t type;
pn_distribution_mode_t distribution_mode;
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/ccb9e5a3/c/src/core/engine.c
----------------------------------------------------------------------
diff --git a/c/src/core/engine.c b/c/src/core/engine.c
index 070c751..e70117e 100644
--- a/c/src/core/engine.c
+++ b/c/src/core/engine.c
@@ -1085,6 +1085,7 @@ static void pni_terminus_init(pn_terminus_t *terminus, pn_terminus_type_t type)
terminus->type = type;
terminus->address = pn_string(NULL);
terminus->durability = PN_NONDURABLE;
+ terminus->has_expiry_policy = false;
terminus->expiry_policy = PN_EXPIRE_WITH_SESSION;
terminus->timeout = 0;
terminus->dynamic = false;
@@ -1267,10 +1268,16 @@ pn_expiry_policy_t pn_terminus_get_expiry_policy(pn_terminus_t *terminus)
return terminus ? terminus->expiry_policy : (pn_expiry_policy_t) 0;
}
+bool pn_terminus_has_expiry_policy(const pn_terminus_t *terminus)
+{
+ return terminus && terminus->has_expiry_policy;
+}
+
int pn_terminus_set_expiry_policy(pn_terminus_t *terminus, pn_expiry_policy_t expiry_policy)
{
if (!terminus) return PN_ARG_ERR;
terminus->expiry_policy = expiry_policy;
+ terminus->has_expiry_policy = true;
return 0;
}
@@ -1340,6 +1347,7 @@ int pn_terminus_copy(pn_terminus_t *terminus, pn_terminus_t *src)
int err = pn_terminus_set_address(terminus, pn_terminus_get_address(src));
if (err) return err;
terminus->durability = src->durability;
+ terminus->has_expiry_policy = src->has_expiry_policy;
terminus->expiry_policy = src->expiry_policy;
terminus->timeout = src->timeout;
terminus->dynamic = src->dynamic;
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/ccb9e5a3/c/src/core/transport.c
----------------------------------------------------------------------
diff --git a/c/src/core/transport.c b/c/src/core/transport.c
index bfa66c1..dde4b37 100644
--- a/c/src/core/transport.c
+++ b/c/src/core/transport.c
@@ -1274,21 +1274,18 @@ static pn_link_t *pni_find_link(pn_session_t *ssn, pn_bytes_t name, bool is_send
return NULL;
}
-static pn_expiry_policy_t symbol2policy(pn_bytes_t symbol)
+static void set_expiry_policy_from_symbol(pn_terminus_t* terminus, pn_bytes_t symbol)
{
- if (!symbol.start)
- return PN_EXPIRE_WITH_SESSION;
-
- if (pn_bytes_equal(symbol, PN_BYTES_LITERAL(link-detach)))
- return PN_EXPIRE_WITH_LINK;
- if (pn_bytes_equal(symbol, PN_BYTES_LITERAL(session-end)))
- return PN_EXPIRE_WITH_SESSION;
- if (pn_bytes_equal(symbol, PN_BYTES_LITERAL(connection-close)))
- return PN_EXPIRE_WITH_CONNECTION;
- if (pn_bytes_equal(symbol, PN_BYTES_LITERAL(never)))
- return PN_EXPIRE_NEVER;
-
- return PN_EXPIRE_WITH_SESSION;
+ if (symbol.start) {
+ if (pn_bytes_equal(symbol, PN_BYTES_LITERAL(link-detach)))
+ pn_terminus_set_expiry_policy(terminus, PN_EXPIRE_WITH_LINK);
+ if (pn_bytes_equal(symbol, PN_BYTES_LITERAL(session-end)))
+ pn_terminus_set_expiry_policy(terminus, PN_EXPIRE_WITH_SESSION);
+ if (pn_bytes_equal(symbol, PN_BYTES_LITERAL(connection-close)))
+ pn_terminus_set_expiry_policy(terminus, PN_EXPIRE_WITH_CONNECTION);
+ if (pn_bytes_equal(symbol, PN_BYTES_LITERAL(never)))
+ pn_terminus_set_expiry_policy(terminus, PN_EXPIRE_NEVER);
+ }
}
static pn_distribution_mode_t symbol2dist_mode(const pn_bytes_t symbol)
@@ -1383,7 +1380,7 @@ int pn_do_attach(pn_transport_t *transport, uint8_t frame_type, uint16_t channel
pn_terminus_set_type(rsrc, PN_SOURCE);
pn_terminus_set_address_bytes(rsrc, source);
pn_terminus_set_durability(rsrc, src_dr);
- pn_terminus_set_expiry_policy(rsrc, symbol2policy(src_exp));
+ set_expiry_policy_from_symbol(rsrc, src_exp);
pn_terminus_set_timeout(rsrc, src_timeout);
pn_terminus_set_dynamic(rsrc, src_dynamic);
pn_terminus_set_distribution_mode(rsrc, symbol2dist_mode(dist_mode));
@@ -1395,7 +1392,7 @@ int pn_do_attach(pn_transport_t *transport, uint8_t frame_type, uint16_t channel
pn_terminus_set_type(rtgt, PN_TARGET);
pn_terminus_set_address_bytes(rtgt, target);
pn_terminus_set_durability(rtgt, tgt_dr);
- pn_terminus_set_expiry_policy(rtgt, symbol2policy(tgt_exp));
+ set_expiry_policy_from_symbol(rtgt, tgt_exp);
pn_terminus_set_timeout(rtgt, tgt_timeout);
pn_terminus_set_dynamic(rtgt, tgt_dynamic);
} else {
@@ -1958,14 +1955,16 @@ static int pni_process_ssn_setup(pn_transport_t *transport, pn_endpoint_t *endpo
return 0;
}
-static const char *expiry_symbol(pn_expiry_policy_t policy)
+static const char *expiry_symbol(pn_terminus_t* terminus)
{
- switch (policy)
+ if (!terminus->has_expiry_policy) return NULL;
+
+ switch (terminus->expiry_policy)
{
case PN_EXPIRE_WITH_LINK:
return "link-detach";
case PN_EXPIRE_WITH_SESSION:
- return NULL;
+ return "session-end";
case PN_EXPIRE_WITH_CONNECTION:
return "connection-close";
case PN_EXPIRE_NEVER:
@@ -2011,7 +2010,7 @@ static int pni_process_link_setup(pn_transport_t *transport, pn_endpoint_t *endp
(bool) link->source.type, SOURCE,
pn_string_get(link->source.address),
link->source.durability,
- expiry_symbol(link->source.expiry_policy),
+ expiry_symbol(&link->source),
link->source.timeout,
link->source.dynamic,
link->source.properties,
@@ -2033,7 +2032,7 @@ static int pni_process_link_setup(pn_transport_t *transport, pn_endpoint_t *endp
(bool) link->source.type, SOURCE,
pn_string_get(link->source.address),
link->source.durability,
- expiry_symbol(link->source.expiry_policy),
+ expiry_symbol(&link->source),
link->source.timeout,
link->source.dynamic,
link->source.properties,
@@ -2044,7 +2043,7 @@ static int pni_process_link_setup(pn_transport_t *transport, pn_endpoint_t *endp
(bool) link->target.type, TARGET,
pn_string_get(link->target.address),
link->target.durability,
- expiry_symbol(link->target.expiry_policy),
+ expiry_symbol(&link->target),
link->target.timeout,
link->target.dynamic,
link->target.properties,
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org