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

📄 bjackview.cpp

📁 手机文件浏览器 Here are the sources to SMan v1.2c 1.2 is a major jump from v1.1. You will see this from the
💻 CPP
📖 第 1 页 / 共 4 页
字号:
	{
		TBuf<30> temp;
		temp.Format(_L("%x:%x:%x:%x:%x:%x - "), btDevice[currentDeviceIndex].btDevAddr[0], 
			btDevice[currentDeviceIndex].btDevAddr[1], btDevice[currentDeviceIndex].btDevAddr[2], 
			btDevice[currentDeviceIndex].btDevAddr[3], btDevice[currentDeviceIndex].btDevAddr[4], 
			btDevice[currentDeviceIndex].btDevAddr[5]);

		HBufC* dataBuffer = HBufC::NewL(theText.Length() + temp.Length());
		dataBuffer->Des().Copy(temp);
		dataBuffer->Des().Append(theText);
		logHelper->updateLog(dataBuffer, 0, logType);
		delete dataBuffer;
		/*
		TBuf<70> temp;
		temp.Format(_L("%x:%x:%x:%x:%x:%x - "), btDevice[currentDeviceIndex].btDevAddr[0], 
			btDevice[currentDeviceIndex].btDevAddr[1], btDevice[currentDeviceIndex].btDevAddr[2], 
			btDevice[currentDeviceIndex].btDevAddr[3], btDevice[currentDeviceIndex].btDevAddr[4], 
			btDevice[currentDeviceIndex].btDevAddr[5]);
		temp.Append(theText);
		logHelper->updateLog(&temp, 0, logType);
		*/
	}
	else
	{
		HBufC *dataBuffer = HBufC::NewL(theText.Length() + KMaxDeviceName + 3);
		dataBuffer->Des().Copy(btDevice[currentDeviceIndex].btNames);
		dataBuffer->Des().Append(_L(" - "));
		dataBuffer->Des().Append(theText);
		logHelper->updateLog(dataBuffer, 0, logType);
		delete dataBuffer;
		/*
		TBuf<0x100 + 40> temp;
		temp.Copy(btDevice[currentDeviceIndex].btNames);
		temp.Append(_L(" - "));
		temp.Append(theText);
		logHelper->updateLog(&temp, 0, logType);
		*/
	}
}

void CScanner::rest(void)
{
	if (firstRest)
	{
		HBufC* dataBuffer = CEikonEnv::Static()->AllocReadResourceL(R_TBUF_BJACKCOOLOFF);
		logHelper->updateLog(dataBuffer, 0, CLogger::logDecays);
		delete dataBuffer;
		//TBuf<50> txt;
		//CEikonEnv::Static()->ReadResource(txt, R_TBUF_BJACKCOOLOFF);
		//logHelper->updateLog(&txt, 0, CLogger::logDecays);
		
		scannerStatus = isRest;
		firstRest = EFalse;
	}
	After(TIMER_GRANULARITY);
}

void CScanner::bluejackNextDevice(void)
{
	if (getNextBTDeviceIndex())
	{
		if (obexClient)
		{
			delete obexClient;
			obexClient = NULL;
		}
		iStatus = KRequestPending;
		if (btDevice[currentDeviceIndex].obexPort == -1)
		{
			scannerStatus = isOBEXSearch;
			obexRetries = OBEX_RETRIES;
			obexSearcher.start(&iStatus, &(btDevice[currentDeviceIndex].btDevAddr));
			SetActive();
		}
		else
		{
			// This is a hack... :(
			obexSearcher.RFCOMMPort = btDevice[currentDeviceIndex].obexPort;
			scannerStatus = isOBEXSearch;
			RunL();
		}
	}
	else
	{
		currentNoDeviceAttempts++;
		if (*localProxSweepOnce == EFalse)
		{
			if (currentNoDeviceAttempts > *localNoDeviceAttempts)
			{
				currentNoDeviceAttempts = 0;
				startRestTime.HomeTime();
				currentNoDevicePause = *localNoDevicePause;
				firstRest = ETrue;
				rest();
			}
			else
				doRealScan();
		}
		else
		{
			stopScan();
			SetToolbarButtonState();
		}
	}
}

void CScanner::SetToolbarButtonState()
{
	CEikButtonGroupContainer* toolbar =	CEikonEnv::Static()->AppUiFactory()->ToolBar();
	if (toolbar != NULL)
	{
		CEikCommandButton* button = (CEikCommandButton*)(toolbar->ControlOrNull(cmdBluejackStop));
		if (button != NULL)
		{
			if (!IsActive())
			{
				button->SetDimmed(ETrue);

				button = (CEikCommandButton*)(toolbar->ControlOrNull(cmdBluejack));
				button->SetDimmed(EFalse);
				button = (CEikCommandButton*)(toolbar->ControlOrNull(cmdBluejackOne));
				button->SetDimmed(EFalse);
			}
			else
			{
				button->SetDimmed(EFalse);

				button = (CEikCommandButton*)(toolbar->ControlOrNull(cmdBluejack));
				button->SetDimmed(ETrue);
				button = (CEikCommandButton*)(toolbar->ControlOrNull(cmdBluejackOne));
				button->SetDimmed(ETrue);
			}
			CEikonEnv::Static()->AppUiFactory()->ToolBar()->DrawNow();
		}
	}
}

