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

📄 ras.c

📁 WinCE5.0部分核心源码
💻 C
📖 第 1 页 / 共 3 页
字号:
		RasEntry.dwSize = sizeof(RasEntry);
		RetVal = AfdRasGetEntryProperties ( NULL, (LPTSTR)pBufIn, (LPBYTE)&RasEntry, &dwSize, NULL, NULL);
		if (RetVal)
		{
			DEBUGMSG (ZONE_ERROR, (TEXT("PPP: pppRasCntlGetDispPhone: Error %d from AfdRasGetEntryProperties\r\n"), RetVal));
			break;
		}

		// Shortcut for 
		if (0 == _tcscmp (RasEntry.szDeviceType, RASDT_Modem))
		{
			// Now find the associated adapter
			if (SUCCESS != FindAdapter (RasEntry.szDeviceName, RasEntry.szDeviceType, &pAdapter, &dwDeviceID))
			{
				DEBUGMSG (ZONE_ERROR, (TEXT("ppp: pppRasCntlGetDispPhone: Can't find device '%s'\r\n"), RasEntry.szDeviceName));
				RetVal = ERROR_DEVICE_DOES_NOT_EXIST;
				break;
			}

			dwFlag = 0;
			if (RasEntry.dwfOptions & RASEO_UseCountryAndAreaCodes)
				dwFlag = LINETRANSLATEOPTION_FORCELD;
			else if (RasEntry.dwfOptions & RASEO_DialAsLocalCall)
				dwFlag = LINETRANSLATEOPTION_FORCELOCAL;
			
			// Now attempt to translate the number
			szDialStr = NdisTapiLineTranslateAddress (pAdapter, dwDeviceID,
				RasEntry.dwCountryCode,
				RasEntry.szAreaCode,
				RasEntry.szLocalPhoneNumber,
				FALSE, dwFlag);

			AdapterDelRef (pAdapter);
				
			if (szDialStr)
			{
					// Now copy the result back
					_tcsncpy ((LPTSTR)pBufOut, szDialStr, dwLenOut/sizeof(TCHAR));
					LocalFree (szDialStr);
			}
			else
			{
				RetVal = ERROR_CANNOT_LOAD_STRING;
			}
		}
		else if (0 == _tcscmp (RasEntry.szDeviceType, RASDT_Vpn))
		{
			_tcsncpy ((LPTSTR)pBufOut, RasEntry.szLocalPhoneNumber, dwLenOut / sizeof(TCHAR));
		}
		else
		{
			// For other types just return the null string
			*(LPTSTR)pBufOut = TEXT('\0');
		}
	} while (FALSE); // end do

	return RetVal;
}

PPROTOCOL_CONTEXT
pppFindProtocolContext(
	pppSession_t   *pSession,
	DWORD           ProtocolType)
//
//  Find the PROTOCOL_CONTEXT for the specified ProtocolType in the session.
//
{
	PPROTOCOL_CONTEXT pContext = NULL,
				      pEndContext;

	if (ProtocolType != 0)
	{
		pEndContext = &pSession->pRegisteredProtocolTable[pSession->numRegisteredProtocols];
		for (pContext = &pSession->pRegisteredProtocolTable[0]; TRUE; pContext++)
		{
			if (pContext >= pEndContext)
			{
				pContext = NULL;
				break;
			}
			if (pContext->Type == ProtocolType)
			{
				// Matched, return pContext.
				break;
			}
		}
	}
	return pContext;
}

DWORD
pppLayerOpen(
	PPROTOCOL_CONTEXT pContext)
{
	DWORD RetVal = ERROR_INVALID_PARAMETER;

	if (pContext->pDescriptor->Open)
		RetVal = pContext->pDescriptor->Open(pContext->Context);

	return RetVal;
}

DWORD
pppLayerClose(
	PPROTOCOL_CONTEXT pContext)
{
	DWORD RetVal = ERROR_INVALID_PARAMETER;

	if (pContext->pDescriptor->Close)
		RetVal = pContext->pDescriptor->Close(pContext->Context);

	return RetVal;
}

DWORD
pppLayerRenegotiate(
	PPROTOCOL_CONTEXT pContext)
{
	DWORD RetVal = ERROR_INVALID_PARAMETER;

	if (pContext->pDescriptor->Renegotiate)
		RetVal = pContext->pDescriptor->Renegotiate(pContext->Context);

	return RetVal;
}

