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

📄 cpfwindow.cpp

📁 vc环境下的pgp源码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
		case IDI_CODERCOMBOBOX:
			if((wParam >> 16) == CBN_SELCHANGE)
			{
				CString	str;
				ulong newEncoder;

				// get the string for the current selection
				mCoderComboBox.GetLBText(mCoderComboBox.GetCurSel(), str);

					 if(!strcmp(str, "GSM Lite 4410 hz"))	newEncoder ='GS4L';
				else if(!strcmp(str, "GSM Lite 6000 hz"))	newEncoder ='GS6L';
				else if(!strcmp(str, "GSM Lite 7350 hz"))	newEncoder ='GS7L';
				else if(!strcmp(str, "GSM Lite 8000 hz"))	newEncoder ='GL80';
				else if(!strcmp(str, "GSM Lite 11025 hz"))	newEncoder ='GS1L';
				else if(!strcmp(str, "GSM 4410 hz"))		newEncoder ='GSM4';
				else if(!strcmp(str, "GSM 6000 hz"))		newEncoder ='GSM6';
				else if(!strcmp(str, "GSM 7350 hz"))		newEncoder ='GSM7';
				else if(!strcmp(str, "GSM 8000 hz"))		newEncoder ='GS80';
				else if(!strcmp(str, "GSM 11025 hz"))		newEncoder ='GSM1';
				else if(!strcmp(str, "ADPCM 8000 hz"))		newEncoder ='ADP8';
				else
					pgp_errstring("unknown encoder");

				mControlQueue->Send(_mt_changeEncoder, (void*)newEncoder);
			}
			break;
		case IDI_DECODERCOMBOBOX:
			if((wParam >> 16) == CBN_SELCHANGE)
			{
				CString	str;
				ulong newDecoder;

				// get the string for the current selection
				mDecoderComboBox.GetLBText(mDecoderComboBox.GetCurSel(), str);

					 if(!strcmp(str, "GSM Lite 4410 hz"))	newDecoder ='GS4L';
				else if(!strcmp(str, "GSM Lite 6000 hz"))	newDecoder ='GS6L';
				else if(!strcmp(str, "GSM Lite 7350 hz"))	newDecoder ='GS7L';
				else if(!strcmp(str, "GSM Lite 8000 hz"))	newDecoder ='GL80';
				else if(!strcmp(str, "GSM Lite 11025 hz"))	newDecoder ='GS1L';
				else if(!strcmp(str, "GSM 4410 hz"))		newDecoder ='GSM4';
				else if(!strcmp(str, "GSM 6000 hz"))		newDecoder ='GSM6';
				else if(!strcmp(str, "GSM 7350 hz"))		newDecoder ='GSM7';
				else if(!strcmp(str, "GSM 8000 hz"))		newDecoder ='GS80';
				else if(!strcmp(str, "GSM 11025 hz"))		newDecoder ='GSM1';
				else if(!strcmp(str, "ADPCM 8000 hz"))		newDecoder ='ADP8';
				else
					pgp_errstring("unknown decoder");

				mControlQueue->Send(_mt_changeDecoder, (void*)newDecoder);
			}
			break;
		case IDI_CONNECTBUTTON:{
			char s[256];

			if((wParam >> 16) == BN_CLICKED)
			{
				switch(mState)
				{
					case _cs_none:
					case _cs_uninitialized:
					case _cs_listening:
						ContactEntry *entry;
					
						if(mState == _cs_listening)
							mControlThread->GetTransport()->AbortSync();

						mCallComboBox.GetWindowText(s, 256);
						if(mCallComboBox.FindStringExact(-1,s) == CB_ERR)
							mCallComboBox.AddString(s);
						entry = (ContactEntry*)pgp_mallocclear(sizeof(ContactEntry));
						switch(gPGFOpts.popt.connection)
						{
							case _cme_Serial:
								entry->method = _cme_Serial;
								strncpy(entry->phoneNumber, s, PHONENUMBERLEN);
								entry->modemInit[0] = 0;
								strcat(entry->modemInit, "AT");
								strcat(entry->modemInit, gPGFOpts.sopt.modemInit);
								break;
							case _cme_Internet:
								entry->method = _cme_Internet;
								entry->useIPSearch = 0;
								strncpy(entry->internetAddress, s, PHONENUMBERLEN);
								break;
						}

						CStatusPane::GetStatusPane()->Clear();
						mControlQueue->Send(_mt_call, entry);
						break;
					case _cs_calldetected:
						mControlThread->GetTransport()->Answer();
						break;
					case _cs_connecting:
					case _cs_disconnecting:
					case _cs_initializing:
					case _cs_connected:
						mControlThread->AbortSync(FALSE, FALSE);
						mFTP.ShowWindow(SW_HIDE);
						break;
				}
			}
			break;}
		case IDI_TALKBUTTON:
			if((wParam >> 16) == BN_CLICKED)
			{
				switch(mState)
				{
					case _cs_none:
					case _cs_uninitialized:
					case _cs_listening:
						if(mSoundInput->Recording())
						{
							mSoundInput->Record(FALSE);
							mSoundOutput->Play(FALSE);
							mTalkButton.SetWindowText("Test");
						}
						else
						{
							mSoundInput->SetCodec(gPGFOpts.popt.prefCoder);
							mSoundOutput->SetCodec(gPGFOpts.popt.prefCoder);
							mSoundInput->SetOutput(mSoundOutput, mSoundOutput->GetPlayQueue());
							mSoundInput->Record(TRUE);
							mSoundOutput->Play(TRUE);
							mTalkButton.SetWindowText("Stop Test");
						}
						break;
					case _cs_connected:
						if(mTalkFlag)
							mControlQueue->SendUnique(_mt_listen);
						else
							mControlQueue->SendUnique(_mt_talk);
						break;
					case _cs_calldetected:
					case _cs_connecting:
					case _cs_disconnecting:
					case _cs_initializing:
						break;
				}
			}
			break;
	}
	return CView::OnCommand(wParam, lParam);
}

