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

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

?? ceinet.cpp

?? 這個程序是我編寫的從FTP站點(diǎn)下載文件的wince程序
?? CPP
?? 第 1 頁 / 共 3 頁
字號:

#include "stdafx.h"
#include <wininet.h>
#include <afxtempl.h>

#include <afxmt.h>
#pragma warning(disable: 4706) 
#pragma warning(disable: 4074)	
#include "ceinet.h"	
typedef struct CEtagServiceTable {
	DWORD dwService;
	LPCTSTR pstrIdentifier;
} CESvcTable;

AFX_STATIC_DATA const TCHAR _CEURLftp[] = _T("ftp://");

class CSessionMapPtrToPtr : public CMapPtrToPtr
{
private:
	CCriticalSection m_sect;

public:
	CSessionMapPtrToPtr() { }
	~CSessionMapPtrToPtr() { }

	void SetAt(HINTERNET hInternet, CCEInternetSession* pSess)
	{
		m_sect.Lock();
		CMapPtrToPtr::SetAt(hInternet, pSess);
		m_sect.Unlock();
	}

	void RemoveKey(HINTERNET hInternet)
	{
		m_sect.Lock();
		CMapPtrToPtr::RemoveKey(hInternet);
		m_sect.Unlock();
	}

	BOOL Lookup(HINTERNET hInternet, CCEInternetSession*& refpSession)
	{
		BOOL bRet;
		m_sect.Lock();
		bRet = CMapPtrToPtr::Lookup(hInternet, (void*&) refpSession);
		m_sect.Unlock();
		return bRet;
	}
};

CSessionMapPtrToPtr _CESessionMap;

/////////////////////////////////////////////////////////////////////////////
// Global Functions

