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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? classtwo.cpp

?? fax engine 傳真引擎 relay fax 的開源項(xiàng)目 商業(yè)軟件使用 高質(zhì)量 高可靠
?? CPP
?? 第 1 頁 / 共 3 頁
字號(hào):
/*****************************************************************************
* RelayFax Open Source Project
* Copyright 1996-2004 Alt-N Technologies, Ltd.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted only as authorized by the RelayFax Open 
* Source License.  A copy of this license is available in file LICENSE 
* in the top-level directory of the distribution.
*
* RelayFax is a registered trademark of Alt-N Technologies, Ltd.
*
* Individual files and/or contributed packages may be copyright by
* other parties and subject to additional restrictions.
*****************************************************************************/

////////////////////////////////////////////////////////////////////////////////
//
// The purpose of CClassTwo is contain the protocol specifics of EIA
// fax modem class 2
//
////////////////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "ClassTwo.h"


#define CLASSTWO_CONNECT		"+FCON"
#define CLASSTWO_CONNECT_SIZE	5
#define CLASSTWO_TSI			"+FTSI"
#define CLASSTWO_TSI_SIZE		5
#define CLASSTWO_DCS			"+FDCS"
#define CLASSTWO_DCS_SIZE		5
#define CLASSTWO_NSS		"	+FNSS"
#define CLASSTWO_NSS_SIZE		5
#define CLASSTWO_HNGUP			"+FHNG"
#define CLASSTWO_HNGUP_SIZE		5
#define CLASSTWO_CSI			"+FCSI"
#define CLASSTWO_CSI_SIZE		5
#define CLASSTWO_DIS			"+FDIS"
#define CLASSTWO_DIS_SIZE		5
#define CLASSTWO_NSF			"+FNSF"
#define CLASSTWO_NSF_SIZE		5
#define CLASSTWO_PTS			"+FPTS"
#define CLASSTWO_PTS_SIZE		5
#define CLASSTWO_ET				"+FET"
#define CLASSTWO_ET_SIZE		4

#define CLASSTWO_DR			"AT+FDR"
#define CLASSTWO_DR_SIZE	6
#define CLASSTWO_DT			"AT+FDT"
#define CLASSTWO_DT_SIZE	6	
#define CLASSTWO_FK			"AT+FK"
#define CLASSTWO_FK_SIZE	5

#define CLASSTWO_SETID		"AT+FLID=\"%s\""
#define CLASSTWO_SETRECV	"AT+FCR=%d"
#define CLASSTWO_SETBOR		"AT+FBOR=0"
#define CLASSTWO_SETPARAMS	"AT+FDIS=%d,%d,%d,%d,%d,%d,0,%d"
#define CLASSTWO_SENDET		"AT+FET=%d"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CClassTwo::CClassTwo()
{
	m_sEIAClass = "2";
	m_nScanTime = 0;
}

CClassTwo::~CClassTwo()
{

}

void CClassTwo::OnConnect(void)
{
	SetState( STATE_INIT );

	m_bGotOK = false;

	SendCommand( COMMAND_INIT );

	m_nLoopCtr = 0; 
}


bool CClassTwo::OnDisconnect(void)
{
	switch( m_nState )
	{
	case STATE_INIT:
		SignalEvent( EVENT_ERROR );
		return true;

	case STATE_PHASE_A:
	case STATE_PHASE_B:
	case STATE_PHASE_C:
 	case STATE_PHASE_D:
    case STATE_PHASE_E:
		Abort( true );
		return false;
	}

	return true;
}

//////////////////////////////////////////////////////////////////////
// OnWrite
//////////////////////////////////////////////////////////////////////
void CClassTwo::OnWrite(void)
{
	m_dwActivityTimer = GetTickCount();

	if( m_nState == STATE_PHASE_C && !m_bReceiving  && m_bGotDCS )
	{
		m_nPageBytes += m_BytesWritten;

		int nPercent = 100 * m_nPageBytes / m_FaxFile.GetPageBytes();

		if( nPercent > 100 )
			nPercent = 100;

		SignalEvent( EVENT_PAGE_DATA, nPercent );
	}
}


