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

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

?? ftpcommandprocessor.cpp

?? vc++網(wǎng)絡(luò)編程教程的源碼。可能對(duì)使用vc網(wǎng)絡(luò)編程的有用。
?? CPP
字號(hào):
/*/////////////////////////////////////////////////////////////////////
FTPclient.cpp (c) GDI 1999
V1.0.0 (10/4/99)
Phil Anderson. philip@gd-ind.com

Simple FTP client functionality. If you have any problems with it,
please tell me about them (or better still e-mail me the fixed
code). Please feel free to use this code however you wish, although
if you make changes please put your name in the source & comment what
you did.

Nothing awesome going on here at all (all sockets are used in
synchronous blocking mode), but it does the following
things WinInet doesn't seem to:
* Supports loads of different firewalls (I think, I don't
  have access to all types so they haven't all been fully
  tested yet)
* Allows you to execute any command on the FTP server
* Adds 10K to your app install rather than 1Mb #;-)

Functions return TRUE if everything went OK, FALSE if there was an,
error. A message describing the outcome (normally the one returned
from the server) will be in m_retmsg on return from the function.
There are a few error msgs in the app's string table that you'll
need to paste into your app, along with this file & FTPclient.h

If you created your app without checking the "Use Windows Sockets"
checkbox in AppWizard, you'll need to add the following bit of code
to you app's InitInstance()

if(!AfxSocketInit())
{
	AfxMessageBox("Could not initialize Windows Sockets!");
	return FALSE;
}

To use:

1/ Create an object of CFTPCommandProcessor.

2/ Use LogOnToServer() to connect to the server. Any arguments
not used (e.g. if you're not using a firewall), pass an empty
string or zero for numeric args. You must pass a server port
number, use the FTP default of 21 if you don't know what it is.

3/ Use MoveFile() to upload/download a file, 1st arg is local file
path, 2nd arg is remote file path, 3rd arg is TRUE for a PASV
connection (required by some firewalls), FALSE otherwise, 4th arg
is TRUE to upload, FALSE to download file. MoveFile only works in
synchronous mode (ie the function will not return 'till the transfer
is finished). File transfers are always of type BINARY.

4/ You can use FTPcommand() to execute FTP commands (eg
FTPcommand("CWD /home/mydir") to change directory on the server),
note that this function will return FALSE unless the server response
is a 200 series code. This should work fine for most FTP commands, 
otherwise you can use WriteStr() and ReadStr() to send commands & 
interpret the response yourself. Use LogOffServer() to disconnect
when done.

/////////////////////////////////////////////////////////////////////*/


#include "stdafx.h"
#include "MyFTPClient.h"
#include "FTPCommandProcessor.h"


#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

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

//構(gòu)造函數(shù),變量初始化
CFTPCommandProcessor::CFTPCommandProcessor()
{
	m_pCtrlsokfile=NULL;
	m_pCtrlTxarch=NULL;
	m_pCtrlRxarch=NULL;
	m_Ctrlsok=NULL;
}


CFTPCommandProcessor::~CFTPCommandProcessor()
{
	CloseControlChannel();
}


//////////////////////////////////////////////////////////////////////
// Public Functions
//////////////////////////////////////////////////////////////////////