bool __stdcall _CEParseURLWorker(LPCTSTR pstrURL,
	LPURL_COMPONENTS lpComponents, DWORD& dwServiceType,
	INTERNET_PORT& nPort, DWORD dwFlags)
{
	// this function will return bogus stuff if lpComponents
	// isn't set up to copy the components

	ASSERT(lpComponents != NULL && pstrURL != NULL);
	if (lpComponents == NULL || pstrURL == NULL)
		return FALSE;
	ASSERT(lpComponents->dwHostNameLength == 0 ||
			lpComponents->lpszHostName != NULL);
	ASSERT(lpComponents->dwUrlPathLength == 0 ||
			lpComponents->lpszUrlPath != NULL);
	ASSERT(lpComponents->dwUserNameLength == 0 ||
			lpComponents->lpszUserName != NULL);
	ASSERT(lpComponents->dwPasswordLength == 0 ||
			lpComponents->lpszPassword != NULL);

	ASSERT(AfxIsValidAddress(lpComponents, sizeof(URL_COMPONENTS), TRUE));

	LPTSTR pstrCanonicalizedURL;
	TCHAR szCanonicalizedURL[INTERNET_MAX_URL_LENGTH];
	DWORD dwNeededLength = INTERNET_MAX_URL_LENGTH;
	BOOL bRetVal;
	BOOL bMustFree = FALSE;
	DWORD dwCanonicalizeFlags = dwFlags &
		(ICU_NO_ENCODE | ICU_DECODE | ICU_NO_META |
		ICU_ENCODE_SPACES_ONLY | ICU_BROWSER_MODE);
	DWORD dwCrackFlags = dwFlags & (ICU_ESCAPE | ICU_USERNAME);

	bRetVal = InternetCanonicalizeUrl(pstrURL, szCanonicalizedURL,
		&dwNeededLength, dwCanonicalizeFlags);

	if (!bRetVal)
	{
		if (::GetLastError() != ERROR_INSUFFICIENT_BUFFER)
			return FALSE;

		pstrCanonicalizedURL = new TCHAR[dwNeededLength];
		bMustFree = TRUE;
		bRetVal = InternetCanonicalizeUrl(pstrURL, pstrCanonicalizedURL,
			&dwNeededLength, dwCanonicalizeFlags);
		if (!bRetVal)
		{
			delete [] pstrCanonicalizedURL;
			return FALSE;
		}
	}
	else
		pstrCanonicalizedURL = szCanonicalizedURL;

	// now that it's safely canonicalized, crack it

	bRetVal = InternetCrackUrl(pstrCanonicalizedURL, 0,
						dwCrackFlags, lpComponents);
	if (bMustFree)
		delete [] pstrCanonicalizedURL;

	// convert to MFC-style service ID

	if (!bRetVal)
		dwServiceType = AFX_INET_SERVICE_UNK;
	else
	{
		nPort = lpComponents->nPort;
		switch (lpComponents->nScheme)
		{
		case INTERNET_SCHEME_FTP:
			dwServiceType = AFX_INET_SERVICE_FTP;
			break;

		case INTERNET_SCHEME_GOPHER:
			dwServiceType = AFX_INET_SERVICE_GOPHER;
			break;

		case INTERNET_SCHEME_HTTP:
			dwServiceType = AFX_INET_SERVICE_HTTP;
			break;

		case INTERNET_SCHEME_HTTPS:
			dwServiceType = AFX_INET_SERVICE_HTTPS;
			break;

		case INTERNET_SCHEME_FILE:
			dwServiceType = AFX_INET_SERVICE_FILE;
			break;

		case INTERNET_SCHEME_NEWS:
			dwServiceType = AFX_INET_SERVICE_NNTP;
			break;

		case INTERNET_SCHEME_MAILTO:
			dwServiceType = AFX_INET_SERVICE_MAILTO;
			break;

		default:
			dwServiceType = AFX_INET_SERVICE_UNK;
		}
	}

	return bRetVal;
}
BOOL __stdcall CEParseURLEx(LPCTSTR pstrURL, DWORD& dwServiceType,
	CString& strServer, CString& strObject, INTERNET_PORT& nPort,
	CString& strUsername, CString& strPassword, DWORD dwFlags/* = 0*/)
{
	dwServiceType = AFX_INET_SERVICE_UNK;

	ASSERT(pstrURL != NULL);
	if (pstrURL == NULL)
		return FALSE;

	URL_COMPONENTS urlComponents;
	memset(&urlComponents, 0, sizeof(URL_COMPONENTS));
	urlComponents.dwStructSize = sizeof(URL_COMPONENTS);

	urlComponents.dwHostNameLength = INTERNET_MAX_HOST_NAME_LENGTH;
	urlComponents.lpszHostName = strServer.GetBuffer(INTERNET_MAX_HOST_NAME_LENGTH+1);
	urlComponents.dwUrlPathLength = INTERNET_MAX_PATH_LENGTH;
	urlComponents.lpszUrlPath = strObject.GetBuffer(INTERNET_MAX_PATH_LENGTH+1);
	urlComponents.dwUserNameLength = INTERNET_MAX_USER_NAME_LENGTH;
	urlComponents.lpszUserName = strUsername.GetBuffer(INTERNET_MAX_USER_NAME_LENGTH+1);
	urlComponents.dwPasswordLength = INTERNET_MAX_PASSWORD_LENGTH;
	urlComponents.lpszPassword = strPassword.GetBuffer(INTERNET_MAX_PASSWORD_LENGTH+1);

	BOOL bRetVal = _CEParseURLWorker(pstrURL, &urlComponents,
					dwServiceType, nPort, dwFlags);

	strServer.ReleaseBuffer();
	strObject.ReleaseBuffer();
	strUsername.ReleaseBuffer();
	strPassword.ReleaseBuffer();
	return bRetVal;
}

BOOL __stdcall CEParseURL(LPCTSTR pstrURL, DWORD& dwServiceType,
	CString& strServer, CString& strObject, INTERNET_PORT& nPort)
{
	dwServiceType = AFX_INET_SERVICE_UNK;

	ASSERT(pstrURL != NULL);
	if (pstrURL == NULL)
		return FALSE;

	URL_COMPONENTS urlComponents;
	memset(&urlComponents, 0, sizeof(URL_COMPONENTS));
	urlComponents.dwStructSize = sizeof(URL_COMPONENTS);

	urlComponents.dwHostNameLength = INTERNET_MAX_URL_LENGTH;
	urlComponents.lpszHostName = strServer.GetBuffer(INTERNET_MAX_URL_LENGTH+1);
	urlComponents.dwUrlPathLength = INTERNET_MAX_URL_LENGTH;
	urlComponents.lpszUrlPath = strObject.GetBuffer(INTERNET_MAX_URL_LENGTH+1);

	BOOL bRetVal = _CEParseURLWorker(pstrURL, &urlComponents,
					dwServiceType, nPort, ICU_BROWSER_MODE);

	strServer.ReleaseBuffer();
	strObject.ReleaseBuffer();
	return bRetVal;
}

