#ifndef WORKER_H #define WORKER_H #include #include #include #include #include #include #include #include "site_comm.h" #include "ocelot.h" enum tracker_status { OPEN, PAUSED, CLOSING }; // tracker status class worker { private: config * conf; mysql * db; site_comm * s_comm; torrent_list &torrents_list; user_list &users_list; std::vector &whitelist; std::unordered_map del_reasons; tracker_status status; bool reaper_active; time_t cur_time; unsigned int announce_interval; unsigned int del_reason_lifetime; unsigned int peers_timeout; unsigned int numwant_limit; bool keepalive_enabled; std::string site_password; std::string report_password; std::mutex del_reasons_lock; void load_config(config * conf); void do_start_reaper(); void reap_peers(); void reap_del_reasons(); std::string get_del_reason(int code); peer_list::iterator add_peer(peer_list &peer_list, const std::string &peer_id); inline bool peer_is_visible(user_ptr &u, peer *p); public: worker(config * conf_obj, torrent_list &torrents, user_list &users, std::vector &_whitelist, mysql * db_obj, site_comm * sc); void reload_config(config * conf); std::string work(const std::string &input, std::string &ip, client_opts_t &client_opts); std::string announce(const std::string &input, torrent &tor, user_ptr &u, params_type ¶ms, params_type &headers, std::string &ip, client_opts_t &client_opts); std::string scrape(const std::list &infohashes, params_type &headers, client_opts_t &client_opts); std::string update(params_type ¶ms, client_opts_t &client_opts); void reload_lists(); bool shutdown(); tracker_status get_status() { return status; } void start_reaper(); }; #endif