// 登錄到服務(wù)器
BOOL CFTPCommandProcessor::LogOnToServer(CString hostname,int hostport,CString username, CString password, CString acct, CString fwhost,CString fwusername, CString fwpassword,int fwport,int logontype) 
{
	int port,logonpoint=0;
	const int LO=-2, ER=-1;
	CString buf,temp;
	const int NUMLOGIN=9; // 支持9種不同的登錄方式
	int logonseq[NUMLOGIN][100] = {
		// 下面的數(shù)組保存了針對(duì)不同防火墻的登錄序列
		{0,LO,3, 1,LO,6, 2,LO,ER}, // 沒(méi)有防火墻
		{3,6,3, 4,6,ER, 5,ER,9, 0,LO,12, 1,LO,15, 2,LO,ER}, // 主機(jī)名
		{3,6,3, 4,6,ER, 6,LO,9, 1,LO,12, 2,LO,ER}, // USER after logon
		{7,3,3, 0,LO,6, 1,LO,9, 2,LO,ER}, //proxy OPEN
		{3,6,3, 4,6,ER, 0,LO,9, 1,LO,12, 2,LO,ER}, // Transparent
		{6,LO,3, 1,LO,6, 2,LO,ER}, // USER with no logon
		{8,6,3, 4,6,ER, 0,LO,9, 1,LO,12, 2,LO,ER}, //USER fireID@remotehost
		{9,ER,3, 1,LO,6, 2,LO,ER}, //USER remoteID@remotehost fireID
		{10,LO,3, 11,LO,6, 2,LO,ER} // USER remoteID@fireID@remotehost
	};

	if(logontype<0||logontype>=NUMLOGIN) return FALSE; // illegal connect code
	if(!logontype) {
		temp=hostname;
		port=hostport;
	}
	else {
		temp=fwhost;
		port=fwport;
	}
	if(hostport!=21) hostname.Format(hostname+":%d",hostport); // 如果端口不是默認(rèn)端口21,則設(shè)定端口
	if(!OpenControlChannel(temp,port)) return false;
	if(!FTPcommand("")) return FALSE; // 獲得連接服務(wù)器初始化信息
	// 獲得登錄類型
	while(1) {
		switch(logonseq[logontype][logonpoint]) {
		case 0:
			temp="USER "+username;
			break;
		case 1:
			temp="PASS "+password;
			break;
		case 2:
			temp="ACCT "+acct;
			break;
		case 3:
			temp="USER "+fwusername;
			break;
		case 4:
			temp="PASS "+fwpassword;
			break;
		case 5:
			temp="SITE "+hostname;
			break;
		case 6:
			temp="USER "+username+"@"+hostname;
			break;
		case 7:
			temp="OPEN "+hostname;
			break;
		case 8:
			temp="USER "+fwusername+"@"+hostname;
			break;
		case 9:
			temp="USER "+username+"@"+hostname+" "+fwusername;
			break;
		case 10:
			temp="USER "+username+"@"+fwusername+"@"+hostname;
			break;
		case 11:
			temp="PASS "+password+"@"+fwpassword;
			break;
		}
		// 發(fā)出命令,獲得響應(yīng)
		if(!WriteStr(temp)) return FALSE;
		if(!ReadStr()) return FALSE;
		// 只有這些響應(yīng)是合法的
		if(m_fc!=2&&m_fc!=3) return FALSE;
		logonpoint=logonseq[logontype][logonpoint+m_fc-1]; //get next command from array
		switch(logonpoint) {
		case ER: // 出現(xiàn)錯(cuò)誤
			m_retmsg.LoadString(IDS_FTPMSG1);
			return FALSE;
		case LO: // L0表示成功登錄
			return TRUE;
		}
	}
}


// 退出服務(wù)器
void CFTPCommandProcessor::LogOffServer() {
	WriteStr("QUIT");
	CloseControlChannel();
}


// 發(fā)送命令到服務(wù)器
BOOL CFTPCommandProcessor::FTPcommand(CString command) {
	if(command!=""&&!WriteStr(command)) return FALSE;
	if((!ReadStr())||(m_fc!=2)) return FALSE;
	return TRUE;
}


