Ejemplo n.º 1
0
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);
}
Ejemplo n.º 2
0
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]);
}
Ejemplo n.º 3
0
//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;

}
Ejemplo n.º 4
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;

}