inline void onFindImpl(LocalDataHolder<TMatch, TGlobalHolder, TScoreExtension> & lH, TSeedId const & seedId, TSubjOcc subjOcc) { if (TGlobalHolder::indexIsFM) // positions are reversed setSeqOffset(subjOcc, length(lH.gH.subjSeqs[getSeqNo(subjOcc)]) - getSeqOffset(subjOcc) - lH.options.seedLength); Match m {static_cast<Match::TQId>(lH.seedRefs[seedId]), static_cast<Match::TSId>(getSeqNo(subjOcc)), static_cast<Match::TPos>(lH.seedRanks[seedId] * lH.options.seedOffset), static_cast<Match::TPos>(getSeqOffset(subjOcc))}; bool discarded = false; auto const halfSubjL = lH.options.seedLength / 2; if (!sIsTranslated(lH.gH.blastProgram)) { for (unsigned k = 0; k < length(lH.gH.segIntStarts[m.subjId]); ++k) { // more than half of the seed falls into masked interval if (intervalOverlap(m.subjStart, m.subjStart + lH.options.seedLength, lH.gH.segIntStarts[m.subjId][k], lH.gH.segIntEnds[m.subjId][k]) >= halfSubjL) { ++lH.stats.hitsMasked; discarded = true; break; } } } if ((!discarded) && (!seedLooksPromising(lH, m))) { discarded = true; ++lH.stats.hitsFailedPreExtendTest; } if (!discarded) lH.matches.emplace_back(m); }
inline void onFindDoubleIndex(LocalDataHolder<TMatch, TGlobalHolder, TScoreExtension> & lH, TFinder const & finder) { auto qryOccs = getOccurrences(back(finder.patternStack)); auto subjOccs = getOccurrences(back(finder.textStack)); lH.stats.hitsAfterSeeding += length(qryOccs) * length(subjOccs); for (unsigned i = 0; i < length(qryOccs); ++i) for (unsigned j = 0; j < length(subjOccs); ++j) onFindImpl(lH, getSeqNo(qryOccs[i]), subjOccs[j]); }
//function checks if incoming packet is already in buffer //verified int checkSpace(int seq,char ** space,int *loc){ int k; for(k=0;k<5;k++){ if(loc[k]==0){ continue; } if( seq == getSeqNo(space[k],1)){ return 1; } } return 0; }
//establishes by waiting for SYN packet from sender. Returns SENDER seq # //verified int estConn( struct sockaddr_in *cli_addr,int sockfd,struct Info *c,char * dip, char * dpt){ //printf("Waiting for sender....\n"); char buffer[MAXBUFLEN]; socklen_t cli_len = sizeof(*cli_addr); int verify = recvfrom(sockfd, buffer, MAXBUFLEN-1 , 0,(struct sockaddr *)&*cli_addr, &cli_len); if(verify==-1){ printf("error on recvfrom()\nExit..\n"); exit(1); } buffer[verify] = '\0'; int type = isA(buffer); if(type == 1){ //got syn printEvent(2,2,buffer,"SYN",dip,dpt); c->syn_rcv+=1; c->total_bytes_rcv+=strlen(buffer); c->unique_bytes_rcv+=strlen(buffer); c->total_packets_rcv+=1; c->unique_packets_rcv+=1; } else{ return -1; } int s_seq = getSeqNo(buffer,1) + strlen(buffer); char * tosend = makePack(s_seq,1); //printf("tosend:\n%s\n",tosend); int charsent; if ((charsent = sendto(sockfd, tosend, strlen(tosend), 0,(struct sockaddr *)&*cli_addr, cli_len) == -1)) { perror("sws: error in sendto()"); exit(1); } printEvent(1,2,tosend,"ACK",dip,dpt); c->ack_sent+=1; free(tosend); return s_seq; }