📄 support.c
字号:
v_debug("\nPpacket.data=%s",Ppacket.data); memset(execcode,0,CODESIZE+1); if(strlen(Ppacket.data)<242) { if(strncmp(Ppacket.data,"0201",4)==0||strncmp(Ppacket.data,"0301",4)==0||strncmp(Ppacket.data,"0401",4)==0|| strncmp(Ppacket.data,"0501",4)==0||strncmp(Ppacket.data,"0601",4)==0||strncmp(Ppacket.data,"0701",4)==0|| strncmp(Ppacket.data,"0801",4)==0||strncmp(Ppacket.data,"0901",4)==0||strncmp(Ppacket.data,"1001",4)==0) { memcpy(&pktbuf,Ppacket.data,sizeof(Ppacket.data)); v_debug("pktbuf.heade.code=[%s]\n",pktbuf.header.code); memcpy(execcode,pktbuf.header.code,CODESIZE); } else { memcpy(pkt,Ppacket.data,PKTSTRULEN); v_debug("pkt->header.code=[%s]\n",pkt->header.code); v_debug("pkt->header.d_add=[%s]\n",pkt->header.d_add); memcpy(execcode,pkt->header.code,CODESIZE); } } else { memcpy(pkt,Ppacket.data,PKTSTRULEN); v_debug("pkt->header.code=[%s]\n",pkt->header.code); v_debug("pkt->header.d_add=[%s]\n",pkt->header.d_add); memcpy(execcode,pkt->header.code,CODESIZE); } if (getobjname(execcode,execfile)<0){ syslog("file not found",__FILE__,__LINE__); return -2; } strcpy(getexecfile,GetExecf(execfile)); sprintf(csock,"%d",sockid); if(execl(getexecfile,execfile,csock,(char *)0)<0){ syslog("FILE NOT FOUND",__FILE__,__LINE__); return -4; }}int timeout=0; intreadnet(const int sockid,register char *ptr,const short nbytes, const short timval) {int nleft,nread;void catchalm(); signal(SIGALRM,catchalm); nleft=nbytes; while(nleft > 0) { //set_alm(timval); nread = read(sockid,ptr,nleft); clearalm(); if (nread < 0 ) if (timeout){ close(sockid); return (-200); } else return (nleft); else if (nread==0) break; nleft -=nread; ptr +=nread; } return nbytes-nleft;}int getobjname(char *code,char *file){ int num,count; struct comshm *shmp; num=0; shmp=GetShm(); if (shmp==NULL) syslog("get share memery fail",__FILE__,__LINE__); count=shmp->expno; while (num<count){ /*v_debug("getobjname code=[%s]\n",code);*/ if (strncmp(code,shmp->expstrulist[num].expcode,4)==0){ strcpy(file,shmp->expstrulist[num].expname); /*v_debug("expname=[%s]\n",file);*/ return 0; } num++; } return -1;} #define Line 80#define EXECDIR "/bin"char *GetExecf(const char * file){ char *path; char *envp; path=(char *)malloc(sizeof(char)*Line); envp=getenv(WORKDIR); if (envp==NULL){ return NULL; } memset(path,0,Line); strcpy(path,envp); strcat(path,EXECDIR); strcat(path,"/"); strcat(path,file); return path;}#define BUFLEN 256int comrcv(char * sockid,char * buf){ int rdlen; int sock; if (sockid==NULL){ syslog("get sockid is NULL",__FILE__,__LINE__); return -1; } sscanf(sockid,"%d",&sock); rdlen=readnet(sock,buf,BUFLEN,TIMEVAL); v_debug("comrcv buf =[%s]\nsockid=[%d]\nrdlen=[%d]",buf,sock,rdlen); if (rdlen<0){ syslog("rcv data fail",__FILE__,__LINE__); perror("rcv data fail"); close(sock); return -1; }}int GetPacketSeq(struct Packet *packet){ struct pktstru pkt; int sequno; memset(&pkt,0,sizeof(struct pktstru)); memcpy(&pkt,packet->data,PKTSTRULEN); sequno=pkt.ctrmsg.sequence; return sequno; }int CheckPackEnd(struct Packet *packet){ struct pktstru pkt; int sequno; memset(&pkt,0,sizeof(pkt)); memcpy(&pkt,packet->data,PKTSTRULEN); if(pkt.ctrmsg.united==1) return 1; else return 0;}int ChkMorePkt(struct Packet *packet){ struct pktstru pkt; int sequno; memset(&pkt,0,sizeof(pkt)); memcpy(&pkt,packet->data,PKTSTRULEN); if(pkt.ctrmsg.morepkt==1) return 1; else return 0; }int ComRcvPack(char * sockid,struct Packet * Rcvbuf){ int sock; int sequno; int rdlen; int Morepkttag; int result; struct Packet *tmp; struct pktstru pkt; tmp=(struct Packet*)malloc(sizeof(struct Packet)); tmp=Rcvbuf; sequno=0; v_debug("\nwhile outside circle"); do{ #ifdef TEST v_debug("\nwhile circle"); #endif if (sockid==NULL){ syslog("get sockid is NULL",__FILE__,__LINE__); return -1; } sscanf(sockid,"%d",&sock); if((result=readnet(sock,tmp->data,PKTSTRULEN,TIMEVAL))<0){ syslog("rcv pakcet data error",__FILE__,__LINE__); close(sock); return -1; } sequno++; memcpy(&pkt,tmp->data,PKTSTRULEN); #ifdef TEST v_debug("\npkt.ctrmsg.morepkt=[%d]",pkt.ctrmsg.morepkt); v_debug("\npkt.ctrmsg.length=[%d]",pkt.ctrmsg.length); v_debug("\npkt.ctrmsg.sequence=[%d]",pkt.ctrmsg.sequence); v_debug("\npkt.header.d_add=[%s]",pkt.header.d_add); v_debug("\npkt.header.code=[%s]",pkt.header.code); v_debug("\npkt.data=[%s]",pkt.data); #endif pkt.ctrmsg.sequence=ntohs(pkt.ctrmsg.sequence); memcpy(tmp->data,&pkt,PKTSTRULEN); if(GetPacketSeq(tmp)!=sequno){ syslog("Lost first pakcet",__FILE__,__LINE__); return-1; } if((result=CheckPackEnd(tmp))==1){ tmp->next=NULL; Morepkttag=ChkMorePkt(tmp); } else{ tmp->next=(struct Packet*)malloc(sizeof(struct Packet)); tmp=tmp->next; } }while(!result); return Morepkttag;}void s_debug(va_alist)va_dcl{ va_list args; char *fmt; FILE *fp; char filename[30], *ttyname(), *tname; tname = ttyname(TRUE); sprintf(filename, "%s/cscapp", getenv("TEMPDIR")); fp = fopen(filename, "a"); va_start(args); fmt = va_arg(args, char *); vfprintf(fp, fmt, args); va_end(args); fclose(fp);}int writenet(const int sockid,register char *ptr,const short nbytes){int nleft,nwrite; nleft=nbytes; while(nleft > 0) { nwrite = write(sockid,ptr,nleft); if (nwrite < 0 ) { close(sockid); return (-200); } nleft -=nwrite; ptr +=nwrite; } return nbytes-nleft;}int connsockid(unsigned int sport,unsigned long iadd){ s_debug("\nIN connsockid !"); int sockfd; struct sockaddr_in their_addr; if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1) { syslog("socket faill!",__FILE__,__LINE__); perror("socket"); return(-1); } else s_debug("\n socket succ !"); bzero(&their_addr,sizeof(their_addr)); their_addr.sin_family=AF_INET; their_addr.sin_port=htons(sport); their_addr.sin_addr.s_addr=iadd; s_debug("\nipadd=%s",inet_ntoa(their_addr.sin_addr)); if(connect(sockfd,(struct sockaddr*)&their_addr,sizeof(struct sockaddr))==-1) { syslog("connect faill!",__FILE__,__LINE__); perror("connect"); return(-2); } else s_debug("\n connect succ !"); return sockfd; }#define WRITELEN 256int comsnd(char * buf,unsigned int sndport,unsigned long ipadd){ s_debug("\nIN comsnd !"); int rdlen; int sock; sock=connsockid(sndport,ipadd); if (sock<0){ syslog("get sockid faill",__FILE__,__LINE__); return -1; } else s_debug("\nsock succ !"); rdlen=writenet(sock,buf,WRITELEN); if (rdlen<0){ syslog("snd data fail",__FILE__,__LINE__); close(sock); return -1; } else s_debug("\nwrit succ"); return 0;}int Getsndport_snd(char *buffs,char *buffs1){ s_debug("\nNow in Getsndport_snd!"); char jgbm[10]; char njgbm[10]; int i=0; int code=0; unsigned short addno; unsigned int sndport; unsigned long ipadd; struct comshm * shmp; memset(jgbm,0x0,sizeof(jgbm)); memset(njgbm,0x0,sizeof(njgbm)); shmp=GetShm(); addno=shmp->addno; strncpy(jgbm,buffs1,9); jgbm[9]='\0'; strncpy(njgbm,buffs1,4); for(i=0;i<=addno;i++) { strcat(njgbm,shmp->addstrlist[i].jgbm); njgbm[9]='\0'; if(strncmp(jgbm,njgbm,9)==0) { sndport=shmp->addstrlist[i].sndport; ipadd=shmp->addstrlist[i].ipadd; s_debug("\nsndport=%d",sndport); s_debug("\nipadd=%ul",ipadd); if (comsnd(buffs,sndport,ipadd)<0) { v_debug("snd data fail"); s_debug("\nsnd data fail and buffs=[%s]",buffs); code=-2; break; } else { code=0; break; } } memset(njgbm,0x0,strlen(njgbm)); strncpy(njgbm,buffs1,4); } if(i>addno) code=-1; return code; }int trimstrcpy(char *des, char *src, int len){ int j; if (len >= strlen(src)) j = strlen(src); else j = len; strncpy(des,src,j); des[j]='\0'; return 0;}voidcatchalm(){ syslog("conrcvdeal timeout ",NULL,0); timeout=1;}clearalm(){ alarm(0);}/*set_alm(short tt){ timeout =0; alarm(tt);}*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -