diff options
author | Ted Ross <tross@apache.org> | 2013-07-09 02:22:33 +0000 |
---|---|---|
committer | Ted Ross <tross@apache.org> | 2013-07-09 02:22:33 +0000 |
commit | 99f53c071df83af0b3276df762f829c5db0b39e8 (patch) | |
tree | e6c808673eb82a22f581a6955d933acf42792c4f | |
parent | 344fd5a1565f4088b9099bd74c95b836b0bbffab (diff) | |
download | qpid-python-99f53c071df83af0b3276df762f829c5db0b39e8.tar.gz |
QPID-4967 - Added the message transmit linkage from python.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1501046 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r-- | qpid/extras/dispatch/include/qpid/dispatch/router.h | 4 | ||||
-rw-r--r-- | qpid/extras/dispatch/src/python_embedded.c | 26 | ||||
-rw-r--r-- | qpid/extras/dispatch/src/router_node.c | 10 |
3 files changed, 38 insertions, 2 deletions
diff --git a/qpid/extras/dispatch/include/qpid/dispatch/router.h b/qpid/extras/dispatch/include/qpid/dispatch/router.h index 2605b1cc00..ac17067797 100644 --- a/qpid/extras/dispatch/include/qpid/dispatch/router.h +++ b/qpid/extras/dispatch/include/qpid/dispatch/router.h @@ -43,5 +43,9 @@ void dx_router_send(dx_dispatch_t *dx, dx_field_iterator_t *address, dx_message_t *msg); +void dx_router_send2(dx_dispatch_t *dx, + const char *address, + dx_message_t *msg); + #endif diff --git a/qpid/extras/dispatch/src/python_embedded.c b/qpid/extras/dispatch/src/python_embedded.c index d223c047e6..6b5250a34a 100644 --- a/qpid/extras/dispatch/src/python_embedded.c +++ b/qpid/extras/dispatch/src/python_embedded.c @@ -432,14 +432,36 @@ static void IoAdapter_dealloc(IoAdapter* self) static PyObject* dx_python_send(PyObject *self, PyObject *args) { + IoAdapter *ioa = (IoAdapter*) self; const char *address; PyObject *app_properties; PyObject *body; if (!PyArg_ParseTuple(args, "sOO", &address, &app_properties, &body)) return 0; - // TODO - Compose and send a message - + dx_composed_field_t *field = dx_compose(DX_PERFORMATIVE_HEADER, 0); + dx_compose_start_list(field); + dx_compose_insert_bool(field, 0); // durable + dx_compose_end_list(field); + + field = dx_compose(DX_PERFORMATIVE_PROPERTIES, field); + dx_compose_start_list(field); + dx_compose_insert_null(field); // message-id + dx_compose_insert_null(field); // user-id + dx_compose_insert_string(field, address); // to + dx_compose_end_list(field); + + field = dx_compose(DX_PERFORMATIVE_APPLICATION_PROPERTIES, field); + dx_py_to_composed(app_properties, field); + + field = dx_compose(DX_PERFORMATIVE_BODY_AMQP_VALUE, field); + dx_py_to_composed(body, field); + + dx_message_t *msg = dx_allocate_message(); + dx_message_compose_2(msg, field); + dx_router_send2(ioa->dx, address, msg); + dx_free_message(msg); + dx_compose_free(field); Py_INCREF(Py_None); return Py_None; diff --git a/qpid/extras/dispatch/src/router_node.c b/qpid/extras/dispatch/src/router_node.c index d1e307e754..235c381d20 100644 --- a/qpid/extras/dispatch/src/router_node.c +++ b/qpid/extras/dispatch/src/router_node.c @@ -613,6 +613,16 @@ void dx_router_send(dx_dispatch_t *dx, } +void dx_router_send2(dx_dispatch_t *dx, + const char *address, + dx_message_t *msg) +{ + dx_field_iterator_t *iter = dx_field_iterator_string(address, ITER_VIEW_ADDRESS_HASH); + dx_router_send(dx, iter, msg); + dx_field_iterator_free(iter); +} + + //=============================================================================== // Python Router Adapter //=============================================================================== |