// 上載或者下載文件
BOOL CFTPCommandProcessor::MoveFile(CString remotefile, CString localfile,BOOL pasv,BOOL get) 
{
	CString lhost,temp,rhost;
	UINT localsock,serversock,i,j;
	CFile datafile;
	CSocket sockSrvr;
	CAsyncSocket datachannel;
	int num,numread,numsent;
	const int BUFSIZE=4096;
	char cbuf[BUFSIZE];
	DWORD lpArgument=0;
	
	// 打開本地文件
	if(!datafile.Open(localfile,(get?CFile::modeWrite|CFile::modeCreate:CFile::modeRead))) {
		m_retmsg.LoadString(IDS_FTPMSG4);
		return FALSE;
	}
	if(!FTPcommand("TYPE I")) return FALSE; // 請(qǐng)求二進(jìn)制傳輸
	if(pasv) { // 建立被動(dòng)傳輸方式
		if(!FTPcommand("PASV")) return FALSE;
		// 分析出服務(wù)器傳回的臨時(shí)IP地址以及端口號(hào)
		if((i=m_retmsg.Find("("))==-1||(j=m_retmsg.Find(")"))==-1) return FALSE;
		temp=m_retmsg.Mid(i+1,(j-i)-1);
		i=temp.ReverseFind(',');
		serversock=atol(temp.Right(temp.GetLength()-(i+1))); //get ls byte of server socket
		temp=temp.Left(i);
		i=temp.ReverseFind(',');
		serversock+=256*atol(temp.Right(temp.GetLength()-(i+1))); // add ms byte to server socket
		rhost=temp.Left(i);
		while(1) { // 將逗號(hào)轉(zhuǎn)化成點(diǎn)
			if((i=rhost.Find(","))==-1) break;
			rhost.SetAt(i,'.');
		}
	}
	else { // 設(shè)置主動(dòng)的傳輸模式
		m_retmsg.LoadString(IDS_FTPMSG6);
		//獲取本地的ip地址,發(fā)送到服務(wù)器
		if(!m_Ctrlsok->GetSockName(lhost,localsock)) return FALSE;;
		while(1) { // 將IP地址中的點(diǎn)轉(zhuǎn)化成逗號(hào)
			if((i=lhost.Find("."))==-1) break;
			lhost.SetAt(i,',');
		}
		// 創(chuàng)建本地偵聽進(jìn)程
		if((!sockSrvr.Create(0,SOCK_STREAM,NULL))||(!sockSrvr.Listen())) return FALSE;
		if(!sockSrvr.GetSockName(temp,localsock)) return FALSE;// get the port that MFC chose
		// 將端口轉(zhuǎn)化成2字節(jié),然后加入到本地IP地址中
		lhost.Format(lhost+",%d,%d",localsock/256,localsock%256);
		if(!FTPcommand("PORT "+lhost)) return FALSE;// 發(fā)送端口到服務(wù)器
	}
	// 發(fā)送 RETR/STOR 命令到服務(wù)器
	if(!WriteStr((get?"RETR ":"STOR ")+remotefile)) return FALSE;
	if(pasv) {// 如果是PASV模式,則創(chuàng)建socket并初始化外部數(shù)據(jù)連接,即數(shù)據(jù)傳輸通道
		if(!datachannel.Create()) {
			m_retmsg.LoadString(IDS_FTPMSG6);
			return FALSE;
		}
		datachannel.Connect(rhost,serversock); // 試圖異步連接服務(wù)器
	}
	if(!ReadStr()||m_fc!=1) return FALSE; // 獲得服務(wù)器響應(yīng)
	if(!pasv&&!sockSrvr.Accept(datachannel)) return FALSE; // 接收從服務(wù)器來(lái)的內(nèi)部綁定數(shù)據(jù)
	// 連接成功,然后進(jìn)行阻塞式數(shù)據(jù)傳輸
	if((!datachannel.AsyncSelect(0))||(!datachannel.IOCtl(FIONBIO,&lpArgument))) {
		m_retmsg.LoadString(IDS_FTPMSG6);
		return FALSE;
	}
	while(1) { // 開始傳輸數(shù)據(jù)
		TRY {
			if(get) {
				if(!(num=datachannel.Receive(cbuf,BUFSIZE,0))||num==SOCKET_ERROR) break; // (EOF||network error)
				else datafile.Write(cbuf,num);
			}
			else {
				if(!(numread=datafile.Read(cbuf,BUFSIZE))) break; //EOF
				if((numsent=datachannel.Send(cbuf,numread,0))==SOCKET_ERROR) break;
				// 如果發(fā)送出去的字節(jié)少于從文件讀取的字節(jié),則調(diào)整發(fā)送指針,以使得數(shù)據(jù)發(fā)送正確
				if(numread!=numsent) datafile.Seek(numsent-numread,CFile::current);
			}
		}
		CATCH (CException,e) {
			m_retmsg.LoadString(IDS_FTPMSG5);
			return FALSE;
		}
		END_CATCH
	}
	datachannel.Close();
	datafile.Close();
	if(!FTPcommand("")) return FALSE; // 檢查從服務(wù)器發(fā)送的傳輸結(jié)果信息
	return TRUE; // 傳輸成功
}


// 通過(guò)控制通道向服務(wù)器發(fā)送命令
BOOL CFTPCommandProcessor::WriteStr(CString outputstring) 
{
	m_retmsg.LoadString(IDS_FTPMSG6); // pre-load "network error" msg (in case there is one) #-)
	TRY {
		m_pCtrlTxarch->WriteString(outputstring+"\r\n");
		m_pCtrlTxarch->Flush();
	}
	CATCH(CException,e) {
		return FALSE;
	}
	END_CATCH
	return TRUE;
}


