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 2016/03/19 00:06:43 UTC
[25/50] [abbrv] qpid-dispatch git commit: DISPATCH-179 - Implemented
plumbing for management delete of route objects
DISPATCH-179 - Implemented plumbing for management delete of route objects
Project: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/commit/0a98b3a1
Tree: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/tree/0a98b3a1
Diff: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/diff/0a98b3a1
Branch: refs/heads/master
Commit: 0a98b3a17522149392708e30805ed2eeee578ea8
Parents: bd0f558
Author: Ganesh Murthy <gm...@redhat.com>
Authored: Fri Mar 11 12:06:01 2016 -0500
Committer: Ganesh Murthy <gm...@redhat.com>
Committed: Fri Mar 11 12:06:01 2016 -0500
----------------------------------------------------------------------
src/router_core/agent.c | 4 +-
src/router_core/agent_address.c | 31 ---------------
src/router_core/agent_address.h | 5 ---
src/router_core/agent_route.c | 75 +++++++++++++++++++++++++++++++++++-
4 files changed, 76 insertions(+), 39 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/0a98b3a1/src/router_core/agent.c
----------------------------------------------------------------------
diff --git a/src/router_core/agent.c b/src/router_core/agent.c
index 2150b43..1833880 100644
--- a/src/router_core/agent.c
+++ b/src/router_core/agent.c
@@ -360,10 +360,10 @@ static void qdr_manage_delete_CT(qdr_core_t *core, qdr_action_t *action, bool di
qdr_query_t *query = action->args.agent.query;
switch (query->entity_type) {
- case QD_ROUTER_ROUTE: break;
+ case QD_ROUTER_ROUTE: qdra_route_delete_CT(core, query, name, identity); break;
case QD_ROUTER_CONNECTION: break;
case QD_ROUTER_LINK: break;
- case QD_ROUTER_ADDRESS: qdra_address_delete_CT(core, name, identity, query); break;
+ case QD_ROUTER_ADDRESS: break;
case QD_ROUTER_EXCHANGE: break;
case QD_ROUTER_BINDING: break;
}
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/0a98b3a1/src/router_core/agent_address.c
----------------------------------------------------------------------
diff --git a/src/router_core/agent_address.c b/src/router_core/agent_address.c
index 1a9a44c..c8a1b5d 100644
--- a/src/router_core/agent_address.c
+++ b/src/router_core/agent_address.c
@@ -293,34 +293,3 @@ void qdra_address_get_next_CT(qdr_core_t *core, qdr_query_t *query)
//
qdr_agent_enqueue_response_CT(core, query);
}
-
-void qdra_address_delete_CT(qdr_core_t *core,
- qd_field_iterator_t *name,
- qd_field_iterator_t *identity,
- qdr_query_t *query)
-{
- bool success = true;
-
- if (identity) {//If there is identity, ignore the name
- //TOOD - do something here
- }
- else if (name) {
- //TOOD - do something here
- }
- else {
- query->status = QD_AMQP_BAD_REQUEST;
- success = false;
- }
-
-
- // TODO - Add more logic here.
- if (success) {
- // If the request was successful then the statusCode MUST be 204 (No Content).
- query->status = QD_AMQP_NO_CONTENT;
- }
-
- //
- // Enqueue the response.
- //
- qdr_agent_enqueue_response_CT(core, query);
-}
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/0a98b3a1/src/router_core/agent_address.h
----------------------------------------------------------------------
diff --git a/src/router_core/agent_address.h b/src/router_core/agent_address.h
index abe6d89..b47433e 100644
--- a/src/router_core/agent_address.h
+++ b/src/router_core/agent_address.h
@@ -30,11 +30,6 @@ void qdra_address_get_CT(qdr_core_t *core,
qdr_query_t *query,
const char *qdr_address_columns[]);
-void qdra_address_delete_CT(qdr_core_t *core,
- qd_field_iterator_t *name,
- qd_field_iterator_t *identity,
- qdr_query_t *query);
-
#define QDR_ADDRESS_COLUMN_COUNT 15
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/0a98b3a1/src/router_core/agent_route.c
----------------------------------------------------------------------
diff --git a/src/router_core/agent_route.c b/src/router_core/agent_route.c
index 2373624..383d1bc 100644
--- a/src/router_core/agent_route.c
+++ b/src/router_core/agent_route.c
@@ -17,6 +17,7 @@
* under the License.
*/
+#include <qpid/dispatch/ctools.h>
#include "agent_route.h"
#include "route_control.h"
#include <stdio.h>
@@ -236,6 +237,78 @@ static qd_address_treatment_t qdra_treatment(qd_parsed_field_t *field)
return QD_TREATMENT_ANYCAST_BALANCED;
}
+static qdr_route_config_t *qdr_route_config_find_by_identity(qdr_core_t *core, qd_field_iterator_t *identity) {
+ if (!identity)
+ return 0;
+
+ qdr_route_config_list_t route_config = core->route_config;
+
+ qdr_route_config_t *rc = DEQ_HEAD(route_config);
+
+ while (rc) {
+ // Convert the passed in identity to a char*
+ char id[100];
+ snprintf(id, 100, "%ld", rc->identity);
+ if (qd_field_iterator_equal(identity, (const unsigned char *)id))
+ break;
+ rc = DEQ_NEXT(rc);
+ }
+
+ return rc;
+
+}
+
+static qdr_route_config_t *qdr_route_config_find_by_name(qdr_core_t *core, qd_field_iterator_t *name) {
+ if (!name)
+ return 0;
+
+ qdr_route_config_list_t route_config = core->route_config;
+
+ qdr_route_config_t *rc = DEQ_HEAD(route_config);
+
+ while (rc) {// Sometimes the name can be null
+ if (rc->name && qd_field_iterator_equal(name, (const unsigned char *)rc->name))
+ break;
+ rc = DEQ_NEXT(rc);
+ }
+
+ return rc;
+
+}
+
+static void qdra_route_delete_route_set_status(qdr_core_t *core, qdr_query_t *query, qdr_route_config_t *route)
+{
+ if (route) {
+ qdr_route_delete_CT(core, route);
+ query->status = QD_AMQP_NO_CONTENT;
+ }
+ else {
+ query->status = QD_AMQP_NOT_FOUND;
+ }
+}
+
+void qdra_route_delete_CT(qdr_core_t *core,
+ qdr_query_t *query,
+ qd_field_iterator_t *name,
+ qd_field_iterator_t *identity)
+{
+ if (identity) {
+ qdr_route_config_t *route = qdr_route_config_find_by_identity(core, identity);
+ qdra_route_delete_route_set_status(core, query, route);
+ }
+ else if (name) {
+ qdr_route_config_t *route = qdr_route_config_find_by_name(core, name);
+ qdra_route_delete_route_set_status(core, query, route);
+ }
+ else { // No name and no identity
+ query->status = QD_AMQP_BAD_REQUEST;
+ }
+
+ //
+ // Enqueue the response.
+ //
+ qdr_agent_enqueue_response_CT(core, query);
+}
void qdra_route_create_CT(qdr_core_t *core, qd_field_iterator_t *name,
qdr_query_t *query, qd_parsed_field_t *in_body)
@@ -270,7 +343,7 @@ void qdra_route_create_CT(qdr_core_t *core, qd_field_iterator_t *name,
qdr_route_path_t path = QDR_ROUTE_PATH_DIRECT;
if (path_field) {
qd_field_iterator_t *path_iter = qd_parse_raw(path_field);
- if (qd_field_iterator_equal(path_iter, (unsigned char*) "direct"))
+ if (qd_field_iterator_equal(path_iter, (unsigned char*) "direct"))
path = QDR_ROUTE_PATH_DIRECT;
else if (qd_field_iterator_equal(path_iter, (unsigned char*) "source"))
path = QDR_ROUTE_PATH_SOURCE;
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org