summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTed Ross <tross@apache.org>2013-05-20 19:37:04 +0000
committerTed Ross <tross@apache.org>2013-05-20 19:37:04 +0000
commit58d7bffec0109a86f44620b1ebff44f38af7af8f (patch)
tree2de573e5f466941f8f7b15e9fc60406475dc9e89
parent003c5911fff516a756b250b67a48daf898656e02 (diff)
downloadqpid-python-58d7bffec0109a86f44620b1ebff44f38af7af8f.tar.gz
NO_JIRA - Work-in-progress for Dispatch agent and field-access
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1484572 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--extras/dispatch/include/qpid/dispatch/agent.h20
-rw-r--r--extras/dispatch/include/qpid/dispatch/iterator.h2
-rw-r--r--extras/dispatch/src/agent.c32
-rw-r--r--extras/dispatch/src/container.c4
-rw-r--r--extras/dispatch/src/iterator.c8
-rw-r--r--extras/dispatch/src/server.c2
-rw-r--r--extras/dispatch/tests/CMakeLists.txt4
7 files changed, 40 insertions, 32 deletions
diff --git a/extras/dispatch/include/qpid/dispatch/agent.h b/extras/dispatch/include/qpid/dispatch/agent.h
index 3b4eea7be2..b3ce2af34a 100644
--- a/extras/dispatch/include/qpid/dispatch/agent.h
+++ b/extras/dispatch/include/qpid/dispatch/agent.h
@@ -38,7 +38,7 @@ typedef struct dx_agent_class_t dx_agent_class_t;
*
* @param context The handler context supplied in dx_agent_register.
*/
-typedef void (*dx_agent_schema_cb_t)(void* context, const void *correlator);
+typedef void (*dx_agent_schema_cb_t)(void* context, void *correlator);
/**
@@ -48,7 +48,7 @@ typedef void (*dx_agent_schema_cb_t)(void* context, const void *correlator);
* @param id The identifier of the instance being queried or NULL for all instances.
* @param correlator The correlation handle to be used in calls to dx_agent_value_*
*/
-typedef void (*dx_agent_query_cb_t)(void* context, const char *id, const void *correlator);
+typedef void (*dx_agent_query_cb_t)(void* context, const char *id, void *correlator);
/**
@@ -71,19 +71,19 @@ dx_agent_class_t *dx_agent_register_event(dx_dispatch_t *dx,
/**
*
*/
-void dx_agent_value_string(const void *correlator, const char *key, const char *value);
-void dx_agent_value_uint(const void *correlator, const char *key, uint64_t value);
-void dx_agent_value_null(const void *correlator, const char *key);
-void dx_agent_value_boolean(const void *correlator, const char *key, bool value);
-void dx_agent_value_binary(const void *correlator, const char *key, const uint8_t *value, size_t len);
-void dx_agent_value_uuid(const void *correlator, const char *key, const uint8_t *value);
-void dx_agent_value_timestamp(const void *correlator, const char *key, uint64_t value);
+void dx_agent_value_string(void *correlator, const char *key, const char *value);
+void dx_agent_value_uint(void *correlator, const char *key, uint64_t value);
+void dx_agent_value_null(void *correlator, const char *key);
+void dx_agent_value_boolean(void *correlator, const char *key, bool value);
+void dx_agent_value_binary(void *correlator, const char *key, const uint8_t *value, size_t len);
+void dx_agent_value_uuid(void *correlator, const char *key, const uint8_t *value);
+void dx_agent_value_timestamp(void *correlator, const char *key, uint64_t value);
/**
*
*/
-void dx_agent_value_complete(const void *correlator, bool more);
+void dx_agent_value_complete(void *correlator, bool more);
/**
diff --git a/extras/dispatch/include/qpid/dispatch/iterator.h b/extras/dispatch/include/qpid/dispatch/iterator.h
index 8241fc3de9..be10990f40 100644
--- a/extras/dispatch/include/qpid/dispatch/iterator.h
+++ b/extras/dispatch/include/qpid/dispatch/iterator.h
@@ -156,6 +156,6 @@ dx_field_map_t *dx_field_map(dx_field_iterator_t *iter, int string_keys_only);
void dx_field_map_free(dx_field_map_t *map);
dx_field_iterator_t *dx_field_map_by_key(dx_field_map_t *map, const char *key);
-dx_field_iterator_t *dx_field_string(dx_field_iterator_t *iter);
+dx_field_iterator_t *dx_field_raw(dx_field_iterator_t *iter);
#endif
diff --git a/extras/dispatch/src/agent.c b/extras/dispatch/src/agent.c
index ad226351b6..a120518f7c 100644
--- a/extras/dispatch/src/agent.c
+++ b/extras/dispatch/src/agent.c
@@ -56,8 +56,6 @@ typedef struct {
dx_message_t *response_msg;
} dx_agent_request_t;
-ALLOC_DECLARE(dx_agent_request_t);
-ALLOC_DEFINE(dx_agent_request_t);
static char *log_module = "AGENT";
@@ -68,14 +66,19 @@ static void dx_agent_process_get(dx_agent_t *agent, dx_field_map_t *map)
if (cls == 0)
return;
- dx_field_iterator_t *cls_string = dx_field_string(cls);
+ dx_field_iterator_t *cls_string = dx_field_raw(cls);
const dx_agent_class_t *cls_record;
hash_retrieve_const(agent->class_hash, cls_string, (const void**) &cls_record);
-
if (cls_record == 0)
return;
dx_log(log_module, LOG_TRACE, "Received GET request for class: %s", cls_record->fqname);
+
+ dx_agent_request_t request;
+ request.agent = agent;
+ request.response_msg = 0;
+
+ cls_record->query_handler(cls_record->context, 0, &request);
}
@@ -116,7 +119,7 @@ static void dx_agent_process_request(dx_agent_t *agent, dx_message_t *msg)
//
// Dispatch the opcode to the appropriate handler
//
- dx_field_iterator_t *opcode_string = dx_field_string(opcode);
+ dx_field_iterator_t *opcode_string = dx_field_raw(opcode);
if (dx_field_iterator_equal(opcode_string, (unsigned char*) "get"))
dx_agent_process_get(agent, map);
@@ -220,42 +223,45 @@ dx_agent_class_t *dx_agent_register_event(dx_dispatch_t *dx,
}
-void dx_agent_value_string(const void *correlator, const char *key, const char *value)
+void dx_agent_value_string(void *correlator, const char *key, const char *value)
{
+ printf("STRING: %s => %s\n", key, value);
}
-void dx_agent_value_uint(const void *correlator, const char *key, uint64_t value)
+void dx_agent_value_uint(void *correlator, const char *key, uint64_t value)
{
+ printf("UINT : %s => %ld\n", key, value);
}
-void dx_agent_value_null(const void *correlator, const char *key)
+void dx_agent_value_null(void *correlator, const char *key)
{
+ printf("NULL : %s\n", key);
}
-void dx_agent_value_boolean(const void *correlator, const char *key, bool value)
+void dx_agent_value_boolean(void *correlator, const char *key, bool value)
{
}
-void dx_agent_value_binary(const void *correlator, const char *key, const uint8_t *value, size_t len)
+void dx_agent_value_binary(void *correlator, const char *key, const uint8_t *value, size_t len)
{
}
-void dx_agent_value_uuid(const void *correlator, const char *key, const uint8_t *value)
+void dx_agent_value_uuid(void *correlator, const char *key, const uint8_t *value)
{
}
-void dx_agent_value_timestamp(const void *correlator, const char *key, uint64_t value)
+void dx_agent_value_timestamp(void *correlator, const char *key, uint64_t value)
{
}
-void dx_agent_value_complete(const void *correlator, bool more)
+void dx_agent_value_complete(void *correlator, bool more)
{
}
diff --git a/extras/dispatch/src/container.c b/extras/dispatch/src/container.c
index ff628aa9b1..5a0f1b7eb2 100644
--- a/extras/dispatch/src/container.c
+++ b/extras/dispatch/src/container.c
@@ -414,12 +414,12 @@ static int handler(void *handler_context, void *conn_context, dx_conn_event_t ev
}
-static void container_schema_handler(void *context, const void *correlator)
+static void container_schema_handler(void *context, void *correlator)
{
}
-static void container_query_handler(void* context, const char *id, const void *correlator)
+static void container_query_handler(void* context, const char *id, void *correlator)
{
container_class_t *cls = (container_class_t*) context;
diff --git a/extras/dispatch/src/iterator.c b/extras/dispatch/src/iterator.c
index 44cc152bd9..68d0701f6c 100644
--- a/extras/dispatch/src/iterator.c
+++ b/extras/dispatch/src/iterator.c
@@ -598,7 +598,7 @@ dx_field_iterator_t *dx_field_map_by_key(dx_field_map_t *map, const char *key)
dx_field_pair_t *pair = DEQ_HEAD(map->pairs);
while (pair && !value) {
- key_string = dx_field_string(pair->key_iter);
+ key_string = dx_field_raw(pair->key_iter);
if (dx_field_iterator_equal(key_string, (const unsigned char*) key))
value = pair->value_iter;
free_dx_field_iterator_t(key_string);
@@ -641,12 +641,10 @@ static unsigned int dx_field_get_length(dx_field_iterator_t *iter, unsigned char
}
-dx_field_iterator_t *dx_field_string(dx_field_iterator_t *iter)
+dx_field_iterator_t *dx_field_raw(dx_field_iterator_t *iter)
{
dx_field_iterator_reset(iter);
- unsigned char tag = dx_field_iterator_octet(iter);
- if (!dx_tag_is_string(tag))
- return 0;
+ unsigned char tag = dx_field_iterator_octet(iter);
unsigned int length = dx_field_get_length(iter, tag);
dx_field_iterator_t *result = new_dx_field_iterator_t();
diff --git a/extras/dispatch/src/server.c b/extras/dispatch/src/server.c
index cb57458319..fccee7fac0 100644
--- a/extras/dispatch/src/server.c
+++ b/extras/dispatch/src/server.c
@@ -154,7 +154,7 @@ static int process_connector(dx_server_t *dx_server, pn_connector_t *cxtr)
if (ctx->state == CONN_STATE_USER) {
dx_server->ufd_handler(ctx->ufd->context, ctx->ufd);
- return 0;
+ return 1;
}
do {
diff --git a/extras/dispatch/tests/CMakeLists.txt b/extras/dispatch/tests/CMakeLists.txt
index ddf41d0834..688e1de2f6 100644
--- a/extras/dispatch/tests/CMakeLists.txt
+++ b/extras/dispatch/tests/CMakeLists.txt
@@ -43,5 +43,9 @@ target_link_libraries(unit_tests_size qpid-dispatch)
add_test(unit_tests_size_10000 unit_tests_size 10000)
add_test(unit_tests_size_512 unit_tests_size 512)
add_test(unit_tests_size_10 unit_tests_size 10)
+add_test(unit_tests_size_7 unit_tests_size 7)
+add_test(unit_tests_size_5 unit_tests_size 5)
+add_test(unit_tests_size_3 unit_tests_size 3)
+add_test(unit_tests_size_2 unit_tests_size 2)
add_test(unit_tests_size_1 unit_tests_size 1)
add_test(unit_tests unit_tests)