DWORD
pppLayerCommand(
    LPVOID  hRasConn,
    PBYTE   pBufIn,
    DWORD   dwLenIn,
	DWORD  (*pfnCommand)(PPROTOCOL_CONTEXT pContext))
//
//  For the specified connection, execute the specified layer command.
//
{
	DWORD             RetVal     = ERROR_INVALID_PARAMETER;
	DWORD             ProtocolType;
    pppSession_t     *s_p = (pppSession_t *)hRasConn;
	PPROTOCOL_CONTEXT pContext;

	if ((dwLenIn < sizeof(DWORD)) || (NULL == pBufIn) || (NULL == hRasConn))
	{
		DEBUGMSG (ZONE_ERROR, (TEXT("PPP: pppLayerCommand : Invalid Parameter\r\n")));
	}
	else if (PPPADDREF (s_p, REF_GETRASSTATS))
	{
		pppLock(s_p);
		ProtocolType = *(DWORD *)pBufIn;
		pContext = pppFindProtocolContext(s_p, ProtocolType);
		if (pContext)
		{
			RetVal = pfnCommand(pContext);
		}
		else
		{
			DEBUGMSG (ZONE_ERROR, (TEXT("PPP: pppLayerCommand : Unsupported protocol %x\r\n"), ProtocolType));
		}

		pppUnLock(s_p);
		PPPDELREF(s_p, REF_GETRASSTATS);
	}

	return RetVal;
}


DWORD
pppLayerParameterGetOrSetCommand(
    LPVOID  hRasConn,
    PBYTE   pBufIn,
    DWORD   dwLenIn,
    PBYTE   pBufOut, 
    DWORD   dwLenOut,
    PDWORD  pdwActualOut,
	BOOL    bDoGet)
{
	DWORD                     RetVal     = ERROR_INVALID_PARAMETER;
    pppSession_t             *s_p = (pppSession_t *)hRasConn;
	PRASCNTL_LAYER_PARAMETER  pParmIn,
		                      pParmOut;
	PPROTOCOL_CONTEXT         pContext;

	if ((dwLenIn < sizeof(RASCNTL_LAYER_PARAMETER)) || (NULL == pBufIn) || (NULL == hRasConn))
	{
		DEBUGMSG (ZONE_ERROR, (TEXT("PPP: pppLayerCommand : Invalid Parameter\r\n")));
	}
	else if (PPPADDREF (s_p, REF_GETRASSTATS))
	{
		pppLock(s_p);
		pParmIn  = (PRASCNTL_LAYER_PARAMETER)pBufIn;
		pParmOut = (PRASCNTL_LAYER_PARAMETER)pBufOut;
		pContext = pppFindProtocolContext(s_p, pParmIn->dwProtocolType);
		if (pContext)
		{
			if (bDoGet)
			{
				if (pContext->pDescriptor->GetParameter)
				{
					pParmOut->dwProtocolType = pParmIn->dwProtocolType;
					pParmOut->dwParameterId = pParmIn->dwParameterId;
					*pdwActualOut = dwLenOut;
					RetVal = pContext->pDescriptor->GetParameter(pContext->Context, pParmOut, pdwActualOut);
				}
			}
			else
			{
				if (pContext->pDescriptor->SetParameter)
				{
					RetVal = pContext->pDescriptor->SetParameter(pContext->Context, pParmIn, dwLenIn);
				}
			}
		}
		else
		{
			DEBUGMSG (ZONE_ERROR, (TEXT("PPP: pppLayerCommand : Unsupported protocol %x\r\n"), pParmIn->dwProtocolType));
		}

		pppUnLock(s_p);
		PPPDELREF(s_p, REF_GETRASSTATS);
	}

	return RetVal;
}

DWORD
pppLayerParameterSetCommand(
    LPVOID  hRasConn,
    PBYTE   pBufIn,
    DWORD   dwLenIn)
{
	DWORD             RetVal     = ERROR_INVALID_PARAMETER;

	return RetVal;
}

// @doc INTERNAL

/*****************************************************************************
* 
*   @func   DWORD | RasIOControl | RAS IO Control Entry point
*
*   @rdesc  Returns SUCCESS if successful, non-zero error code otherwise
*   
*   @parm DWORD | dwOpenData | value returned from ttt_Open call
*   @parm DWORD | dwCode | io control code to be performed
*   @parm PBYTE | pBufIn | input data to the device
*   @parm DWORD | dwLenIn | number of bytes being passed in
*   @parm PBYTE | pBufOut | output data from the device
*   @parm DWORD | dwLenOut |maximum number of bytes to receive from device
*   @parm PDWORD | pdwActualOut | actual number of bytes received from device
*               
*/

