@ -125,6 +125,7 @@ const FtpCommand FtpCommands[FTP_COMMAND_MAX + 1] = {
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    {  FTP_COMMAND_UNKNOWN ,  NULL ,  0 } 
 
					 
					 
					 
					    {  FTP_COMMAND_UNKNOWN ,  NULL ,  0 } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					} ; 
 
					 
					 
					 
					} ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					uint64_t  ftp_config_memcap  =  0 ; 
 
					 
					 
					 
					uint64_t  ftp_config_memcap  =  0 ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					uint32_t  ftp_config_maxtx  =  1024 ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					SC_ATOMIC_DECLARE ( uint64_t ,  ftp_memuse ) ; 
 
					 
					 
					 
					SC_ATOMIC_DECLARE ( uint64_t ,  ftp_memuse ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					SC_ATOMIC_DECLARE ( uint64_t ,  ftp_memcap ) ; 
 
					 
					 
					 
					SC_ATOMIC_DECLARE ( uint64_t ,  ftp_memcap ) ; 
 
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -152,6 +153,16 @@ static void FTPParseMemcap(void)
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    SC_ATOMIC_INIT ( ftp_memuse ) ; 
 
					 
					 
					 
					    SC_ATOMIC_INIT ( ftp_memuse ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    SC_ATOMIC_INIT ( ftp_memcap ) ; 
 
					 
					 
					 
					    SC_ATOMIC_INIT ( ftp_memcap ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    if  ( ( ConfGet ( " app-layer.protocols.ftp.max-tx " ,  & conf_val ) )  = =  1 )  { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        if  ( ParseSizeStringU32 ( conf_val ,  & ftp_config_maxtx )  <  0 )  { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					            SCLogError ( SC_ERR_SIZE_PARSE , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                    " Error parsing ftp.max-tx  " 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                    " from conf file - %s. " , 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					                    conf_val ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        SCLogInfo ( " FTP max tx: % "  PRIu32 ,  ftp_config_maxtx ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					} 
 
					 
					 
					 
					} 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					static  void  FTPIncrMemuse ( uint64_t  size ) 
 
					 
					 
					 
					static  void  FTPIncrMemuse ( uint64_t  size ) 
 
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -308,6 +319,11 @@ static void FTPLocalStorageFree(void *ptr)
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					static  FTPTransaction  * FTPTransactionCreate ( FtpState  * state ) 
 
					 
					 
					 
					static  FTPTransaction  * FTPTransactionCreate ( FtpState  * state ) 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					{ 
 
					 
					 
					 
					{ 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    SCEnter ( ) ; 
 
					 
					 
					 
					    SCEnter ( ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    FTPTransaction  * firsttx  =  TAILQ_FIRST ( & state - > tx_list ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    if  ( firsttx  & &  state - > tx_cnt  -  firsttx - > tx_id  >  ftp_config_maxtx )  { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        // FTP does not set events yet...
 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					        return  NULL ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    } 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    FTPTransaction  * tx  =  FTPCalloc ( 1 ,  sizeof ( * tx ) ) ; 
 
					 
					 
					 
					    FTPTransaction  * tx  =  FTPCalloc ( 1 ,  sizeof ( * tx ) ) ; 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    if  ( tx  = =  NULL )  { 
 
					 
					 
					 
					    if  ( tx  = =  NULL )  { 
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        return  NULL ; 
 
					 
					 
					 
					        return  NULL ;