亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? modem.cpp

?? fax engine 傳真引擎 relay fax 的開源項目 商業軟件使用 高質量 高可靠
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
		if( m_bSendSupported[9] )
		{
			m_nMaxSendBaud = 5;
		}
		else if( m_bSendSupported[8] )
		{
			m_nMaxSendBaud = 4;
		}
		else if( m_bSendSupported[7] )
		{
			m_nMaxSendBaud = 3;
		}
		else if( m_bSendSupported[6] )
		{
			m_nMaxSendBaud = 2;
		}
		else if( m_bSendSupported[1] )
		{
			m_nMaxSendBaud = 1;
		}
		else
		{
			m_nMaxSendBaud = 0;
		}

		if( m_nSendBaud > m_nMaxSendBaud )
		{
			m_nSendBaud = m_nMaxSendBaud;
		}
	}
	else
	{
		if( m_bRecvSupported[9] )
		{
			m_nMaxRecvBaud = 5;
		}
		else if( m_bRecvSupported[8] )
		{
			m_nMaxRecvBaud = 4;
		}
		else if( m_bRecvSupported[7] )
		{
			m_nMaxRecvBaud = 3;
		}
		else if( m_bRecvSupported[6] )
		{
			m_nMaxRecvBaud = 2;
		}
		else if( m_bRecvSupported[1] )
		{
			m_nMaxRecvBaud = 1;
		}
		else 
		{
			m_nMaxRecvBaud = 0;
		}

		if( m_nRecvBaud > m_nMaxRecvBaud )
		{
			m_nRecvBaud = m_nMaxRecvBaud;
		}
	}
}


bool CModem::GetCapParam( int nIndex, int nValue )
{
	if( nIndex >= 0 && nIndex <= FAXAPI_MAXPARAMETERS && nValue >= 0 && nValue <= FAXAPI_MAXPARAMVALUE )
	{
		return m_ParamMatrix[nIndex][nValue];
	}
	
	return false;
}


int CModem::ProcCapValueIndex( LPSTR lpValue, int nIndex, bool bComma, bool bDash, int nLast )
{
	int nCurrent = 0;
	char* p = lpValue;
	bool bHex = false;
	//OnFHNG

	while( *p )
	{
		if( IsHex(*p) )
		{
			bHex = true;
			break;
		}
		p++;
	}
	
	if( bHex )
	{
		sscanf( lpValue, "%X", &nCurrent );
	}
	else
	{
		nCurrent = atoi(lpValue);
	}
	
	if( bDash )
	{
		while( nLast <= nCurrent )
		{
			if( nIndex >= 0 && nIndex < FAXAPI_MAXPARAMETERS && nLast >= 0 && nLast < FAXAPI_MAXPARAMVALUE )
			{
				m_ParamMatrix[nIndex][nLast] = true;
			}
			nLast++;
		}

	}
	else 
	{
		if( nIndex >= 0 && nIndex < FAXAPI_MAXPARAMETERS && nCurrent >= 0 && nCurrent < FAXAPI_MAXPARAMVALUE )
		{
			m_ParamMatrix[nIndex][nCurrent] = true;
		}
	}
		

	return nCurrent;
}


void CModem::ProcCapValue( LPSTR lpValue, int nIndex )
{
	char szN[32];
	bool bComma = false;
	bool bDash = false;
	int nLast = 0;

	int i = 0;

	char* p = lpValue;

	while( *p )
	{
		bool bProcessNumber = false;

		if( *p == ',' )
		{
			szN[i] = 0;
			nLast = ProcCapValueIndex( szN, nIndex, bComma, bDash, nLast );
			bComma = true;
			bDash = false;
			i = 0;
		}
		else if( *p == '-' )
		{
			szN[i] = 0;
			nLast = ProcCapValueIndex( szN, nIndex, bComma, bDash, nLast );
			bDash = true;
			bComma = false;
			i = 0;
		}
		else if( IsHexDigit( *p ) )
		{
			szN[i++] = *p;
		}

		p++;

		if( *p == '\0'  )
		{
			szN[i] = 0;
			nLast = ProcCapValueIndex( szN, nIndex, bComma, bDash, nLast );
			i = 0;
		}

	}
}