DWORD __stdcall CEGetInternetHandleType(HINTERNET hQuery)
{
	DWORD dwServiceType;
	DWORD dwTypeLen = sizeof(dwServiceType);
	if (hQuery == NULL ||
		!InternetQueryOption(hQuery, INTERNET_OPTION_HANDLE_TYPE,
			&dwServiceType, &dwTypeLen))
		return AFX_INET_SERVICE_UNK;
	else
		return dwServiceType;
}

BOOL __stdcall 
_CEQueryCStringInternetOption(HINTERNET hHandle, DWORD dwOption, CString& refString)
{
	DWORD dwLength = 0;
	LPTSTR pstrBuffer;

	if (hHandle == NULL)
		return FALSE;

	if (!InternetQueryOption(hHandle, dwOption, NULL, &dwLength) &&
		GetLastError() != ERROR_INSUFFICIENT_BUFFER)
	{
		refString.Empty();
		return FALSE;
	}

	pstrBuffer = refString.GetBuffer(dwLength);
	BOOL bRet = InternetQueryOption(hHandle, dwOption, pstrBuffer, &dwLength);
	refString.ReleaseBuffer();
	return bRet;
}


#ifdef _DEBUG
void __stdcall CEInternetStatusCallbackDebug(HINTERNET hInternet,
	DWORD dwContext, DWORD dwInternetStatus, LPVOID lpvStatusInformation,
	DWORD dwStatusInformationLength)
{
	UNUSED_ALWAYS(hInternet);
	TRACE1("Internet ctxt=%d: ", dwContext);

	switch (dwInternetStatus)
	{
	case INTERNET_STATUS_RESOLVING_NAME:
		TRACE1("resolving name for %s\n", lpvStatusInformation);
		break;

	case INTERNET_STATUS_NAME_RESOLVED:
		TRACE1("resolved name for %s!\n", lpvStatusInformation);
		break;

	case INTERNET_STATUS_HANDLE_CREATED:
		TRACE1("handle %8.8X created\n", hInternet);
		break;

	case INTERNET_STATUS_CONNECTING_TO_SERVER:
		{
		sockaddr* pSockAddr = (sockaddr*) lpvStatusInformation;
		TRACE1("connecting to socket address \"%s\"\n", pSockAddr->sa_data);
		}
		break;

	case INTERNET_STATUS_REQUEST_SENT:
		TRACE0("request sent!\n");
		break;

	case INTERNET_STATUS_SENDING_REQUEST:
		TRACE0("sending request...\n");
		break;

	case INTERNET_STATUS_CONNECTED_TO_SERVER:
		TRACE0("connected to socket address!\n");
		break;

	case INTERNET_STATUS_RECEIVING_RESPONSE:
		TRACE0("receiving response...\n");
		break;

	case INTERNET_STATUS_RESPONSE_RECEIVED:
		TRACE0("response received!\n");
		break;

	case INTERNET_STATUS_CLOSING_CONNECTION:
		TRACE1("closing connection %8.8X\n", hInternet);
		break;

	case INTERNET_STATUS_CONNECTION_CLOSED:
		TRACE1("connection %8.8X closed!\n", hInternet);
		break;

	case INTERNET_STATUS_HANDLE_CLOSING:
		TRACE1("handle %8.8X closed!\n", hInternet);
		break;

	case INTERNET_STATUS_REQUEST_COMPLETE:
		if (dwStatusInformationLength == sizeof(INTERNET_ASYNC_RESULT))
		{
			INTERNET_ASYNC_RESULT* pResult = (INTERNET_ASYNC_RESULT*) lpvStatusInformation;
			TRACE2("request complete, dwResult = %8.8X, dwError = %8.8X\n",
				pResult->dwResult, pResult->dwError);
		}
		else
			TRACE0("request complete.\n");
		break;

	case INTERNET_STATUS_CTL_RESPONSE_RECEIVED:
	case INTERNET_STATUS_REDIRECT:
	default:
		TRACE1("Unknown status: %d\n", dwInternetStatus);
		break;
	}

	return;
}
#endif // _DEBUG

