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

📄 hidden.c

📁 Windows CE 6.0 BSP for VOIP sample phone. Intel PXA270 platform.
💻 C
📖 第 1 页 / 共 2 页
字号:
                       		     sizeof(NDIS_802_11_MAC_ADDRESS));

		// add SSID, supported rates, and wpa IE info associate request
        	{
            		//UCHAR tmpBuf[500];
            		ULONG ulReqIELen = 0;
            		ULONG ulCurOffset = 0;
            		UCHAR ucElemID;
            		UCHAR ucElemLen;
            		PUCHAR pIEBuf, pRequestIEBuf;


            		pIEBuf = pBSSIDIEListSrc[Adapter->ulAttemptedBSSIDIndex].VariableIE;
            		pRequestIEBuf = Adapter->AssocInfoBuffer + pAdapterAssoInfo->OffsetRequestIEs;

            		DBGPRINT( DBG_WPA, ("Variable IE Length is %d\n", 
                				 pBSSIDListSrc[Adapter->ulAttemptedBSSIDIndex].IELength - 
                	  			 MRVL_FIXED_IE_SIZE));

            		while ( ulCurOffset <  (pBSSIDListSrc[Adapter->ulAttemptedBSSIDIndex].IELength - MRVL_FIXED_IE_SIZE) )
            		{
                		ucElemID = *(pIEBuf + ulCurOffset);
                		ucElemLen = *(pIEBuf + ulCurOffset + 1);
                
               	 	// wpa, supported rate, or wpa
                		if ( (ucElemID == SSID) ||
                     	     (ucElemID == SUPPORTED_RATES) ||
                     	     (ucElemID == WPA_IE) ||
                     	     (ucElemID == WPA2_IE))
                		{
                			// plus ++                    
                    			if ((ucElemID == WPA2_IE) &&  
                       		   ((Adapter->AuthenticationMode == Ndis802_11AuthModeWPA2) ||
                        		   (Adapter->AuthenticationMode == Ndis802_11AuthModeWPA2PSK )))
                    			{
                      			NdisMoveMemory(  pRequestIEBuf + ulReqIELen,
                                    					&Adapter->wpa2_supplicant.Wpa_ie[0],
                                    					Adapter->wpa2_supplicant.Wpa_ie_len);
                      			ulReqIELen += Adapter->wpa2_supplicant.Wpa_ie_len; 
                    	
                    			}
               			 //plus--
                   			else
					{
                      			// copy the IE to association information buffer
                      			NdisMoveMemory( pRequestIEBuf + ulReqIELen,
                                      					pIEBuf + ulCurOffset,
                                      					ucElemLen + 2 );
                      			ulReqIELen += ( ucElemLen + 2); 
                   			}

                    			DBGPRINT(DBG_WPA, ("Copied elemID = 0x%x, %d bytes into request IE\n",
                        							ucElemID, ulReqIELen));
#ifdef PMKID_CACHE_CAP2
					if ( ucElemID == WPA2_IE )
					{
						if ( nPmkidIdx >= 0 )
						{
							pOriWpa2Ie = pRequestIEBuf + ulReqIELen - ( ucElemLen + 2);
					
							DBGPRINT( DBG_MACEVENT, ("    Append PMKID to association buffer\n") );
							DBGPRINT( DBG_MACEVENT, ("    . Original Len=%d, Current IE=%d, ucElemLen=%d\n", pOriWpa2Ie[1], pOriWpa2Ie[0], ucElemLen ) );

							pRequestIEBuf[ulReqIELen] = 1;
							pRequestIEBuf[ulReqIELen+1] = 0;
							NdisMoveMemory( pRequestIEBuf+ulReqIELen+2,
							Adapter->PmkidCache[nPmkidIdx].pmkid, LEN_OF_PMKID);

							ulReqIELen += (LEN_OF_PMKID+2);

							pOriWpa2Ie[1] += (LEN_OF_PMKID+2);

							DBGPRINT( DBG_MACEVENT, ("    . New Len=%d, New ReqIeLen=%d\n", pOriWpa2Ie[1], ulReqIELen ) );
							HexDump( DBG_MACEVENT, "    === Assoc Buffer Dump ===", pRequestIEBuf, ulReqIELen ); //tt
						}
					}
#endif //PMKID_CACHE_CAP2

                    			HexDump(DBG_WPA, "RequestIE:", pRequestIEBuf, 32);                    
                   		
                		}

                		ulCurOffset = ulCurOffset + 2 + ucElemLen;
            		}

            		pAdapterAssoInfo->RequestIELength = ulReqIELen;
            		pAdapterAssoInfo->OffsetResponseIEs = pAdapterAssoInfo->OffsetRequestIEs + 
                                                  pAdapterAssoInfo->RequestIELength;
        	}



		
                            
		// completely clean up
		PrepareAndSendCommand(
				Adapter,
				HostCmd_CMD_802_11_DEAUTHENTICATE,
				0,
				HostCmd_OPTION_USE_INT,
				(NDIS_OID)0,
				HostCmd_PENDING_ON_NONE,
				0,
				FALSE,
				NULL,
				NULL,
				NULL,
				Adapter->CurrentBSSID);

        	// no longer check because FW does not remember the
        	{
            		Adapter->WPAEnabled = TRUE;

           	 	// enable WPA
           		PrepareAndSendCommand(
				        Adapter,
			        	HostCmd_CMD_802_11_ENABLE_RSN,
			        	HostCmd_ACT_SET,
			        	HostCmd_OPTION_USE_INT,
			        	(NDIS_OID)0,
			        	HostCmd_PENDING_ON_NONE,
			        	0,
			        	FALSE,
			        	NULL,
			        	NULL,
			        	NULL,
			        	NULL);
        	}

        	// set authentication mode
		PrepareAndSendCommand(
				Adapter,
				HostCmd_CMD_802_11_AUTHENTICATE,
				0,
				HostCmd_OPTION_USE_INT,
				(NDIS_OID)0,
				HostCmd_PENDING_ON_NONE,
				0,
				FALSE,
				NULL,
				NULL,
				NULL,
				pBSSIDListSrc[index].MacAddress);