void CModem::ProcCapabilities( LPSTR lpCaps )
{
	char szValue[32];
	bool bInParens = false;
	int i = 0;
	int j = 0;

	ZeroMemory( m_ParamMatrix, sizeof(m_ParamMatrix) );

	char* p = lpCaps;

	while( *p )
	{
		bool bProcessNumber = false;

		if( bInParens == false )
		{
			if( *p == '(' )
			{
				bInParens = true;
			}
			else if( *p == ',' )
			{
				bProcessNumber = true;
			}
			else 
			{
				if( i < (sizeof(szValue) - 1) )
				{
					szValue[i++] = *p;
				}
			}
		}
		else
		{
			if( *p == ')' )
			{
				bInParens = false;
			}
			else 
			{
				if( i < (sizeof(szValue) - 1) )
				{
					szValue[i++] = *p;
				}
			}
		}
		p++;

		if( *p == '\0' || bProcessNumber )
		{
			szValue[i] = 0;
			ProcCapValue( szValue, j );
			// next element
			i = 0;
			j++;
		}
	}
}

//////////////////////////////////////////////////////////////////////
// Handle wait timeout - do periodic processing
//////////////////////////////////////////////////////////////////////
bool CModem::OnWaitTimeout( void )
{
	DWORD nInActive = GetTickCount() - m_dwActivityTimer;

	CheckTimeouts( nInActive );

	return false;
}


void CModem::CheckTimeouts( DWORD dwInActive )
{
}


void CModem::PurgeWriteQueue( void )
{
	// Purge write queue
	deque<CWriteBuffer*>::iterator iter = m_WriteQueue.begin();

	while( iter != m_WriteQueue.end() )
	{
		delete (*iter);
		m_WriteQueue.pop_front();
		iter = m_WriteQueue.begin();
	}
}


void CModem::PurgeOutput( void )
{
	PurgeWriteQueue();

	PurgeComm( m_hPort, PURGE_TXABORT | PURGE_TXCLEAR );
}


void CModem::DoHangup( void )
{
	SendCommand( COMMAND_HANGUP );
	m_nState = STATE_DISCONNECT;
}

void CModem::PhaseHangup(void)
{
//	if( strnicmp( m_szLineBuff, "OK", 2 ) == 0 )
	{
		m_bGotOK = true;
		KillTimer( TIMER_COMMAND );
		m_nState = STATE_IDLE;
		SignalEvent( EVENT_IDLE );
	}
}


void CModem::PhaseDisconnect(void)
{
//	if( strnicmp( m_szLineBuff, "OK", 2 ) == 0 )
	{
		m_bGotOK = true;
		KillTimer( TIMER_COMMAND );
		DisconnectPort();
		m_nState = STATE_NONE;
		SignalEvent( EVENT_DISCONNECT );
		m_bConnected = false;
		ExitAndDelete();
	}
}

void CModem::Terminate()
{
	if( m_bTerminated == false )
	{
		SignalEvent( EVENT_TERMINATE );

		PurgeWriteQueue();

		m_FaxFile.Close();

		KillTimer( TIMER_MAXPAGERETRIES );

		m_bTerminated = true;
	}
}


bool CModem::OkToAnswer( void )
{
	return ( m_bEnableReceive && (m_nRingCount >= m_nAnswerOnRing) );
}