// 獲得服務(wù)器的響應(yīng)
BOOL CFTPCommandProcessor::ReadStr() 
{
	int retcode;

	if(!ReadStr2()) return FALSE;

	if(m_retmsg.GetLength()<4||m_retmsg.GetAt(3)!='-') return TRUE;
	retcode=atol(m_retmsg);
	while(1) 
	{ //處理多行服務(wù)器響應(yīng)

		if(m_retmsg.GetLength()>3&&(m_retmsg.GetAt(3)==' '&&atol(m_retmsg)==retcode)) 
			return TRUE;
		if(!ReadStr2()) 
			return FALSE;
	}
}



//////////////////////////////////////////////////////////////////////
// Private functions
//////////////////////////////////////////////////////////////////////


// 從服務(wù)器控制通道獲取一行響應(yīng)
BOOL CFTPCommandProcessor::ReadStr2() 
{
	TRY 
	{
		if(!m_pCtrlRxarch->ReadString(m_retmsg)) 
		{
			m_retmsg.LoadString(IDS_FTPMSG6);
			return FALSE;
		}
	}
	CATCH(CException,e) 
	{
		m_retmsg.LoadString(IDS_FTPMSG6);
		return FALSE;
	}
	END_CATCH
	if(m_retmsg.GetLength()>0) m_fc=m_retmsg.GetAt(0)-48; // get 1st digit of the return code (indicates primary result)
	return TRUE;
}


// 打開控制通道
BOOL CFTPCommandProcessor::OpenControlChannel(CString serverhost,int serverport) 
{
	m_retmsg.LoadString(IDS_FTPMSG2);
	if(!(m_Ctrlsok=new CSocket)) return FALSE;
	if(!(m_Ctrlsok->Create())) return FALSE;
	m_retmsg.LoadString(IDS_FTPMSG3);
	if(!(m_Ctrlsok->Connect(serverhost,serverport))) return FALSE;
	m_retmsg.LoadString(IDS_FTPMSG2);
	if(!(m_pCtrlsokfile=new CSocketFile(m_Ctrlsok))) return FALSE;
	if(!(m_pCtrlRxarch=new CArchive(m_pCtrlsokfile,CArchive::load))) return FALSE;
	if(!(m_pCtrlTxarch=new CArchive(m_pCtrlsokfile,CArchive::store))) return FALSE;
	return TRUE;
}


// 關(guān)閉控制通道
void CFTPCommandProcessor::CloseControlChannel() 
{
	if(m_pCtrlTxarch) delete m_pCtrlTxarch;
	m_pCtrlTxarch=NULL;
	if(m_pCtrlRxarch) delete m_pCtrlRxarch;
	m_pCtrlRxarch=NULL;
	if(m_pCtrlsokfile) delete m_pCtrlsokfile;
	m_pCtrlsokfile=NULL;
	if(m_Ctrlsok) delete m_Ctrlsok;
	m_Ctrlsok=NULL;
	return;
}


//列出文件列表
BOOL CFTPCommandProcessor::List()
{
	CString lhost,temp,rhost;
	UINT localsock,i;
	CFile datafile;
	CSocket sockSrvr;
	CAsyncSocket datachannel;
	int num, sum;
	const int BUFSIZE = 4096;
	DWORD lpArgument=0;
	
	m_buf.RemoveAll();
	m_buf.SetSize(BUFSIZE);
	if(!FTPcommand("TYPE I")) 
		return FALSE; // 請(qǐng)求二進(jìn)制模式

	m_retmsg.LoadString(IDS_FTPMSG6);
	// 獲取本地IP地址
	if(!m_Ctrlsok->GetSockName(lhost,localsock)) 
		return FALSE;;
	while(1) {
		// 將點(diǎn)轉(zhuǎn)化成逗號(hào)
		if((i=lhost.Find("."))==-1) break;
		lhost.SetAt(i,',');
	}
	if((!sockSrvr.Create(0, SOCK_STREAM, NULL))
			|| (!sockSrvr.Listen()))
		return FALSE;
	if(!sockSrvr.GetSockName(temp,localsock))
		return FALSE;
	lhost.Format(lhost+",%d,%d", localsock / 256, localsock % 256);
	if(!FTPcommand("PORT "+lhost)) 
		return FALSE;

	if(!WriteStr("LIST") )
		return FALSE;
	if(!ReadStr())
		return FALSE; 
	if(!sockSrvr.Accept(datachannel)) 
		return FALSE; 
	if((!datachannel.AsyncSelect(0)) || 
		(!datachannel.IOCtl(FIONBIO,&lpArgument))) {
		m_retmsg.LoadString(IDS_FTPMSG6);
		return FALSE;
	}
	sum = 0;
	while(1) { // 獲得數(shù)據(jù)
		TRY {
			if(!(num = datachannel.Receive(m_buf.GetData() + sum, BUFSIZE, 0)) 
				|| num == SOCKET_ERROR)
				break;
			TRACE("Received :%d\n", num);
			Sleep(0);
			sum += num;
			m_buf.SetSize(sum + BUFSIZE);
		}
		CATCH (CException,e) {
			m_retmsg.LoadString(IDS_FTPMSG5);
			return FALSE;
		}
		END_CATCH
	}
	datachannel.Close();
}