/*        
        	// send down authentication mode
        	PrepareAndSendCommand(
				Adapter,
			    	HostCmd_CMD_802_11_RSN_AUTH_SUITES,
			    	HostCmd_ACT_SET,
			    	HostCmd_OPTION_USE_INT,
			    	(NDIS_OID)0,
			    	HostCmd_PENDING_ON_NONE,
			    	0,
			    	FALSE,
			    	NULL,
			    	NULL,
			    	NULL,
			    	NULL);
*/

    	}
	else
		
#endif // #ifdef WPA

	{
	
            	// completely clean up
		PrepareAndSendCommand(
				Adapter,
				HostCmd_CMD_802_11_DEAUTHENTICATE,
				0,
				HostCmd_OPTION_USE_INT,
				(NDIS_OID)0,
				HostCmd_PENDING_ON_NONE,
				0,
				FALSE,
				NULL,
				NULL,
				NULL,
				Adapter->CurrentBSSID);

		// set authentication mode
		PrepareAndSendCommand(
				Adapter,
				HostCmd_CMD_802_11_AUTHENTICATE,
				0,
				HostCmd_OPTION_USE_INT,
				(NDIS_OID)0,
				HostCmd_PENDING_ON_NONE,
				0,
				FALSE,
				NULL,
				NULL,
				NULL,
				pBSSIDListSrc[index].MacAddress);
	}

	Adapter->ulTringHiddenAP = index;
	Adapter->bIsHiddenTried[index] = TRUE;
	
	Adapter->bIsTryHiddenAP = TRUE;

	HexDump(DBG_SCAN,"pAsso dump: ", (PVOID)pAsso, 
                     				    sizeof(HostCmd_DS_802_11_ASSOCIATE_EXT));

	InsertCmdToQueue (Adapter, pTempAsocCmd); 
	GetCmdFromQueueToExecute(Adapter);
	
}