//////////////////////////////////////////////////////////////////////
// OnRead
//////////////////////////////////////////////////////////////////////
void CModem::OnRead(void)
{
	DWORD i;

	m_dwActivityTimer = GetTickCount();

//	char szMsg[80];
//	wsprintf( szMsg, "OnRead %d bytes\n", m_BytesRead );
//	OutputDebugString( szMsg );

	for( i = 0; i < m_BytesRead; i++ )
	{
		//char szDigit[32];
		//wsprintf( szDigit, "%d:[%02x]\n", i, m_szReadBuff[i] );
		//OutputDebugString( szDigit );

		if( m_bEolFlag )
		{
			if( (m_szReadBuff[i] != '\r') && (m_szReadBuff[i] != '\n') )
			{
				m_bEolFlag = false;
			}
		}

		if( !m_bEolFlag )
		{
			if( m_bHDLCMode ) // HDLC mode
			{
				if( m_bGotDLE ) 
				{
					m_bGotDLE = false;

					if( m_szReadBuff[i] == ETX )
					{
						OnHDLCFrame();
						InitLineParser();
						m_bHDLCMode = false;
					}
					else if( m_szReadBuff[i] == DLE )
					{
						if( m_nHDLCBuffPtr >= READBUF_SIZE )
						{
							OnPartialHDLCFrame();
							m_nHDLCBuffPtr = 0;
						}

						m_szHDLCBuff[m_nHDLCBuffPtr++] = m_szReadBuff[i];
					}
					else if( m_szReadBuff[i] == SUB )
					{
						if( m_nHDLCBuffPtr >= READBUF_SIZE )
						{
							OnPartialHDLCFrame();
							m_nHDLCBuffPtr = 0;
						}

						m_szHDLCBuff[m_nHDLCBuffPtr++] = DLE;

						if( m_nHDLCBuffPtr >= READBUF_SIZE )
						{
							OnPartialHDLCFrame();
							m_nHDLCBuffPtr = 0;
						}

						m_szHDLCBuff[m_nHDLCBuffPtr++] = DLE;
					}
					else
					{
						//OutputDebugString( "Illegal HDLC Coding!\n" );
					}
				}
				else
				{
					if( m_szReadBuff[i] == DLE )
					{
						m_bGotDLE = true;
					}
					else
					{
						if( m_nHDLCBuffPtr >= READBUF_SIZE )
						{
							OnPartialHDLCFrame();
							InitHDLC();
						}

						m_szHDLCBuff[m_nHDLCBuffPtr++] = m_szReadBuff[i];
					}
				}

				// Sometimes NO CARRIER is returned w/o DLE-ETX
				if( (m_nHDLCBuffPtr > 9) && (m_nHDLCBuffPtr < 14) && strstr( (char*) m_szHDLCBuff, "NO CARRIER" ) )
				{
					m_bHDLCMode = false;
					memcpy( m_szLineBuff, m_szHDLCBuff, m_nHDLCBuffPtr );
					m_nLineBuffPtr = m_nHDLCBuffPtr;
					m_szLineBuff[m_nLineBuffPtr] = '\0';
					OnReadLine();
					InitLineParser();
				}

			}
			else // line mode
			{
				if( (m_szReadBuff[i] == '\r') || (m_szReadBuff[i] == '\n') )
				{
					m_bEolFlag = true;

					if( m_nLineBuffPtr > 0 )
					{
						m_szLineBuff[m_nLineBuffPtr] = '\0';

						//char szMsg[256];
						//wsprintf( szMsg, "OnRead:(%d:%d)\n", m_BytesRead, i );
						//OutputDebugString( szMsg );

						// Ignore intermediate responses in init state
						if( ( m_nState > STATE_INIT ) || ((m_BytesRead - i) <= 2 ) )
						{
							OnReadLine();
						}
						else if( ( m_nState == STATE_INIT) && 
							     ((m_nLastCommand == COMMAND_QUERY_SEND_SPEEDS)||
								  (m_nLastCommand == COMMAND_QUERY_RECEIVE_SPEEDS)||
								  (m_nLastCommand >= COMMAND_QUERY_FCLASS)) )

						{
							OnReadLine();
						}

						if( !m_bHDLCMode )
						{
							InitLineParser();
						}
					}
				}
				else
				{
					if( m_nLineBuffPtr >= READBUF_SIZE )
					{
						//OutputDebugString( "Line buffer overflow!\n" );
						InitLineParser();
					}
					m_szLineBuff[m_nLineBuffPtr++] = m_szReadBuff[i];
				}
			}
		}
	}
}



void CModem::OnHDLCFrame(void)
{
}

void CModem::OnPartialHDLCFrame(void)
{
}

void CModem::OnTimer( UINT nID )
{
	//OutputDebugString( "CModem::OnTimer\n" );
}

//////////////////////////////////////////////////////////////////////
// HandleMsg
//////////////////////////////////////////////////////////////////////
LRESULT CModem::HandleMsg( UINT message, WPARAM wParam, LPARAM lParam )
{

	if( message == WM_TIMER )
	{
		OnTimer( wParam );
	}

	return DefWindowProc( m_hwnd, message, wParam, lParam );
}



int CModem::ParseFaxParams( int nMaxParams, int* pParams )
{
	char szNumBuff[21];
	int j;
	int i;

	ZeroMemory( pParams, sizeof(int) * nMaxParams );

	char* p = m_szLineBuff + 5; // Skip +XXXX

	if ( *p == ':' )			// skip the colon
	{
		p++;
	}

	// advance to first digit
	while( *p && (IsHexDigit(*p) == false) && (*p != ',') )
	{
		p++;
	}

	for( i = 0; i < nMaxParams; i++ )
	{
		// check for end of string
		if( *p == '\0' )
		{
			return i;
		}

		j = 0;

		// advance to next comma
		while( *p && IsHexDigit(*p) && (j < 20) )
		{
			szNumBuff[j++] = *p++;
		}

		szNumBuff[j] = '\0';

		pParams[i] = atoi( szNumBuff );

		if( *p )	// advance past comma
			p++;
	}

	return i;
}


void CModem::ExitAndDelete(void)
{
	OnShutdown();

	delete this;
	
	ExitThread(0);
}

