diff options
Diffstat (limited to 'hscript/script.cc')
-rw-r--r-- | hscript/script.cc | 43 |
1 files changed, 39 insertions, 4 deletions
diff --git a/hscript/script.cc b/hscript/script.cc index 8afa6aa..444b6c0 100644 --- a/hscript/script.cc +++ b/hscript/script.cc @@ -81,6 +81,7 @@ struct Script::ScriptPrivate { /*! Network addressing configuration */ std::vector< std::unique_ptr<Horizon::Keys::NetAddress> > addresses; + std::vector< std::unique_ptr<Horizon::Keys::NetSSID> > ssids; /*! APK repositories */ std::vector< std::unique_ptr<Horizon::Keys::Repository> > repos; @@ -161,6 +162,12 @@ struct Script::ScriptPrivate { ); this->addresses.push_back(std::move(addr)); return true; + } else if(key_name == "netssid") { + std::unique_ptr<Keys::NetSSID> ssid( + dynamic_cast<Keys::NetSSID *>(key_obj) + ); + this->ssids.push_back(std::move(ssid)); + return true; } else if(key_name == "repository") { std::unique_ptr<Keys::Repository> repo( dynamic_cast<Keys::Repository *>(key_obj) @@ -383,6 +390,13 @@ bool Script::validate() const { } } + /* Runner.Validate.network.netssid */ + for(auto &ssid : this->internal->ssids) { + if(!ssid->validate(this->opts)) { + failures++; + } + } + if(this->internal->repos.size() == 0) { Keys::Repository *sys_key = dynamic_cast<Keys::Repository *>( Horizon::Keys::Repository::parseFromData( @@ -470,16 +484,37 @@ bool Script::execute() const { EXECUTE_FAILURE("pre-metadata"); return false; } - output_step_end("pre-metadata"); - /**************** PKGDB ****************/ - output_step_start("pkgdb"); for(auto &repo : this->internal->repos) { if(!repo->execute(opts)) { - EXECUTE_FAILURE("pkgdb"); + EXECUTE_FAILURE("pre-metadata"); return false; } } + output_step_end("pre-metadata"); + + /**************** NETWORK ****************/ + output_step_start("net"); + for(auto &ssid : this->internal->ssids) { + if(!ssid->execute(opts)) { + EXECUTE_FAILURE("net"); + /* "Soft" error. Not fatal. */ + } + } + for(auto &addr : this->internal->addresses) { + if(!addr->execute(opts)) { + EXECUTE_FAILURE("net"); + /* "Soft" error. Not fatal. */ + } + } + if(!this->internal->network->execute(opts)) { + EXECUTE_FAILURE("net"); + return false; + } + output_step_end("net"); + + /**************** PKGDB ****************/ + output_step_start("pkgdb"); /* Runner.Execute.pkginstall.APKDB */ output_info("internal", "initialising APK"); |