Esempio n. 1
0
int wtplist_init()
{

	connlist  = connlist_create(0);
	if (!connlist)
		return 0;

	return 1;
}
Esempio n. 2
0
static int init(void)
{
	connlist_create();
	gamelist_create();
	sqlist_create();
	d2gslist_create();
	gqlist_create();
	d2ladder_init();
	return 0;
}
Esempio n. 3
0
int pre_server_startup(void)
{
    pvpgn_greeting();
    if (oom_setup() < 0) {
	eventlog(eventlog_level_error, __FUNCTION__, "OOM init failed");
	return STATUS_OOM_FAILURE;
    }
    if (storage_init(prefs_get_storage_path()) < 0) {
	eventlog(eventlog_level_error, "pre_server_startup", "storage init failed");
	return STATUS_STORAGE_FAILURE;
    }
    if (psock_init() < 0) {
	eventlog(eventlog_level_error, __FUNCTION__, "could not initialize socket functions");
	return STATUS_PSOCK_FAILURE;
    }
    if (support_check_files(prefs_get_supportfile()) < 0) {
        eventlog(eventlog_level_error, "pre_server_startup","some needed files are missing");
	eventlog(eventlog_level_error, "pre_server_startup","please make sure you installed the supportfiles in %s",prefs_get_filedir());
	return STATUS_SUPPORT_FAILURE;
    }
    if (anongame_maplists_create() < 0) {
	eventlog(eventlog_level_error, "pre_server_startup", "could not load maps");
	return STATUS_MAPLISTS_FAILURE;
    }
    if (anongame_matchlists_create() < 0) {
	eventlog(eventlog_level_error, "pre_server_startup", "could not create matchlists");
	return STATUS_MATCHLISTS_FAILURE;
    }
    if (fdwatch_init(prefs_get_max_connections())) {
	eventlog(eventlog_level_error, __FUNCTION__, "error initilizing fdwatch");
	return STATUS_FDWATCH_FAILURE;
    }
    connlist_create();
    gamelist_create();
    timerlist_create();
    server_set_hostname();
    channellist_create();
    if (helpfile_init(prefs_get_helpfile())<0)
	eventlog(eventlog_level_error,__FUNCTION__,"could not load helpfile");
    ipbanlist_create();
    if (ipbanlist_load(prefs_get_ipbanfile())<0)
	eventlog(eventlog_level_error,__FUNCTION__,"could not load IP ban list");
    if (adbannerlist_create(prefs_get_adfile())<0)
	eventlog(eventlog_level_error,__FUNCTION__,"could not load adbanner list");
    if (autoupdate_load(prefs_get_mpqfile())<0)
	eventlog(eventlog_level_error,__FUNCTION__,"could not load autoupdate list");
    if (versioncheck_load(prefs_get_versioncheck_file())<0)
	eventlog(eventlog_level_error,__FUNCTION__,"could not load versioncheck list");
   if (news_load(prefs_get_newsfile())<0)
	eventlog(eventlog_level_error,__FUNCTION__,"could not load news list");
    watchlist_create();
    output_init();
    attrlayer_init();
    accountlist_create();
    if (ladder_createxptable(prefs_get_xplevel_file(),prefs_get_xpcalc_file())<0) {
        eventlog(eventlog_level_error, "pre_server_startup", "could not load WAR3 xp calc tables");
        return STATUS_WAR3XPTABLES_FAILURE;
    }
    ladders_init();
    ladders_load_accounts_to_ladderlists();
    ladder_update_all_accounts();
    if (characterlist_create("")<0)
	eventlog(eventlog_level_error,__FUNCTION__,"could not load character list");
    if (prefs_get_track()) /* setup the tracking mechanism */
        tracker_set_servers(prefs_get_trackserv_addrs());
    if (command_groups_load(prefs_get_command_groups_file())<0)
	eventlog(eventlog_level_error,__FUNCTION__,"could not load command_groups list");
    aliasfile_load(prefs_get_aliasfile());
    if (trans_load(prefs_get_transfile(),TRANS_BNETD)<0)
	eventlog(eventlog_level_error,__FUNCTION__,"could not load trans list");
    tournament_init(prefs_get_tournament_file());
    anongame_infos_load(prefs_get_anongame_infos_file());
    clanlist_load();
    teamlist_load();
    if (realmlist_create(prefs_get_realmfile())<0)
	eventlog(eventlog_level_error,__FUNCTION__,"could not load realm list");
    topiclist_load(prefs_get_topicfile());
    return 0;
}
Esempio n. 4
0
static int do_discover_conn(struct conn * conn,struct discovery_info * di)
{
	rand_sleep(conf_max_discovery_interval);


	struct wtpinfo *  wtpinfo;
	wtpinfo = get_wtpinfo();
//	wtpinfo_print(wtpinfo);


//	struct timespec tstart,tcur;
	struct radioinfo ri;
	memset(&ri,0,sizeof(ri));

	ri.rmac[0]=6;
	ri.rmac[2]=14;
	ri.rmac[3]=14;
	ri.rmac[4]=14;
	ri.rmac[5]=14;
	ri.rmac[6]=14;
	ri.rmac[7]=14;


#ifdef WITH_CW_LOG_DEBUG
	char str[100];
	sock_addrtostr((struct sockaddr*)&conn->addr,str,100);
	cw_log_debug0("Sending discovery request to %s",str);
#endif

	int rc;

	do {
		rc = cwsend_discovery_request(conn,&ri,wtpinfo);
		if (rc<0){
			if (errno == EINTR)
				continue;
			if (errno == EMSGSIZE){
				conn->mtu-=4;
				cw_log_debug2("Setting mtu to %i",conn->mtu);
				continue;
			}
		}
		break;

	}while (rc<0);
	

	if (rc < 0 )
	{
		char str[100];
		sock_addrtostr((struct sockaddr*)&conn->addr,str,100);
		cw_log(LOG_ERR,"Error sending discovery request to %s: %s",str,strerror(errno));
		return 0;
	}

	struct connlist * connlist;
	connlist = connlist_create(30);

//	clock_gettime(CLOCK_REALTIME,&tstart);	
//
	int tstart = time(0);	
	int treset = 0;
	do {
		char buf[2048];
		int  buflen=2048;
		struct sockaddr_storage sa;
		socklen_t fromlen=sizeof(struct sockaddr_storage);
		rc = recvfrom(conn->sock,buf,buflen,0,(struct sockaddr*)&sa,&fromlen);
		if (rc<0){
			if (errno==EINTR)
				rc=0;
			if (errno==EAGAIN)
				rc=0;
			if (errno==EWOULDBLOCK)
				rc=0;
		}
		if (rc>0) {
#ifdef WITH_CW_LOG_DEBUG
			char str[100];
			sock_addrtostr((struct sockaddr*)&sa,str,100);
			cw_log_debug0("Received packet from %s",str);
#endif

			struct conn * rconn; 
			rconn = connlist_get(connlist,(struct sockaddr*)&sa);

			if (!rconn){
				rconn = conn_create_noq(conn->sock,(struct sockaddr*)&sa); //msg_cb,NULL,0);
	//			rconn->pmsgarg=conn->pmsgarg;
				rconn->mtu = conn->mtu;
				rconn->seqnum=conn->seqnum;
				connlist_add(connlist,rconn);
			}

			conn_process_packet(rconn,(uint8_t*)buf,rc,msg_cb,di);
		}

		/* reset discovery timer after we have received the first response */
		if ( di->response_count == 1 && !treset ){
			tstart=time(0);
			treset=1;
		}

		//clock_gettime(CLOCK_REALTIME,&tcur);
//		printf("TTSub: %i %i\n",time(0)-tstart, conf_discovery_interval);
	}while(time(0)-tstart < conf_discovery_interval && rc>=0 );			


	if (rc <0){
		char str[100];
		sock_addrtostr((struct sockaddr*)&conn->addr,str,100);
		cw_log(LOG_ERR,"Error sendings discovery request to %s: %s",str,strerror(errno));
	}

	connlist_destroy(connlist);
	return 1;
}