亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? bnfa_search.c

?? 著名的入侵檢測系統snort的最新版本的源碼
?? C
?? 第 1 頁 / 共 4 頁
字號:
       if( !t )	   {		   return 0;	   }       while(t && (t->key < BNFA_MAX_ALPHABET_SIZE ) )       {         full[ t->key ] = t->next_state;         tcnt++;         t = t->next;       }       return tcnt;    }}/**  Add pattern characters to the initial upper case trie*  unless Exact has been specified, in  which case all patterns*  are assumed to be case specific.*/static int _bnfa_add_pattern_states (bnfa_struct_t * bnfa, bnfa_pattern_t * p) {  int             state, next, n;  unsigned char * pattern;  bnfa_match_node_t  * pmn;  n       = p->n;  pattern = p->casepatrn;  state   = 0;  /*   *  Match up pattern with existing states  */   for (; n > 0; pattern++, n--)  {      if( bnfa->bnfaCaseMode == BNFA_CASE )        next = _bnfa_list_get_next_state(bnfa,state,*pattern);      else        next = _bnfa_list_get_next_state(bnfa,state,xlatcase[*pattern]);      if( next == BNFA_FAIL_STATE || next == 0 )      {         break;      }      state = next;  }    /*  *   Add new states for the rest of the pattern bytes, 1 state per byte, uppercase  */   for (; n > 0; pattern++, n--)  {      bnfa->bnfaNumStates++;       if( bnfa->bnfaCaseMode == BNFA_CASE )      {        if( _bnfa_list_put_next_state(bnfa,state,*pattern,bnfa->bnfaNumStates)  < 0 )             return -1;      }      else      {        if( _bnfa_list_put_next_state(bnfa,state,xlatcase[*pattern],bnfa->bnfaNumStates)  < 0 )             return -1;      }      state = bnfa->bnfaNumStates;      if ( bnfa->bnfaNumStates >= bnfa->bnfaMaxStates )      {	       return -1;      }  }  /*  Add a pattern to the list of patterns terminated at this state */  pmn = (bnfa_match_node_t*)BNFA_MALLOC(sizeof(bnfa_match_node_t),bnfa->matchlist_memory);  if( !pmn )  {	  return -1;  }  pmn->data = p;  pmn->next = bnfa->bnfaMatchList[state];  bnfa->bnfaMatchList[state] = pmn;  return 0;}/**   Build a non-deterministic finite automata using Aho-Corasick construction*   The keyword trie must already be built via _bnfa_add_pattern_states()*/ static int _bnfa_build_nfa (bnfa_struct_t * bnfa) {    int             r, s, i;    QUEUE           q, *queue = &q;    bnfa_state_t     * FailState = bnfa->bnfaFailState;    bnfa_match_node_t ** MatchList = bnfa->bnfaMatchList;    bnfa_match_node_t  * mlist;    bnfa_match_node_t  * px;  	/* Init a Queue */ 	queue_init (queue);  	/* Add the state 0 transitions 1st, 	* the states at depth 1, fail to state 0 	*/ 	for (i = 0; i < bnfa->bnfaAlphabetSize; i++)	{		/* note that state zero deos not fail, 		*  it just returns 0..nstates-1 		*/		s = _bnfa_list_get_next_state(bnfa,0,i); 		if( s ) /* don't bother adding state zero */		{		  if( queue_add (queue, s) ) 		  {              return -1;		  }		  FailState[s] = 0;		}	}  	/* Build the fail state successive layer of transitions */	while (queue_count (queue) > 0)	{		r = queue_remove (queue);      		/* Find Final States for any Failure */ 		for(i = 0; i<bnfa->bnfaAlphabetSize; i++)		{			int fs, next;			s = _bnfa_list_get_next_state(bnfa,r,i);			if( s == BNFA_FAIL_STATE )				continue;		   			if( queue_add (queue, s) ) 			{				return -1;			} 			fs = FailState[r];			/* 			*  Locate the next valid state for 'i' starting at fs 			*/ 			while( (next=_bnfa_list_get_next_state(bnfa,fs,i)) == BNFA_FAIL_STATE )			{				fs = FailState[fs];			}	      			/*			*  Update 's' state failure state to point to the next valid state			*/ 			FailState[s] = next;	      			/*			*  Copy 'next'states MatchList into 's' states MatchList, 			*  we just create a new list nodes, the patterns are not copied.			*/ 			for( mlist = MatchList[next];mlist;mlist = mlist->next)			{				/* Dup the node, don't copy the data */				px = (bnfa_match_node_t*)BNFA_MALLOC(sizeof(bnfa_match_node_t),bnfa->matchlist_memory);				if( !px )				{					return 0;				}				px->data = mlist->data; 		  				px->next = MatchList[s]; /* insert at head */		 				MatchList[s] = px;			}		}	}  	/* Clean up the queue */	queue_free (queue);	return 0;}#ifdef ALLOW_NFA_FULL/**  Conver state machine to full format*/static int _bnfa_conv_list_to_full(bnfa_struct_t * bnfa) {  int          k;  bnfa_state_t  * p;  bnfa_state_t ** NextState = bnfa->bnfaNextState;  for(k=0;k<bnfa->bnfaNumStates;k++)  {    p = BNFA_MALLOC(sizeof(bnfa_state_t)*bnfa->bnfaAlphabetSize,bnfa->nextstate_memory);    if(!p)    {      return -1;    }    _bnfa_list_conv_row_to_full( bnfa, (bnfa_state_t)k, p );    NextState[k] = p; /* now we have a full format row vector */  }  return 0;}#endif/**  Convert state machine to csparse format**  Merges state/transition/failure arrays into one.**  For each state we use a state-word followed by the transition list for the state*  sw(state 0 )...tl(state 0) sw(state 1)...tl(state1) sw(state2)...tl(state2) ....*  *  The transition and failure states are replaced with the start index of transition state,*  this eliminates the NextState[] lookup....**  The compaction of multiple arays into a single array reduces the total number of*  states that can be handled since the max index is 2^24-1, whereas without compaction*  we had 2^24-1 states.  */static int _bnfa_conv_list_to_csparse_array(bnfa_struct_t * bnfa) {  int            m, k, i, nc;  bnfa_state_t      state;  bnfa_state_t    * FailState = (bnfa_state_t  *)bnfa->bnfaFailState;  bnfa_state_t    * ps; /* transition list */  bnfa_state_t    * pi; /* state indexes into ps */  bnfa_state_t      ps_index=0;  unsigned       nps;  bnfa_state_t      full[BNFA_MAX_ALPHABET_SIZE];    /* count total state transitions, account for state and control words  */  nps = 0;  for(k=0;k<bnfa->bnfaNumStates;k++)  {	nps++; /* state word */	nps++; /* control word */	/* count transitions */	nc = 0;	_bnfa_list_conv_row_to_full(bnfa, (bnfa_state_t)k, full );	for( i=0; i<bnfa->bnfaAlphabetSize; i++ )	{		state = full[i] & BNFA_SPARSE_MAX_STATE;		if( state != 0 )		{			nc++;		}		}	/* add in transition count */   	if( (k == 0 && bnfa->bnfaForceFullZeroState) || nc > BNFA_SPARSE_MAX_ROW_TRANSITIONS )	{		nps += BNFA_MAX_ALPHABET_SIZE;	}	else	{   	    for( i=0; i<bnfa->bnfaAlphabetSize; i++ )		{		   state = full[i] & BNFA_SPARSE_MAX_STATE;		   if( state != 0 )		   {		       nps++;		   }			}	}  }  /* check if we have too many states + transitions */  if( nps > BNFA_SPARSE_MAX_STATE )  {	  /* Fatal */	  return -1;  }  /*    Alloc The Transition List - we need an array of bnfa_state_t items of size 'nps'  */  ps = BNFA_MALLOC( nps*sizeof(bnfa_state_t),bnfa->nextstate_memory);  if( !ps )   {	  /* Fatal */	  return -1;  }  bnfa->bnfaTransList = ps;    /*      State Index list for pi - we need an array of bnfa_state_t items of size 'NumStates'   */  pi = BNFA_MALLOC( bnfa->bnfaNumStates*sizeof(bnfa_state_t),bnfa->nextstate_memory);  if( !pi )   {	  /* Fatal */	  return -1;  }  /*       Build the Transition List Array  */  for(k=0;k<bnfa->bnfaNumStates;k++)  {	pi[k] = ps_index; /* save index of start of state 'k' */	ps[ ps_index ] = k; /* save the state were in as the 1st word */		ps_index++;  /* skip past state word */	/* conver state 'k' to full format */	_bnfa_list_conv_row_to_full(bnfa, (bnfa_state_t)k, full );	/* count transitions */	nc = 0;	for( i=0; i<bnfa->bnfaAlphabetSize; i++ )	{		state = full[i] & BNFA_SPARSE_MAX_STATE;		if( state != 0 )		{			nc++;		}		}	/* add a full state or a sparse state  */	if( (k == 0 && bnfa->bnfaForceFullZeroState) || 		nc > BNFA_SPARSE_MAX_ROW_TRANSITIONS )	{		/* set the control word */		ps[ps_index]  = BNFA_SPARSE_FULL_BIT;		ps[ps_index] |= FailState[k] & BNFA_SPARSE_MAX_STATE;		if( bnfa->bnfaMatchList[k] )		{            ps[ps_index] |= BNFA_SPARSE_MATCH_BIT;		}		ps_index++;  		/* copy the transitions */		_bnfa_list_conv_row_to_full(bnfa, (bnfa_state_t)k, &ps[ps_index] ); 		ps_index += BNFA_MAX_ALPHABET_SIZE;  /* add in 256 transitions */	}   	else	{		/* set the control word */   		ps[ps_index]  = nc<<BNFA_SPARSE_COUNT_SHIFT ;   		ps[ps_index] |= FailState[k]&BNFA_SPARSE_MAX_STATE;   		if( bnfa->bnfaMatchList[k] )	  	{       		ps[ps_index] |= BNFA_SPARSE_MATCH_BIT;	  	}		ps_index++;		/* add in the transitions */   		for( m=0, i=0; i<bnfa->bnfaAlphabetSize && m<nc; i++ )	  	{       		state = full[i] & BNFA_SPARSE_MAX_STATE;       		if( state != 0 )		 	{           		ps[ps_index++] = (i<<BNFA_SPARSE_VALUE_SHIFT) | state;				m++;		 	}	  	}	}  }  /* sanity check we have not overflowed our buffer */  if( ps_index > nps )   {	  /* Fatal */	  return -1;  }  /*   Replace Transition states with Transition Indices.   This allows us to skip using NextState[] to locate the next state  This limits us to <16M transitions due to 24 bit state sizes, and the fact  we have now converted next-state fields to next-index fields in this array,  and we have merged the next-state and state arrays.  */  ps_index=0;  for(k=0; k< bnfa->bnfaNumStates; k++ )  {	 if( pi[k] >= nps )	 {		 /* Fatal */		 return -1;	 }	 //ps_index = pi[k];  /* get index of next state */	 ps_index++;        /* skip state id */	 /* Full Format */     if( ps[ps_index] & BNFA_SPARSE_FULL_BIT )	 {	   /* Do the fail-state */       ps[ps_index] = ( ps[ps_index] & 0xff000000 ) | 		              ( pi[ ps[ps_index] & BNFA_SPARSE_MAX_STATE ] ) ; 	   ps_index++;	   /* Do the transition-states */	   for(i=0;i<BNFA_MAX_ALPHABET_SIZE;i++)	   {		 ps[ps_index] = ( ps[ps_index] & 0xff000000 ) | 		                ( pi[ ps[ps_index] & BNFA_SPARSE_MAX_STATE ] ) ; 		 ps_index++;	   }	 }	 /* Sparse Format */	 else	 {       	nc = (ps[ps_index] & BNFA_SPARSE_COUNT_BITS)>>BNFA_SPARSE_COUNT_SHIFT;	   	   	/* Do the cw = [cb | fail-state] */   		ps[ps_index] =  ( ps[ps_index] & 0xff000000 ) |						( pi[ ps[ps_index] & BNFA_SPARSE_MAX_STATE ] ); 	   	ps_index++;	   	/* Do the transition-states */	   	for(i=0;i<nc;i++)	   	{       		ps[ps_index] = ( ps[ps_index] & 0xff000000 ) |			               ( pi[ ps[ps_index] & BNFA_SPARSE_MAX_STATE ] );		 	ps_index++;	   	}	 }	 /* check for buffer overflow again */ 	 if( ps_index > nps )	 {		 /* Fatal */		 return -1;	 }  }  BNFA_FREE(pi,bnfa->bnfaNumStates*sizeof(bnfa_state_t),bnfa->nextstate_memory);  return 0;}/**  Print the state machine - rather verbose*/void bnfaPrint(bnfa_struct_t * bnfa) {  int			   k;  bnfa_match_node_t  ** MatchList = bnfa->bnfaMatchList;  bnfa_match_node_t   * mlist;  int              ps_index=0;  bnfa_state_t      * ps=0;  if( !bnfa )       return;    if( !bnfa->bnfaNumStates ) 	  return;  if( bnfa->bnfaFormat ==BNFA_SPARSE )  {    printf("Print NFA-SPARSE state machine : %d active states\n", bnfa->bnfaNumStates);    ps = bnfa->bnfaTransList;    if( !ps )        return;  }#ifdef ALLOW_NFA_FULL  else if( bnfa->bnfaFormat ==BNFA_FULL )  {    printf("Print NFA-FULL state machine : %d active states\n", bnfa->bnfaNumStates);  }#endif      for(k=0;k<bnfa->bnfaNumStates;k++)  {    printf(" state %-4d fmt=%d ",k,bnfa->bnfaFormat);    if( bnfa->bnfaFormat == BNFA_SPARSE )    {	   unsigned i,cw,fs,nt,fb,mb;       	   ps_index++; /* skip state number */       cw = ps[ps_index]; /* control word  */	   fb = (cw &  BNFA_SPARSE_FULL_BIT)>>BNFA_SPARSE_VALUE_SHIFT;  /* full storage bit */ 	   mb = (cw &  BNFA_SPARSE_MATCH_BIT)>>BNFA_SPARSE_VALUE_SHIFT; /* matching state bit */	   nt = (cw &  BNFA_SPARSE_COUNT_BITS)>>BNFA_SPARSE_VALUE_SHIFT;/* number of transitions 0-63 */	   fs = (cw &  BNFA_SPARSE_MAX_STATE)>>BNFA_SPARSE_VALUE_SHIFT; /* fail state */	   ps_index++;  /* skip control word */	   printf("mb=%3u fb=%3u fs=%-4u ",mb,fb,fs);	   if( fb )       {         printf(" nt=%-3d : ",bnfa->bnfaAlphabetSize);         for( i=0; i<(unsigned)bnfa->bnfaAlphabetSize; i++, ps_index++  )         {     	    if( ps[ps_index] == 0  ) continue;            if( isprint(i) )               printf("%3c->%-6d\t",i,ps[ps_index]);            else               printf("%3d->%-6d\t",i,ps[ps_index]);         }       }         else       {          printf(" nt=%-3d : ",nt);          for( i=0; i<nt; i++, ps_index++ )          {              if( isprint(ps[ps_index]>>BNFA_SPARSE_VALUE_SHIFT) )               printf("%3c->%-6d\t",ps[ps_index]>>BNFA_SPARSE_VALUE_SHIFT,ps[ps_index] & BNFA_SPARSE_MAX_STATE);             else			   printf("%3d->%-6d\t",ps[ps_index]>>BNFA_SPARSE_VALUE_SHIFT,ps[ps_index] & BNFA_SPARSE_MAX_STATE);          }       }    }#ifdef ALLOW_NFA_FULL    else if( bnfa->bnfaFormat == BNFA_FULL )     {       int          i;       bnfa_state_t    state;       bnfa_state_t  * p;          bnfa_state_t ** NextState;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产日韩欧美在线一区| 日本韩国欧美三级| 日韩视频国产视频| 奇米四色…亚洲| 精品美女一区二区| 国产麻豆成人精品| 国产精品国产馆在线真实露脸 | 久久久久高清精品| 成人午夜视频在线观看| 亚洲欧美国产毛片在线| 欧美视频一区二区三区四区 | 欧美日韩精品二区第二页| 午夜精品久久久久影视| 欧美一区二区三区免费视频| 精品一二三四区| 一区在线观看免费| 欧美日韩高清一区二区| 久久se这里有精品| 中国色在线观看另类| 欧美性猛片aaaaaaa做受| 肉肉av福利一精品导航| 国产午夜精品福利| 色偷偷88欧美精品久久久| 天天操天天干天天综合网| 精品国产乱码久久久久久闺蜜| 成人av在线资源| 日韩中文欧美在线| 久久日韩精品一区二区五区| 99精品热视频| 精品一区二区影视| 中文字幕一区二区视频| 欧美精品久久99| 成人午夜在线视频| 日日欢夜夜爽一区| 国产精品美女久久久久av爽李琼| 精品视频在线免费看| 国产成人av福利| 天堂成人免费av电影一区| 久久伊人中文字幕| 欧美肥大bbwbbw高潮| 成人三级伦理片| 免费高清成人在线| 亚洲国产精品欧美一二99| 久久亚洲捆绑美女| 欧美挠脚心视频网站| 成人免费视频国产在线观看| 视频一区二区中文字幕| 亚洲人成影院在线观看| 久久网站最新地址| 欧美疯狂做受xxxx富婆| 99麻豆久久久国产精品免费| 国产一区欧美一区| 石原莉奈在线亚洲二区| 夜夜嗨av一区二区三区网页| 国产精品三级视频| 久久日韩粉嫩一区二区三区| 欧美一区二区三区不卡| 在线观看精品一区| 99麻豆久久久国产精品免费优播| 激情综合色综合久久综合| 日本va欧美va欧美va精品| 一区二区在线电影| 中文字幕在线观看不卡| 国产三级精品三级在线专区| 日韩欧美国产一区二区三区| 欧美日韩成人在线一区| 欧美亚男人的天堂| 欧洲一区二区三区在线| 色综合天天狠狠| 99国产精品国产精品久久| 国产99久久久国产精品免费看| 精品一区二区三区在线观看| 麻豆91精品视频| 久久9热精品视频| 奇米在线7777在线精品| 奇米影视在线99精品| 日韩高清在线电影| 蜜臀av性久久久久av蜜臀妖精| 视频一区免费在线观看| 日韩电影在线一区二区三区| 丝袜美腿亚洲综合| 日韩av在线播放中文字幕| 肉色丝袜一区二区| 视频一区欧美日韩| 狂野欧美性猛交blacked| 美女视频黄频大全不卡视频在线播放| 午夜电影久久久| 亚洲第一福利一区| 丝袜脚交一区二区| 美女脱光内衣内裤视频久久网站| 美女在线一区二区| 国产精品乡下勾搭老头1| 丁香另类激情小说| 91一区二区三区在线观看| 91亚洲国产成人精品一区二三| 91亚洲精品乱码久久久久久蜜桃| 在线观看91视频| 欧美肥大bbwbbw高潮| 亚洲精品一区二区三区福利| 久久日韩精品一区二区五区| 国产精品护士白丝一区av| 亚洲激情网站免费观看| 亚洲成人av电影在线| 精品中文av资源站在线观看| 成人精品电影在线观看| 在线中文字幕一区| 欧美一区二区三区免费| 国产欧美日韩另类一区| 一区二区三区美女视频| 另类中文字幕网| 成人午夜碰碰视频| 欧美日韩免费在线视频| 日韩女优毛片在线| 国产精品家庭影院| 青青青爽久久午夜综合久久午夜| 激情小说欧美图片| 91极品美女在线| 欧美精品一区二区三区四区| 亚洲婷婷综合色高清在线| 日精品一区二区三区| 成人免费视频免费观看| 7777精品伊人久久久大香线蕉| 国产婷婷色一区二区三区四区| 一区二区三区四区av| 久久av中文字幕片| 欧美在线视频全部完| 亚洲精品一区二区三区四区高清| 艳妇臀荡乳欲伦亚洲一区| 国产在线日韩欧美| 欧美日韩高清影院| ●精品国产综合乱码久久久久 | 亚洲日本va在线观看| 蜜臀av一级做a爰片久久| av在线不卡观看免费观看| 欧美成人官网二区| 一区二区三区视频在线看| 国产精品系列在线播放| 777奇米成人网| 亚洲精品中文字幕在线观看| 国产麻豆成人传媒免费观看| 777xxx欧美| 亚洲一区二区成人在线观看| 国产成人精品免费网站| 欧美成人三级在线| 天天影视网天天综合色在线播放| 播五月开心婷婷综合| 精品国产免费人成在线观看| 五月综合激情网| 色美美综合视频| 中文字幕免费观看一区| 国产综合色精品一区二区三区| 欧美日韩亚洲综合一区二区三区| 日韩一区欧美小说| 国产黄人亚洲片| ww亚洲ww在线观看国产| 久久99在线观看| 日韩久久久精品| 青娱乐精品视频| 欧美一级专区免费大片| 日本免费新一区视频| 欧美精三区欧美精三区| 亚洲福利视频一区二区| 欧洲一区二区三区免费视频| 亚洲黄网站在线观看| 日本韩国欧美在线| 一区二区三区在线免费| 色成人在线视频| 亚洲高清免费一级二级三级| 一本色道综合亚洲| 亚洲国产日日夜夜| 欧美日韩国产在线播放网站| 亚洲永久免费av| 717成人午夜免费福利电影| 午夜一区二区三区视频| 欧美丰满一区二区免费视频| 日韩精品色哟哟| 日韩三级视频在线观看| 久久精品国产精品亚洲综合| 久久青草欧美一区二区三区| 国产在线视视频有精品| 欧美国产日韩亚洲一区| 91在线国产观看| 亚洲黄色性网站| 91精品久久久久久久91蜜桃| 奇米色一区二区| 久久久久久久电影| www.亚洲激情.com| 一区二区三区视频在线观看| 欧美这里有精品| 久久99国产精品免费| 亚洲国产精品精华液2区45| 91免费国产在线观看| 亚洲成av人片在线| 欧美mv日韩mv国产网站app| 国产精品小仙女| 亚洲欧美一区二区不卡| 91精品国产免费| 成人听书哪个软件好| 香蕉成人伊视频在线观看| 精品成人在线观看|