Esempio n. 1
0
extern int d2dbs_d2ladder_init(void)
{
	d2ladder_change_count=0;
	d2ladder_maxtype=0;
	d2ladder_ladder_file=(char*)xmalloc(std::strlen(d2dbs_prefs_get_ladder_dir())+1+
			  std::strlen(LADDER_FILE_PREFIX)+1+std::strlen(CLIENTTAG_DIABLO2DV)+1+10);
	d2ladder_backup_file=(char*)xmalloc(std::strlen(d2dbs_prefs_get_ladder_dir())+1+
			  std::strlen(LADDER_BACKUP_PREFIX)+1+std::strlen(CLIENTTAG_DIABLO2DV)+1+10);
	std::sprintf(d2ladder_ladder_file,"%s/%s.%s",d2dbs_prefs_get_ladder_dir(),\
		LADDER_FILE_PREFIX,CLIENTTAG_DIABLO2DV);

	std::sprintf(d2ladder_backup_file,"%s/%s.%s",d2dbs_prefs_get_ladder_dir(),\
		LADDER_BACKUP_PREFIX,CLIENTTAG_DIABLO2DV);

	if (d2ladderlist_init()<0) {
		return -1;
	}
	if(d2ladder_check()<0) {
		eventlog(eventlog_level_error,__FUNCTION__,"ladder file checking error");
		return -1;
	}
	if (d2ladder_readladder()<0) {
		return -1;
	}
	if (d2ladder_need_rebuild) d2ladder_rebuild();
	d2ladder_saveladder();
	return 0;
}
Esempio n. 2
0
extern int d2dbs_d2ladder_destroy(void)
{
    	unsigned int i;
    	t_d2ladder * d2ladder;

	d2ladder_saveladder();
    	for (i=0;i<d2ladder_maxtype;i++) {
		d2ladder=d2ladderlist_find_type(i);
		if(d2ladder)
		{
			if(d2ladder->info)
				xfree(d2ladder->info);
			d2ladder->info=NULL;
			d2ladder->len=0;
		}
    	}
	d2ladderlist_destroy();
	if (d2ladder_ladder_file) {
		xfree(d2ladder_ladder_file);
		d2ladder_ladder_file=NULL;
	}
	if (d2ladder_backup_file) {
		xfree(d2ladder_backup_file);
		d2ladder_backup_file=NULL;
	}
	return 0;
}
Esempio n. 3
0
static int dbs_handle_timed_events(void)
{
	static	time_t		prev_ladder_save_time=0;
	static	time_t		prev_keepalive_save_time=0;
	static  time_t		prev_timeout_checktime=0;
	time_t			now;

	now=time(NULL);
	if (now-prev_ladder_save_time>(signed)prefs_get_laddersave_interval()) {
		d2ladder_saveladder();
		prev_ladder_save_time=now;
	}
	if (now-prev_keepalive_save_time>(signed)prefs_get_keepalive_interval()) {
		dbs_keepalive();
		prev_keepalive_save_time=now;
	}
	if (now-prev_timeout_checktime>(signed)d2dbs_prefs_get_timeout_checkinterval()) {
		dbs_check_timeout();
		prev_timeout_checktime=now;
	}
	return 0;
}
Esempio n. 4
0
		extern int d2dbs_handle_signal(void)
		{
			std::time_t		now;
			char const * levels;
			char *       temp;
			char const * tok;


			if (signal_data.cancel_quit) {
				signal_data.cancel_quit = 0;
				if (!signal_data.exit_time) {
					eventlog(eventlog_level_info, __FUNCTION__, "there is no previous shutdown to be canceled");
				}
				else {
					signal_data.exit_time = 0;
					eventlog(eventlog_level_info, __FUNCTION__, "shutdown was canceled due to std::signal");
				}
			}
			if (signal_data.do_quit) {
				signal_data.do_quit = 0;
				now = std::time(NULL);
				if (!signal_data.exit_time) {
					signal_data.exit_time = now + d2dbs_prefs_get_shutdown_delay();
				}
				else {
					signal_data.exit_time -= d2dbs_prefs_get_shutdown_decr();
				}
				eventlog(eventlog_level_info, __FUNCTION__, "the server is going to shutdown in %lu minutes", (signal_data.exit_time - now) / 60);
			}
			if (signal_data.exit_time) {
				now = std::time(NULL);
				if (now >= (signed)signal_data.exit_time) {
					signal_data.exit_time = 0;
					eventlog(eventlog_level_info, __FUNCTION__, "shutdown server due to std::signal");
					return -1;
				}
			}
			if (signal_data.reload_config) {
				signal_data.reload_config = 0;
				eventlog(eventlog_level_info, __FUNCTION__, "reloading configuartion file due to std::signal");
				if (d2dbs_prefs_reload(cmdline_get_preffile()) < 0) {
					eventlog(eventlog_level_error, __FUNCTION__, "error reload configuration file,exitting");
					return -1;
				}
				eventlog_clear_level();
				if ((levels = d2dbs_prefs_get_loglevels()))
				{
					temp = xstrdup(levels);
					tok = std::strtok(temp, ","); /* std::strtok modifies the string it is passed */

					while (tok)
					{
						if (eventlog_add_level(tok) < 0)
							eventlog(eventlog_level_error, __FUNCTION__, "could not add std::log level \"%s\"", tok);
						tok = std::strtok(NULL, ",");
					}
					xfree(temp);
				}
#ifdef DO_DAEMONIZE
				if (!cmdline_get_foreground())
#endif
					eventlog_open(d2dbs_prefs_get_logfile());
			}
			if (signal_data.save_ladder) {
				signal_data.save_ladder = 0;
				eventlog(eventlog_level_info, __FUNCTION__, "save ladder data due to std::signal");
				d2ladder_saveladder();
			}
			return 0;
		}