void __stdcall CEInternetStatusCallback(HINTERNET hInternet, DWORD dwContext,
	DWORD dwInternetStatus, LPVOID lpvStatusInformation,
	DWORD dwStatusInformationLength)
{
	CCEInternetSession* pSession;

	if (_CESessionMap.Lookup(hInternet, pSession))
	{
		pSession->OnStatusCallback(dwContext, dwInternetStatus,
			lpvStatusInformation, dwStatusInformationLength);
	}

	// note that an entry we can't match is simply ignored as
	// WININET can send notifications for handles that we can't
	// see -- such as when using InternetOpenURL()
}

/////////////////////////////////////////////////////////////////////////////
/////CCEInternetSession
//

IMPLEMENT_DYNAMIC(CCEInternetSession, CObject)
CCEInternetSession::~CCEInternetSession()
{
	Close();
}
CCEInternetSession::CCEInternetSession(LPCTSTR pstrAgent /* = NULL */,
	DWORD dwContext /* = 1 */,
	DWORD dwAccessType /* = PRE_CONFIG_INTERNET_ACCESS */,
	LPCTSTR pstrProxyName /* = NULL */,
	LPCTSTR pstrProxyBypass /* = NULL */,
	DWORD dwFlags /* = 0 */)
{
#if defined(_WIN32_WCE)
	ASSERT(dwFlags == 0);
#else // _WIN32_WCE
	ASSERT((dwFlags & INTERNET_FLAG_ASYNC) == 0);
#endif // _WIN32_WCE
	m_bCallbackEnabled = FALSE;
	m_pOldCallback = NULL;

	m_dwContext = dwContext;
	if (pstrAgent == NULL)
		pstrAgent = AfxGetAppName();
	m_hSession = InternetOpen(pstrAgent, dwAccessType,
		pstrProxyName, pstrProxyBypass, dwFlags);

	if (m_hSession == NULL)
		CEThrowInternetException(m_dwContext);
	else
		_CESessionMap.SetAt(m_hSession, this);

#if defined(_WIN32_WCE)
	if((dwContext != 0) && (m_hSession != NULL))
		EnableStatusCallback(TRUE);
#endif // _WIN32_WCE
}

CCEInternetSession::operator HINTERNET() const
{
  return this->m_hSession;
}
void CCEInternetSession::Close()
{
	if (m_bCallbackEnabled)
		EnableStatusCallback(FALSE);

	if (m_hSession != NULL)
	{
		InternetCloseHandle(m_hSession);
		_CESessionMap.RemoveKey(m_hSession);
		m_hSession = NULL;
	}
}
DWORD CCEInternetSession::GetContext() const
{
	return m_dwContext;
}

CCEFtpConnection* CCEInternetSession::GetFtpConnection(LPCTSTR pstrServer,
	LPCTSTR pstrUserName /* = NULL */, LPCTSTR pstrPassword /* = NULL */,
	INTERNET_PORT nPort /* = INTERNET_INVALID_PORT_NUMBER */,
	BOOL bPassive /* = FALSE */)
{
	ASSERT(AfxIsValidString(pstrServer));

	CCEFtpConnection* pReturn = new CCEFtpConnection(this,
		pstrServer, pstrUserName, pstrPassword, m_dwContext,
		nPort, bPassive);
	return pReturn;
}

