Exemple #1
0
void client_check_status(struct s_client *cl) {
    if (!cl || cl->kill || !cl->init_done)
        return;
    switch (cl->typ) {
    case 'm':
    case 'c':
        // Check clients for exceeding cmaxidle by checking cl->last
        if (!(cl->ncd_keepalive && (get_module(cl)->listenertype & LIS_NEWCAMD)) &&
                cl->last && cfg.cmaxidle && (time(NULL) - cl->last) > (time_t)cfg.cmaxidle)
        {
            add_job(cl, ACTION_CLIENT_IDLE, NULL, 0);
        }
        break;
    case 'r':
        cardreader_checkhealth(cl, cl->reader);
        break;
    case 'p': {
        struct s_reader *rdr = cl->reader;
        if (!rdr || !rdr->enable || !rdr->active) //reader is disabled or restarting at this moment
            break;
        // execute reader do idle on proxy reader after a certain time (rdr->tcp_ito = inactivitytimeout)
        // disconnect when no keepalive available
        if ((rdr->tcp_ito && is_cascading_reader(rdr)) || rdr->typ == R_CCCAM) {
            time_t now = time(NULL);
            int32_t time_diff = abs(now - rdr->last_check);
            if (time_diff > 60 || (time_diff > 30 && rdr->typ == R_CCCAM)) { //check 1x per minute or every 30s for cccam
                add_job(rdr->client, ACTION_READER_IDLE, NULL, 0);
                rdr->last_check = now;
            }
        }
        break;
    }
    }
}
Exemple #2
0
void client_check_status(struct s_client *cl)
{
	if(!cl || cl->kill || !cl->init_done)
		{ return; }
	switch(cl->typ)
	{
	case 'm':
	case 'c':

		if((get_module(cl)->listenertype & LIS_CCCAM) && cl->last && (time(NULL) - cl->last) > (time_t)12)
		{
			add_job(cl, ACTION_CLIENT_IDLE, NULL, 0);
		}

		//Check umaxidle to avoid client is killed for inactivity, it has priority than cmaxidle
		if(!cl->account->umaxidle)
			break;

		// Check user for exceeding umaxidle by checking cl->last
		if(!(cl->ncd_keepalive && (get_module(cl)->listenertype & LIS_NEWCAMD)) && cl->account->umaxidle>0 &&
				cl->last && (time(NULL) - cl->last) > (time_t)cl->account->umaxidle)
		{
			add_job(cl, ACTION_CLIENT_IDLE, NULL, 0);
		}

		// Check clients for exceeding cmaxidle by checking cl->last
		if(!(cl->ncd_keepalive && (get_module(cl)->listenertype & LIS_NEWCAMD)) &&
				cl->last && cl->account->umaxidle==-1 && cfg.cmaxidle && (time(NULL) - cl->last) > (time_t)cfg.cmaxidle)
		{
			add_job(cl, ACTION_CLIENT_IDLE, NULL, 0);
		}

		break;
	case 'r':
		cardreader_checkhealth(cl, cl->reader);
		break;
	case 'p':
	{
		struct s_reader *rdr = cl->reader;
		if(!rdr || !rdr->enable || !rdr->active)  //reader is disabled or restarting at this moment
			{ break; }
		// execute reader do idle on proxy reader after a certain time (rdr->tcp_ito = inactivitytimeout)
		// disconnect when no keepalive available
		if((rdr->tcp_ito && is_cascading_reader(rdr)) || (rdr->typ == R_CCCAM) || (rdr->typ == R_CAMD35) || (rdr->typ == R_CS378X) || (rdr->typ == R_SCAM) || (rdr->tcp_ito != 0 && rdr->typ == R_RADEGAST))
		{
			time_t now = time(NULL);
			int32_t time_diff = llabs(now - rdr->last_check);
			if(time_diff > 60 || (time_diff > 12 && (rdr->typ == R_CCCAM || rdr->typ == R_CAMD35 || rdr->typ == R_CS378X)) || ((time_diff > (rdr->tcp_rto?rdr->tcp_rto:60)) && rdr->typ == R_RADEGAST))     //check 1x per minute or every 10s for cccam/camd35 or reconnecttimeout radegast if 0 defaut 60s
			{
				add_job(rdr->client, ACTION_READER_IDLE, NULL, 0);
				rdr->last_check = now;
			}
		}
		break;
	}
	}
}