#include #include #include #include //#include //#include //#include #include #include #include #include #include #include #include //#include //#include //#include #include //#include //#include namespace po=boost::program_options; class mix { public: int id; std::string name; gpgme_data_t keydata; gpgme_ctx_t context; gpgme_error_t error; gpgme_key_t key; void init() { std::cout << "Mix starting..." << std::endl; if(std::ifstream("mix.conf")) { std::cout << "Config file existing" << std::endl; this->read_settings(); std::cout << "name = " << name << std::endl; std::cout << "id = " << id << std::endl; // read_keys(); start_peer(); } else { std::cout << "Config file does not exist. Exiting." << std::endl; std::exit(1); } // std::cout << "Looking for keys" << std::endl; // gpgme_check_version(NULL); // gpgme_new(&context); // create_keys(); } void read_settings() { po::options_description desc("Options"); desc.add_options() ("name", po::value(&name), "name"); desc.add_options() ("id", po::value(&id), "id"); po::variables_map vm; std::ifstream settings_file("mix.conf"); vm = po::variables_map(); po::store(po::parse_config_file(settings_file , desc), vm); po::notify(vm); } void read_keys() { gpgme_data_new_from_file(&keydata, "keys.gpg", 1); gpgme_op_import(context, keydata); gpgme_op_keylist_start (context, "mix", 0); while(!error) { error = gpgme_op_keylist_next (context, &key); if (error){break;} std::cout << key->subkeys->keyid << std::endl; if (key->uids && key->uids->name) { std::cout << key->uids->name << std::endl; } if (key->uids && key->uids->email) { std::cout << key->uids->email << std::endl; } } } void create_keys() { error=gpgme_op_createkey(context,"mix@pep.foundation",NULL,0,0,NULL,0); if(error) { std::cout << "Error generating keys" << error << std::endl; } else { std::cout << "Keys generated successfully" << std::endl; } } void start_peer() { lt::settings_pack p; p.set_int(lt::settings_pack::alert_mask,lt::alert_category::status | lt::alert_category::error); lt::session ses(p); std::cout << "libtorrent version: " << lt::version() << std::endl; std::cout << "announce ip: " << p.announce_ip << std::endl; std::cout << "user agent: " << p.user_agent << std::endl; std::cout << "listen interfaces: " << p.listen_interfaces << std::endl; std::cout << "peer fingerprint: " << p.peer_fingerprint << std::endl; p.set_str(lt::settings_pack::dht_bootstrap_nodes, "dht.bootstrap.de:12345"); std::cout << "dht bootstrap nodes: " << p.get_str(lt::settings_pack::dht_bootstrap_nodes) << std::endl; // lt::dht_default_storage stor; lt::dht mydht; lt::entry e; std::cout << e << std::endl; // lt::add_torrent_params atp = lt::parse_magnet_uri("magnet:?xt=urn:btih:D540FC48EB12F2833163EED6421D449DD8F1CE1F&dn=Ubuntu%20desktop%2019.04%20(64bit)"); // atp.save_path="."; // lt::torrent_handle h = ses.add_torrent(std::move(atp)); // for (;;) // { // std::vector alerts; // ses.pop_alerts(&alerts); // for (lt::alert const* a : alerts) // { // std::cout << a->message() << std::endl; // if (lt::alert_cast(a)) // { // std::cout << "Torrent finished" << std::endl; // } // if (lt::alert_cast(a)) // { // std::cout << "Torrent error" << std::endl; // } // } // } // lt::dht::dht_state dst; // dst=ses.dht_state(); // std::cout << ses.dht_state << std::endl; // std::vector alerts; ses.pop_alerts(&alerts); // lt::alert a; } }; int main() { mix mix1; mix1.init(); }