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

📄 pppncprx.c

📁 这是全套的PPP协议的源码
💻 C
📖 第 1 页 / 共 2 页
字号:
    PFW_PLUGIN_OBJ_STATE * pluginState,    M_BLK_ID packet    )    {    M_BLK_ID contiguousPacket = packet;    NCP_PACKET *sptr_ipcp_rx_packet;    USHORT number_of_bytes_rxed;    NCP_STACK_DATA *pStackData = (NCP_STACK_DATA *)pluginState->stackData;    USHORT number_of_bytes_without_options;    if (packet == NULL)        return;    sptr_ipcp_rx_packet = mtod(packet, NCP_PACKET *);    /* option processing expects a contiguous buffer */    if (packet->mBlkHdr.mNext != NULL)        {        number_of_bytes_rxed = packet->mBlkPktHdr.len;        contiguousPacket = m_pullup (packet,                            ntohs(sptr_ipcp_rx_packet->ncp_header.length));        if (contiguousPacket == NULL)            return;        }    else        number_of_bytes_rxed = packet->mBlkHdr.mLen;    number_of_bytes_without_options = sizeof (PPP_HEADER) + sizeof (NCP_HEADER);    if (number_of_bytes_rxed > number_of_bytes_without_options)	{	process_ncp_configuration_nak_options (pluginState,		&pStackData->option_lists,contiguousPacket);	}    else	{	printf ("PPP:IPCP Configuration NAK Received with no NAK options in it \		for stack: 0x%x\n", (UINT32)pluginState->stackObj);        netMblkClChainFree (contiguousPacket);	return;	}    if (pStackData->last_txed_ncp_configuration_request_packet != NULL)	{	netMblkClChainFree (			pStackData->last_txed_ncp_configuration_request_packet);	pStackData->last_txed_ncp_configuration_request_packet = NULL;	}    netMblkClChainFree (contiguousPacket);    execute_ppp_state_machine (pluginState, PPP_RECEIVE_CONFIGURE_NAK_EVENT,				NULL);    }/********************************************************************************* ncp_configure_reject_received - */LOCAL void ncp_configure_reject_received     (    PFW_PLUGIN_OBJ_STATE * pluginState,    M_BLK_ID packet    )    {    M_BLK_ID contiguousPacket = packet;    NCP_PACKET *sptr_ipcp_rx_packet;    USHORT number_of_bytes_rxed;    NCP_STACK_DATA *pStackData = (NCP_STACK_DATA *)pluginState->stackData;    USHORT number_of_bytes_without_options;    USHORT length_of_options_to_be_processed;    if (packet == NULL)        return;    sptr_ipcp_rx_packet = mtod(packet, NCP_PACKET *);    /* option processing expects a contiguous buffer */    if (packet->mBlkHdr.mNext != NULL)        {        number_of_bytes_rxed = packet->mBlkPktHdr.len;        contiguousPacket = m_pullup (packet,                            ntohs(sptr_ipcp_rx_packet->ncp_header.length));        if (contiguousPacket == NULL)            return;        }    else        number_of_bytes_rxed = packet->mBlkHdr.mLen;    sptr_ipcp_rx_packet = mtod(contiguousPacket, NCP_PACKET *);    if (sptr_ipcp_rx_packet->ncp_header.id == pStackData->last_request_id)	{        /* strip NCP header */        contiguousPacket->mBlkHdr.mLen -= sizeof(NCP_PACKET);        contiguousPacket->mBlkHdr.mData += sizeof(NCP_PACKET);	number_of_bytes_without_options = sizeof (PPP_HEADER) + 					  sizeof (NCP_HEADER);	length_of_options_to_be_processed = (USHORT) (number_of_bytes_rxed - 					number_of_bytes_without_options);	if (length_of_options_to_be_processed > 0x0000)	    {	    if (parse_ppp_options_from_reject_configure (		pluginState->pluginObj->pfwObj, &pStackData->option_lists, 		contiguousPacket)		== SOME_OPTIONS_ARE_REJECTED)		{		execute_ppp_state_machine (pluginState, PPP_CLOSE_EVENT, NULL);                netMblkClChainFree(contiguousPacket);		return;		}	    }        contiguousPacket->mBlkHdr.mLen += sizeof(NCP_PACKET);        contiguousPacket->mBlkHdr.mData -= sizeof(NCP_PACKET);	if (pStackData->last_txed_ncp_configuration_request_packet != NULL)	    {	    netMblkClChainFree (			pStackData->last_txed_ncp_configuration_request_packet);	    pStackData->last_txed_ncp_configuration_request_packet = NULL;	    }	execute_ppp_state_machine (pluginState, 		PPP_RECEIVE_CONFIGURE_REJECT_EVENT,NULL);	}    netMblkClChainFree(contiguousPacket);    }/********************************************************************************* ncp_termination_request_received -*/LOCAL void ncp_termination_request_received     (    PFW_PLUGIN_OBJ_STATE * pluginState,    M_BLK_ID packet    )    {    M_BLK_ID contiguousPacket = packet;    NCP_PACKET *sptr_ipcp_rx_packet;    USHORT number_of_bytes_rxed;    NCP_STACK_DATA *pStackData = (NCP_STACK_DATA *)pluginState->stackData;    NCP_PROFILE_DATA *pProfileData = (NCP_PROFILE_DATA *)				pluginState->profileData;    sptr_ipcp_rx_packet = mtod(packet, NCP_PACKET *);    /* option processing expects a contiguous buffer */    if (packet->mBlkHdr.mNext != NULL)        {        number_of_bytes_rxed = packet->mBlkPktHdr.len;        contiguousPacket = m_pullup (packet,                            ntohs(sptr_ipcp_rx_packet->ncp_header.length));        if (contiguousPacket == NULL)            return;        }    else        number_of_bytes_rxed = packet->mBlkHdr.mLen;    netMblkClChainFree (contiguousPacket);    execute_ppp_state_machine (pluginState, PPP_RECEIVE_TERMINATE_REQUEST_EVENT,		NULL);    /* wait 1 cycle for other side to terminate the link before trying to      * reset so we can come back up. rfc 1661 sect. 3.7     */    pStackData->number_of_ncp_termination_requests = (USHORT) 		pProfileData->maximum_number_of_termination_requests;    pStackData->termination_request_send_interval = 0x00000000L;    }/********************************************************************************* ncp_termination_ack_received -*/LOCAL void ncp_termination_ack_received     (    PFW_PLUGIN_OBJ_STATE * pluginState,    M_BLK_ID packet    )    {    M_BLK_ID contiguousPacket = packet;    NCP_PACKET *sptr_ipcp_rx_packet;    sptr_ipcp_rx_packet = mtod(packet, NCP_PACKET *);    /* option processing expects a contiguous buffer */    if (packet->mBlkHdr.mNext != NULL)        {        contiguousPacket = m_pullup(packet,                                ntohs(sptr_ipcp_rx_packet->ncp_header.length));        if (contiguousPacket == NULL)            return;        }    netMblkClChainFree (contiguousPacket);    execute_ppp_state_machine (pluginState, PPP_RECEIVE_TERMINATE_ACK_EVENT,			       NULL);    }/********************************************************************************* ncp_code_reject_received -*/LOCAL void ncp_code_reject_received     (    PFW_PLUGIN_OBJ_STATE * pluginState,    M_BLK_ID packet    )    {    M_BLK_ID contiguousPacket = packet;    NCP_CODE_REJECT_PACKET *sptr_ipcp_rx_packet;    sptr_ipcp_rx_packet = mtod(packet, NCP_CODE_REJECT_PACKET *);    /* option processing expects a contiguous buffer */    if (packet->mBlkHdr.mNext != NULL)        {        contiguousPacket = m_pullup(packet,                                ntohs(sptr_ipcp_rx_packet->ncp_header.length));        if (contiguousPacket == NULL)            return;        }    netMblkClChainFree (contiguousPacket);    execute_ppp_state_machine (pluginState, 		PPP_RECEIVE_CODE_REJECT_PERMITTED_EVENT, NULL);    }/********************************************************************************* process_ncp_configuration_options -*/LOCAL TEST process_ncp_configuration_options     (    PFW_PLUGIN_OBJ_STATE * pluginState,    OPTION_LISTS   *sptr_option_lists,  /* option lists */    M_BLK_ID mblk_rx_packet    )    {    OPTION_PARSE_RESULT parse_result;    NCP_STACK_DATA *pStackData = (NCP_STACK_DATA *)pluginState->stackData;    /* Strip NCP header */    mblk_rx_packet->mBlkHdr.mLen -= NCP_PACKET_HEADER_SIZE;    mblk_rx_packet->mBlkHdr.mData += NCP_PACKET_HEADER_SIZE;    parse_result = parse_ppp_options_from_configure_request (	pluginState->pluginObj->pfwObj, sptr_option_lists,                            mblk_rx_packet,pluginState);    mblk_rx_packet->mBlkHdr.mLen += NCP_PACKET_HEADER_SIZE;    mblk_rx_packet->mBlkHdr.mData -= NCP_PACKET_HEADER_SIZE;    if (parse_result == OPTION_PARSING_ERROR)        {	printf ("NCP: received bad Configure Request\n");        netMblkClChainFree (mblk_rx_packet);        pStackData->last_rxed_ncp_configuration_request_packet = NULL;        return (FAIL);	}    if (parse_result == SOME_OPTIONS_ARE_REJECTED)        {        execute_ppp_state_machine (pluginState,                                   PPP_RECEIVE_CONFIG_REQUEST_BAD_OPTION_EVENT,                                   NULL);        return (FAIL);        }    else if (parse_result == SOME_OPTIONS_ARE_NACKED)        {        execute_ppp_state_machine (pluginState,                                    PPP_RECEIVE_CONFIGURE_REQUEST_BAD_EVENT,                                    NULL);        return (FAIL);        }    else        {        return (PASS);        }    }/********************************************************************************* illegal_ncp_code_received -*/LOCAL void illegal_ncp_code_received     (    PFW_PLUGIN_OBJ_STATE * pluginState,    M_BLK_ID packet    )    {    execute_ppp_state_machine (pluginState, PPP_RECEIVE_UNKNOWN_CODE_EVENT,			       packet);    }/********************************************************************************* process_ncp_configuration_nak_options -*/LOCAL TEST process_ncp_configuration_nak_options    (    PFW_PLUGIN_OBJ_STATE * pluginState,    OPTION_LISTS   * sptr_option_lists, /* option lists */    M_BLK_ID     mblk_rx_packet    )    {    mblk_rx_packet->mBlkHdr.mLen -= NCP_PACKET_HEADER_SIZE;    mblk_rx_packet->mBlkHdr.mData += NCP_PACKET_HEADER_SIZE;    parse_ppp_options_from_nak_configure (pluginState->pluginObj->pfwObj, 	sptr_option_lists, mblk_rx_packet, pluginState);    mblk_rx_packet->mBlkHdr.mLen += NCP_PACKET_HEADER_SIZE;    mblk_rx_packet->mBlkHdr.mData -= NCP_PACKET_HEADER_SIZE;    return (PASS);    }

⌨️ 快捷键说明

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