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

📄 pppoptn.c

📁 这是全套的PPP协议的源码
💻 C
📖 第 1 页 / 共 4 页
字号:
    sptr_configured_option = find_matching_option (				    &sptr_option_lists->configured,				    sptr_receive_list_option->type.generic);    while (sptr_receive_list_option != NULL)	{	if (sptr_configured_option == NULL)	    {	    free_ppp_option_list (&sptr_option_lists->received);	    return (OPTION_PARSING_ERROR);	    }	else	    {	    option_value_ok = ppp_configure_nak_option_processor				    (sptr_receive_list_option,					sptr_option_lists,pluginState);	    if (option_value_ok == FAIL)		    {		    free_ppp_option_list (&sptr_option_lists->received);		    return (OPTION_PARSING_ERROR);		    }	    }	sptr_receive_list_option = (OPTION_LIST_ENTRY *) get_entry_from_list					((LINK *) &sptr_option_lists->received);        /* RVR - The following if conditon is for the page fault fix */                if (sptr_receive_list_option != NULL)            {            sptr_configured_option = find_matching_option_beyond (				    sptr_configured_option,				    sptr_receive_list_option->type.generic);            }	}    return (return_code);    }/******************************************************************************** find_matching_option_beyond - finds a matching option beyond the given entry*/OPTION_LIST_ENTRY *find_matching_option_beyond /* changed to non-staic -  												  WindNet Multilink */    (    OPTION_LIST_ENTRY *sptr_starting_option,    BYTE type    )    {    OPTION_LIST_ENTRY *sptr_matching_option = NULL;    for (sptr_matching_option = sptr_starting_option->sptr_forward_link;	 sptr_matching_option != NULL;	 sptr_matching_option = sptr_matching_option->sptr_forward_link)	{	if (sptr_matching_option->type.generic == type)	    {	    break;	    }	}    return (sptr_matching_option);    }/******************************************************************************** find_matching_option -*/OPTION_LIST_ENTRY *find_matching_option    (    OPTION_LIST *sptr_option_list,    BYTE type    )    {    OPTION_LIST_ENTRY *sptr_matching_option = NULL;    for (sptr_matching_option = sptr_option_list->sptr_forward_link;	 sptr_matching_option != NULL;	 sptr_matching_option = sptr_matching_option->sptr_forward_link)	{	if (sptr_matching_option->type.generic == type)	    {	    break;	    }	}    return (sptr_matching_option);    }/******************************************************************************** parse_ppp_options_from_packet -*/TEST  parse_ppp_options_from_packet /* changed to non-static - WindNet Multilink */    (    PFW_OBJ * pfw,    OPTION_LIST *sptr_option_list,    M_BLK_ID    packet    )    {    short length_of_options = 0;    UINT8 * _ppp_option = NULL;    if (packet == NULL)	{	return FAIL;	}    length_of_options = packet->mBlkHdr.mLen;    _ppp_option = (UINT8 *)packet->mBlkHdr.mData;    while ( _PPP_OPTION_VALID(_ppp_option,packet) &&	    (length_of_options > 0x0000) && 	    (_PPP_OPTION_LENGTH(_ppp_option) <= length_of_options))	{	if (_PPP_OPTION_LENGTH(_ppp_option) == 0x00)	    {	    break;	    }/* ak mar10 */#ifdef CHECK_FOR_DUPLICATE_OPTIONS_IN_CONFIG_REQUEST	/* check if the same option is listed again */	if (find_matching_option(sptr_option_list, (BYTE)_PPP_OPTION_TYPE(_ppp_option)) 				!= NULL)	    {	    return (FAIL);	    }#endif /*CHECK_FOR_DUPLICATE_OPTIONS_IN_CONFIG_REQUEST*//* ak mar10 */	    	if (add_new_ppp_option_to_list (pfw,sptr_option_list,				    OPTION_PARSED_STATE,				    _PPP_OPTION_TYPE(_ppp_option),                            NULL,     				    _PPP_OPTION_DATA_LENGTH(_ppp_option),				    _PPP_OPTION_DATA(_ppp_option),FALSE,TRUE,				    TRUE) == FAIL)	    {	    return (FAIL);	    }	length_of_options = (short)		    (length_of_options - _PPP_OPTION_LENGTH(_ppp_option));	_ppp_option = _ppp_option + _PPP_OPTION_LENGTH(_ppp_option);	}    if ((length_of_options != 0x0000) && 		    (!_PPP_OPTION_VALID(_ppp_option,packet) || 		    (_PPP_OPTION_LENGTH(_ppp_option) > length_of_options)))	{	printf("PPP: Illegal Option Length \r\n");	return (FAIL);	}    return (PASS);    }/******************************************************************************** changeOptionValueInConfiguredList -*/STATUS changeOptionValueInConfiguredList     (    PFW_OBJ            * pfw,    OPTION_LIST        * optionList,    BYTE                 optionType,    int                  newDataLength,    void *               newData    )    {    OPTION_LIST_ENTRY *matchingOption = NULL;    if((matchingOption = find_matching_option (optionList,optionType)) == NULL)	{	return ERROR;	}    if (matchingOption->length == newDataLength)	{	memcpy (matchingOption->uptr_data,newData,newDataLength);	}    else	{	replace_data_field_in_option (pfw,matchingOption,newData,newDataLength);	}    return OK;    }/******************************************************************************** free_ppp_option_list_entry -*/void free_ppp_option_list_entry    (    OPTION_LIST_ENTRY *sptr_source_option    )    {    ALTERNATE_OPTION *sptr_alternate_option = NULL;    ALTERNATE_OPTION *sptr_next_alternate_option = NULL;    if (sptr_source_option->length > 0x00)        {    	if (sptr_source_option->uptr_data != NULL)		{        pfwFree ((void *)sptr_source_option->uptr_data);        sptr_source_option->uptr_data = NULL;        }	    }    if (sptr_source_option->option_flags.range_checking_enabled == PPP_FLAG_ON)         {        if (sptr_source_option->range_option != NULL)		    {		    if (sptr_source_option->range_option->uptr_lowest_value != NULL)       		    {			    pfwFree ((void *)sptr_source_option->range_option->				    										uptr_lowest_value);    		    sptr_source_option->range_option->uptr_lowest_value = NULL;    		    sptr_source_option->range_option->uptr_highest_value = NULL;    		    sptr_source_option->range_option->uptr_step = NULL;    		    sptr_source_option->option_flags.range_checking_enabled = 															PPP_FLAG_OFF;	   		    }		    pfwFree (sptr_source_option->range_option);		    sptr_source_option->range_option = NULL;		    }	    }    for (sptr_alternate_option = 		sptr_source_option->alternate_option_list.sptr_forward_link;		sptr_alternate_option != NULL; )	{	sptr_next_alternate_option =			    sptr_alternate_option->links.sptr_forward_link;	if (sptr_alternate_option->uptr_data != NULL)	    {	    pfwFree ((void *)sptr_alternate_option->uptr_data);        sptr_alternate_option->uptr_data = NULL;   	    }    if (sptr_alternate_option != NULL)           {        pfwFree((void *)sptr_alternate_option);        sptr_alternate_option = NULL;               }	sptr_alternate_option = sptr_next_alternate_option;        	}    if (sptr_source_option != NULL)                 {        pfwFree((void *)sptr_source_option);        sptr_source_option = NULL;              }    }/******************************************************************************** free_ppp_option_list -*/void free_ppp_option_list    (    OPTION_LIST *sptr_option_list    )    {    OPTION_LIST_ENTRY *sptr_source_option = NULL;    OPTION_LIST_ENTRY *sptr_next_source_option = NULL;    for (sptr_source_option = sptr_option_list->sptr_forward_link;	 sptr_source_option != NULL; )	{	sptr_next_source_option = sptr_source_option->sptr_forward_link;	delete_entry_from_list ((LINK *) sptr_option_list,					    (LINK *) sptr_source_option);	free_ppp_option_list_entry(sptr_source_option);	sptr_source_option = sptr_next_source_option;	}    }/******************************************************************************** free_ppp_tx_accepted_option_list -*/void free_ppp_tx_accepted_option_list    (    OPTION_LIST *sptr_option_list    )    {    OPTION_LIST_ENTRY *sptr_source_option = NULL;    OPTION_LIST_ENTRY *sptr_next_source_option = NULL;    #if 0    ALTERNATE_OPTION *sptr_alternate_option;    ALTERNATE_OPTION *sptr_next_alternate_option;    #endif    if (sptr_option_list == NULL)	return;    for (sptr_source_option = sptr_option_list->sptr_forward_link;	 sptr_source_option != NULL; )	{	sptr_next_source_option = sptr_source_option->sptr_forward_link;	delete_entry_from_list ((LINK *) sptr_option_list,					    (LINK *) sptr_source_option);	if (sptr_source_option->length > 0x00)		{        if (sptr_source_option->uptr_data != NULL)              {            pfwFree ((void *)sptr_source_option->uptr_data);            sptr_source_option->uptr_data = NULL;               }        }	#if 0 /* range and and option data pointers reference entries in the		configured list and will be freed when that list is freed */    if (sptr_source_option->option_flags.range_checking_enabled == PPP_FLAG_ON) 	{	if (sptr_source_option->range_option != NULL)		{		if (sptr_source_option->range_option->uptr_lowest_value != NULL)       		{       		pfwFree ((void *)sptr_source_option->range_option->uptr_lowest_value);       		sptr_source_option->range_option->uptr_lowest_value = NULL;	   		sptr_source_option->range_option->uptr_highest_value = NULL;       		sptr_source_option->range_option->uptr_step = NULL;	   		sptr_source_option->option_flags.range_checking_enabled == PPP_FLAG_OFF; 	   		}		pfwFree (sptr_source_option->range_option);		sptr_source_option->range_option = NULL;		}	}		for (sptr_alternate_option = 		    sptr_source_option->alternate_option_list.sptr_forward_link;			sptr_alternate_option != NULL; )	    {	    sptr_next_alternate_option =				sptr_alternate_option->links.sptr_forward_link;	    if (sptr_alternate_option->uptr_data != NULL)		{		pfwFree ((void *)sptr_alternate_option->uptr_data);        sptr_alternate_option->uptr_data = NULL;    		}	    /* free VALUE_TYPE structure */	    free_value_type (sptr_alternate_option->sptr_value_types);        if (sptr_alternate_option != NULL)                 {            pfwFree((void *)sptr_alternate_option);            sptr_alternate_option = NULL;               }	    	    sptr_alternate_option = sptr_next_alternate_option;	    }	#endif /* 0 */	/* free all the VALUE_TYPE arrays and built-in strings */    if (sptr_source_option != NULL)            {       pfwFree((void *)sptr_source_option);       sptr_source_option = NULL;          }		sptr_source_option = sptr_next_source_option;	}    }/******************************************************************************** is_option_present -*/BOOLEAN is_option_present    (    OPTION_LIST *sptr_option_list,    BYTE option_type    )    {    OPTION_LIST_ENTRY *sptr_matching_option = NULL;    for (sptr_matching_option = sptr_option_list->sptr_forward_link;	 sptr_matching_option != NULL;	 sptr_matching_option = sptr_matching_option->sptr_forward_link)

⌨️ 快捷键说明

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