本文整理汇总了C++中cs_log函数的典型用法代码示例。如果您正苦于以下问题:C++ cs_log函数的具体用法?C++ cs_log怎么用?C++ cs_log使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了cs_log函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: do_report_emm_support
static void do_report_emm_support(void)
{
if(!config_enabled(WITH_CARDREADER))
{
cs_log("Binary without Cardreader Support! No EMM processing possible!");
}
else
{
report_emm_support(READER_NAGRA, "Nagra");
report_emm_support(READER_IRDETO, "Irdeto");
report_emm_support(READER_CONAX, "Conax");
report_emm_support(READER_CRYPTOWORKS, "Cryptoworks");
report_emm_support(READER_SECA, "Seca");
report_emm_support(READER_VIACCESS, "Viaccess");
report_emm_support(READER_VIDEOGUARD, "NDS Videoguard");
report_emm_support(READER_DRE, "DRE Crypt");
report_emm_support(READER_TONGFANG, "TONGFANG");
report_emm_support(READER_BULCRYPT, "Bulcrypt");
report_emm_support(READER_GRIFFIN, "Griffin");
report_emm_support(READER_DGCRYPT, "DGCrypt");
}
}
开发者ID:Leatherface75,项目名称:enigma2pc,代码行数:22,代码来源:oscam.c
示例2: radegast_recv
static int32_t radegast_recv(struct s_client *client, uchar *buf, int32_t l)
{
int32_t n;
if (!client->pfd) return(-1);
if (client->typ == 'c') { // server code
if ((n=recv(client->pfd, buf, l, 0))>0)
client->last=time((time_t *) 0);
} else { // client code
if ((n=recv(client->pfd, buf, l, 0))>0) {
cs_ddump_mask(D_CLIENT, buf, n, "radegast: received %d bytes from %s", n, remote_txt());
client->last = time((time_t *) 0);
if (buf[0] == 2) { // dcw received
if (buf[3] != 0x10) { // dcw ok
cs_log("radegast: no dcw");
n = -1;
}
}
}
}
return(n);
}
开发者ID:crzyfngrz,项目名称:oscam-1,代码行数:22,代码来源:module-radegast.c
示例3: radegast_process_ecm
static void radegast_process_ecm(uchar *buf, int32_t l)
{
int32_t i, n, sl;
ECM_REQUEST *er;
struct s_client *cl = cur_client();
if (!(er=get_ecmtask()))
return;
for (i=0; i<l; i+=(sl+2))
{
sl=buf[i+1];
switch(buf[i])
{
case 2: // CAID (upper byte only, oldstyle)
er->caid=buf[i+2]<<8;
break;
case 10: // CAID
er->caid=b2i(2, buf+i+2);
break;
case 3: // ECM DATA
//er->ecmlen = sl;
er->ecmlen = (((buf[i+1+2] & 0x0F) << 8) | buf[i+2+2]) + 3;
memcpy(er->ecm, buf+i+2, er->ecmlen);
break;
case 6: // PROVID (ASCII)
n=(sl>6) ? 3 : (sl>>1);
er->prid=cs_atoi((char *) buf+i+2+sl-(n<<1), n, 0);
break;
case 7: // KEYNR (ASCII), not needed
break;
case 8: // ECM PROCESS PID ?? don't know, not needed
break;
}
}
if (l!=i)
cs_log("WARNING: ECM-request corrupt");
else
get_cw(cl, er);
}
开发者ID:TELE-TWIN,项目名称:oscam,代码行数:39,代码来源:module-radegast.c
示例4: csc_dodelchan
int csc_dodelchan(void *source, int cargc, char **cargv) {
nick *sender=source;
reguser *rup=getreguserfromnick(sender);
chanindex *cip;
regchan *rcp;
char *reason;
char buf[512];
if (!rup)
return CMD_ERROR;
if (cargc<2) {
chanservstdmessage(sender, QM_NOTENOUGHPARAMS, "delchan");
return CMD_ERROR;
}
reason = cargv[1];
if(!checkreason(sender, reason))
return CMD_ERROR;
if (!(cip=findchanindex(cargv[0])) || !(rcp=cip->exts[chanservext])) {
chanservstdmessage(sender, QM_UNKNOWNCHAN, cargv[0]);
return CMD_ERROR;
}
if (rcp->ID == lastchannelID) {
chanservsendmessage(sender, "Sorry, can't delete last channel -- wait a while and try again.");
return CMD_ERROR;
}
cs_log(sender,"DELCHAN %s (%s)",cip->name->content,reason);
chanservwallmessage("%s (%s) just used DELCHAN on %s (reason: %s)", sender->nick, rup->username, cip->name->content, reason);
snprintf(buf, sizeof(buf), "Channel deleted: %s", reason);
cs_removechannel(rcp, buf);
chanservstdmessage(sender, QM_DONE);
return CMD_OK;
}
开发者ID:quakenet,项目名称:newserv,代码行数:38,代码来源:delchan.c
示例5: cs_log
static dmx_t *find_demux(int32_t fd, int32_t dmx_dev_num)
{
if(dmx_dev_num < 0 || dmx_dev_num >= MAX_COOL_DMX)
{
cs_log("Invalid demux %d", dmx_dev_num);
return NULL;
}
int32_t i, idx;
idx = dmx_dev_num;
if(fd == 0)
{
for(i = 0; i < MAX_FILTER; i++)
{
if(!cdemuxes[idx][i].opened)
{
cdemuxes[idx][i].fd = COOLDEMUX_FD(dmx_dev_num, i);
cs_debug_mask(D_DVBAPI, "opening new fd: %08x", cdemuxes[idx][i].fd);
cdemuxes[idx][i].demux_index = dmx_dev_num;
return &cdemuxes[idx][i];
}
}
cs_debug_mask(D_DVBAPI, "ERROR: no free demux found");
return NULL;
}
idx = COOLDEMUX_DMX_DEV(fd);
for(i = 0; i < MAX_FILTER; i++)
{
if(cdemuxes[idx][i].fd == fd)
{ return &cdemuxes[idx][i]; }
}
cs_debug_mask(D_DVBAPI, "ERROR: CANT FIND Demux %08x", fd);
return NULL;
}
开发者ID:BATYD-Turksat,项目名称:oscam,代码行数:38,代码来源:module-dvbapi-coolapi.c
示例6: gbox_write_peer_onl
void gbox_write_peer_onl(void)
{
FILE *fhandle = fopen(FILE_GBOX_PEER_ONL, "w");
if(!fhandle)
{
cs_log("Couldn't open %s: %s\n", FILE_GBOX_PEER_ONL, strerror(errno));
return;
}
struct s_client *cl;
for(cl = first_client; cl; cl = cl->next)
{
if(cl->gbox && (cl->typ == 'p'))
{
struct gbox_peer *peer = cl->gbox;
if (peer->online)
{ fprintf(fhandle, "1 %s %s %04X 2.%02X\n",cl->reader->device, cs_inet_ntoa(cl->ip),peer->gbox.id, peer->gbox.minor_version); }
else
{ fprintf(fhandle, "0 %s %s %04X 0.00\n",cl->reader->device, cs_inet_ntoa(cl->ip),peer->gbox.id); }
}
}
fclose(fhandle);
return;
}
开发者ID:jackuzzy,项目名称:oscam_private,代码行数:23,代码来源:module-gbox.c
示例7: constcw_analyse_file
int32_t constcw_analyse_file(uint16_t c_caid, uint32_t c_prid, uint16_t c_sid, uchar *dcw)
{
//CAID:PROVIDER:SID:PMT:PID::XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX
FILE *fp;
char token[512];
uint32_t caid, provid, sid, pmt, pid;
int32_t cw[16];
// FIXME
c_prid = c_prid;
fp=fopen(cur_client()->reader->device, "r");
if (!fp) return (0);
while (fgets(token, sizeof(token), fp)){
if (token[0]=='#') continue;
sscanf(token, "%4x:%6x:%4x:%4x:%4x::%2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x %2x", &caid, &provid, &sid, &pmt, &pid,
&cw[0], &cw[1], &cw[2], &cw[3], &cw[4], &cw[5], &cw[6], &cw[7],
&cw[8], &cw[9], &cw[10], &cw[11], &cw[12], &cw[13], &cw[14], &cw[15]);
//cs_log("Line found: %s", token);
if (c_caid == caid && c_sid == sid){
fclose(fp);
int8_t i;
for(i = 0; i < 16; ++i)
dcw[i] = (uchar) cw[i];
cs_log("Entry found: %04X:%06X:%04X:%04X:%04X::%s", caid, provid, sid, pmt, pid, cs_hexdump(1, dcw, 16, token, sizeof(token)));
return 1;
}
}
fclose(fp);
return 0;
}
开发者ID:joolzg,项目名称:oscam,代码行数:36,代码来源:module-constcw.c
示例8: cs_disable_log
void cs_disable_log(int8_t disabled)
{
if(cfg.disablelog != disabled)
{
if(disabled && logStarted)
{
cs_log("Stopping log...");
log_list_flush();
}
cfg.disablelog = disabled;
if(disabled)
{
if(logStarted)
{
cs_sleepms(20);
cs_close_log();
}
}
else
{
cs_open_logfiles();
}
}
}
开发者ID:jackuzzy,项目名称:oscam_private,代码行数:24,代码来源:oscam-log.c
示例9: cs_log
struct s_client *create_client(IN_ADDR_T ip)
{
struct s_client *cl;
if(!cs_malloc(&cl, sizeof(struct s_client)))
{
cs_log("max connections reached (out of memory) -> reject client %s", IP_ISSET(ip) ? cs_inet_ntoa(ip) : "with null address");
return NULL;
}
//client part
IP_ASSIGN(cl->ip, ip);
cl->account = first_client->account;
//master part
SAFE_MUTEX_INIT(&cl->thread_lock, NULL);
cl->login = cl->last = time(NULL);
cl->tid = (uint32_t)rand();
//Now add new client to the list:
struct s_client *last;
cs_writelock(__func__, &clientlist_lock);
for(last = first_client; last && last->next; last = last->next)
{ ; } //ends with cl on last client
if (last)
last->next = cl;
int32_t bucket = (uintptr_t)cl / 16 % CS_CLIENT_HASHBUCKETS;
cl->nexthashed = first_client_hashed[bucket];
first_client_hashed[bucket] = cl;
cs_writeunlock(__func__, &clientlist_lock);
return cl;
}
开发者ID:FFTEAM,项目名称:oscam,代码行数:36,代码来源:oscam-client.c
示例10: pandora_client_init
/************************************************************************************************************************
* client functions
*************************************************************************************************************************/
int pandora_client_init(struct s_client *cl) {
static struct sockaddr_in loc_sa;
int16_t p_proto;
char ptxt[16];
struct s_reader *rdr = cl->reader;
uchar md5tmp[MD5_DIGEST_LENGTH];
cl->pfd = 0;
if (rdr->r_port <= 0) {
cs_log("invalid port %d for server %s", rdr->r_port, rdr->device);
return (1);
}
p_proto = IPPROTO_UDP;
set_null_ip(&cl->ip);
memset((char *) &loc_sa, 0, sizeof(loc_sa));
loc_sa.sin_family = AF_INET;
if (IP_ISSET(cfg.srvip))
IP_ASSIGN(SIN_GET_ADDR(loc_sa), cfg.srvip);
else
loc_sa.sin_addr.s_addr = INADDR_ANY;
loc_sa.sin_port = htons(rdr->l_port);
if ((cl->udp_fd = socket(PF_INET, SOCK_DGRAM, p_proto)) < 0) {
cs_log("Socket creation failed (errno=%d)", errno);
return 1;
}
int32_t opt = 1;
setsockopt(cl->udp_fd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof (opt));
#ifdef SO_REUSEPORT
setsockopt(cl->udp_fd, SOL_SOCKET, SO_REUSEPORT, (void *)&opt, sizeof(opt));
#endif
set_socket_priority(cl->udp_fd, cfg.netprio);
if (rdr->l_port > 0) {
if (bind(cl->udp_fd, (struct sockaddr *) &loc_sa, sizeof(loc_sa)) < 0) {
cs_log("bind failed (errno=%d)", errno);
close(cl->udp_fd);
return (1);
}
snprintf(ptxt, sizeof(ptxt), ", port=%d", rdr->l_port);
} else
ptxt[0] = '\0';
memcpy(cl->pand_md5_key, MD5((uchar*)rdr->r_pwd, strlen(rdr->r_pwd), md5tmp), 16);
cl->crypted = 1;
//cl->grp = 0xFFFFFFFF;
//rdr->caid[0] = rdr->ctab.caid[0];
cl->pand_send_ecm = rdr->pand_send_ecm;
memset((char *) &cl->udp_sa, 0, sizeof(cl->udp_sa));
#ifdef IPV6SUPPORT
((struct sockaddr_in *)(&cl->udp_sa))->sin_family = AF_INET;
((struct sockaddr_in *)(&cl->udp_sa))->sin_port = htons((u_short) rdr->r_port);
#else
cl->udp_sa.sin_family = AF_INET;
cl->udp_sa.sin_port = htons((u_short) rdr->r_port);
#endif
cs_log("proxy %s:%d pandora %s (%s)", rdr->device, rdr->r_port, rdr->pand_send_ecm?"with ECM support":"", ptxt );
cl->pfd = cl->udp_fd;
//fcntl(cl->udp_fd, F_SETFL, fcntl(cl->udp_fd, F_GETFL, 0) | O_NONBLOCK); //!!!!!
return (0);
}
开发者ID:TELE-TWIN,项目名称:oscam,代码行数:73,代码来源:module-pandora.c
示例11: oscam_ser_check_ecm
static int32_t oscam_ser_check_ecm(ECM_REQUEST *er, uchar *buf, int32_t l)
{
int32_t i;
struct s_serial_client *serialdata = cur_client()->serialdata;
if (l<16)
{
cs_log(incomplete, l);
return(1);
}
switch(serialdata->connected)
{
case P_HSIC:
er->ecmlen = l-12;
er->caid = b2i(2, buf+1 );
er->prid = b2i(3, buf+3 );
er->pid = b2i(2, buf+6 );
er->srvid= b2i(2, buf+10);
memcpy(er->ecm, buf+12, er->ecmlen);
break;
case P_SSSP:
er->pid=b2i(2, buf+3);
for (i=0; (i<8) && (serialdata->sssp_tab[i].pid!=er->pid); i++);
if (i>=serialdata->sssp_num)
{
cs_debug_mask(D_CLIENT, "illegal request, unknown pid=%04X", er->pid);
return(2);
}
er->ecmlen = l-5;
er->srvid= serialdata->sssp_srvid;
er->caid = serialdata->sssp_tab[i].caid;
er->prid = serialdata->sssp_tab[i].prid;
memcpy(er->ecm, buf+5, er->ecmlen);
break;
case P_BOMBA:
er->ecmlen = l;
memcpy(er->ecm, buf, er->ecmlen);
break;
case P_DSR95:
buf[l]='\0'; // prepare for trim
trim((char *)buf+13); // strip spc, nl, cr ...
er->ecmlen = strlen((char *)buf+13)>>1;
er->prid=cs_atoi((char *)buf+3, 3, 0); // ignore errors
er->caid=cs_atoi((char *)buf+9, 2, 0); // ignore errors
if (cs_atob(er->ecm, (char *)buf+13, er->ecmlen)<0)
{
cs_log("illegal characters in ecm-request");
return(1);
}
if( serialdata->dsr9500type==P_DSR_WITHSID )
{
er->ecmlen -= 2;
er->srvid=cs_atoi((char *)buf+13+(er->ecmlen << 1), 2, 0);
}
break;
case P_GS:
er->ecmlen = ((buf[3]<<8)|buf[2]) - 6;
er->srvid = (buf[5]<<8)|buf[4]; // sid
er->caid = (buf[7]<<8)|buf[6];
er->prid = 0;
if (er->ecmlen > 256) er->ecmlen = 256;
memcpy(er->ecm, buf+10, er->ecmlen);
break;
case P_ALPHA:
l=oscam_ser_alpha_convert(buf, l);
er->ecmlen= b2i(2, buf+1 )-2;
er->caid = b2i(2, buf+3 );
if ((er->ecmlen!=l-5) || (er->ecmlen>257))
{
cs_log(incomplete, l);
return(1);
}
memcpy(er->ecm, buf+5, er->ecmlen);
break;
case P_GBOX:
er->srvid = b2i(2, buf+serialdata->gbox_lens.cat_len+3+3);
er->ecmlen = serialdata->gbox_lens.ecm_len+3;
memcpy(er->ecm, buf+serialdata->gbox_lens.cat_len+3+serialdata->gbox_lens.pmt_len+3, er->ecmlen);
break;
}
return(0);
}
开发者ID:TELE-TWIN,项目名称:oscam,代码行数:83,代码来源:module-serial.c
示例12: oscam_ser_recv
//.........这里部分代码省略.........
serialdata->tpe.millitm+=50;
if( !oscam_ser_selrec(buf, all-n, l, &n) )
p=(-1);
}
// auto detect DSR9500 protocol
if( client->typ == 'c' && p==P_DSR95 && serialdata->dsr9500type==P_DSR_AUTO )
{
serialdata->tpe.millitm+=20;
if( oscam_ser_selrec(buf, 2, l, &n) )
{
if( cs_atoi((char *)buf+n-2, 1, 1)==0xFFFFFFFF )
{
switch( (buf[n-2]<<8)|buf[n-1] )
{
case 0x0A0D : serialdata->dsr9500type=P_DSR_OPEN; break;
case 0x0D0A : serialdata->dsr9500type=P_DSR_PIONEER; break;
default : serialdata->dsr9500type=P_DSR_UNKNOWN; break;
}
}else{
if( oscam_ser_selrec(buf, 2, l, &n) )
if( cs_atoi((char *)buf+n-2, 1, 1)==0xFFFFFFFF )
serialdata->dsr9500type=P_DSR_UNKNOWN;
else
serialdata->dsr9500type=P_DSR_WITHSID;
else {
serialdata->dsr9500type=P_DSR_UNKNOWN;
p=(-1);
}
}
}
else
serialdata->dsr9500type=P_DSR_GNUSMAS;
if( p )
cs_log("detected dsr9500-%s type receiver",
dsrproto_txt[serialdata->dsr9500type]);
}
// gbox
if( client->typ == 'c' && p==P_GBOX )
{
int32_t j;
for( j=0; (j<3) && (p>0); j++)
switch( j )
{
case 0: // PMT head
if( !oscam_ser_selrec(buf, 3, l, &n) )
p=(-1);
else if( !(buf[n-3]==0x02 && (buf[n-2]&0xf0)==0xb0) )
p=(-2);
break;
case 1: // PMT + ECM header
serialdata->gbox_lens.pmt_len=((buf[n-2]&0xf)<<8)|buf[n-1];
if( !oscam_ser_selrec(buf, serialdata->gbox_lens.pmt_len+3, l, &n) )
p=(-1);
break;
case 2: // ECM + ECM PID
serialdata->gbox_lens.ecm_len=((buf[n-2]&0xf)<<8)|buf[n-1];
if( !oscam_ser_selrec(buf, serialdata->gbox_lens.ecm_len+4, l, &n) )
p=(-1);
}
} // gbox
}
else if (r<0) // read until specified char (-r)
{
while((buf[n-1]!=(-r)) && (p>0))
if (!oscam_ser_selrec(buf, 1, l, &n))
p=(-1);
开发者ID:TELE-TWIN,项目名称:oscam,代码行数:67,代码来源:module-serial.c
示例13: csu_dodomainmode
int csu_dodomainmode(void *source, int cargc, char **cargv) {
maildomain *mdp;
nick *sender=source;
flag_t forceflags, currentflags;
char buf1[60];
int carg=2,limdone=0,actlimdone=0;
unsigned int newlim=0;
unsigned int newactlim=0;
if (cargc<1) {
chanservstdmessage(sender,QM_NOTENOUGHPARAMS,"domainmode");
return CMD_ERROR;
}
if (checkdomain(cargv[0])) {
chanservstdmessage(sender,QM_INVALIDDOMAIN,cargv[0]);
return CMD_ERROR;
}
if(!(mdp=findorcreatemaildomain(cargv[0]))) {
return CMD_ERROR;
}
if (cargc>1) {
/* Save the current modes.. */
strcpy(buf1,getdomainmode(mdp));
/* Pick out the + flags: start from 0 */
forceflags=0;
setflags(&forceflags, MDFLAG_ALL, cargv[1], mdflags, REJECT_NONE);
currentflags=mdp->flags;
setflags(¤tflags, MDFLAG_ALL, cargv[1], mdflags, REJECT_NONE);
if ((forceflags & MDFLAG_LIMIT) &&
(!(forceflags & MDFLAG_ACTLIMIT) || strrchr(cargv[1],'l') < strrchr(cargv[1],'u'))) {
if (cargc<=carg) {
chanservstdmessage(sender,QM_NOTENOUGHPARAMS,"domainmode");
return CMD_ERROR;
}
newlim=strtol(cargv[carg++],NULL,10);
limdone=1;
}
if ((forceflags & MDFLAG_LIMIT) && !limdone) {
if (cargc<=carg) {
chanservstdmessage(sender,QM_NOTENOUGHPARAMS,"domainmode");
return CMD_ERROR;
}
newlim=strtol(cargv[carg++],NULL,10);
limdone=1;
}
if ((forceflags & MDFLAG_ACTLIMIT) && !actlimdone) {
if (cargc<=carg) {
chanservstdmessage(sender,QM_NOTENOUGHPARAMS,"chanmode");
return CMD_ERROR;
}
newactlim=strtol(cargv[carg++],NULL,10);
actlimdone=1;
}
/* It parsed OK, so update the structure.. */
mdp->flags=currentflags;
if(actlimdone)
mdp->actlimit=newactlim;
if(!(currentflags & MDFLAG_ACTLIMIT))
mdp->actlimit=0;
if(limdone)
mdp->limit=newlim;
if(!(currentflags & MDFLAG_LIMIT))
mdp->limit=0;
if(mdp->ID) {
if(mdp->flags) {
csdb_updatemaildomain(mdp);
} else {
csdb_deletemaildomain(mdp);
}
} else {
mdp->ID=++lastdomainID;
csdb_createmaildomain(mdp);
}
chanservstdmessage(sender, QM_DONE);
cs_log(sender,"DOMAINMODE %s %s (%s -> %s)",mdp->name->content,cargv[1],buf1,getdomainmode(mdp));
}
chanservstdmessage(sender,QM_CURDOMAINMODES,mdp->name->content,getdomainmode(mdp));
return CMD_OK;
}
开发者ID:quakenet,项目名称:newserv,代码行数:89,代码来源:domainmode.c
示例14: cs_master_alarm
static void cs_master_alarm(void)
{
cs_log("PANIC: master deadlock!");
fprintf(stderr, "PANIC: master deadlock!");
fflush(stderr);
}
开发者ID:westaus,项目名称:oscam,代码行数:6,代码来源:oscam.c
示例15: process_clients
static void process_clients(void) {
int32_t i, k, j, rc, pfdcount = 0;
struct s_client *cl;
struct s_reader *rdr;
struct pollfd *pfd;
struct s_client **cl_list;
uint32_t cl_size = 0;
char buf[10];
if (pipe(thread_pipe) == -1) {
printf("cannot create pipe, errno=%d\n", errno);
exit(1);
}
cl_size = chk_resize_cllist(&pfd, &cl_list, 0, 100);
pfd[pfdcount].fd = thread_pipe[0];
pfd[pfdcount].events = POLLIN | POLLPRI | POLLHUP;
cl_list[pfdcount] = NULL;
while (!exit_oscam) {
pfdcount = 1;
//connected tcp clients
for (cl=first_client->next; cl; cl=cl->next) {
if (cl->init_done && !cl->kill && cl->pfd && cl->typ=='c' && !cl->is_udp) {
if (cl->pfd && !cl->thread_active) {
cl_size = chk_resize_cllist(&pfd, &cl_list, cl_size, pfdcount);
cl_list[pfdcount] = cl;
pfd[pfdcount].fd = cl->pfd;
pfd[pfdcount++].events = POLLIN | POLLPRI | POLLHUP;
}
}
//reader:
//TCP:
// - TCP socket must be connected
// - no active init thread
//UDP:
// - connection status ignored
// - no active init thread
rdr = cl->reader;
if (rdr && cl->typ=='p' && cl->init_done) {
if (cl->pfd && !cl->thread_active && ((rdr->tcp_connected && rdr->ph.type==MOD_CONN_TCP)||(rdr->ph.type==MOD_CONN_UDP))) {
cl_size = chk_resize_cllist(&pfd, &cl_list, cl_size, pfdcount);
cl_list[pfdcount] = cl;
pfd[pfdcount].fd = cl->pfd;
pfd[pfdcount++].events = POLLIN | POLLPRI | POLLHUP;
}
}
}
//server (new tcp connections or udp messages)
for (k = 0; k < CS_MAX_MOD; k++) {
struct s_module *module = &modules[k];
if ((module->type & MOD_CONN_NET)) {
for (j = 0; j < module->ptab.nports; j++) {
if (module->ptab.ports[j].fd) {
cl_size = chk_resize_cllist(&pfd, &cl_list, cl_size, pfdcount);
cl_list[pfdcount] = NULL;
pfd[pfdcount].fd = module->ptab.ports[j].fd;
pfd[pfdcount++].events = POLLIN | POLLPRI | POLLHUP;
}
}
}
}
if (pfdcount >= 1024)
cs_log("WARNING: too many users!");
rc = poll(pfd, pfdcount, 5000);
if (rc<1)
continue;
for (i=0; i<pfdcount; i++) {
//clients
cl = cl_list[i];
if (cl && !is_valid_client(cl))
continue;
if (pfd[i].fd == thread_pipe[0] && (pfd[i].revents & (POLLIN | POLLPRI))) {
// a thread ended and cl->pfd should be added to pollfd list again (thread_active==0)
if(read(thread_pipe[0], buf, sizeof(buf)) == -1){
cs_debug_mask(D_TRACE, "Reading from pipe failed (errno=%d %s)", errno, strerror(errno));
}
continue;
}
//clients
// message on an open tcp connection
if (cl && cl->init_done && cl->pfd && (cl->typ == 'c' || cl->typ == 'm')) {
if (pfd[i].fd == cl->pfd && (pfd[i].revents & (POLLHUP | POLLNVAL))) {
//client disconnects
kill_thread(cl);
continue;
}
if (pfd[i].fd == cl->pfd && (pfd[i].revents & (POLLIN | POLLPRI))) {
add_job(cl, ACTION_CLIENT_TCP, NULL, 0);
}
//.........这里部分代码省略.........
开发者ID:westaus,项目名称:oscam,代码行数:101,代码来源:oscam.c
示例16: main
//.........这里部分代码省略.........
cacheex_init();
init_len4caid();
init_irdeto_guess_tab();
write_versionfile(false);
led_init();
led_status_default();
azbox_init();
mca_init();
global_whitelist_read();
cacheex_load_config_file();
for (i = 0; i < CS_MAX_MOD; i++) {
struct s_module *module = &modules[i];
if ((module->type & MOD_CONN_NET)) {
for (j = 0; j < module->ptab.nports; j++) {
start_listener(module, &module->ptab.ports[j]);
}
}
}
//set time for server to now to avoid 0 in monitor/webif
first_client->last=time((time_t *)0);
webif_init();
start_thread((void *) &reader_check, "reader check");
cw_process_thread_start();
lcd_thread_start();
do_report_emm_support();
init_cardreader();
cs_waitforcardinit();
led_status_starting();
ac_init();
for (i = 0; i < CS_MAX_MOD; i++) {
struct s_module *module = &modules[i];
if ((module->type & MOD_CONN_SERIAL) && module->s_handler)
module->s_handler(NULL, NULL, i);
}
// main loop function
process_clients();
cw_process_thread_wakeup(); // Stop cw_process thread
pthread_cond_signal(&reader_check_sleep_cond); // Stop reader_check thread
// Cleanup
webif_close();
azbox_close();
coolapi_close_all();
mca_close();
led_status_stopping();
led_stop();
lcd_thread_stop();
remove_versionfile();
stat_finish();
cccam_done_share();
kill_all_clients();
kill_all_readers();
if (oscam_pidfile)
unlink(oscam_pidfile);
webif_tpls_free();
init_free_userdb(cfg.account);
cfg.account = NULL;
init_free_sidtab();
free_readerdb();
free_irdeto_guess_tab();
config_free();
cs_log("cardserver down");
log_free();
stop_garbage_collector();
free(first_client->account);
free(first_client);
// This prevents the compiler from removing config_mak from the final binary
syslog_ident = config_mak;
return exit_oscam;
}
开发者ID:westaus,项目名称:oscam,代码行数:101,代码来源:oscam.c
示例17: stapi_open
int32_t stapi_open(void) {
uint32_t ErrorCode;
DIR *dirp;
struct dirent entry, *dp = NULL;
struct stat buf;
int32_t i;
char pfad[80];
stapi_on=1;
int32_t stapi_priority=0;
dirp = opendir(PROCDIR);
if (!dirp) {
cs_log("opendir failed (errno=%d %s)", errno, strerror(errno));
return 0;
}
memset(dev_list, 0, sizeof(struct STDEVICE)*PTINUM);
if (dvbapi_priority) {
struct s_dvbapi_priority *p;
for (p=dvbapi_priority; p != NULL; p=p->next) {
if (p->type=='s') {
stapi_priority=1;
break;
}
}
}
if (!stapi_priority) {
cs_log("WARNING: no PTI devices defined, stapi disabled");
return 0;
}
oscam_stapi_CheckVersion();
i=0;
while (!cs_readdir_r(dirp, &entry, &dp)) {
if (!dp) break;
snprintf(pfad, sizeof(pfad), "%s%s", PROCDIR, dp->d_name);
if (stat(pfad,&buf) != 0)
continue;
if (!(buf.st_mode & S_IFDIR && strncmp(dp->d_name, ".", 1)!=0))
continue;
int32_t do_open=0;
struct s_dvbapi_priority *p;
for (p=dvbapi_priority; p != NULL; p=p->next) {
if (p->type!='s') continue;
if(strcmp(dp->d_name, p->devname)==0) {
do_open=1;
break;
}
}
if (!do_open) {
cs_log("PTI: %s skipped", dp->d_name);
continue;
}
ErrorCode= oscam_stapi_Open(dp->d_name, &dev_list[i].SessionHandle);
if (ErrorCode != 0) {
cs_log("STPTI_Open ErrorCode: %d", ErrorCode);
continue;
}
//debug
//oscam_stapi_Capability(dp->d_name);
cs_strncpy(dev_list[i].name,dp->d_name, sizeof(dev_list[i].name));
cs_log("PTI: %s open %d", dp->d_name, i);
ErrorCode = oscam_stapi_SignalAllocate(dev_list[i].SessionHandle, &dev_list[i].SignalHandle);
if (ErrorCode != 0)
cs_log("SignalAllocate: ErrorCode: %d SignalHandle: %x", ErrorCode, dev_list[i].SignalHandle);
i++;
if (i>=PTINUM) break;
}
closedir(dirp);
if (i==0) return 0;
pthread_mutex_init(&filter_lock, NULL);
for (i=0;i<PTINUM;i++) {
if (dev_list[i].SessionHandle==0)
continue;
struct read_thread_param *para;
if (!cs_malloc(¶, sizeof(struct read_thread_param)))
return 0;
para->id=i;
para->cli=cur_client();
int32_t ret = pthread_create(&dev_list[i].thread, NULL, stapi_read_thread, (void *)para);
if(ret){
//.........这里部分代码省略.........
开发者ID:AntonSizov,项目名称:oscam-light,代码行数:101,代码来源:module-dvbapi-stapi.c
示例18: log_emm_request
void log_emm_request(struct s_reader *rdr){
cs_log("%s emm-request sent (reader=%s, caid=%04X, auprovid=%06X)",
username(cur_client()), rdr->label, rdr->caid,
rdr->auprovid ? rdr->auprovid : b2i(4, rdr->prid[0]));
}
开发者ID:sangood,项目名称:oscam-nx111,代码行数:5,代码来源:oscam-log.c
示例19: camd35_recv
static int32_t camd35_recv(uint8_t *buf, int32_t rs)
{
int32_t rc, s, n = 0, buflen = 0;
for(rc = s = 0; !rc; s++)
{
switch(s)
{
case 0:
if(rs < 36)
{
rc = -1;
goto out;
}
break;
case 1:
switch(camd35_auth_client(buf))
{
case 0:
break; // ok
case 1:
rc = -2;
break; // unknown user
default:
rc = -9;
break; // error's from cs_auth()
}
memmove(buf, buf + 4, rs -= 4);
break;
case 2:
aes_decrypt(&cl_aes_keys, buf, rs);
if(rs != boundary(4, rs))
{ cs_log_dbg(0, "WARNING: packet size has wrong decryption boundary"); }
n = (buf[0] == 3) ? 0x34 : 0;
//Fix for ECM request size > 255 (use ecm length field)
if(buf[0] == 0)
{ buflen = (((buf[21] & 0x0f) << 8) | buf[22]) + 3; }
else if(buf[0] == 0x3d || buf[0] == 0x3e || buf[0] == 0x3f) //cacheex-push
{ buflen = buf[1] | (buf[2] << 8); }
else
{ buflen = buf[1]; }
n = boundary(4, n + 20 + buflen);
cs_log_dbg(0, "received %d bytes from client", rs);
if(n < rs)
{ cs_log_dbg(0, "ignoring %d bytes of garbage", rs - n); }
else if(n > rs) { rc = -3; }
break;
case 3:
if(crc32(0, buf + 20, buflen) != b2i(4, buf + 4)) {
rc = -4;
cs_log_dump_dbg(buf, rs, "camd35 checksum failed for packet: ");
cs_log_dbg(0, "checksum: %X", b2i(4, buf+4));
}
if(!rc) { rc = n; }
break;
}
}
out:
if((rs > 0) && ((rc == -1) || (rc == -2)))
{
cs_log_dbg(0, "received %d bytes from client (native)", rs);
}
switch(rc)
{
case -1:
cs_log("packet is too small (received %d bytes, expected at least 36 bytes)", rs);
break;
case -2:
cs_log("unknown user");
break;
case -3:
cs_log("incomplete request !");
break;
case -4:
cs_log("checksum error (wrong password ?)");
break;
}
return (rc);
}
开发者ID:jahntheman,项目名称:OSEmu,代码行数:85,代码来源:OSEmu.c
示例20: pthread_setspecific
//.........这里部分代码省略.........
cl->kill = 1; // kill client on next run
continue;
}
module->s_handler(cl, mbuf, n);
break;
case ACTION_CACHEEX_TIMEOUT:
#ifdef CS_CACHEEX
cacheex_timeout(data->ptr);
#endif
break;
case ACTION_FALLBACK_TIMEOUT:
fallback_timeout(data->ptr);
break;
case ACTION_CLIENT_TIMEOUT:
ecm_timeout(data->ptr);
break;
case ACTION_ECM_ANSWER_READER:
chk_dcw(data->ptr);
break;
case ACTION_ECM_ANSWER_CACHE:
write_ecm_answer_fromcache(data->ptr);
break;
case ACTION_CLIENT_INIT:
if(module->s_init)
{ module->s_init(cl); }
cl->is_udp = module->type == MOD_CONN_UDP;
cl->init_done = 1;
break;
case ACTION_CLIENT_IDLE:
if(module->s_idle)
{ module->s_idle(cl); }
else
{
cs_log("user %s reached %d sec idle limit.", username(cl), cfg.cmaxidle);
cl->kill = 1;
}
break;
case ACTION_CACHE_PUSH_OUT:
{
#ifdef CS_CACHEEX
ECM_REQUEST *er = data->ptr;
int32_t res = 0, stats = -1;
// cc-nodeid-list-check
if(reader)
{
if(reader->ph.c_cache_push_chk && !reader->ph.c_cache_push_chk(cl, er))
{ break; }
res = reader->ph.c_cache_push(cl, er);
stats = cacheex_add_stats(cl, er->caid, er->srvid, er->prid, 0);
}
else
{
if(module->c_cache_push_chk && !module->c_cache_push_chk(cl, er))
{ break; }
res = module->c_cache_push(cl, er);
}
debug_ecm(D_CACHEEX, "pushed ECM %s to %s res %d stats %d", buf, username(cl), res, stats);
cl->cwcacheexpush++;
if(cl->account)
{ cl->account->cwcacheexpush++; }
first_client->cwcacheexpush++;
#endif
break;
}
case ACTION_CLIENT_KILL:
cl->kill = 1;
开发者ID:jackuzzy,项目名称:oscam_private,代码行数:67,代码来源:oscam-work.c
注:本文中的cs_log函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论