void CScanner::RunL()
{
	static_cast<CSMan2AppUi*>(CEikonEnv::Static()->EikAppUi())->updateBJackIcon(ETrue);
	if (scannerStatus == isRest)
	{
		TTime currentTime;
		TTimeIntervalSeconds interval;
		
		currentTime.HomeTime();
		if (currentTime.SecondsFrom(startRestTime, interval) != 0)
			interval = CONFIG_NO_DEVICE_PAUSE + 1;

		if (interval.Int() >= currentNoDevicePause)
			bluejackNextDevice();
		else
			rest();
	} 
	else if (scannerStatus == isOBEXDisconnect)
	{
		timeoutCounter.stopTimer();
		startRestTime.HomeTime();
		currentNoDevicePause = STACK_COOLOFF_COUNTDOWN;
		firstRest = ETrue;
		rest();
	}
	else if (scannerStatus == isOBEXSend)
	{
		timeoutCounter.stopTimer();
		if (iStatus == KErrNone)
		{
			HBufC* dataBuffer = CEikonEnv::Static()->AllocReadResourceL(R_TBUF_BJACKSUCCESS);
			logWithLookup(*dataBuffer, CLogger::logBluejack);
			
			//TBuf<50> txt;
			//CEikonEnv::Static()->ReadResource(txt, R_TBUF_BJACKSUCCESS);
			//logWithLookup(txt, CLogger::logBluejack);
			
			if (*localShowSysMsg)
				User::InfoPrint(*dataBuffer);
			delete dataBuffer;
				
			// Update the device's status and timer
			btDevice[currentDeviceIndex].isBluejacked = statusValidBluejacked;
			btDevice[currentDeviceIndex].lastBluejackedTime.HomeTime();
			
			// Vibrate phone
			if (*localVibrate)
				myVibra->VibrationOn(1, 10, 3);
			
			// Audio?
			if (localAudioFile->Length() > 0)
				playAudio();
		}
		else
		{
			TBuf<10> errNum;
			errNum.Format(_L("%d"), iStatus);
			HBufC* dataBuffer = CEikonEnv::Static()->AllocReadResourceL(R_TBUF_BJACKERR);
			dataBuffer = dataBuffer->ReAllocL(dataBuffer->Length() + 11);
			dataBuffer->Des().Append(errNum);
			logWithLookup(*dataBuffer, CLogger::logBluejack);
			delete dataBuffer;
			
			// If the bluejack failed, marked as a cached item
			// and timestamp it
			btDevice[currentDeviceIndex].isBluejacked = statusCached;
			btDevice[currentDeviceIndex].lastBluejackedTime.HomeTime();
		}
		
		// Start the timeout counter
		timeoutCounter.startTimer(this, configData->obexTimeout);
		
		// Disconnect and restart
		scannerStatus = isOBEXDisconnect;
		iStatus = KRequestPending;
		obexClient->Disconnect(iStatus);
		SetActive();
	}
	else if (scannerStatus == isOBEXConnect)
	{
		timeoutCounter.stopTimer();
		if (iStatus == KErrNone)
		{
			scannerStatus = isOBEXSend;
			
			// Start the timeout counter
			timeoutCounter.startTimer(this, configData->obexTimeout);
			
			// Start OBEX Put
			HBufC* dataBuffer = CEikonEnv::Static()->AllocReadResourceL(R_TBUF_BJACKOBEXPUT);
			logWithLookup(*dataBuffer, CLogger::logOBEX);
			delete dataBuffer;
			
			//TBuf<20> txt;
			//CEikonEnv::Static()->ReadResource(txt, R_TBUF_BJACKOBEXPUT);
			//logWithLookup(txt, CLogger::logOBEX);
			
			iStatus = KRequestPending;
			obexClient->Put(*obexFile, iStatus);
			SetActive();
		}
		else
		{
			TBuf<10> errNum;
			errNum.Format(_L("%d"), iStatus);
			HBufC* dataBuffer = CEikonEnv::Static()->AllocReadResourceL(R_TBUF_BJACKOBEXCONNERR);
			dataBuffer = dataBuffer->ReAllocL(dataBuffer->Length() + 11);
			dataBuffer->Des().Append(errNum);
			logWithLookup(*dataBuffer, CLogger::logOBEX);
			delete dataBuffer;
		
			/*
			TBuf<30> errText,txt;
			CEikonEnv::Static()->ReadResource(txt, R_TBUF_BJACKOBEXCONNERR);
			errText.Format(txt, iStatus);
			logWithLookup(errText, CLogger::logOBEX);
			*/
			
			startRestTime.HomeTime();
			currentNoDevicePause = STACK_COOLOFF_COUNTDOWN;
			firstRest = ETrue;
			
			// Mark device as cached and timestamp it
			btDevice[currentDeviceIndex].isBluejacked = statusCached;
			btDevice[currentDeviceIndex].lastBluejackedTime.HomeTime();				
			rest();
		}
	}
	else if (scannerStatus == isOBEXSearch)
	{
		// I could have passed this via iStatus too.
		if (obexSearcher.RFCOMMPort > -1)
		{
			HBufC* dataBuffer = CEikonEnv::Static()->AllocReadResourceL(R_TBUF_BJACKOBEXFOUND);
			logHelper->updateLog(dataBuffer, 0, CLogger::logOBEX);
			delete dataBuffer;

			/*
			TBuf<30> txt;
			CEikonEnv::Static()->ReadResource(txt, R_TBUF_BJACKOBEXFOUND);
			logWithLookup(txt, CLogger::logOBEX);
			*/
			
			btDevice[currentDeviceIndex].obexPort = obexSearcher.RFCOMMPort;
			obexBTProtoInfo.iTransport.Copy(_L("RFCOMM"));
			obexBTProtoInfo.iAddr.SetBTAddr(btDevice[currentDeviceIndex].btDevAddr);
			obexBTProtoInfo.iAddr.SetPort(obexSearcher.RFCOMMPort);
			if (obexClient)
			{
				delete obexClient;
				obexClient = NULL;
			}
			obexClient = CObexClient::NewL(obexBTProtoInfo);
			scannerStatus = isOBEXConnect;
			iStatus = KRequestPending;
		    
			// Start the timeout counter
			timeoutCounter.startTimer(this, configData->obexTimeout);
		    
		    // Start OBEX connect
			obexClient->Connect(iStatus);
			SetActive();
		}
		else
		{
			TBuf<10> errNum;
			errNum.Format(_L("%d"), iStatus);
			HBufC* dataBuffer = CEikonEnv::Static()->AllocReadResourceL(R_TBUF_BJACKOBEXSEARCHERR);
			dataBuffer = dataBuffer->ReAllocL(dataBuffer->Length() + 11);
			dataBuffer->Des().Append(errNum);
			logWithLookup(*dataBuffer, CLogger::logOBEX);
			delete dataBuffer;
			
			/*
			TBuf<30> errText, txt;			
			CEikonEnv::Static()->ReadResource(txt, R_TBUF_BJACKOBEXSEARCHERR);
			errText.Format(txt, iStatus);
			logWithLookup(errText, CLogger::logOBEX);
			*/
			
			if (obexRetries > 0)
			{
				obexRetries--;
				iStatus = KRequestPending;
				scannerStatus = isOBEXSearch;
				obexSearcher.start(&iStatus, &(btDevice[currentDeviceIndex].btDevAddr));
				SetActive();
			}
			else
			{
				startRestTime.HomeTime();
				currentNoDevicePause = STACK_COOLOFF_COUNTDOWN;
				firstRest = ETrue;
			
				// Remove device from list
				btDevice[currentDeviceIndex].isBluejacked = statusNoDevice;
				rest();
			}
		}			
	}
	else if (scannerStatus == isShutdown)
	{
		stopScan();
	}
	else if (scannerStatus == isInquiring)
	{	
		// Found a device?
		if (iStatus == KErrNone)
		{
			TBTSockAddr iBTSockAddr(nameEntry().iAddr);
			insertAndUpdateBTList(iBTSockAddr.BTAddr(), nameEntry().iName);
			/*
			btDevAddr[numBTFound] = iBTSockAddr.BTAddr();
			// Sometimes, corrupted memory comes back. Don't know why. We assume
			// the first byte must be zero
			if (btDevAddr[numBTFound][0] == 0)
			{
				if (resolveAction != KHostResInquiry)
					btNames[numBTFound] = nameEntry().iName;
				logWithLookup(_L("Found device"));			
				numBTFound++;
				currentNoDeviceAttempts = 0;
			}
			*/
			iStatus = KRequestPending;
			hostResolver.Next(nameEntry, iStatus);
			SetActive();
		}
		else
		{
			if (hostResolverOpen)
			{
				hostResolver.Close();
				hostResolverOpen = EFalse;
			}
			/*
			TBuf<50> txt;
			CEikonEnv::Static()->ReadResource(txt, R_TBUF_BJACKNODEVICES);
			logHelper->updateLog(&txt, 0, CLogger::logScanning);
			*/
			HBufC* dataBuffer = CEikonEnv::Static()->AllocReadResourceL(R_TBUF_BJACKNODEVICES);
			logHelper->updateLog(dataBuffer, 0, CLogger::logScanning);
			delete dataBuffer;
			
			currentDeviceIndex = -1;
			bluejackNextDevice();
		}
	}
}