CStdioFile* CCEInternetSession::OpenURL(LPCTSTR pstrURL,
	DWORD dwContext /* = 0 */, DWORD dwFlags /* = INTERNET_FLAG_TRANSFER_BINARY */,
	LPCTSTR pstrHeaders /* = NULL */, DWORD dwHeadersLength /* = 0 */)
{
	ASSERT(AfxIsValidString(pstrURL));
	ASSERT(dwHeadersLength == 0 || pstrHeaders != NULL);
	ASSERT((dwFlags & INTERNET_FLAG_ASYNC) == 0);

	// must have TRANSFER_BINARY or TRANSFER_ASCII but not both
#define _AFX_TRANSFER_MASK (INTERNET_FLAG_TRANSFER_BINARY | INTERNET_FLAG_TRANSFER_ASCII)
	ASSERT((dwFlags & _AFX_TRANSFER_MASK) != 0);
	ASSERT((dwFlags & _AFX_TRANSFER_MASK) != _AFX_TRANSFER_MASK);
#if defined(_WIN32_WCE)
	ASSERT( (dwFlags & ~(_AFX_TRANSFER_MASK | INTERNET_FLAG_SECURE | INTERNET_FLAG_NO_AUTO_REDIRECT)) == 0 );
#endif
	if (dwContext == 1)
		dwContext = m_dwContext;

	DWORD dwServiceType;
	CString strServer;
	CString strObject;
	INTERNET_PORT nPort;
	CStdioFile* pReturn;

	BOOL bParsed = CEParseURL(pstrURL, dwServiceType, strServer, strObject, nPort);

	// if it turns out to be a file...
	if (bParsed && dwServiceType == AFX_INET_SERVICE_FILE)
	{
		int nMode = CFile::modeRead | CFile::shareCompat;
		if (dwFlags & INTERNET_FLAG_TRANSFER_BINARY)
			nMode |= CFile::typeBinary;
		else
			nMode |= CFile::typeText;

		pReturn = new CStdioFile(strObject, nMode);
	}
	else
	{
		HINTERNET hOpener;

		dwFlags &= ~(INTERNET_FLAG_TRANSFER_BINARY | INTERNET_FLAG_TRANSFER_ASCII);
		hOpener = InternetOpenUrl(m_hSession, pstrURL, pstrHeaders,
			dwHeadersLength, dwFlags, dwContext);

		if (hOpener == NULL)
			CEThrowInternetException(m_dwContext);

		if (!bParsed)
			dwServiceType = CEGetInternetHandleType(hOpener);

		switch (dwServiceType)
		{

/*
#if !defined(_WIN32_WCE_NO_FTP)
			case INTERNET_HANDLE_TYPE_FTP_FILE:
			case AFX_INET_SERVICE_FTP:
				pReturn = new CCEInternetFile(hOpener, m_hSession, strObject,
					strServer, dwContext, TRUE);
				_CESessionMap.SetAt(hOpener, this);
				break;
#endif // _WIN32_WCE_NO_FTP
*/

			case INTERNET_HANDLE_TYPE_HTTP_REQUEST:
			case AFX_INET_SERVICE_HTTP:
			case AFX_INET_SERVICE_HTTPS:
				pReturn = NULL;
				break;

			default:
				TRACE1("Error: Unidentified service type: %8.8X\n", dwServiceType);
				pReturn = NULL;
		}
	}

	return pReturn;
}

BOOL CCEInternetSession::SetOption(DWORD dwOption, LPVOID lpBuffer,
	DWORD dwBufferLength, DWORD dwFlags /* = 0 */)
{
	ASSERT(AfxIsValidAddress(lpBuffer, dwBufferLength, FALSE));
	ASSERT(dwOption >= INTERNET_FIRST_OPTION &&
		dwOption <= INTERNET_LAST_OPTION);
	ASSERT(dwBufferLength != 0);
	ASSERT((dwFlags & INTERNET_FLAG_ASYNC) == 0);

	// bogus flag?
	ASSERT(dwFlags == 0 || WCE_IF(FALSE, ((dwFlags & ISO_VALID_FLAGS) == dwFlags)));

	return WCE_FCTN(InternetSetOptionEx)(m_hSession, dwOption,
		lpBuffer, dwBufferLength, dwFlags);
}

BOOL CCEInternetSession::QueryOption(DWORD dwOption, LPVOID lpBuffer,
	LPDWORD lpdwBufferLength) const
{
	ASSERT(dwOption >= INTERNET_FIRST_OPTION &&
		dwOption <= INTERNET_LAST_OPTION);
	ASSERT_POINTER(lpdwBufferLength, DWORD);
	ASSERT(AfxIsValidAddress(lpBuffer, *lpdwBufferLength));
	ASSERT(*lpdwBufferLength != 0);

	return InternetQueryOption(m_hSession, dwOption,
		lpBuffer, lpdwBufferLength);
}

BOOL CCEInternetSession::QueryOption(DWORD dwOption, DWORD& dwValue) const
{
	DWORD dwLen = sizeof(DWORD);
	return InternetQueryOption(m_hSession, dwOption,
		&dwValue, &dwLen);
}

