⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dns_task.c.svn-base

📁 域名解析器的实现
💻 SVN-BASE
📖 第 1 页 / 共 2 页
字号:

    /* restore Static Look Up Entry */    
    for (i = 0; i < MAX_STATIC_DNS_NUM; i++)
    {
        if (DNSR_DB_Get_Static_Table_Entry(&tmp, i))
        {
			dns_set_static_host(tmp.host_ip,tmp.host_name,sizeof(tmp.host_name),tmp.status,i);
	    }
		else
			break;
    }
    
    /* restore DNS Server config */
    for (i = 0; i < MAX_NAME_SERVER; i++)    
        DNSR_DB_Get_Name_Server_IP(&dns_config_db.ip_addr[i], i);        
    
    
    /* restore DNSR Status */
    DNSR_DB_Get_Lookup_Status(&dns_config_db.lookup_stat);
    DNSR_DB_Get_Cache_Status(&dns_config_db.cache_stat);
    DNSR_DB_Get_Status(&enable);
        
    /* check the dnsr status */
    if (enable)
    {
        if (!DNSR_Set_Status(TRUE))
        {
            DBG_L3_Printf("DNSR_Restore_Config: DNSR_Set_Status failed!!\n") ;
      	    return;
        }      	    
    }      	    

}

/*------------------------------------------------------------------------
 * void  DNSR_Get_Max_TTL()
 * Purpose: get DNSR default ttl
 *          
 * Parameters:
 *    Input: status 
 *    Output:
 * returns :
 *------------------------------------------------------------------------
 */
UI32_T DNSR_Get_Max_TTL(void)
{                    
    return dns_config_db.max_ttl;
}    

/*------------------------------------------------------------------------
 * void  DNSR_Set_Status()
 * Purpose: set DNSR status
 *          
 * Parameters:
 *    Input: status 
 *    Output:
 * returns :
 *------------------------------------------------------------------------
 */
BOOLEAN_T DNSR_Set_Status(BOOLEAN_T enable)
{                    
    OS_STATUS_T status;
                    
    if (dns_config_db.dns_stat == enable)
        return TRUE;
    
    if (enable)
    {            
        dns_config_db.dns_stat = TRUE;                                                                    
    }
    else            
    {                        
        dns_config_db.dns_stat = FALSE;    
        
        /* clear query list */
        dnsr_abort();       
        /* clear cache data */
        dns_gc_nuke();                                
                        
    }    
#if 0    
    status = LA3_OS_Set_Events(&dnsrEvent, (OS_STATUS_T) DNSR_EVT, OS_OR);
#else
    status = OS_Event_Set(
        dnsrEvent,
        DNSR_EVT,
        OS_OR);
#endif

    if(status != OS_SUCCESS) 
    {
        DBG_L3_Printf("LA3_DNSR_Terminate: LA3_OS_Set_Events failed!!\n") ;
    }
        
    return TRUE;    
}

/*------------------------------------------------------------------------
 * void  DNSR_Get_Status()
 * Purpose: get DNSR status
 *          
 * Parameters:
 *    Input: status 
 *    Output:
 * returns :
 *------------------------------------------------------------------------
 */
BOOLEAN_T DNSR_Get_Status(void)
{                    
    return dns_config_db.dns_stat;
}    
/*------------------------------------------------------------------------
 * BOOLEAN_T  DNSR_Set_Cache_Status()
 * Purpose: set DNSR cache status
 *          
 * Parameters:
 *    Input: status 
 *    Output:
 * returns :
 *------------------------------------------------------------------------
 */
BOOLEAN_T DNSR_Set_Cache_Status(BOOLEAN_T enable)
{                
    if (dns_config_db.cache_stat == enable)
        return TRUE;
            
    dns_config_db.cache_stat = (UI8_T)enable;
    
    /* if the cache is disabled, clear cache data */
    if (!enable)
    {
        /* clear cache data */
        dns_gc_nuke();                                
    }
	return TRUE;
}    

/*------------------------------------------------------------------------
 * void  DNSR_Get_Cache_Status()
 * Purpose: get DNSR status
 *          
 * Parameters:
 *    Input: status 
 *    Output:
 * returns :
 *------------------------------------------------------------------------
 */
BOOLEAN_T DNSR_Get_Cache_Status(void)
{                    
    return dns_config_db.cache_stat;
}    

/*------------------------------------------------------------------------
 * BOOLEAN_T  DNSR_Set_LookUp_Status()
 * Purpose: set DNSR Look up status
 *          
 * Parameters:
 *    Input: status 
 *    Output:
 * returns :
 *------------------------------------------------------------------------
 */
BOOLEAN_T DNSR_Set_Lookup_Status(BOOLEAN_T enable)
{
    if (dns_config_db.lookup_stat == enable)
        return TRUE;
            
    dns_config_db.lookup_stat = (UI8_T)enable;
	return TRUE;
}    

/*------------------------------------------------------------------------
 * void  DNSR_Get_Lookup_Status()
 * Purpose: get DNSR status
 *          
 * Parameters:
 *    Input: status 
 *    Output:
 * returns :
 *------------------------------------------------------------------------
 */
BOOLEAN_T DNSR_Get_Lookup_Status(void)
{                    
    return dns_config_db.lookup_stat;
}    

