From 60526f15b818650bb80547f4d5755e6401be7568 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20M=C3=A4kel=C3=A4?= Date: Tue, 2 May 2017 10:33:22 +0300 Subject: [PATCH] MXS-1220: Add GET support for service listeners The service listeners can now be queried as a separate resource. This is the first step towards the creation and destruction of listeners. --- server/core/resource.cc | 16 ++++++++++++++++ server/core/service.cc | 9 +++++---- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/server/core/resource.cc b/server/core/resource.cc index b830b24a8..8af160e1e 100644 --- a/server/core/resource.cc +++ b/server/core/resource.cc @@ -279,6 +279,20 @@ HttpResponse cb_get_service(const HttpRequest& request) return HttpResponse(MHD_HTTP_INTERNAL_SERVER_ERROR); } +HttpResponse cb_get_service_listeners(const HttpRequest& request) +{ + SERVICE* service = service_find(request.uri_part(1).c_str()); + json_t* json = service_to_json(service, request.host()); + + // The 'listeners' key is always defined + json_t* listeners = json_incref(json_object_get(json, CN_LISTENERS)); + ss_dassert(listeners); + + json_decref(json); + + return HttpResponse(MHD_HTTP_OK, listeners); +} + HttpResponse cb_all_filters(const HttpRequest& request) { return HttpResponse(MHD_HTTP_OK, filter_list_to_json(request.host())); @@ -398,6 +412,8 @@ public: m_get.push_back(SResource(new Resource(cb_all_services, 1, "services"))); m_get.push_back(SResource(new Resource(cb_get_service, 2, "services", ":service"))); + m_get.push_back(SResource(new Resource(cb_get_service_listeners, 3, + "services", ":service", "listeners"))); m_get.push_back(SResource(new Resource(cb_all_filters, 1, "filters"))); m_get.push_back(SResource(new Resource(cb_get_filter, 2, "filters", ":filter"))); diff --git a/server/core/service.cc b/server/core/service.cc index 2d137e81d..a523fc379 100644 --- a/server/core/service.cc +++ b/server/core/service.cc @@ -2473,18 +2473,19 @@ json_t* service_to_json(const SERVICE* service, const char* host) /** Add service parameters */ json_object_set_new(rval, CN_PARAMETERS, service_parameters_to_json(service)); + /** Add listeners */ + json_t* arr = json_array(); + if (service->ports) { - json_t* arr = json_array(); - for (SERV_LISTENER* p = service->ports; p; p = p->next) { json_array_append_new(arr, listener_to_json(p)); } - - json_object_set_new(rval, CN_LISTENERS, arr); } + json_object_set_new(rval, CN_LISTENERS, arr); + /** Store relationships to other objects */ json_t* rel = json_object();