BOOL CCEInternetSession::QueryOption(DWORD dwOption, CString& refString) const
{
	ASSERT(dwOption >= INTERNET_FIRST_OPTION &&
		dwOption <= INTERNET_LAST_OPTION);

	return _CEQueryCStringInternetOption(m_hSession, dwOption, refString);
}

void CCEInternetSession::OnStatusCallback(DWORD dwContext,
	DWORD dwInternetStatus, LPVOID lpvStatusInformation,
	DWORD dwStatusInformationLength)
{
	ASSERT(m_bCallbackEnabled != NULL);

	if (m_pOldCallback != NULL)
	{
		(*m_pOldCallback)(m_hSession, dwContext, dwInternetStatus,
			lpvStatusInformation, dwStatusInformationLength);
	}
}

BOOL CCEInternetSession::EnableStatusCallback(BOOL bEnable /* = TRUE */)
{
	ASSERT(!bEnable || m_hSession != NULL);
	if (m_hSession == NULL)
		return FALSE;

	BOOL bResult = TRUE;

	if (bEnable)
	{
#if !defined(_WIN32_WCE)
		ASSERT(!m_bCallbackEnabled);
#endif // _WIN32_WCE
		if (!m_bCallbackEnabled)
		{
			INTERNET_STATUS_CALLBACK pRet =
				InternetSetStatusCallback(m_hSession, CEInternetStatusCallback);

			if (pRet != INTERNET_INVALID_STATUS_CALLBACK)
			{
				m_pOldCallback = pRet;
				m_bCallbackEnabled = TRUE;
			}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精品在线观看播放| 日韩一区二区三区三四区视频在线观看 | 久久久99免费| 色婷婷av一区二区三区gif| 国产一区二区美女诱惑| 视频一区二区三区入口| 亚洲免费在线播放| 26uuu国产日韩综合| 欧美电影在哪看比较好| 91美女蜜桃在线| 床上的激情91.| 麻豆精品新av中文字幕| 午夜在线电影亚洲一区| 亚洲欧美成人一区二区三区| 亚洲综合清纯丝袜自拍| 欧美电视剧免费全集观看| 欧美视频在线一区| 91同城在线观看| 成人午夜又粗又硬又大| 久久99深爱久久99精品| 天堂久久一区二区三区| 亚洲激情自拍视频| 综合在线观看色| 国产精品久久影院| 日本一区二区三区久久久久久久久不 | 久久久久久免费| 日韩欧美你懂的| 精品污污网站免费看| 色哟哟在线观看一区二区三区| 成人av在线播放网址| 国产91丝袜在线18| 国产毛片一区二区| 黄页网站大全一区二区| 蜜桃视频一区二区| 免费在线观看一区二区三区| 五月激情六月综合| 亚洲va国产天堂va久久en| 亚洲国产一区二区视频| 亚洲国产wwwccc36天堂| 亚洲aaa精品| 日韩电影免费在线看| 日精品一区二区三区| 丝瓜av网站精品一区二区| 天天影视网天天综合色在线播放| 亚洲午夜三级在线| 午夜伦欧美伦电影理论片| 日日摸夜夜添夜夜添精品视频 | 亚洲成av人影院| 亚洲成人你懂的| 日韩中文字幕av电影| 天使萌一区二区三区免费观看| 琪琪久久久久日韩精品| 精品制服美女丁香| 国产成人精品一区二区三区网站观看| 国产91高潮流白浆在线麻豆| 成人av中文字幕| 91福利视频网站| 91精品久久久久久久99蜜桃| 日韩美女一区二区三区四区| 久久精品在线免费观看| 亚洲欧美色图小说| 日韩高清在线观看| 国产一区二区成人久久免费影院 | 久久er精品视频| 成人黄色国产精品网站大全在线免费观看 | 日韩精品一级二级| 国产精品自在在线| 91网站在线播放| 日韩一级二级三级| 欧美极品少妇xxxxⅹ高跟鞋| 一区二区三区四区激情| 日本欧美一区二区三区乱码| 国产成人精品免费视频网站| 91浏览器打开| 日韩欧美在线观看一区二区三区| 国产偷国产偷亚洲高清人白洁| **网站欧美大片在线观看| 偷拍日韩校园综合在线| 国产麻豆精品视频| 91久久国产最好的精华液| 欧美一二三区精品| 中文字幕综合网| 蜜臀精品久久久久久蜜臀| 国产激情视频一区二区三区欧美 | 成人免费视频播放| 91麻豆精品国产| 国产精品剧情在线亚洲| 日韩制服丝袜先锋影音| 99综合影院在线| 91麻豆精品国产自产在线| 综合网在线视频| 国产一区在线看| 欧美人xxxx| 亚洲人成网站在线| 国精品**一区二区三区在线蜜桃| 欧美午夜不卡视频| 国产欧美精品一区aⅴ影院| 日韩国产欧美一区二区三区| 一本一道久久a久久精品| 精品1区2区在线观看| 亚洲高清在线精品| www.色综合.com| 国产亚洲美州欧州综合国| 天堂成人免费av电影一区| 色综合久久久网| 国产精品女同互慰在线看| 精品一区二区三区免费观看| 欧美精品久久久久久久多人混战 | 亚洲欧洲av一区二区三区久久| 久久国内精品自在自线400部| 欧美性极品少妇| 中文字幕五月欧美| 国产98色在线|日韩| 久久一区二区视频| 免费成人在线观看视频| 欧美日韩一级二级| 一区二区视频免费在线观看| www.在线成人| 国产精品日产欧美久久久久| 国产精品18久久久久久久久久久久 | 免费观看久久久4p| 欧美日韩国产成人在线91| 亚洲一级二级三级| 一本到三区不卡视频| 中文字幕日韩精品一区| 成人免费看视频| 中文字幕在线观看一区二区| 高清国产一区二区三区| 久久久国产午夜精品| 久久99精品久久久久| 精品毛片乱码1区2区3区| 日本aⅴ免费视频一区二区三区| 欧美久久久久久久久中文字幕| 亚洲电影一区二区| 欧美日韩国产一区二区三区地区| 夜夜嗨av一区二区三区中文字幕 | 丝袜亚洲另类欧美综合| 欧美福利一区二区| 三级不卡在线观看| 日韩欧美激情在线| 国产在线麻豆精品观看| 久久欧美中文字幕| 成人激情黄色小说| 亚洲精品国产一区二区三区四区在线 | 国产成人精品亚洲午夜麻豆| 国产精品免费免费| 97成人超碰视| 亚洲一区在线观看免费| 91精品国产综合久久福利软件| 久久精品国产亚洲a| 久久女同精品一区二区| 波多野结衣中文字幕一区 | 精品久久久影院| 懂色av一区二区在线播放| 日韩毛片高清在线播放| 在线一区二区视频| 日韩**一区毛片| 久久精品一区二区| 91在线免费看| 首页亚洲欧美制服丝腿| 欧美精品一区二区三区很污很色的 | 欧美mv日韩mv亚洲| 国产 欧美在线| 亚洲国产视频直播| 精品国精品国产| 91丨porny丨蝌蚪视频| 亚洲成人在线网站| 久久综合久久99| 色婷婷综合久久久中文一区二区| 丝袜国产日韩另类美女| 国产欧美一二三区| 欧美三级日韩三级国产三级| 久久精品国产澳门| 中文字幕一区二区三区四区| 欧美日韩美少妇| 国产成人精品一区二| 午夜精品久久久久久久久久久 | 国产精品久久久久婷婷| 欧美日韩一区二区在线观看视频 | 欧美一二三区在线观看| 99久久99久久综合| 久久97超碰色| 亚洲乱码精品一二三四区日韩在线| 欧美片在线播放| 不卡影院免费观看| 久久精品国产999大香线蕉| 亚洲欧美另类在线| 久久夜色精品国产欧美乱极品| 欧美中文字幕一二三区视频| 国产最新精品免费| 五月天中文字幕一区二区| 久久久不卡网国产精品一区| 717成人午夜免费福利电影| 91在线播放网址| 国产老妇另类xxxxx| 日韩经典一区二区| 亚洲激情自拍视频| 国产精品国产三级国产有无不卡 | 亚洲精品一卡二卡| 久久美女艺术照精彩视频福利播放|