void 
CPFWindow::OnTimer(UINT nIDEvent) 
{

	switch(nIDEvent)
	{
		case RANDOM_DATA_TIMER:
		{
			ulong ticks;
			static BOOL performanceCounterAvailable;
			static BOOL	checkedPerformanceCounterAvailability = FALSE;
			LARGE_INTEGER performanceCount;
	
			/*First, get clock tick info...*/
			ticks = GetTickCount();
			randPoolAddWord(ticks);
	
			/*The performance counter is available on some platforms.  If it is
			*available, it can have a precision of about one microsecond.  If it     
			*is available, we use it as a random bit source.  Since it seems
			*silly to check if the thing is available every time we get a timer
			*message, we only check our first run through.
			*/
			if(!checkedPerformanceCounterAvailability)
			{
				checkedPerformanceCounterAvailability = TRUE;
				performanceCounterAvailable = 
					QueryPerformanceCounter(&performanceCount);
			}
	
			if(performanceCounterAvailable)
			{
				if(QueryPerformanceCounter(&performanceCount))
					randPoolAddBytes((uchar *) &performanceCount,
					sizeof(performanceCount));
				else
				{
				/*This is a very bad thing: we said it was available before,
				 *but now MS says it's not!
				 */
					pgp_errstring(
						"performanceCounterAvailable contains inconsistant value!");
				}
			}
			
			break;
		}

#if 0
		case DEBUG_TIMER:
		{
			ShowStatus();
			break;
		}
#endif

		case UPDATE_TIMER:
		{
			char s[128], t[128];
			long samp, inx;
		
			if(mHPPOutQueue)
			{
				samp = mHPPOutQueue->GetSize();
				
				if(samp > mMaxQueueSize)
				{
					mMaxQueueSize = samp;
				}
				
				if(mLastSampleTime + 1000 <= pgp_getticks())
				{
					mOutQueueSizes[mEntryPos] = samp;
					mEntryPos++;
					mEntryPos %= OUTQUEUEENTRIES;
					mLastSampleTime = pgp_getticks();
					
					for(inx=mAvgHPP=0;inx<OUTQUEUEENTRIES;inx++)
					{
						mAvgHPP += mOutQueueSizes[inx];
					}
					
					mAvgHPP /= OUTQUEUEENTRIES;
					
					if(mAvgHPP >= SOUNDINPUTQUEUEAVGMAX)
					{	
						// we have become very backed up
						mOverflows += samp;
						
						for(inx=mAvgHPP=0;inx<OUTQUEUEENTRIES;inx++)
						{
							mOutQueueSizes[inx]=0;
						}
						
						// so ditch outgoing
						mHPPOutQueue->FreeType(_mt_voicePacket);
						
						InterlockedIncrement(&mDirty);
					}
				}
			}
			
			if(!mDirty)
			{
				return;
			}
			
			InterlockedExchange(&mDirty, 0);
		
			_itoa(mRTTms, t, 10);
			
			sprintf(s, "%d\r%d\r%d\r%sms\r%d%%",
						mPacketsSent, mGoodPackets, mBadPackets,
						t, mGSMfull);
						
			mInfo1.SetWindowText(s);
		
			_itoa(mSoundOutput->GetNumPlaying(), t, 10);
			
			sprintf(s, "%s\r%d\r%d\r%dms\r%d",
						t, mOutputUnderflows, mOverflows, mJitter, mBandwidth);
						
			mInfo2.SetWindowText(s);
		
			mStatusPane.UpdateStatus();
		
			break;
		}
	}

	CView::OnTimer(nIDEvent);
}