//////////////////////////////////////////////////////////////////////
// OnReadLine
//////////////////////////////////////////////////////////////////////
void CClassTwo::OnReadLine(void)
{
	//char szMsg[256];
	//wsprintf( szMsg, "CClassTwo::OnReadLine: %s %d\n", m_szLineBuff, m_nLineBuffPtr );
	//OutputDebugString( szMsg );

	switch( m_nState )
	{
	case STATE_IDLE:
		PhaseIdle();
		break;

	case STATE_INIT:
		PhaseInit();
		break;

	case STATE_PHASE_A:
		PhaseA();
		break;

	case STATE_PHASE_B:
		PhaseB();
		break;

	case STATE_PHASE_C:
		PhaseC();
		break;

	case STATE_PHASE_D:
		PhaseD();
		break;

	case STATE_PHASE_E:
		PhaseE();
		break;

	case STATE_RINGING:
		PhaseRinging();
		break;

	case STATE_DISCONNECT:
		PhaseDisconnect();
		break;
	}

}


//////////////////////////////////////////////////////////////////////
// PhaseInit
//////////////////////////////////////////////////////////////////////
void CClassTwo::PhaseInit(void)
{
	if( stricmp( m_szLineBuff, m_LastCommandString.c_str() ) == 0 )
	{
		// Echo - ignore
		return;
	}

	if( IsRing() )
	{
		// RING
		m_nRingCount++;
		return;
	}

	switch( m_nLastCommand )
	{
	case COMMAND_INIT:
		if( stricmp( m_szLineBuff, "OK" ) == 0 )
		{
			m_bGotOK = true;
		}
		else 
		{
			if( ++m_nLoopCtr >= 3 )
			{
				ErrorUnexpectedResponse();
				KillTimer( TIMER_COMMAND );
				OnDisconnectMsg();
			}
		}
		break;

	case COMMAND_SETUP_STRING:
		if( stricmp( m_szLineBuff, "OK" ) == 0 )
		{
			SendCommand( COMMAND_DISABLE_ECHO );
		}
		else
		{
			ErrorUnexpectedResponse();
			KillTimer( TIMER_COMMAND );
			OnDisconnectMsg();		
		}
		break;

	case COMMAND_DISABLE_ECHO:
		if( stricmp( m_szLineBuff, "OK" ) == 0 )
		{
			SendCommand( COMMAND_SET_SPKR_VOL );
		}
		else
		{
			ErrorUnexpectedResponse();
			KillTimer( TIMER_COMMAND );
			OnDisconnectMsg();		
		}
		break;

	case COMMAND_SET_SPKR_VOL:
		if( stricmp( m_szLineBuff, "OK" ) == 0 )
		{
			SendCommand( COMMAND_SET_SPKR_MODE );
		}
		else
		{
			ErrorUnexpectedResponse();
			KillTimer( TIMER_COMMAND );
			OnDisconnectMsg();		
		}
		break;

	case COMMAND_SET_SPKR_MODE:
		if( stricmp( m_szLineBuff, "OK" ) == 0 )
		{
			SendCommand( COMMAND_SET_FCLASS_2 );
		}
		else
		{
			ErrorUnexpectedResponse();
			KillTimer( TIMER_COMMAND );
			OnDisconnectMsg();		
		}
		break;

	case COMMAND_SET_FCLASS_2:
		if( stricmp( m_szLineBuff, "OK" ) == 0 )
		{
			SendCommand( COMMAND_QUERY_CLASS2_CAP );
		}
		else
		{
			ErrorUnexpectedResponse();
			KillTimer( TIMER_COMMAND );
			OnDisconnectMsg();		
		}
		break;

	case COMMAND_QUERY_CLASS2_CAP:
		if( stricmp( m_szLineBuff, "OK" ) == 0 )
		{
			SendCommand( COMMAND_QUERY_SEND_SPEEDS );
		}
		else if( stricmp( m_szLineBuff, "ERROR" ) == 0 )
		{
			ErrorUnexpectedResponse();
			KillTimer( TIMER_COMMAND );
			OnDisconnectMsg();		
		}
		else
		{
			ProcCapabilities( m_szLineBuff );

			VerifyOptions();
		}
		break;

	case COMMAND_QUERY_SEND_SPEEDS:
		if( stricmp( m_szLineBuff, "OK" ) == 0 )
		{
			SendCommand( COMMAND_QUERY_RECEIVE_SPEEDS );
		}
		else
		{
			ProcSupportedSpeeds( m_szLineBuff, true );
		}
		break;

	case COMMAND_QUERY_RECEIVE_SPEEDS:
		if( stricmp( m_szLineBuff, "OK" ) == 0 )
		{
			SetLocalID();
		}
		else
		{
			ProcSupportedSpeeds( m_szLineBuff, false );
		}
		break;

	case COMMAND_SET_LOCAL_ID:
		if( stricmp( m_szLineBuff, "OK" ) == 0 )
		{
			SetRecv();
		}
		else
		{
			ErrorUnexpectedResponse();
			KillTimer( TIMER_COMMAND );
			OnDisconnectMsg();		
		}
		break;

	case COMMAND_SET_RECV:
		if( stricmp( m_szLineBuff, "OK" ) == 0 )
		{
			SetBitOrder();
		}
		else
		{
			ErrorUnexpectedResponse();
			KillTimer( TIMER_COMMAND );
			OnDisconnectMsg();		
		}
		break;

	case COMMAND_SET_BIT_ORDER:
		if( stricmp( m_szLineBuff, "OK" ) == 0 )
		{	
			m_nScanTime = 0;
			SetFaxParams( false );
		}
		else
		{
			ErrorUnexpectedResponse();
			KillTimer( TIMER_COMMAND );
			OnDisconnectMsg();		
		}
		break;

	case COMMAND_SET_FAX_PARAMS:
		if( stricmp( m_szLineBuff, "OK" ) == 0 )
		{
			SetState( STATE_IDLE );
			KillTimer( TIMER_COMMAND );
		}
		else
		{
			ErrorUnexpectedResponse();
			SignalEventString( EVENT_INFO, (char*)LoadString(GEN_REDUCE_COMPRESSION_BAUD_RATE_OR_DISABLE_ECM).c_str() );
			KillTimer( TIMER_COMMAND );
			OnDisconnectMsg();		
		}
		break;
	}

}