DWORD APIENTRY
AfdRasIOControl
    ( 
    LPVOID  hRasConn,                           // handle - if available
    DWORD   dwCode,                             // request code
    PBYTE   pBufIn,
    DWORD   dwLenIn, 
    PBYTE   pBufOut, 
    DWORD   dwLenOut,
    PDWORD  pdwActualOut
    )
{
	DWORD        RetVal;

    DEBUGMSG (ZONE_RAS | ZONE_FUNCTION,
			  (TEXT("ppp:+AfdRasIOControl( 0x%X, %d, 0x%X, %d, 0x%X, %d, 0x%X )\r\n"),
			   hRasConn, dwCode, pBufIn, dwLenIn, pBufOut, dwLenOut, 
			   pdwActualOut));
    
	if (!g_bPPPInitialized)
	{
		// PPPInitialize has not been called yet, the system
		// is still starting up.
		RetVal = ERROR_SERVICE_NOT_ACTIVE;
	}
    else switch( (RasCntlEnum_t )dwCode ) 
    {
	case RASCNTL_STATISTICS :
		if ((dwLenOut < sizeof(RAS_STATS)) || (NULL == pBufOut) ||
			(NULL == hRasConn)) {
			RetVal = ERROR_INVALID_PARAMETER;
			DEBUGMSG (ZONE_ERROR, (TEXT("ppp: AfdRasIOControl : Invalid Parameter\r\n")));
			break;
		}
		RetVal = pppGetRasStats (hRasConn, (PRAS_STATS)pBufOut);
		
		*pdwActualOut = sizeof(RAS_STATS);
		break;
		
    case RASCNTL_SET_DEBUG:
    case RASCNTL_LOCK_STATUS:
    case RASCNTL_PRINT_CS:
		// deprecated debug ioctls
        RetVal = ERROR_INVALID_PARAMETER;
        break;

	case RASCNTL_ENUMDEV :
		// Serious abuse of parameters to the function.
		DEBUGMSG (ZONE_WARN, (TEXT("RasEnumDevices(0x%X, 0x%X, 0x%X)\r\n"),
							  pBufIn, pBufOut, pdwActualOut));

		RetVal = pppMac_EnumDevices((LPRASDEVINFOW)pBufIn, FALSE, (LPDWORD)pBufOut, (LPDWORD)pdwActualOut);
		break;

	case RASCNTL_GETPROJINFO:
		RetVal = AfdRasGetProjectionInfo((HRASCONN)hRasConn, (RASPROJECTION)dwLenIn, pBufIn, pdwActualOut);
		break;

	case RASCNTL_GETDISPPHONE :
		RetVal = pppRasCntlGetDispPhone(pBufIn, dwLenIn, pBufOut, dwLenOut, pdwActualOut);
		break;
	
	case RASCNTL_DEVCONFIGDIALOGEDIT :
		if ((dwLenIn < sizeof(RASCNTL_DEVCFGDLGED)) || (NULL == pBufIn) ||
			(NULL == pBufOut))
		{
			RetVal = ERROR_INVALID_PARAMETER;
			DEBUGMSG (ZONE_ERROR, (TEXT("ppp: AfdRasIOControl : Invalid Parameter\r\n")));
		}
		else
		{
			PRASCNTL_DEVCFGDLGED pDevCfgDlgEdit = (PRASCNTL_DEVCFGDLGED)pBufIn;

			RetVal = PPPDevConfigDialogEdit(
						pDevCfgDlgEdit->szDeviceName,
						pDevCfgDlgEdit->szDeviceType,
						pDevCfgDlgEdit->hWndOwner,
						pDevCfgDlgEdit->dwSize ? pDevCfgDlgEdit->DataBuf : NULL,
						pDevCfgDlgEdit->dwSize,
						(LPVARSTRING)pBufOut);
		}
		break;

	case RASCNTL_SERVER_GET_STATUS :
		RetVal = PPPServerGetStatus((PRASCNTL_SERVERSTATUS)pBufOut, dwLenOut, pdwActualOut);
		break;

	case RASCNTL_SERVER_ENABLE :
	case RASCNTL_SERVER_DISABLE :
		RetVal = PPPServerSetEnableState(dwCode == RASCNTL_SERVER_ENABLE);
		break;

	case RASCNTL_SERVER_GET_PARAMETERS :
		RetVal = PPPServerGetParameters((PRASCNTL_SERVERSTATUS)pBufOut, dwLenOut, pdwActualOut);
		break;

	case RASCNTL_SERVER_SET_PARAMETERS :
		RetVal = PPPServerSetParameters((PRASCNTL_SERVERSTATUS)pBufIn, dwLenIn);
		break;

	case RASCNTL_SERVER_GET_IPV6_NET_PREFIX :
		RetVal = PPPServerGetIPV6NetPrefix((PRASCNTL_SERVER_IPV6_NET_PREFIX)pBufOut, dwLenOut, pdwActualOut);
		break;
		
	case RASCNTL_SERVER_SET_IPV6_NET_PREFIX :
		RetVal = PPPServerSetIPV6NetPrefix((PRASCNTL_SERVER_IPV6_NET_PREFIX)pBufIn, dwLenIn);
		break;

	case RASCNTL_SERVER_LINE_ADD :
		RetVal = PPPServerLineAdd((PRASCNTL_SERVERLINE)pBufIn, dwLenIn);
		break;

	case RASCNTL_SERVER_LINE_REMOVE :
	case RASCNTL_SERVER_LINE_ENABLE :
	case RASCNTL_SERVER_LINE_DISABLE :
	case RASCNTL_SERVER_LINE_GET_PARAMETERS :
	case RASCNTL_SERVER_LINE_SET_PARAMETERS :
	case RASCNTL_SERVER_LINE_GET_CONNECTION_INFO :
		RetVal = PPPServerLineIoCtl(dwCode, (PRASCNTL_SERVERLINE)pBufIn, dwLenIn, (PRASCNTL_SERVERLINE)pBufOut, dwLenOut, pdwActualOut);
		break;

	case RASCNTL_SERVER_USER_SET_CREDENTIALS :
		RetVal = PPPServerUserSetCredentials((PRASCNTL_SERVERUSERCREDENTIALS)pBufIn, dwLenIn);
		break;

	case RASCNTL_SERVER_USER_DELETE_CREDENTIALS :
		RetVal = PPPServerUserDeleteCredentials((PRASCNTL_SERVERUSERCREDENTIALS)pBufIn, dwLenIn);
		break;

	case RASCNTL_EAP_GET_USER_DATA:
		RetVal = rasGetEapUserData(NULL, NULL, (PWSTR)pBufIn, pBufOut, pdwActualOut);
		break;

	case RASCNTL_EAP_SET_USER_DATA:
		RetVal = rasSetEapUserData(NULL, NULL, (PWSTR)pBufIn, pBufOut, dwLenOut);
		break;

	case RASCNTL_EAP_GET_CONNECTION_DATA:
		RetVal = rasGetEapConnectionData(NULL, (PWSTR)pBufIn, pBufOut, pdwActualOut);
		break;

	case RASCNTL_EAP_SET_CONNECTION_DATA:
		RetVal = rasSetEapConnectionData(NULL, (PWSTR)pBufIn, pBufOut, dwLenOut);
		break;

	case RASCNTL_ENABLE_LOGGING:
		RetVal = LoadLoggingExtension();
		break;

	case RASCNTL_DISABLE_LOGGING:
		RetVal = UnloadLoggingExtension();
		break;

	case RASCNTL_LAYER_PARAMETER_GET:
		RetVal = pppLayerParameterGetOrSetCommand(hRasConn, pBufIn, dwLenIn, pBufOut, dwLenOut, pdwActualOut, TRUE);
		break;

	case RASCNTL_LAYER_PARAMETER_SET:
		RetVal = pppLayerParameterGetOrSetCommand(hRasConn, pBufIn, dwLenIn, pBufOut, dwLenOut, pdwActualOut, FALSE);
		break;

	case RASCNTL_LAYER_OPEN:
		RetVal = pppLayerCommand(hRasConn, pBufIn, dwLenIn, pppLayerOpen);
		break;

	case RASCNTL_LAYER_CLOSE:
		RetVal = pppLayerCommand(hRasConn, pBufIn, dwLenIn, pppLayerClose);
		break;

	case RASCNTL_LAYER_RENEGOTIATE:
		RetVal = pppLayerCommand(hRasConn, pBufIn, dwLenIn, pppLayerRenegotiate);
		break;

    default:
        RetVal = ERROR_INVALID_PARAMETER;
        break;
    }

    DEBUGMSG (ZONE_RAS | ZONE_FUNCTION,
			  (TEXT("ppp: -AfdRasIOControl : RetVal=%d\r\n"), RetVal));
    return RetVal;
}


⌨️ 快捷键说明

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