bool CModem::IsRing(void)
{
	if( stricmp( m_szLineBuff, "RING" ) == 0 )
	{
		return true;
	}

	if( !m_sRingCodes.empty() )
	{
		if( strchr( m_sRingCodes.c_str(), '1' ) )
		{
			if( ( stricmp( m_szLineBuff, "RING1" ) == 0 ) || ( stricmp( m_szLineBuff, "RINGA" ) == 0 ) )
			{
				return true;
			}	
		}
		if( strchr( m_sRingCodes.c_str(), '2' ) )
		{
			if( ( stricmp( m_szLineBuff, "RING2" ) == 0 ) || ( stricmp( m_szLineBuff, "RINGB" ) == 0 ) )
			{
				return true;
			}	
		}
		if( strchr( m_sRingCodes.c_str(), '3' ) )
		{
			if( ( stricmp( m_szLineBuff, "RING3" ) == 0 ) || ( stricmp( m_szLineBuff, "RINGC" ) == 0 ) )
			{
				return true;
			}				
		}
	}

	return false;
}


void CModem::AbortFax(void)
{
	PostMsg( WM_MODEM_ABORTFAX, 0, 0 );	
}


bool CModem::IsHexDigit( char digit )
{
	return (strchr( "1234567890ABCDEFabcdef", digit ) != NULL);
}

bool CModem::IsHex( char digit )
{
	return (strchr( "ABCDEFabcdef", digit ) != NULL);
}


void CModem::Abort( bool bUserCancelled )
{
}

void CModem::ClearRingCount(void) 
{ 
	PostMsg( WM_MODEM_CLEARRINGCNT, 0, 0 );
};