VOID
FastHiddenApResponse(	
		PHostCmd_DS_802_11_ASSOCIATE_RESULT pAssoResult,
		PMRVDRV_ADAPTER Adapter)
{
	PPENDING_OID pPending;
	PNDIS_WLAN_BSSID_EX pBSSIDListSrc;
    	PMRV_BSSID_IE_LIST   pIESrc;

	DBGPRINT(DBG_SCAN, (" FastHiddenApResponse()\n"));

	Adapter->bIsTryHiddenAP = TRUE;

	// Set Bytes read
	if (Adapter->CurCmd->BytesRead != NULL)
		*(Adapter->CurCmd->BytesRead) = sizeof(NDIS_802_11_SSID);

#ifdef WPA

    	if ( FW_IS_WPA_ENABLED(Adapter) )
    	{
       	// copy the association result info to the ASSOCIATION_INFO buffer
        	PNDIS_802_11_ASSOCIATION_INFORMATION pInfo;

        	pInfo = (PNDIS_802_11_ASSOCIATION_INFORMATION)Adapter->AssocInfoBuffer;

        	// only currently copy the fixed IE
        	// TODO copy the entire IE once it is available!
        	pInfo->ResponseFixedIEs.Capabilities = pAssoResult->CapInfo;
        	pInfo->ResponseFixedIEs.StatusCode = pAssoResult->StatusCode;
        	pInfo->ResponseFixedIEs.AssociationId = pAssoResult->AssociationID;

        	pInfo->AvailableResponseFixedIEs |= NDIS_802_11_AI_RESFI_CAPABILITIES;
        	pInfo->AvailableResponseFixedIEs |= NDIS_802_11_AI_RESFI_STATUSCODE;
        	pInfo->AvailableResponseFixedIEs |= NDIS_802_11_AI_RESFI_ASSOCIATIONID;

        	//HexDump(DBG_CMDRESP,"AssociationResult", (PUCHAR )pAssoResult, pAssoResult->Size);

        	// copy the IE after the request IE buffer
        
        	pInfo->ResponseIELength = pAssoResult->IELength;		
        	NdisMoveMemory( Adapter->AssocInfoBuffer + pInfo->OffsetResponseIEs,
              	          		pAssoResult->IE,
                     	   		pAssoResult->IELength);

        	/*
		pInfo->ResponseIELength = Adapter->PSBSSIDList[Adapter->ulAttemptedBSSIDIndex].IELength;		
		NdisMoveMemory( Adapter->AssocInfoBuffer + pInfo->OffsetResponseIEs,
                        Adapter->PSIEBuffer[Adapter->ulAttemptedBSSIDIndex].VariableIE,
                        pInfo->ResponseIELength);
        	*/

        	DBGPRINT(DBG_CMDRESP, ("*** Association Result IE: CapInfo = 0x%x, "
              	                 	"StatusCode = 0x%x, AssociationID = 0x%x\n",
                     	          	pInfo->ResponseFixedIEs.Capabilities,
                            	   	pInfo->ResponseFixedIEs.StatusCode,
                               		pInfo->ResponseFixedIEs.AssociationId));
    	}

#endif 

	if (pAssoResult->StatusCode != 0x0)
	{
		DBGPRINT(DBG_CMDRESP,("HWAC - Association Failed, code = %d\n", 
								pAssoResult->StatusCode));

        	// clear out current association
        	NdisZeroMemory(&(Adapter->CurrentSSID), sizeof(NDIS_802_11_SSID));
	 
		if (Adapter->MediaConnectStatus ==	NdisMediaStateConnected)
        	{
			ResetDisconnectStatus(Adapter);  								
		}			

		// add scan to clean up the old BSSID list in firmware/driver		
        	if (Adapter->bRetryAssociate == TRUE)
        	{
            		Adapter->bRetryAssociate = FALSE;
        	}

              if (FindHiddenApToTry(Adapter) ==0xffffffff)
              {
			// return pending OID_802_11_SET_SSID
			pPending = &(Adapter->PendingSetSssidOid);
	    		if (pPending->bIsPendingOID)
	    		{	
				pPending->bIsPendingOID = FALSE;
				*(pPending->BytesReadWrite) = 0;
				 
		 		NdisMSetInformationComplete(
							Adapter->MrvDrvAdapterHdl,
							NDIS_STATUS_SUCCESS);   ///NDIS_STATUS_FAILURE);
	    		}
			Adapter->bIsAssociateInProgress = FALSE; 

			Adapter->bIsReConnectNow = FALSE;
	       	Adapter->bIsSystemConnectNow = FALSE;

			ResetHiddenTryFlag(Adapter);
              }
		else
		{
			FastHiddenApAssociate (Adapter);
		}
		return;
			
	}
		
	Adapter->MediaConnectStatus = NdisMediaStateConnected;
	   
#ifdef MRV_CHIP_8385PN  
	Adapter->LinkSpeed = MRVDRV_LINK_SPEED_54mbps;
#elif  defined(MRV_CHIP_8385H)
	Adapter->LinkSpeed = MRVDRV_LINK_SPEED_54mbps;
#else
	Adapter->LinkSpeed = MRVDRV_LINK_SPEED_11mbps;
#endif

    	// indicate the NDIS the media is didconnected
    	DBGPRINT(DBG_CMDRESP,("HWAC - Indicated association\n"));
	NdisMIndicateStatus(Adapter->MrvDrvAdapterHdl,
				NDIS_STATUS_MEDIA_CONNECT,
				(PVOID)NULL, 
				0);
		
	NdisMIndicateStatusComplete(Adapter->MrvDrvAdapterHdl);

#ifdef MRVL_GUI_INTERFACE
	MrvlNotifyApplication(
				COMMAND_EVENT_ASSOC_SUCCESS,
				NULL,
				0);
#endif 


	if (Adapter->ulPSNumOfBSSIDs == MRVDRV_MAX_BSSID_LIST)
	{
              NdisMoveMemory( &Adapter->PSBSSIDList[MRVDRV_MAX_BSSID_LIST],
              			      &Adapter->HiddenBSSIDList[Adapter->ulTringHiddenAP],         		 
                               	      sizeof(NDIS_WLAN_BSSID_EX));

	       NdisMoveMemory(  &Adapter->PSIEBuffer[MRVDRV_MAX_BSSID_LIST],
		   				&Adapter->HiddenIEBuffer[Adapter->ulTringHiddenAP],
                                         sizeof(MRV_BSSID_IE_LIST)); 

	       NdisMoveMemory( &Adapter->PSBssDescList[MRVDRV_MAX_BSSID_LIST],
		   				&Adapter->HiddenBssDescList[Adapter->ulTringHiddenAP], 
                                         sizeof(BSS_DESCRIPTION_SET_ALL_FIELDS));	
	}
       else
       {
		NdisMoveMemory(  &Adapter->PSBSSIDList[Adapter->ulPSNumOfBSSIDs],
              			       &Adapter->HiddenBSSIDList[Adapter->ulTringHiddenAP],         		 
                               	       sizeof(NDIS_WLAN_BSSID_EX));

	       NdisMoveMemory(  &Adapter->PSIEBuffer[Adapter->ulPSNumOfBSSIDs],
		   				&Adapter->HiddenIEBuffer[Adapter->ulTringHiddenAP],
                                          sizeof(MRV_BSSID_IE_LIST)); 

	       NdisMoveMemory(  &Adapter->PSBssDescList[Adapter->ulPSNumOfBSSIDs],
		   				&Adapter->HiddenBssDescList[Adapter->ulTringHiddenAP], 
                                          sizeof(BSS_DESCRIPTION_SET_ALL_FIELDS));	

		Adapter->ulPSNumOfBSSIDs++;	

       }

	pBSSIDListSrc = Adapter->PSBSSIDList;
    	pIESrc = Adapter->PSIEBuffer;

	Adapter->ulCurrentBSSIDIndex = Adapter->ulPSNumOfBSSIDs;  

	NdisMoveMemory( 	&Adapter->CurrentBSSIDDesciptor,
       				&pBSSIDListSrc[Adapter->ulCurrentBSSIDIndex],
              	      		sizeof(NDIS_WLAN_BSSID_EX));

    	NdisMoveMemory( 	&Adapter->CurrentBSSIDIEBuffer,
       	             		&pIESrc[Adapter->ulCurrentBSSIDIndex],
              	      		sizeof(MRV_BSSID_IE_LIST));

    	NdisMoveMemory( 	&Adapter->CurrentSSID,
       			      	&(pBSSIDListSrc[Adapter->ulCurrentBSSIDIndex].Ssid),
        			      	sizeof(NDIS_802_11_SSID));
		
	// Set the new BSSID (AP's MAC address) to current BSSID
	NdisMoveMemory( 	Adapter->CurrentBSSID,
				    	&(pBSSIDListSrc[Adapter->ulCurrentBSSIDIndex].MacAddress), 
				    	MRVDRV_ETH_ADDR_LEN);
		
	// Make a copy of current BSSID descriptor
	NdisMoveMemory( 	&(Adapter->CurrentBssDesciptor), 
					&(Adapter->PSBssDescList[Adapter->ulCurrentBSSIDIndex]), 
					sizeof(BSS_DESCRIPTION_SET_ALL_FIELDS));

	// Set the new configuration to the current config
	NdisMoveMemory(	&Adapter->CurrentConfiguration, 
					&(pBSSIDListSrc[Adapter->ulCurrentBSSIDIndex].Configuration),
					sizeof(NDIS_802_11_CONFIGURATION));
	

#ifdef MRVL_GUI_INTERFACE
	MrvlNotifyApplication(
				COMMAND_EVENT_ASSOC_SUCCESS,
				NULL,
				0);
#endif 
   
	//  Initialize RSSI value to specific number so the first
	//  RSSI value will be recorded as so without the average
	Adapter->LastRSSI = MRVL_DEFAULT_INITIAL_RSSI;   // default value

	Adapter->usTimeElapsedSinceLastScan = 0;
	Adapter->ulTxByteInLastPeriod = 
	Adapter->ulRxByteInLastPeriod = 0;

  	// reset awake time stamp
    	Adapter->ulAwakeTimeStamp = 0;

	DBGPRINT(DBG_CMDRESP,("HWAC - Associated\n"));

	pPending = &(Adapter->PendingSetSssidOid);
	if (pPending->bIsPendingOID)
	{	
		pPending->bIsPendingOID = FALSE;
              *(pPending->BytesReadWrite) = 0;
			  
		NdisMSetInformationComplete(
					Adapter->MrvDrvAdapterHdl,
					NDIS_STATUS_SUCCESS);
	}

	if ( (Adapter->MediaConnectStatus == NdisMediaStateConnected) &&
	   !(Adapter->EncryptionStatus == Ndis802_11Encryption2KeyAbsent))
	{
    		if (Adapter->PSMode == Ndis802_11PowerModeMAX_PSP)
			PSSleep(Adapter);
	}

	Adapter->bIsAssociateInProgress = FALSE; 
	Adapter->bIsReConnectNow = FALSE;
	Adapter->bIsSystemConnectNow = FALSE;

	ResetHiddenTryFlag(Adapter);
       InfraBssReconnectStop(Adapter);
}

⌨️ 快捷键说明

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