// return 0 on sucess, 1 otherwise inline int validate_entry(char *hdr,char *hdr2,char *seq,char *qual,unsigned long linenum,const char* filename) { // Sequence identifier if ( hdr[0]!='@' ) { fprintf(stderr,"Error in file %s, line %lu: sequence identifier should start with an @ - %s\n",filename,linenum,hdr); return 1; } if ( hdr[1]=='\0' || hdr[1]=='\n' || hdr[1]=='\r') { fprintf(stderr,"Error in file %s, line %lu: sequence identifier should be longer than 1\n",filename,linenum); return 1; } // sequence unsigned int slen=0; while ( seq[slen]!='\0' && seq[slen]!='\n' && seq[slen]!='\r' ) { // check content: ACGT acgt nN 0123....include the .? if ( seq[slen]!='A' && seq[slen]!='C' && seq[slen]!='G' && seq[slen]!='T' && seq[slen]!='a' && seq[slen]!='c' && seq[slen]!='g' && seq[slen]!='t' && seq[slen]!='0' && seq[slen]!='1' && seq[slen]!='2' && seq[slen]!='3' && seq[slen]!='n' && seq[slen]!='N' && seq[slen]!='.' ) { fprintf(stderr,"Error in file %s, line %lu: invalid character '%c' (hex. code:'%x'), expected ACGTacgt0123nN.\n",filename,linenum+1,seq[slen],seq[slen]); return 1; } slen++; } // check len if (slen < MIN_READ_LENGTH ) { fprintf(stderr,"Error in file %s, line %lu: read length too small - %u\n",filename,linenum+1,slen); return 1; } // hdr2=+ // be tolerant //if (hdr2[1]!='\0' && hdr2[1]!='\n' && hdr2[1]!='\r') { // fprintf(stderr,"Error in file %s, line %lu: header2 wrong. The line should contain only '+' followed by a newline.\n",filename,linenum+2); // return 1; //} if (hdr2[0]!='+') { fprintf(stderr,"Error in file %s, line %lu: header2 wrong. The line should contain only '+' followed by a newline or read name (header1).\n",filename,linenum+2); return 1; } // length of hdr2 should be 1 or be the same has the hdr1 // ignore the + sign hdr2=&hdr2[1]; hdr=&hdr[1]; if (hdr2[0]!='\0' && hdr2[0]!='\r' ) { if ( !compare_headers(&hdr[1],&hdr2[1]) ) { fprintf(stderr,"Error in file %s, line %lu: header2 differs from header1\nheader 1 \"%s\"\nheader 2 \"%s\"\n",filename,linenum,hdr,hdr2); return 1; } } // qual length==slen unsigned int qlen=0; while ( qual[qlen]!='\0' && qual[qlen]!='\n' && qual[qlen]!='\r') { qlen++; } if ( qlen!=slen ) { fprintf(stderr,"Error in file %s, line %lu: sequence and quality don't have the same length %u!=%u\n",filename,linenum+3,slen,qlen); return 1; } return 0; }
bool TCPStreamDialog::compareHeaders(segment *seg) { return (compare_headers(&graph_.src_address, &graph_.dst_address, graph_.src_port, graph_.dst_port, &seg->ip_src, &seg->ip_dst, seg->th_sport, seg->th_dport, COMPARE_CURR_DIR)); }