From 88e6558da34a69cf10c0476435da0ac83f93efa0 Mon Sep 17 00:00:00 2001 From: Patrick Niklaus Date: Thu, 14 Jan 2016 18:27:36 +0100 Subject: [PATCH] Fix handling unexpected errors. --- plugins/viaroute.hpp | 43 +++++++++++++++++++++++-------------------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/plugins/viaroute.hpp b/plugins/viaroute.hpp index f9a6737da..21e871444 100644 --- a/plugins/viaroute.hpp +++ b/plugins/viaroute.hpp @@ -164,28 +164,9 @@ template class ViaRoutePlugin final : public BasePlugin route_parameters.uturns, raw_route); } - bool no_route = INVALID_EDGE_WEIGHT == raw_route.shortest_path_length; - - std::unique_ptr> descriptor; - switch (descriptor_table.get_id(route_parameters.output_format)) - { - case 1: - descriptor = osrm::make_unique>(facade); - break; - // case 2: - // descriptor = osrm::make_unique>(); - // break; - default: - descriptor = osrm::make_unique>(facade); - break; - } - - descriptor->SetConfig(route_parameters); - descriptor->Run(raw_route, json_result); - // we can only know this after the fact, different SCC ids still // allow for connection in one direction. - if (no_route) + if (raw_route.shortest_path_length == INVALID_EDGE_WEIGHT) { auto first_component_id = snapped_phantoms.front().component.id; auto not_in_same_component = @@ -194,14 +175,36 @@ template class ViaRoutePlugin final : public BasePlugin { return node.component.id != first_component_id; }); + if (not_in_same_component) { json_result.values["status_message"] = "Impossible route between points"; return Status::EmptyResult; } + else + { + json_result.values["status_message"] = "No route found between points"; + return Status::Error; + } } else { + std::unique_ptr> descriptor; + switch (descriptor_table.get_id(route_parameters.output_format)) + { + case 1: + descriptor = osrm::make_unique>(facade); + break; + // case 2: + // descriptor = osrm::make_unique>(); + // break; + default: + descriptor = osrm::make_unique>(facade); + break; + } + + descriptor->SetConfig(route_parameters); + descriptor->Run(raw_route, json_result); json_result.values["status_message"] = "Found route between points"; }