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

📄 ppplcpcomponent.c

📁 这是全套的PPP协议的源码
💻 C
📖 第 1 页 / 共 5 页
字号:
	lcp_optionsHandler (pfw,LCP_MAGIC_NUMBER,PFW_PARAMETER_SET,	    pProfileData,"Remote:Negotiation Not Required,Negotiable:0");/* WindNet Multilink - Start */    lcp_optionsHandler (pfw,LCP_MULTILINK_MAXIMUM_RECEIVED_RECONSTRUCTED_UNIT,					PFW_PARAMETER_SET, pProfileData,					"Local:");     lcp_optionsHandler (pfw,LCP_MULTILINK_MAXIMUM_RECEIVED_RECONSTRUCTED_UNIT,					PFW_PARAMETER_SET, pProfileData,					"Remote:");     lcp_optionsHandler (pfw,LCP_LINK_DISCRIMINATOR,					PFW_PARAMETER_SET, pProfileData,					"Local:");     lcp_optionsHandler (pfw,LCP_LINK_DISCRIMINATOR,					PFW_PARAMETER_SET, pProfileData,					"Remote:"); /* WindNet Multilink - End */    return OK;    }/******************************************************************************** lcp_setStackData - */LOCAL STATUS lcp_setStackData    (    PFW_OBJ             *pfw,    LCP_PROFILE_DATA    *profileData,	LCP_CONFIG_OPTION	*lcpOption,	char				*value    )    {    LCP_STACK_DATA 		*pStackData = profileData->stackData;    OPTION_LIST 		*optionList = NULL;    OPTION_LIST_ENTRY 	*optionEntry = NULL;    char 				partialString[256];    int 				stringLength = 0;	BOOLEAN				isLocalConfig;	BOOLEAN				bDeleteEntry=FALSE;        /* Continue only if this profile is associated with stack */	if (!pStackData)        {	    return OK;        }	if (value == NULL)		return ERROR;	if (strstr(value,"Remote") != NULL)		{ 		isLocalConfig = FALSE; 		if (strlen (value) <= 7) /* 7 ==> strlen("Remote:") */			{			bDeleteEntry = TRUE;			}		}	else if (strstr (value, "Local") != NULL)		{		isLocalConfig = TRUE;		if (strlen (value) <= 6) /* 6 ==> strlen("Local:") */			{			bDeleteEntry = TRUE;			}		}	else		return ERROR;		 optionList = (isLocalConfig) ? &pStackData->option_lists.configured :                                  &pStackData->option_lists.remote_configured;	if (bDeleteEntry)		{		optionEntry = find_matching_option(optionList,lcpOption->optionType);		if (optionEntry != NULL)			{    		delete_entry_from_list((LINK *) optionList,(LINK *) optionEntry);       		free_ppp_option_list_entry(optionEntry);			free_ppp_tx_accepted_option_list(  				             &pStackData->option_lists.tx_accepted);			}		return OK;		}	free_ppp_tx_accepted_option_list(  				             &pStackData->option_lists.tx_accepted);	stringLength = strlen(value) + 1;	bzero(partialString,stringLength);	strcpy(partialString,value);	if (generate_option_list_entry(pfw,&pStackData->option_lists,				    partialString,				    lcpOption->name,				    lcpOption->optionType,"LCP",				    lcpOption->optionTypeString) != OK)		{		return ERROR;		}	return OK;    }/******************************************************************************** lcpProfileDataCopy - profileData object copy constructor***/LOCAL STATUS lcpProfileDataCopy    (    PFW_OBJ * pfw,    void * srcProfileData,    void * dstProfileData    )    {    LCP_PROFILE_DATA * pSrcProfileData = (LCP_PROFILE_DATA *) srcProfileData;    LCP_PROFILE_DATA * pDstProfileData = (LCP_PROFILE_DATA *) dstProfileData;    LCP_CONFIG_STRINGS * srcOption = NULL;    LCP_CONFIG_STRINGS * dstOption = NULL;    ALTERNATE_OPTION_STRING * alternateConfigString = NULL;    ALTERNATE_OPTION_STRING * newAlternateString = NULL;    unsigned int options = 0;    unsigned int stringLength = 0;	bzero (dstProfileData, sizeof(LCP_PROFILE_DATA));    bcopy(srcProfileData,dstProfileData, sizeof(LCP_PROFILE_DATA));	if (!pSrcProfileData->lcpConfigStrings)		return OK;	pDstProfileData->lcpConfigStrings = 	pfwMalloc (pfw, sizeof (LCP_CONFIG_STRINGS) * (NUMBER_OF_LCP_OPTIONS + 1)); 	if (!pDstProfileData->lcpConfigStrings)		{	    lcpProfileDataDestruct(pfw,pDstProfileData);		return ERROR;		}	bzero ((char *)pDstProfileData->lcpConfigStrings, 		   sizeof (LCP_CONFIG_STRINGS) * (NUMBER_OF_LCP_OPTIONS + 1));  	for (options = 1; options < NUMBER_OF_LCP_OPTIONS; options++)	{	srcOption = &pSrcProfileData->lcpConfigStrings[options];	dstOption = &pDstProfileData->lcpConfigStrings[options];	if (srcOption->configString != NULL)	    {	    stringLength = strlen(srcOption->configString)+1;	    /* make a copy of the remote string */	    if ((dstOption->configString = pfwMalloc(pfw,stringLength)) == NULL)		{		lcpProfileDataDestruct (pfw,pDstProfileData);		return ERROR;		}	    bzero(dstOption->configString,stringLength);	    strcpy(dstOption->configString,srcOption->configString);	    }	alternateConfigString = srcOption->localAlternateConfigString;	newAlternateString = NULL;	while (alternateConfigString != NULL)	    {	    stringLength = strlen(alternateConfigString->configString) + 1;	    /* make a copy of the alternate config string */	    if (newAlternateString != NULL)		{		if((newAlternateString->next = pfwMalloc(pfw,stringLength +				    sizeof(ALTERNATE_OPTION_STRING))) == NULL)		    {		    lcpProfileDataDestruct(pfw,pDstProfileData);		    return ERROR;		    }		else		    newAlternateString = newAlternateString->next;		}	    else 		{		if((newAlternateString = pfwMalloc(pfw,stringLength +				    sizeof(ALTERNATE_OPTION_STRING))) == NULL)		    {		    lcpProfileDataDestruct(pfw,pDstProfileData);		    return ERROR;		    }		else		    dstOption->localAlternateConfigString = newAlternateString;		}	    bzero ((void *)newAlternateString,			    (stringLength + sizeof(ALTERNATE_OPTION_STRING)));	    newAlternateString->preference = alternateConfigString->preference;	    strcpy (newAlternateString->configString,				    alternateConfigString->configString);	    alternateConfigString = alternateConfigString->next;	    }	if (srcOption->remoteConfigString != NULL)	    {	    stringLength = strlen(srcOption->remoteConfigString)+1;	    /* make a copy of the remote string */	    if ((dstOption->remoteConfigString = pfwMalloc(pfw,stringLength))		== NULL)		{		lcpProfileDataDestruct (pfw,pDstProfileData);		return ERROR;		}	    bzero(dstOption->remoteConfigString,stringLength);	    strcpy(dstOption->remoteConfigString,srcOption->remoteConfigString);	    }	alternateConfigString = srcOption->remoteAlternateConfigString;	newAlternateString = NULL;	while (alternateConfigString != NULL)	    {	    stringLength = strlen(alternateConfigString->configString) + 1;	    /* make a copy of the alternate config string */	    if (newAlternateString != NULL)		{		if((newAlternateString->next = pfwMalloc(pfw,stringLength +				    sizeof(ALTERNATE_OPTION_STRING))) == NULL)		    {		    lcpProfileDataDestruct(pfw,pDstProfileData);		    return ERROR;		    }		else		    newAlternateString = newAlternateString->next;		}	    else 		{		if((newAlternateString = pfwMalloc(pfw,stringLength +				    sizeof(ALTERNATE_OPTION_STRING))) == NULL)		    {		    lcpProfileDataDestruct(pfw,pDstProfileData);		    return ERROR;		    }		else		    dstOption->remoteAlternateConfigString = newAlternateString;		}	    bzero ((void *)newAlternateString,			    (stringLength + sizeof(ALTERNATE_OPTION_STRING)));	    newAlternateString->preference = alternateConfigString->preference;	    strcpy (newAlternateString->configString,				    alternateConfigString->configString);	    alternateConfigString = alternateConfigString->next;	    }	}	return OK;    }/********************************************************************************lcpStackDataConstruct - initialize stack data ***/LOCAL STATUS lcpStackDataConstruct    (    PFW_OBJ * pfw,    void * stackData,    void * profileData    )    {    LCP_STACK_DATA 			* pStackData = (LCP_STACK_DATA *) stackData;    LCP_PROFILE_DATA 		*pProfileData = (LCP_PROFILE_DATA *) profileData;    #if 0    char * configString;    #endif    char partialString[256];    LCP_CONFIG_OPTION		*lcpOption = NULL;	LCP_CONFIG_STRINGS		*pLcpConfigStrings = NULL;    ALTERNATE_OPTION_STRING *alternateConfigString = NULL;    int 					options = 0;    int 					stringLength = 0;	PPP_LCP_COMPONENT		*pComponentData = NULL;	pComponentData = (PPP_LCP_COMPONENT *)pfwPluginObjGet (pfw, "PPP_LCP");	if (pComponentData == NULL)		return ERROR;	bzero (partialString, sizeof (partialString));  	bzero(stackData, sizeof(LCP_STACK_DATA));    pStackData->copy_of_initial_rxed_lcp_configuration_request_packet = NULL;    pStackData->copy_of_last_rxed_lcp_configuration_request_packet = NULL;    pStackData->copy_of_last_txed_lcp_configuration_request_packet = NULL;	pProfileData->stackData = pStackData;  /* WindNet Multilink */    if ((pStackData->lcpUpEventObj = pfwEventObjGet(pfw,"LCP_UP_EVENT")) ==NULL)	{	return ERROR;	}#if 0 /* WindNet Multilink - Not supported in this MP release */    if ((pStackData->pEchoReplyReceivedEventObj = pfwEventObjGet(pfw,									"LCP_ECHO_REPLY_RECEIVED_EVENT")) ==NULL)	{	return ERROR;	}#endif /* WindNet Multilink - Not supported in this MP release */    if ((pStackData->netPoolId = pfwNetPoolIdGet(pfw)) == NULL)	{	printf("LCP: MUST have a valid NetPoolId; See pfwCreate()\n");	return ERROR;	}    srandom((int) tickGet());    pStackData->id_sequence_number = (BYTE)(tickGet() &0xff);	if (pProfileData->lcpConfigStrings != NULL)		{    	for (options = 1; options < NUMBER_OF_LCP_OPTIONS; options++)			{			lcpOption = &pComponentData->option[options]; 			pLcpConfigStrings = &pProfileData->lcpConfigStrings[options]; 			if (pLcpConfigStrings->configString == NULL && 	  			  pLcpConfigStrings->remoteConfigString == NULL)	    		continue;			if (pLcpConfigStrings->configString != NULL)	    		{	    		stringLength = strlen(pLcpConfigStrings->configString) + 1;	    		bzero(partialString,stringLength);	    		strcpy(partialString,pLcpConfigStrings->configString);	    		if (generate_option_list_entry(											pfw,&pStackData->option_lists,					    					partialString,					    					lcpOption->name,					    					lcpOption->optionType,"LCP",					    					lcpOption->optionTypeString) != OK)						{						return ERROR;						}	    		}			/* process local alternates */			alternateConfigString = pLcpConfigStrings->localAlternateConfigString;			while (alternateConfigString != NULL)	    		{	    		stringLength = strlen(alternateConfigString->configString) + 1;	    		bzero(partialString,stringLength);	    		strcpy(partialString, alternateConfigString->configString);	    		if (generate_option_list_entry(										   pfw,&pStackData->option_lists,				   						   partialString,				    					   lcpOption->name,				    					   lcpOption->optionType,"LCP",				    					   lcpOption->optionTypeString) != OK)					{					return ERROR;					}	    		alternateConfigString = alternateConfigString->next;	    		}				if (pLcpConfigStrings->remoteConfigString != NULL)	    		{	    		stringLength = strlen(pLcpConfigStrings->remoteConfigString)+1;	    		bzero(partialString,stringLength);	    		strcpy(partialString, pLcpConfigStrings->remoteConfigString);	    		if (generate_option_list_entry(											pfw,&pStackData->option_lists,					    					partialString,					    					lcpOption->name,					    					lcpOption->optionType,"LCP",					    					lcpOption->optionTypeString) != OK)					{					return ERROR;					}	    		}			/* process remote alternates */			alternateConfigString = 							pLcpConfigStrings->remoteAlternateConfigString;			while (alternateConfigString != NULL)	    		{	    		stringLength = strlen(alternateConfigString->configString) + 1;	    		bzero(partialString,stringLength);	    		strcpy(partialString, alternateConfigString->configString);	   		 	if (generate_option_list_entry(											pfw,&pStackData->option_lists,					   				 		partialString,					    					lcpOption->name,					    					lcpOption->optionType,"LCP",					    					lcpOption->optionTypeString) != OK)

⌨️ 快捷键说明

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