./ MultiCS.r82 / th-date.c
void* thread_enddate(void *param)
{
prg.pid_date = syscall(SYS_gettid);
prctl(PR_SET_NAME,"Expire Date Thread",0,0,0);
while (!prg.restart) {
pthread_mutex_lock(&prg.lockthreaddate);
time_t nowtime = time(NULL);
struct tm *nowtm = localtime(&nowtime);
//strftime(buf, sizeof(buf), "%d %b %Y %H:%M", nowtm); printf(" Local Time = %s %d\n", buf, nowtm->tm_yday);
int j = (nowtm->tm_mon<<16) | (nowtm->tm_mday<<8) | nowtm->tm_hour;
// CCcam Clients
struct cccam_server_data *cccam = cfg.cccam.server;
while (cccam) {
struct cc_client_data *cli = cccam->client;
while (cli) {
if (!(cli->flags&FLAG_DELETE)) {
if (cli->enddate.tm_year) {
int i = (cli->enddate.tm_mon<<16) | (cli->enddate.tm_mday<<8) | cli->enddate.tm_hour;
//strftime(buf, sizeof(buf), "%d %b %Y %H:%M", &cli->enddate); printf(" Client End date = %s\n", buf);
if (cli->flags&FLAG_EXPIRED) {
if (cli->enddate.tm_year > nowtm->tm_year) {
cli->flags &= ~FLAG_EXPIRED;
debugf(getdbgflag(DBG_CCCAM,cli->parent->id,cli->id)," CCcam%d: Client '%s' Enabled\n", cccam->id, cli->user);
}
else if (cli->enddate.tm_year==nowtm->tm_year) {
if (i>j) {
cli->flags &= ~FLAG_EXPIRED;
debugf(getdbgflag(DBG_CCCAM,cli->parent->id,cli->id)," CCcam%d: Client '%s' Enabled\n", cccam->id, cli->user);
}
}
}
else {
if (cli->enddate.tm_year < nowtm->tm_year) {
cli->flags |= FLAG_EXPIRED;
if (cli->connection.status>0) cc_disconnect_cli( cli );
debugf(getdbgflag(DBG_CCCAM,cli->parent->id,cli->id)," CCcam%d: Client '%s' Expired\n", cccam->id, cli->user);
}
else if (cli->enddate.tm_year==nowtm->tm_year) {
if (j>=i) {
cli->flags |= FLAG_EXPIRED; // printf(" Client Disabled %s\n", cli->user);
if (cli->connection.status>0) cc_disconnect_cli( cli );
debugf(getdbgflag(DBG_CCCAM,cli->parent->id,cli->id)," CCcam%d: Client '%s' Expired\n", cccam->id, cli->user);
}
}
}
}
}
cli = cli->next;
}
cccam = cccam->next;
}
// MGcamd Clients
// CCcam Clients
struct mgcamdserver_data *mgcamd = cfg.mgcamd.server;
while (mgcamd) {
struct mg_client_data *cli = mgcamd->client;
while (cli) {
if (!(cli->flags&FLAG_DELETE)) {
if (cli->enddate.tm_year) {
//strftime(buf, sizeof(buf), "%d %b %Y %H:%M", &cli->enddate); printf(" Client End date = %s\n", buf);
int i = (cli->enddate.tm_mon<<16) | (cli->enddate.tm_mday<<8) | cli->enddate.tm_hour;
if (cli->flags&FLAG_EXPIRED) {
if (cli->enddate.tm_year > nowtm->tm_year) {
cli->flags &= ~FLAG_EXPIRED; //printf(" Client Enabled %s\n", cli->user);
debugf(getdbgflag(DBG_MGCAMD,0,cli->id)," mgcamd%d: Client '%s' Enabled\n", mgcamd->id, cli->user);
}
else if (cli->enddate.tm_year==nowtm->tm_year) {
if (i>j) {
cli->flags &= ~FLAG_EXPIRED; //printf(" Client Enabled %s\n", cli->user);
debugf(getdbgflag(DBG_MGCAMD,0,cli->id)," mgcamd%d: Client '%s' Enabled\n", mgcamd->id, cli->user);
}
}
}
else {
if (cli->enddate.tm_year < nowtm->tm_year) {
cli->flags |= FLAG_EXPIRED;
if (cli->connection.status>0) mg_disconnect_cli(cli);
debugf(getdbgflag(DBG_MGCAMD,0,cli->id)," mgcamd%d: Client '%s' Expired\n", mgcamd->id, cli->user);
}
else if (cli->enddate.tm_year==nowtm->tm_year) {
if (j>=i) {
cli->flags |= FLAG_EXPIRED;
if (cli->connection.status>0) mg_disconnect_cli(cli);
debugf(getdbgflag(DBG_MGCAMD,0,cli->id)," mgcamd%d: Client '%s' Expired\n", mgcamd->id, cli->user);
}
}
}
}
}
cli = cli->next;
}
mgcamd = mgcamd->next;
}
pthread_mutex_unlock(&prg.lockthreaddate);
sleep(10);
// check for load average
FILE *fp = fopen ("/proc/loadavg", "r");
if (fp) {
float avg;
int i = fscanf(fp, "%f", &avg);
if (avg>10) {
flag_debugfile = 1;
debugf( 0 , " Restart: Load average too high %01.2f\n", avg);
prg.restart = 1;
}
fclose(fp);
}
}
return NULL;
}
void start_thread_date()
{
create_thread(&prg.tid_date, (threadfn)thread_enddate,NULL);
}