diff options
Diffstat (limited to 'bbot')
-rw-r--r-- | bbot/manifest | 2 | ||||
-rw-r--r-- | bbot/manifest.cxx | 30 |
2 files changed, 27 insertions, 5 deletions
diff --git a/bbot/manifest b/bbot/manifest index 218282f..44e2662 100644 --- a/bbot/manifest +++ b/bbot/manifest @@ -131,7 +131,7 @@ namespace bbot // std::string session; - // Challenge and task are absent if session is empty. + // Challenge, result url and task are absent if session is empty. // butl::optional<std::string> challenge; butl::optional<std::string> result_url; diff --git a/bbot/manifest.cxx b/bbot/manifest.cxx index 35e472c..b183596 100644 --- a/bbot/manifest.cxx +++ b/bbot/manifest.cxx @@ -538,6 +538,16 @@ namespace bbot challenge = move (v); } + else if (n == "result-url") + { + if (result_url) + bad_name ("task response result url redefinition"); + + if (v.empty ()) + bad_value ("empty task response result url"); + + result_url = move (v); + } else if (!iu) bad_name ("unknown name '" + n + "' in task response manifest"); } @@ -550,16 +560,25 @@ namespace bbot session = move (*sess); - // If session is not empty then the challenge must present, otherwise it - // shouldn't. + // If session is not empty then the challenge and the result url must + // present, otherwise they shouldn't. // if (!session.empty ()) { if (!challenge) bad_value ("no task response challenge specified"); + + if (!result_url) + bad_value ("no task response result url specified"); + } + else + { + if (challenge) + bad_value ("unexpected task response challenge"); + + if (result_url) + bad_value ("unexpected task response result url"); } - else if (challenge) - bad_value ("unexpected task response challenge"); // If session is not empty then the task manifest must follow, otherwise it // shouldn't. @@ -595,6 +614,9 @@ namespace bbot if (challenge) s.next ("challenge", *challenge); + if (result_url) + s.next ("result-url", *result_url); + s.next ("", ""); // End of manifest. if (task) |