diff options
| author | Ted Ross <tross@apache.org> | 2013-05-20 19:37:04 +0000 |
|---|---|---|
| committer | Ted Ross <tross@apache.org> | 2013-05-20 19:37:04 +0000 |
| commit | 58d7bffec0109a86f44620b1ebff44f38af7af8f (patch) | |
| tree | 2de573e5f466941f8f7b15e9fc60406475dc9e89 | |
| parent | 003c5911fff516a756b250b67a48daf898656e02 (diff) | |
| download | qpid-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.h | 20 | ||||
| -rw-r--r-- | extras/dispatch/include/qpid/dispatch/iterator.h | 2 | ||||
| -rw-r--r-- | extras/dispatch/src/agent.c | 32 | ||||
| -rw-r--r-- | extras/dispatch/src/container.c | 4 | ||||
| -rw-r--r-- | extras/dispatch/src/iterator.c | 8 | ||||
| -rw-r--r-- | extras/dispatch/src/server.c | 2 | ||||
| -rw-r--r-- | extras/dispatch/tests/CMakeLists.txt | 4 |
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) |
