aboutsummaryrefslogtreecommitdiff
path: root/bbot
diff options
context:
space:
mode:
Diffstat (limited to 'bbot')
-rw-r--r--bbot/manifest2
-rw-r--r--bbot/manifest.cxx30
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)