From 6679ad0de1fddc9f78087aaa67432f3d48ce08b4 Mon Sep 17 00:00:00 2001 From: Karen Arutyunov Date: Thu, 27 Apr 2023 20:34:44 +0300 Subject: Add support for *-upload-url task response manifest values --- libbbot/manifest.cxx | 28 ++++++++++++++++++++++++++-- libbbot/manifest.hxx | 16 +++++++++++++++- 2 files changed, 41 insertions(+), 3 deletions(-) (limited to 'libbbot') diff --git a/libbbot/manifest.cxx b/libbbot/manifest.cxx index 7412e74..be642a0 100644 --- a/libbbot/manifest.cxx +++ b/libbbot/manifest.cxx @@ -12,6 +12,7 @@ #include // size_t #include // move() #include // uint64_t +#include // find_if() #include // invalid_argument #include @@ -955,6 +956,23 @@ namespace bbot result_url = move (v); } + else if (n.size () > 11 && + n.compare (n.size () - 11, 11, "-upload-url") == 0) + { + n.resize (n.size () - 11); + + if (find_if (upload_urls.begin (), upload_urls.end (), + [&n] (const upload_url& u) {return u.type == n;}) != + upload_urls.end ()) + { + bad_name ("task response upload url redefinition"); + } + + if (v.empty ()) + bad_value ("empty task response upload url"); + + upload_urls.emplace_back (move (v), move (n)); + } else if (n == "agent-checksum") { if (agent_checksum) @@ -993,12 +1011,15 @@ namespace bbot if (result_url) bad_value ("unexpected task response result url"); + if (!upload_urls.empty ()) + bad_value ("unexpected task response upload url"); + if (agent_checksum) bad_value ("unexpected task response agent checksum"); } - // If session is not empty then the task manifest must follow, otherwise it - // shouldn't. + // If session is not empty then the task manifest must follow, otherwise + // it shouldn't. // nv = p.next (); @@ -1034,6 +1055,9 @@ namespace bbot if (result_url) s.next ("result-url", *result_url); + for (const upload_url& u: upload_urls) + s.next (u.type + "-upload-url", u.url); + if (agent_checksum) s.next ("agent-checksum", *agent_checksum); diff --git a/libbbot/manifest.hxx b/libbbot/manifest.hxx index d51d95b..5807aed 100644 --- a/libbbot/manifest.hxx +++ b/libbbot/manifest.hxx @@ -260,6 +260,16 @@ namespace bbot validate_regex (const std::string&); }; + class upload_url + { + public: + std::string url; + std::string type; + + upload_url (std::string u, std::string t) + : url (std::move (u)), type (std::move (t)) {} + }; + class LIBBBOT_EXPORT task_response_manifest { public: @@ -267,10 +277,12 @@ namespace bbot // std::string session; - // Challenge, result url and task are absent if session is empty. + // Challenge, result url, and task are absent and upload urls list is + // empty if session is empty. // butl::optional challenge; butl::optional result_url; + std::vector upload_urls; // -upload-url: butl::optional agent_checksum; @@ -279,11 +291,13 @@ namespace bbot task_response_manifest (std::string s, butl::optional c, butl::optional u, + std::vector uus, butl::optional ac, butl::optional t) : session (std::move (s)), challenge (std::move (c)), result_url (std::move (u)), + upload_urls (std::move (uus)), agent_checksum (std::move (ac)), task (std::move (t)) {} -- cgit v1.1