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

📄 pppconfg.c

📁 这是全套的PPP协议的源码
💻 C
📖 第 1 页 / 共 3 页
字号:
/* pppconfg.c - configuration parameter processor *//* Copyright 2003 Wind River Systems, Inc. */#include "copyright_wrs.h"/*modification history--------------------01q,07aug03,rp  updating include path for random.h01p,13may03,ijm fixed diab build warnings01o,25jun02,rp  adding missed multilink patch 2 changes01n,28may02,rvr fixed build warnings01m,17may02,as  added support for IPV6 address and NBO for header compression01l,26apr02,vk  bug fix in get_value_string_type01k,26feb02,jr	Setting the pointer to NULL after freeing01j,04feb02,ak	modifications as part of memory reduction process01i,04feb02,vk  added get_value_string_type() and get_value_string()01h,8july01,sd  Clearing the value_string array in the parse_option_value()01g,20may01,sd  added support for EID option processing01f,29sep00,sj  merging with TOR2_0-WINDNET_PPP-CUM_PATCH_201e,07sep00,cn  fixed malloc's size in generate_option_config_string () 		(SPR# 34219).01d,05sep00,cn  zero-out local arrays in add_option_type () (SPR# 34219).01c,14feb00,sj  read integer values(format D#) using atoi()01b,09nov99,sj  allow for partialString with no value field01a,30,sj 	derived from Routerware source base*//**$Log:: /Rtrware/devdrvrs/ppp/pppconf $ *  * 10    3/12/99 11:27a Nishit * Bunch of small changes - mostly in MP * related code *  * 9     11/13/98 2:14p Nishit * get_ip_address_string modified to fix * problems with Big Endian *  * 8     11/13/98 8:00a Nishit * removed pragma *  * 7     10/01/98 11:43a Alex * Updated the PPP source code to conform * to a single build.  *  * 6     4/30/98 3:03p Alex * Ppp v4.2.0 check in *  * 1     4/24/98 12:10a Release Engineer * code cleanup, code style changes, * linted, system level test * PPP v4.2.0*/#include "vxWorks.h"#include "stddef.h"#include "stdio.h"#include "ctype.h"#include "string.h"#include "stdlib.h"#include "ppp/kstart.h"#include "ppp/kppp.h"#include "private/ppp/vpppstr.h"#include "private/ppp/vlcpstr.h"#include "private/ppp/pppoptn.h"#include "wrn/util/random.h"#include "pfw/pfw.h"#include "pfw/pfwMemory.h"#include "inetLib.h"#include "net/inet.h" LOCAL TEST get_configuration_option_values (PFW_OBJ * pfw,					char *cptr_option_string,					char *cptr_return_ncp_name,					char *cptr_return_option_name,					BYTE *bptr_return_option_number,					BYTE *bptr_return_data,					BYTE *bptr_return_length,					BOOLEAN *eptr_return_value_swapped,					BOOLEAN *eptr_negotiation_required,					BOOLEAN *eptr_negotiable,					BOOLEAN *eptr_automatic_nak_processing);LOCAL char *parse_ppp_option_line (char *cptr_option_string,				   char *cptr_return_ncp_name,				   char *cptr_return_option_name,				   BYTE *bptr_return_option_number,				   char *cptr_automatic_nak_processing_string,				   char *cptr_negotiation_required_string,				   char *cptr_negotiable_string,				   BYTE *bptr_number_of_parameters_processed);LOCAL BOOLEAN get_option_value_type (char *value_type_string,				    char *value_string,				    BYTE *bptr_return_data,				    BYTE *bptr_return_length,				    BOOLEAN *eptr_return_value_swapped);LOCAL BYTE get_size_of_numeric_string (char *value_type_string);LOCAL char * generate_option_config_string ( PFW_OBJ *,					    char * partial_option_string,					    char * option_name,					    BYTE   option_number,					    char * protocol_name,					    char * type_string					    );LOCAL void add_option_type (PFW_OBJ *,OPTION_LISTS *sptr_option_lists,		char *cptr_port_number_and_option_string,		char *cptr_option_string,BOOLEAN remote_configuration);LOCAL ULONG get_my_magic_number (void);LOCAL BOOLEAN get_value_string_type		    (	UNION_OPTION_DATA_TYPES		*uptr_data,		BYTE						length,    char 						*value_type_string,    BYTE 						*value_string,    UNION_OPTION_TYPES 			optionType,	char						*optionName    );void get_value_type (char *cptr_value_type_string, char *cptr_value_type);void get_value_string											    (	UNION_OPTION_DATA_TYPES		*data,		BYTE						length,    char 						*value_type_string,    char 						*value_string,    UNION_OPTION_TYPES 			optionType,	char 						*optionName    );#if 0LOCAL void fill_in_value_type_array (PFW_OBJ *pfw,VALUE_TYPE *sptr_value_type,				    BYTE index, 				    char *cptr_value_type_string, 				    BOOLEAN value_swapped,				    BYTE option_length,				    BYTE length_of_all_options);#endif#if defined (PPP_CCP)	static enum BOOLEAN is_ccp_option (char *option_string);	static char *cptr_ccp_option = "CCP";#endif#if defined (PPP_ECP)	static enum BOOLEAN is_ecp_option (char *option_string);	static char *cptr_ecp_option = "ECP";#endifstatic char *cptr_hex_values[] ={"","%02x","%02x%02x","%02x%02x%02x",				"%02x%02x%02x%02x","%02x%02x%02x%02x%02x",				"%02x%02x%02x%02x%02x%02x"};/* *  H is hex, D is decimal, # is size in bytes, S is little-endian swapped  * "IP","IPS","H6","H4","D4","H2","D2""H4S","D4S","H2S","D2S","H1","D1","String" * ,"Netbios String","IPV6","NBO" * * eg.: * * PPP Port Option = 00,IPCP Address,3,Auto,Negotiation Not Required,Negotiable, * IP,128.1.60.1 * * PPP Port Option = 00,IPCP Address,3,Auto,Alternate,IP,128.1.60.2 * * PPP Port Option = 00,IPCP Address,3,Auto,Range,IP,128.1.60.2,128.1.60.3, * 0.0.0.1 */IMPORT BOOL freeRemoteListBeforeEid;IMPORT PFW_STACK_OBJ	*gBundleId;/******************************************************************************* * generate_option_list_entry - */STATUS generate_option_list_entry    (    PFW_OBJ * pfw,    OPTION_LISTS *sptr_option_lists,    char * partial_option_string,    char * option_name,    BYTE   option_number,    char * protocol_name,    char * type_string    )    {    char * configString = NULL;    char * remotePartialString = NULL;    char * localPartialString = NULL;    if (strstr(partial_option_string, "Remote") != NULL)	{	/* strip the Remote Key word */	strtok_r(partial_option_string,":",&remotePartialString);	if (remotePartialString == NULL)	    return ERROR;	}    else if (strstr(partial_option_string, "Local") != NULL)	{	/* strip the Local Key word */	strtok_r(partial_option_string,":",&localPartialString);	if (localPartialString == NULL)	    return ERROR;	}    else	return ERROR;    if (remotePartialString != NULL)	{	if ((configString = generate_option_config_string(pfw,	    remotePartialString, option_name,option_number,	    protocol_name,type_string)) == NULL)	    {	    return ERROR;	    }	add_remote_ppp_option(pfw, configString,sptr_option_lists);	}    else if (localPartialString != NULL)	{	if ((configString = generate_option_config_string(pfw,	    localPartialString, option_name,option_number,	    protocol_name,type_string)) == NULL)	    {	    return ERROR;	    }	add_ppp_option(pfw, configString,sptr_option_lists);	}    else	return ERROR;    if (configString != NULL)           {        pfwFree(configString);        configString = NULL;            }    return OK;    }/******************************************************************************* * generate_option_config_string - */LOCAL char * generate_option_config_string    (    PFW_OBJ * pfw,    char * partial_option_string,    char * option_name,    BYTE   option_number,    char * protocol_name,    char * type_string    )    {    char * holder = NULL;    char * value_string = NULL;    char * attribute_string = NULL;    char * adjustedTypeString = type_string;    char option_number_string[4];    char * complete_option_string = NULL;    BYTE complete_option_string_length = 0;    char noValueSpecified[] = "";    char adjustedValueString[8];    volatile UINT16 chapProtocol;    bzero(option_number_string,4);    bzero(&adjustedValueString [0], sizeof (adjustedValueString));    sprintf(option_number_string,"%d",option_number);    complete_option_string_length = strlen(protocol_name) + 1 +	/* 1 for ',' */				    strlen(option_name) + 1 +				    strlen(option_number_string) + 1 +				    strlen("Auto") + 1 +				    strlen(partial_option_string) + 2 + /* 05 */				    strlen(type_string) + 2;   /* ',' + '\0' */    if ((complete_option_string = pfwMalloc(pfw,complete_option_string_length))	==NULL)	return NULL;    bzero (complete_option_string, complete_option_string_length);    attribute_string = strtok_r (partial_option_string,":",&holder);    /* replaced ':' with '"' to mark the end of value string */     value_string = strtok_r (NULL,"\"",&holder);    if (value_string == NULL)	{	value_string = noValueSpecified;	}    /* HACK for CHAP protocol with MD5 algorithm */    if (strstr(protocol_name,"LCP") &&	option_number == LCP_AUTHENTICATION_PROTOCOL &&	value_string != noValueSpecified)	{	if ((chapProtocol = strtoul(value_string,NULL,16)) == CHAP_PROTOCOL)	    {	    adjustedTypeString = "H3";	    bzero(adjustedValueString,sizeof(adjustedValueString));	    sprintf (adjustedValueString,"%s%s",value_string,"05");	    value_string = adjustedValueString;	    }	else	    adjustedTypeString = type_string;	}    if ((strstr(attribute_string,"Alternate") != NULL) ||	(strstr(attribute_string,"Range") != NULL))	{	sprintf(complete_option_string,"%s,%s,%s,%s,%s,%s",protocol_name,			    option_name, option_number_string,			    attribute_string, adjustedTypeString,value_string);	}    else	{	sprintf(complete_option_string,"%s,%s,%s,%s,%s,%s,%s",protocol_name,			    option_name, option_number_string,"Auto",			    attribute_string, adjustedTypeString,value_string);	}    return (complete_option_string);    }/******************************************************************************** add_ppp_option -*/void add_ppp_option     (    PFW_OBJ * pfw,    char * option_string,    OPTION_LISTS *sptr_option_lists    )    {    char cptr_value_portion[256];    bzero(cptr_value_portion,256);    if (sptr_option_lists == NULL || option_string == NULL)	return;    strcpy (cptr_value_portion,option_string);    add_option_type (pfw,sptr_option_lists,option_string, cptr_value_portion,									FALSE);    }/******************************************************************************** add_remote_ppp_option -*/void add_remote_ppp_option    (    PFW_OBJ *pfw,    char * option_string,    OPTION_LISTS *sptr_option_lists    )    {    char cptr_value_portion[256];    bzero(cptr_value_portion,256);    if (sptr_option_lists == NULL || option_string == NULL)	return;    strcpy (cptr_value_portion,option_string);    add_option_type (pfw,sptr_option_lists,option_string, cptr_value_portion,									TRUE);    }/******************************************************************************* add_option_type -*/LOCAL void add_option_type     (    PFW_OBJ *pfw,    OPTION_LISTS *sptr_option_lists,    char *option_string,    char *cptr_option_string,    BOOLEAN remote_configuration    )    {    BYTE option_data[128];    BYTE length = 0;    char ncp_name[16];    char option_name[80];    BOOLEAN value_swapped;    BYTE option_number = 0;    BOOLEAN negotiation_required;    BOOLEAN negotiable;    BOOLEAN automatic_nak_processing;    TEST return_value;    OPTION_LIST *sptr_option_list = NULL;    ULONG magic_number = 0; 	if (remote_configuration == TRUE)	{	sptr_option_list = &sptr_option_lists->remote_configured;	}    else	{	sptr_option_list = &sptr_option_lists->configured; 	}		    memset (&option_data[0], 0x00, 128);    memset (&ncp_name[0], 0x00, 16);    memset (&option_name[0], 0x00, 8);  	if (strstr (option_string,"Negotia") != NULL)	{	return_value = get_configuration_option_values (pfw,cptr_option_string,						&ncp_name[0],						&option_name[0],						&option_number,						&option_data[0],						&length,						&value_swapped,						&negotiation_required,						&negotiable,						&automatic_nak_processing);	if (return_value == FAIL)	    {	    return;	    }	if (remote_configuration == FALSE)	    {	    if (strstr (option_string,"Magic Number") != NULL)		{		if ((option_data[0] + option_data[1] + option_data[2] +		     option_data[3]) == 0x00)		    { 		    /* 		     * Generate the magic number only if one is not already		     * specified 		     */		    magic_number = get_my_magic_number ();		    memcpy (&option_data[0],&magic_number,sizeof(magic_number));		    }		}	    }	add_configuration_option (pfw,sptr_option_list, OPTION_DEFAULT_STATE,				    option_number,length, &option_data[0],				    &option_name[0],&ncp_name[0],				    value_swapped,negotiation_required,				    negotiable,				    automatic_nak_processing);	}	else if (strstr (option_string,"Alternate") != NULL)	{	return_value = get_alternate_option_values (cptr_option_string,						&ncp_name[0],						&option_name[0],						&option_number,						&option_data[0],						&length,&value_swapped);	if (return_value == FAIL)	    {	    return;	    }	add_alternate_to_configuration_option (pfw,sptr_option_list,						option_number,						length, &option_data[0],						&option_name[0], &ncp_name[0],						value_swapped);	}	else if (strstr (option_string,"Range") != NULL)	{	return_value = get_range_option_values (cptr_option_string,						&ncp_name[0],&option_name[0],						&option_number, &option_data[0],						&length,&value_swapped);	if (return_value == FAIL)	    {	    return;

⌨️ 快捷键说明

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