Esempio n. 1
0
// main
int main(int n, char* args[])
{
	// parsing arguments for file paths       
	int option;
	while ((option = getopt(n, args, "t:w:f:a:")) != -1) {
		switch (option) {
		case 't':
			FILE_FOR_WAPITI_TREE_PARSE = optarg;
			break;
		case 'w':
			FILE_FOR_WAPITI_PARSE = optarg;
			break;
		case 'f':
			FILE_FOR_W3AF_PARSE = optarg;
			break;
		case 'a':
			FILE_FOR_ARACHNI_PARSE = optarg;
			break;
		case '?':
			if ((optopt == 't') || (optopt == 'w') || (optopt == 'f') || (optopt == 'a'))
				fprintf(stderr, "Option -%c requires an argument.\n", optopt);
			else if (isprint(optopt))
				fprintf(stderr, "Unknown option `-%c'.\n", optopt);
			else
				fprintf(stderr, "Unknown option character `\\x%x'.\n", optopt);
			break;
		default:
			break;
		}
	}

	start_database();
	parse_wapiti();
	parse_w3af();
	parse_arachni();
	finalize_database();

	create_json();
	return 0;
}
Esempio n. 2
0
shutdown_type application::impl::run(int argc, const char ** argv)
{
    std::list<std::string> targets;
    if (_config.get_property("log_info", LOG_INFO_DEFAULT))
        targets.emplace_back("info");
    if (_config.get_property("log_debug", LOG_DEBUG_DEFAULT))
        targets.emplace_back("debug");
    if (_config.get_property("log_error", LOG_ERROR_DEFAULT))
        targets.emplace_back("error");
    logger::instance().set_targets(std::move(targets));

    std::ostringstream version;
    version << LOGIN_VERSION_MAJOR << "." << LOGIN_VERSION_MINOR
        << "." << LOGIN_VERSION_RELEASE;
    _owner->set_title("desperion login server v" + version.str());

    std::cout << "\n";
    utils::color<utils::TBLUE>(std::cout)
        << ",------,  ,-----. ,-----, ,------. ,-----. ,------.  ,------. ,------, ,,    ,,\n"
        << "| ,--,  ` | .---' |  ,--` | ,--, | | .---' | ,--, |  `--||--' | ,--, | ||\\   ||\n"
        << "| |  |  | | |--.  |  `--, | |  | | | |--.  | |  | |     ||    | |  | | || \\  ||\n"
        << "| |  |  | | |--'  `---, | | `--` | | |--'  | `--` ,     ||    | |  | | ||  \\ ||\n"
        << "| '--'  , | '---, ,---| | | ,----` | '---, | ,-\\  \\  .--||--, | '--' | ||   \\||\n"
        << "`------`  `-----' `-----` `-`      `-----' `-`  '--' `------` `------` ``    `'\n";
    utils::color<utils::TGREEN>(std::cout)
        << "Dofus v" << protocol::DOFUS_VERSION_MAJOR << "." << protocol::DOFUS_VERSION_MINOR << "."
        << protocol::DOFUS_VERSION_RELEASE << "." << protocol::DOFUS_VERSION_REVISION << "."
        << protocol::DOFUS_VERSION_PATCH << "/" << protocol::DOFUS_VERSION_BUILD_TYPE << ", protocol "
        << protocol::PROTOCOL_BUILD << "/" << protocol::PROTOCOL_REQUIRED_BUILD << "\n"

        << "login server v" << version.str() << ", build date: " << __DATE__
        << " " << __TIME__ << "\n" << utils::cendl;

    try {
        start_database();
    } catch (const sql_error & e) {
        utils::color<utils::TRED>(std::cout) << "an sql error occured, please see log files"
            << utils::cendl;
        log_to("error") << "sql error: " << e.what() << "\n";
        return shutdown_type::NORMAL;
    }

    _world.init();
    session::load_patch();

    socket_listener listener;
    auto port = _config.get_property("server_port", SERVER_PORT_DEFAULT);
    listener.listen<session>(port);

    port = _config.get_property("system_port", SERVER_PORT_DEFAULT);
    listener.listen<game_session>(port);

    std::cout << "\nuptime " << _owner->uptime() << " microseconds" << std::endl;

    listener.spawn_threads(_config.get_property("pool_threads", POOL_THREADS_DEFAULT));
    std::thread t { std::bind(&run_service, std::ref(_owner->_service)) };
    std::mutex m;
    std::unique_lock<std::mutex> lock { m };
    while (_owner->get_shutdown() == shutdown_type::NOT_REQUESTED)
        _owner->_condition.wait(lock);
    listener.stop();
    t.join();

    return _owner->get_shutdown();
}