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

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

?? modem.cpp

?? fax engine 傳真引擎 relay fax 的開源項目 商業軟件使用 高質量 高可靠
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/*****************************************************************************
* 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 CModem build the message loop of an independent thread
// into CCommPort and handle communication with other threads.
//
////////////////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "Modem.h"


char* CModem::s_CommonCmds[COMMAND_COUNT] =
{
	"",						// COMMAND_NONE, 
	"ATZ",					// COMMAND_INIT, 
	"AT&F&C1&D2S7=55S0=0",	// COMMAND_SETUP_STRING
	"ATE0",					// COMMAND_DISABLE_ECHO, 
	"ATL%d",				// COMMAND_SET_SPKR_VOL, 
	"ATM%d",				// COMMAND_SET_SPKR_MODE, 
	"AT+FCLASS=1",			// COMMAND_SET_FCLASS_1
	"AT+FCLASS=1.0",		// COMMAND_SET_FCLASS_1_0
	"AT+FCLASS=2",			// COMMAND_SET_FCLASS_2
	"AT+FCLASS=2.0",		// COMMAND_SET_FCLASS_2_0
	"AT+FCLASS=2.1",		// COMMAND_SET_FCLASS_2_1
	"AT+FTM=?",				// COMMAND_QUERY_SEND_SPEEDS,
	"AT+FRM=?",				// COMMAND_QUERY_RECEIVE_SPEEDS,
	"",						// COMMAND_SET_LOCAL_ID,
	"",						// COMMAND_SET_RECV
	"",						// COMMAND_SET_BIT_ORDER
	"AT+FLO=%d",			// COMMAND_SET_FLOW_CONTROL
	"",						// COMMAND_SET_HDLC_REPORTING
	"",						// COMMAND_SET_FAX_PARAMS
	"ATDT%s",				// COMMAND_DIAL
	"ATH0",					// COMMAND_HANGUP
	"ATA",					// COMMAND_ANSWER
	"AT+FCLASS=?",			// COMMAND_QUERY_FCLASS
	"ATI0",					// COMMAND_QUERY_PRODUCT_CODE
	"ATI3",					// COMMAND_QUERY_MANUFACTURER
	"AT+FDCC=?",			// COMMAND_QUERY_CLASS2_CAP
	"AT+FMFR?",				// COMMAND_QUERY_CLASS2_MANUFACT
	"AT+FMDL?",				// COMMAND_QUERY_CLASS2_MODEL
	"AT+FCC=?",				// COMMAND_QUERY_CLASS2_0_CAP
	"AT+FMI?",				// COMMAND_QUERY_CLASS2_0_MANUFACT
	"AT+FMM?",				// COMMAND_QUERY_CLASS2_0_MODEL
};


//MODEM_EVENT_HANDLER_FUNC CModem::s_ModemEventHandlerFunc = NULL;

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CModem::CModem()
{
	m_bConnected = false;
	m_sInitString.assign( s_CommonCmds[COMMAND_SETUP_STRING] );
	m_nSpkrVol = 0;
	m_nSpkrMode = 0;
	m_nState = STATE_NONE;
	m_nLastCommand = COMMAND_NONE;
	m_nRingCount = 0;
	m_nAnswerOnRing = 2;
	m_bReceiving = false;
	m_nWaitTimeout = 1000;
	m_bEnableReceive = true;
	InitHDLC();
	m_bHDLCMode = false;
	m_bGotOK = false;
	m_bECMSupported = true;
	m_nSendEncoding = FAXAPI_ENC_CCITT_T6;
	ZeroMemory( m_ParamMatrix, sizeof(m_ParamMatrix) );
	m_nSendBaud = FAXAPI_BAUD_14400;
	m_nRecvBaud = FAXAPI_BAUD_14400;
	m_nMaxSendBaud = FAXAPI_BAUD_33600;
	m_nMaxRecvBaud = FAXAPI_BAUD_33600;
	m_bPulseDialing = false;
	m_FaxThreadID = 0;
	m_nMaxPageRetries = 0; // no limit
	m_nMaxPageRetriesPageNo = -1;
	m_bTerminated = false;
	m_bLastPageGood = false;
}

CModem::~CModem()
{
}

//////////////////////////////////////////////////////////////////////
// Initialize - start the modem thread
//////////////////////////////////////////////////////////////////////
void CModem::Initialize( HANDLE hStop, DWORD faxThreadID )
{
	m_FaxThreadID = faxThreadID;
	AddEvent( hStop );
	AddEvent( m_ReadOverlapped.hEvent );
	AddEvent( m_WriteOverlapped.hEvent );
	AddEvent( m_CommEventOverlapped.hEvent );

	StartThread();
}


//////////////////////////////////////////////////////////////////////
// SetPort
//////////////////////////////////////////////////////////////////////
void CModem::SetPort( char* szPort )
{
	m_sPort = szPort;
}

//////////////////////////////////////////////////////////////////////
// Disconnect - send a message to initiate the disconnect
//////////////////////////////////////////////////////////////////////
void CModem::Disconnect(void)
{
	PostMsg( WM_MODEM_DISCONNECT, 0, 0 );
}

//////////////////////////////////////////////////////////////////////
// Disconnect - send a message to initiate the disconnect
//////////////////////////////////////////////////////////////////////
void CModem::RecvFax( char* szFaxFile )
{
	InternalModemMsg* pMsg = new InternalModemMsg;

	strcpy( pMsg->szFile, szFaxFile );
//	m_FaxFile.SetFileName( szFaxFile );

	PostMsg( WM_MODEM_RECVFAX, (WPARAM)pMsg, 0 );
}

//////////////////////////////////////////////////////////////////////
// SetInitString
//////////////////////////////////////////////////////////////////////
void CModem::SetInitString( LPCSTR szString )
{
	m_sInitString.assign( szString );
}


//////////////////////////////////////////////////////////////////////
// SetInitString
//////////////////////////////////////////////////////////////////////
void CModem::ChangeCSID( LPCSTR szString )
{
	InternalModemMsg* pMsg = new InternalModemMsg;

	strcpy( pMsg->szNumber, szString );

	PostMsg( WM_MODEM_SETID, (WPARAM)pMsg, 0 );
}

//////////////////////////////////////////////////////////////////////
// SetInitString
//////////////////////////////////////////////////////////////////////
void CModem::SetCSID( LPCSTR szString )
{
	char szID[21];
	int nLen = 0;

	while( *szString && nLen < 20 )
	{
		if( *szString > 31 && *szString < 127 && *szString != 34 )
		{
			szID[nLen++] = toupper(*szString);
		}
		szString++;
	}
	szID[nLen] = 0;

	m_sLocalCSID.assign( szID );
}

//////////////////////////////////////////////////////////////////////
// Connect - send a message to initiate the disconnect
//////////////////////////////////////////////////////////////////////
void CModem::SetSpkrParams( int nSpkrVol, int nSpkrMode )
{
	m_nSpkrVol = nSpkrVol;
	m_nSpkrMode = nSpkrMode;
}


bool CModem::SendFax( char* szNumberToDial, char* szFaxFile )
{
	InternalModemMsg* pMsg = new InternalModemMsg;

	strcpy( pMsg->szNumber, szNumberToDial );
	strcpy( pMsg->szFile, szFaxFile );

//	m_sNumberToDial.assign( szNumberToDial );
//	m_FaxFile.SetFileName( szFaxFile );

	PostMsg( WM_MODEM_SENDFAX, (WPARAM)pMsg, 0 );

	return true;
}



//////////////////////////////////////////////////////////////////////
// OnStartup
//////////////////////////////////////////////////////////////////////
bool CModem::OnStartup( void )
{
	m_sThreadName.assign( "Modem Thread" );

	if( CThread::OnStartup() )
	{
		InitWindow();

		PostMsg( WM_MODEM_CONNECT, 0, 0 );

		return true;
	}

	return false;
}


//////////////////////////////////////////////////////////////////////
// OnShutdown - called before thread exits
//////////////////////////////////////////////////////////////////////
void CModem::OnShutdown( void )
{
	CThread::OnShutdown();

	ShutdownWindow();

	if( m_bConnected )
	{
		DisconnectPort();
		m_nState = STATE_NONE;
		m_bConnected = false;
	}
}


//////////////////////////////////////////////////////////////////////
// Handle message - return true if WM_QUIT received
//////////////////////////////////////////////////////////////////////
bool CModem::OnMsg( MSG* pMsg )
{
	if( CThread::OnMsg( pMsg ) )
		return true;

	m_dwActivityTimer = GetTickCount();

	switch( pMsg->message )
	{
	case WM_MODEM_CONNECT:
		OnConnectMsg();
		break;

	case WM_MODEM_DISCONNECT:
		OnDisconnectMsg();
		break;

	case WM_MODEM_SENDFAX:
		OnSendFaxMsg( pMsg );
		break;

	case WM_MODEM_RECVFAX:
		OnRecvFaxMsg( pMsg );
		break;

	case WM_MODEM_ABORTFAX:
		OnAbortFaxMsg();
		break;

	case WM_MODEM_CLEARRINGCNT:
		m_nRingCount = 0;
		m_nState = STATE_IDLE;
		break;

	case WM_MODEM_SETID:
		{
			InternalModemMsg* pModemMsg = (InternalModemMsg*) pMsg->wParam;

			if( pModemMsg)
			{
				SetCSID( pModemMsg->szNumber );
			}
			delete pModemMsg;
		}
		break;
	}

	return false;
}


//////////////////////////////////////////////////////////////////////
// Handle event - return true if cancel event set
//////////////////////////////////////////////////////////////////////
bool CModem::OnEvent( int nIndex )
{

	switch( nIndex )
	{
	case 0:
		// Cancel event
		OnDisconnectMsg();
		return true;

	case 1:
		// Read event
		ReadEventSignalled();
		return false;

	case 2:
		// Write event
		WriteEventSignalled();
		return false;

	case 3:
		// WaitComm event
		WaitCommEventSignalled();
		return false;

	case 4:
		// Disconnect Event
		return true;
	}

	return false;
}



//////////////////////////////////////////////////////////////////////
// OnConnectMsg
//////////////////////////////////////////////////////////////////////
void CModem::OnConnectMsg(void)
{
	if( !m_bConnected )
	{
		m_nRingCount = 0;
		m_bConnected = ConnectPort( m_sLastError );

		if( !m_bConnected )
		{
			SignalEvent( EVENT_ERROR );
			m_nState = STATE_NONE;
			SignalEvent( EVENT_DISCONNECT );
			ExitAndDelete();
		}
	}
}

//////////////////////////////////////////////////////////////////////
// OnDisconnectMsg
//////////////////////////////////////////////////////////////////////
void CModem::OnDisconnectMsg(void)
{
	if( m_bConnected )
	{
		if( OnDisconnect() )
		{
			DisconnectPort();
			m_nState = STATE_NONE;
			SignalEvent( EVENT_DISCONNECT );
			m_bConnected = false;
			ExitAndDelete();
		}
	}
}


//////////////////////////////////////////////////////////////////////
// OnSendFaxMsg
//////////////////////////////////////////////////////////////////////
void CModem::OnSendFaxMsg( MSG* pMsg )
{
	InternalModemMsg* pModemMsg = (InternalModemMsg*) pMsg->wParam;

	if( pModemMsg == NULL)
		return;

	m_sNumberToDial.assign( pModemMsg->szNumber );
	m_FaxFile.SetFileName( pModemMsg->szFile );	

	delete pModemMsg;

	m_nMaxPageRetriesPageNo = -1;
}

void CModem::OnRecvFaxMsg( MSG* pMsg )
{
	InternalModemMsg* pModemMsg = (InternalModemMsg*) pMsg->wParam;

	if( pModemMsg == NULL)
		return;

	m_FaxFile.SetFileName( pModemMsg->szFile );	

	delete pModemMsg;
}


void CModem::OnAbortFaxMsg(void)
{

}

//////////////////////////////////////////////////////////////////////
// SendCommand
//////////////////////////////////////////////////////////////////////
void CModem::SendCommand( int nCommand, char* szCmdString )
{
	char szWorkBuffer[256];
	char* szCmd = NULL;


	if( szCmdString )
	{
		szCmd = szCmdString;
	}
	else if( nCommand == COMMAND_SETUP_STRING )
	{
		szCmd = (char*)m_sInitString.c_str();
	}
	else 
	{
		switch( nCommand )
		{
		case COMMAND_SET_SPKR_VOL:
			wsprintf( szWorkBuffer, s_CommonCmds[nCommand], m_nSpkrVol );
			szCmd = szWorkBuffer;
			break;

		case COMMAND_SET_SPKR_MODE:
			wsprintf( szWorkBuffer, s_CommonCmds[nCommand], m_nSpkrMode );
			szCmd = szWorkBuffer;
			break;

		case COMMAND_DIAL:
			if( m_bPulseDialing )
			{
				wsprintf( szWorkBuffer, "ATDP%s", m_sNumberToDial.c_str() );
			}
			else
			{
				wsprintf( szWorkBuffer, "ATDT%s", m_sNumberToDial.c_str() );
			}
			szCmd = szWorkBuffer;
			break;

		case COMMAND_SET_FLOW_CONTROL:
			wsprintf( szWorkBuffer, s_CommonCmds[nCommand], m_bCTSFlowControl ? 2 : 1 );
			szCmd = szWorkBuffer;
			break;

		default:
			if( nCommand >= 0 && nCommand < COMMAND_COUNT )
			{
				szCmd = s_CommonCmds[nCommand];
			}
			break;
		}
	}
	
	if( szCmd )
	{
		m_nLastCommand = nCommand;
		m_LastCommandString.assign( szCmd );

		m_bGotOK = false;
		KillTimer( TIMER_COMMAND );
		if( (nCommand != COMMAND_DIAL) && (nCommand != COMMAND_ANSWER) )
		{
			SetTimer( TIMER_COMMAND, 2000 );
		}

//		m_nLastCommandTickCount = GetTickCount();

		DoWrite( szCmd, strlen(szCmd), true );

		//wsprintf( szWorkBuffer, "Sent Command: %s\n", m_LastCommandString.c_str() );
		//OutputDebugString( szWorkBuffer );
	}
}

//////////////////////////////////////////////////////////////////////
// SignalEvent
//////////////////////////////////////////////////////////////////////
void CModem::SignalEvent( int nEvent, char info )
{
	FaxApiModemMsg* pMsg = new FaxApiModemMsg;

	memset( pMsg, 0, sizeof(FaxApiModemMsg) );

	pMsg->m_cbSize = sizeof(FaxApiModemMsg);

	switch( nEvent )
	{
	case EVENT_ERROR:
		strncpy( pMsg->sz, m_sLastError.c_str(), FAXAPI_MODEMMSG_INFOLEN );
		pMsg->sz[FAXAPI_MODEMMSG_INFOLEN-1] = '\0';
		break;

	case EVENT_RECV_DIS:
	case EVENT_SENT_DIS:
		memcpy( &pMsg->p, &m_DISParams.p, sizeof(FaxApiParameters) );
		break;

	case EVENT_RECV_DCS:
	case EVENT_SENT_DCS:
		memcpy( &pMsg->p, &m_DCSParams.p, sizeof(FaxApiParameters) );
		break;

	case EVENT_GOT_REMOTEID:
		strcpy( pMsg->sz, m_sRemoteCSID.c_str() );
		trimws( pMsg->sz );
		break;

	case EVENT_START_PAGE:
		pMsg->t.nPages = GetPageCount();
		break;

	case EVENT_TERMINATE:
		strncpy( pMsg->sz, m_sLastError.c_str(), FAXAPI_MODEMMSG_INFOLEN );
		pMsg->sz[FAXAPI_MODEMMSG_INFOLEN-1] = '\0';
		pMsg->t.nPages = GetPageCount();
		pMsg->t.nSuccessful = (m_bSuccessful && GetPageCount() > 0 ) ? 1 : 0;
		break;

	case EVENT_CALLERID:
		strncpy( pMsg->sz, m_szLineBuff, FAXAPI_MODEMMSG_INFOLEN );
		pMsg->szID[FAXAPI_MODEMMSG_INFOLEN-1] = '\0';
		break;

	default:
		pMsg->sz[0] = info;
		break;
	}

	SendModemMessage( nEvent, pMsg );
}


void CModem::SignalEventString( int nEvent, LPCSTR szMsg )
{
	FaxApiModemMsg* pMsg = new FaxApiModemMsg;

	memset( pMsg, 0, sizeof(FaxApiModemMsg) );

	pMsg->m_cbSize = sizeof(FaxApiModemMsg);

	strncpy( pMsg->sz, szMsg, FAXAPI_MODEMMSG_INFOLEN );
	pMsg->sz[FAXAPI_MODEMMSG_INFOLEN-1] = '\0';

	SendModemMessage( nEvent, pMsg );
}

void CModem::SendModemMessage( int nEvent, FaxApiModemMsg* pMsg )
{
	strcpy( pMsg->szID, m_sPort.c_str() );
	PostThreadMessage( m_FaxThreadID, WM_MODEM_MESSAGE, (WPARAM)pMsg, nEvent );
}

//////////////////////////////////////////////////////////////////////
// ErrorUnexpectedResponse
//////////////////////////////////////////////////////////////////////
void CModem::ErrorUnexpectedResponse( void )
{
	char szMsg[512];
	wsprintf( szMsg, (char*)LoadString(GEN_RECEIVED_IN_RESPONSE_TO).c_str(), m_szLineBuff, m_LastCommandString.c_str() );
	m_sLastError.assign( szMsg );
	SignalEvent( EVENT_ERROR );
}

//////////////////////////////////////////////////////////////////////
// ErrorConnectResponse
//////////////////////////////////////////////////////////////////////
void CModem::ErrorConnectResponse( void )
{
	// For now, use the return string as the error description
	m_sLastError.assign( m_szLineBuff );
	SignalEvent( EVENT_ERROR );
}


void CModem::ProcSupportedSpeeds( LPSTR lpSpeeds, bool bSend )
{
	LPSTR lpTok;
	int val;

	char szDefSpeeds[64];

	if( stricmp( m_szLineBuff, "ERROR" ) == 0 )
	{
		strcpy( szDefSpeeds, "3,24,48,72,73,74,96,97,98,121,122,145,146" );
		lpSpeeds = szDefSpeeds;
	}


	bool* bSupported = (bSend) ? &m_bSendSupported[0] : &m_bRecvSupported[0];

	ZeroMemory( bSupported, sizeof(bool) * MAX_CLS1SPEEDS );

	lpTok = strtok( lpSpeeds, ",");

	while( lpTok ) {
		val = atoi( lpTok );
		
		switch( val ) {
			case 24:
				bSupported[0] = 1;
				break;

			case 48:
				bSupported[1] = 1;
				break;
		
			case 72:
				bSupported[2] = 1;
				break;

			case 73:
				bSupported[6] = 1;
				break;
						
			case 96:
				bSupported[3] = 1;
				break;

			case 97:
				bSupported[7] = 1;
				break;

			case 121:
				bSupported[8] = 1;
				bSupported[4] = 1;
				break;

			case 145:
				bSupported[9] = 1;
				bSupported[5] = 1;
				break;
		}

		lpTok = strtok( NULL, "," );
	}


	if( bSend )
	{

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品女同一区二区三区| 欧美日韩国产一区二区三区地区| 欧美不卡123| 极品瑜伽女神91| 久久免费电影网| k8久久久一区二区三区| 亚洲靠逼com| 国产欧美日产一区| 国产精品99久久久久| 中文av一区二区| 欧美三区免费完整视频在线观看| 亚洲444eee在线观看| 欧美videos中文字幕| 丁香婷婷综合色啪| 亚洲精品乱码久久久久久日本蜜臀| 色菇凉天天综合网| 欧美aⅴ一区二区三区视频| 亚洲精品在线三区| 色婷婷久久综合| 麻豆国产精品视频| 亚洲日本在线看| 91精品国产综合久久国产大片| 国产黑丝在线一区二区三区| 亚洲免费三区一区二区| 日韩欧美视频在线| 91免费看片在线观看| 久久99国产精品麻豆| 亚洲色图20p| 26uuu欧美日本| 欧美中文字幕一区| 国产不卡高清在线观看视频| 亚洲一区二区三区小说| 久久久亚洲午夜电影| 欧洲精品中文字幕| 高清不卡在线观看av| 亚洲电影一级黄| 1区2区3区精品视频| 欧美电视剧免费观看| 色综合网色综合| 国产精品中文字幕欧美| 视频在线观看国产精品| 最新欧美精品一区二区三区| 精品久久一二三区| 欧美日韩一区二区三区在线| 不卡一区二区中文字幕| 另类成人小视频在线| 亚洲一区二区视频在线| 五月婷婷综合在线| 国产精品国产a| 久久精品日韩一区二区三区| 91精品国产欧美日韩| 色老汉av一区二区三区| 大美女一区二区三区| 九九视频精品免费| 日本午夜精品一区二区三区电影| 亚洲精品ww久久久久久p站 | 国产综合一区二区| 亚洲国产成人91porn| 亚洲日本中文字幕区| 国产欧美一区二区精品婷婷| 精品欧美久久久| 日韩欧美国产综合| 欧美一级二级三级乱码| 欧美视频在线一区| 91福利在线看| 91久久精品一区二区三| 91视频国产观看| 91色porny蝌蚪| 91精品91久久久中77777| 91网站最新地址| 91浏览器在线视频| 一本色道亚洲精品aⅴ| 91网站在线播放| 色婷婷av一区二区三区之一色屋| 99久久精品免费精品国产| 成+人+亚洲+综合天堂| 成人99免费视频| 成人av网站免费| 色综合网色综合| 欧美日韩一卡二卡三卡 | 亚州成人在线电影| 亚洲欧美二区三区| 亚洲在线视频网站| 午夜精品爽啪视频| 美女看a上一区| 韩国三级中文字幕hd久久精品| 狠狠色伊人亚洲综合成人| 国内精品久久久久影院色| 国产精品一二三四五| 成人av在线一区二区三区| 91亚洲国产成人精品一区二三| 99视频有精品| 欧美图区在线视频| 欧美一级在线免费| 国产亚洲成年网址在线观看| 国产精品国产三级国产aⅴ原创| 亚洲美女视频一区| 日韩在线一区二区| 国产麻豆视频一区| 99久久精品一区二区| 欧美性videosxxxxx| 日韩欧美激情在线| 国产精品区一区二区三| 一区二区三区四区国产精品| 日韩av网站在线观看| 国产精品亚洲人在线观看| 色域天天综合网| 欧美一区二区三区在线观看| 久久精品人人做| 一区二区三区国产豹纹内裤在线| 日韩高清一区在线| 国产大陆a不卡| 欧美日韩一区成人| 国产欧美日本一区二区三区| 一区二区激情小说| 国产精品一区二区无线| 欧美综合亚洲图片综合区| 日韩精品专区在线影院观看 | 美女视频网站黄色亚洲| 成人精品一区二区三区中文字幕| 一本大道久久a久久综合婷婷| 7777精品伊人久久久大香线蕉 | 91精品综合久久久久久| 亚洲国产精品高清| 日韩成人精品在线观看| 91网页版在线| 国产午夜精品一区二区| 亚洲一区二区五区| 风间由美一区二区三区在线观看 | 欧美一卡2卡三卡4卡5免费| 国产精品久久久久一区| 久久精品国产精品青草| 色8久久精品久久久久久蜜| 精品福利一区二区三区| 午夜伦欧美伦电影理论片| 成人午夜大片免费观看| 日韩一区国产二区欧美三区| 亚洲自拍偷拍综合| 波波电影院一区二区三区| 日韩欧美www| 亚洲成av人片www| 日本精品一区二区三区高清 | 午夜精彩视频在线观看不卡| 成人在线视频首页| 2020国产精品自拍| 日本不卡123| 在线观看91av| 一区二区三区欧美视频| 成人免费视频网站在线观看| 精品国产a毛片| 麻豆精品一区二区| 91 com成人网| 亚洲成年人网站在线观看| 日本乱人伦一区| 亚洲人成在线观看一区二区| 成人aaaa免费全部观看| 国产日韩高清在线| 国产成人在线视频网址| 26uuu亚洲综合色欧美| 精品中文字幕一区二区| 日韩欧美国产wwwww| 美女在线观看视频一区二区| 91精品欧美福利在线观看| 秋霞成人午夜伦在线观看| 91精品国产免费久久综合| 蜜桃一区二区三区在线观看| 欧美一级久久久久久久大片| 日本欧美一区二区三区乱码 | 91美女片黄在线观看91美女| 国产精品激情偷乱一区二区∴| 成人小视频免费观看| 中文字幕av一区 二区| av亚洲精华国产精华精华| 中文字幕日韩一区| 色狠狠色狠狠综合| 午夜精品一区二区三区三上悠亚| 欧美人体做爰大胆视频| 日韩**一区毛片| 久久综合九色综合久久久精品综合| 国产在线麻豆精品观看| 久久久99精品免费观看| www.欧美日韩| 亚洲一区二区三区视频在线播放| 欧美三级电影一区| 蜜臂av日日欢夜夜爽一区| 欧美精品一区二区三区很污很色的| 国产高清精品网站| 亚洲色欲色欲www| 欧美妇女性影城| 国产专区欧美精品| ...av二区三区久久精品| 欧美亚洲综合另类| 久久成人久久爱| 中文字幕一区二区三区不卡 | 中文字幕欧美一| 欧美日韩午夜影院| 国内精品久久久久影院一蜜桃| 中文字幕制服丝袜一区二区三区| 欧美视频一区二区在线观看| 麻豆久久一区二区|