Author: rhs Date: Wed Mar 13 19:21:06 2013 New Revision: 1456100 URL: http://svn.apache.org/r1456100 Log: PROTON-269: fixed redirect accessors to do proper lookups
Modified: qpid/proton/trunk/proton-c/bindings/python/proton.py qpid/proton/trunk/proton-c/include/proton/codec.h qpid/proton/trunk/proton-c/src/codec/codec.c qpid/proton/trunk/proton-c/src/engine/engine.c qpid/proton/trunk/tests/python/proton_tests/codec.py Modified: qpid/proton/trunk/proton-c/bindings/python/proton.py URL: http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/bindings/python/proton.py?rev=1456100&r1=1456099&r2=1456100&view=diff ============================================================================== --- qpid/proton/trunk/proton-c/bindings/python/proton.py (original) +++ qpid/proton/trunk/proton-c/bindings/python/proton.py Wed Mar 13 19:21:06 2013 @@ -1094,6 +1094,15 @@ class Data: """ return pn_data_exit(self._data) + def lookup(self, name): + return pn_data_lookup(self._data, name) + + def narrow(self): + pn_data_narrow(self._data) + + def widen(self): + pn_data_widen(self._data) + def type(self): """ Returns the type of the current node. Modified: qpid/proton/trunk/proton-c/include/proton/codec.h URL: http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/include/proton/codec.h?rev=1456100&r1=1456099&r2=1456100&view=diff ============================================================================== --- qpid/proton/trunk/proton-c/include/proton/codec.h (original) +++ qpid/proton/trunk/proton-c/include/proton/codec.h Wed Mar 13 19:21:06 2013 @@ -111,6 +111,7 @@ PN_EXTERN bool pn_data_next(pn_data_t *d PN_EXTERN bool pn_data_prev(pn_data_t *data); PN_EXTERN bool pn_data_enter(pn_data_t *data); PN_EXTERN bool pn_data_exit(pn_data_t *data); +PN_EXTERN bool pn_data_lookup(pn_data_t *data, const char *name); PN_EXTERN pn_type_t pn_data_type(pn_data_t *data); Modified: qpid/proton/trunk/proton-c/src/codec/codec.c URL: http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/codec/codec.c?rev=1456100&r1=1456099&r2=1456100&view=diff ============================================================================== --- qpid/proton/trunk/proton-c/src/codec/codec.c (original) +++ qpid/proton/trunk/proton-c/src/codec/codec.c Wed Mar 13 19:21:06 2013 @@ -1919,6 +1919,32 @@ bool pn_data_exit(pn_data_t *data) } } +bool pn_data_lookup(pn_data_t *data, const char *name) +{ + while (pn_data_next(data)) { + pn_type_t type = pn_data_type(data); + + switch (type) { + case PN_STRING: + case PN_SYMBOL: + { + pn_bytes_t bytes = pn_data_get_bytes(data); + if (!strncmp(name, bytes.start, bytes.size)) { + return pn_data_next(data); + } + } + break; + default: + break; + } + + // skip the value + pn_data_next(data); + } + + return false; +} + void pn_data_dump(pn_data_t *data) { char buf[1024]; Modified: qpid/proton/trunk/proton-c/src/engine/engine.c URL: http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/engine/engine.c?rev=1456100&r1=1456099&r2=1456100&view=diff ============================================================================== --- qpid/proton/trunk/proton-c/src/engine/engine.c (original) +++ qpid/proton/trunk/proton-c/src/engine/engine.c Wed Mar 13 19:21:06 2013 @@ -2944,10 +2944,7 @@ const char *pn_condition_redirect_host(p pn_data_rewind(data); pn_data_next(data); pn_data_enter(data); - pn_data_next(data); - pn_data_next(data); - pn_data_next(data); - pn_data_next(data); + pn_data_lookup(data, "network-host"); pn_bytes_t host = pn_data_get_bytes(data); pn_data_rewind(data); return host.start; @@ -2959,12 +2956,7 @@ int pn_condition_redirect_port(pn_condit pn_data_rewind(data); pn_data_next(data); pn_data_enter(data); - pn_data_next(data); - pn_data_next(data); - pn_data_next(data); - pn_data_next(data); - pn_data_next(data); - pn_data_next(data); + pn_data_lookup(data, "port"); int port = pn_data_get_int(data); pn_data_rewind(data); return port; Modified: qpid/proton/trunk/tests/python/proton_tests/codec.py URL: http://svn.apache.org/viewvc/qpid/proton/trunk/tests/python/proton_tests/codec.py?rev=1456100&r1=1456099&r2=1456100&view=diff ============================================================================== --- qpid/proton/trunk/tests/python/proton_tests/codec.py (original) +++ qpid/proton/trunk/tests/python/proton_tests/codec.py Wed Mar 13 19:21:06 2013 @@ -297,3 +297,24 @@ class DataTest(Test): assert data.next() copy = data.get_object() assert copy == obj, (copy, obj) + + def testLookup(self): + obj = {symbol("key"): u"value", + symbol("pi"): 3.14159, + symbol("list"): [1, 2, 3, 4]} + self.data.put_object(obj) + self.data.rewind() + self.data.next() + self.data.enter() + self.data.narrow() + assert self.data.lookup("pi") + assert self.data.get_object() == 3.14159 + self.data.rewind() + assert self.data.lookup("key") + assert self.data.get_object() == u"value" + self.data.rewind() + assert self.data.lookup("list") + assert self.data.get_object() == [1, 2, 3, 4] + self.data.widen() + self.data.rewind() + assert not self.data.lookup("pi") --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org