void 
CPFWindow::OnMouseMove(UINT nFlags, CPoint point) 
{
	//This uses the mouse movements for random data.  The nFlags
	//as a general rule will equal 0, but will allow an extra little
	//bit of randomness (no pun intended) if the user is clicking or
	//shifting or what-have-you-ing.
	randPoolAddBytes((uchar *) &nFlags, sizeof(nFlags));
	randPoolAddBytes((uchar *) &point, sizeof(point));
	
	CView::OnMouseMove(nFlags, point);
}

int 
CPFWindow::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	ModifyStyleEx(0, WS_EX_CONTROLPARENT, SWP_NOSIZE);

	if (CView::OnCreate(lpCreateStruct) == -1)
		return -1;

	//Set up the Timer so that we can get random data from the system timers
	if(!SetTimer(RANDOM_DATA_TIMER, 350, NULL))
		pgp_errstring("Error Creating Random Data Timer");
	if(!SetTimer(DEBUG_TIMER, 1000, NULL))
		pgp_errstring("Error Creating Debug Timer");
	
	return 0;
}

void CPFWindow::OnFileAnswer() 
{
	if((mState == _cs_uninitialized || mState == _cs_listening) &&
		(gPGFOpts.popt.connection == _cme_Serial))
	{
		if(mState == _cs_listening)
			mControlThread->GetTransport()->AbortSync();
		mControlQueue->SendUnique(_mt_answer);
	}
}

void CPFWindow::OnUpdateFileAnswer(CCmdUI* pCmdUI) 
{
	if((mState == _cs_uninitialized || mState == _cs_listening) &&
		(gPGFOpts.popt.connection == _cme_Serial))
		pCmdUI->Enable(1);
	else
		pCmdUI->Enable(0);
}


void CPFWindow::OnClose() 
{
	// TODO: Add your message handler code here and/or call default
	
	CView::OnClose();
}

void CPFWindow::Die(void)
{
	ulong start;

	mDead = TRUE;
	mControlThread->AbortSync(TRUE);
	while(!mControlResult)
		  Sleep(0);
	delete mControlQueue;

	mSoundInput->AbortSync();
	mSoundOutput->GetPlayQueue()->SendUnique(_mt_quit);

	start = pgp_getticks();
	while((!mSoundInputResult || !mSoundOutputResult) &&
			pgp_getticks() - start < 15000)
		Sleep(0);
	pgpAssert(mControlResult);
 	pgpAssert(mSoundInputResult);
	pgpAssert(mSoundOutputResult);
	mAuthWindow.DestroyWindow();
	mFTP.DestroyWindow();
}

//This handler is needed to enable dialog-like handling of things like
//tabs.
BOOL CPFWindow::PreTranslateMessage(MSG* msg) 
{
	//Ugly hack:  We catch WM_KEY here when they hit "ENTER" and use it to fake
	//like the Connect button has been hit.
	if(msg->message == WM_KEYDOWN)
	{
		if(msg->wParam == '\n' ||
			msg->wParam == '\r')
		{
			this->PostMessage(WM_COMMAND, IDI_CONNECTBUTTON);
			return(TRUE);
		}
			
	}

	//Basically, IsDialogMessage handles any dialog messages.
    if(IsDialogMessage(msg))
        return TRUE; //If it was a dialog message, it's been handled, we're done.
    else
        return CWnd::PreTranslateMessage(msg); //Else do the normal thing
}

