You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by tr...@apache.org on 2013/11/15 20:57:25 UTC

svn commit: r1542381 - /qpid/dispatch/trunk/src/agent.c

Author: tross
Date: Fri Nov 15 19:57:24 2013
New Revision: 1542381

URL: http://svn.apache.org/r1542381
Log:
QPID-5350 - fixed defect in the management agent when an empty table is returned.

Modified:
    qpid/dispatch/trunk/src/agent.c

Modified: qpid/dispatch/trunk/src/agent.c
URL: http://svn.apache.org/viewvc/qpid/dispatch/trunk/src/agent.c?rev=1542381&r1=1542380&r2=1542381&view=diff
==============================================================================
--- qpid/dispatch/trunk/src/agent.c (original)
+++ qpid/dispatch/trunk/src/agent.c Fri Nov 15 19:57:24 2013
@@ -62,21 +62,25 @@ struct dx_agent_t {
 typedef struct {
     dx_agent_t          *agent;
     dx_composed_field_t *response;
+    int                  empty;
 } dx_agent_request_t;
 
 
 static char *log_module = "AGENT";
 
 
+static void dx_agent_check_empty(dx_agent_request_t *request)
+{
+    if (request->empty) {
+        request->empty = 0;
+        dx_compose_start_map(request->response);
+    }
+}
+
+
 static dx_composed_field_t *dx_agent_setup_response(dx_field_iterator_t *reply_to, dx_field_iterator_t *cid)
 {
-    //
-    // Compose the header
-    //
-    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);
+    dx_composed_field_t *field = 0;
 
     //
     // Compose the Properties
@@ -90,6 +94,8 @@ static dx_composed_field_t *dx_agent_set
     dx_compose_insert_null(field);                       // reply-to
     if (cid)
         dx_compose_insert_typed_iterator(field, cid);    // correlation-id
+    //else
+    //    dx_compose_insert_null(field);
     dx_compose_end_list(field);
 
     //
@@ -132,7 +138,6 @@ static void dx_agent_process_get(dx_agen
     //
     field = dx_compose(DX_PERFORMATIVE_BODY_AMQP_VALUE, field);
     dx_compose_start_list(field);
-    dx_compose_start_map(field);
 
     //
     // The request record is allocated locally because the entire processing of the request
@@ -141,6 +146,7 @@ static void dx_agent_process_get(dx_agen
     dx_agent_request_t request;
     request.agent    = agent;
     request.response = field;
+    request.empty    = 1;
 
     cls_record->query_handler(cls_record->context, 0, &request);
 
@@ -480,6 +486,7 @@ dx_agent_class_t *dx_agent_register_even
 void dx_agent_value_string(void *correlator, const char *key, const char *value)
 {
     dx_agent_request_t *request = (dx_agent_request_t*) correlator;
+    dx_agent_check_empty(request);
     dx_compose_insert_string(request->response, key);
     dx_compose_insert_string(request->response, value);
 }
@@ -488,6 +495,7 @@ void dx_agent_value_string(void *correla
 void dx_agent_value_uint(void *correlator, const char *key, uint64_t value)
 {
     dx_agent_request_t *request = (dx_agent_request_t*) correlator;
+    dx_agent_check_empty(request);
     dx_compose_insert_string(request->response, key);
     dx_compose_insert_uint(request->response, value);
 }
@@ -496,6 +504,7 @@ void dx_agent_value_uint(void *correlato
 void dx_agent_value_null(void *correlator, const char *key)
 {
     dx_agent_request_t *request = (dx_agent_request_t*) correlator;
+    dx_agent_check_empty(request);
     dx_compose_insert_string(request->response, key);
     dx_compose_insert_null(request->response);
 }
@@ -504,6 +513,7 @@ void dx_agent_value_null(void *correlato
 void dx_agent_value_boolean(void *correlator, const char *key, bool value)
 {
     dx_agent_request_t *request = (dx_agent_request_t*) correlator;
+    dx_agent_check_empty(request);
     dx_compose_insert_string(request->response, key);
     dx_compose_insert_bool(request->response, value);
 }
@@ -512,6 +522,7 @@ void dx_agent_value_boolean(void *correl
 void dx_agent_value_binary(void *correlator, const char *key, const uint8_t *value, size_t len)
 {
     dx_agent_request_t *request = (dx_agent_request_t*) correlator;
+    dx_agent_check_empty(request);
     dx_compose_insert_string(request->response, key);
     dx_compose_insert_binary(request->response, value, len);
 }
@@ -520,6 +531,7 @@ void dx_agent_value_binary(void *correla
 void dx_agent_value_uuid(void *correlator, const char *key, const uint8_t *value)
 {
     dx_agent_request_t *request = (dx_agent_request_t*) correlator;
+    dx_agent_check_empty(request);
     dx_compose_insert_string(request->response, key);
     dx_compose_insert_uuid(request->response, value);
 }
@@ -528,6 +540,7 @@ void dx_agent_value_uuid(void *correlato
 void dx_agent_value_timestamp(void *correlator, const char *key, uint64_t value)
 {
     dx_agent_request_t *request = (dx_agent_request_t*) correlator;
+    dx_agent_check_empty(request);
     dx_compose_insert_string(request->response, key);
     dx_compose_insert_timestamp(request->response, value);
 }
@@ -536,6 +549,12 @@ void dx_agent_value_timestamp(void *corr
 void dx_agent_value_complete(void *correlator, bool more)
 {
     dx_agent_request_t *request = (dx_agent_request_t*) correlator;
+
+    if (!more && request->empty)
+        return;
+
+    assert (!more || !request->empty);
+
     dx_compose_end_map(request->response);
     if (more)
         dx_compose_start_map(request->response);



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org