/*------------------------------------------------------------------------
 * BOOLEAN_T  DNSR_Set_DNS_Server()
 * Purpose: set DNS Name Server
 *          
 * Parameters:
 *    Input: server IP, index
 *    Output:
 * returns :
 *------------------------------------------------------------------------
 */
BOOLEAN_T DNSR_Set_DNS_Server(UI32_T addr,UI32_T index)
{
    dns_config_db.ip_addr[index] = addr;
        
    return TRUE;
}    


/*------------------------------------------------------------------------
 * BOOLEAN_T  DNSR_Set_DNS_Server()
 * Purpose: set DNS Name Server
 *          
 * Parameters:
 *    Input: server IP, index
 *    Output:
 * returns :
 *------------------------------------------------------------------------
 */
UI32_T DNSR_Get_DNS_Server(UI32_T index)
{
    if (index >= DNSR_MAX_NAME_SERVER )
        return 0;
        
    return (dns_config_db.ip_addr[index]);            
}    

/*------------------------------------------------------------------------
 * BOOLEAN_T  DNSR_Set_DNS_Server()
 * Purpose: set DNS Name Server
 *          
 * Parameters:
 *    Input: IP,IP Name, Name size, status, index
 *    Output:
 * returns :
 *------------------------------------------------------------------------
 */
BOOLEAN_T DNSR_Set_Static_Table(UI32_T addr,UI8_T *name,UI32_T name_size,BOOLEAN_T status ,UI32_T index)
{	
    return (dns_set_static_host(addr,name,name_size,status,index));
}        				

/*------------------------------------------------------------------------
 * BOOLEAN_T  DNSR_Send_Packet_To_Server()
 * Purpose:   send pkt to socket API
 *          
 * Parameters:
 *    Input:
 *    Output:
 * returns :
 *------------------------------------------------------------------------
 */                    
BOOLEAN_T DNSR_Send_Packet_To_Server(unsigned char *pkt, 
                                int len, 
                                PENDING_DNSR_MSG_PTR pMsg
                                )
{	
    UI32_T				index;
	int                 query_id;
    I16_T               addrlen;	
    I32_T               tmp_addr;
    struct sockaddr_in  remote;
	
	
    addrlen = sizeof(struct sockaddr_in);
	
    memset((I8_T *)&remote,0,addrlen);
    remote.sin_family = AF_INET4;
    remote.sin_port = DNS_NAMESERVER_PORT;
                  
    
    do
    {
        index = (pMsg->request_server /dns_config_db.max_tries_per_server);
            
        /* free the query index */
        if (index >= dns_config_db.n_servers)
        {
            if ((query_id = dnsr_get_query_id(pMsg)) >=0)
                dnsr_clear_query_id(query_id);
            return FALSE;
        }            
        
        /* no DNS server, do notihing */
        if (dns_config_db.ip_addr[index] ==0)            
        {
            /* increment request server  */
            pMsg->request_server++;		            
            continue;
        }        
                        
        u32_2n(&tmp_addr, dns_config_db.ip_addr[index]);
        remote.sin_addr = tmp_addr;
    	sendto(DnsrSocket, pkt,len,
    			0, (struct sockaddr *)&remote, addrlen);
    			
        /* increment request server  */
        pMsg->request_server++;		   
        break;
        
    } while  (index < dns_config_db.n_servers);         
    
    return TRUE; 							
}	
	
/*------------------------------------------------------------------------
 * BOOLEAN_T  DNSR_Send_Packet_To_Client()
 * Purpose:   send pkt to socket API
 *          
 * Parameters:
 *    Input:
 *    Output:
 * returns :
 *------------------------------------------------------------------------
 */                    
void DNSR_Send_Packet_To_Client(unsigned char *pkt, 
                                int len, 
                                PENDING_DNSR_MSG_PTR pMsg
                                )
{
	
    I16_T         addrlen;	    
    		
    addrlen = sizeof(struct sockaddr_in);		
	sendto(DnsrSocket, pkt, len, 
			0, &pMsg->client, addrlen);		
}	

/*------------------------------------------------------------------------
 * BOOLEAN_T  DNSR_Lock()
 * Purpose:   dns lock semaphore
 *          
 * Parameters:
 *    Input:
 *    Output:
 * returns :
 *------------------------------------------------------------------------
 */                    
void DNSR_Lock(void)
{
#if 0
    OS_STATUS_T     status;
    
    status = LA3_OS_Obtain_Semaphore(&dnsrSEMA, OS_SUSPEND);
    if (status != OS_SUCCESS)
    {
        DBG_L3_Printf("DNSR_TASK: obtain sem error !!\n");
        return;
    }   
#else
    OS_Semaphore_Lock(dnsrSEMA);
#endif
}	

/*------------------------------------------------------------------------
 * BOOLEAN_T  DNSR_UnLock()
 * Purpose:   dns unlock semaphore
 *          
 * Parameters:
 *    Input:
 *    Output:
 * returns :
 *------------------------------------------------------------------------
 */                    
void DNSR_UnLock(void)
{
#if 0
    OS_STATUS_T     status;
    
    status = LA3_OS_Release_Semaphore(&dnsrSEMA);
    if (status != OS_SUCCESS)
    {
        DBG_L3_Printf("DNSR_TASK: obtain sem error !!\n");
        return;
    }       
#else
    OS_Semaphore_Unlock(dnsrSEMA);
#endif
}	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -