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

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

?? mydocument.cpp

?? 配套《網(wǎng)絡(luò)通信編程實用案例精選》源代碼。
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
#include "stdafx.h"

#include "SiteDownload.h"
#include "MyDocument.h"
#include "MyView.h"

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


/////////////////////////////////////////////////////////////////////////////
// CMyDoc

IMPLEMENT_DYNCREATE(CMyDoc, CDocument)

BEGIN_MESSAGE_MAP(CMyDoc, CDocument)
	//{{AFX_MSG_MAP(CMyDoc)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()


/////////////////////////////////////////////////////////////////////////////
// CMyDoc construction/destruction

CMyDoc::CMyDoc()
{
	m_Options.nMaxDepth = 3;
	m_Options.nMaxPages = 0;
	m_Options.bFixupLinks = TRUE;
	m_Options.bContents = TRUE;
	m_Options.bMultimedia = TRUE;
	m_Options.bOffsiteLinks = TRUE;

	// 設(shè)置哈希表尺寸
	m_arrPagesDone.InitHashTable(1200);
	m_arrMediaDone.InitHashTable(2400);

	m_bProjectLoaded = FALSE;//空項目
	m_bAutoMode = FALSE;

	m_nLevel = 0;//處在第零層
}

CMyDoc::~CMyDoc()
{
	try
	{
		ClearCacheMaps();
	}
	catch(...)
	{
	}
}

//處理打開的新文檔,這個函數(shù)只在程序剛執(zhí)行的時候調(diào)用一次
BOOL CMyDoc::OnNewDocument()
{

	static bFirstTime = TRUE;

	if(bFirstTime)
	{
		bFirstTime = FALSE;

		CString strDefName;
		strDefName.LoadString(IDS_NO_PROJECT);
		SetTitle(strDefName);

		if (!CDocument::OnNewDocument())
			return FALSE;
		return TRUE;
	}

	if (!CDocument::OnNewDocument())
		return FALSE;

	m_bProjectLoaded = TRUE;
	m_strStartPage.Empty();
	m_nGottenPageCount = 0;
	m_nGottenFileCount = 0;
	m_nQueuedPageCount = 0;
	m_nTotalBytes = 0;

	POSITION pos = GetFirstViewPosition();
	CMyView* pView = (CMyView *) GetNextView(pos);
	return TRUE;
}

//打開一個文件
BOOL CMyDoc::OnOpenDocument(LPCTSTR lpszPathName) 
{
	POSITION pos = GetFirstViewPosition();
	CMyView* pView = (CMyView *) GetNextView(pos);

	// 先要保存當前的項目
	SaveModified();
	//清空樹形控件顯示的內(nèi)容
	pView->ClearTree();

	if (!CDocument::OnOpenDocument(lpszPathName))
		return FALSE;

	SetPathName(lpszPathName);
	m_strDirectory = CInternetDownload::SplitFileName(lpszPathName,
				CInternetDownload::DRIVE|CInternetDownload::PATH|CInternetDownload::FNAME)+"\\";

	SetTitle(CInternetDownload::SplitFileName(lpszPathName,CInternetDownload::FNAME|CInternetDownload::EXT));
	m_bProjectLoaded = TRUE;

	SetModifiedFlag(TRUE);

	return TRUE;
}

//保存修改的信息
BOOL CMyDoc::SaveModified() 
{
	if(IsModified())
		return CDocument::DoFileSave();
	return(TRUE);
}

//判斷用戶是否可以安全的退出程序
BOOL CMyDoc::CanCloseFrame(CFrameWnd* pFrame) 
{
	POSITION pos = GetFirstViewPosition();
	CMyView* pView = (CMyView *) GetNextView(pos);

	return(!pView->GetSnagging());
}

//重置一個新的文檔:所有的文件信息和統(tǒng)計信息都需要重置
void CMyDoc::Reset(LPCTSTR lpszProjName)
{
	CString strNewProjName;
		
	if(lpszProjName)
		strNewProjName = lpszProjName;

	strNewProjName.LoadString(IDS_NO_PROJECT);
	m_strPathName.Empty();
	m_strDirectory.Empty();
	m_bProjectLoaded = FALSE;
	SetModifiedFlag(FALSE);
	SetTitle(strNewProjName);

	m_strStartPage.Empty();
	m_nGottenPageCount = 0;
	m_nGottenFileCount = 0;
	m_nQueuedPageCount = 0;
	m_nTotalBytes = 0;

	POSITION pos = GetFirstViewPosition();
	CMyView* pView = (CMyView *) GetNextView(pos);
}

//保存然后關(guān)閉文檔
void CMyDoc::OnCloseDocument() 
{
	SaveModified();
	CDocument::OnCloseDocument();
}

//得到項目下載的配置信息
void CMyDoc::GetOptions(CConfigure& Options)
{
	Options.nMaxDepth = m_Options.nMaxDepth;
	Options.nMaxPages = m_Options.nMaxPages;
	Options.bFixupLinks = m_Options.bFixupLinks;
	Options.bContents = m_Options.bContents;
	Options.bMultimedia = m_Options.bMultimedia;
	Options.bOffsiteLinks = m_Options.bOffsiteLinks;
}

//設(shè)置項目下載的配置信息
void CMyDoc::SetOptions(CConfigure& Options) 
{ 
	m_Options.nMaxDepth = Options.nMaxDepth;
	m_Options.nMaxPages = Options.nMaxPages;
	m_Options.bFixupLinks = Options.bFixupLinks;
	m_Options.bContents = Options.bContents;
	m_Options.bMultimedia = Options.bMultimedia;
	m_Options.bOffsiteLinks = Options.bOffsiteLinks;
}

//文檔信息的串行化
void CMyDoc::Serialize(CArchive& ar)
{
	POSITION pos = GetFirstViewPosition();
	CMyView* pView = (CMyView *) GetNextView(pos);	

	if (ar.IsStoring())
	{
		ar << m_nGottenPageCount;
		ar << m_nGottenFileCount;
		ar << m_nTotalBytes;
	}
	else
	{
		ar >> m_nGottenPageCount;
		ar >> m_nGottenFileCount;
		ar >> m_nTotalBytes;
		m_nQueuedPageCount = 0;
	}

	m_Options.Serialize(ar);

	// 視圖中的樹形控件信息也要串行化
	pView->SerializeTree(ar);

	m_nLevel = 0;
}


//使用CInternetDownload類或者直接從硬盤上得到想要的具體的頁面。
//如果頁面是從網(wǎng)絡(luò)中得到的,那么將它保存在硬盤中,并且使用分析器分析該頁面所包含的鏈接和多媒體資源。
BOOL CMyDoc::GetPage(CString& strPage, CString& strFileName, LINKS& linkEntry)
{
	BYTE *pbyBuffer = m_byBuffer;
	int nLen;
	BOOL bPageInCache = FALSE;
	BOOL bRet = FALSE;
	CInternetDownload::RESULTS ret;
	MAP_FILES* pMapEntry;

	//初始化鏈接棧的入口信息
	linkEntry.arrLinks.SetSize(0,100);
	linkEntry.arrMedia.SetSize(0,100);
	linkEntry.arrOffsite.SetSize(0,100);
	linkEntry.nIndex = 0;

	//判斷是否應(yīng)該從網(wǎng)絡(luò)中得到該頁面,還是從本地硬盤中得到
	if(ShouldGetPage(strPage,pMapEntry))//網(wǎng)絡(luò)資源
	{
		ret = m_Inet.GetPage(strPage,&pbyBuffer,nLen,TRUE);
		if(ret == CInternetDownload::SUCCESS)
		{
			bRet = TRUE;
			m_nTotalBytes += nLen;
		}
	}
	else//硬盤資源
	{
		CFile fileIn;
		CFileException ex;

		strFileName = pMapEntry->strFileName;
		CString strTempFileName = m_strDirectory+strFileName;

		if(fileIn.Open(strTempFileName,CFile::modeRead,&ex))
		{
			nLen = fileIn.Read(pbyBuffer,MAX_INET_BUFFER);
			fileIn.Close();
			bRet = TRUE;
		}

		// 標注我們不是從CInternetDownload中得到的頁面
		bPageInCache = TRUE;
	}

	if(bRet)
	{
		// 用分析器分析該頁面所包含的鏈接和媒體信息
		CHTMLFileParser Parser;
		Parser.SetPageURL(strPage);

		if(nLen > MAX_INET_BUFFER)
			nLen = MAX_INET_BUFFER;

		pbyBuffer = m_byBuffer;
		Parser.SetFixupMode(FALSE);
		Parser.ResetArrays();
		Parser.SetGetMedia(m_Options.bMultimedia);
		Parser.ParseText((char *)pbyBuffer,nLen);
		m_strPageTitle = Parser.GetTitle();

		//把新下載的頁面保存到硬盤中
		if(!bPageInCache)
		{
			pbyBuffer = m_byBuffer;
			m_Inet.SaveFile(strFileName,m_strDirectory,pbyBuffer,nLen);
		}

		// 判斷鏈接的數(shù)目
		int nLinks;
		BOOL bOffsite;
		CString strNewPage;
		nLinks = Parser.GetLinks().GetSize();

		//評估每一個鏈接然后決定是否將他們放入下載的隊列中
		for(int i = 0; i < nLinks; i++)
		{
			// 得到這個鏈接的url
			strNewPage = Parser.GetLinks().GetAt(i);

			// 得到這個頁面的偏移鏈接號
			bOffsite = Parser.GetOffsiteFlags().GetAt(i);

			// 判斷是否應(yīng)該將其放入下載隊列中
			if(ShouldQueuePage(strNewPage,bOffsite)) 
			{
				linkEntry.arrLinks.Add(strNewPage);
				linkEntry.arrOffsite.Add(bOffsite);
			}
		}

		//是否是舊頁面
		if(!bPageInCache)
		{
			int nMedia = Parser.GetMedia().GetSize();
			CString strMedia;
			for(i = 0; i < nMedia; i++)
			{
				strMedia = Parser.GetMedia().GetAt(i);
				if(ShouldGetMedia(strMedia,pMapEntry))
					linkEntry.arrMedia.Add(strMedia);
			}
		}

		bRet = TRUE;
	}

	return(bRet);
}

