Aktualizr
C++ SOTA Client
All Classes Namespaces Files Functions Variables Enumerations Enumerator Pages
main.cc
1 #include <unistd.h>
2 #include <iostream>
3 
4 #include <boost/filesystem.hpp>
5 #include <boost/program_options.hpp>
6 
7 #include "config/config.h"
8 #include "get.h"
9 #include "utilities/aktualizr_version.h"
10 
11 namespace bpo = boost::program_options;
12 
13 bpo::variables_map parse_options(int argc, char **argv) {
14  bpo::options_description description(
15  "A tool similar to wget that will do an HTTP get on the given URL using the device's configured credentials.");
16  // clang-format off
17  // Try to keep these options in the same order as Config::updateFromCommandLine().
18  // The first three are commandline only.
19  description.add_options()
20  ("help,h", "print usage")
21  ("version,v", "Current aktualizr version")
22  ("config,c", bpo::value<std::vector<boost::filesystem::path> >()->composing(), "configuration file or directory")
23  ("loglevel", bpo::value<int>(), "set log level 0-5 (trace, debug, info, warning, error, fatal)")
24  ("url,u", bpo::value<std::string>(), "url to get");
25  // clang-format on
26 
27  bpo::variables_map vm;
28  std::vector<std::string> unregistered_options;
29  try {
30  bpo::basic_parsed_options<char> parsed_options = bpo::command_line_parser(argc, argv).options(description).run();
31  bpo::store(parsed_options, vm);
32  bpo::notify(vm);
33  if (vm.count("help") != 0) {
34  std::cout << description << '\n';
35  exit(EXIT_SUCCESS);
36  }
37 
38  } catch (const bpo::required_option &ex) {
39  // print the error and append the default commandline option description
40  std::cout << ex.what() << std::endl << description;
41  exit(EXIT_FAILURE);
42  } catch (const bpo::error &ex) {
43  std::cout << ex.what() << std::endl;
44  std::cout << description;
45  exit(EXIT_FAILURE);
46  }
47 
48  return vm;
49 }
50 
51 int main(int argc, char *argv[]) {
52  logger_init(isatty(1) == 1);
53  logger_set_threshold(boost::log::trivial::info);
54 
55  bpo::variables_map commandline_map = parse_options(argc, argv);
56 
57  int r = EXIT_FAILURE;
58  try {
59  Config config(commandline_map);
60  std::string body = aktualizrGet(config, commandline_map["url"].as<std::string>());
61  std::cout << body;
62 
63  r = EXIT_SUCCESS;
64  } catch (const std::exception &ex) {
65  LOG_ERROR << ex.what();
66  }
67  return r;
68 }
Configuration object for an aktualizr instance running on a Primary ECU.
Definition: config.h:74