Esempio n. 5
0
extern int handle_signal(void)
{
	time_t		now;
    char const * levels;
    char *       temp;
    char const * tok;


	if (signal_data.cancel_quit) {
		signal_data.cancel_quit=0;
		if (!signal_data.exit_time) {
			log_info("there is no previous shutdown to be canceled");
		} else {
			signal_data.exit_time=0;
			log_info("shutdown was canceled due to signal");
		}
	}
	if (signal_data.do_quit) {
		signal_data.do_quit=0;
		now=time(NULL);
		if (!signal_data.exit_time) {
			signal_data.exit_time=now+prefs_get_shutdown_delay();
		} else {
			signal_data.exit_time-=prefs_get_shutdown_decr();
		}
		if (now >= signal_data.exit_time) {
			log_info("shutdown server due to signal");
			return -1;
		}
		log_info("the server is going to shutdown in %lu minutes",(signal_data.exit_time-now)/60);
	}
	if (signal_data.reload_config) {
		signal_data.reload_config=0;
		log_info("reloading configuartion file due to signal");
		if (prefs_reload(cmdline_get_prefs_file())<0) {
			log_error("error reload configuration file,exitting");
			return -1;
		}
        eventlog_clear_level();
        if ((levels = prefs_get_loglevels()))
        {
          if (!(temp = strdup(levels)))
          {
           eventlog(eventlog_level_fatal,"handle_signal","could not allocate memory for temp (exiting)");
         return -1;
          }

          tok = strtok(temp,","); /* strtok modifies the string it is passed */

          while (tok)
          {
          if (eventlog_add_level(tok)<0)
              eventlog(eventlog_level_error,"handle_signal","could not add log level \"%s\"",tok);
          tok = strtok(NULL,",");
          }
          free(temp);
        }

		if (!cmdline_get_logstderr()) eventlog_open(prefs_get_logfile());
	}
	if (signal_data.save_ladder) {
		signal_data.save_ladder=0;
		log_info("save ladder data due to signal");
		d2ladder_saveladder();
	}
	return 0;
}