//使用CInternetDownload類得到網(wǎng)頁中的多媒體項,并保存
BOOL CMyDoc::GetMedia(CString& strMedia, CString& strFileName)
{
	BYTE *pbyBuffer = m_byBuffer;
	int nLen;
	BOOL bRet = FALSE;

	CInternetDownload::RESULTS ret;

	// 從Inet中得到文件
	ret	= m_Inet.GetFile(strMedia,&pbyBuffer,nLen);

	if(ret == CInternetDownload::SUCCESS)
	{
		m_nTotalBytes += nLen;
		// 保存文件
		m_Inet.SaveFile(strFileName,m_strDirectory,pbyBuffer,nLen);
		bRet = TRUE;
	}
	return bRet;
}

//判斷這個頁面是否已經(jīng)通過INet下載了,如果已經(jīng)下載了,
//那么就用一個指針指向返回頁面列表的該頁面
BOOL CMyDoc::ShouldGetPage(CString& strPage, MAP_FILES*& pMapEntry)
{
	CString strNewPage = strPage;
	strNewPage.MakeLower();
	strNewPage = strNewPage.SpanExcluding("#");
	return(!m_arrPagesDone.Lookup(strNewPage,(CObject *&) pMapEntry));
}

//判斷這個多媒體項是否已經(jīng)通過INet下載了,如果已經(jīng)下載了,
//那么就用一個指針指向返回多媒體項列表的該元素
BOOL CMyDoc::ShouldGetMedia(CString& strMedia, MAP_FILES*& pMapEntry)
{
	CString strNewMedia = strMedia;
	strNewMedia.MakeLower();
	strNewMedia = strNewMedia.SpanExcluding("#");
	return(!m_arrMediaDone.Lookup(strNewMedia,(CObject *&) pMapEntry));
}

// Returns TRUE if the specified page should be added to the download queue.
// This basically means that the page is not in the list of queued pages at a 
// lower level or that it hasn't been previously downloaded at a lower level.
// If the above criteria are met -- it thens check to see if this is an offsite
// page and determines whether it should be downloaded.

BOOL CMyDoc::ShouldQueuePage(CString& strNewPage, BOOL bOffsite)
{
	MAP_FILES* pMapEntry;

	// Have we downloaded this page yet???
	if(ShouldGetPage(strNewPage,pMapEntry))
	{
		// No...then look for it in the queue of waiting pages at previous
		// levels
		for(int i = 0; i < m_nLevel; i++)
		{
			for(int j = 0; j < m_aLinks[i].arrLinks.GetSize(); j++)
			{
				if(strNewPage == m_aLinks[i].arrLinks.GetAt(j))
					return(FALSE);
			}
		}
	}
	else
	{
		// Yes...did we follow its links all the way to the 
		// maximum level?
		if(m_Options.nMaxDepth && m_nLevel >= pMapEntry->nMaxLevel)
			return(TRUE);
	}

	// Make sure that we allow offsite links for offsite pages
	if(bOffsite && !m_Options.bOffsiteLinks)
		return(FALSE);

	return(TRUE);
}