//////////////////////////////////////////////////////////////////////
// PhaseIdle
//////////////////////////////////////////////////////////////////////
void CClassTwo::PhaseIdle(void)
{
	if( IsRing() )
	{
		m_nRingCount = 1;
		SetState( STATE_RINGING );

		SignalEvent( EVENT_RING, m_nRingCount );
	}
}

//////////////////////////////////////////////////////////////////////
// Phase Ringing
//////////////////////////////////////////////////////////////////////
void CClassTwo::PhaseRinging(void)
{
	if( IsRing() )
	{
		m_nRingCount++;

		SignalEvent( EVENT_RING, m_nRingCount );

		/*
		if( OkToAnswer() )
		{
			m_bReceiving = true;
			m_bSuccessful = false;
			SendCommand( COMMAND_ANSWER );
			SetState( STATE_PHASE_B, STATE_RECEIVING );
		}
		*/
	}
	else if( strnicmp( m_szLineBuff, CLASSTWO_CONNECT, CLASSTWO_CONNECT_SIZE ) == 0 )
	{
		EnableSoftFlowControl( false );
		m_FaxFile.SetSendEncoding( m_nSendEncoding );
		m_bReceiving = true;
		m_bSuccessful = false;
		SignalEvent( EVENT_START_RECV );
		SetState( STATE_PHASE_B, STATE_RECEIVING );
	}
	else
	{
		SignalEvent( EVENT_CALLERID );
	}
}