void
CPFWindow::SetRTTime(ulong rttVal)
{
	InterlockedExchange(&mRTTms, rttVal);
	InterlockedExchange(&mDirty, 1);
}

void
CPFWindow::SetJitter(long jitter)
{
	InterlockedExchange(&mJitter, jitter);
	InterlockedExchange(&mDirty, 1);
}

void
CPFWindow::SetBandwidth(long bandwidth)
{
	InterlockedExchange(&mBandwidth, bandwidth);
	InterlockedExchange(&mDirty, 1);
}

void
CPFWindow::GotPacket(Boolean good)
{
	if(!good)
		InterlockedIncrement(&mBadPackets);
	else
		InterlockedIncrement(&mGoodPackets);
	InterlockedExchange(&mDirty, 1);
}

void
CPFWindow::SentPacket(void)
{
	InterlockedIncrement(&mPacketsSent);
	InterlockedExchange(&mDirty, 1);
}

void
CPFWindow::SetGSMTimes(long full, long lite, long fullDec, long liteDec)
{
	InterlockedExchange(&mGSMfull, full/10);
	InterlockedExchange(&mGSMlite, lite/10);
	InterlockedExchange(&mGSMfullDec, fullDec/10);
	InterlockedExchange(&mGSMliteDec, liteDec/10);
	InterlockedExchange(&mDirty, 1);
}

void
CPFWindow::InitCall(void)
{
	long inx;

	InterlockedExchange(&mGoodPackets, 0);
	InterlockedExchange(&mBadPackets, 0);
	InterlockedExchange(&mAvgHPP, 0);
	InterlockedExchange(&mMaxQueueSize, 0);
	InterlockedExchange(&mEntryPos, 0);
	InterlockedExchange(&mPacketsSent, 0);
	InterlockedExchange(&mOutputUnderflows, 0);
	InterlockedExchange(&mOverflows, 0);
	InterlockedExchange(&mDirty, 1);
	InterlockedExchange(&mRTTms, 0);
	InterlockedExchange(&mAvgHPP, 0);
	InterlockedExchange(&mMaxQueueSize, 0);
	for(inx=0;inx<OUTQUEUEENTRIES;inx++)
		mOutQueueSizes[inx] = 0;
}

void
CPFWindow::Underflow()
{
	InterlockedIncrement(&mOutputUnderflows);
	InterlockedExchange(&mDirty, 1);
}

void
CPFWindow::OverflowOut(short numLost)
{
	mOverflows += numLost;
	InterlockedExchange(&mDirty, 1);
}

BOOL CPFWindow::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult) 
{
	int pos;

	switch( wParam )
	{
		case IDI_VOLUMESLIDER:
			pos = mVolumeSlider.GetPos();
			mSoundOutput->SetVolume( (unsigned long)pos * (unsigned long)100 );
			break;
		case IDI_GAINSLIDER:
			pos = mGainSlider.GetPos();
			mSoundInput->SetGain( pos );
			break;
	}
	
	return CView::OnNotify(wParam, lParam, pResult);
}

BEGIN_MESSAGE_MAP(CPFWindow, CView)
	//{{AFX_MSG_MAP(CPFWindow)
	ON_WM_TIMER()
	ON_WM_MOUSEMOVE()
	ON_WM_CREATE()
	ON_WM_CLOSE()
	ON_COMMAND(ID_FILE_ANSWER, OnFileAnswer)
	ON_UPDATE_COMMAND_UI(ID_FILE_ANSWER, OnUpdateFileAnswer)
	ON_COMMAND(ID_VIEW_STATUS_INFO, OnViewStatusInfo)
	ON_UPDATE_COMMAND_UI(ID_VIEW_STATUS_INFO, OnUpdateViewStatusInfo)
	ON_COMMAND(ID_EDIT_PREFERENCES, OnEditPreferences)
	ON_UPDATE_COMMAND_UI(ID_EDIT_PREFERENCES, OnUpdateEditPreferences)
	ON_COMMAND(ID_VIEW_ENCODING_DETAILS, OnViewEncodingDetails)
	ON_UPDATE_COMMAND_UI(ID_VIEW_ENCODING_DETAILS, OnUpdateViewEncodingDetails)
	ON_COMMAND(ID_TRANSFER_FILE, OnTransferFile)
	ON_UPDATE_COMMAND_UI(ID_TRANSFER_FILE, OnUpdateTransferFile)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

⌨️ 快捷键说明

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