void CModem::SetMaxPageRetriesTimer(void)
{
	DWORD dwTimeout = 0;

	if( m_nMaxPageRetries < 1 )
		return;

	int nPageNo = GetPageCount();

	if( nPageNo > m_nMaxPageRetriesPageNo )
	{
		KillTimer( TIMER_MAXPAGERETRIES );

		m_nMaxPageRetriesPageNo = nPageNo;

		// have to be careful how this timeout is computed so we don't overflow
		unsigned int nSecsPerPage = m_FaxFile.GetTotalPageSize() / (Cls2FaxParamBitRates[m_DCSParams.p.BitRate] / 8) ;

		dwTimeout = m_nMaxPageRetries * 1000 * (15 + nSecsPerPage);

		SetTimer( TIMER_MAXPAGERETRIES, dwTimeout );

		//char szMsg[128];
		//wsprintf( szMsg, "Setting timeout %d for page %d (%d bytes) Bitrate=%d\n", dwTimeout, nPageNo, m_FaxFile.GetTotalPageSize(), Cls2FaxParamBitRates[m_DCSParams.p.BitRate] );
		//OutputDebugString( szMsg );
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩一区中文字幕| 国产一区在线精品| 国产91精品一区二区| 91福利在线免费观看| 国产亚洲综合性久久久影院| 亚洲成在人线在线播放| 成人激情图片网| 欧美精品一区二区三区视频| 亚洲图片有声小说| 91色在线porny| 欧美国产日韩一二三区| 精一区二区三区| 欧美电影影音先锋| 亚洲国产中文字幕| 91年精品国产| 综合中文字幕亚洲| 成人精品亚洲人成在线| 久久久国际精品| 精品一区二区三区在线播放 | 91麻豆免费观看| 国产精品无人区| 久久成人免费日本黄色| 欧美一区二区三区公司| 成人美女视频在线观看| 久久综合九色综合欧美98| 日本欧美加勒比视频| 欧美日韩免费观看一区二区三区| 中文字幕亚洲区| 91在线免费播放| 亚洲男同性恋视频| 色噜噜久久综合| 亚洲一二三专区| 欧美精品乱码久久久久久按摩| 亚洲韩国精品一区| 欧美日韩视频在线第一区 | 蜜桃视频在线观看一区| 欧美一级高清片在线观看| 日韩有码一区二区三区| 欧美一区二区国产| 久久99精品国产| 国产亚洲欧美色| av日韩在线网站| 亚洲一区视频在线| 欧美一区二区视频在线观看2022 | 欧美高清你懂得| 日韩av一级片| 久久天天做天天爱综合色| 国产成人亚洲综合a∨婷婷图片 | 欧美一级欧美三级在线观看| 日韩成人一级大片| 精品乱码亚洲一区二区不卡| 国产一区二区主播在线| 国产精品狼人久久影院观看方式| 91视视频在线观看入口直接观看www | 国产精品丝袜一区| 91久久香蕉国产日韩欧美9色| 午夜国产精品一区| 久久久久国产精品麻豆ai换脸 | 欧美激情一二三区| 亚洲国产精品传媒在线观看| 99视频一区二区三区| 午夜欧美电影在线观看| 久久一区二区三区国产精品| 99久久婷婷国产综合精品| 亚洲18色成人| 欧美高清在线一区| 欧美人与禽zozo性伦| 粉嫩高潮美女一区二区三区| 亚洲妇熟xx妇色黄| 久久久精品一品道一区| 欧美在线观看一区二区| 国产毛片精品一区| 亚洲不卡一区二区三区| 国产日产欧美一区二区视频| 欧美性猛交xxxx乱大交退制版| 久久电影网站中文字幕| 亚洲一区二区三区在线看| 精品国产sm最大网站免费看| 色老头久久综合| 国产乱妇无码大片在线观看| 亚洲午夜三级在线| 国产欧美一区二区在线| 欧美一区二区日韩| 欧美色网一区二区| kk眼镜猥琐国模调教系列一区二区| 青青草视频一区| 亚洲在线免费播放| 欧美激情综合五月色丁香小说| 91精品国产高清一区二区三区| 99re这里只有精品首页| 韩国女主播一区二区三区| 丝袜诱惑制服诱惑色一区在线观看| 国产精品久久三区| 久久精品在这里| 欧美成人高清电影在线| 欧美精品一级二级| 欧美日韩在线三级| 在线一区二区三区| 99re热视频这里只精品| 国产91丝袜在线播放九色| 国内精品第一页| 激情久久五月天| 久久精品国产99国产精品| 日本欧美久久久久免费播放网| 亚洲午夜电影在线观看| 一区二区三区在线免费观看| 1区2区3区欧美| 国产精品美女久久久久久久久| xnxx国产精品| 26uuu久久天堂性欧美| 日韩欧美国产一二三区| 日韩亚洲欧美在线观看| 欧美一区二区成人6969| 欧美一级生活片| 日韩欧美成人一区二区| 精品国产伦一区二区三区观看体验| 69久久夜色精品国产69蝌蚪网| 欧美嫩在线观看| 日韩三级电影网址| 欧美精品一区二区三区四区| 久久综合九色综合欧美98| 国产欧美一区二区精品婷婷| 国产欧美中文在线| 国产精品不卡一区二区三区| 中文字幕亚洲成人| 亚洲乱码国产乱码精品精小说 | 国产精品99久久不卡二区| 国产精品影音先锋| 波多野结衣中文字幕一区二区三区| 国产999精品久久久久久| 99精品欧美一区| 欧美在线小视频| 日韩欧美一区中文| 国产午夜一区二区三区| 一区二区中文视频| 亚洲国产一区二区三区| 蜜桃视频在线一区| 成人综合在线观看| 欧美三级乱人伦电影| 日韩欧美美女一区二区三区| 久久亚洲私人国产精品va媚药| 国产精品成人一区二区三区夜夜夜 | www.综合网.com| 欧美在线免费观看亚洲| 日韩一级片在线观看| 国产色综合一区| 亚洲一区二区视频| 国产夫妻精品视频| 在线精品观看国产| 精品剧情在线观看| 中文字幕一区二区不卡 | √…a在线天堂一区| 婷婷综合久久一区二区三区| 久久99精品久久久久久久久久久久| 粉嫩aⅴ一区二区三区四区| 91久久线看在观草草青青| 精品人伦一区二区色婷婷| 亚洲日本免费电影| 美国毛片一区二区| 色婷婷综合久久久久中文一区二区| 91精品国产欧美一区二区| 国产精品久久久久一区| 日韩中文字幕一区二区三区| 成人一区二区三区视频| 欧美伦理电影网| 亚洲欧美综合网| 精品影院一区二区久久久| 在线观看视频欧美| 欧美国产一区在线| 久久er精品视频| 欧美日韩免费一区二区三区| 中文字幕在线不卡国产视频| 精品在线观看视频| 7878成人国产在线观看| 中文字幕人成不卡一区| 国产在线播精品第三| 欧美性感一区二区三区| 国产精品成人免费| 国产福利精品一区| 欧美电视剧在线看免费| 亚洲成人激情av| 在线视频你懂得一区| 国产精品女同一区二区三区| 九九九精品视频| 精品久久一区二区| 免费高清在线一区| 91精品免费观看| 日韩影视精彩在线| 欧美日韩久久久一区| 亚洲一区二区欧美日韩| 欧洲日韩一区二区三区| 亚洲人被黑人高潮完整版| 99久久伊人久久99| 亚洲欧洲性图库| av中文字幕一区| 中文字幕综合网| 在线影视一区二区三区| 亚洲专区一二三| 欧美日韩大陆一区二区| 午夜国产精品一区|