TBool CScanner::getNextBTDeviceIndex(void)
{
	for (int i = (currentDeviceIndex + 1); i < MAX_BTDEV_ADDR; i++)
	{
		if (btDevice[i].isBluejacked == statusValidNotBluejacked)
		{
			currentDeviceIndex = i;
			return ETrue;
		}		
	}
	currentDeviceIndex = -1;
	return EFalse;
}

// Returns TRUE if this device was inserted into the list (i.e. new device) else FALSE
TBool CScanner::insertAndUpdateBTList(TBTDevAddr btDevAddr, TBTDeviceName btDevName)
{
	TInt cacheIndexToOverwrite = -1;
	TBool isExist = EFalse;
	TBool isInserted = EFalse;
	TTime currentTime;
	TTimeIntervalSeconds interval, oldInterval;
	//TBuf<50> txt;

	nameEntry().iName.Copy(btDevName);

	// Need to be fair to all devices. So take a snapshot of time here rather than in each
	// loop iteration
	currentTime.HomeTime();
	
	// First, make sure this device does not exist in the list.
	for (int i = 0; i < MAX_BTDEV_ADDR; i++)
	{
		// Check if we found the device before. This means the device entry is either:
		// - a non-bluejacked device
		// - bluejacked but waiting for decay; OR
		// - a cached entry
		// In either case, it means we shouldn't insert anything into the array
		if (btDevice[i].btDevAddr == btDevAddr)
		{
			// Is this a device that was found before?
			if (btDevice[i].isBluejacked == statusValidNotBluejacked)
			{
				isExist = ETrue;
				currentDeviceIndex = i;
				
				/*
				CEikonEnv::Static()->ReadResource(txt, R_TBUF_BJACKCACHED);
				logWithLookup(txt, CLogger::logScanning);
				*/
				HBufC* dataBuffer = CEikonEnv::Static()->AllocReadResourceL(R_TBUF_BJACKCACHED);
				logWithLookup(*dataBuffer, CLogger::logScanning);
				delete dataBuffer;

				break;
				// We can leave the obex port in its unknown state. getNextBluejackDevice()
				// will take care of it
			}
			// Check if it was bluejacked but waiting for decay
			else if (btDevice[i].isBluejacked == statusValidBluejacked)
			{
				if (currentTime.SecondsFrom(btDevice[i].lastBluejackedTime, interval) != 0)
					interval = -1;
				// Decay still not expired?
				if (interval.Int() < configData->decayTime)
				{
					isExist = ETrue;
					
					// Generate a log entry
					currentDeviceIndex = i;
					
					HBufC* dataBuffer = CEikonEnv::Static()->AllocReadResourceL(R_TBUF_BJACKCACHEDECAY);
					logWithLookup(*dataBuffer, CLogger::logScanning);
					delete dataBuffer;

					//CEikonEnv::Static()->ReadResource(txt, R_TBUF_BJACKCACHEDECAY);
					//logWithLookup(txt, CLogger::logScanning);
					
					break;
				}
				// This means its decay time is up!
				else
				{
					isExist = ETrue;
					currentDeviceIndex = i;
					/*
					CEikonEnv::Static()->ReadResource(txt, R_TBUF_BJACKCACHED);
					logWithLookup(txt, CLogger::logScanning);
					*/
					HBufC* dataBuffer = CEikonEnv::Static()->AllocReadResourceL(R_TBUF_BJACKCACHED);
					logWithLookup(*dataBuffer, CLogger::logScanning);
					delete dataBuffer;
					
					btDevice[i].isBluejacked = statusValidNotBluejacked;
					break;
				}
			}
			// A cached entry?
			else if (btDevice[i].isBluejacked == statusCached)
			{
				isExist = ETrue;
				
				// Generate a log entry
				currentDeviceIndex = i;
				HBufC* dataBuffer = CEikonEnv::Static()->AllocReadResourceL(R_TBUF_BJACKCACHED);
				logWithLookup(*dataBuffer, CLogger::logScanning);
				delete dataBuffer;
				
				/*
				CEikonEnv::Static()->ReadResource(txt, R_TBUF_BJACKCACHED);
				logWithLookup(txt, CLogger::logScanning);
				*/
				
				// Reset the item's status to be a newly found item

⌨️ 快捷键说明

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