📄 pppoptn.c
字号:
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 + -