// Initializes the specified link stack entry
void CMyDoc::ResetLink(int nLevel)
{
	m_aLinks[nLevel].nIndex = 0;
	m_aLinks[nLevel].arrLinks.SetSize(0,100);
	m_aLinks[nLevel].arrMedia.SetSize(0,100);
	m_aLinks[nLevel].arrOffsite.SetSize(0,100);
}



// The workhouse thread routine that recursively navigates linked web pages and
// retrieves each of them along with their multimedia files.  This process is
// spawned indirectrly in RecursiveDownload() using the AfxBeginThread() call.
UINT CMyDoc::DownloadThread(LPVOID lpvData)
{
	HTREEITEM htreePage;

	// Static methods can't have a "this" pointer to get the parent class's 
	// pointer which the call passes as a parameter
	CMyDoc *pThis = (CMyDoc *) lpvData;

	int nMaxDepth = pThis->m_Options.nMaxDepth-1;
	int nCount;
	CString strPage = pThis->m_strStartPage;
	CString strFileName;
	CString strLogData;
	CString strText;
	POSITION pos = pThis->GetFirstViewPosition();
	CMyView* pView = (CMyView *) pThis->GetNextView(pos);	
	BOOL bIsOffsite = FALSE;

	// Establish the WinInet Session
	try
	{
		pThis->m_Inet.OpenSession(pThis->m_Options.bUseProxy,pThis->m_Options.strProxyName);
	}
	catch(...)
	{
	}

	// Create the log file
	pThis->m_fileLog.Open(pThis->m_strDirectory+"sitesnag.log",
						CFile::modeCreate|CFile::modeWrite);

	// Create the table of contents file
	if(pThis->m_Options.bContents)
	{
		pThis->m_fileContents.Open(pThis->m_strDirectory+"SnagCon1.htm",
								CFile::modeCreate|CFile::modeWrite);

		// Add the TOC to the list of downloaded files 
		pThis->SetPageCacheEntry("snagcon1.htm","SnagCon1.htm",0);

		// Add the TOC to the tree control
		CString strTitle = "Contents Page 1 (SnagCon1.htm)";
		pView->AddTreeContent(strTitle);

		// Write the beginning of the first TOC page
		strText = "<HTML>\r\n<HEAD>\r\n<TITLE>SiteSnagger Contents</TITLE>\r\n";
		strText += "</HEAD\r\n<BODY>\r\n";
		strText += "<H1><center>SiteSnagger Table of Contents</center><br><br></H1>\r\n<UL>\r\n";
		pThis->m_fileContents.Write(strText,strText.GetLength());
	}

	// Initialize the index for the first link level, start with the first level
	pThis->m_nLevel = 0;
	pThis->m_aLinks[0].nIndex = 0;
	pThis->m_Inet.ResetUniqueCount();

	// Recusively search web links until either we've searched them all (m_nLevel is
	// -1 or if the user decides to abort
	while(pThis->m_nLevel >= 0 )
	{
		// Get the name of a new page in a second dimension element
		if(pThis->m_aLinks[pThis->m_nLevel].nIndex > 0)
		{
			// Save the URL and whether it's offsite
			int nIndex = pThis->m_aLinks[pThis->m_nLevel].nIndex;
			strPage = pThis->m_aLinks[pThis->m_nLevel].arrLinks.GetAt(nIndex);
			bIsOffsite = pThis->m_aLinks[pThis->m_nLevel].arrOffsite.GetAt(nIndex);

			// Bump to the next level so we can get the page's links
			pThis->m_nLevel++;
		}

		// Generate a unique filename for this page
		pThis->m_Inet.GenerateUniqueFileName(strPage,strFileName,
						pThis->m_arrPagesDone,TRUE);

		// Write a log entry for this page -- leave room for the result
		strLogData.Format("[%02d] Getting page %s ",pThis->m_nLevel+1,strPage);
		pThis->m_fileLog.Write(strLogData,strLogData.GetLength());

		CString strOrigPage = strPage;

		// Get the page from Inet or from local file
		if(pThis->GetPage(strPage,strFileName,pThis->m_aLinks[pThis->m_nLevel]))
		{
			MAP_FILES *pMapEntry;
		
			// Get the count of links
			nCount = pThis->m_aLinks[pThis->m_nLevel].arrLinks.GetSize();

			// Did we just download this new page??
			if(pThis->ShouldGetPage(strPage,pMapEntry))
			{
				// Yes, add it to the list of retrieved pages
				pThis->SetPageCacheEntry(strPage,strFileName,pThis->m_nLevel);

				// If the page was redirected then add its original name too
				if(strPage != strOrigPage && pThis->ShouldGetPage(strOrigPage,pMapEntry))
					pThis->SetPageCacheEntry(strOrigPage,strFileName,pThis->m_nLevel);

				// Prefix offsite pages with their URL (i.e. http://www.xxx.yyy)
				if(bIsOffsite)
					strText = strPage+" - ";
				else strText.Empty();

				// Add the page's title and local filename 
				strText += pThis->m_strPageTitle+"  ("+
							strFileName.SpanExcluding("#")+")";

				htreePage = pView->AddTreePage(strText,bIsOffsite);
				strText.Format("<a href=%s><li> %s (%s - %s)<br>\r\n",strFileName,
									pThis->m_strPageTitle,
									strFileName.SpanExcluding("#"),strPage);
				pThis->m_fileContents.Write(strText,strText.GetLength());

				// Update the statistics
				pThis->m_nGottenPageCount++;
				pThis->m_nGottenFileCount++;
			}
			else
			{
				// Set the new depth level if necessary
				if(nMaxDepth)
				{
					// Have we gone to the max level yet???
					if(pThis->m_nLevel >= pMapEntry->nMaxLevel)
						nCount = 0;
					else pMapEntry->nMaxLevel = pThis->m_nLevel;
				}
			}

			// Log the results

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品嫩草99a| 欧美va亚洲va在线观看蝴蝶网| 欧美国产1区2区| 成人丝袜18视频在线观看| 国产精品全国免费观看高清| 国产成+人+日韩+欧美+亚洲 | 日韩精品一区二区三区三区免费| 奇米色一区二区| 精品国免费一区二区三区| 国产福利电影一区二区三区| 国产免费久久精品| 在线亚洲一区二区| 日韩国产一区二| 国产日韩欧美高清在线| 99re免费视频精品全部| 性感美女极品91精品| 日韩写真欧美这视频| 成人性视频网站| 香蕉加勒比综合久久| 久久影视一区二区| 成人av资源站| 视频一区在线播放| 国产欧美精品一区二区三区四区| 欧美在线不卡一区| 久久66热re国产| 亚洲精品五月天| 亚洲精品在线观看视频| 91久久奴性调教| 精品一区二区三区免费毛片爱| 国产精品高潮呻吟| 337p亚洲精品色噜噜| 国产iv一区二区三区| 亚洲成人精品影院| 国产精品蜜臀av| 日韩色视频在线观看| 91麻豆国产香蕉久久精品| 老司机午夜精品99久久| 亚洲视频狠狠干| 久久久久久久久久久久久夜| 欧美少妇bbb| 不卡的av网站| 久久99国产精品久久99果冻传媒| 亚洲丝袜自拍清纯另类| 精品国产制服丝袜高跟| 欧美日韩精品欧美日韩精品| 成年人午夜久久久| 国产毛片精品一区| 视频一区在线视频| 亚洲狠狠爱一区二区三区| 国产视频911| 26uuu色噜噜精品一区| 欧美性三三影院| 91麻豆文化传媒在线观看| 国产精品一品二品| 免费日韩伦理电影| 午夜久久久久久| 一区二区三区中文字幕电影| 中文子幕无线码一区tr| 欧美精品一区二| 日韩欧美你懂的| 欧美一区二区久久| 3d成人h动漫网站入口| 欧美视频在线不卡| 在线观看av不卡| 91免费国产在线| 99久久免费视频.com| 免费成人在线播放| 国产精品国产成人国产三级| 亚洲精品一区二区精华| 911精品产国品一二三产区| 在线精品视频小说1| 99国产精品国产精品毛片| 丁香五精品蜜臀久久久久99网站| 免费观看在线色综合| 日本vs亚洲vs韩国一区三区二区 | 中文字幕中文乱码欧美一区二区| 精品动漫一区二区三区在线观看| 日韩欧美黄色影院| 日韩欧美一级在线播放| 精品电影一区二区| 国产欧美日韩麻豆91| 欧美韩国日本一区| 国产精品嫩草久久久久| 亚洲女人****多毛耸耸8| 亚洲一区二区三区四区在线免费观看| 亚洲精品五月天| 亚洲欧美日韩国产一区二区三区 | 一区二区三区在线视频观看| 亚洲精品一卡二卡| 午夜av电影一区| 极品少妇一区二区三区精品视频| 韩国三级电影一区二区| 成人激情午夜影院| 欧美日韩中文另类| 日韩欧美三级在线| 国产精品欧美综合在线| 亚洲欧洲一区二区在线播放| 亚洲永久免费视频| 奇米888四色在线精品| 国产真实乱偷精品视频免| 91在线视频免费观看| 91精品久久久久久久99蜜桃| 日韩欧美一区中文| 国产精品视频你懂的| 亚洲国产aⅴ成人精品无吗| 蜜桃视频一区二区三区| 成人视屏免费看| 欧美日韩日日夜夜| 欧美精品一区二区精品网| 成人欧美一区二区三区在线播放| 亚洲午夜久久久久久久久久久| 日本在线播放一区二区三区| 成人毛片视频在线观看| 欧美日韩高清影院| 国产精品污网站| 无吗不卡中文字幕| 不卡电影一区二区三区| 91精品国产综合久久福利软件| 国产欧美日韩中文久久| 亚洲成人一区二区| 成人av动漫网站| 欧美一级电影网站| 亚洲欧洲韩国日本视频| 蜜桃视频一区二区三区在线观看 | 国产高清无密码一区二区三区| 色综合久久88色综合天天免费| 欧美tickling网站挠脚心| 亚洲乱码国产乱码精品精的特点| 精品一区二区三区免费视频| 在线看国产一区二区| 欧美激情中文字幕一区二区| 日韩电影在线观看电影| 一本到不卡免费一区二区| 久久九九99视频| 热久久一区二区| 欧美三级一区二区| 国产精品电影院| 国产精品2024| 欧美成人aa大片| 日韩二区三区在线观看| 色婷婷国产精品| 国产精品免费aⅴ片在线观看| 日本成人在线网站| 一本色道久久综合亚洲aⅴ蜜桃 | 日韩有码一区二区三区| 99久免费精品视频在线观看| 日韩免费高清视频| 天堂资源在线中文精品| 色综合天天视频在线观看| 国产网站一区二区| 国产一区欧美二区| 日韩视频免费观看高清完整版在线观看 | 一本久久a久久精品亚洲| 国产欧美中文在线| 黄色成人免费在线| 欧美电影免费观看高清完整版在线| 图片区小说区区亚洲影院| 欧美亚洲国产怡红院影院| 一区二区三区中文字幕在线观看| 99热在这里有精品免费| 国产精品嫩草影院av蜜臀| 岛国一区二区三区| 国产精品久久久久久久久免费桃花| 国产在线精品一区二区| 精品99一区二区| 极品美女销魂一区二区三区免费| 欧美一级xxx| 激情欧美日韩一区二区| 精品国产一区二区精华| 国产一区激情在线| 日本一区二区不卡视频| 成人午夜大片免费观看| 亚洲欧洲精品一区二区三区不卡| 91色综合久久久久婷婷| 一区二区三区日韩在线观看| 在线观看视频一区二区欧美日韩| 亚洲成人精品在线观看| 欧美一区二区精品在线| 激情都市一区二区| 久久久久久电影| 99综合电影在线视频| 亚洲精品乱码久久久久久久久| 色婷婷亚洲婷婷| 日韩电影在线观看一区| 亚洲精品一区二区三区蜜桃下载| 粉嫩在线一区二区三区视频| 国产精品国产三级国产aⅴ中文| 色诱亚洲精品久久久久久| 亚洲成人av一区二区三区| 日韩视频在线永久播放| 国产精品一区二区在线观看网站| 国产精品色噜噜| 欧美日韩一本到| 国产主播一区二区| 亚洲色图都市小说| 91精品国产91久久综合桃花| 国产精品一区二区在线观看网站| 亚洲视频你懂的| 日韩久久久精品| 99精品国产热久久91蜜凸|