//////////////////////////////////////////////////////////////////////
// Phase A - call setup
//////////////////////////////////////////////////////////////////////
void CClassTwo::PhaseA(void)
{
	switch( m_nPhaseState )
	{
	case STATE_SET_PARAMS:
		if( stricmp( m_szLineBuff, "OK" ) == 0 )
		{
			SetLocalID();
			m_nPhaseState = STATE_SET_CSID;
		}
		else
		{
			// Error setting fax params
			m_sLastError.assign( (char*)LoadString(GEN_ERROR_SETTING_FAX_PARAMETERS).c_str() );
			//SignalEvent( EVENT_ERROR );
			Terminate();
			PhaseDisconnect();
		}
		break;
	
	case STATE_SET_CSID:
		if( stricmp( m_szLineBuff, "OK" ) == 0 )
		{
			if( m_bReceiving )
			{
				SendCommand( COMMAND_ANSWER );
				SetState( STATE_PHASE_B, STATE_RECEIVING );
			}
			else
			{
				SendCommand( COMMAND_DIAL );
				m_nPhaseState = STATE_DIALING;
			}
		}
		else
		{
			// Error setting ID
			m_sLastError.assign( (char*)LoadString(GEN_ERROR_SETTING_ID).c_str() );
			//SignalEvent( EVENT_ERROR );
			Terminate();
			PhaseDisconnect();
		}
		break;

	case STATE_DIALING:
		if( strnicmp( m_szLineBuff, CLASSTWO_CONNECT, CLASSTWO_CONNECT_SIZE ) == 0 )
		{
			m_nLoopCtr = 0;
			SetState( STATE_PHASE_B, STATE_SENDING );	
			m_bGotDIS = false;
			SignalEvent( EVENT_START_SEND );
		}
		else if( strnicmp( m_szLineBuff, CLASSTWO_HNGUP, CLASSTWO_HNGUP_SIZE ) == 0 )
		{
			OnFHNG();
		}
		else
		{
			ErrorConnectResponse();
			Terminate();
			PhaseDisconnect();
		}
		break;

	}
}


