📄 dkcj.c
字号:
}
telecount.all_count=0;
telecount.success_count=0;
telecount.failure_count=0;
telecount.success_flag=0;
}
int cjtime()
{
char* ls_date;
char* lp_date;
time_t ls_t;
int li_day,li_hour;
time(&ls_t);
ls_date = ctime(&ls_t);
lp_date = ls_date+8;
ls_date[10] = '\0';
li_day = atoi(lp_date);
lp_date = ls_date+11;
ls_date[13] = '\0';
li_hour = atoi(lp_date);
if((li_day>=1)&&(li_day<=7)) {
cjstate.time_state=TIME_A;
}
else if((li_day>=8)&&(li_day<=14)) {
cjstate.time_state=TIME_B;
}
else if((li_day>=15)&&(li_day<=20)) {
cjstate.time_state=TIME_C;
}
else
{
cjstate.time_state=TIME_U;
}
if((li_hour>=19)&&(li_hour<=23)&&(cjstate.time_state!=TIME_U)&&(cj_count())) {
return(1);
}
else
{
return(0);
}
}
int cj_count()
{
if((cjstate.current_number>headermessage.record_number)&&(cjstate.time_oldstate==cjstate.time_state)) {
return(0);
}
else
{
return(1);
}
}
void get_number()
{
if(cjstate.time_oldstate==cjstate.time_state) {
cjstate.current_number++;
}
else
{
cjstate.time_oldstate=cjstate.time_state;
cjstate.current_number=1;
/*telecount.all_count=0;
telecount.success_count=0;
telecount.failure_count=0;
telecount.success_flag=0;*/
}
}
int channal_work()
{
int channum;
for(channum=0;channum<argnum;channum++) {
if( dxinfo[channum].idlework == ID_WORK )
return(1);
}
return(0);
}
int Process(int eventdev,int event)
{
DX_CST *cstp;
int channum;
int mode=EV_ASYNC;
for(channum=0;channum<argnum;channum++) {
if( dxinfo[channum].chdev==eventdev )
break;
}
if(channum>=argnum) {
printf(" %s channal is error \n", argnames[channum]);
return (0);
}
dxinfo[channum].chtime = 0;
switch(event) {
case TDX_PLAY:
//printf("tdx_play event occured");
dxinfo[channum].playflag=0;
/*if ( ATDX_STATE( dxinfo[channum].chdev ) != CS_IDLE ) {
dx_stopch( dxinfo[channum].chdev, EV_SYNC );
while ( ATDX_STATE( dxinfo[channum].chdev ) != CS_IDLE );
}*/
if(dx_sethook(dxinfo[channum].chdev,DX_ONHOOK,EV_ASYNC)==-1){
printf(" error set onhook in channal %s\n", argnames[channum]);
}
sleep(1);
break;
case TDX_SETHOOK:
cstp=(DX_CST *)sr_getevtdatap();
switch(cstp->cst_event){
case DX_ONHOOK:
dxinfo[channum].idlework = ID_UNWORK;
get_number(); //get next record number
if(cjstate.current_number>headermessage.record_number) {
break;
}
if(get_record(channum) == -1) { //取得记录数据
printf(" Get the number %ld of record error in channal %s \n", cjstate.current_number, argnames[channum]);
//break;
}
if(dx_sethook(dxinfo[channum].chdev,DX_OFFHOOK,mode)==-1){
printf(" error set offhook in channal %s\n", argnames[channum]);
break;
}
dxinfo[channum].idlework = ID_WORK;
break;
case DX_OFFHOOK:
telecount.all_count=telecount.all_count+1;
if(dial_telephone(channum) == -1) { //拨号
if(dx_sethook(dxinfo[channum].chdev,DX_ONHOOK,mode)==-1){
dxinfo[channum].idlework = ID_UNWORK;
printf(" error set onhook in channal %s\n", argnames[channum]);
}
}
break;
}
break;
case TDX_CALLP:
switch (ATDX_CPTERM(dxinfo[channum].chdev)) {
case CR_BUSY:
printf(" In Channal %s Call complete: LineBusy \n", argnames[channum]);
if (dx_sendevt(dxinfo[channum].chdev, TDX_PLAY, iott_cjvalue[channum], sizeof(DX_IOTT), EVFL_SENDSELF) == -1)
{
printf(" dx_sendevt failed in channal %s\n", argnames[channum]);
}
break;
case CR_CEPT:
printf(" In Channal %s Call complete: Operator Intercept \n", argnames[channum]);
if (dx_sendevt(dxinfo[channum].chdev, TDX_PLAY, iott_cjvalue[channum], sizeof(DX_IOTT), EVFL_SENDSELF) == -1)
{
printf(" dx_sendevt failed in channal %s\n", argnames[channum]);
}
break;
case CR_CNCT:
switch(ATDX_CONNTYPE(dxinfo[channum].chdev)) {
case CON_CAD:
printf(" In Channal %s Call complete: Connection due to cadence break \n", argnames[channum]);
if (dx_sendevt(dxinfo[channum].chdev, TDX_PLAY, iott_cjvalue[channum], sizeof(DX_IOTT), EVFL_SENDSELF) == -1)
{
printf(" dx_sendevt failed in channal %s\n", argnames[channum]);
}
break;
case CON_LPC:
printf(" In Channal %s Call complete: Connection due to loop current drop \n", argnames[channum]);
if (dx_sendevt(dxinfo[channum].chdev, TDX_PLAY, iott_cjvalue[channum], sizeof(DX_IOTT), EVFL_SENDSELF) == -1)
{
printf(" dx_sendevt failed in channal %s\n", argnames[channum]);
}
break;
case CON_PVD:
telecount.success_flag=1;
printf(" In Channal %s Call complete: Connection due to Positive Voice Detection \n", argnames[channum]);
Play_value(teleinfo[channum].zzrq,teleinfo[channum].dkbj,teleinfo[channum].dklx, teleinfo[channum].hjje, 1, iott_cjvalue[channum], channum); //play voice
break;
case CON_PAMD:
printf(" In Channal %s Call complete: Connection due to Positive Answering Machine Detection \n", argnames[channum]);
if (dx_sendevt(dxinfo[channum].chdev, TDX_PLAY, iott_cjvalue[channum], sizeof(DX_IOTT), EVFL_SENDSELF) == -1)
{
printf(" dx_sendevt failed in channal %s\n", argnames[channum]);
}
break;
}
break;
case CR_ERROR:
printf(" In Channal %s Call complete: Error condition \n", argnames[channum]);
if (dx_sendevt(dxinfo[channum].chdev, TDX_PLAY, iott_cjvalue[channum], sizeof(DX_IOTT), EVFL_SENDSELF) == -1)
{
printf(" dx_sendevt failed in channal %s\n", argnames[channum]);
}
break;
case CR_FAXTONE:
printf(" In Channal %s Call complete: FAX tone detected \n", argnames[channum]);
if (dx_sendevt(dxinfo[channum].chdev, TDX_PLAY, iott_cjvalue[channum], sizeof(DX_IOTT), EVFL_SENDSELF) == -1)
{
printf(" dx_sendevt failed in channal %s\n", argnames[channum]);
}
break;
case CR_NOANS:
printf(" In Channal %s Call complete: No answer \n", argnames[channum]);
if (dx_sendevt(dxinfo[channum].chdev, TDX_PLAY, iott_cjvalue[channum], sizeof(DX_IOTT), EVFL_SENDSELF) == -1)
{
printf(" dx_sendevt failed in channal %s\n", argnames[channum]);
}
break;
case CR_NODIALTONE:
printf(" In Channal %s Call complete: No dialtone detected \n", argnames[channum]);
if (dx_sendevt(dxinfo[channum].chdev, TDX_PLAY, iott_cjvalue[channum], sizeof(DX_IOTT), EVFL_SENDSELF) == -1)
{
printf(" dx_sendevt failed in channal %s\n", argnames[channum]);
}
break;
case CR_NORB:
printf(" In Channal %s Call complete: No ringback detected \n", argnames[channum]);
if (dx_sendevt(dxinfo[channum].chdev, TDX_PLAY, iott_cjvalue[channum], sizeof(DX_IOTT), EVFL_SENDSELF) == -1)
{
printf(" dx_sendevt failed in channal %s\n", argnames[channum]);
}
break;
case CR_STOPD:
printf(" In Channal %s Call complete: User abort \n", argnames[channum]);
if (dx_sendevt(dxinfo[channum].chdev, TDX_PLAY, iott_cjvalue[channum], sizeof(DX_IOTT), EVFL_SENDSELF) == -1)
{
printf(" dx_sendevt failed in channal %s\n", argnames[channum]);
}
break;
}
if (telecount.success_flag==1) {
telecount.success_count=telecount.success_count+1;
telecount.success_flag=0;
}
else
{
telecount.failure_count=telecount.failure_count+1;
}
printf("the success cuijiao number is %ld , the all cuijiao number is %ld in period of %s"\n,
telecount.success_count,telecount.all_count,period[cjstate.time_state-1]);
break;
default:
printf(" Other Event occured in channal %s\n", argnames[channum]);
//printf("event=%d\n",event);
if (dx_sendevt(dxinfo[channum].chdev, TDX_PLAY, iott_cjvalue[channum], sizeof(DX_IOTT), EVFL_SENDSELF) == -1)
{
printf(" dx_sendevt failed in channal %s\n", argnames[channum]);
}
break;
}
return(0);
}
int dial_telephone(int channum)
{
DX_CAP cap;
int mode = EV_ASYNC;
dx_clrcap(&cap);
printf(" Dialing %s with PerfectCall in Channal %s\n", teleinfo[channum].telephone, argnames[channum]);
mode |= DX_CALLP;
// get parameters for PerfectCall
cap.ca_dtn_pres = dxinfo[channum].callp.ca_dtn_pres;
cap.ca_dtn_npres = dxinfo[channum].callp.ca_dtn_npres;
cap.ca_dtn_deboff = dxinfo[channum].callp.ca_dtn_deboff;
cap.ca_noanswer = dxinfo[channum].callp.ca_noanswer;
cap.ca_intflg = dxinfo[channum].callp.ca_intflg;
if (dx_dial(dxinfo[channum].chdev, teleinfo[channum].telephone, &cap, mode) == -1) {
printf(" Dialing %s Error in Channal %s\n", teleinfo[channum].telephone, argnames[channum]);
return(-1);
}
return(1);
}
int get_header()
{
int loop_count;
int dkbj_find=0;
int dklx_find=0;
int hjje_find=0;
int telephone_find=0;
unsigned char* record_header;
char* ls_compare;
unsigned char* ls_record;
recordmessage.dkbj_offset=1;
recordmessage.dkbj_length=0;
recordmessage.dklx_offset=1;
recordmessage.dklx_length=0;
recordmessage.hjje_offset=1;
recordmessage.hjje_length=0;
recordmessage.telephone_offset=1;
recordmessage.telephone_length=0;
if((headermessage.handle=fopen(headermessage.szdbffile,"rb"))==NULL) {
printf(" Can't open %s file \n",headermessage.szdbffile);
Sys_exit(MAXFILE,argnum);
}
if(fseek(headermessage.handle,32,SEEK_CUR)!=0) {
printf(" Seek handle of %s file error \n",headermessage.szdbffile);
fclose(headermessage.handle);
return(0);
}
if((record_header=(unsigned char*)malloc(headermessage.header_length-32))==NULL) {
printf(" Not enough memory to allocate buffer \n");
fclose(headermessage.handle);
return(0);
}
if(fread(record_header,headermessage.header_length-32,1,headermessage.handle)==0) {
printf(" Read %s file's header error \n",headermessage.szdbffile);
free(record_header);
fclose(headermessage.handle);
return(0);
}
loop_count=headermessage.header_length/32-1;
ls_record=record_header;
while((ls_record[0]!=13)&&(loop_count!=0)){
loop_count--;
ls_compare=(char*)ls_record;
if(dkbj_find==0) {
if(strcmp(ls_compare,dkbj_name)!=0) {
recordmessage.dkbj_offset+=ls_record[16];
}
else
{
recordmessage.dkbj_length=ls_record[16];
dkbj_find=1;
}
}
if(telephone_find==0) {
if(strcmp(ls_compare,telephone_name)!=0) {
recordmessage.telephone_offset+=ls_record[16];
}
else
{
recordmessage.telephone_length=ls_record[16];
telephone_find=1;
}
}
if(dklx_find==0) {
if(strcmp(ls_compare,dklx_name)!=0) {
recordmessage.dklx_offset+=ls_record[16];
}
else
{
recordmessage.dklx_length=ls_record[16];
dklx_find=1;
}
}
if(hjje_find==0) {
if(strcmp(ls_compare,hjje_name)!=0) {
recordmessage.hjje_offset+=ls_record[16];
}
else
{
recordmessage.hjje_length=ls_record[16];
hjje_find=1;
}
}
if((dkbj_find==1)&&(telephone_find==1)&&(dklx_find==1)&&(hjje_find==1)) {
break;
}
ls_record+=32;
}
free(record_header);
if((dkbj_find==0)||(telephone_find==0)||(dklx_find==0)||(hjje_find==0)) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -