123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- #include <boost/asio.hpp>
- #include <boost/log/attributes.hpp>
- #include <boost/log/core.hpp>
- #include <boost/log/utility/setup/common_attributes.hpp>
- #include <boost/log/trivial.hpp>
- #include <boost/log/utility/setup/file.hpp>
- #include <cstdlib>
- #include <fstream>
- #include <iomanip>
- #include <iostream>
- #include <map>
- #include <string>
- #include "config.h"
- #include "session.h"
- #include "logging.h"
- std::map<std::string, std::string> CONFIG;
- #include <boost/log/expressions.hpp>
- #include <boost/log/support/date_time.hpp>
- void init_logging(void) {
-
- boost::log::add_common_attributes();
-
- std::string log_filename = from_config("log_file", "proxy.log");
-
- std::string log_timeformat = from_config("log_timeformat", "%H:%M:%S.%f");
- bool log_autoflush = (bool)stoi(from_config("log_autoflush", "0"));
- int log_level = std::stoi(from_config("log_level", "2"));
- std::cout << "Logging to: " << log_filename << " level: " << log_level
- << " flush: " << log_autoflush << std::endl;
- boost::log::add_file_log(
- boost::log::keywords::file_name = log_filename,
-
- boost::log::keywords::open_mode = std::ios_base::out | std::ios_base::app,
- boost::log::keywords::auto_flush = log_autoflush,
-
- boost::log::keywords::format =
- (boost::log::expressions::stream
- << boost::log::expressions::format_date_time<
- boost::posix_time::ptime>("TimeStamp", log_timeformat)
- << " " << std::setw(8) << boost::log::trivial::severity << " "
- << boost::log::expressions::smessage));
- auto core = boost::log::core::get();
- core->set_filter(boost::log::trivial::severity >= log_level);
-
- }
- int main(int argc, char *argv[]) {
- if (argc != 2) {
- std::cerr << "Usage: twproxy <filename>" << std::endl;
- return EXIT_FAILURE;
- }
- CONFIG = yaml_parse(argv[1]);
- init_logging();
- bool config_ok = true;
-
- for (auto key : {"server", "host", "port"}) {
- auto const pos = CONFIG.find(key);
- if (pos == CONFIG.end()) {
- config_ok = false;
- std::cout << "Config file missing: " << key << std::endl;
- BUGZ_LOG(fatal) << "Config file missing: " << key;
- }
-
-
-
-
- BUGZ_LOG(info) << "Config: " << key << " : " << CONFIG[key];
- }
- if (!config_ok)
- return EXIT_FAILURE;
- int port = std::stoi(CONFIG["server"]);
-
- try {
- boost::asio::io_service io_service;
- boost::asio::ip::tcp::endpoint endpoint(boost::asio::ip::tcp::v4(),
- port);
-
- Server s(io_service, endpoint, CONFIG["host"], CONFIG["port"]);
-
- io_service.run();
- } catch (std::exception &e) {
- BUGZ_LOG(fatal) << "Exception: " << e.what();
- std::cerr << "Exception: " << e.what() << "\n";
- }
- return EXIT_SUCCESS;
- }
|