./ MultiCS.r69 / th-date.c
void* thread_enddate(void *param)
{
	prg.pid_date = syscall(SYS_gettid);
	while(1) {
		pthread_mutex_lock(&prg.lockthreaddate);

		uint32_t ticks = GetTickCount();
		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 cccamserver_data *cccam = cfg.cccam.server;
		while (cccam) {
			struct cc_client_data *cli = cccam->client;
			while (cli) {
				if (!(cli->flags&FLAG_REMOVE))
				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->srvid,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->srvid,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;
							cc_disconnect_cli(cli);
							debugf(getdbgflag(DBG_CCCAM,cli->srvid,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);
								cc_disconnect_cli(cli);
								debugf(getdbgflag(DBG_CCCAM,cli->srvid,cli->id)," CCcam%d: Client '%s' Expired\n", cccam->id, cli->user);
							}
						}
						else if ( (cli->handle>0) && ( (ticks-cli->lastecmtime)>600000 ) ) 	cc_disconnect_cli(cli);
					}
				}
				cli = cli->next;
			}
			cccam = cccam->next;
		}

		// MGcamd Clients
		// CCcam Clients
		struct mgcamdserver_data *mgcamd = cfg.mgcamd.server;
		while (mgcamd) {
			struct mg_client_data *mgcli = mgcamd->client;
			while (mgcli) {
				if (!(mgcli->flags&FLAG_REMOVE))
				if (mgcli->enddate.tm_year) {
					//strftime(buf, sizeof(buf), "%d %b %Y %H:%M", &mgcli->enddate); printf(" Client End date = %s\n", buf);
					int i = (mgcli->enddate.tm_mon<<16) | (mgcli->enddate.tm_mday<<8) | mgcli->enddate.tm_hour;
					if (mgcli->flags&FLAG_EXPIRED) {
						if (mgcli->enddate.tm_year > nowtm->tm_year) {
							mgcli->flags &= ~FLAG_EXPIRED; //printf(" Client Enabled %s\n", mgcli->user);
							debugf(getdbgflag(DBG_MGCAMD,0,mgcli->id)," mgcamd%d: Client '%s' Enabled\n", mgcamd->id, mgcli->user);
						}
						else if (mgcli->enddate.tm_year==nowtm->tm_year) {
							if (i>j) {
								mgcli->flags &= ~FLAG_EXPIRED; //printf(" Client Enabled %s\n", mgcli->user);
								debugf(getdbgflag(DBG_MGCAMD,0,mgcli->id)," mgcamd%d: Client '%s' Enabled\n", mgcamd->id, mgcli->user);
							}
						}
					}
					else {
						if (mgcli->enddate.tm_year < nowtm->tm_year) {
							mgcli->flags |= FLAG_EXPIRED;
							mg_disconnect_cli(mgcli);
							debugf(getdbgflag(DBG_MGCAMD,0,mgcli->id)," mgcamd%d: Client '%s' Expired\n", mgcamd->id, mgcli->user);
						}
						else if (mgcli->enddate.tm_year==nowtm->tm_year) {
							if (j>=i) {
								mgcli->flags |= FLAG_EXPIRED;
								mg_disconnect_cli(mgcli);
								debugf(getdbgflag(DBG_MGCAMD,0,mgcli->id)," mgcamd%d: Client '%s' Expired\n", mgcamd->id, mgcli->user);
							}
						}
					}
				}
				mgcli = mgcli->next;
			}
			mgcamd = mgcamd->next;
		}

		pthread_mutex_unlock(&prg.lockthreaddate);
		sleep(10);
	}
}

void start_thread_date()
{
	create_prio_thread(&prg.tid_date, (threadfn)thread_enddate,NULL,50);
}