void CFTPCommandProcessor::ProcessList()
{
}

BOOL CFTPCommandProcessor::GetLine(int& ndx)
{
	m_strLine.Empty();
	int nBytes = m_buf.GetSize();
	BOOL bLine = FALSE;
	while ( bLine == FALSE && ndx < nBytes )
	{
		char ch = (char)(m_buf.GetAt( ndx ));
		switch( ch )
		{
		case '\n': // 行尾
			bLine = TRUE;
			break;
		default:   // 其他情況
			m_strLine += ch;
			break;
		}
		++ndx;
	}
	m_strLine = m_strLine.Left(m_strLine.GetLength() - 1);
	return bLine;
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区在线视频免费| 91精品国产91久久久久久最新毛片| 欧美一区二视频| 日韩在线播放一区二区| 91精品欧美福利在线观看| 免费成人美女在线观看| 欧美伦理影视网| 日本午夜精品视频在线观看 | 午夜精品福利一区二区三区av| 91精品1区2区| 日本欧美一区二区三区乱码| 免费成人性网站| 久久精品夜色噜噜亚洲aⅴ| 国产成人免费网站| 亚洲精品视频一区| 日韩欧美aaaaaa| 国产99精品国产| 亚洲综合一区二区精品导航| 欧美一区二区福利在线| 成人一区二区三区中文字幕| 亚洲一区二区偷拍精品| 精品久久人人做人人爱| zzijzzij亚洲日本少妇熟睡| 午夜精品免费在线| 国产片一区二区三区| 日本韩国欧美国产| 久久精品国产秦先生| 最新国产精品久久精品| 日韩一本二本av| av色综合久久天堂av综合| 午夜精品爽啪视频| 亚洲欧洲精品天堂一级| 日韩一级片网站| 色综合久久88色综合天天6| 久久精品国产**网站演员| 综合久久一区二区三区| 精品乱人伦一区二区三区| 色悠悠亚洲一区二区| 国产一区二区久久| 日韩精品电影在线观看| 国产精品久久久久久久蜜臀| 日韩三级精品电影久久久| 色综合久久中文字幕| 国产裸体歌舞团一区二区| 亚洲一级在线观看| 国产精品久久久久久久久快鸭| 日韩欧美久久久| 欧美在线看片a免费观看| 国产精品灌醉下药二区| 欧美精品三级日韩久久| 91视频国产资源| 欧美一区二区三区视频在线观看| 国产一区二区三区美女| 五月天视频一区| 亚洲人亚洲人成电影网站色| 精品国产乱码久久久久久老虎| 欧美日韩国产片| 色先锋aa成人| 91视视频在线观看入口直接观看www| 另类的小说在线视频另类成人小视频在线 | 国产电影一区二区三区| 青青草成人在线观看| 午夜伊人狠狠久久| 夜夜嗨av一区二区三区 | 亚洲欧美一区二区三区久本道91 | 精品国产乱码久久久久久浪潮 | 国产经典欧美精品| 久久精品国产色蜜蜜麻豆| 日韩av中文在线观看| 天天av天天翘天天综合网 | 亚洲国产视频在线| 亚洲一区二区三区自拍| 亚洲狠狠丁香婷婷综合久久久| 中文字幕欧美日本乱码一线二线| 久久久久久影视| 久久久噜噜噜久噜久久综合| 久久久亚洲国产美女国产盗摄| 久久网站最新地址| 久久精品网站免费观看| 国产日产欧美一区二区三区| 国产精品视频在线看| 亚洲欧美综合在线精品| 亚洲三级在线播放| 夜夜精品视频一区二区| 亚洲一区视频在线| 亚洲v中文字幕| 美国毛片一区二区三区| 久久国产麻豆精品| 国产一区高清在线| 波多野结衣欧美| 91国偷自产一区二区三区观看| 欧美日韩视频不卡| 91麻豆精品国产91久久久资源速度| 欧美一区二区网站| 国产性天天综合网| 中文字幕永久在线不卡| 亚洲宅男天堂在线观看无病毒| 天堂成人免费av电影一区| 国产专区综合网| 成人精品视频网站| 北岛玲一区二区三区四区| 欧美性欧美巨大黑白大战| 欧美特级限制片免费在线观看| 日韩欧美国产wwwww| 国产日韩精品一区二区浪潮av| 日韩毛片在线免费观看| 天堂一区二区在线| 成人综合在线观看| 欧洲生活片亚洲生活在线观看| 日韩一区国产二区欧美三区| 日本一区二区免费在线观看视频 | 国产偷国产偷亚洲高清人白洁 | 亚洲精品在线三区| 日韩欧美不卡一区| 中文字幕亚洲一区二区va在线| 亚洲一区二区欧美日韩| 国产在线视频一区二区三区| av激情综合网| 日韩免费高清av| 国产女人水真多18毛片18精品视频| 亚洲欧美日本韩国| 国产综合久久久久影院| 在线精品视频一区二区三四| 久久亚洲精品小早川怜子| 亚洲一区二区三区爽爽爽爽爽| 国产成人午夜精品5599| 欧美日韩成人综合天天影院| 中文字幕欧美区| 免费在线看一区| 色网综合在线观看| 中文字幕免费在线观看视频一区| 日韩国产在线观看一区| 一本色道久久综合亚洲91| 久久久久亚洲蜜桃| 青青草91视频| 欧美亚洲国产一区二区三区va| 国产三区在线成人av| 日本女人一区二区三区| 日本韩国欧美一区| 国产精品国产三级国产aⅴ中文| 麻豆国产欧美日韩综合精品二区| 在线亚洲人成电影网站色www| 国产网站一区二区三区| 加勒比av一区二区| 制服.丝袜.亚洲.另类.中文| 亚洲综合在线视频| 国产资源精品在线观看| 日韩西西人体444www| 亚洲国产精品嫩草影院| 91色|porny| 国产精品国产精品国产专区不蜜| 国产一区视频在线看| 欧美sm极限捆绑bd| 免费xxxx性欧美18vr| 91麻豆精品国产91久久久资源速度 | 欧美色爱综合网| 亚洲丝袜另类动漫二区| 成人网页在线观看| 亚洲国产高清aⅴ视频| 国产成人无遮挡在线视频| 久久视频一区二区| 精品无码三级在线观看视频| 精品国产乱码久久久久久浪潮| 久久精品国产免费| 日韩免费电影一区| 国产美女娇喘av呻吟久久| 亚洲精品在线三区| 国产.精品.日韩.另类.中文.在线.播放| 天天综合色天天| 欧美老人xxxx18| 免费看日韩a级影片| 欧美一区二区三区人| 蜜桃久久av一区| 337p日本欧洲亚洲大胆精品| 国内精品国产成人| 中国色在线观看另类| 97久久精品人人做人人爽50路| 亚洲视频免费观看| 欧美日韩亚洲综合在线| 日韩高清不卡在线| 精品国产免费视频| 国产精品123| 亚洲欧美日韩中文播放| 在线一区二区三区做爰视频网站| 亚洲高清免费视频| 欧美一二三四区在线| 顶级嫩模精品视频在线看| 亚洲欧洲av在线| 欧美精品国产精品| 国内精品国产三级国产a久久| 久久久久88色偷偷免费| www.亚洲激情.com| 亚洲欧洲精品一区二区三区 | 91免费在线视频观看| 亚洲第一综合色| 日韩欧美亚洲另类制服综合在线 | 国产精品美女久久久久久2018| 色国产精品一区在线观看| 蜜臂av日日欢夜夜爽一区| 欧美国产日本韩|