//////////////////////////////////////////////////////////////////////
// Phase B - negotiation and training
//////////////////////////////////////////////////////////////////////
void CClassTwo::PhaseB(void)
{
	switch( m_nPhaseState )
	{
	case STATE_RECEIVING:
		if( strnicmp( m_szLineBuff, "OK", 2 ) == 0 )
		{
			m_bGotEOP = false;
			m_bGotMPS = false;
			m_bGotEOM = false;

			// On to phase C
			DoWrite( CLASSTWO_DR, CLASSTWO_DR_SIZE, true );
			SetState( STATE_PHASE_C );
			m_FaxFile.WriteFileHeader();
			SignalEvent( EVENT_START_TRAINING );
		} 
		else if( strnicmp( m_szLineBuff, CLASSTWO_CONNECT, CLASSTWO_CONNECT_SIZE ) == 0 )
		{
			SignalEvent( EVENT_START_RECV );
		}
		else if( strnicmp( m_szLineBuff, CLASSTWO_TSI, CLASSTWO_TSI_SIZE ) == 0 )
		{
			OnCSI();
		}
		else if( strnicmp( m_szLineBuff, CLASSTWO_DCS, CLASSTWO_DCS_SIZE ) == 0 )
		{
			OnDCS();
		}
		else if( strnicmp( m_szLineBuff, CLASSTWO_NSS, CLASSTWO_NSS_SIZE ) == 0 )
		{
			OnNSS();
		}
		else if( strnicmp( m_szLineBuff, CLASSTWO_HNGUP, CLASSTWO_HNGUP_SIZE ) == 0 )
		{
			OnFHNG();
		}
		break;

	case STATE_SENDING:
		if( strnicmp( m_szLineBuff, "OK", 2 ) == 0 )
		{
			// Check DIS and re-set parameters if necessar
			if( m_bGotDIS && m_bResendFaxParams )
			{
				SetFaxParams( true );
				m_nPhaseState = STATE_RESET_PARAMS;
			}
			else
			{
				// On to Phase C
				DoWrite( CLASSTWO_DT, CLASSTWO_DT_SIZE, true );
				SetState( STATE_PHASE_C );
				m_bGotDCS = false;
				SignalEvent( EVENT_START_TRAINING );
				m_bLastPageGood = false;
			}
		} 
		else if( strnicmp( m_szLineBuff, CLASSTWO_CSI, CLASSTWO_CSI_SIZE ) == 0 )
		{
			OnCSI();
		}
		else if( strnicmp( m_szLineBuff, CLASSTWO_DIS, CLASSTWO_DIS_SIZE ) == 0 )
		{
			OnDIS();
		}
		else if( strnicmp( m_szLineBuff, CLASSTWO_NSF, CLASSTWO_NSF_SIZE ) == 0 )
		{
			OnNSF();
		}
		else if( strnicmp( m_szLineBuff, CLASSTWO_HNGUP, CLASSTWO_HNGUP_SIZE ) == 0 )
		{
			OnFHNG();
		}
		break;

	case STATE_RESET_PARAMS:
		if( strnicmp( m_szLineBuff, "OK", 2 ) == 0 )
		{

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
av在线这里只有精品| 色狠狠色噜噜噜综合网| 玖玖九九国产精品| 性做久久久久久免费观看欧美| 亚洲另类春色校园小说| 亚洲丝袜另类动漫二区| 亚洲视频一区在线| 亚洲欧美色综合| 亚洲精品久久7777| 一区二区三区成人| 午夜激情一区二区三区| 肉色丝袜一区二区| 日本亚洲视频在线| 极品美女销魂一区二区三区免费 | 亚洲免费av高清| 欧美日韩中文一区| 欧美日韩国产a| 欧美一二三在线| 日韩精品一区在线观看| 久久综合九色综合欧美亚洲| 久久免费午夜影院| 中文字幕不卡在线观看| 麻豆91在线看| 精品在线观看视频| 国产aⅴ精品一区二区三区色成熟| 国产成人在线电影| 91视频在线观看免费| 欧美性受xxxx黑人xyx| 欧美一区二区黄| 久久网这里都是精品| 中文字幕一区二区5566日韩| 一区二区三区日韩| 免费成人深夜小野草| 国产综合一区二区| 不卡欧美aaaaa| 欧美三级韩国三级日本一级| 日韩欧美亚洲国产另类| 久久精品亚洲乱码伦伦中文| 亚洲男同性视频| 日韩高清一区在线| 亚洲国产成人av| 日韩女优电影在线观看| 欧日韩精品视频| 在线播放/欧美激情| 久久精品在线免费观看| 一区二区三区高清不卡| 久久狠狠亚洲综合| 91亚洲精品久久久蜜桃网站| 欧美三级电影在线看| 久久久亚洲精华液精华液精华液 | 精品国产乱码久久久久久久久| 国产欧美日本一区二区三区| 一区二区三区影院| 激情欧美一区二区三区在线观看| 成人亚洲一区二区一| 欧美精品九九99久久| 国产亚洲精品超碰| 五月婷婷色综合| 成人激情小说乱人伦| 欧美一级欧美一级在线播放| 成人欧美一区二区三区白人| 奇米影视一区二区三区小说| 成人app网站| 日韩久久久精品| 亚洲精品亚洲人成人网在线播放| 日本网站在线观看一区二区三区 | 依依成人精品视频| 欧美性色黄大片| 精品国产免费久久| 亚洲国产精品嫩草影院| 成人午夜在线视频| 欧美不卡一区二区| 亚洲一区二区三区在线| 成av人片一区二区| 精品国产污网站| 五月激情综合网| 一道本成人在线| 国产欧美一区二区三区在线看蜜臀| 亚欧色一区w666天堂| 91免费在线视频观看| 国产三级一区二区| 极品美女销魂一区二区三区免费| 欧美丝袜丝nylons| 中文字幕视频一区| 懂色av一区二区三区免费看| 欧美岛国在线观看| 免费人成黄页网站在线一区二区| 色88888久久久久久影院按摩| 中文天堂在线一区| 国产福利精品导航| 久久久影视传媒| 久久国产精品露脸对白| 91精品国产乱码久久蜜臀| 亚洲自拍偷拍综合| 91成人免费网站| 依依成人综合视频| 色偷偷一区二区三区| 亚洲视频在线观看一区| 成人午夜免费av| 欧美极品另类videosde| 国产成人在线视频网站| 国产欧美视频一区二区三区| 九九九精品视频| 欧美α欧美αv大片| 精品一区二区综合| 欧美精品一区二区在线播放| 久久69国产一区二区蜜臀| 日韩视频在线永久播放| 久久99精品久久久| 久久一夜天堂av一区二区三区| 久久不见久久见免费视频1| 精品奇米国产一区二区三区| 麻豆91精品91久久久的内涵| 欧美电影免费观看高清完整版| 久久99国产精品麻豆| 久久精品在线观看| 不卡在线视频中文字幕| 久久精品国产一区二区| 日韩一区二区三区av| 久久精品免费观看| 久久先锋影音av鲁色资源网| 国产91清纯白嫩初高中在线观看| 国产欧美精品国产国产专区| 成人a级免费电影| 亚洲精品国产第一综合99久久| 欧美伊人久久久久久久久影院| 日韩精品视频网站| 精品播放一区二区| 成人av资源在线观看| 亚洲综合一区在线| 欧美一区二区三区人| 国产露脸91国语对白| 亚洲欧洲日韩在线| 欧美日韩一区二区三区四区五区| 日本不卡一二三区黄网| 久久无码av三级| 色婷婷久久久久swag精品| 午夜久久电影网| 久久日韩粉嫩一区二区三区| av一区二区三区在线| 亚洲综合久久久久| 日韩欧美国产三级电影视频| 成人精品小蝌蚪| 亚洲va天堂va国产va久| 久久伊99综合婷婷久久伊| 97se狠狠狠综合亚洲狠狠| 日韩黄色片在线观看| 日本一区二区三区高清不卡| 91久久一区二区| 久草在线在线精品观看| 1024精品合集| 日韩午夜在线观看视频| 99国产麻豆精品| 麻豆免费精品视频| 亚洲天堂精品在线观看| 日韩欧美中文字幕公布| av一区二区不卡| 美女视频免费一区| 亚洲男人电影天堂| 久久亚洲二区三区| 欧美亚洲国产怡红院影院| 国产自产高清不卡| 亚洲图片欧美视频| 国产日产精品1区| 欧美精品日韩综合在线| 成人蜜臀av电影| 毛片不卡一区二区| 亚洲综合区在线| 亚洲国产成人自拍| 欧美xxxxxxxx| 欧美视频在线播放| 成熟亚洲日本毛茸茸凸凹| 日本欧美一区二区| 亚洲摸摸操操av| 国产欧美一区二区三区在线看蜜臀 | 99re免费视频精品全部| 激情深爱一区二区| 亚洲成人三级小说| 国产又黄又大久久| 亚洲一区在线电影| 亚洲欧洲国产专区| 国产午夜精品美女毛片视频| 91精品蜜臀在线一区尤物| 色婷婷综合五月| 国产精品1024久久| 美国十次综合导航| 午夜精品视频在线观看| 亚洲免费在线播放| 国产精品美女一区二区三区| 久久众筹精品私拍模特| 日韩区在线观看| 欧美卡1卡2卡| 欧美日韩一本到| 日本精品一级二级| 91麻豆精品视频| 波多野结衣亚洲| 成人av影院在线| 成人av在线影院| 成人福利在线看| 成人的网站免费观看|