./ MultiCS.r82 / srv-common.c
///////////////////////////////////////////////////////////////////////////////
//
///////////////////////////////////////////////////////////////////////////////
#ifdef MONOTHREAD_ACCEPT
void *connect_cli_thread(void *param)
{
prg.pid_connect = syscall(SYS_gettid);
while(!prg.restart) {
struct pollfd pfd[MAX_PFD];
int pfdcount = 0;
#ifdef FREECCCAM_SRV
if ( !IS_DISABLED(cfg.freecccam.server.flags)&&(cfg.freecccam.server.handle>0) ) {
cfg.freecccam.server.ipoll = pfdcount;
pfd[pfdcount].fd = cfg.freecccam.server.handle;
pfd[pfdcount++].events = POLLIN | POLLPRI;
} else cfg.freecccam.server.ipoll = -1;
#endif
#ifdef CCCAM_SRV
struct cccam_server_data *cccam = cfg.cccam.server;
while (cccam) {
if ( !IS_DISABLED(cccam->flags) && (cccam->handle>0) ) {
cccam->ipoll = pfdcount;
pfd[pfdcount].fd = cccam->handle;
pfd[pfdcount++].events = POLLIN | POLLPRI;
} else cccam->ipoll = -1;
cccam = cccam->next;
}
#endif
#ifdef MGCAMD_SRV
struct mgcamdserver_data *mgcamd = cfg.mgcamd.server;
while (mgcamd) {
if ( !IS_DISABLED(mgcamd->flags) && (mgcamd->handle>0) ) {
mgcamd->ipoll = pfdcount;
pfd[pfdcount].fd = mgcamd->handle;
pfd[pfdcount++].events = POLLIN | POLLPRI;
} else mgcamd->ipoll = -1;
mgcamd = mgcamd->next;
}
#endif
#ifdef CS378X_SRV
struct camd35_server_data *cs378x = cfg.cs378x.server;
while (cs378x) {
if ( !IS_DISABLED(cs378x->flags) && (cs378x->handle>0) ) {
cs378x->ipoll = pfdcount;
pfd[pfdcount].fd = cs378x->handle;
pfd[pfdcount++].events = POLLIN | POLLPRI;
} else cs378x->ipoll = -1;
cs378x = cs378x->next;
}
#endif
struct cardserver_data *cs = cfg.cardserver;
while(cs) {
if ( cs->option.fsharenewcamd && !IS_DISABLED(cs->newcamd.flags) && (cs->newcamd.handle>0) ) {
cs->newcamd.ipoll = pfdcount;
pfd[pfdcount].fd = cs->newcamd.handle;
pfd[pfdcount++].events = POLLIN | POLLPRI;
} else cs->newcamd.ipoll = -1;
cs = cs->next;
}
int retval = poll(pfd, pfdcount, 3006);
if ( retval>0 ) {
struct cardserver_data *cs = cfg.cardserver;
while (cs) {
if ( cs->option.fsharenewcamd )
if ( !IS_DISABLED(cs->newcamd.flags)&&(cs->newcamd.handle>0) && (cs->newcamd.ipoll>=0) && (cs->newcamd.handle==pfd[cs->newcamd.ipoll].fd) ) {
if ( pfd[cs->newcamd.ipoll].revents & (POLLIN|POLLPRI) ) newcamd_srv_accept( cs );
}
cs = cs->next;
}
#ifdef CCCAM_SRV
struct cccam_server_data *cccam = cfg.cccam.server;
while (cccam) {
if ( !IS_DISABLED(cccam->flags) && (cccam->handle>0) && (cccam->ipoll>=0) && (cccam->handle==pfd[cccam->ipoll].fd) ) {
if ( pfd[cccam->ipoll].revents & (POLLIN|POLLPRI) ) cccam_srv_accept(cccam);
}
cccam = cccam->next;
}
#endif
#ifdef MGCAMD_SRV
struct mgcamdserver_data *mgcamd = cfg.mgcamd.server;
while (mgcamd) {
if ( !IS_DISABLED(mgcamd->flags) && (mgcamd->handle>0) && (mgcamd->ipoll>=0) && (mgcamd->handle==pfd[mgcamd->ipoll].fd) ) {
if ( pfd[mgcamd->ipoll].revents & (POLLIN|POLLPRI) ) mgcamd_srv_accept(mgcamd);
}
mgcamd = mgcamd->next;
}
#endif
#ifdef CS378X_SRV
struct camd35_server_data *cs378x = cfg.cs378x.server;
while (cs378x) {
if ( !IS_DISABLED(cs378x->flags) && (cs378x->handle>0) && (cs378x->ipoll>=0) && (cs378x->handle==pfd[cs378x->ipoll].fd) ) {
if ( pfd[cs378x->ipoll].revents & (POLLIN|POLLPRI) ) cs378x_srv_accept(cs378x);
}
cs378x = cs378x->next;
}
#endif
#ifdef FREECCCAM_SRV
if ( !IS_DISABLED(cfg.freecccam.server.flags) && (cfg.freecccam.server.handle>0) && (cfg.freecccam.server.ipoll>=0) && (cfg.freecccam.server.handle==pfd[cfg.freecccam.server.ipoll].fd) ) {
if ( pfd[cfg.freecccam.server.ipoll].revents & (POLLIN|POLLPRI) ) freecccam_srv_accept( &cfg.freecccam.server );
}
#endif
}
else if (retval<0) usleep(96000);
}
return NULL;
}
#endif